@classytic/social 0.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/CHANGELOG.md +65 -0
- package/LICENSE +21 -0
- package/README.md +368 -0
- package/dist/base-Bw7e52V8.mjs +246 -0
- package/dist/base-Bw7e52V8.mjs.map +1 -0
- package/dist/base-DBtKFiSX.d.mts +226 -0
- package/dist/base-DBtKFiSX.d.mts.map +1 -0
- package/dist/chunk-DQk6qfdC.mjs +18 -0
- package/dist/client/index.d.mts +44 -0
- package/dist/client/index.d.mts.map +1 -0
- package/dist/client/index.mjs +154 -0
- package/dist/client/index.mjs.map +1 -0
- package/dist/common/index.d.mts +3 -0
- package/dist/common/index.mjs +7 -0
- package/dist/contracts-Cdwa4zlg.d.mts +121 -0
- package/dist/contracts-Cdwa4zlg.d.mts.map +1 -0
- package/dist/contracts-lCa069IK.mjs +221 -0
- package/dist/contracts-lCa069IK.mjs.map +1 -0
- package/dist/env-Bl0cwwjC.mjs +955 -0
- package/dist/env-Bl0cwwjC.mjs.map +1 -0
- package/dist/env-DxOZHf0p.d.mts +394 -0
- package/dist/env-DxOZHf0p.d.mts.map +1 -0
- package/dist/errors-Cm6LeKf7.mjs +32 -0
- package/dist/errors-Cm6LeKf7.mjs.map +1 -0
- package/dist/facebook-l_4CghaA.mjs +95 -0
- package/dist/facebook-l_4CghaA.mjs.map +1 -0
- package/dist/http-DpcLSR1M.mjs +197 -0
- package/dist/http-DpcLSR1M.mjs.map +1 -0
- package/dist/index.d.mts +42 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +71 -0
- package/dist/index.mjs.map +1 -0
- package/dist/instagram-BGaeUFU2.mjs +90 -0
- package/dist/instagram-BGaeUFU2.mjs.map +1 -0
- package/dist/linkedin-70whtVKa.mjs +101 -0
- package/dist/linkedin-70whtVKa.mjs.map +1 -0
- package/dist/meta-D3vcJU1c.mjs +126 -0
- package/dist/meta-D3vcJU1c.mjs.map +1 -0
- package/dist/pkce-jq5II68b.mjs +72 -0
- package/dist/pkce-jq5II68b.mjs.map +1 -0
- package/dist/polling-DZ1apXtA.mjs +25 -0
- package/dist/polling-DZ1apXtA.mjs.map +1 -0
- package/dist/providers/facebook.d.mts +135 -0
- package/dist/providers/facebook.d.mts.map +1 -0
- package/dist/providers/facebook.mjs +450 -0
- package/dist/providers/facebook.mjs.map +1 -0
- package/dist/providers/instagram.d.mts +122 -0
- package/dist/providers/instagram.d.mts.map +1 -0
- package/dist/providers/instagram.mjs +496 -0
- package/dist/providers/instagram.mjs.map +1 -0
- package/dist/providers/linkedin.d.mts +145 -0
- package/dist/providers/linkedin.d.mts.map +1 -0
- package/dist/providers/linkedin.mjs +574 -0
- package/dist/providers/linkedin.mjs.map +1 -0
- package/dist/providers/reddit.d.mts +102 -0
- package/dist/providers/reddit.d.mts.map +1 -0
- package/dist/providers/reddit.mjs +657 -0
- package/dist/providers/reddit.mjs.map +1 -0
- package/dist/providers/telegram.d.mts +139 -0
- package/dist/providers/telegram.d.mts.map +1 -0
- package/dist/providers/telegram.mjs +517 -0
- package/dist/providers/telegram.mjs.map +1 -0
- package/dist/providers/tiktok.d.mts +116 -0
- package/dist/providers/tiktok.d.mts.map +1 -0
- package/dist/providers/tiktok.mjs +676 -0
- package/dist/providers/tiktok.mjs.map +1 -0
- package/dist/providers/twitter.d.mts +150 -0
- package/dist/providers/twitter.d.mts.map +1 -0
- package/dist/providers/twitter.mjs +628 -0
- package/dist/providers/twitter.mjs.map +1 -0
- package/dist/providers/whatsapp.d.mts +79 -0
- package/dist/providers/whatsapp.d.mts.map +1 -0
- package/dist/providers/whatsapp.mjs +376 -0
- package/dist/providers/whatsapp.mjs.map +1 -0
- package/dist/providers/youtube.d.mts +153 -0
- package/dist/providers/youtube.d.mts.map +1 -0
- package/dist/providers/youtube.mjs +902 -0
- package/dist/providers/youtube.mjs.map +1 -0
- package/dist/reddit-B10kS4Se.mjs +126 -0
- package/dist/reddit-B10kS4Se.mjs.map +1 -0
- package/dist/schemas/index.d.mts +819 -0
- package/dist/schemas/index.d.mts.map +1 -0
- package/dist/schemas/index.mjs +31 -0
- package/dist/schemas/index.mjs.map +1 -0
- package/dist/security-BXhfebWm.d.mts +338 -0
- package/dist/security-BXhfebWm.d.mts.map +1 -0
- package/dist/shared-Fvc6xQku.mjs +100 -0
- package/dist/shared-Fvc6xQku.mjs.map +1 -0
- package/dist/telegram-FaUHpZgB.mjs +107 -0
- package/dist/telegram-FaUHpZgB.mjs.map +1 -0
- package/dist/tiktok-B_bMk4G-.mjs +94 -0
- package/dist/tiktok-B_bMk4G-.mjs.map +1 -0
- package/dist/twitter-BC22zfuc.mjs +98 -0
- package/dist/twitter-BC22zfuc.mjs.map +1 -0
- package/dist/types-BFE4psYI.d.mts +102 -0
- package/dist/types-BFE4psYI.d.mts.map +1 -0
- package/dist/types-Bv27tcT0.d.mts +230 -0
- package/dist/types-Bv27tcT0.d.mts.map +1 -0
- package/dist/types-BwkKyqpi.d.mts +253 -0
- package/dist/types-BwkKyqpi.d.mts.map +1 -0
- package/dist/types-CJrHMDV9.mjs +27 -0
- package/dist/types-CJrHMDV9.mjs.map +1 -0
- package/dist/types-ClbVc2rc.d.mts +117 -0
- package/dist/types-ClbVc2rc.d.mts.map +1 -0
- package/dist/types-D91N16Ym.d.mts +242 -0
- package/dist/types-D91N16Ym.d.mts.map +1 -0
- package/dist/types-DfLp_ibQ.d.mts +178 -0
- package/dist/types-DfLp_ibQ.d.mts.map +1 -0
- package/dist/types-DfjDgEoJ.d.mts +88 -0
- package/dist/types-DfjDgEoJ.d.mts.map +1 -0
- package/dist/types-Dp5Z9VBr.mjs +23 -0
- package/dist/types-Dp5Z9VBr.mjs.map +1 -0
- package/dist/types-hriBJTsU.d.mts +129 -0
- package/dist/types-hriBJTsU.d.mts.map +1 -0
- package/dist/types-rn6UuLL8.d.mts +184 -0
- package/dist/types-rn6UuLL8.d.mts.map +1 -0
- package/dist/whatsapp-CFp7ryR4.mjs +101 -0
- package/dist/whatsapp-CFp7ryR4.mjs.map +1 -0
- package/dist/youtube-Bs0fdY7H.mjs +98 -0
- package/dist/youtube-Bs0fdY7H.mjs.map +1 -0
- package/package.json +148 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
//#region src/providers/twitter/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Twitter/X Provider Types
|
|
4
|
+
* ========================
|
|
5
|
+
* Type definitions for the Twitter API v2.
|
|
6
|
+
*
|
|
7
|
+
* @see https://developer.x.com/en/docs/x-api
|
|
8
|
+
* @see https://developer.x.com/en/docs/authentication/oauth-2-0
|
|
9
|
+
*/
|
|
10
|
+
interface TwitterCredentials {
|
|
11
|
+
clientId: string;
|
|
12
|
+
clientSecret: string;
|
|
13
|
+
redirectUri?: string;
|
|
14
|
+
}
|
|
15
|
+
interface Tweet {
|
|
16
|
+
id: string;
|
|
17
|
+
text: string;
|
|
18
|
+
authorId?: string;
|
|
19
|
+
createdAt?: string;
|
|
20
|
+
conversationId?: string;
|
|
21
|
+
inReplyToUserId?: string;
|
|
22
|
+
publicMetrics?: TweetPublicMetrics;
|
|
23
|
+
entities?: TweetEntities;
|
|
24
|
+
attachments?: {
|
|
25
|
+
mediaKeys?: string[];
|
|
26
|
+
};
|
|
27
|
+
source?: string;
|
|
28
|
+
lang?: string;
|
|
29
|
+
replySettings?: 'everyone' | 'mentionedUsers' | 'following';
|
|
30
|
+
editHistoryTweetIds?: string[];
|
|
31
|
+
}
|
|
32
|
+
interface TweetPublicMetrics {
|
|
33
|
+
retweetCount: number;
|
|
34
|
+
replyCount: number;
|
|
35
|
+
likeCount: number;
|
|
36
|
+
quoteCount: number;
|
|
37
|
+
bookmarkCount?: number;
|
|
38
|
+
impressionCount?: number;
|
|
39
|
+
}
|
|
40
|
+
interface TweetEntities {
|
|
41
|
+
urls?: {
|
|
42
|
+
start: number;
|
|
43
|
+
end: number;
|
|
44
|
+
url: string;
|
|
45
|
+
expandedUrl: string;
|
|
46
|
+
displayUrl: string;
|
|
47
|
+
}[];
|
|
48
|
+
mentions?: {
|
|
49
|
+
start: number;
|
|
50
|
+
end: number;
|
|
51
|
+
username: string;
|
|
52
|
+
id: string;
|
|
53
|
+
}[];
|
|
54
|
+
hashtags?: {
|
|
55
|
+
start: number;
|
|
56
|
+
end: number;
|
|
57
|
+
tag: string;
|
|
58
|
+
}[];
|
|
59
|
+
cashtags?: {
|
|
60
|
+
start: number;
|
|
61
|
+
end: number;
|
|
62
|
+
tag: string;
|
|
63
|
+
}[];
|
|
64
|
+
annotations?: {
|
|
65
|
+
start: number;
|
|
66
|
+
end: number;
|
|
67
|
+
probability: number;
|
|
68
|
+
type: string;
|
|
69
|
+
normalizedText: string;
|
|
70
|
+
}[];
|
|
71
|
+
}
|
|
72
|
+
interface CreateTweetParams {
|
|
73
|
+
text: string;
|
|
74
|
+
/** Tweet ID to reply to */
|
|
75
|
+
replyTo?: string;
|
|
76
|
+
/** Tweet ID to quote */
|
|
77
|
+
quoteTweetId?: string;
|
|
78
|
+
/** Media IDs to attach (already uploaded) */
|
|
79
|
+
mediaIds?: string[];
|
|
80
|
+
/** Poll options */
|
|
81
|
+
poll?: {
|
|
82
|
+
options: string[];
|
|
83
|
+
durationMinutes: number;
|
|
84
|
+
};
|
|
85
|
+
/** Reply settings */
|
|
86
|
+
replySettings?: 'mentionedUsers' | 'following';
|
|
87
|
+
/** For direct messages: allow AI tools to auto-send DMs */
|
|
88
|
+
forSuperFollowersOnly?: boolean;
|
|
89
|
+
}
|
|
90
|
+
interface CreateTweetResult {
|
|
91
|
+
id: string;
|
|
92
|
+
text: string;
|
|
93
|
+
editHistoryTweetIds?: string[];
|
|
94
|
+
}
|
|
95
|
+
interface TweetSearchParams {
|
|
96
|
+
query: string;
|
|
97
|
+
/** Maximum results per page (10-100, default 10) */
|
|
98
|
+
maxResults?: number;
|
|
99
|
+
/** Pagination token for next page */
|
|
100
|
+
nextToken?: string;
|
|
101
|
+
/** Start time (ISO 8601) — last 7 days for Basic */
|
|
102
|
+
startTime?: string;
|
|
103
|
+
/** End time (ISO 8601) */
|
|
104
|
+
endTime?: string;
|
|
105
|
+
/** Sort order */
|
|
106
|
+
sortOrder?: 'recency' | 'relevancy';
|
|
107
|
+
/** Tweet fields to include */
|
|
108
|
+
tweetFields?: TweetField[];
|
|
109
|
+
/** User fields to include in user expansions */
|
|
110
|
+
userFields?: UserField[];
|
|
111
|
+
/** Expansion fields */
|
|
112
|
+
expansions?: TweetExpansion[];
|
|
113
|
+
}
|
|
114
|
+
type TweetField = 'attachments' | 'author_id' | 'context_annotations' | 'conversation_id' | 'created_at' | 'edit_controls' | 'entities' | 'geo' | 'id' | 'in_reply_to_user_id' | 'lang' | 'non_public_metrics' | 'organic_metrics' | 'possibly_sensitive' | 'promoted_metrics' | 'public_metrics' | 'referenced_tweets' | 'reply_settings' | 'source' | 'text' | 'withheld';
|
|
115
|
+
type UserField = 'created_at' | 'description' | 'entities' | 'id' | 'location' | 'most_recent_tweet_id' | 'name' | 'pinned_tweet_id' | 'profile_image_url' | 'protected' | 'public_metrics' | 'url' | 'username' | 'verified' | 'verified_type' | 'withheld';
|
|
116
|
+
type TweetExpansion = 'attachments.media_keys' | 'attachments.poll_ids' | 'author_id' | 'edit_history_tweet_ids' | 'entities.mentions.username' | 'geo.place_id' | 'in_reply_to_user_id' | 'referenced_tweets.id' | 'referenced_tweets.id.author_id';
|
|
117
|
+
interface TweetSearchResult {
|
|
118
|
+
tweets: Tweet[];
|
|
119
|
+
meta: {
|
|
120
|
+
newestId?: string;
|
|
121
|
+
oldestId?: string;
|
|
122
|
+
resultCount: number;
|
|
123
|
+
nextToken?: string;
|
|
124
|
+
};
|
|
125
|
+
includes?: {
|
|
126
|
+
users?: TwitterUser[];
|
|
127
|
+
media?: TwitterMedia[];
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
interface TwitterUser {
|
|
131
|
+
id: string;
|
|
132
|
+
name: string;
|
|
133
|
+
username: string;
|
|
134
|
+
createdAt?: string;
|
|
135
|
+
description?: string;
|
|
136
|
+
location?: string;
|
|
137
|
+
profileImageUrl?: string;
|
|
138
|
+
protected?: boolean;
|
|
139
|
+
publicMetrics?: UserPublicMetrics;
|
|
140
|
+
url?: string;
|
|
141
|
+
verified?: boolean;
|
|
142
|
+
verifiedType?: 'blue' | 'business' | 'government' | 'none';
|
|
143
|
+
pinnedTweetId?: string;
|
|
144
|
+
}
|
|
145
|
+
interface UserPublicMetrics {
|
|
146
|
+
followersCount: number;
|
|
147
|
+
followingCount: number;
|
|
148
|
+
tweetCount: number;
|
|
149
|
+
listedCount: number;
|
|
150
|
+
likeCount?: number;
|
|
151
|
+
}
|
|
152
|
+
interface SendDmParams {
|
|
153
|
+
/** Recipient user ID */
|
|
154
|
+
participantId: string;
|
|
155
|
+
/** Message text */
|
|
156
|
+
text: string;
|
|
157
|
+
/** Media ID to attach */
|
|
158
|
+
mediaId?: string;
|
|
159
|
+
}
|
|
160
|
+
interface SendDmResult {
|
|
161
|
+
dmConversationId: string;
|
|
162
|
+
dmEventId: string;
|
|
163
|
+
}
|
|
164
|
+
interface TwitterMedia {
|
|
165
|
+
mediaKey: string;
|
|
166
|
+
type: 'animated_gif' | 'photo' | 'video';
|
|
167
|
+
url?: string;
|
|
168
|
+
previewImageUrl?: string;
|
|
169
|
+
width?: number;
|
|
170
|
+
height?: number;
|
|
171
|
+
durationMs?: number;
|
|
172
|
+
publicMetrics?: {
|
|
173
|
+
viewCount?: number;
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
//#endregion
|
|
177
|
+
export { Tweet as a, TweetSearchResult as c, UserField as d, SendDmResult as i, TwitterCredentials as l, CreateTweetResult as n, TweetField as o, SendDmParams as r, TweetSearchParams as s, CreateTweetParams as t, TwitterUser as u };
|
|
178
|
+
//# sourceMappingURL=types-DfLp_ibQ.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-DfLp_ibQ.d.mts","names":[],"sources":["../src/providers/twitter/types.ts"],"mappings":";;AAaA;;;;;;;UAAiB,kBAAA;EACf,QAAA;EACA,YAAA;EACA,WAAA;AAAA;AAAA,UAqBe,KAAA;EACf,EAAA;EACA,IAAA;EACA,QAAA;EACA,SAAA;EACA,cAAA;EACA,eAAA;EACA,aAAA,GAAgB,kBAAA;EAChB,QAAA,GAAW,aAAA;EACX,WAAA;IAAgB,SAAA;EAAA;EAChB,MAAA;EACA,IAAA;EACA,aAAA;EACA,mBAAA;AAAA;AAAA,UAGe,kBAAA;EACf,YAAA;EACA,UAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;IAAS,KAAA;IAAe,GAAA;IAAa,GAAA;IAAa,WAAA;IAAqB,UAAA;EAAA;EACvE,QAAA;IAAa,KAAA;IAAe,GAAA;IAAa,QAAA;IAAkB,EAAA;EAAA;EAC3D,QAAA;IAAa,KAAA;IAAe,GAAA;IAAa,GAAA;EAAA;EACzC,QAAA;IAAa,KAAA;IAAe,GAAA;IAAa,GAAA;EAAA;EACzC,WAAA;IAAgB,KAAA;IAAe,GAAA;IAAa,WAAA;IAAqB,IAAA;IAAc,cAAA;EAAA;AAAA;AAAA,UAOhE,iBAAA;EACf,IAAA;EAQS;EANT,OAAA;EAQA;EANA,YAAA;EAQqB;EANrB,QAAA;EASe;EAPf,IAAA;IAAS,OAAA;IAAmB,eAAA;EAAA;EAS5B;EAPA,aAAA;EAQmB;EANnB,qBAAA;AAAA;AAAA,UAGe,iBAAA;EACf,EAAA;EACA,IAAA;EACA,mBAAA;AAAA;AAAA,UAOe,iBAAA;EACf,KAAA;EAAA;EAEA,UAAA;EAEA;EAAA,SAAA;EAIA;EAFA,SAAA;EAMA;EAJA,OAAA;EAMA;EAJA,SAAA;EAMA;EAJA,WAAA,GAAc,UAAA;EAIa;EAF3B,UAAA,GAAa,SAAA;EAKH;EAHV,UAAA,GAAa,cAAA;AAAA;AAAA,KAGH,UAAA;AAAA,KAQA,SAAA;AAAA,KAMA,cAAA;AAAA,UAOK,iBAAA;EACf,MAAA,EAAQ,KAAA;EACR,IAAA;IACE,QAAA;IACA,QAAA;IACA,WAAA;IACA,SAAA;EAAA;EAEF,QAAA;IACE,KAAA,GAAQ,WAAA;IACR,KAAA,GAAQ,YAAA;EAAA;AAAA;AAAA,UAQK,WAAA;EACf,EAAA;EACA,IAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,QAAA;EACA,eAAA;EACA,SAAA;EACA,aAAA,GAAgB,iBAAA;EAChB,GAAA;EACA,QAAA;EACA,YAAA;EACA,aAAA;AAAA;AAAA,UAGe,iBAAA;EACf,cAAA;EACA,cAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;AAAA;AAAA,UAOe,YAAA;EA1Bf;EA4BA,aAAA;EA1BA;EA4BA,IAAA;EA1BA;EA4BA,OAAA;AAAA;AAAA,UAGe,YAAA;EACf,gBAAA;EACA,SAAA;AAAA;AAAA,UAyCe,YAAA;EACf,QAAA;EACA,IAAA;EACA,GAAA;EACA,eAAA;EACA,KAAA;EACA,MAAA;EACA,UAAA;EACA,aAAA;IACE,SAAA;EAAA;AAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { o as OAuthTokens } from "./base-DBtKFiSX.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/providers/tiktok/types.d.ts
|
|
4
|
+
interface TikTokCredentials {
|
|
5
|
+
clientKey: string;
|
|
6
|
+
clientSecret: string;
|
|
7
|
+
redirectUri?: string;
|
|
8
|
+
}
|
|
9
|
+
interface TikTokTokenData extends OAuthTokens {
|
|
10
|
+
open_id?: string;
|
|
11
|
+
refresh_expires_in?: number;
|
|
12
|
+
}
|
|
13
|
+
interface TikTokCredentialData {
|
|
14
|
+
clientKey?: string;
|
|
15
|
+
clientSecret?: string;
|
|
16
|
+
oauthTokenData?: string | TikTokTokenData;
|
|
17
|
+
}
|
|
18
|
+
type TikTokPrivacyLevel = 'PUBLIC_TO_EVERYONE' | 'MUTUAL_FOLLOW_FRIENDS' | 'FOLLOWER_OF_CREATOR' | 'SELF_ONLY';
|
|
19
|
+
/** Simplified privacy mapping for SDK consumers */
|
|
20
|
+
type TikTokPrivacy = 'public' | 'private' | 'unlisted' | 'followers' | 'friends';
|
|
21
|
+
interface TikTokUploadPhotoParams {
|
|
22
|
+
imageUrls: string[];
|
|
23
|
+
title?: string;
|
|
24
|
+
privacy?: TikTokPrivacy;
|
|
25
|
+
tokens: OAuthTokens;
|
|
26
|
+
}
|
|
27
|
+
interface TikTokPostInfo {
|
|
28
|
+
title: string;
|
|
29
|
+
privacy_level: string;
|
|
30
|
+
disable_duet: boolean;
|
|
31
|
+
disable_stitch: boolean;
|
|
32
|
+
disable_comment: boolean;
|
|
33
|
+
video_cover_timestamp_ms: number;
|
|
34
|
+
/** Branded content toggle — disclose commercial partnerships */
|
|
35
|
+
brand_content_toggle?: boolean;
|
|
36
|
+
/** Branded organic toggle — for organic branded content */
|
|
37
|
+
brand_organic_toggle?: boolean;
|
|
38
|
+
/** AI-generated content disclosure flag */
|
|
39
|
+
is_aigc?: boolean;
|
|
40
|
+
/** Whether TikTok should auto-add music to the video */
|
|
41
|
+
auto_add_music?: boolean;
|
|
42
|
+
}
|
|
43
|
+
type TikTokUploadSource = 'PULL_FROM_URL' | 'FILE_UPLOAD';
|
|
44
|
+
interface TikTokVideo {
|
|
45
|
+
id: string;
|
|
46
|
+
title: string;
|
|
47
|
+
description: string;
|
|
48
|
+
createTime: number;
|
|
49
|
+
coverImageUrl: string | null;
|
|
50
|
+
shareUrl: string | null;
|
|
51
|
+
duration: number | null;
|
|
52
|
+
viewCount: number | null;
|
|
53
|
+
likeCount: number | null;
|
|
54
|
+
commentCount: number | null;
|
|
55
|
+
shareCount: number | null;
|
|
56
|
+
}
|
|
57
|
+
interface ListTikTokVideosOptions {
|
|
58
|
+
/** Number of videos to return (1-20, default 20) */
|
|
59
|
+
maxCount?: number;
|
|
60
|
+
/** Pagination cursor (timestamp from previous response) */
|
|
61
|
+
cursor?: number;
|
|
62
|
+
}
|
|
63
|
+
interface ListTikTokVideosResult {
|
|
64
|
+
videos: TikTokVideo[];
|
|
65
|
+
cursor: number | null;
|
|
66
|
+
hasMore: boolean;
|
|
67
|
+
}
|
|
68
|
+
interface TikTokAccountInfo {
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
username?: string;
|
|
72
|
+
profileImage?: string | null;
|
|
73
|
+
bio?: string;
|
|
74
|
+
followerCount?: number;
|
|
75
|
+
followingCount?: number;
|
|
76
|
+
likesCount?: number;
|
|
77
|
+
videoCount?: number;
|
|
78
|
+
}
|
|
79
|
+
type TikTokPublishStatus = 'PROCESSING_UPLOAD' | 'PROCESSING_DOWNLOAD' | 'SENDING_TO_USER_INBOX' | 'PUBLISH_COMPLETE' | 'FAILED';
|
|
80
|
+
interface TikTokPublishStatusResponse {
|
|
81
|
+
status: TikTokPublishStatus;
|
|
82
|
+
fail_reason?: string;
|
|
83
|
+
publicaly_available_post_id?: string[];
|
|
84
|
+
uploaded_bytes?: number;
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { TikTokCredentials as a, TikTokPrivacyLevel as c, TikTokTokenData as d, TikTokUploadPhotoParams as f, TikTokCredentialData as i, TikTokPublishStatus as l, TikTokVideo as m, ListTikTokVideosResult as n, TikTokPostInfo as o, TikTokUploadSource as p, TikTokAccountInfo as r, TikTokPrivacy as s, ListTikTokVideosOptions as t, TikTokPublishStatusResponse as u };
|
|
88
|
+
//# sourceMappingURL=types-DfjDgEoJ.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-DfjDgEoJ.d.mts","names":[],"sources":["../src/providers/tiktok/types.ts"],"mappings":";;;UAeiB,iBAAA;EACf,SAAA;EACA,YAAA;EACA,WAAA;AAAA;AAAA,UAGe,eAAA,SAAwB,WAAA;EACvC,OAAA;EACA,kBAAA;AAAA;AAAA,UAGe,oBAAA;EACf,SAAA;EACA,YAAA;EACA,cAAA,YAA0B,eAAA;AAAA;AAAA,KAOhB,kBAAA;;KAOA,aAAA;AAAA,UAMK,uBAAA;EACf,SAAA;EACA,KAAA;EACA,OAAA,GAAU,aAAA;EACV,MAAA,EAAQ,WAAA;AAAA;AAAA,UAGO,cAAA;EACf,KAAA;EACA,aAAA;EACA,YAAA;EACA,cAAA;EACA,eAAA;EACA,wBAAA;EAnBuB;EAqBvB,oBAAA;EAfe;EAiBf,oBAAA;;EAEA,OAAA;EAlBA;EAoBA,cAAA;AAAA;AAAA,KAOU,kBAAA;AAAA,UAuBK,WAAA;EACf,EAAA;EACA,KAAA;EACA,WAAA;EACA,UAAA;EACA,aAAA;EACA,QAAA;EACA,QAAA;EACA,SAAA;EACA,SAAA;EACA,YAAA;EACA,UAAA;AAAA;AAAA,UAGe,uBAAA;EAdW;EAgB1B,QAAA;EAdA;EAgBA,MAAA;AAAA;AAAA,UAGe,sBAAA;EACf,MAAA,EAAQ,WAAA;EACR,MAAA;EACA,OAAA;AAAA;AAAA,UAOe,iBAAA;EACf,EAAA;EACA,IAAA;EACA,QAAA;EACA,YAAA;EACA,GAAA;EACA,aAAA;EACA,cAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,KAOU,mBAAA;AAAA,UAOK,2BAAA;EACf,MAAA,EAAQ,mBAAA;EACR,WAAA;EACA,2BAAA;EACA,cAAA;AAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/providers/twitter/types.ts
|
|
2
|
+
const TWITTER_ERROR_HINTS = {
|
|
3
|
+
"UNAUTHORIZED": "Your access token is invalid or expired. Re-authenticate via OAuth 2.0.",
|
|
4
|
+
"FORBIDDEN": "Your app does not have the required permissions. Check your OAuth scopes and API access level (Basic/Pro).",
|
|
5
|
+
"TOKEN_EXPIRED": "Access token has expired. Use the refresh token to get a new one.",
|
|
6
|
+
"TOO_MANY_REQUESTS": "Rate limit exceeded. Twitter API v2 allows ~300 tweets/3hrs and ~50 reads/15min on Basic.",
|
|
7
|
+
"RATE_LIMIT": "Rate limit exceeded. Wait before retrying.",
|
|
8
|
+
"DUPLICATE_CONTENT": "This tweet is a duplicate of a recent tweet. Twitter blocks identical tweets within a short window.",
|
|
9
|
+
"TWEET_NOT_FOUND": "The referenced tweet does not exist or has been deleted.",
|
|
10
|
+
"USER_NOT_FOUND": "The referenced user does not exist or has been suspended.",
|
|
11
|
+
"NOT_AUTHORIZED_FOR_FIELD": "Your API access level does not include this field. Upgrade to Basic or Pro tier.",
|
|
12
|
+
"CLIENT_NOT_ENROLLED": "Your app needs Basic or Pro API access. Apply at developer.x.com.",
|
|
13
|
+
"DISALLOWED_RESOURCE": "This resource is not available at your access level.",
|
|
14
|
+
"MEDIA_NOT_FOUND": "The media_id does not exist or has expired. Media IDs expire after ~60 minutes.",
|
|
15
|
+
"INVALID_MEDIA": "The media is not a supported format. Supported: JPEG, PNG, GIF, MP4, MOV.",
|
|
16
|
+
"DM_NOT_ALLOWED": "The recipient has DMs disabled or you are not allowed to DM them.",
|
|
17
|
+
"RESOURCE_NOT_FOUND": "The requested resource does not exist.",
|
|
18
|
+
"INVALID_REQUEST": "The request was malformed. Check required fields and parameter formats."
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { TWITTER_ERROR_HINTS as t };
|
|
23
|
+
//# sourceMappingURL=types-Dp5Z9VBr.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-Dp5Z9VBr.mjs","names":[],"sources":["../src/providers/twitter/types.ts"],"sourcesContent":["/**\n * Twitter/X Provider Types\n * ========================\n * Type definitions for the Twitter API v2.\n *\n * @see https://developer.x.com/en/docs/x-api\n * @see https://developer.x.com/en/docs/authentication/oauth-2-0\n */\n\n// ---------------------------------------------------------------------------\n// Auth / Credentials\n// ---------------------------------------------------------------------------\n\nexport interface TwitterCredentials {\n clientId: string;\n clientSecret: string;\n redirectUri?: string;\n}\n\nexport interface TwitterTokenData {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n token_type?: string;\n scope?: string;\n}\n\nexport interface TwitterCredentialData {\n clientId?: string;\n clientSecret?: string;\n oauthTokenData?: string | TwitterTokenData;\n}\n\n// ---------------------------------------------------------------------------\n// Tweet\n// ---------------------------------------------------------------------------\n\nexport interface Tweet {\n id: string;\n text: string;\n authorId?: string;\n createdAt?: string;\n conversationId?: string;\n inReplyToUserId?: string;\n publicMetrics?: TweetPublicMetrics;\n entities?: TweetEntities;\n attachments?: { mediaKeys?: string[] };\n source?: string;\n lang?: string;\n replySettings?: 'everyone' | 'mentionedUsers' | 'following';\n editHistoryTweetIds?: string[];\n}\n\nexport interface TweetPublicMetrics {\n retweetCount: number;\n replyCount: number;\n likeCount: number;\n quoteCount: number;\n bookmarkCount?: number;\n impressionCount?: number;\n}\n\nexport interface TweetEntities {\n urls?: { start: number; end: number; url: string; expandedUrl: string; displayUrl: string }[];\n mentions?: { start: number; end: number; username: string; id: string }[];\n hashtags?: { start: number; end: number; tag: string }[];\n cashtags?: { start: number; end: number; tag: string }[];\n annotations?: { start: number; end: number; probability: number; type: string; normalizedText: string }[];\n}\n\n// ---------------------------------------------------------------------------\n// Tweet Create / Reply / Quote\n// ---------------------------------------------------------------------------\n\nexport interface CreateTweetParams {\n text: string;\n /** Tweet ID to reply to */\n replyTo?: string;\n /** Tweet ID to quote */\n quoteTweetId?: string;\n /** Media IDs to attach (already uploaded) */\n mediaIds?: string[];\n /** Poll options */\n poll?: { options: string[]; durationMinutes: number };\n /** Reply settings */\n replySettings?: 'mentionedUsers' | 'following';\n /** For direct messages: allow AI tools to auto-send DMs */\n forSuperFollowersOnly?: boolean;\n}\n\nexport interface CreateTweetResult {\n id: string;\n text: string;\n editHistoryTweetIds?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Tweet Search\n// ---------------------------------------------------------------------------\n\nexport interface TweetSearchParams {\n query: string;\n /** Maximum results per page (10-100, default 10) */\n maxResults?: number;\n /** Pagination token for next page */\n nextToken?: string;\n /** Start time (ISO 8601) — last 7 days for Basic */\n startTime?: string;\n /** End time (ISO 8601) */\n endTime?: string;\n /** Sort order */\n sortOrder?: 'recency' | 'relevancy';\n /** Tweet fields to include */\n tweetFields?: TweetField[];\n /** User fields to include in user expansions */\n userFields?: UserField[];\n /** Expansion fields */\n expansions?: TweetExpansion[];\n}\n\nexport type TweetField =\n | 'attachments' | 'author_id' | 'context_annotations' | 'conversation_id'\n | 'created_at' | 'edit_controls' | 'entities' | 'geo'\n | 'id' | 'in_reply_to_user_id' | 'lang' | 'non_public_metrics'\n | 'organic_metrics' | 'possibly_sensitive' | 'promoted_metrics'\n | 'public_metrics' | 'referenced_tweets' | 'reply_settings'\n | 'source' | 'text' | 'withheld';\n\nexport type UserField =\n | 'created_at' | 'description' | 'entities' | 'id'\n | 'location' | 'most_recent_tweet_id' | 'name' | 'pinned_tweet_id'\n | 'profile_image_url' | 'protected' | 'public_metrics' | 'url'\n | 'username' | 'verified' | 'verified_type' | 'withheld';\n\nexport type TweetExpansion =\n | 'attachments.media_keys' | 'attachments.poll_ids'\n | 'author_id' | 'edit_history_tweet_ids'\n | 'entities.mentions.username' | 'geo.place_id'\n | 'in_reply_to_user_id' | 'referenced_tweets.id'\n | 'referenced_tweets.id.author_id';\n\nexport interface TweetSearchResult {\n tweets: Tweet[];\n meta: {\n newestId?: string;\n oldestId?: string;\n resultCount: number;\n nextToken?: string;\n };\n includes?: {\n users?: TwitterUser[];\n media?: TwitterMedia[];\n };\n}\n\n// ---------------------------------------------------------------------------\n// User\n// ---------------------------------------------------------------------------\n\nexport interface TwitterUser {\n id: string;\n name: string;\n username: string;\n createdAt?: string;\n description?: string;\n location?: string;\n profileImageUrl?: string;\n protected?: boolean;\n publicMetrics?: UserPublicMetrics;\n url?: string;\n verified?: boolean;\n verifiedType?: 'blue' | 'business' | 'government' | 'none';\n pinnedTweetId?: string;\n}\n\nexport interface UserPublicMetrics {\n followersCount: number;\n followingCount: number;\n tweetCount: number;\n listedCount: number;\n likeCount?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Direct Message\n// ---------------------------------------------------------------------------\n\nexport interface SendDmParams {\n /** Recipient user ID */\n participantId: string;\n /** Message text */\n text: string;\n /** Media ID to attach */\n mediaId?: string;\n}\n\nexport interface SendDmResult {\n dmConversationId: string;\n dmEventId: string;\n}\n\n// ---------------------------------------------------------------------------\n// List\n// ---------------------------------------------------------------------------\n\nexport interface TwitterList {\n id: string;\n name: string;\n description?: string;\n memberCount?: number;\n followerCount?: number;\n private?: boolean;\n ownerId?: string;\n createdAt?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Media Upload (v1.1 endpoint — still required for v2 tweets)\n// ---------------------------------------------------------------------------\n\nexport interface MediaUploadResult {\n mediaId: string;\n mediaIdString: string;\n size?: number;\n expiresAfterSecs?: number;\n processingInfo?: {\n state: 'pending' | 'in_progress' | 'succeeded' | 'failed';\n checkAfterSecs?: number;\n progressPercent?: number;\n error?: { code: number; name: string; message: string };\n };\n}\n\nexport type MediaCategory = 'tweet_image' | 'tweet_gif' | 'tweet_video';\n\n// ---------------------------------------------------------------------------\n// Media\n// ---------------------------------------------------------------------------\n\nexport interface TwitterMedia {\n mediaKey: string;\n type: 'animated_gif' | 'photo' | 'video';\n url?: string;\n previewImageUrl?: string;\n width?: number;\n height?: number;\n durationMs?: number;\n publicMetrics?: {\n viewCount?: number;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Pagination\n// ---------------------------------------------------------------------------\n\nexport interface PaginatedResponse<T> {\n data: T[];\n meta: {\n resultCount: number;\n nextToken?: string;\n previousToken?: string;\n };\n}\n\n// ---------------------------------------------------------------------------\n// API Response Shapes (raw)\n// ---------------------------------------------------------------------------\n\nexport interface TwitterApiResponse<T = unknown> {\n data?: T;\n meta?: Record<string, unknown>;\n includes?: Record<string, unknown>;\n errors?: TwitterApiError[];\n}\n\nexport interface TwitterApiError {\n title: string;\n detail: string;\n type: string;\n status?: number;\n resourceType?: string;\n parameter?: string;\n value?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Error Hints\n// ---------------------------------------------------------------------------\n\nexport const TWITTER_ERROR_HINTS: Record<string, string> = {\n // Auth\n 'UNAUTHORIZED': 'Your access token is invalid or expired. Re-authenticate via OAuth 2.0.',\n 'FORBIDDEN': 'Your app does not have the required permissions. Check your OAuth scopes and API access level (Basic/Pro).',\n 'TOKEN_EXPIRED': 'Access token has expired. Use the refresh token to get a new one.',\n\n // Rate limits\n 'TOO_MANY_REQUESTS': 'Rate limit exceeded. Twitter API v2 allows ~300 tweets/3hrs and ~50 reads/15min on Basic.',\n 'RATE_LIMIT': 'Rate limit exceeded. Wait before retrying.',\n\n // Content\n 'DUPLICATE_CONTENT': 'This tweet is a duplicate of a recent tweet. Twitter blocks identical tweets within a short window.',\n 'TWEET_NOT_FOUND': 'The referenced tweet does not exist or has been deleted.',\n 'USER_NOT_FOUND': 'The referenced user does not exist or has been suspended.',\n\n // Permissions\n 'NOT_AUTHORIZED_FOR_FIELD': 'Your API access level does not include this field. Upgrade to Basic or Pro tier.',\n 'CLIENT_NOT_ENROLLED': 'Your app needs Basic or Pro API access. Apply at developer.x.com.',\n 'DISALLOWED_RESOURCE': 'This resource is not available at your access level.',\n\n // Media\n 'MEDIA_NOT_FOUND': 'The media_id does not exist or has expired. Media IDs expire after ~60 minutes.',\n 'INVALID_MEDIA': 'The media is not a supported format. Supported: JPEG, PNG, GIF, MP4, MOV.',\n\n // DMs\n 'DM_NOT_ALLOWED': 'The recipient has DMs disabled or you are not allowed to DM them.',\n\n // General\n 'RESOURCE_NOT_FOUND': 'The requested resource does not exist.',\n 'INVALID_REQUEST': 'The request was malformed. Check required fields and parameter formats.',\n};\n"],"mappings":";AAkSA,MAAa,sBAA8C;CAEzD,gBAAgB;CAChB,aAAa;CACb,iBAAiB;CAGjB,qBAAqB;CACrB,cAAc;CAGd,qBAAqB;CACrB,mBAAmB;CACnB,kBAAkB;CAGlB,4BAA4B;CAC5B,uBAAuB;CACvB,uBAAuB;CAGvB,mBAAmB;CACnB,iBAAiB;CAGjB,kBAAkB;CAGlB,sBAAsB;CACtB,mBAAmB;CACpB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { o as OAuthTokens, t as AccountInfo } from "./base-DBtKFiSX.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/providers/instagram/types.d.ts
|
|
4
|
+
interface InstagramTokens {
|
|
5
|
+
access_token: string;
|
|
6
|
+
ig_user_id: string;
|
|
7
|
+
}
|
|
8
|
+
interface InstagramCredentialData {
|
|
9
|
+
appId?: string;
|
|
10
|
+
appSecret?: string;
|
|
11
|
+
oauthTokenData?: string | OAuthTokens;
|
|
12
|
+
}
|
|
13
|
+
interface InstagramAccountInfo extends AccountInfo {
|
|
14
|
+
ig_user_id?: string;
|
|
15
|
+
username: string;
|
|
16
|
+
followersCount?: number;
|
|
17
|
+
mediaCount?: number;
|
|
18
|
+
biography?: string;
|
|
19
|
+
website?: string;
|
|
20
|
+
}
|
|
21
|
+
interface InstagramUploadVideoParams {
|
|
22
|
+
videoUrl: string;
|
|
23
|
+
title?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
tokens: InstagramTokens;
|
|
26
|
+
scheduledAt?: string | Date;
|
|
27
|
+
onProgress?: (progress: number) => void;
|
|
28
|
+
/** Custom cover image URL for the reel */
|
|
29
|
+
coverUrl?: string;
|
|
30
|
+
/** Whether the reel should also appear on the feed */
|
|
31
|
+
shareToFeed?: boolean;
|
|
32
|
+
/** Audio clip name for the reel */
|
|
33
|
+
audioName?: string;
|
|
34
|
+
/** Location page ID to tag the post */
|
|
35
|
+
locationId?: string;
|
|
36
|
+
}
|
|
37
|
+
interface InstagramUploadPhotoParams {
|
|
38
|
+
imageUrl: string;
|
|
39
|
+
caption?: string;
|
|
40
|
+
tokens: InstagramTokens;
|
|
41
|
+
/** Location page ID to tag the post */
|
|
42
|
+
locationId?: string;
|
|
43
|
+
/** Array of user IDs to tag in the photo */
|
|
44
|
+
userTags?: InstagramUserTag[];
|
|
45
|
+
}
|
|
46
|
+
interface InstagramUserTag {
|
|
47
|
+
/** Instagram user ID */
|
|
48
|
+
userId: string;
|
|
49
|
+
/** X position (0.0 to 1.0, left to right) */
|
|
50
|
+
x: number;
|
|
51
|
+
/** Y position (0.0 to 1.0, top to bottom) */
|
|
52
|
+
y: number;
|
|
53
|
+
}
|
|
54
|
+
interface CarouselItem {
|
|
55
|
+
type: 'IMAGE' | 'VIDEO';
|
|
56
|
+
url: string;
|
|
57
|
+
/** User tags (only for IMAGE items) */
|
|
58
|
+
userTags?: InstagramUserTag[];
|
|
59
|
+
}
|
|
60
|
+
interface InstagramUploadCarouselParams {
|
|
61
|
+
items: CarouselItem[];
|
|
62
|
+
caption?: string;
|
|
63
|
+
tokens: InstagramTokens;
|
|
64
|
+
/** Location page ID to tag the post */
|
|
65
|
+
locationId?: string;
|
|
66
|
+
}
|
|
67
|
+
type InstagramMediaType = 'IMAGE' | 'VIDEO' | 'CAROUSEL_ALBUM';
|
|
68
|
+
interface InstagramMedia {
|
|
69
|
+
id: string;
|
|
70
|
+
caption: string | null;
|
|
71
|
+
mediaType: InstagramMediaType;
|
|
72
|
+
mediaUrl: string | null;
|
|
73
|
+
thumbnailUrl: string | null;
|
|
74
|
+
permalink: string | null;
|
|
75
|
+
timestamp: string;
|
|
76
|
+
likeCount: number | null;
|
|
77
|
+
commentsCount: number | null;
|
|
78
|
+
/** Username of the media owner */
|
|
79
|
+
username?: string;
|
|
80
|
+
}
|
|
81
|
+
interface ListMediaOptions {
|
|
82
|
+
/** Number of items per page (1-100, default 25) */
|
|
83
|
+
limit?: number;
|
|
84
|
+
/** Pagination cursor — fetch items after this cursor */
|
|
85
|
+
after?: string;
|
|
86
|
+
/** Pagination cursor — fetch items before this cursor */
|
|
87
|
+
before?: string;
|
|
88
|
+
}
|
|
89
|
+
interface ListMediaResult {
|
|
90
|
+
media: InstagramMedia[];
|
|
91
|
+
paging: {
|
|
92
|
+
after: string | null;
|
|
93
|
+
before: string | null;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
interface MediaInsights {
|
|
97
|
+
reach: number | null;
|
|
98
|
+
impressions: number | null;
|
|
99
|
+
engagement: number | null;
|
|
100
|
+
saved: number | null;
|
|
101
|
+
likes: number | null;
|
|
102
|
+
comments: number | null;
|
|
103
|
+
shares: number | null;
|
|
104
|
+
/** Video plays (only for VIDEO and CAROUSEL_ALBUM with video) */
|
|
105
|
+
plays?: number | null;
|
|
106
|
+
}
|
|
107
|
+
type ContainerStatusCode = 'EXPIRED' | 'ERROR' | 'FINISHED' | 'IN_PROGRESS' | 'PUBLISHED';
|
|
108
|
+
interface ContainerStatus {
|
|
109
|
+
id: string;
|
|
110
|
+
status_code: ContainerStatusCode;
|
|
111
|
+
status?: string;
|
|
112
|
+
}
|
|
113
|
+
interface InstagramTestResult {
|
|
114
|
+
status: 'OK' | 'Error' | 'Pending';
|
|
115
|
+
message: string;
|
|
116
|
+
data?: {
|
|
117
|
+
channelId: string;
|
|
118
|
+
channelTitle: string;
|
|
119
|
+
profileImage?: string;
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
interface InstagramSetupStep {
|
|
123
|
+
step: number;
|
|
124
|
+
title: string;
|
|
125
|
+
description: string;
|
|
126
|
+
}
|
|
127
|
+
//#endregion
|
|
128
|
+
export { MediaInsights as _, InstagramCredentialData as a, InstagramSetupStep as c, InstagramUploadCarouselParams as d, InstagramUploadPhotoParams as f, ListMediaResult as g, ListMediaOptions as h, InstagramAccountInfo as i, InstagramTestResult as l, InstagramUserTag as m, ContainerStatus as n, InstagramMedia as o, InstagramUploadVideoParams as p, ContainerStatusCode as r, InstagramMediaType as s, CarouselItem as t, InstagramTokens as u };
|
|
129
|
+
//# sourceMappingURL=types-hriBJTsU.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-hriBJTsU.d.mts","names":[],"sources":["../src/providers/instagram/types.ts"],"mappings":";;;UAeiB,eAAA;EACf,YAAA;EACA,UAAA;AAAA;AAAA,UAGe,uBAAA;EACf,KAAA;EACA,SAAA;EACA,cAAA,YAA0B,WAAA;AAAA;AAAA,UAOX,oBAAA,SAA6B,WAAA;EAC5C,UAAA;EACA,QAAA;EACA,cAAA;EACA,UAAA;EACA,SAAA;EACA,OAAA;AAAA;AAAA,UAOe,0BAAA;EACf,QAAA;EACA,KAAA;EACA,WAAA;EACA,MAAA,EAAQ,eAAA;EACR,WAAA,YAAuB,IAAA;EACvB,UAAA,IAAc,QAAA;;EAEd,QAAA;EAPA;EASA,WAAA;EAPA;EASA,SAAA;EARQ;EAUR,UAAA;AAAA;AAAA,UAOe,0BAAA;EACf,QAAA;EACA,OAAA;EACA,MAAA,EAAQ,eAAA;EAZR;EAcA,UAAA;EAZU;EAcV,QAAA,GAAW,gBAAA;AAAA;AAAA,UAGI,gBAAA;;EAEf,MAAA;EAXA;EAaA,CAAA;EAXA;EAaA,CAAA;AAAA;AAAA,UAOe,YAAA;EACf,IAAA;EACA,GAAA;EAlB2B;EAoB3B,QAAA,GAAW,gBAAA;AAAA;AAAA,UAGI,6BAAA;EACf,KAAA,EAAO,YAAA;EACP,OAAA;EACA,MAAA,EAAQ,eAAA;EAjBR;EAmBA,UAAA;AAAA;AAAA,KAOU,kBAAA;AAAA,UAEK,cAAA;EACf,EAAA;EACA,OAAA;EACA,SAAA,EAAW,kBAAA;EACX,QAAA;EACA,YAAA;EACA,SAAA;EACA,SAAA;EACA,SAAA;EACA,aAAA;EAvB4C;EAyB5C,QAAA;AAAA;AAAA,UAOe,gBAAA;EA/BR;EAiCP,KAAA;EA/BA;EAiCA,KAAA;EA/BA;EAiCA,MAAA;AAAA;AAAA,UAGe,eAAA;EACf,KAAA,EAAO,cAAA;EACP,MAAA;IACE,KAAA;IACA,MAAA;EAAA;AAAA;AAAA,UAQa,aAAA;EACf,KAAA;EACA,WAAA;EACA,UAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;EACA,MAAA;EAxCA;EA0CA,KAAA;AAAA;AAAA,KAOU,mBAAA;AAAA,UAEK,eAAA;EACf,EAAA;EACA,WAAA,EAAa,mBAAA;EACb,MAAA;AAAA;AAAA,UAOe,mBAAA;EACf,MAAA;EACA,OAAA;EACA,IAAA;IACE,SAAA;IACA,YAAA;IACA,YAAA;EAAA;AAAA;AAAA,UAQa,kBAAA;EACf,IAAA;EACA,KAAA;EACA,WAAA;AAAA"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
//#region src/providers/reddit/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Reddit Provider Types
|
|
4
|
+
* =====================
|
|
5
|
+
* Type definitions for the Reddit API (OAuth2).
|
|
6
|
+
*
|
|
7
|
+
* @see https://www.reddit.com/dev/api/
|
|
8
|
+
* @see https://github.com/reddit-archive/reddit/wiki/OAuth2
|
|
9
|
+
*/
|
|
10
|
+
interface RedditCredentials {
|
|
11
|
+
clientId: string;
|
|
12
|
+
clientSecret: string;
|
|
13
|
+
redirectUri?: string;
|
|
14
|
+
}
|
|
15
|
+
type RedditPostKind = 'self' | 'link' | 'image' | 'video' | 'crosspost';
|
|
16
|
+
type RedditSortOrder = 'hot' | 'new' | 'rising' | 'top' | 'controversial' | 'best';
|
|
17
|
+
type RedditTimeFilter = 'hour' | 'day' | 'week' | 'month' | 'year' | 'all';
|
|
18
|
+
interface RedditPost {
|
|
19
|
+
id: string;
|
|
20
|
+
/** Fullname (t3_<id>) */
|
|
21
|
+
name: string;
|
|
22
|
+
title: string;
|
|
23
|
+
author: string;
|
|
24
|
+
subreddit: string;
|
|
25
|
+
subredditId: string;
|
|
26
|
+
selftext: string;
|
|
27
|
+
selftextHtml?: string;
|
|
28
|
+
url: string;
|
|
29
|
+
permalink: string;
|
|
30
|
+
domain: string;
|
|
31
|
+
score: number;
|
|
32
|
+
ups: number;
|
|
33
|
+
downs: number;
|
|
34
|
+
numComments: number;
|
|
35
|
+
createdUtc: number;
|
|
36
|
+
isSelf: boolean;
|
|
37
|
+
isVideo: boolean;
|
|
38
|
+
over18: boolean;
|
|
39
|
+
spoiler: boolean;
|
|
40
|
+
stickied: boolean;
|
|
41
|
+
locked: boolean;
|
|
42
|
+
archived: boolean;
|
|
43
|
+
thumbnail?: string;
|
|
44
|
+
linkFlairText?: string;
|
|
45
|
+
authorFlairText?: string;
|
|
46
|
+
/** Direct media URL (images) */
|
|
47
|
+
mediaUrl?: string;
|
|
48
|
+
}
|
|
49
|
+
interface CreatePostParams {
|
|
50
|
+
/** Target subreddit name (without r/ prefix) */
|
|
51
|
+
subreddit: string;
|
|
52
|
+
title: string;
|
|
53
|
+
/** Post kind: 'self' (text), 'link' (URL), 'image' (image URL) */
|
|
54
|
+
kind: RedditPostKind;
|
|
55
|
+
/** Text content for self posts (Markdown supported) */
|
|
56
|
+
text?: string;
|
|
57
|
+
/** URL for link/image posts */
|
|
58
|
+
url?: string;
|
|
59
|
+
/** Send inbox replies (default true) */
|
|
60
|
+
sendReplies?: boolean;
|
|
61
|
+
/** Mark as NSFW */
|
|
62
|
+
nsfw?: boolean;
|
|
63
|
+
/** Mark as spoiler */
|
|
64
|
+
spoiler?: boolean;
|
|
65
|
+
/** Flair ID */
|
|
66
|
+
flairId?: string;
|
|
67
|
+
/** Flair text */
|
|
68
|
+
flairText?: string;
|
|
69
|
+
/** Allow resubmission of duplicate URLs */
|
|
70
|
+
resubmit?: boolean;
|
|
71
|
+
}
|
|
72
|
+
interface CreatePostResult {
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
url: string;
|
|
76
|
+
}
|
|
77
|
+
interface RedditComment {
|
|
78
|
+
id: string;
|
|
79
|
+
/** Fullname (t1_<id>) */
|
|
80
|
+
name: string;
|
|
81
|
+
author: string;
|
|
82
|
+
body: string;
|
|
83
|
+
bodyHtml?: string;
|
|
84
|
+
score: number;
|
|
85
|
+
ups: number;
|
|
86
|
+
downs: number;
|
|
87
|
+
createdUtc: number;
|
|
88
|
+
parentId: string;
|
|
89
|
+
linkId: string;
|
|
90
|
+
subreddit: string;
|
|
91
|
+
depth: number;
|
|
92
|
+
isSubmitter: boolean;
|
|
93
|
+
stickied: boolean;
|
|
94
|
+
edited: boolean | number;
|
|
95
|
+
permalink: string;
|
|
96
|
+
}
|
|
97
|
+
interface CreateCommentParams {
|
|
98
|
+
/** Fullname of parent (t3_ for post, t1_ for comment reply) */
|
|
99
|
+
parentFullname: string;
|
|
100
|
+
/** Comment text (Markdown supported) */
|
|
101
|
+
text: string;
|
|
102
|
+
}
|
|
103
|
+
interface RedditSubreddit {
|
|
104
|
+
id: string;
|
|
105
|
+
name: string;
|
|
106
|
+
displayName: string;
|
|
107
|
+
displayNamePrefixed: string;
|
|
108
|
+
title: string;
|
|
109
|
+
publicDescription: string;
|
|
110
|
+
description?: string;
|
|
111
|
+
subscribers: number;
|
|
112
|
+
activeUserCount?: number;
|
|
113
|
+
createdUtc: number;
|
|
114
|
+
over18: boolean;
|
|
115
|
+
subredditType: 'public' | 'private' | 'restricted' | 'archived';
|
|
116
|
+
iconImg?: string;
|
|
117
|
+
bannerImg?: string;
|
|
118
|
+
communityIcon?: string;
|
|
119
|
+
url: string;
|
|
120
|
+
}
|
|
121
|
+
interface SubredditRule {
|
|
122
|
+
kind: string;
|
|
123
|
+
shortName: string;
|
|
124
|
+
description: string;
|
|
125
|
+
violationReason: string;
|
|
126
|
+
priority: number;
|
|
127
|
+
createdUtc: number;
|
|
128
|
+
}
|
|
129
|
+
type RedditProfileDetail = 'identity' | 'blocked' | 'friends' | 'karma' | 'prefs' | 'saved' | 'trophies';
|
|
130
|
+
interface RedditUserProfile {
|
|
131
|
+
id: string;
|
|
132
|
+
name: string;
|
|
133
|
+
/** Full account icon URL */
|
|
134
|
+
iconImg?: string;
|
|
135
|
+
createdUtc: number;
|
|
136
|
+
linkKarma: number;
|
|
137
|
+
commentKarma: number;
|
|
138
|
+
totalKarma: number;
|
|
139
|
+
isGold: boolean;
|
|
140
|
+
isMod: boolean;
|
|
141
|
+
hasVerifiedEmail: boolean;
|
|
142
|
+
/** Subreddit-specific karma breakdown */
|
|
143
|
+
subredditKarma?: {
|
|
144
|
+
subreddit: string;
|
|
145
|
+
linkKarma: number;
|
|
146
|
+
commentKarma: number;
|
|
147
|
+
}[];
|
|
148
|
+
}
|
|
149
|
+
type VoteDirection = 1 | 0 | -1;
|
|
150
|
+
interface RedditListingParams {
|
|
151
|
+
/** Number of items (max 100) */
|
|
152
|
+
limit?: number;
|
|
153
|
+
/** Fullname of item to fetch items after */
|
|
154
|
+
after?: string;
|
|
155
|
+
/** Fullname of item to fetch items before */
|
|
156
|
+
before?: string;
|
|
157
|
+
/** Sort order (for subreddit posts) */
|
|
158
|
+
sort?: RedditSortOrder;
|
|
159
|
+
/** Time filter (for top/controversial) */
|
|
160
|
+
time?: RedditTimeFilter;
|
|
161
|
+
}
|
|
162
|
+
interface RedditListing<T> {
|
|
163
|
+
items: T[];
|
|
164
|
+
after: string | null;
|
|
165
|
+
before: string | null;
|
|
166
|
+
}
|
|
167
|
+
interface RedditSearchParams {
|
|
168
|
+
query: string;
|
|
169
|
+
/** Restrict to a subreddit (omit for site-wide) */
|
|
170
|
+
subreddit?: string;
|
|
171
|
+
/** Sort: relevance, hot, top, new, comments */
|
|
172
|
+
sort?: 'relevance' | 'hot' | 'top' | 'new' | 'comments';
|
|
173
|
+
/** Time filter */
|
|
174
|
+
time?: RedditTimeFilter;
|
|
175
|
+
/** Max results per page (max 100) */
|
|
176
|
+
limit?: number;
|
|
177
|
+
/** Pagination cursor */
|
|
178
|
+
after?: string;
|
|
179
|
+
/** Restrict to self posts or links */
|
|
180
|
+
type?: 'link' | 'sr' | 'user';
|
|
181
|
+
}
|
|
182
|
+
//#endregion
|
|
183
|
+
export { RedditCredentials as a, RedditPost as c, RedditSubreddit as d, RedditUserProfile as f, RedditComment as i, RedditProfileDetail as l, VoteDirection as m, CreatePostParams as n, RedditListing as o, SubredditRule as p, CreatePostResult as r, RedditListingParams as s, CreateCommentParams as t, RedditSearchParams as u };
|
|
184
|
+
//# sourceMappingURL=types-rn6UuLL8.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-rn6UuLL8.d.mts","names":[],"sources":["../src/providers/reddit/types.ts"],"mappings":";;AAaA;;;;;;;UAAiB,iBAAA;EACf,QAAA;EACA,YAAA;EACA,WAAA;AAAA;AAAA,KAqBU,cAAA;AAAA,KACA,eAAA;AAAA,KACA,gBAAA;AAAA,UAEK,UAAA;EACf,EAAA;EAEA;EAAA,IAAA;EACA,KAAA;EACA,MAAA;EACA,SAAA;EACA,WAAA;EACA,QAAA;EACA,YAAA;EACA,GAAA;EACA,SAAA;EACA,MAAA;EACA,KAAA;EACA,GAAA;EACA,KAAA;EACA,WAAA;EACA,UAAA;EACA,MAAA;EACA,OAAA;EACA,MAAA;EACA,OAAA;EACA,QAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,aAAA;EACA,eAAA;EAEQ;EAAR,QAAA;AAAA;AAAA,UAGe,gBAAA;;EAEf,SAAA;EACA,KAAA;EAAA;EAEA,IAAA,EAAM,cAAA;EAAA;EAEN,IAAA;EAEA;EAAA,GAAA;EAIA;EAFA,WAAA;EAMA;EAJA,IAAA;EAQA;EANA,OAAA;EAMQ;EAJR,OAAA;EAO+B;EAL/B,SAAA;EAK+B;EAH/B,QAAA;AAAA;AAAA,UAGe,gBAAA;EACf,EAAA;EACA,IAAA;EACA,GAAA;AAAA;AAAA,UAOe,aAAA;EACf,EAAA;EAAA;EAEA,IAAA;EACA,MAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA;EACA,GAAA;EACA,KAAA;EACA,UAAA;EACA,QAAA;EACA,MAAA;EACA,SAAA;EACA,KAAA;EACA,WAAA;EACA,QAAA;EACA,MAAA;EACA,SAAA;AAAA;AAAA,UAGe,mBAAA;EAAA;EAEf,cAAA;;EAEA,IAAA;AAAA;AAAA,UAOe,eAAA;EACf,EAAA;EACA,IAAA;EACA,WAAA;EACA,mBAAA;EACA,KAAA;EACA,iBAAA;EACA,WAAA;EACA,WAAA;EACA,eAAA;EACA,UAAA;EACA,MAAA;EACA,aAAA;EACA,OAAA;EACA,SAAA;EACA,aAAA;EACA,GAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,QAAA;EACA,UAAA;AAAA;AAAA,KAOU,mBAAA;AAAA,UAGK,iBAAA;EACf,EAAA;EACA,IAAA;EAbA;EAeA,OAAA;EACA,UAAA;EACA,SAAA;EACA,YAAA;EACA,UAAA;EACA,MAAA;EACA,KAAA;EACA,gBAAA;EAXe;EAaf,cAAA;IAAmB,SAAA;IAAmB,SAAA;IAAmB,YAAA;EAAA;AAAA;AAAA,KAuB/C,aAAA;AAAA,UAMK,mBAAA;EA7BsD;EA+BrE,KAAA;EARuB;EAUvB,KAAA;EAVuB;EAYvB,MAAA;EANe;EAQf,IAAA,GAAO,eAAA;;EAEP,IAAA,GAAO,gBAAA;AAAA;AAAA,UAGQ,aAAA;EACf,KAAA,EAAO,CAAA;EACP,KAAA;EACA,MAAA;AAAA;AAAA,UAOe,kBAAA;EACf,KAAA;EAduB;EAgBvB,SAAA;EAb4B;EAe5B,IAAA;EAdQ;EAgBR,IAAA,GAAO,gBAAA;EAhBP;EAkBA,KAAA;EAjBA;EAmBA,KAAA;EAlBM;EAoBN,IAAA;AAAA"}
|