@opencoredev/social-sdk 0.1.0 → 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 -223
  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,571 +0,0 @@
1
- import { connectedAccountRef, defineAdapter, platformPostRef, } from "../core/index.js";
2
- import { SocialError } from "../core/errors.js";
3
- import { managedHttp, publicFields } from "../cloud/common.js";
4
- import { object, array, optionalNumber, optionalString } from "../transport/validation.js";
5
- import { httpsUrl } from "../transport/upload.js";
6
- export class MemoryThreadsWorkflowStore {
7
- rows = new Map();
8
- claims = new Set();
9
- async create(input) {
10
- const row = { ...input, id: `thwf_${globalThis.crypto.randomUUID()}` };
11
- this.rows.set(row.id, structuredClone(row));
12
- return structuredClone(row);
13
- }
14
- async get(id) {
15
- const row = this.rows.get(id);
16
- return row ? structuredClone(row) : undefined;
17
- }
18
- async update(id, update) {
19
- const row = this.rows.get(id);
20
- if (!row)
21
- throw new Error("Threads workflow not found");
22
- const next = { ...row, ...update, id };
23
- this.rows.set(id, structuredClone(next));
24
- return structuredClone(next);
25
- }
26
- async claim(id) {
27
- if (!this.rows.has(id) || this.claims.has(id))
28
- return false;
29
- this.claims.add(id);
30
- return true;
31
- }
32
- async release(id) {
33
- this.claims.delete(id);
34
- }
35
- }
36
- function fail(operation, message, code = "upstream_failure") {
37
- throw new SocialError({
38
- code,
39
- operation,
40
- message,
41
- retryDisposition: { kind: code === "invalid_input" ? "never" : "reconcile-first" },
42
- });
43
- }
44
- const accountRef = (backend, accountId) => connectedAccountRef({ backend, platform: "threads", accountId });
45
- export function threads(options) {
46
- const backend = options.backend ?? "default", version = options.graphVersion ?? "v1.0", auth = options.auth, store = options.workflowStore ?? new MemoryThreadsWorkflowStore(), now = () => (options.clock?.() ?? new Date()).toISOString();
47
- const http = managedHttp(`https://graph.threads.net/${version}`, {
48
- apiKey: auth.accessToken,
49
- ...(options.fetch ? { fetch: options.fetch } : {}),
50
- });
51
- async function request(path, init, operation, context) {
52
- const [raw = "", qs] = path.split("?", 2);
53
- const query = Object.fromEntries(new URLSearchParams(qs ?? ""));
54
- try {
55
- return object(await http(`/${raw.replace(/^\//, "")}`, context, init.method === "POST" ? {} : undefined, query, init.method === "POST" || init.method === "DELETE" || init.method === "PUT"
56
- ? init.method
57
- : "GET"));
58
- }
59
- catch (e) {
60
- if (e instanceof SocialError)
61
- throw e;
62
- fail(operation, "Threads API request failed.");
63
- }
64
- }
65
- function authorize(ref, op) {
66
- if (ref.backend !== backend || ref.platform !== "threads" || ref.accountId !== auth.userId)
67
- fail(op, "Account reference does not match this Threads authorization.", "unauthorized");
68
- }
69
- const account = accountRef(backend, auth.userId);
70
- async function readAccount(context) {
71
- const v = await request("/me?fields=id,username", { method: "GET" }, "threads.accounts.read", context);
72
- const id = v["id"], username = v["username"];
73
- if (typeof id !== "string" || id !== auth.userId)
74
- fail("threads.accounts.read", "Threads returned an unauthorized account.", "unauthorized");
75
- return {
76
- ref: account,
77
- displayName: typeof username === "string" ? username : (auth.handle ?? auth.userId),
78
- ...(typeof username === "string" ? { handle: username } : {}),
79
- status: "connected",
80
- };
81
- }
82
- async function listPosts(selected, input, context) {
83
- authorize(selected, "threads.posts.list");
84
- if (input.limit !== undefined &&
85
- (!Number.isSafeInteger(input.limit) || input.limit < 1 || input.limit > 100))
86
- fail("threads.posts.list", "Threads feed limit must be an integer from 1 through 100.", "invalid_input");
87
- const query = new URLSearchParams({
88
- fields: "id,text,username,media_type,permalink,timestamp",
89
- });
90
- if (input.cursor !== undefined)
91
- query.set("after", input.cursor);
92
- if (input.limit !== undefined)
93
- query.set("limit", String(input.limit));
94
- const result = await request(`${encodeURIComponent(selected.accountId)}/threads?${query.toString()}`, { method: "GET" }, "threads.posts.list", context);
95
- const items = array(result["data"]).map((entry) => publicFields(entry, ["id", "text", "username", "media_type", "permalink", "timestamp"]));
96
- const paging = result["paging"] === undefined ? {} : object(result["paging"]);
97
- const cursors = paging["cursors"] === undefined ? {} : object(paging["cursors"]);
98
- const hasNext = typeof paging["next"] === "string" && paging["next"].length > 0;
99
- const nextCursor = hasNext && typeof cursors["after"] === "string" ? cursors["after"] : undefined;
100
- return {
101
- items,
102
- ...(nextCursor === undefined ? {} : { nextCursor }),
103
- };
104
- }
105
- async function getAccountMetrics(selected, context) {
106
- authorize(selected, "threads.analytics");
107
- const metricNames = [
108
- "views",
109
- "likes",
110
- "replies",
111
- "reposts",
112
- "quotes",
113
- "clicks",
114
- "followers_count",
115
- ];
116
- const result = await request(`${encodeURIComponent(selected.accountId)}/threads_insights?metric=${metricNames.join(",")}`, { method: "GET" }, "threads.analytics", context);
117
- const allowed = new Set(metricNames);
118
- return array(result["data"]).flatMap((entry) => {
119
- const row = object(entry);
120
- const name = typeof row["name"] === "string" ? row["name"] : undefined;
121
- if (name === undefined || !allowed.has(name))
122
- return [];
123
- const total = row["total_value"] === undefined ? undefined : object(row["total_value"]);
124
- const values = row["values"] === undefined ? [] : array(row["values"]);
125
- const latest = values.at(-1);
126
- const totalValue = optionalNumber(total?.["value"]);
127
- const value = totalValue ?? (latest === undefined ? undefined : optionalNumber(object(latest)["value"]));
128
- if (value === undefined)
129
- return [];
130
- const latestEnd = latest === undefined ? undefined : optionalString(object(latest)["end_time"]);
131
- const totalIsLifetime = totalValue !== undefined && (row["period"] === "lifetime" || name === "followers_count");
132
- const period = totalValue !== undefined
133
- ? totalIsLifetime
134
- ? "lifetime"
135
- : "unknown"
136
- : totalValue === undefined &&
137
- row["period"] === "day" &&
138
- latestEnd !== undefined &&
139
- Number.isFinite(Date.parse(latestEnd))
140
- ? {
141
- from: new Date(Date.parse(latestEnd) - 86_400_000).toISOString(),
142
- to: latestEnd,
143
- }
144
- : "unknown";
145
- return [
146
- {
147
- name,
148
- value,
149
- unit: "count",
150
- period,
151
- ...(totalValue === undefined && latestEnd !== undefined ? { measuredAt: latestEnd } : {}),
152
- fetchedAt: now(),
153
- freshness: "unknown",
154
- source: `threads:${version}`,
155
- },
156
- ];
157
- });
158
- }
159
- async function status(id, c) {
160
- return request(`${encodeURIComponent(id)}?fields=id,status,error_message`, { method: "GET", ...(c.signal ? { signal: c.signal } : {}) }, "threads.container.status", c);
161
- }
162
- const base = (a, id, state, backendState) => ({
163
- state,
164
- targetIndex: 0,
165
- account: a,
166
- observedAt: now(),
167
- ...(backendState ? { backendState } : {}),
168
- delivery: {
169
- kind: "delivery",
170
- version: 1,
171
- backend: a.backend,
172
- platform: "threads",
173
- accountId: a.accountId,
174
- deliveryId: id,
175
- },
176
- });
177
- const terminalFailure = (a, id, state) => ({
178
- ...base(a, id, "failed", state),
179
- code: "media_error",
180
- message: "Threads container failed or expired before publication.",
181
- retryDisposition: { kind: "never" },
182
- });
183
- async function resume(w, a, c) {
184
- if (w.nativeId)
185
- return {
186
- ...base(a, w.id, "published", "PUBLISHED"),
187
- post: platformPostRef({
188
- backend,
189
- platform: "threads",
190
- accountId: a.accountId,
191
- postId: w.nativeId,
192
- }),
193
- };
194
- if (w.stage === "unknown")
195
- return {
196
- ...base(a, w.id, "unknown", w.backendState),
197
- reason: "ambiguous-submission",
198
- diagnostic: "Threads publish acceptance is unknown; no replay was attempted.",
199
- };
200
- let cur = w;
201
- const items = Array.isArray(cur.options["_mediaItems"]) ? cur.options["_mediaItems"] : [];
202
- while (cur.childIds.length < items.length) {
203
- const item = object(items[cur.childIds.length]);
204
- const p = new URLSearchParams({
205
- media_type: item["kind"] === "video" ? "VIDEO" : "IMAGE",
206
- is_carousel_item: "true",
207
- ...(item["kind"] === "video"
208
- ? { video_url: String(item["url"]) }
209
- : { image_url: String(item["url"]) }),
210
- ...(typeof item["altText"] === "string" ? { alt_text: item["altText"] } : {}),
211
- });
212
- await store.update(cur.id, { stage: "unknown", backendState: "CREATING_CHILD" });
213
- const child = await request(`${a.accountId}/threads?${p}`, { method: "POST", ...(c.signal ? { signal: c.signal } : {}) }, "threads.container.child", c);
214
- if (typeof child["id"] !== "string")
215
- fail("threads.container.child", "Threads did not return a child container ID.");
216
- cur = await store.update(cur.id, {
217
- childIds: [...cur.childIds, child["id"]],
218
- stage: "children",
219
- });
220
- }
221
- for (const id of cur.childIds) {
222
- const s = await status(id, c);
223
- const st = typeof s["status"] === "string" ? s["status"] : "";
224
- if (st === "ERROR" || st === "EXPIRED")
225
- return terminalFailure(a, w.id, st);
226
- if (st !== "FINISHED" && st !== "PUBLISHED")
227
- return base(a, w.id, "processing", st || "PROCESSING");
228
- }
229
- if (!cur.parentId) {
230
- const singleKind = cur.options["_mediaKind"];
231
- const singleUrl = cur.options["_mediaUrl"];
232
- const p = new URLSearchParams({
233
- media_type: cur.childIds.length
234
- ? "CAROUSEL"
235
- : singleKind === "video"
236
- ? "VIDEO"
237
- : singleKind === "image"
238
- ? "IMAGE"
239
- : "TEXT",
240
- ...(cur.childIds.length ? { children: cur.childIds.join(",") } : {}),
241
- ...(typeof singleUrl === "string"
242
- ? singleKind === "video"
243
- ? { video_url: singleUrl }
244
- : { image_url: singleUrl }
245
- : {}),
246
- ...(typeof cur.options["_altText"] === "string"
247
- ? { alt_text: cur.options["_altText"] }
248
- : {}),
249
- ...(cur.caption ? { text: cur.caption } : {}),
250
- ...(typeof cur.options["replyControl"] === "string"
251
- ? { reply_control: cur.options["replyControl"] }
252
- : {}),
253
- ...(typeof cur.options["_replyToId"] === "string"
254
- ? { reply_to_id: cur.options["_replyToId"] }
255
- : {}),
256
- });
257
- // Persist ambiguity before dispatch so a process crash cannot recreate a
258
- // possibly accepted container under the same continuation handle.
259
- await store.update(cur.id, { stage: "unknown", backendState: "CREATING_PARENT" });
260
- const parent = await request(`${a.accountId}/threads?${p}`, { method: "POST", ...(c.signal ? { signal: c.signal } : {}) }, "threads.container.create", c);
261
- const parentId = parent["id"];
262
- if (typeof parentId !== "string")
263
- fail("threads.container.create", "Threads did not return a container ID.");
264
- cur = await store.update(cur.id, { parentId, stage: "parent" });
265
- }
266
- const parentId = cur.parentId;
267
- if (!parentId)
268
- fail("threads.container.create", "Missing parent container ID.");
269
- const ps = await status(parentId, c);
270
- const pst = typeof ps["status"] === "string" ? ps["status"] : "";
271
- if (pst === "ERROR" || pst === "EXPIRED")
272
- return terminalFailure(a, cur.id, pst);
273
- if (pst === "PUBLISHED") {
274
- await store.update(cur.id, { stage: "unknown", backendState: "PUBLISHED_WITHOUT_NATIVE_ID" });
275
- return {
276
- ...base(a, cur.id, "unknown", pst),
277
- reason: "ambiguous-submission",
278
- };
279
- }
280
- if (pst !== "FINISHED")
281
- return base(a, cur.id, "processing", pst || "PROCESSING");
282
- await store.update(cur.id, { stage: "unknown", backendState: "PUBLISHING" });
283
- try {
284
- const pub = await request(`${a.accountId}/threads_publish?creation_id=${encodeURIComponent(parentId)}`, { method: "POST", ...(c.signal ? { signal: c.signal } : {}) }, "threads.publish", c);
285
- const nativeId = pub["id"];
286
- if (typeof nativeId !== "string") {
287
- await store.update(cur.id, { stage: "unknown", backendState: "MISSING_ID" });
288
- return {
289
- ...base(a, cur.id, "unknown", "MISSING_ID"),
290
- reason: "ambiguous-submission",
291
- diagnostic: "Threads accepted publish without a native post ID.",
292
- };
293
- }
294
- await store.update(cur.id, { nativeId, stage: "published", backendState: "PUBLISHED" });
295
- return {
296
- ...base(a, cur.id, "published", "PUBLISHED"),
297
- post: platformPostRef({
298
- backend,
299
- platform: "threads",
300
- accountId: a.accountId,
301
- postId: nativeId,
302
- }),
303
- };
304
- }
305
- catch (e) {
306
- await store.update(cur.id, { stage: "unknown", backendState: "AMBIGUOUS" });
307
- if (e instanceof SocialError)
308
- return {
309
- ...base(a, cur.id, "unknown", "AMBIGUOUS"),
310
- reason: "ambiguous-submission",
311
- diagnostic: e.message,
312
- };
313
- throw e;
314
- }
315
- }
316
- const capabilities = {
317
- schemaVersion: 1,
318
- backend,
319
- apiRevision: `Meta Threads Graph ${version}`,
320
- runtime: ["node>=22.12", "bun"],
321
- capabilities: [
322
- { operation: "accounts.read", platform: "threads", availability: "available" },
323
- {
324
- operation: "posts.publish",
325
- platform: "threads",
326
- availability: "available",
327
- formats: ["text", "image", "video", "carousel"],
328
- },
329
- { operation: "posts.read", platform: "threads", availability: "available" },
330
- { operation: "posts.list", platform: "threads", availability: "available" },
331
- { operation: "posts.status", platform: "threads", availability: "available" },
332
- { operation: "analytics.read", platform: "threads", availability: "available" },
333
- { operation: "comments.read", platform: "threads", availability: "available" },
334
- { operation: "comments.write", platform: "threads", availability: "available" },
335
- { operation: "posts.quote", platform: "threads", availability: "available" },
336
- { operation: "posts.repost", platform: "threads", availability: "available" },
337
- { operation: "posts.delete", platform: "threads", availability: "available" },
338
- { operation: "profile.read", platform: "threads", availability: "available" },
339
- { operation: "search.keyword", platform: "threads", availability: "available" },
340
- { operation: "mentions.read", platform: "threads", availability: "available" },
341
- {
342
- operation: "messages.read",
343
- platform: "threads",
344
- availability: "unsupported-by-platform",
345
- notes: "Threads does not expose messaging APIs to standard apps.",
346
- },
347
- ],
348
- };
349
- const native = {
350
- getPost: (id, c) => request(`${encodeURIComponent(id)}?fields=id,text,username,media_type,permalink`, { method: "GET", ...(c.signal ? { signal: c.signal } : {}) }, "threads.posts.get", c),
351
- getContainer: (id, c) => status(id, c),
352
- resumePublication: async (a, id, c) => {
353
- authorize(a, "threads.posts.resume");
354
- const w = await store.get(id);
355
- if (!w || w.backend !== backend || w.accountId !== a.accountId)
356
- fail("threads.posts.resume", "Workflow handle is not authorized for this account.", "unauthorized");
357
- if (!(await store.claim(id)))
358
- return base(a, id, "processing", "CLAIMED");
359
- try {
360
- return await resume((await store.get(id)) ?? w, a, c);
361
- }
362
- finally {
363
- await store.release?.(id);
364
- }
365
- },
366
- async quotePost({ account, postId, text, context }) {
367
- authorize(account, "threads.posts.quote");
368
- return request(`${encodeURIComponent(account.accountId)}/threads?media_type=TEXT&text=${encodeURIComponent(text)}&quote_id=${encodeURIComponent(postId)}`, { method: "POST" }, "threads.posts.quote", context);
369
- },
370
- async repost({ account, postId, context }) {
371
- authorize(account, "threads.posts.repost");
372
- return request(`${encodeURIComponent(account.accountId)}/threads?media_type=TEXT&repost_id=${encodeURIComponent(postId)}`, { method: "POST" }, "threads.posts.repost", context);
373
- },
374
- async deletePost({ account, postId, context }) {
375
- authorize(account, "threads.posts.delete");
376
- await request(encodeURIComponent(postId), { method: "DELETE" }, "threads.posts.delete", context);
377
- },
378
- async search({ account, query, cursor, context }) {
379
- authorize(account, "threads.search");
380
- return request(`keyword_search?query=${encodeURIComponent(query)}${cursor ? `&after=${encodeURIComponent(cursor)}` : ""}`, { method: "GET" }, "threads.search", context);
381
- },
382
- async mentions({ account, cursor, context }) {
383
- authorize(account, "threads.mentions");
384
- return request(`${encodeURIComponent(account.accountId)}/mentions${cursor ? `?after=${encodeURIComponent(cursor)}` : ""}`, { method: "GET" }, "threads.mentions", context);
385
- },
386
- async getProfile({ account, context }) {
387
- authorize(account, "threads.profile.read");
388
- return request(`${encodeURIComponent(account.accountId)}?fields=id,username,name,threads_profile_picture_url`, { method: "GET" }, "threads.profile.read", context);
389
- },
390
- };
391
- const adapter = defineAdapter({
392
- id: backend,
393
- capabilities,
394
- native,
395
- accounts: {
396
- list: async (_input, context) => ({ items: [await readAccount(context)] }),
397
- get: async (ref, context) => {
398
- authorize(ref, "threads.accounts.get");
399
- return readAccount(context);
400
- },
401
- },
402
- posts: {
403
- list: listPosts,
404
- prepareTarget(target) {
405
- const issues = [];
406
- const add = (code, message) => issues.push({ code, message, severity: "error", targetIndex: target.targetIndex });
407
- authorize(target.account, "threads.posts.prepare");
408
- const media = target.content.media ?? [];
409
- if ((target.content.text?.length ?? 0) > 500)
410
- add("text.too_long", "Threads text is limited to 500 characters.");
411
- if (media.length > 10)
412
- add("media.too_many", "Threads carousels support at most ten items.");
413
- if (!media.length && !target.content.text)
414
- add("content.empty", "Threads requires text or media.");
415
- for (const item of media) {
416
- if (item.source.kind !== "https-url")
417
- add("media.url_required", "Threads requires public HTTPS media URLs.");
418
- else
419
- try {
420
- httpsUrl(item.source.url);
421
- }
422
- catch {
423
- add("media.url_invalid", "Use public HTTPS media without credentials or local hosts.");
424
- }
425
- if (item.kind === "image" &&
426
- item.mimeType &&
427
- item.mimeType !== "image/jpeg" &&
428
- item.mimeType !== "image/png")
429
- add("media.format", "Threads images must be JPEG or PNG.");
430
- if (item.kind === "video" && item.mimeType && item.mimeType !== "video/mp4")
431
- add("media.format", "Threads videos must be MP4.");
432
- if (item.altText && item.altText.length > 1000)
433
- add("media.alt_text", "Alt text is limited to 1,000 characters.");
434
- }
435
- if (target.options !== undefined) {
436
- const o = object(target.options);
437
- if (Object.keys(o).some((key) => key !== "replyControl"))
438
- add("options.unmapped", "A supplied option has no Threads mapping.");
439
- const replyControl = o["replyControl"];
440
- if (replyControl !== undefined &&
441
- replyControl !== "everyone" &&
442
- replyControl !== "accountsYouFollow" &&
443
- replyControl !== "mentionedOnly")
444
- add("options.reply_control", "Unsupported Threads reply control.");
445
- }
446
- if (target.schedule)
447
- add("schedule.unsupported", "Threads scheduling requires an application-owned runner.");
448
- return issues;
449
- },
450
- async publishTarget(target) {
451
- authorize(target.account, "threads.posts.publish");
452
- const media = target.content.media ?? [];
453
- const item = media.length === 1 ? media[0] : undefined;
454
- const opts = {
455
- ...object(target.options ?? {}),
456
- ...(target.replyTo ? { _replyToId: target.replyTo.postId } : {}),
457
- ...(media.length > 1
458
- ? {
459
- _mediaItems: media.map((entry) => ({
460
- kind: entry.kind,
461
- url: entry.source.kind === "https-url" ? entry.source.url : "",
462
- ...(entry.altText ? { altText: entry.altText } : {}),
463
- })),
464
- }
465
- : {}),
466
- ...(item?.source.kind === "https-url"
467
- ? {
468
- _mediaKind: item.kind,
469
- _mediaUrl: item.source.url,
470
- ...(item.altText ? { _altText: item.altText } : {}),
471
- }
472
- : {}),
473
- };
474
- const w = await store.create({
475
- backend,
476
- accountId: target.account.accountId,
477
- childIds: [],
478
- caption: target.content.text ?? "",
479
- options: opts,
480
- stage: "children",
481
- });
482
- return {
483
- ...base(target.account, w.id, "processing", "CREATED"),
484
- targetIndex: target.targetIndex,
485
- };
486
- },
487
- async get(ref, c) {
488
- authorize(ref, "threads.posts.get");
489
- return native.getPost(ref.postId, c);
490
- },
491
- async getDelivery(ref, _c) {
492
- authorize(ref, "threads.posts.status");
493
- const w = await store.get(ref.deliveryId);
494
- if (!w || w.backend !== backend || w.accountId !== ref.accountId)
495
- fail("threads.posts.status", "Workflow handle is not authorized for this account.", "unauthorized");
496
- if (w.nativeId)
497
- return {
498
- ...base(accountRef(backend, ref.accountId), w.id, "published", "PUBLISHED"),
499
- post: platformPostRef({
500
- backend,
501
- platform: "threads",
502
- accountId: ref.accountId,
503
- postId: w.nativeId,
504
- }),
505
- };
506
- if (w.stage === "unknown")
507
- return {
508
- ...base(accountRef(backend, ref.accountId), w.id, "unknown", w.backendState),
509
- reason: "ambiguous-submission",
510
- diagnostic: "Explicit resumePublication is required.",
511
- };
512
- return base(accountRef(backend, ref.accountId), w.id, "processing", w.stage.toUpperCase());
513
- },
514
- },
515
- comments: {
516
- async list(post, input, context) {
517
- authorize(post, "threads.comments.list");
518
- const result = await request(`${encodeURIComponent(post.postId)}/replies?fields=id,text,username,timestamp${input.cursor ? `&after=${encodeURIComponent(input.cursor)}` : ""}`, { method: "GET" }, "threads.comments.list", context);
519
- const rows = Array.isArray(result["data"]) ? result["data"] : [];
520
- return {
521
- items: rows,
522
- ...(typeof result["paging"] === "object" &&
523
- result["paging"] &&
524
- typeof result["paging"]["next"] === "string"
525
- ? { nextCursor: String(result["paging"]["next"]) }
526
- : {}),
527
- };
528
- },
529
- async reply(comment, content, context) {
530
- authorize(comment, "threads.comments.reply");
531
- if (!content.text.trim())
532
- fail("threads.comments.reply", "Comment text is required.", "invalid_input");
533
- const result = await request(`${encodeURIComponent(comment.postId)}/replies`, { method: "POST" }, "threads.comments.reply", context);
534
- return {
535
- ...comment,
536
- commentId: typeof result["id"] === "string" ? result["id"] : comment.commentId,
537
- };
538
- },
539
- },
540
- analytics: {
541
- getAccountMetrics,
542
- async getPostMetrics(post, c) {
543
- authorize(post, "threads.analytics");
544
- const r = await request(`${encodeURIComponent(post.postId)}/insights?metric=views,likes,replies,reposts,quotes,shares`, { method: "GET", ...(c.signal ? { signal: c.signal } : {}) }, "threads.analytics", c);
545
- return array(r["data"]).flatMap((x) => {
546
- const row = object(x);
547
- const first = Array.isArray(row["values"]) ? row["values"][0] : undefined;
548
- const value = first && typeof first === "object"
549
- ? optionalNumber(object(first)["value"])
550
- : optionalNumber(row["value"]);
551
- const name = row["name"];
552
- return value === undefined || typeof name !== "string"
553
- ? []
554
- : [
555
- {
556
- name,
557
- value,
558
- unit: "count",
559
- period: "lifetime",
560
- fetchedAt: now(),
561
- freshness: "unknown",
562
- source: `threads:${version}`,
563
- },
564
- ];
565
- });
566
- },
567
- },
568
- });
569
- return adapter;
570
- }
571
- //# sourceMappingURL=threads.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/platforms/threads.ts"],"names":[],"mappings":"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"}