@pipedream/twitter 0.3.11 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -71
- package/dist/actions/add-user-to-list/add-user-to-list.d.ts +194 -0
- package/dist/actions/add-user-to-list/add-user-to-list.mjs +44 -0
- package/dist/actions/create-tweet/create-tweet.d.ts +101 -0
- package/dist/actions/create-tweet/create-tweet.mjs +78 -0
- package/dist/actions/delete-tweet/delete-tweet.d.ts +128 -0
- package/dist/actions/delete-tweet/delete-tweet.mjs +29 -0
- package/dist/actions/follow-user/follow-user.d.ts +131 -0
- package/dist/actions/follow-user/follow-user.mjs +37 -0
- package/dist/actions/get-tweet/get-tweet.d.ts +132 -0
- package/dist/actions/get-tweet/get-tweet.mjs +34 -0
- package/dist/actions/get-user/get-user.d.ts +133 -0
- package/dist/actions/get-user/get-user.mjs +40 -0
- package/dist/actions/like-tweet/like-tweet.d.ts +128 -0
- package/dist/actions/like-tweet/like-tweet.mjs +31 -0
- package/dist/actions/list-favorites/list-favorites.d.ts +202 -0
- package/dist/actions/list-favorites/list-favorites.mjs +50 -0
- package/dist/actions/list-followers/list-followers.d.ts +202 -0
- package/dist/actions/list-followers/list-followers.mjs +50 -0
- package/dist/actions/list-lists/list-lists.d.ts +200 -0
- package/dist/actions/list-lists/list-lists.mjs +50 -0
- package/dist/actions/list-mentions/list-mentions.d.ts +200 -0
- package/dist/actions/list-mentions/list-mentions.mjs +50 -0
- package/dist/actions/list-user-tweets/list-user-tweets.d.ts +202 -0
- package/dist/actions/list-user-tweets/list-user-tweets.mjs +50 -0
- package/dist/actions/retweet/retweet.d.ts +128 -0
- package/dist/actions/retweet/retweet.mjs +34 -0
- package/dist/actions/simple-search/simple-search.d.ts +201 -0
- package/dist/actions/simple-search/simple-search.mjs +50 -0
- package/dist/actions/simple-search-in-list/simple-search-in-list.d.ts +206 -0
- package/dist/actions/simple-search-in-list/simple-search-in-list.mjs +58 -0
- package/dist/actions/unfollow-user/unfollow-user.d.ts +131 -0
- package/dist/actions/unfollow-user/unfollow-user.mjs +33 -0
- package/dist/actions/unlike-tweet/unlike-tweet.d.ts +128 -0
- package/dist/actions/unlike-tweet/unlike-tweet.mjs +29 -0
- package/dist/app/twitter.app.d.ts +65 -0
- package/dist/app/twitter.app.mjs +291 -0
- package/dist/common/additionalProps.d.ts +0 -0
- package/dist/common/additionalProps.mjs +138 -0
- package/dist/common/dataFields.d.ts +6 -0
- package/dist/common/dataFields.mjs +80 -0
- package/dist/common/expansions.d.ts +3 -0
- package/dist/common/expansions.mjs +17 -0
- package/dist/common/methods.d.ts +20 -0
- package/dist/common/methods.mjs +69 -0
- package/dist/common/types/fields.d.ts +18 -0
- package/dist/common/types/fields.mjs +1 -0
- package/dist/common/types/requestParams.d.ts +105 -0
- package/dist/common/types/requestParams.mjs +1 -0
- package/dist/common/types/responseSchemas.d.ts +42 -0
- package/dist/common/types/responseSchemas.mjs +1 -0
- package/dist/sources/common/base.d.ts +87 -0
- package/dist/sources/common/base.mjs +60 -0
- package/dist/sources/common/cacheUserId.d.ts +7 -0
- package/dist/sources/common/cacheUserId.mjs +18 -0
- package/dist/sources/common/getItemSummary.d.ts +4 -0
- package/dist/sources/common/getItemSummary.mjs +12 -0
- package/dist/sources/new-follower-of-user/new-follower-of-user.d.ts +149 -0
- package/dist/sources/new-follower-of-user/new-follower-of-user.mjs +45 -0
- package/dist/sources/new-list-followed/new-list-followed.d.ts +149 -0
- package/dist/sources/new-list-followed/new-list-followed.mjs +46 -0
- package/dist/sources/new-tweet-in-list/new-tweet-in-list.d.ts +147 -0
- package/dist/sources/new-tweet-in-list/new-tweet-in-list.mjs +42 -0
- package/dist/sources/new-tweet-liked-by-user/new-tweet-liked-by-user.d.ts +149 -0
- package/dist/sources/new-tweet-liked-by-user/new-tweet-liked-by-user.mjs +45 -0
- package/dist/sources/new-tweet-posted-by-user/new-tweet-posted-by-user.d.ts +149 -0
- package/dist/sources/new-tweet-posted-by-user/new-tweet-posted-by-user.mjs +45 -0
- package/dist/sources/new-tweet-posted-matching-query/new-tweet-posted-matching-query.d.ts +147 -0
- package/dist/sources/new-tweet-posted-matching-query/new-tweet-posted-matching-query.mjs +44 -0
- package/dist/sources/new-unfollower-of-user/new-unfollower-of-user.d.ts +149 -0
- package/dist/sources/new-unfollower-of-user/new-unfollower-of-user.mjs +75 -0
- package/dist/sources/new-user-followed/new-user-followed.d.ts +148 -0
- package/dist/sources/new-user-followed/new-user-followed.mjs +46 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -14
- package/actions/add-user-to-list/add-user-to-list.mjs +0 -62
- package/actions/advanced-search/advanced-search.mjs +0 -113
- package/actions/common.mjs +0 -29
- package/actions/create-tweet/create-tweet.mjs +0 -146
- package/actions/delete-tweet/delete-tweet.mjs +0 -42
- package/actions/follow-user/follow-user.mjs +0 -48
- package/actions/get-tweet/get-tweet.mjs +0 -42
- package/actions/get-user/get-user.mjs +0 -50
- package/actions/like-tweet/like-tweet.mjs +0 -42
- package/actions/list-favorites/list-favorites.mjs +0 -63
- package/actions/list-followers/list-followers.mjs +0 -67
- package/actions/list-lists/list-lists.mjs +0 -69
- package/actions/list-mentions/list-mentions.mjs +0 -55
- package/actions/list-pending-followers/list-pending-followers.mjs +0 -32
- package/actions/list-retweets/list-retweets.mjs +0 -54
- package/actions/list-user-tweets/list-user-tweets.mjs +0 -80
- package/actions/retweet/retweet.mjs +0 -27
- package/actions/simple-search/simple-search.mjs +0 -62
- package/actions/simple-search-in-list/simple-search-in-list.mjs +0 -48
- package/actions/unfollow-user/unfollow-user.mjs +0 -48
- package/actions/unlike-tweet/unlike-tweet.mjs +0 -40
- package/actions/upload-media/upload-media.mjs +0 -122
- package/old.md +0 -169
- package/sources/common/followed.mjs +0 -38
- package/sources/common/followers.mjs +0 -159
- package/sources/common/tweets.mjs +0 -155
- package/sources/language-codes.mjs +0 -742
- package/sources/my-liked-tweets/my-liked-tweets.mjs +0 -30
- package/sources/my-tweets/my-tweets.mjs +0 -48
- package/sources/new-follower-of-me/new-follower-of-me.mjs +0 -69
- package/sources/new-follower-of-user/new-follower-of-user.mjs +0 -25
- package/sources/new-list-followed/new-list-followed.mjs +0 -24
- package/sources/new-trends-by-geo/new-trends-by-geo.mjs +0 -40
- package/sources/new-tweet-in-list/new-tweet-in-list.mjs +0 -49
- package/sources/new-unfollower-of-me/new-unfollower-of-me.mjs +0 -16
- package/sources/new-unfollower-of-user/new-unfollower-of-user.mjs +0 -25
- package/sources/new-user-followed/new-user-followed.mjs +0 -25
- package/sources/search-mentions/search-mentions.mjs +0 -144
- package/sources/tweets-liked-by-user/tweets-liked-by-user.mjs +0 -38
- package/sources/user-tweets/user-tweets.mjs +0 -49
- package/sources/watch-retweets-of-me/watch-retweets-of-me.mjs +0 -36
- package/sources/watch-retweets-of-my-tweet/watch-retweets-of-my-tweet.mjs +0 -44
- package/sources/watch-retweets-of-user-tweet/watch-retweets-of-user-tweet.mjs +0 -34
- package/twitter.app.mjs +0 -1161
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ConfigurationError } from "@pipedream/platform";
|
|
2
|
+
import { LIST_FIELD_OPTIONS, MEDIA_FIELD_OPTIONS, PLACE_FIELD_OPTIONS, POLL_FIELD_OPTIONS, TWEET_FIELD_OPTIONS, USER_FIELD_OPTIONS, } from "./dataFields.mjs";
|
|
3
|
+
import { LIST_EXPANSION_OPTIONS, USER_EXPANSION_OPTIONS, } from "./expansions.mjs";
|
|
4
|
+
export async function getUserId() {
|
|
5
|
+
let { userNameOrId: id } = this;
|
|
6
|
+
if (id === "me" || id === undefined) {
|
|
7
|
+
id = await this.app.getAuthenticatedUserId();
|
|
8
|
+
}
|
|
9
|
+
else if (id.startsWith("@")) {
|
|
10
|
+
const userData = await this.app.getUserByUsername(id.slice(1));
|
|
11
|
+
id = userData?.data?.id;
|
|
12
|
+
if (!id)
|
|
13
|
+
throw new ConfigurationError("**User not found!** Check the `User Name or ID` prop.");
|
|
14
|
+
}
|
|
15
|
+
return id;
|
|
16
|
+
}
|
|
17
|
+
export function getMultiItemSummary(name, length) {
|
|
18
|
+
return length
|
|
19
|
+
? `Successfully obtained ${length} ${name}${length === 1
|
|
20
|
+
? ""
|
|
21
|
+
: "s"}`
|
|
22
|
+
: `No ${name}s were found`;
|
|
23
|
+
}
|
|
24
|
+
export function getListFields() {
|
|
25
|
+
// See comment on "../common/additionalProps.ts"
|
|
26
|
+
/*
|
|
27
|
+
const {
|
|
28
|
+
includeAllFields, expansions, listFields, userFields,
|
|
29
|
+
}: Record<string, string[]> = this;
|
|
30
|
+
*/
|
|
31
|
+
return {
|
|
32
|
+
"expansions": LIST_EXPANSION_OPTIONS.join(),
|
|
33
|
+
"list.fields": LIST_FIELD_OPTIONS.join(),
|
|
34
|
+
"user.fields": USER_FIELD_OPTIONS.join(),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function getTweetFields() {
|
|
38
|
+
/*
|
|
39
|
+
const {
|
|
40
|
+
includeAllFields,
|
|
41
|
+
expansions,
|
|
42
|
+
mediaFields,
|
|
43
|
+
placeFields,
|
|
44
|
+
pollFields,
|
|
45
|
+
tweetFields,
|
|
46
|
+
userFields,
|
|
47
|
+
}: Record<string, string[]> = this;
|
|
48
|
+
*/
|
|
49
|
+
return {
|
|
50
|
+
"expansions": LIST_EXPANSION_OPTIONS.join(),
|
|
51
|
+
"media.fields": MEDIA_FIELD_OPTIONS.join(),
|
|
52
|
+
"place.fields": PLACE_FIELD_OPTIONS.join(),
|
|
53
|
+
"poll.fields": POLL_FIELD_OPTIONS.join(),
|
|
54
|
+
"tweet.fields": TWEET_FIELD_OPTIONS.join(),
|
|
55
|
+
"user.fields": USER_FIELD_OPTIONS.join(),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function getUserFields() {
|
|
59
|
+
/*
|
|
60
|
+
const {
|
|
61
|
+
includeAllFields, expansions, tweetFields, userFields,
|
|
62
|
+
}: Record<string, string[]> = this;
|
|
63
|
+
*/
|
|
64
|
+
return {
|
|
65
|
+
"expansions": USER_EXPANSION_OPTIONS.join(),
|
|
66
|
+
"tweet.fields": TWEET_FIELD_OPTIONS.join(),
|
|
67
|
+
"user.fields": USER_FIELD_OPTIONS.join(),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface ListFields {
|
|
2
|
+
expansions?: string;
|
|
3
|
+
"list.fields"?: string;
|
|
4
|
+
"user.fields"?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface UserFields {
|
|
7
|
+
expansions?: string;
|
|
8
|
+
"tweet.fields"?: string;
|
|
9
|
+
"user.fields"?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface TweetFields {
|
|
12
|
+
expansions?: string;
|
|
13
|
+
"media.fields"?: string;
|
|
14
|
+
"place.fields"?: string;
|
|
15
|
+
"poll.fields"?: string;
|
|
16
|
+
"tweet.fields"?: string;
|
|
17
|
+
"user.fields"?: string;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { Pipedream } from "@pipedream/types";
|
|
2
|
+
import { ListFields, TweetFields, UserFields } from "./fields.js";
|
|
3
|
+
interface PdAxiosRequest {
|
|
4
|
+
$: Pipedream;
|
|
5
|
+
}
|
|
6
|
+
interface PaginationParams {
|
|
7
|
+
maxPerPage?: number;
|
|
8
|
+
maxResults?: number;
|
|
9
|
+
}
|
|
10
|
+
interface PaginatedRequest extends PdAxiosRequest, PaginationParams {
|
|
11
|
+
}
|
|
12
|
+
export interface HttpRequestParams extends PdAxiosRequest {
|
|
13
|
+
url: string;
|
|
14
|
+
method: string;
|
|
15
|
+
data?: object | string;
|
|
16
|
+
params?: object;
|
|
17
|
+
}
|
|
18
|
+
export interface PaginatedRequestParams extends HttpRequestParams, PaginationParams {
|
|
19
|
+
}
|
|
20
|
+
export interface AddUserToListParams extends PdAxiosRequest {
|
|
21
|
+
listId: string;
|
|
22
|
+
data: {
|
|
23
|
+
user_id: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface CreateTweetParams extends PdAxiosRequest {
|
|
27
|
+
data: {
|
|
28
|
+
text: string;
|
|
29
|
+
geo?: {
|
|
30
|
+
place_id: string;
|
|
31
|
+
};
|
|
32
|
+
media?: {
|
|
33
|
+
media_ids: string[];
|
|
34
|
+
tagged_user_ids: string[];
|
|
35
|
+
};
|
|
36
|
+
reply?: {
|
|
37
|
+
exclude_reply_user_ids: string[];
|
|
38
|
+
in_reply_to_tweet_id: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
interface ListId {
|
|
43
|
+
listId: string;
|
|
44
|
+
}
|
|
45
|
+
interface UserId {
|
|
46
|
+
userId: string;
|
|
47
|
+
}
|
|
48
|
+
interface TweetId {
|
|
49
|
+
tweetId: string;
|
|
50
|
+
}
|
|
51
|
+
export interface DeleteTweetParams extends PdAxiosRequest, TweetId {
|
|
52
|
+
}
|
|
53
|
+
export interface FollowUserParams extends PdAxiosRequest {
|
|
54
|
+
data: {
|
|
55
|
+
target_user_id: string;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface GetUserLikedTweetParams extends PaginatedRequest, UserId {
|
|
59
|
+
params?: TweetFields;
|
|
60
|
+
}
|
|
61
|
+
export interface GetListTweetsParams extends PaginatedRequest, ListId {
|
|
62
|
+
params?: TweetFields;
|
|
63
|
+
}
|
|
64
|
+
export interface GetUserOwnedListsParams extends PaginatedRequest, UserId {
|
|
65
|
+
params?: ListFields;
|
|
66
|
+
}
|
|
67
|
+
export interface GetUserMentionsParams extends PaginatedRequest, UserId {
|
|
68
|
+
params?: TweetFields;
|
|
69
|
+
}
|
|
70
|
+
export interface GetUserTweetsParams extends PaginatedRequest, UserId {
|
|
71
|
+
params?: TweetFields & {
|
|
72
|
+
since_id?: string;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export interface GetUserFollowedListsParams extends PaginatedRequest, UserId {
|
|
76
|
+
params?: ListFields;
|
|
77
|
+
}
|
|
78
|
+
export interface GetAuthenticatedUserParams extends PdAxiosRequest {
|
|
79
|
+
params?: UserFields;
|
|
80
|
+
}
|
|
81
|
+
export interface GetUserParams extends GetAuthenticatedUserParams, UserId {
|
|
82
|
+
}
|
|
83
|
+
export interface GetTweetParams extends PdAxiosRequest, TweetId {
|
|
84
|
+
params?: TweetFields;
|
|
85
|
+
}
|
|
86
|
+
export interface GetUserFollowersParams extends PaginatedRequest, UserId {
|
|
87
|
+
params?: UserFields;
|
|
88
|
+
}
|
|
89
|
+
export type GetUserFollowingParams = GetUserFollowersParams;
|
|
90
|
+
export interface LikeTweetParams extends PdAxiosRequest {
|
|
91
|
+
data: {
|
|
92
|
+
tweet_id: string;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export type RetweetParams = LikeTweetParams;
|
|
96
|
+
export interface SearchTweetsParams extends PaginatedRequest {
|
|
97
|
+
params: {
|
|
98
|
+
query: string;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
export interface UnfollowUserParams extends PdAxiosRequest, UserId {
|
|
102
|
+
}
|
|
103
|
+
export interface UnlikeTweetParams extends PdAxiosRequest, TweetId {
|
|
104
|
+
}
|
|
105
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface TwitterEntity {
|
|
2
|
+
id: string;
|
|
3
|
+
}
|
|
4
|
+
export type TwitterEntityMap = Record<string, object>;
|
|
5
|
+
export interface List extends TwitterEntity {
|
|
6
|
+
name: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Tweet extends TwitterEntity {
|
|
9
|
+
text: string;
|
|
10
|
+
edit_history_tweet_ids: string[];
|
|
11
|
+
referenced_tweets?: ReferencedTweet[];
|
|
12
|
+
includes?: {
|
|
13
|
+
tweets?: Tweet[];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface ReferencedTweet {
|
|
17
|
+
id: string;
|
|
18
|
+
type: "retweeted" | "quoted" | "replied_to";
|
|
19
|
+
}
|
|
20
|
+
export interface User extends TwitterEntity {
|
|
21
|
+
name: string;
|
|
22
|
+
username: string;
|
|
23
|
+
}
|
|
24
|
+
interface ResponseIncludes {
|
|
25
|
+
users?: User[];
|
|
26
|
+
tweets?: Tweet[];
|
|
27
|
+
}
|
|
28
|
+
interface ResponseBase {
|
|
29
|
+
includes?: ResponseIncludes;
|
|
30
|
+
errors?: object;
|
|
31
|
+
}
|
|
32
|
+
export type ResponseObject<T extends TwitterEntity> = ResponseBase & {
|
|
33
|
+
data?: T | T[];
|
|
34
|
+
};
|
|
35
|
+
export type PaginatedResponseObject<T extends TwitterEntity> = ResponseBase & {
|
|
36
|
+
data?: T[];
|
|
37
|
+
meta?: {
|
|
38
|
+
next_token?: string;
|
|
39
|
+
result_count: number;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { TwitterEntity } from "../../common/types/responseSchemas.js";
|
|
2
|
+
declare const _default: {
|
|
3
|
+
props: {
|
|
4
|
+
app: import("@pipedream/types").App<{
|
|
5
|
+
_getAuthHeader(config: import("../../common/types/requestParams.js").HttpRequestParams): Promise<import("oauth-1.0a").Header>;
|
|
6
|
+
_getBaseUrl(): "https://api.twitter.com/2";
|
|
7
|
+
_httpRequest({ $, ...args }: import("../../common/types/requestParams.js").HttpRequestParams): Promise<import("../../common/types/responseSchemas").ResponseObject<TwitterEntity>>;
|
|
8
|
+
_paginatedRequest({ maxResults, maxPerPage, params, ...args }: import("../../common/types/requestParams.js").PaginatedRequestParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<TwitterEntity>>;
|
|
9
|
+
addUserToList({ listId, ...args }: import("../../common/types/requestParams.js").AddUserToListParams): Promise<object>;
|
|
10
|
+
createTweet(args: import("../../common/types/requestParams.js").CreateTweetParams): Promise<object>;
|
|
11
|
+
deleteTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").DeleteTweetParams): Promise<object>;
|
|
12
|
+
followUser(args: import("../../common/types/requestParams.js").FollowUserParams): Promise<object>;
|
|
13
|
+
getListTweets({ listId, ...args }: import("../../common/types/requestParams.js").GetListTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
14
|
+
getTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").GetTweetParams): Promise<import("../../common/types/responseSchemas").ResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
15
|
+
getAuthenticatedUser(args: import("../../common/types/requestParams.js").GetAuthenticatedUserParams): Promise<import("../../common/types/responseSchemas").ResponseObject<import("../../common/types/responseSchemas").User>>;
|
|
16
|
+
getAuthenticatedUserId(): Promise<string>;
|
|
17
|
+
getUserLikedTweets({ userId, ...args }: import("../../common/types/requestParams.js").GetUserLikedTweetParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
18
|
+
getUserOwnedLists({ userId, ...args }: import("../../common/types/requestParams.js").GetUserOwnedListsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").List>>;
|
|
19
|
+
getUserFollowedLists({ userId, ...args }: import("../../common/types/requestParams.js").GetUserFollowedListsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").List>>;
|
|
20
|
+
getUserMentions({ userId, ...args }: import("../../common/types/requestParams.js").GetUserMentionsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
21
|
+
getUserTweets({ userId, ...args }: import("../../common/types/requestParams.js").GetUserTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
22
|
+
getUserByUsername(username: string): Promise<import("../../common/types/responseSchemas").ResponseObject<import("../../common/types/responseSchemas").User>>;
|
|
23
|
+
getUser({ userId, ...args }: import("../../common/types/requestParams.js").GetUserParams): Promise<import("../../common/types/responseSchemas").ResponseObject<import("../../common/types/responseSchemas").User>>;
|
|
24
|
+
likeTweet(args: import("../../common/types/requestParams.js").LikeTweetParams): Promise<object>;
|
|
25
|
+
getUserFollowers({ userId, ...args }: import("../../common/types/requestParams.js").GetUserFollowersParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").User>>;
|
|
26
|
+
getUserFollowing({ userId, ...args }: import("../../common/types/requestParams.js").GetUserFollowersParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").User>>;
|
|
27
|
+
retweet(args: import("../../common/types/requestParams.js").LikeTweetParams): Promise<object>;
|
|
28
|
+
searchTweets(args: import("../../common/types/requestParams.js").SearchTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
29
|
+
unfollowUser({ userId, ...args }: import("../../common/types/requestParams.js").UnfollowUserParams): Promise<object>;
|
|
30
|
+
unlikeTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").UnlikeTweetParams): Promise<object>;
|
|
31
|
+
}, {
|
|
32
|
+
maxResults: {
|
|
33
|
+
type: string;
|
|
34
|
+
label: string;
|
|
35
|
+
description: string;
|
|
36
|
+
optional: boolean;
|
|
37
|
+
};
|
|
38
|
+
listId: {
|
|
39
|
+
type: string;
|
|
40
|
+
label: string;
|
|
41
|
+
description: string;
|
|
42
|
+
options(): Promise<{
|
|
43
|
+
label: string;
|
|
44
|
+
value: string;
|
|
45
|
+
}[]>;
|
|
46
|
+
};
|
|
47
|
+
userNameOrId: {
|
|
48
|
+
type: string;
|
|
49
|
+
label: string;
|
|
50
|
+
description: string;
|
|
51
|
+
optional: boolean;
|
|
52
|
+
default: string;
|
|
53
|
+
};
|
|
54
|
+
tweetId: {
|
|
55
|
+
type: string;
|
|
56
|
+
label: string;
|
|
57
|
+
description: string;
|
|
58
|
+
};
|
|
59
|
+
query: {
|
|
60
|
+
type: string;
|
|
61
|
+
label: string;
|
|
62
|
+
description: string;
|
|
63
|
+
};
|
|
64
|
+
}>;
|
|
65
|
+
db: string;
|
|
66
|
+
timer: {
|
|
67
|
+
type: string;
|
|
68
|
+
default: {
|
|
69
|
+
intervalSeconds: number;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
hooks: {
|
|
74
|
+
deploy(): Promise<void>;
|
|
75
|
+
};
|
|
76
|
+
methods: {
|
|
77
|
+
getEntityName(): string;
|
|
78
|
+
getItemSummary(): string;
|
|
79
|
+
getResources(): Promise<TwitterEntity[]>;
|
|
80
|
+
getSavedIds(): string[];
|
|
81
|
+
setSavedIds(data: string[]): void;
|
|
82
|
+
getAndProcessData(maxResults?: number): Promise<void>;
|
|
83
|
+
emitEvent(data: TwitterEntity): void;
|
|
84
|
+
};
|
|
85
|
+
run(): Promise<void>;
|
|
86
|
+
};
|
|
87
|
+
export default _default;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform";
|
|
2
|
+
import app from "../../app/twitter.app.mjs";
|
|
3
|
+
export default {
|
|
4
|
+
props: {
|
|
5
|
+
app,
|
|
6
|
+
db: "$.service.db",
|
|
7
|
+
timer: {
|
|
8
|
+
type: "$.interface.timer",
|
|
9
|
+
default: {
|
|
10
|
+
intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL,
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
hooks: {
|
|
15
|
+
async deploy() {
|
|
16
|
+
await this.getAndProcessData();
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
methods: {
|
|
20
|
+
getEntityName() {
|
|
21
|
+
return "Entity";
|
|
22
|
+
},
|
|
23
|
+
getItemSummary() {
|
|
24
|
+
throw new Error("getItemSummary() not implemented in component");
|
|
25
|
+
},
|
|
26
|
+
async getResources() {
|
|
27
|
+
throw new Error("getResources() not implemented in component");
|
|
28
|
+
},
|
|
29
|
+
getSavedIds() {
|
|
30
|
+
return this.db.get("savedEntityIds");
|
|
31
|
+
},
|
|
32
|
+
setSavedIds(data) {
|
|
33
|
+
this.db.set("savedEntityIds", data);
|
|
34
|
+
},
|
|
35
|
+
async getAndProcessData(maxResults) {
|
|
36
|
+
const data = await this.getResources(maxResults);
|
|
37
|
+
if (data) {
|
|
38
|
+
const savedIds = this.getSavedIds() ?? [];
|
|
39
|
+
data.filter(({ id }) => !savedIds.includes(id)).reverse()
|
|
40
|
+
.forEach((obj) => {
|
|
41
|
+
this.emitEvent(obj);
|
|
42
|
+
savedIds.push(obj.id);
|
|
43
|
+
});
|
|
44
|
+
this.setSavedIds(savedIds);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
emitEvent(data) {
|
|
48
|
+
const ts = Date.now();
|
|
49
|
+
const { id } = data;
|
|
50
|
+
this.$emit(data, {
|
|
51
|
+
id,
|
|
52
|
+
summary: `New ${this.getEntityName()}: "${this.getItemSummary(data)}"`,
|
|
53
|
+
ts,
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
async run() {
|
|
58
|
+
await this.getAndProcessData(50);
|
|
59
|
+
},
|
|
60
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getUserId } from "../../common/methods.mjs";
|
|
2
|
+
async function getCachedUserId() {
|
|
3
|
+
const { userNameOrId: name } = this;
|
|
4
|
+
const cache = this.db.get("cachedUser");
|
|
5
|
+
if (cache?.name === name) {
|
|
6
|
+
return cache.id;
|
|
7
|
+
}
|
|
8
|
+
const id = await this.getUserId();
|
|
9
|
+
this.db.set("cachedUser", {
|
|
10
|
+
id,
|
|
11
|
+
name,
|
|
12
|
+
});
|
|
13
|
+
return id;
|
|
14
|
+
}
|
|
15
|
+
export default {
|
|
16
|
+
getCachedUserId,
|
|
17
|
+
getUserId,
|
|
18
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { List, Tweet, User } from "../../common/types/responseSchemas.js";
|
|
2
|
+
export declare function getListSummary({ name }: List): string;
|
|
3
|
+
export declare function getTweetSummary({ text }: Tweet): string;
|
|
4
|
+
export declare function getUserSummary({ username }: User): string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function getListSummary({ name }) {
|
|
2
|
+
return name;
|
|
3
|
+
}
|
|
4
|
+
export function getTweetSummary({ text }) {
|
|
5
|
+
const TWEET_SUMMARY_MAX_LENGTH = 30;
|
|
6
|
+
return text.length > TWEET_SUMMARY_MAX_LENGTH
|
|
7
|
+
? text.slice(0, TWEET_SUMMARY_MAX_LENGTH) + "..."
|
|
8
|
+
: text;
|
|
9
|
+
}
|
|
10
|
+
export function getUserSummary({ username }) {
|
|
11
|
+
return username;
|
|
12
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { getUserSummary as getItemSummary } from "../common/getItemSummary.js";
|
|
2
|
+
import { getUserFields } from "../../common/methods.js";
|
|
3
|
+
import { GetUserFollowersParams } from "../../common/types/requestParams.js";
|
|
4
|
+
import { User } from "../../common/types/responseSchemas.js";
|
|
5
|
+
declare const _default: import("@pipedream/types").Source<{
|
|
6
|
+
getUserFields: typeof getUserFields;
|
|
7
|
+
getItemSummary: typeof getItemSummary;
|
|
8
|
+
getEntityName(): "Follower";
|
|
9
|
+
getResources(maxResults?: number): Promise<User[]>;
|
|
10
|
+
getCachedUserId: () => Promise<string>;
|
|
11
|
+
getUserId: typeof import("../../common/methods.js").getUserId;
|
|
12
|
+
getSavedIds(): string[];
|
|
13
|
+
setSavedIds(data: string[]): void;
|
|
14
|
+
getAndProcessData(maxResults?: number): Promise<void>;
|
|
15
|
+
emitEvent(data: import("../../common/types/responseSchemas.js").TwitterEntity): void;
|
|
16
|
+
}, {
|
|
17
|
+
userNameOrId: {
|
|
18
|
+
propDefinition: (string | import("@pipedream/types").App<{
|
|
19
|
+
_getAuthHeader(config: import("../../common/types/requestParams.js").HttpRequestParams): Promise<import("oauth-1.0a").Header>;
|
|
20
|
+
_getBaseUrl(): "https://api.twitter.com/2";
|
|
21
|
+
_httpRequest({ $, ...args }: import("../../common/types/requestParams.js").HttpRequestParams): Promise<import("../../common/types/responseSchemas").ResponseObject<import("../../common/types/responseSchemas").TwitterEntity>>;
|
|
22
|
+
_paginatedRequest({ maxResults, maxPerPage, params, ...args }: import("../../common/types/requestParams.js").PaginatedRequestParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").TwitterEntity>>;
|
|
23
|
+
addUserToList({ listId, ...args }: import("../../common/types/requestParams.js").AddUserToListParams): Promise<object>;
|
|
24
|
+
createTweet(args: import("../../common/types/requestParams.js").CreateTweetParams): Promise<object>;
|
|
25
|
+
deleteTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").DeleteTweetParams): Promise<object>;
|
|
26
|
+
followUser(args: import("../../common/types/requestParams.js").FollowUserParams): Promise<object>;
|
|
27
|
+
getListTweets({ listId, ...args }: import("../../common/types/requestParams.js").GetListTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
28
|
+
getTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").GetTweetParams): Promise<import("../../common/types/responseSchemas").ResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
29
|
+
getAuthenticatedUser(args: import("../../common/types/requestParams.js").GetAuthenticatedUserParams): Promise<import("../../common/types/responseSchemas").ResponseObject<User>>;
|
|
30
|
+
getAuthenticatedUserId(): Promise<string>;
|
|
31
|
+
getUserLikedTweets({ userId, ...args }: import("../../common/types/requestParams.js").GetUserLikedTweetParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
32
|
+
getUserOwnedLists({ userId, ...args }: import("../../common/types/requestParams.js").GetUserOwnedListsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").List>>;
|
|
33
|
+
getUserFollowedLists({ userId, ...args }: import("../../common/types/requestParams.js").GetUserFollowedListsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").List>>;
|
|
34
|
+
getUserMentions({ userId, ...args }: import("../../common/types/requestParams.js").GetUserMentionsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
35
|
+
getUserTweets({ userId, ...args }: import("../../common/types/requestParams.js").GetUserTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
36
|
+
getUserByUsername(username: string): Promise<import("../../common/types/responseSchemas").ResponseObject<User>>;
|
|
37
|
+
getUser({ userId, ...args }: import("../../common/types/requestParams.js").GetUserParams): Promise<import("../../common/types/responseSchemas").ResponseObject<User>>;
|
|
38
|
+
likeTweet(args: import("../../common/types/requestParams.js").LikeTweetParams): Promise<object>;
|
|
39
|
+
getUserFollowers({ userId, ...args }: GetUserFollowersParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<User>>;
|
|
40
|
+
getUserFollowing({ userId, ...args }: GetUserFollowersParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<User>>;
|
|
41
|
+
retweet(args: import("../../common/types/requestParams.js").LikeTweetParams): Promise<object>;
|
|
42
|
+
searchTweets(args: import("../../common/types/requestParams.js").SearchTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
43
|
+
unfollowUser({ userId, ...args }: import("../../common/types/requestParams.js").UnfollowUserParams): Promise<object>;
|
|
44
|
+
unlikeTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").UnlikeTweetParams): Promise<object>;
|
|
45
|
+
}, {
|
|
46
|
+
maxResults: {
|
|
47
|
+
type: string;
|
|
48
|
+
label: string;
|
|
49
|
+
description: string;
|
|
50
|
+
optional: boolean;
|
|
51
|
+
};
|
|
52
|
+
listId: {
|
|
53
|
+
type: string;
|
|
54
|
+
label: string;
|
|
55
|
+
description: string;
|
|
56
|
+
options(): Promise<{
|
|
57
|
+
label: string;
|
|
58
|
+
value: string;
|
|
59
|
+
}[]>;
|
|
60
|
+
};
|
|
61
|
+
userNameOrId: {
|
|
62
|
+
type: string;
|
|
63
|
+
label: string;
|
|
64
|
+
description: string;
|
|
65
|
+
optional: boolean;
|
|
66
|
+
default: string;
|
|
67
|
+
};
|
|
68
|
+
tweetId: {
|
|
69
|
+
type: string;
|
|
70
|
+
label: string;
|
|
71
|
+
description: string;
|
|
72
|
+
};
|
|
73
|
+
query: {
|
|
74
|
+
type: string;
|
|
75
|
+
label: string;
|
|
76
|
+
description: string;
|
|
77
|
+
};
|
|
78
|
+
}>)[];
|
|
79
|
+
};
|
|
80
|
+
app: import("@pipedream/types").App<{
|
|
81
|
+
_getAuthHeader(config: import("../../common/types/requestParams.js").HttpRequestParams): Promise<import("oauth-1.0a").Header>;
|
|
82
|
+
_getBaseUrl(): "https://api.twitter.com/2";
|
|
83
|
+
_httpRequest({ $, ...args }: import("../../common/types/requestParams.js").HttpRequestParams): Promise<import("../../common/types/responseSchemas").ResponseObject<import("../../common/types/responseSchemas").TwitterEntity>>;
|
|
84
|
+
_paginatedRequest({ maxResults, maxPerPage, params, ...args }: import("../../common/types/requestParams.js").PaginatedRequestParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").TwitterEntity>>;
|
|
85
|
+
addUserToList({ listId, ...args }: import("../../common/types/requestParams.js").AddUserToListParams): Promise<object>;
|
|
86
|
+
createTweet(args: import("../../common/types/requestParams.js").CreateTweetParams): Promise<object>;
|
|
87
|
+
deleteTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").DeleteTweetParams): Promise<object>;
|
|
88
|
+
followUser(args: import("../../common/types/requestParams.js").FollowUserParams): Promise<object>;
|
|
89
|
+
getListTweets({ listId, ...args }: import("../../common/types/requestParams.js").GetListTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
90
|
+
getTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").GetTweetParams): Promise<import("../../common/types/responseSchemas").ResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
91
|
+
getAuthenticatedUser(args: import("../../common/types/requestParams.js").GetAuthenticatedUserParams): Promise<import("../../common/types/responseSchemas").ResponseObject<User>>;
|
|
92
|
+
getAuthenticatedUserId(): Promise<string>;
|
|
93
|
+
getUserLikedTweets({ userId, ...args }: import("../../common/types/requestParams.js").GetUserLikedTweetParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
94
|
+
getUserOwnedLists({ userId, ...args }: import("../../common/types/requestParams.js").GetUserOwnedListsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").List>>;
|
|
95
|
+
getUserFollowedLists({ userId, ...args }: import("../../common/types/requestParams.js").GetUserFollowedListsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").List>>;
|
|
96
|
+
getUserMentions({ userId, ...args }: import("../../common/types/requestParams.js").GetUserMentionsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
97
|
+
getUserTweets({ userId, ...args }: import("../../common/types/requestParams.js").GetUserTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
98
|
+
getUserByUsername(username: string): Promise<import("../../common/types/responseSchemas").ResponseObject<User>>;
|
|
99
|
+
getUser({ userId, ...args }: import("../../common/types/requestParams.js").GetUserParams): Promise<import("../../common/types/responseSchemas").ResponseObject<User>>;
|
|
100
|
+
likeTweet(args: import("../../common/types/requestParams.js").LikeTweetParams): Promise<object>;
|
|
101
|
+
getUserFollowers({ userId, ...args }: GetUserFollowersParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<User>>;
|
|
102
|
+
getUserFollowing({ userId, ...args }: GetUserFollowersParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<User>>;
|
|
103
|
+
retweet(args: import("../../common/types/requestParams.js").LikeTweetParams): Promise<object>;
|
|
104
|
+
searchTweets(args: import("../../common/types/requestParams.js").SearchTweetsParams): Promise<import("../../common/types/responseSchemas").PaginatedResponseObject<import("../../common/types/responseSchemas").Tweet>>;
|
|
105
|
+
unfollowUser({ userId, ...args }: import("../../common/types/requestParams.js").UnfollowUserParams): Promise<object>;
|
|
106
|
+
unlikeTweet({ tweetId, ...args }: import("../../common/types/requestParams.js").UnlikeTweetParams): Promise<object>;
|
|
107
|
+
}, {
|
|
108
|
+
maxResults: {
|
|
109
|
+
type: string;
|
|
110
|
+
label: string;
|
|
111
|
+
description: string;
|
|
112
|
+
optional: boolean;
|
|
113
|
+
};
|
|
114
|
+
listId: {
|
|
115
|
+
type: string;
|
|
116
|
+
label: string;
|
|
117
|
+
description: string;
|
|
118
|
+
options(): Promise<{
|
|
119
|
+
label: string;
|
|
120
|
+
value: string;
|
|
121
|
+
}[]>;
|
|
122
|
+
};
|
|
123
|
+
userNameOrId: {
|
|
124
|
+
type: string;
|
|
125
|
+
label: string;
|
|
126
|
+
description: string;
|
|
127
|
+
optional: boolean;
|
|
128
|
+
default: string;
|
|
129
|
+
};
|
|
130
|
+
tweetId: {
|
|
131
|
+
type: string;
|
|
132
|
+
label: string;
|
|
133
|
+
description: string;
|
|
134
|
+
};
|
|
135
|
+
query: {
|
|
136
|
+
type: string;
|
|
137
|
+
label: string;
|
|
138
|
+
description: string;
|
|
139
|
+
};
|
|
140
|
+
}>;
|
|
141
|
+
db: string;
|
|
142
|
+
timer: {
|
|
143
|
+
type: string;
|
|
144
|
+
default: {
|
|
145
|
+
intervalSeconds: number;
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
}>;
|
|
149
|
+
export default _default;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import app from "../../app/twitter.app.mjs";
|
|
2
|
+
import { defineSource } from "@pipedream/types";
|
|
3
|
+
import common from "../common/base.mjs";
|
|
4
|
+
import { getUserSummary as getItemSummary } from "../common/getItemSummary.mjs";
|
|
5
|
+
import { getUserFields } from "../../common/methods.mjs";
|
|
6
|
+
import { DOCS_LINK, MAX_RESULTS_PER_PAGE, } from "../../actions/list-followers/list-followers.mjs";
|
|
7
|
+
import cacheUserId from "../common/cacheUserId.mjs";
|
|
8
|
+
export default defineSource({
|
|
9
|
+
...common,
|
|
10
|
+
key: "twitter-new-follower-of-user",
|
|
11
|
+
name: "New Follower Received by User",
|
|
12
|
+
description: `Emit new event when the specified User receives a Follower [See docs here](${DOCS_LINK})`,
|
|
13
|
+
version: "1.1.0",
|
|
14
|
+
type: "source",
|
|
15
|
+
props: {
|
|
16
|
+
...common.props,
|
|
17
|
+
userNameOrId: {
|
|
18
|
+
propDefinition: [
|
|
19
|
+
app,
|
|
20
|
+
"userNameOrId",
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
methods: {
|
|
25
|
+
...common.methods,
|
|
26
|
+
...cacheUserId,
|
|
27
|
+
getUserFields,
|
|
28
|
+
getItemSummary,
|
|
29
|
+
getEntityName() {
|
|
30
|
+
return "Follower";
|
|
31
|
+
},
|
|
32
|
+
async getResources(maxResults) {
|
|
33
|
+
const userId = await this.getCachedUserId();
|
|
34
|
+
const params = {
|
|
35
|
+
$: this,
|
|
36
|
+
maxPerPage: MAX_RESULTS_PER_PAGE,
|
|
37
|
+
maxResults: maxResults ?? MAX_RESULTS_PER_PAGE,
|
|
38
|
+
params: this.getUserFields(),
|
|
39
|
+
userId,
|
|
40
|
+
};
|
|
41
|
+
const { data } = await this.app.getUserFollowers(params);
|
|
42
|
+
return data;
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
});
|