@opencoredev/social-sdk 0.1.1 → 0.1.2

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.
Files changed (154) hide show
  1. package/README.md +4 -2
  2. package/package.json +1 -1
  3. package/dist/cli.d.ts +0 -14
  4. package/dist/cli.d.ts.map +0 -1
  5. package/dist/cli.js +0 -234
  6. package/dist/cli.js.map +0 -1
  7. package/dist/cloud/common.d.ts +0 -26
  8. package/dist/cloud/common.d.ts.map +0 -1
  9. package/dist/cloud/common.js +0 -307
  10. package/dist/cloud/common.js.map +0 -1
  11. package/dist/cloud/lifecycle.d.ts +0 -11
  12. package/dist/cloud/lifecycle.d.ts.map +0 -1
  13. package/dist/cloud/lifecycle.js +0 -108
  14. package/dist/cloud/lifecycle.js.map +0 -1
  15. package/dist/cloud/media.d.ts +0 -24
  16. package/dist/cloud/media.d.ts.map +0 -1
  17. package/dist/cloud/media.js +0 -97
  18. package/dist/cloud/media.js.map +0 -1
  19. package/dist/cloud/outcomes.d.ts +0 -10
  20. package/dist/cloud/outcomes.d.ts.map +0 -1
  21. package/dist/cloud/outcomes.js +0 -188
  22. package/dist/cloud/outcomes.js.map +0 -1
  23. package/dist/cloud/post-for-me.d.ts +0 -70
  24. package/dist/cloud/post-for-me.d.ts.map +0 -1
  25. package/dist/cloud/post-for-me.js +0 -326
  26. package/dist/cloud/post-for-me.js.map +0 -1
  27. package/dist/cloud/zernio.d.ts +0 -112
  28. package/dist/cloud/zernio.d.ts.map +0 -1
  29. package/dist/cloud/zernio.js +0 -542
  30. package/dist/cloud/zernio.js.map +0 -1
  31. package/dist/core/adapter.d.ts +0 -118
  32. package/dist/core/adapter.d.ts.map +0 -1
  33. package/dist/core/adapter.js +0 -4
  34. package/dist/core/adapter.js.map +0 -1
  35. package/dist/core/client.d.ts +0 -108
  36. package/dist/core/client.d.ts.map +0 -1
  37. package/dist/core/client.js +0 -893
  38. package/dist/core/client.js.map +0 -1
  39. package/dist/core/concurrency.d.ts +0 -10
  40. package/dist/core/concurrency.d.ts.map +0 -1
  41. package/dist/core/concurrency.js +0 -78
  42. package/dist/core/concurrency.js.map +0 -1
  43. package/dist/core/errors.d.ts +0 -45
  44. package/dist/core/errors.d.ts.map +0 -1
  45. package/dist/core/errors.js +0 -44
  46. package/dist/core/errors.js.map +0 -1
  47. package/dist/core/idempotency.d.ts +0 -34
  48. package/dist/core/idempotency.d.ts.map +0 -1
  49. package/dist/core/idempotency.js +0 -59
  50. package/dist/core/idempotency.js.map +0 -1
  51. package/dist/core/index.d.ts +0 -7
  52. package/dist/core/index.d.ts.map +0 -1
  53. package/dist/core/index.js +0 -7
  54. package/dist/core/index.js.map +0 -1
  55. package/dist/core/pagination.d.ts +0 -12
  56. package/dist/core/pagination.d.ts.map +0 -1
  57. package/dist/core/pagination.js +0 -81
  58. package/dist/core/pagination.js.map +0 -1
  59. package/dist/core/types.d.ts +0 -329
  60. package/dist/core/types.d.ts.map +0 -1
  61. package/dist/core/types.js +0 -7
  62. package/dist/core/types.js.map +0 -1
  63. package/dist/index.d.ts +0 -2
  64. package/dist/index.d.ts.map +0 -1
  65. package/dist/index.js +0 -2
  66. package/dist/index.js.map +0 -1
  67. package/dist/platforms/bluesky.d.ts +0 -132
  68. package/dist/platforms/bluesky.d.ts.map +0 -1
  69. package/dist/platforms/bluesky.js +0 -1049
  70. package/dist/platforms/bluesky.js.map +0 -1
  71. package/dist/platforms/instagram.d.ts +0 -63
  72. package/dist/platforms/instagram.d.ts.map +0 -1
  73. package/dist/platforms/instagram.js +0 -676
  74. package/dist/platforms/instagram.js.map +0 -1
  75. package/dist/platforms/linkedin.d.ts +0 -54
  76. package/dist/platforms/linkedin.d.ts.map +0 -1
  77. package/dist/platforms/linkedin.js +0 -580
  78. package/dist/platforms/linkedin.js.map +0 -1
  79. package/dist/platforms/threads.d.ts +0 -102
  80. package/dist/platforms/threads.d.ts.map +0 -1
  81. package/dist/platforms/threads.js +0 -571
  82. package/dist/platforms/threads.js.map +0 -1
  83. package/dist/platforms/tiktok.d.ts +0 -32
  84. package/dist/platforms/tiktok.d.ts.map +0 -1
  85. package/dist/platforms/tiktok.js +0 -511
  86. package/dist/platforms/tiktok.js.map +0 -1
  87. package/dist/platforms/x-engagement.d.ts +0 -17
  88. package/dist/platforms/x-engagement.d.ts.map +0 -1
  89. package/dist/platforms/x-engagement.js +0 -47
  90. package/dist/platforms/x-engagement.js.map +0 -1
  91. package/dist/platforms/x.d.ts +0 -82
  92. package/dist/platforms/x.d.ts.map +0 -1
  93. package/dist/platforms/x.js +0 -511
  94. package/dist/platforms/x.js.map +0 -1
  95. package/dist/platforms/youtube-upload.d.ts +0 -33
  96. package/dist/platforms/youtube-upload.d.ts.map +0 -1
  97. package/dist/platforms/youtube-upload.js +0 -281
  98. package/dist/platforms/youtube-upload.js.map +0 -1
  99. package/dist/platforms/youtube.d.ts +0 -55
  100. package/dist/platforms/youtube.d.ts.map +0 -1
  101. package/dist/platforms/youtube.js +0 -561
  102. package/dist/platforms/youtube.js.map +0 -1
  103. package/dist/server/connections.d.ts +0 -124
  104. package/dist/server/connections.d.ts.map +0 -1
  105. package/dist/server/connections.js +0 -334
  106. package/dist/server/connections.js.map +0 -1
  107. package/dist/server/credentials.d.ts +0 -52
  108. package/dist/server/credentials.d.ts.map +0 -1
  109. package/dist/server/credentials.js +0 -115
  110. package/dist/server/credentials.js.map +0 -1
  111. package/dist/server/index.d.ts +0 -5
  112. package/dist/server/index.d.ts.map +0 -1
  113. package/dist/server/index.js +0 -5
  114. package/dist/server/index.js.map +0 -1
  115. package/dist/server/oauth.d.ts +0 -48
  116. package/dist/server/oauth.d.ts.map +0 -1
  117. package/dist/server/oauth.js +0 -483
  118. package/dist/server/oauth.js.map +0 -1
  119. package/dist/server/webhooks.d.ts +0 -58
  120. package/dist/server/webhooks.d.ts.map +0 -1
  121. package/dist/server/webhooks.js +0 -198
  122. package/dist/server/webhooks.js.map +0 -1
  123. package/dist/testing/index.d.ts +0 -47
  124. package/dist/testing/index.d.ts.map +0 -1
  125. package/dist/testing/index.js +0 -413
  126. package/dist/testing/index.js.map +0 -1
  127. package/dist/testing.d.ts +0 -2
  128. package/dist/testing.d.ts.map +0 -1
  129. package/dist/testing.js +0 -2
  130. package/dist/testing.js.map +0 -1
  131. package/dist/transport/binary.d.ts +0 -3
  132. package/dist/transport/binary.d.ts.map +0 -1
  133. package/dist/transport/binary.js +0 -30
  134. package/dist/transport/binary.js.map +0 -1
  135. package/dist/transport/budget.d.ts +0 -4
  136. package/dist/transport/budget.d.ts.map +0 -1
  137. package/dist/transport/budget.js +0 -27
  138. package/dist/transport/budget.js.map +0 -1
  139. package/dist/transport/http.d.ts +0 -44
  140. package/dist/transport/http.d.ts.map +0 -1
  141. package/dist/transport/http.js +0 -230
  142. package/dist/transport/http.js.map +0 -1
  143. package/dist/transport/json.d.ts +0 -3
  144. package/dist/transport/json.d.ts.map +0 -1
  145. package/dist/transport/json.js +0 -11
  146. package/dist/transport/json.js.map +0 -1
  147. package/dist/transport/upload.d.ts +0 -25
  148. package/dist/transport/upload.d.ts.map +0 -1
  149. package/dist/transport/upload.js +0 -133
  150. package/dist/transport/upload.js.map +0 -1
  151. package/dist/transport/validation.d.ts +0 -6
  152. package/dist/transport/validation.d.ts.map +0 -1
  153. package/dist/transport/validation.js +0 -24
  154. package/dist/transport/validation.js.map +0 -1
@@ -1,32 +0,0 @@
1
- import type { AdapterOperationContext, ConnectedAccountRef, JsonObject } from "../core/types.js";
2
- export interface TikTokOptions {
3
- readonly auth: {
4
- readonly accessToken: string;
5
- readonly openId: string;
6
- };
7
- /** Origins verified in the developer's TikTok app. PULL_FROM_URL requires ownership. */
8
- readonly verifiedMediaOrigins: readonly string[];
9
- readonly fetch?: typeof globalThis.fetch;
10
- readonly clock?: () => Date;
11
- }
12
- export interface TikTokNative {
13
- readonly creatorInfo: (account: ConnectedAccountRef, context: AdapterOperationContext) => Promise<JsonObject>;
14
- readonly uploadDraft: (input: {
15
- readonly account: ConnectedAccountRef;
16
- readonly video: JsonObject;
17
- readonly context: AdapterOperationContext;
18
- }) => Promise<JsonObject>;
19
- readonly listVideos: (input: {
20
- readonly account: ConnectedAccountRef;
21
- readonly cursor?: string;
22
- readonly maxCount?: number;
23
- readonly context: AdapterOperationContext;
24
- }) => Promise<JsonObject>;
25
- readonly publishStatus: (input: {
26
- readonly account: ConnectedAccountRef;
27
- readonly publishId: string;
28
- readonly context: AdapterOperationContext;
29
- }) => Promise<JsonObject>;
30
- }
31
- export declare function tiktok(options: TikTokOptions): import("../core/adapter.js").SocialAdapter<TikTokNative>;
32
- //# sourceMappingURL=tiktok.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiktok.d.ts","sourceRoot":"","sources":["../../src/platforms/tiktok.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EAEnB,UAAU,EAIX,MAAM,kBAAkB,CAAC;AAK1B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,wFAAwF;IACxF,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AACD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,CACpB,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,uBAAuB,KAC7B,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE;QAC5B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;QACtC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;KAC3C,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE;QAC3B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;QACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;KAC3C,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE;QAC9B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;QACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;KAC3C,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAC3B;AAkBD,wBAAgB,MAAM,CACpB,OAAO,EAAE,aAAa,GACrB,OAAO,oBAAoB,EAAE,aAAa,CAAC,YAAY,CAAC,CAimB1D"}
@@ -1,511 +0,0 @@
1
- import { defineAdapter } from "../core/adapter.js";
2
- import { SocialError } from "../core/errors.js";
3
- import { managedHttp, publicFields } from "../cloud/common.js";
4
- import { array, object, optionalNumber, optionalString, string } from "../transport/validation.js";
5
- import { httpsUrl } from "../transport/upload.js";
6
- const videoFields = [
7
- "id",
8
- "create_time",
9
- "cover_image_url",
10
- "share_url",
11
- "title",
12
- "video_description",
13
- "duration",
14
- "height",
15
- "width",
16
- "like_count",
17
- "comment_count",
18
- "share_count",
19
- "view_count",
20
- ];
21
- export function tiktok(options) {
22
- const request = managedHttp("https://open.tiktokapis.com", {
23
- apiKey: options.auth.accessToken,
24
- ...(options.fetch ? { fetch: options.fetch } : {}),
25
- });
26
- const origins = new Set(options.verifiedMediaOrigins.map((value) => httpsUrl(value).origin));
27
- const now = () => (options.clock?.() ?? new Date()).toISOString();
28
- const authorize = (ref, context) => {
29
- if (ref.backend !== context.backendInstance ||
30
- ref.platform !== "tiktok" ||
31
- ref.accountId !== options.auth.openId)
32
- throw new SocialError({
33
- code: "unauthorized",
34
- operation: "tiktok",
35
- message: "Account reference does not belong to this TikTok authorization.",
36
- });
37
- };
38
- const data = (value) => {
39
- const response = object(value);
40
- const error = object(response["error"]);
41
- if (error["code"] !== "ok")
42
- throw new SocialError({
43
- code: error["code"] === "access_token_invalid"
44
- ? "reconnect_required"
45
- : error["code"] === "scope_not_authorized"
46
- ? "missing_permission"
47
- : "upstream_failure",
48
- operation: "tiktok",
49
- message: "TikTok rejected the operation. Check creator eligibility, scope grants, and app audit status.",
50
- upstreamCode: string(error["code"]),
51
- });
52
- return object(response["data"]);
53
- };
54
- const creatorInfo = async (account, context) => {
55
- authorize(account, context);
56
- const creator = data(await request("/v2/post/publish/creator_info/query/", context, {}));
57
- return {
58
- accountId: account.accountId,
59
- backend: account.backend,
60
- fetchedAt: now(),
61
- username: string(creator["creator_username"]),
62
- nickname: string(creator["creator_nickname"]),
63
- privacyLevels: array(creator["privacy_level_options"]).map(string),
64
- commentDisabled: creator["comment_disabled"] === true,
65
- duetDisabled: creator["duet_disabled"] === true,
66
- stitchDisabled: creator["stitch_disabled"] === true,
67
- maxVideoDurationSeconds: optionalNumber(creator["max_video_post_duration_sec"]) ?? null,
68
- };
69
- };
70
- const prepare = (target) => {
71
- const issues = [];
72
- const fail = (code, message) => issues.push({ code, message, severity: "error", targetIndex: target.targetIndex });
73
- if (target.account.platform !== "tiktok" || target.account.accountId !== options.auth.openId)
74
- fail("tiktok.account", "Select the configured TikTok creator.");
75
- const config = target.options === undefined ? {} : object(target.options);
76
- if (config["consentGiven"] !== true)
77
- fail("tiktok.consent", "The creator must preview the content and explicitly consent before transfer.");
78
- for (const key of [
79
- "disableComments",
80
- "disableDuet",
81
- "disableStitch",
82
- "brandedContent",
83
- "ownBrand",
84
- "aiGenerated",
85
- "draft",
86
- ])
87
- if (typeof config[key] !== "boolean")
88
- fail(`tiktok.${key}`, `Explicit ${key} choice is required.`);
89
- if (!config["creatorInfo"] || typeof config["creatorInfo"] !== "object")
90
- fail("tiktok.creator_info", "Query creator information explicitly and render its choices before preparation.");
91
- else {
92
- const creator = object(config["creatorInfo"]);
93
- if (creator["accountId"] !== target.account.accountId ||
94
- creator["backend"] !== target.account.backend)
95
- fail("tiktok.creator_mismatch", "Creator information belongs to a different account or backend.");
96
- if (!array(creator["privacyLevels"]).includes(config["privacy"]))
97
- fail("tiktok.privacy", "Choose a privacy level returned by this creator's information.");
98
- }
99
- const media = target.content.media ?? [];
100
- const video = media.length === 1 && media[0]?.kind === "video";
101
- if (!video &&
102
- (media.length < 1 || media.length > 35 || media.some((item) => item.kind !== "image")))
103
- fail("tiktok.media", "Choose one video or 1 to 35 photos; formats cannot be mixed.");
104
- if ((target.content.text?.length ?? 0) > (video ? 2200 : 4000))
105
- fail("tiktok.caption", "Caption exceeds TikTok's UTF-16 limit for this format.");
106
- if (!video &&
107
- config["title"] !== undefined &&
108
- (typeof config["title"] !== "string" || config["title"].length > 90))
109
- fail("tiktok.title", "Photo titles are limited to 90 UTF-16 code units.");
110
- if (video && config["title"] !== undefined)
111
- fail("tiktok.title", "Video captions use content.text; title is a photo-only option.");
112
- if (!video &&
113
- (typeof config["photoCoverIndex"] !== "number" ||
114
- !Number.isInteger(config["photoCoverIndex"]) ||
115
- config["photoCoverIndex"] < 0 ||
116
- config["photoCoverIndex"] >= media.length))
117
- fail("tiktok.cover", "Select a photo cover index within the attached images.");
118
- for (const item of media) {
119
- if (item.source.kind !== "https-url") {
120
- fail("tiktok.source", "This slice uses verified PULL_FROM_URL media. Supply a URL on your TikTok-verified origin.");
121
- continue;
122
- }
123
- try {
124
- if (!origins.has(httpsUrl(item.source.url).origin))
125
- fail("tiktok.origin", "Media origin is not configured as verified for this TikTok app.");
126
- }
127
- catch {
128
- fail("tiktok.url", "Media requires a public HTTPS URL.");
129
- }
130
- const mime = item.mimeType;
131
- if (mime !== undefined &&
132
- !(item.kind === "video"
133
- ? ["video/mp4", "video/quicktime", "video/webm"]
134
- : ["image/jpeg", "image/webp"]).includes(mime))
135
- fail("tiktok.mime", "Unsupported media MIME type for TikTok publishing.");
136
- if (item.kind === "video" &&
137
- (!Number.isFinite(item.durationSeconds) || (item.durationSeconds ?? 0) <= 0))
138
- fail("tiktok.duration", "Provide known video duration to check the creator's duration limit.");
139
- }
140
- if (target.schedule || target.replyTo || target.content.link)
141
- fail("tiktok.operation", "This publishing operation does not support schedules, replies, or structured links.");
142
- return issues;
143
- };
144
- return defineAdapter({
145
- id: "tiktok",
146
- capabilities: {
147
- schemaVersion: 1,
148
- backend: "tiktok",
149
- apiRevision: "Content Posting API v2",
150
- runtime: ["node22", "node24", "bun"],
151
- capabilities: [
152
- {
153
- platform: "tiktok",
154
- operation: "posts.publish",
155
- availability: "available",
156
- formats: ["image", "video", "carousel"],
157
- requiredScopes: ["video.publish"],
158
- notes: "Verified URL source; explicit creator choices/consent. Public posting requires app audit. Draft mode uses video.upload.",
159
- },
160
- { platform: "tiktok", operation: "posts.status", availability: "available" },
161
- { platform: "tiktok", operation: "posts.read", availability: "available" },
162
- { platform: "tiktok", operation: "posts.list", availability: "available" },
163
- {
164
- platform: "tiktok",
165
- operation: "posts.draft",
166
- availability: "available",
167
- requiredScopes: ["video.upload"],
168
- },
169
- { platform: "tiktok", operation: "posts.status.poll", availability: "available" },
170
- {
171
- platform: "tiktok",
172
- operation: "comments.read",
173
- availability: "unsupported-by-platform",
174
- notes: "Standard Content Posting and Display APIs do not expose comments.",
175
- },
176
- {
177
- platform: "tiktok",
178
- operation: "messages.read",
179
- availability: "unsupported-by-platform",
180
- },
181
- {
182
- platform: "tiktok",
183
- operation: "accounts.read",
184
- availability: "available",
185
- requiredScopes: ["user.info.basic"],
186
- },
187
- {
188
- platform: "tiktok",
189
- operation: "analytics.account.read",
190
- availability: "available",
191
- requiredScopes: ["user.info.stats"],
192
- },
193
- ],
194
- },
195
- accounts: {
196
- async list(_input, context) {
197
- const response = data(await request("/v2/user/info/", context, undefined, { fields: "open_id,display_name" }));
198
- const user = object(response["user"]);
199
- if (user["open_id"] !== options.auth.openId)
200
- throw new SocialError({
201
- code: "unauthorized",
202
- operation: "accounts.read",
203
- message: "TikTok returned a different authorized creator.",
204
- });
205
- return {
206
- items: [
207
- {
208
- ref: {
209
- kind: "connected-account",
210
- version: 1,
211
- backend: context.backendInstance,
212
- platform: "tiktok",
213
- accountId: options.auth.openId,
214
- },
215
- displayName: string(user["display_name"]),
216
- status: "connected",
217
- },
218
- ],
219
- };
220
- },
221
- async get(account, context) {
222
- authorize(account, context);
223
- const response = data(await request("/v2/user/info/", context, undefined, { fields: "open_id,display_name" }));
224
- const user = object(response["user"]);
225
- if (user["open_id"] !== account.accountId)
226
- throw new SocialError({
227
- code: "unauthorized",
228
- operation: "accounts.read",
229
- message: "TikTok creator identity mismatch.",
230
- });
231
- return {
232
- ref: account,
233
- displayName: string(user["display_name"]),
234
- status: "connected",
235
- };
236
- },
237
- },
238
- posts: {
239
- async get(ref, context) {
240
- authorize(ref, context);
241
- const result = data(await request("/v2/video/query/", context, { filters: { video_ids: [ref.postId] } }, {
242
- fields: "id,create_time,cover_image_url,share_url,title,video_description,duration,height,width,like_count,comment_count,share_count,view_count",
243
- }));
244
- const row = array(result["videos"])
245
- .map(object)
246
- .find((video) => video["id"] === ref.postId);
247
- if (!row)
248
- throw new SocialError({
249
- code: "upstream_failure",
250
- operation: "posts.read",
251
- message: "TikTok video was not found for this authorization.",
252
- });
253
- return publicFields(row, videoFields);
254
- },
255
- async list(account, input, context) {
256
- authorize(account, context);
257
- const limit = input.limit ?? 20;
258
- const cursor = input.cursor === undefined ? 0 : Number(input.cursor);
259
- if (!Number.isSafeInteger(limit) ||
260
- limit < 1 ||
261
- limit > 20 ||
262
- !Number.isSafeInteger(cursor) ||
263
- cursor < 0 ||
264
- input.cursor === "")
265
- throw new SocialError({
266
- code: "invalid_input",
267
- operation: "posts.read",
268
- message: "TikTok requires a nonnegative cursor and page size from 1 to 20.",
269
- });
270
- const result = data(await request("/v2/video/list/", context, { cursor, max_count: limit }, {
271
- fields: "id,create_time,cover_image_url,share_url,title,video_description,duration,height,width,like_count,comment_count,share_count,view_count",
272
- }));
273
- return {
274
- items: array(result["videos"]).map((row) => publicFields(row, videoFields)),
275
- ...(result["has_more"] === true &&
276
- typeof result["cursor"] === "number" &&
277
- Number.isSafeInteger(result["cursor"]) &&
278
- result["cursor"] >= 0
279
- ? { nextCursor: String(result["cursor"]) }
280
- : {}),
281
- };
282
- },
283
- prepareTarget: prepare,
284
- async publishTarget(target, context) {
285
- authorize(target.account, context);
286
- const config = object(target.options);
287
- const latest = await creatorInfo(target.account, context);
288
- if (!array(latest["privacyLevels"]).includes(config["privacy"]))
289
- throw new SocialError({
290
- code: "invalid_input",
291
- operation: "posts.publish",
292
- message: "Creator privacy choices changed. Refresh the preview and ask the creator to select again.",
293
- });
294
- for (const [remote, choice] of [
295
- ["commentDisabled", "disableComments"],
296
- ["duetDisabled", "disableDuet"],
297
- ["stitchDisabled", "disableStitch"],
298
- ])
299
- if (remote && choice && latest[remote] === true && config[choice] !== true)
300
- throw new SocialError({
301
- code: "invalid_input",
302
- operation: "posts.publish",
303
- message: "Creator interaction restrictions changed. Refresh the preview before publishing.",
304
- });
305
- const media = target.content.media ?? [];
306
- const first = media[0];
307
- if (!first || first.source.kind !== "https-url")
308
- throw new SocialError({
309
- code: "invalid_input",
310
- operation: "posts.publish",
311
- message: "Verified media URL required.",
312
- });
313
- if (first.kind === "video" &&
314
- typeof latest["maxVideoDurationSeconds"] === "number" &&
315
- (first.durationSeconds ?? Infinity) > latest["maxVideoDurationSeconds"])
316
- throw new SocialError({
317
- code: "invalid_input",
318
- operation: "posts.publish",
319
- message: "Video exceeds this creator's allowed duration.",
320
- });
321
- const postInfo = {
322
- title: target.content.text ?? "",
323
- privacy_level: string(config["privacy"]),
324
- disable_comment: config["disableComments"] === true,
325
- brand_content_toggle: config["brandedContent"] === true,
326
- brand_organic_toggle: config["ownBrand"] === true,
327
- };
328
- const draft = config["draft"] === true;
329
- let result;
330
- if (first.kind === "video")
331
- result = data(await request(draft ? "/v2/post/publish/inbox/video/init/" : "/v2/post/publish/video/init/", context, {
332
- ...(draft
333
- ? {}
334
- : {
335
- post_info: {
336
- ...postInfo,
337
- disable_duet: config["disableDuet"] === true,
338
- disable_stitch: config["disableStitch"] === true,
339
- is_aigc: config["aiGenerated"] === true,
340
- },
341
- }),
342
- source_info: { source: "PULL_FROM_URL", video_url: first.source.url },
343
- }));
344
- else
345
- result = data(await request("/v2/post/publish/content/init/", context, {
346
- post_info: {
347
- ...postInfo,
348
- title: typeof config["title"] === "string" ? config["title"] : "",
349
- description: target.content.text ?? "",
350
- auto_add_music: false,
351
- },
352
- source_info: {
353
- source: "PULL_FROM_URL",
354
- photo_cover_index: typeof config["photoCoverIndex"] === "number" ? config["photoCoverIndex"] : 0,
355
- photo_images: media.map((item) => item.source.kind === "https-url" ? item.source.url : ""),
356
- },
357
- post_mode: draft ? "MEDIA_UPLOAD" : "DIRECT_POST",
358
- media_type: "PHOTO",
359
- is_aigc: config["aiGenerated"] === true,
360
- }));
361
- return {
362
- state: "accepted",
363
- account: target.account,
364
- targetIndex: target.targetIndex,
365
- observedAt: now(),
366
- backendState: "INITIALIZED",
367
- delivery: {
368
- kind: "delivery",
369
- version: 1,
370
- backend: target.account.backend,
371
- platform: "tiktok",
372
- accountId: target.account.accountId,
373
- deliveryId: string(result["publish_id"]),
374
- },
375
- };
376
- },
377
- async getDelivery(ref, context) {
378
- authorize(ref, context);
379
- const result = data(await request("/v2/post/publish/status/fetch/", context, { publish_id: ref.deliveryId }));
380
- const state = string(result["status"]);
381
- const base = {
382
- account: {
383
- kind: "connected-account",
384
- version: 1,
385
- backend: ref.backend,
386
- platform: "tiktok",
387
- accountId: ref.accountId,
388
- },
389
- targetIndex: 0,
390
- observedAt: now(),
391
- backendState: state,
392
- delivery: { kind: "delivery", version: 1, ...ref },
393
- };
394
- if (state === "FAILED")
395
- return {
396
- ...base,
397
- state: "failed",
398
- code: optionalString(result["fail_reason"]) ?? "upstream_failure",
399
- message: "TikTok confirmed this publishing action failed.",
400
- retryDisposition: { kind: "never" },
401
- };
402
- if (state === "PROCESSING_UPLOAD" || state === "PROCESSING_DOWNLOAD")
403
- return { ...base, state: "processing" };
404
- if (state === "SEND_TO_USER_INBOX")
405
- return { ...base, state: "accepted" };
406
- if (state === "PUBLISH_COMPLETE") {
407
- const ids = result["publicaly_available_post_id"];
408
- const id = Array.isArray(ids) && ids.length === 1 ? ids[0] : undefined;
409
- const nativeId = typeof id === "string"
410
- ? id
411
- : typeof id === "number" && Number.isSafeInteger(id)
412
- ? String(id)
413
- : undefined;
414
- if (nativeId)
415
- return {
416
- ...base,
417
- state: "published",
418
- post: {
419
- kind: "platform-post",
420
- version: 1,
421
- backend: ref.backend,
422
- platform: "tiktok",
423
- accountId: ref.accountId,
424
- postId: nativeId,
425
- },
426
- };
427
- }
428
- return {
429
- ...base,
430
- state: "unknown",
431
- reason: "unmapped-state",
432
- diagnostic: "Native public identifier is unavailable or provider status is unmapped. Retain the publishing reference for reconciliation.",
433
- };
434
- },
435
- },
436
- analytics: {
437
- async getPostMetrics(post, context) {
438
- // https://developers.tiktok.com/doc/research-api-specs-query-videos/
439
- authorize(post, context);
440
- const result = data(await request("/v2/video/query/", context, { filters: { video_ids: [post.postId] } }, { fields: "id,like_count,comment_count,share_count,view_count" }));
441
- const row = array(result["videos"])
442
- .map(object)
443
- .find((video) => video["id"] === post.postId);
444
- if (!row)
445
- return [];
446
- const fetchedAt = now();
447
- return ["like_count", "comment_count", "share_count", "view_count"].flatMap((field) => typeof row[field] === "number" && Number.isFinite(row[field])
448
- ? [
449
- {
450
- name: field,
451
- value: row[field],
452
- unit: "count",
453
- period: "lifetime",
454
- fetchedAt,
455
- freshness: "unknown",
456
- source: "tiktok:video.query",
457
- },
458
- ]
459
- : []);
460
- },
461
- async getAccountMetrics(account, context) {
462
- // https://developers.tiktok.com/doc/tiktok-api-v2-user-info/
463
- authorize(account, context);
464
- const response = data(await request("/v2/user/info/", context, undefined, {
465
- fields: "open_id,display_name,follower_count,following_count,likes_count,video_count",
466
- }));
467
- const user = object(response["user"]);
468
- if (user["open_id"] !== account.accountId)
469
- throw new SocialError({
470
- code: "unauthorized",
471
- operation: "analytics.account.read",
472
- message: "TikTok creator identity mismatch.",
473
- });
474
- const fetchedAt = now();
475
- return ["follower_count", "following_count", "likes_count", "video_count"].flatMap((field) => typeof user[field] === "number" && Number.isFinite(user[field])
476
- ? [
477
- {
478
- name: field,
479
- value: user[field],
480
- unit: "count",
481
- period: "lifetime",
482
- fetchedAt,
483
- freshness: "unknown",
484
- source: "tiktok:user.info.stats",
485
- },
486
- ]
487
- : []);
488
- },
489
- },
490
- native: {
491
- creatorInfo,
492
- async uploadDraft({ account, video, context }) {
493
- authorize(account, context);
494
- return data(await request("/v2/post/publish/inbox/video/init/", context, video));
495
- },
496
- async listVideos({ account, cursor, maxCount, context }) {
497
- authorize(account, context);
498
- return data(await request("/v2/video/list/", context, {
499
- fields: [...videoFields],
500
- max_count: maxCount ?? 20,
501
- ...(cursor ? { cursor } : {}),
502
- }));
503
- },
504
- async publishStatus({ account, publishId, context }) {
505
- authorize(account, context);
506
- return data(await request("/v2/post/publish/status/fetch/", context, { publish_id: publishId }));
507
- },
508
- },
509
- });
510
- }
511
- //# sourceMappingURL=tiktok.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tiktok.js","sourceRoot":"","sources":["../../src/platforms/tiktok.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import type { AdapterOperationContext, ConnectedAccountRef } from "../core/types.js";
2
- /** Credential-ready helper. Applications must authorize the acting account before calling. */
3
- export interface XEngagementOptions {
4
- readonly userId: string;
5
- readonly accessToken: string;
6
- readonly fetch?: typeof globalThis.fetch;
7
- }
8
- export interface XEngagementResult {
9
- readonly liked: boolean;
10
- readonly tweetId: string;
11
- readonly userId: string;
12
- }
13
- /** Requires like.write, tweet.read, users.read and the app's current API access. Never retries writes. */
14
- export declare function xLike(tweetId: string, account: ConnectedAccountRef, options: XEngagementOptions, context: AdapterOperationContext): Promise<XEngagementResult>;
15
- /** Deletes only the authenticated user's like; it does not delete the target post. */
16
- export declare function xUnlike(tweetId: string, account: ConnectedAccountRef, options: XEngagementOptions, context: AdapterOperationContext): Promise<XEngagementResult>;
17
- //# sourceMappingURL=x-engagement.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"x-engagement.d.ts","sourceRoot":"","sources":["../../src/platforms/x-engagement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGrF,8FAA8F;AAC9F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CAC1C;AACD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAqDD,0GAA0G;AAC1G,wBAAgB,KAAK,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAE5B;AACD,sFAAsF;AACtF,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAE5B"}