@hraness/ghostget 0.17.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 (500) hide show
  1. package/CHANGELOG.md +458 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1359 -0
  4. package/bunfig.toml +2 -0
  5. package/dist/apple-photos-client.js +704 -0
  6. package/dist/beeper-client.js +4602 -0
  7. package/dist/client.js +1605 -0
  8. package/dist/index-26yq8q16.js +31 -0
  9. package/dist/index-9t13b4k7.js +508 -0
  10. package/dist/index-axwm9b3v.js +5 -0
  11. package/dist/index-gwk7rbyj.js +30 -0
  12. package/dist/index.js +701 -0
  13. package/dist/messaging.js +1130 -0
  14. package/dist/omni-client.js +1406 -0
  15. package/dist/whatsapp-client.js +355 -0
  16. package/docs/imessage-direct-provider.md +106 -0
  17. package/docs/rental-listings.md +94 -0
  18. package/package.json +600 -0
  19. package/skills/ghostget/SKILL.md +251 -0
  20. package/skills/ghostget/agents/openai.yaml +4 -0
  21. package/skills/ghostget/references/adapter-contract.md +181 -0
  22. package/skills/ghostget/references/apple-photos.md +115 -0
  23. package/skills/ghostget/references/article-drafts.md +235 -0
  24. package/skills/ghostget/references/code-owned-provider-scaffold.md +134 -0
  25. package/skills/ghostget/references/cross-posting-video.md +139 -0
  26. package/skills/ghostget/references/cross-posting.md +82 -0
  27. package/skills/ghostget/references/derivation.md +390 -0
  28. package/skills/ghostget/references/hraness-social-profile-stats.json +269 -0
  29. package/skills/ghostget/references/install.md +66 -0
  30. package/skills/ghostget/references/linkedin-adapter.md +442 -0
  31. package/skills/ghostget/references/messaging.md +168 -0
  32. package/skills/ghostget/references/meta-comet-contract.md +153 -0
  33. package/skills/ghostget/references/platform-patterns.md +122 -0
  34. package/skills/ghostget/references/provider-plugins.md +496 -0
  35. package/skills/ghostget/references/reddit-flair.md +78 -0
  36. package/skills/ghostget/references/safety-and-state.md +214 -0
  37. package/skills/ghostget/references/settlement-and-duplicate-cleanup.md +79 -0
  38. package/skills/ghostget/references/social-platform-routing.md +66 -0
  39. package/skills/ghostget/references/social-profile-stats.md +195 -0
  40. package/skills/ghostget/references/social-video-platform-routing.md +89 -0
  41. package/skills/ghostget/references/whatsapp-adapter.md +101 -0
  42. package/skills/ghostget/references/x-adapter.md +332 -0
  43. package/skills/ghostget/references/x-ai-disclosure.md +71 -0
  44. package/src/apple-photos-cli.ts +639 -0
  45. package/src/apple-photos-client-types.ts +168 -0
  46. package/src/apple-photos-client.ts +201 -0
  47. package/src/apple-photos-contact-evidence.ts +838 -0
  48. package/src/apple-photos-local-source.ts +1131 -0
  49. package/src/args.ts +2053 -0
  50. package/src/article-draft-document.ts +417 -0
  51. package/src/article-draft-embeds.ts +123 -0
  52. package/src/article-draft-images.ts +214 -0
  53. package/src/assets/adapter-template/wrench-adapter.json +40 -0
  54. package/src/assets/adapters/beeper/wrench-web-adapter.json +1500 -0
  55. package/src/assets/adapters/beeper/wrench-web-adapter.v1.0.0.json +129 -0
  56. package/src/assets/adapters/beeper/wrench-web-adapter.v1.1.0.json +207 -0
  57. package/src/assets/adapters/beeper/wrench-web-adapter.v2.0.0.json +1463 -0
  58. package/src/assets/adapters/beeper/wrench-web-adapter.v2.1.0.json +1463 -0
  59. package/src/assets/adapters/beeper/wrench-web-adapter.v2.2.0.json +1475 -0
  60. package/src/assets/adapters/beeper/wrench-web-adapter.v2.3.0.json +1488 -0
  61. package/src/assets/adapters/bluesky/wrench-web-adapter.json +684 -0
  62. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.0.0.json +581 -0
  63. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.1.0.json +581 -0
  64. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.2.0.json +581 -0
  65. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.3.0.json +615 -0
  66. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.4.0.json +684 -0
  67. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.5.0.json +684 -0
  68. package/src/assets/adapters/bluesky/wrench-web-adapter.v1.6.0.json +684 -0
  69. package/src/assets/adapters/clasificados/wrench-web-adapter.json +54 -0
  70. package/src/assets/adapters/facebook/wrench-web-adapter.json +750 -0
  71. package/src/assets/adapters/facebook/wrench-web-adapter.v1.0.0.json +706 -0
  72. package/src/assets/adapters/facebook/wrench-web-adapter.v1.1.0.json +703 -0
  73. package/src/assets/adapters/facebook/wrench-web-adapter.v1.2.0.json +750 -0
  74. package/src/assets/adapters/facebook-group/wrench-web-adapter.json +682 -0
  75. package/src/assets/adapters/facebook-group/wrench-web-adapter.v1.0.0.json +583 -0
  76. package/src/assets/adapters/facebook-group/wrench-web-adapter.v1.1.0.json +682 -0
  77. package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.json +437 -0
  78. package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.0.0.json +383 -0
  79. package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.1.0.json +437 -0
  80. package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.1.1.json +437 -0
  81. package/src/assets/adapters/facebook-page/wrench-web-adapter.json +880 -0
  82. package/src/assets/adapters/facebook-page/wrench-web-adapter.v1.0.0.json +740 -0
  83. package/src/assets/adapters/facebook-page/wrench-web-adapter.v1.1.0.json +880 -0
  84. package/src/assets/adapters/github/wrench-web-adapter.json +69 -0
  85. package/src/assets/adapters/github/wrench-web-adapter.v1.0.0.json +42 -0
  86. package/src/assets/adapters/github/wrench-web-adapter.v1.1.0.json +69 -0
  87. package/src/assets/adapters/gmail/wrench-adapter.json +161 -0
  88. package/src/assets/adapters/gmail/wrench-adapter.v1.2.0.json +157 -0
  89. package/src/assets/adapters/hacker-news/wrench-web-adapter.json +315 -0
  90. package/src/assets/adapters/hacker-news/wrench-web-adapter.v1.0.0.json +315 -0
  91. package/src/assets/adapters/imessage/wrench-web-adapter.json +236 -0
  92. package/src/assets/adapters/instagram/wrench-web-adapter.json +719 -0
  93. package/src/assets/adapters/instagram/wrench-web-adapter.v1.0.0.json +627 -0
  94. package/src/assets/adapters/instagram/wrench-web-adapter.v1.1.0.json +609 -0
  95. package/src/assets/adapters/instagram/wrench-web-adapter.v1.2.0.json +640 -0
  96. package/src/assets/adapters/instagram/wrench-web-adapter.v1.3.0.json +671 -0
  97. package/src/assets/adapters/instagram/wrench-web-adapter.v1.4.0.json +710 -0
  98. package/src/assets/adapters/instagram/wrench-web-adapter.v1.5.0.json +710 -0
  99. package/src/assets/adapters/instagram/wrench-web-adapter.v1.6.0.json +719 -0
  100. package/src/assets/adapters/instagram/wrench-web-adapter.v1.7.0.json +719 -0
  101. package/src/assets/adapters/linkedin/wrench-adapter.json +442 -0
  102. package/src/assets/adapters/linkedin/wrench-adapter.v0.4.0.json +124 -0
  103. package/src/assets/adapters/linkedin/wrench-adapter.v1.0.0.json +411 -0
  104. package/src/assets/adapters/linkedin/wrench-web-adapter.json +914 -0
  105. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.0.0.json +604 -0
  106. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.1.0.json +604 -0
  107. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.10.0.json +809 -0
  108. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.11.0.json +809 -0
  109. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.12.0.json +820 -0
  110. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.13.0.json +819 -0
  111. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.14.0.json +819 -0
  112. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.15.0.json +819 -0
  113. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.16.0.json +874 -0
  114. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.17.0.json +874 -0
  115. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.18.0.json +874 -0
  116. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.19.0.json +874 -0
  117. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.2.0.json +731 -0
  118. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.3.0.json +768 -0
  119. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.4.0.json +808 -0
  120. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.5.0.json +808 -0
  121. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.6.0.json +808 -0
  122. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.7.0.json +825 -0
  123. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.8.0.json +792 -0
  124. package/src/assets/adapters/linkedin/wrench-web-adapter.v1.9.0.json +809 -0
  125. package/src/assets/adapters/reddit/wrench-web-adapter.json +855 -0
  126. package/src/assets/adapters/reddit/wrench-web-adapter.v1.0.0.json +577 -0
  127. package/src/assets/adapters/reddit/wrench-web-adapter.v1.1.0.json +604 -0
  128. package/src/assets/adapters/reddit/wrench-web-adapter.v1.10.0.json +712 -0
  129. package/src/assets/adapters/reddit/wrench-web-adapter.v1.11.0.json +712 -0
  130. package/src/assets/adapters/reddit/wrench-web-adapter.v1.12.0.json +712 -0
  131. package/src/assets/adapters/reddit/wrench-web-adapter.v1.2.0.json +653 -0
  132. package/src/assets/adapters/reddit/wrench-web-adapter.v1.3.0.json +712 -0
  133. package/src/assets/adapters/reddit/wrench-web-adapter.v1.4.0.json +713 -0
  134. package/src/assets/adapters/reddit/wrench-web-adapter.v1.5.0.json +712 -0
  135. package/src/assets/adapters/reddit/wrench-web-adapter.v1.6.0.json +713 -0
  136. package/src/assets/adapters/reddit/wrench-web-adapter.v1.7.0.json +713 -0
  137. package/src/assets/adapters/reddit/wrench-web-adapter.v1.8.0.json +713 -0
  138. package/src/assets/adapters/reddit/wrench-web-adapter.v1.9.0.json +713 -0
  139. package/src/assets/adapters/substack/wrench-web-adapter.json +936 -0
  140. package/src/assets/adapters/substack/wrench-web-adapter.v1.0.0.json +817 -0
  141. package/src/assets/adapters/substack/wrench-web-adapter.v1.1.0.json +812 -0
  142. package/src/assets/adapters/substack/wrench-web-adapter.v1.2.0.json +812 -0
  143. package/src/assets/adapters/substack/wrench-web-adapter.v1.3.0.json +902 -0
  144. package/src/assets/adapters/substack/wrench-web-adapter.v1.4.0.json +936 -0
  145. package/src/assets/adapters/substack/wrench-web-adapter.v1.5.0.json +936 -0
  146. package/src/assets/adapters/substack/wrench-web-adapter.v1.6.0.json +936 -0
  147. package/src/assets/adapters/threads/wrench-web-adapter.json +692 -0
  148. package/src/assets/adapters/threads/wrench-web-adapter.v1.0.0.json +629 -0
  149. package/src/assets/adapters/threads/wrench-web-adapter.v1.1.0.json +623 -0
  150. package/src/assets/adapters/threads/wrench-web-adapter.v1.2.0.json +622 -0
  151. package/src/assets/adapters/threads/wrench-web-adapter.v1.3.0.json +622 -0
  152. package/src/assets/adapters/threads/wrench-web-adapter.v1.4.0.json +622 -0
  153. package/src/assets/adapters/threads/wrench-web-adapter.v1.5.0.json +699 -0
  154. package/src/assets/adapters/threads/wrench-web-adapter.v1.6.0.json +693 -0
  155. package/src/assets/adapters/threads/wrench-web-adapter.v1.7.0.json +692 -0
  156. package/src/assets/adapters/tiktok/wrench-web-adapter.json +762 -0
  157. package/src/assets/adapters/tiktok/wrench-web-adapter.v1.0.0.json +681 -0
  158. package/src/assets/adapters/tiktok/wrench-web-adapter.v1.1.0.json +708 -0
  159. package/src/assets/adapters/tiktok/wrench-web-adapter.v1.2.0.json +762 -0
  160. package/src/assets/adapters/tiktok/wrench-web-adapter.v1.3.0.json +762 -0
  161. package/src/assets/adapters/twitch/wrench-web-adapter.json +42 -0
  162. package/src/assets/adapters/twitch/wrench-web-adapter.v1.0.0.json +42 -0
  163. package/src/assets/adapters/whatsapp/wrench-web-adapter.json +400 -0
  164. package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.0.0.json +355 -0
  165. package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.1.0.json +386 -0
  166. package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.2.0.json +386 -0
  167. package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.3.0.json +400 -0
  168. package/src/assets/adapters/x/wrench-adapter.json +749 -0
  169. package/src/assets/adapters/x/wrench-adapter.v1.0.0.json +700 -0
  170. package/src/assets/adapters/x/wrench-adapter.v1.1.0.json +707 -0
  171. package/src/assets/adapters/x/wrench-web-adapter.json +712 -0
  172. package/src/assets/adapters/x/wrench-web-adapter.v1.1.0.json +579 -0
  173. package/src/assets/adapters/x/wrench-web-adapter.v1.10.0.json +685 -0
  174. package/src/assets/adapters/x/wrench-web-adapter.v1.11.0.json +712 -0
  175. package/src/assets/adapters/x/wrench-web-adapter.v1.12.0.json +712 -0
  176. package/src/assets/adapters/x/wrench-web-adapter.v1.13.0.json +712 -0
  177. package/src/assets/adapters/x/wrench-web-adapter.v1.2.0.json +578 -0
  178. package/src/assets/adapters/x/wrench-web-adapter.v1.3.0.json +610 -0
  179. package/src/assets/adapters/x/wrench-web-adapter.v1.4.0.json +617 -0
  180. package/src/assets/adapters/x/wrench-web-adapter.v1.5.0.json +634 -0
  181. package/src/assets/adapters/x/wrench-web-adapter.v1.6.0.json +632 -0
  182. package/src/assets/adapters/x/wrench-web-adapter.v1.7.0.json +649 -0
  183. package/src/assets/adapters/x/wrench-web-adapter.v1.8.0.json +649 -0
  184. package/src/assets/adapters/x/wrench-web-adapter.v1.9.0.json +683 -0
  185. package/src/assets/adapters/youtube/wrench-web-adapter.json +561 -0
  186. package/src/assets/adapters/youtube/wrench-web-adapter.v1.0.0.json +465 -0
  187. package/src/assets/adapters/youtube/wrench-web-adapter.v1.1.0.json +519 -0
  188. package/src/assets/adapters/youtube/wrench-web-adapter.v1.2.0.json +561 -0
  189. package/src/assets/adapters/youtube/wrench-web-adapter.v1.3.0.json +561 -0
  190. package/src/assets/code-owned-provider-template/plugin.test.ts.template +54 -0
  191. package/src/assets/code-owned-provider-template/plugin.ts.template +102 -0
  192. package/src/assets/code-owned-provider-template/runtime.internal.test.ts.template +44 -0
  193. package/src/assets/code-owned-provider-template/runtime.ts.template +59 -0
  194. package/src/assets/code-owned-provider-template/wrench-adapter.json.template +33 -0
  195. package/src/assets/fonts/nebula-sans/LICENSE.txt +96 -0
  196. package/src/assets/fonts/nebula-sans/NebulaSans-Book.woff2 +0 -0
  197. package/src/assets/fonts/nebula-sans/PROVENANCE.md +14 -0
  198. package/src/assets.d.ts +4 -0
  199. package/src/auth.ts +1157 -0
  200. package/src/beeper-client-types.ts +169 -0
  201. package/src/beeper-client.ts +250 -0
  202. package/src/beeper-contact-interactions-cli.ts +180 -0
  203. package/src/beeper-contact-interactions.ts +1612 -0
  204. package/src/beeper-message-bundle-v1.ts +257 -0
  205. package/src/beeper-message-like-me-cli.ts +84 -0
  206. package/src/beeper-message-like-me-export.ts +2274 -0
  207. package/src/beeper-message-like-me-recovery.ts +931 -0
  208. package/src/beeper-message-like-me-source.ts +4034 -0
  209. package/src/browser-admission.ts +928 -0
  210. package/src/browser-snapshots.ts +260 -0
  211. package/src/browser.ts +3873 -0
  212. package/src/canonical-json.ts +60 -0
  213. package/src/catalog-cli.ts +638 -0
  214. package/src/cli.ts +208 -0
  215. package/src/client-types.ts +301 -0
  216. package/src/client.ts +2726 -0
  217. package/src/confirmed-write-failure.ts +44 -0
  218. package/src/confirmed-write-model.ts +72 -0
  219. package/src/confirmed-write-platform.ts +1055 -0
  220. package/src/confirmed-write-program.ts +224 -0
  221. package/src/confirmed-write-runtime.ts +16 -0
  222. package/src/cursor-token.ts +228 -0
  223. package/src/derivation-dnr-readiness.ts +367 -0
  224. package/src/derivation-file-chooser.ts +384 -0
  225. package/src/derivation-network-boundary.ts +835 -0
  226. package/src/derivation-network-guard.ts +782 -0
  227. package/src/derivation-network-proxy-helper.ts +440 -0
  228. package/src/derivation-network-proxy.ts +385 -0
  229. package/src/derive-command-helper.ts +693 -0
  230. package/src/derive-fixtures.ts +343 -0
  231. package/src/derive-review.ts +980 -0
  232. package/src/derive.ts +4754 -0
  233. package/src/fixtures/beeper-message-like-me-v1/accounts.ndjson +2 -0
  234. package/src/fixtures/beeper-message-like-me-v1/conversations.ndjson +1 -0
  235. package/src/fixtures/beeper-message-like-me-v1/manifest.json +1 -0
  236. package/src/fixtures/beeper-message-like-me-v1/messages.ndjson +2 -0
  237. package/src/fixtures/beeper-message-like-me-v1/participants.ndjson +3 -0
  238. package/src/fixtures/beeper-message-like-me-v1/reactions.ndjson +1 -0
  239. package/src/fixtures/beeper-message-like-me-v1/tombstones.ndjson +1 -0
  240. package/src/ghostget.ts +3672 -0
  241. package/src/gmail-capture.ts +1244 -0
  242. package/src/har-internal.ts +1242 -0
  243. package/src/har.ts +743 -0
  244. package/src/index.ts +218 -0
  245. package/src/invocation-read-platform.ts +55 -0
  246. package/src/invocation-read-program.ts +93 -0
  247. package/src/invocation-read-runtime.ts +11 -0
  248. package/src/linked-device-lifecycle-admission.ts +450 -0
  249. package/src/linked-device-lifecycle-journal.ts +1560 -0
  250. package/src/linked-device-lifecycle-runtime.ts +1602 -0
  251. package/src/local-cli-admission.ts +135 -0
  252. package/src/local-cli-contracts.ts +271 -0
  253. package/src/local-cli-execution.ts +98 -0
  254. package/src/local-cli-surface-contract.ts +1510 -0
  255. package/src/local-cli-tool-identity.ts +336 -0
  256. package/src/media/archive.ts +2325 -0
  257. package/src/media/args.ts +303 -0
  258. package/src/media/cli.ts +287 -0
  259. package/src/media/doctor.ts +475 -0
  260. package/src/media/ffmpeg.ts +1330 -0
  261. package/src/media/http-capture.ts +711 -0
  262. package/src/media/http-probe.ts +593 -0
  263. package/src/media/http.ts +387 -0
  264. package/src/media/index.ts +10 -0
  265. package/src/media/local-transcription.ts +613 -0
  266. package/src/media/lock.ts +321 -0
  267. package/src/media/manifest.ts +1712 -0
  268. package/src/media/metadata.ts +906 -0
  269. package/src/media/process.ts +723 -0
  270. package/src/media/revision.ts +166 -0
  271. package/src/media/runtime-closure.ts +1063 -0
  272. package/src/media/source-router.ts +187 -0
  273. package/src/media/transcriber-config.ts +1122 -0
  274. package/src/media/transcript-persistence-model.ts +15 -0
  275. package/src/media/transcript-persistence-platform.ts +89 -0
  276. package/src/media/transcript-persistence-program.ts +39 -0
  277. package/src/media/transcript-persistence-runtime.ts +24 -0
  278. package/src/media/transcript.ts +616 -0
  279. package/src/media/utf8-order.ts +30 -0
  280. package/src/media/whisper-cpp.ts +464 -0
  281. package/src/media/whisper-language.ts +58 -0
  282. package/src/media/yt-dlp.ts +439 -0
  283. package/src/message-like-me-agentic-messaging.ts +882 -0
  284. package/src/messaging-action-store.ts +793 -0
  285. package/src/messaging-runtime.ts +2136 -0
  286. package/src/messaging-store.ts +539 -0
  287. package/src/messaging-types.ts +1663 -0
  288. package/src/messaging.ts +334 -0
  289. package/src/model.ts +2671 -0
  290. package/src/oauth-google.ts +888 -0
  291. package/src/omni-client-types.ts +306 -0
  292. package/src/omni-client.ts +2225 -0
  293. package/src/omni-limits.ts +34 -0
  294. package/src/omni-model.ts +1614 -0
  295. package/src/omni-request.ts +379 -0
  296. package/src/omni-runtime.ts +1632 -0
  297. package/src/operation-deadline.ts +189 -0
  298. package/src/path-helper.ts +1656 -0
  299. package/src/pinned-https.ts +194 -0
  300. package/src/plan-assets.ts +832 -0
  301. package/src/platform-catalog.ts +1832 -0
  302. package/src/plugins/beeper-linked-device/plugin.ts +310 -0
  303. package/src/plugins/bluesky-web/plugin.ts +178 -0
  304. package/src/plugins/clasificados-web/plugin.ts +66 -0
  305. package/src/plugins/github-web/plugin.ts +80 -0
  306. package/src/plugins/gmail-official/plugin.ts +110 -0
  307. package/src/plugins/hacker-news-web/plugin.ts +52 -0
  308. package/src/plugins/imessage-direct/plugin.ts +195 -0
  309. package/src/plugins/imessage-direct/vendor/0001-fix-keep-AppleScript-send-payloads-out-of-child-argv.patch +1430 -0
  310. package/src/plugins/imessage-direct/vendor/0002-feat-rpc-add-exact-chat-lookup.patch +225 -0
  311. package/src/plugins/imessage-direct/vendor/provenance.json +80 -0
  312. package/src/plugins/linkedin-official/plugin.ts +84 -0
  313. package/src/plugins/linkedin-web/plugin.ts +412 -0
  314. package/src/plugins/meta-web/plugin.ts +317 -0
  315. package/src/plugins/reddit-web/flair.ts +492 -0
  316. package/src/plugins/reddit-web/plugin.ts +477 -0
  317. package/src/plugins/substack-web/plugin.ts +124 -0
  318. package/src/plugins/tiktok-web/plugin.ts +67 -0
  319. package/src/plugins/twitch-web/plugin.ts +54 -0
  320. package/src/plugins/whatsapp-linked-device/plugin.ts +105 -0
  321. package/src/plugins/x-official/plugin.ts +64 -0
  322. package/src/plugins/x-web/plugin.ts +488 -0
  323. package/src/plugins/youtube-web/plugin.ts +101 -0
  324. package/src/portable-run-recovery.ts +466 -0
  325. package/src/process-identity.ts +501 -0
  326. package/src/profile-clone-helper.ts +104 -0
  327. package/src/provider-catalog-views.ts +51 -0
  328. package/src/provider-context.ts +69 -0
  329. package/src/provider-contract-definitions-x.ts +45 -0
  330. package/src/provider-contract-definitions.ts +948 -0
  331. package/src/provider-contract-input-gmail.ts +176 -0
  332. package/src/provider-contract-input-linkedin.ts +77 -0
  333. package/src/provider-contract-input-x.ts +304 -0
  334. package/src/provider-contract-planning.ts +23 -0
  335. package/src/provider-contract-semantic-identity.ts +54 -0
  336. package/src/provider-contracts.ts +251 -0
  337. package/src/provider-http.ts +723 -0
  338. package/src/provider-plugin-auth.ts +36 -0
  339. package/src/provider-plugin-builtins.ts +229 -0
  340. package/src/provider-plugin-cleanup-barrier.ts +229 -0
  341. package/src/provider-plugin-cleanup-execution.ts +79 -0
  342. package/src/provider-plugin-cleanup-resource.ts +470 -0
  343. package/src/provider-plugin-contract-identity.ts +707 -0
  344. package/src/provider-plugin-host.ts +1972 -0
  345. package/src/provider-plugin-identifiers.ts +60 -0
  346. package/src/provider-plugin-invocation-lease.ts +889 -0
  347. package/src/provider-plugin-lifecycle-kernel.ts +566 -0
  348. package/src/provider-plugin-lifecycle.ts +1455 -0
  349. package/src/provider-plugin-module-analysis.ts +336 -0
  350. package/src/provider-plugin-package.ts +2530 -0
  351. package/src/provider-plugin-portable-authority.ts +106 -0
  352. package/src/provider-plugin-portable-catalog.ts +94 -0
  353. package/src/provider-plugin-portable-identity.ts +315 -0
  354. package/src/provider-plugin-portable-runtime.ts +2057 -0
  355. package/src/provider-plugin-protocol.ts +1625 -0
  356. package/src/provider-plugin-registry.ts +3342 -0
  357. package/src/provider-plugin-store.ts +2155 -0
  358. package/src/provider-plugin-test-fixture.ts +5 -0
  359. package/src/provider-plugin.ts +4907 -0
  360. package/src/provider-plugins.generated.ts +43 -0
  361. package/src/provider-plugins.ts +8 -0
  362. package/src/provider-subject.ts +41 -0
  363. package/src/provider.ts +315 -0
  364. package/src/providers/beeper-local-runtime.ts +5426 -0
  365. package/src/providers/beeper-local.ts +2739 -0
  366. package/src/providers/beeper-messaging.ts +462 -0
  367. package/src/providers/beeper-omni.ts +1159 -0
  368. package/src/providers/bluesky-web-runtime.ts +2895 -0
  369. package/src/providers/bluesky-web.ts +1614 -0
  370. package/src/providers/clasificados-web-runtime.ts +255 -0
  371. package/src/providers/clasificados-web.ts +503 -0
  372. package/src/providers/contact-projection.ts +301 -0
  373. package/src/providers/github-read-model.ts +94 -0
  374. package/src/providers/github-read-platform.ts +165 -0
  375. package/src/providers/github-read-program.ts +97 -0
  376. package/src/providers/github-web-runtime.ts +320 -0
  377. package/src/providers/github-web.ts +403 -0
  378. package/src/providers/gmail-api.ts +2834 -0
  379. package/src/providers/gmail-omni.ts +830 -0
  380. package/src/providers/gmail.ts +1130 -0
  381. package/src/providers/hacker-news-web-runtime.ts +220 -0
  382. package/src/providers/hacker-news-web.ts +809 -0
  383. package/src/providers/imessage-direct-install.ts +354 -0
  384. package/src/providers/imessage-direct-messaging.ts +532 -0
  385. package/src/providers/imessage-direct-omni.ts +400 -0
  386. package/src/providers/imessage-direct-runtime.ts +1498 -0
  387. package/src/providers/imessage-direct.ts +351 -0
  388. package/src/providers/instagram-video-foundations.ts +913 -0
  389. package/src/providers/instagram-web-profile-browser.ts +600 -0
  390. package/src/providers/iso-bmff.ts +338 -0
  391. package/src/providers/linkedin-company-platform.ts +42 -0
  392. package/src/providers/linkedin-company-program.ts +88 -0
  393. package/src/providers/linkedin-contact-failure.ts +84 -0
  394. package/src/providers/linkedin-contact-platform.ts +45 -0
  395. package/src/providers/linkedin-contact-program.ts +91 -0
  396. package/src/providers/linkedin-profile-activity-failure.ts +76 -0
  397. package/src/providers/linkedin-profile-activity-platform.ts +41 -0
  398. package/src/providers/linkedin-profile-activity-program.ts +67 -0
  399. package/src/providers/linkedin-read-failure.ts +52 -0
  400. package/src/providers/linkedin-self-platform.ts +53 -0
  401. package/src/providers/linkedin-self-program.ts +122 -0
  402. package/src/providers/linkedin-web-article-browser.ts +794 -0
  403. package/src/providers/linkedin-web-bootstrap.ts +146 -0
  404. package/src/providers/linkedin-web-contact.ts +830 -0
  405. package/src/providers/linkedin-web-feed-browser.ts +832 -0
  406. package/src/providers/linkedin-web-feed.ts +864 -0
  407. package/src/providers/linkedin-web-post-browser.ts +653 -0
  408. package/src/providers/linkedin-web-profile-browser.ts +683 -0
  409. package/src/providers/linkedin-web-runtime.ts +2388 -0
  410. package/src/providers/linkedin-web.ts +3305 -0
  411. package/src/providers/linkedin.ts +1885 -0
  412. package/src/providers/meta-bootstrap.ts +1043 -0
  413. package/src/providers/meta-facebook-group.ts +690 -0
  414. package/src/providers/meta-marketplace-relay.ts +747 -0
  415. package/src/providers/meta-omni.ts +373 -0
  416. package/src/providers/meta-relay-bundle.ts +1049 -0
  417. package/src/providers/meta-web-descriptors.ts +1740 -0
  418. package/src/providers/meta-web-runtime.ts +3388 -0
  419. package/src/providers/meta-web.ts +2931 -0
  420. package/src/providers/read-failure.ts +139 -0
  421. package/src/providers/reddit-omni.ts +462 -0
  422. package/src/providers/reddit-web-runtime.ts +1929 -0
  423. package/src/providers/reddit-web.ts +1611 -0
  424. package/src/providers/rental-listings.ts +460 -0
  425. package/src/providers/substack-omni.ts +406 -0
  426. package/src/providers/substack-video-mp4.ts +33 -0
  427. package/src/providers/substack-web-runtime.ts +2812 -0
  428. package/src/providers/substack-web.ts +1502 -0
  429. package/src/providers/tiktok-video-mp4.ts +33 -0
  430. package/src/providers/tiktok-web-runtime.ts +770 -0
  431. package/src/providers/tiktok-web.ts +2786 -0
  432. package/src/providers/twitch-web-runtime.ts +226 -0
  433. package/src/providers/twitch-web.ts +274 -0
  434. package/src/providers/whatsapp-account-identity.ts +55 -0
  435. package/src/providers/whatsapp-contact-projection-helper.ts +874 -0
  436. package/src/providers/whatsapp-contact-projection-protocol.ts +403 -0
  437. package/src/providers/whatsapp-interaction-projection-helper.ts +1452 -0
  438. package/src/providers/whatsapp-interaction-projection-protocol.ts +462 -0
  439. package/src/providers/whatsapp-message-export-projection-protocol.ts +532 -0
  440. package/src/providers/whatsapp-messaging.ts +132 -0
  441. package/src/providers/whatsapp-omni.ts +586 -0
  442. package/src/providers/whatsapp-web-runtime.ts +3108 -0
  443. package/src/providers/whatsapp-web.ts +1037 -0
  444. package/src/providers/x-image-provenance.ts +523 -0
  445. package/src/providers/x-made-with-ai.ts +106 -0
  446. package/src/providers/x-transaction-id.ts +413 -0
  447. package/src/providers/x-web-runtime.ts +3485 -0
  448. package/src/providers/x-web.ts +2332 -0
  449. package/src/providers/x.ts +1889 -0
  450. package/src/providers/youtube-web-runtime.ts +1400 -0
  451. package/src/providers/youtube-web.ts +1221 -0
  452. package/src/read-admission-runtime.ts +91 -0
  453. package/src/read-client.ts +521 -0
  454. package/src/read-effect-platform.ts +7 -0
  455. package/src/read-effect-runtime.ts +14 -0
  456. package/src/read-effect.ts +52 -0
  457. package/src/read-projection-admission.ts +866 -0
  458. package/src/read-projections.ts +3151 -0
  459. package/src/recovery.ts +1492 -0
  460. package/src/reviewed-template.ts +146 -0
  461. package/src/run-journal.ts +1272 -0
  462. package/src/runtime.ts +5116 -0
  463. package/src/scripts/generate-provider-plugin-catalog.ts +121 -0
  464. package/src/scripts/install-whatsapp-protocol.sh +232 -0
  465. package/src/scripts/recover-install-stages.ts +1491 -0
  466. package/src/scripts/resolve-state-home.ts +30 -0
  467. package/src/scripts/scaffold-web-provider.ts +973 -0
  468. package/src/scripts/sync-bundled-adapters.ts +695 -0
  469. package/src/session-secrets.ts +1183 -0
  470. package/src/state-helper.bunfig.toml +2 -0
  471. package/src/state-helper.ts +2914 -0
  472. package/src/storage.ts +3842 -0
  473. package/src/transport-policy.ts +2 -0
  474. package/src/usage.ts +182 -0
  475. package/src/version.ts +2 -0
  476. package/src/web-session-authentication-policy.ts +136 -0
  477. package/src/web-session-cleanup-admission.ts +2344 -0
  478. package/src/web-session-cleanup-join.ts +99 -0
  479. package/src/web-session-client.ts +996 -0
  480. package/src/web-session-contract-definitions.ts +820 -0
  481. package/src/web-session-contract-planning.ts +42 -0
  482. package/src/web-session-contracts.ts +228 -0
  483. package/src/web-session-cookies.ts +500 -0
  484. package/src/web-session-execution.ts +385 -0
  485. package/src/web-session-http.ts +373 -0
  486. package/src/web-session-read-errors.ts +19 -0
  487. package/src/web-session-read-runtime.ts +124 -0
  488. package/src/web-session-recovery.ts +818 -0
  489. package/src/web-session-sites.ts +58 -0
  490. package/src/web-session-template.ts +994 -0
  491. package/src/web-session.ts +93 -0
  492. package/src/whatsapp-client-binding.ts +21 -0
  493. package/src/whatsapp-client-types.ts +75 -0
  494. package/src/whatsapp-client.ts +395 -0
  495. package/src/whatsapp-export-coordinate.ts +17 -0
  496. package/src/whatsapp-message-bundle-v2.ts +195 -0
  497. package/src/whatsapp-message-like-me-cli.ts +195 -0
  498. package/src/whatsapp-message-like-me-export.ts +1072 -0
  499. package/src/whatsapp-message-like-me-source.ts +1012 -0
  500. package/tsconfig.json +67 -0
@@ -0,0 +1,681 @@
1
+ {
2
+ "schemaVersion": 4,
3
+ "id": "tiktok-web",
4
+ "version": "1.0.0",
5
+ "displayName": "TikTok (Authenticated Web API)",
6
+ "surfaceId": "tiktok",
7
+ "origins": [
8
+ "https://www.tiktok.com"
9
+ ],
10
+ "browserDomains": [
11
+ "www.tiktok.com"
12
+ ],
13
+ "operations": {
14
+ "feeds.read": {
15
+ "description": "Observed contract: read one bounded signer-free TikTok For You response through the exact first-party recommendation endpoint after binding the current viewer.",
16
+ "risk": "R1",
17
+ "sideEffect": "none",
18
+ "idempotency": "none",
19
+ "dedupeWindowMs": 0,
20
+ "input": {
21
+ "properties": {
22
+ "feed": {
23
+ "type": "string",
24
+ "description": "Exact TikTok feed supported by the reviewed direct request",
25
+ "enum": [
26
+ "for-you"
27
+ ]
28
+ },
29
+ "limit": {
30
+ "type": "number",
31
+ "description": "Maximum complete response page to project",
32
+ "minimum": 1,
33
+ "maximum": 30
34
+ }
35
+ },
36
+ "required": [
37
+ "feed"
38
+ ]
39
+ },
40
+ "webSession": {
41
+ "site": "tiktok",
42
+ "action": "feeds.read",
43
+ "contractVersion": 1,
44
+ "timeoutMs": 60000,
45
+ "maxOutputBytes": 4194304
46
+ }
47
+ },
48
+ "posts.read": {
49
+ "description": "Capture-required contract reservation: read one exact TikTok post after current item-detail proof generation and a bounded target-bound response are reviewed.",
50
+ "risk": "R1",
51
+ "sideEffect": "none",
52
+ "idempotency": "none",
53
+ "dedupeWindowMs": 0,
54
+ "input": {
55
+ "properties": {
56
+ "post_id": {
57
+ "type": "string",
58
+ "description": "Exact decimal TikTok post ID",
59
+ "minLength": 1,
60
+ "maxLength": 32
61
+ }
62
+ },
63
+ "required": [
64
+ "post_id"
65
+ ]
66
+ },
67
+ "webSession": {
68
+ "site": "tiktok",
69
+ "action": "posts.read",
70
+ "contractVersion": 1,
71
+ "timeoutMs": 60000,
72
+ "maxOutputBytes": 4194304
73
+ }
74
+ },
75
+ "media.read": {
76
+ "description": "Capture-required contract reservation: resolve one exact TikTok post's bounded media metadata without persisting expiring playback credentials.",
77
+ "risk": "R1",
78
+ "sideEffect": "none",
79
+ "idempotency": "none",
80
+ "dedupeWindowMs": 0,
81
+ "input": {
82
+ "properties": {
83
+ "post_id": {
84
+ "type": "string",
85
+ "description": "Exact decimal TikTok post ID",
86
+ "minLength": 1,
87
+ "maxLength": 32
88
+ }
89
+ },
90
+ "required": [
91
+ "post_id"
92
+ ]
93
+ },
94
+ "webSession": {
95
+ "site": "tiktok",
96
+ "action": "media.read",
97
+ "contractVersion": 1,
98
+ "timeoutMs": 60000,
99
+ "maxOutputBytes": 4194304
100
+ }
101
+ },
102
+ "comments.read": {
103
+ "description": "Observed contract: read one bounded acknowledgement-free TikTok comment page through the exact signer-free first-party list endpoint and bind every comment to the requested post.",
104
+ "risk": "R1",
105
+ "sideEffect": "none",
106
+ "idempotency": "none",
107
+ "dedupeWindowMs": 0,
108
+ "input": {
109
+ "properties": {
110
+ "post_id": {
111
+ "type": "string",
112
+ "description": "Exact decimal TikTok post ID",
113
+ "minLength": 1,
114
+ "maxLength": 32
115
+ },
116
+ "cursor": {
117
+ "type": "number",
118
+ "description": "Decimal cursor returned by the preceding comment page",
119
+ "minimum": 0,
120
+ "maximum": 9007199254740991
121
+ },
122
+ "limit": {
123
+ "type": "number",
124
+ "description": "Maximum complete comment response page to project",
125
+ "minimum": 1,
126
+ "maximum": 50
127
+ }
128
+ },
129
+ "required": [
130
+ "post_id"
131
+ ]
132
+ },
133
+ "webSession": {
134
+ "site": "tiktok",
135
+ "action": "comments.read",
136
+ "contractVersion": 1,
137
+ "timeoutMs": 60000,
138
+ "maxOutputBytes": 4194304
139
+ }
140
+ },
141
+ "messaging.list": {
142
+ "description": "Capture-required contract reservation: list one TikTok inbox folder without read receipts, presence, or acknowledgement side effects.",
143
+ "risk": "R1",
144
+ "sideEffect": "none",
145
+ "idempotency": "none",
146
+ "dedupeWindowMs": 0,
147
+ "input": {
148
+ "properties": {
149
+ "folder": {
150
+ "type": "string",
151
+ "description": "Exact TikTok inbox folder",
152
+ "enum": [
153
+ "inbox",
154
+ "requests"
155
+ ]
156
+ },
157
+ "cursor": {
158
+ "type": "string",
159
+ "description": "Opaque cursor returned by the preceding inbox page",
160
+ "minLength": 1,
161
+ "maxLength": 4096
162
+ },
163
+ "limit": {
164
+ "type": "number",
165
+ "description": "Maximum conversations to project",
166
+ "minimum": 1,
167
+ "maximum": 100
168
+ }
169
+ },
170
+ "required": [
171
+ "folder"
172
+ ]
173
+ },
174
+ "webSession": {
175
+ "site": "tiktok",
176
+ "action": "messaging.list",
177
+ "contractVersion": 1,
178
+ "timeoutMs": 60000,
179
+ "maxOutputBytes": 4194304
180
+ }
181
+ },
182
+ "messaging.read": {
183
+ "description": "Capture-required contract reservation: read one exact TikTok conversation without read receipts, presence, or acknowledgement side effects.",
184
+ "risk": "R1",
185
+ "sideEffect": "none",
186
+ "idempotency": "none",
187
+ "dedupeWindowMs": 0,
188
+ "input": {
189
+ "properties": {
190
+ "conversation_id": {
191
+ "type": "string",
192
+ "description": "Exact opaque TikTok conversation ID returned by messaging.list",
193
+ "minLength": 1,
194
+ "maxLength": 512
195
+ },
196
+ "cursor": {
197
+ "type": "string",
198
+ "description": "Opaque cursor returned by the preceding conversation page",
199
+ "minLength": 1,
200
+ "maxLength": 4096
201
+ },
202
+ "limit": {
203
+ "type": "number",
204
+ "description": "Maximum messages to project",
205
+ "minimum": 1,
206
+ "maximum": 100
207
+ }
208
+ },
209
+ "required": [
210
+ "conversation_id"
211
+ ]
212
+ },
213
+ "webSession": {
214
+ "site": "tiktok",
215
+ "action": "messaging.read",
216
+ "contractVersion": 1,
217
+ "timeoutMs": 60000,
218
+ "maxOutputBytes": 4194304
219
+ }
220
+ },
221
+ "likes.set": {
222
+ "description": "Capture-required contract reservation: set one exact TikTok like state only after current csrf/proof material, target binding, and independent readback are proven.",
223
+ "risk": "R2",
224
+ "sideEffect": "Sets or clears the authenticated viewer's like on the exact confirmed TikTok post.",
225
+ "idempotency": "local-at-most-once",
226
+ "dedupeWindowMs": 86400000,
227
+ "input": {
228
+ "properties": {
229
+ "post_id": {
230
+ "type": "string",
231
+ "description": "Exact decimal TikTok post ID",
232
+ "minLength": 1,
233
+ "maxLength": 32
234
+ },
235
+ "liked": {
236
+ "type": "boolean",
237
+ "description": "Exact desired like state"
238
+ }
239
+ },
240
+ "required": [
241
+ "post_id",
242
+ "liked"
243
+ ]
244
+ },
245
+ "webSession": {
246
+ "site": "tiktok",
247
+ "action": "likes.set",
248
+ "contractVersion": 1,
249
+ "timeoutMs": 60000,
250
+ "maxOutputBytes": 2097152
251
+ }
252
+ },
253
+ "content.save": {
254
+ "description": "Capture-required contract reservation: set one exact TikTok saved state only after current csrf/proof material, target binding, and independent saved-list readback are proven.",
255
+ "risk": "R2",
256
+ "sideEffect": "Saves or removes the exact confirmed TikTok post in the authenticated viewer's collection.",
257
+ "idempotency": "local-at-most-once",
258
+ "dedupeWindowMs": 86400000,
259
+ "input": {
260
+ "properties": {
261
+ "post_id": {
262
+ "type": "string",
263
+ "description": "Exact decimal TikTok post ID",
264
+ "minLength": 1,
265
+ "maxLength": 32
266
+ },
267
+ "saved": {
268
+ "type": "boolean",
269
+ "description": "Exact desired saved state"
270
+ }
271
+ },
272
+ "required": [
273
+ "post_id",
274
+ "saved"
275
+ ]
276
+ },
277
+ "webSession": {
278
+ "site": "tiktok",
279
+ "action": "content.save",
280
+ "contractVersion": 1,
281
+ "timeoutMs": 60000,
282
+ "maxOutputBytes": 2097152
283
+ }
284
+ },
285
+ "relationships.follow.set": {
286
+ "description": "Capture-required contract reservation: set one exact TikTok follow state only after the current AB-selected mutation and independent relationship readback are proven.",
287
+ "risk": "R2",
288
+ "sideEffect": "Follows or unfollows the exact confirmed TikTok account as the authenticated viewer.",
289
+ "idempotency": "local-at-most-once",
290
+ "dedupeWindowMs": 86400000,
291
+ "input": {
292
+ "properties": {
293
+ "user_id": {
294
+ "type": "string",
295
+ "description": "Exact decimal target TikTok user ID",
296
+ "minLength": 1,
297
+ "maxLength": 32
298
+ },
299
+ "sec_user_id": {
300
+ "type": "string",
301
+ "description": "Exact target TikTok secUid paired with user_id",
302
+ "minLength": 16,
303
+ "maxLength": 256
304
+ },
305
+ "following": {
306
+ "type": "boolean",
307
+ "description": "Exact desired follow state"
308
+ }
309
+ },
310
+ "required": [
311
+ "user_id",
312
+ "sec_user_id",
313
+ "following"
314
+ ]
315
+ },
316
+ "webSession": {
317
+ "site": "tiktok",
318
+ "action": "relationships.follow.set",
319
+ "contractVersion": 1,
320
+ "timeoutMs": 60000,
321
+ "maxOutputBytes": 2097152
322
+ }
323
+ },
324
+ "comments.create": {
325
+ "description": "Capture-required contract reservation: publish one confirmed TikTok comment after an authorized live fixture proves current proof material and actor/root response binding.",
326
+ "risk": "R3",
327
+ "sideEffect": "Publishes one externally visible TikTok comment on the exact confirmed post.",
328
+ "idempotency": "local-at-most-once",
329
+ "dedupeWindowMs": 86400000,
330
+ "input": {
331
+ "properties": {
332
+ "post_id": {
333
+ "type": "string",
334
+ "description": "Exact decimal TikTok post ID",
335
+ "minLength": 1,
336
+ "maxLength": 32
337
+ },
338
+ "body": {
339
+ "type": "string",
340
+ "description": "Exact comment text",
341
+ "minLength": 1,
342
+ "maxLength": 100
343
+ }
344
+ },
345
+ "required": [
346
+ "post_id",
347
+ "body"
348
+ ]
349
+ },
350
+ "webSession": {
351
+ "site": "tiktok",
352
+ "action": "comments.create",
353
+ "contractVersion": 1,
354
+ "timeoutMs": 60000,
355
+ "maxOutputBytes": 2097152
356
+ }
357
+ },
358
+ "replies.create": {
359
+ "description": "Capture-required contract reservation: publish one confirmed TikTok reply after an authorized live fixture proves actor/root/parent response binding.",
360
+ "risk": "R3",
361
+ "sideEffect": "Publishes one externally visible TikTok reply to the exact confirmed comment.",
362
+ "idempotency": "local-at-most-once",
363
+ "dedupeWindowMs": 86400000,
364
+ "input": {
365
+ "properties": {
366
+ "post_id": {
367
+ "type": "string",
368
+ "description": "Exact decimal TikTok root post ID",
369
+ "minLength": 1,
370
+ "maxLength": 32
371
+ },
372
+ "comment_id": {
373
+ "type": "string",
374
+ "description": "Exact decimal parent TikTok comment ID",
375
+ "minLength": 1,
376
+ "maxLength": 32
377
+ },
378
+ "body": {
379
+ "type": "string",
380
+ "description": "Exact reply text",
381
+ "minLength": 1,
382
+ "maxLength": 100
383
+ }
384
+ },
385
+ "required": [
386
+ "post_id",
387
+ "comment_id",
388
+ "body"
389
+ ]
390
+ },
391
+ "webSession": {
392
+ "site": "tiktok",
393
+ "action": "replies.create",
394
+ "contractVersion": 1,
395
+ "timeoutMs": 60000,
396
+ "maxOutputBytes": 2097152
397
+ }
398
+ },
399
+ "messaging.send": {
400
+ "description": "Capture-required contract reservation: send one confirmed TikTok DM, optionally with one reviewed attachment, after target and delivery response binding are proven.",
401
+ "risk": "R3",
402
+ "sideEffect": "Sends one externally visible TikTok direct message to the exact confirmed user or conversation.",
403
+ "idempotency": "local-at-most-once",
404
+ "dedupeWindowMs": 86400000,
405
+ "input": {
406
+ "properties": {
407
+ "target_kind": {
408
+ "type": "string",
409
+ "description": "Send to an existing conversation or one exact TikTok user",
410
+ "enum": [
411
+ "conversation",
412
+ "user"
413
+ ]
414
+ },
415
+ "target_id": {
416
+ "type": "string",
417
+ "description": "Exact conversation or user identifier selected by target_kind",
418
+ "minLength": 1,
419
+ "maxLength": 512
420
+ },
421
+ "body": {
422
+ "type": "string",
423
+ "description": "Exact direct-message text",
424
+ "minLength": 1,
425
+ "maxLength": 1000
426
+ },
427
+ "media": {
428
+ "type": "file",
429
+ "description": "Optional reviewed TikTok DM video",
430
+ "maxBytes": 536870912,
431
+ "mediaTypes": [
432
+ "video/mp4"
433
+ ]
434
+ }
435
+ },
436
+ "required": [
437
+ "target_kind",
438
+ "target_id",
439
+ "body"
440
+ ]
441
+ },
442
+ "webSession": {
443
+ "site": "tiktok",
444
+ "action": "messaging.send",
445
+ "contractVersion": 1,
446
+ "timeoutMs": 600000,
447
+ "maxOutputBytes": 2097152
448
+ }
449
+ },
450
+ "posts.publish": {
451
+ "description": "Capture-required contract reservation: publish one confirmed native TikTok text post after actor, audience, and returned post binding are proven.",
452
+ "risk": "R3",
453
+ "sideEffect": "Publishes one externally visible TikTok text post with the exact confirmed content and audience.",
454
+ "idempotency": "local-at-most-once",
455
+ "dedupeWindowMs": 86400000,
456
+ "input": {
457
+ "properties": {
458
+ "body": {
459
+ "type": "string",
460
+ "description": "Exact native text-post content",
461
+ "minLength": 1,
462
+ "maxLength": 500
463
+ },
464
+ "audience": {
465
+ "type": "string",
466
+ "description": "Exact reviewed audience option",
467
+ "enum": [
468
+ "public",
469
+ "friends",
470
+ "private"
471
+ ]
472
+ }
473
+ },
474
+ "required": [
475
+ "body",
476
+ "audience"
477
+ ]
478
+ },
479
+ "webSession": {
480
+ "site": "tiktok",
481
+ "action": "posts.publish",
482
+ "contractVersion": 1,
483
+ "timeoutMs": 600000,
484
+ "maxOutputBytes": 2097152
485
+ }
486
+ },
487
+ "media.publish": {
488
+ "description": "Capture-required contract reservation: upload and publish one confirmed TikTok image or video only after byte transfer, declarations, audience, and returned post binding are proven.",
489
+ "risk": "R3",
490
+ "sideEffect": "Uploads and publishes one externally visible TikTok media post with the exact confirmed bytes, caption, settings, and audience.",
491
+ "idempotency": "local-at-most-once",
492
+ "dedupeWindowMs": 86400000,
493
+ "input": {
494
+ "properties": {
495
+ "media": {
496
+ "type": "file",
497
+ "description": "Exact reviewed image or video bytes",
498
+ "maxBytes": 1073741824,
499
+ "mediaTypes": [
500
+ "image/jpeg",
501
+ "image/png",
502
+ "video/mp4",
503
+ "video/quicktime"
504
+ ]
505
+ },
506
+ "caption": {
507
+ "type": "string",
508
+ "description": "Optional exact media caption",
509
+ "minLength": 1,
510
+ "maxLength": 500
511
+ },
512
+ "audience": {
513
+ "type": "string",
514
+ "description": "Exact reviewed audience option",
515
+ "enum": [
516
+ "public",
517
+ "friends",
518
+ "private"
519
+ ]
520
+ },
521
+ "allow_comments": {
522
+ "type": "boolean",
523
+ "description": "Exact desired comment permission"
524
+ },
525
+ "allow_duet": {
526
+ "type": "boolean",
527
+ "description": "Exact desired duet permission"
528
+ },
529
+ "allow_stitch": {
530
+ "type": "boolean",
531
+ "description": "Exact desired stitch permission"
532
+ }
533
+ },
534
+ "required": [
535
+ "media",
536
+ "audience",
537
+ "allow_comments",
538
+ "allow_duet",
539
+ "allow_stitch"
540
+ ]
541
+ },
542
+ "webSession": {
543
+ "site": "tiktok",
544
+ "action": "media.publish",
545
+ "contractVersion": 1,
546
+ "timeoutMs": 600000,
547
+ "maxOutputBytes": 2097152
548
+ }
549
+ },
550
+ "content.schedule": {
551
+ "description": "Capture-required contract reservation: schedule one confirmed TikTok media post after exact Studio upload, time-zone, audience, and schedule bindings are proven.",
552
+ "risk": "R3",
553
+ "sideEffect": "Uploads and schedules one TikTok media post for externally visible publication at the exact confirmed time.",
554
+ "idempotency": "local-at-most-once",
555
+ "dedupeWindowMs": 86400000,
556
+ "input": {
557
+ "properties": {
558
+ "media": {
559
+ "type": "file",
560
+ "description": "Exact reviewed image or video bytes",
561
+ "maxBytes": 1073741824,
562
+ "mediaTypes": [
563
+ "image/jpeg",
564
+ "image/png",
565
+ "video/mp4",
566
+ "video/quicktime"
567
+ ]
568
+ },
569
+ "caption": {
570
+ "type": "string",
571
+ "description": "Optional exact scheduled-post caption",
572
+ "minLength": 1,
573
+ "maxLength": 500
574
+ },
575
+ "scheduled_at": {
576
+ "type": "string",
577
+ "description": "Exact reviewed ISO 8601 publication timestamp with offset",
578
+ "minLength": 20,
579
+ "maxLength": 64
580
+ },
581
+ "audience": {
582
+ "type": "string",
583
+ "description": "Exact reviewed audience option",
584
+ "enum": [
585
+ "public",
586
+ "friends",
587
+ "private"
588
+ ]
589
+ }
590
+ },
591
+ "required": [
592
+ "media",
593
+ "scheduled_at",
594
+ "audience"
595
+ ]
596
+ },
597
+ "webSession": {
598
+ "site": "tiktok",
599
+ "action": "content.schedule",
600
+ "contractVersion": 1,
601
+ "timeoutMs": 600000,
602
+ "maxOutputBytes": 2097152
603
+ }
604
+ },
605
+ "content.share": {
606
+ "description": "Capture-required contract reservation: share one exact TikTok post to one confirmed internal recipient only after destination and delivery response binding are proven.",
607
+ "risk": "R3",
608
+ "sideEffect": "Sends one externally visible TikTok share to the exact confirmed user or conversation.",
609
+ "idempotency": "local-at-most-once",
610
+ "dedupeWindowMs": 86400000,
611
+ "input": {
612
+ "properties": {
613
+ "post_id": {
614
+ "type": "string",
615
+ "description": "Exact decimal TikTok post ID",
616
+ "minLength": 1,
617
+ "maxLength": 32
618
+ },
619
+ "target_kind": {
620
+ "type": "string",
621
+ "description": "Share to an existing conversation or one exact TikTok user",
622
+ "enum": [
623
+ "conversation",
624
+ "user"
625
+ ]
626
+ },
627
+ "target_id": {
628
+ "type": "string",
629
+ "description": "Exact conversation or user identifier selected by target_kind",
630
+ "minLength": 1,
631
+ "maxLength": 512
632
+ }
633
+ },
634
+ "required": [
635
+ "post_id",
636
+ "target_kind",
637
+ "target_id"
638
+ ]
639
+ },
640
+ "webSession": {
641
+ "site": "tiktok",
642
+ "action": "content.share",
643
+ "contractVersion": 1,
644
+ "timeoutMs": 60000,
645
+ "maxOutputBytes": 2097152
646
+ }
647
+ },
648
+ "posts.repost": {
649
+ "description": "Capture-required contract reservation: set one exact TikTok repost state only after the current upvote mutation, actor/target response binding, and independent readback are proven.",
650
+ "risk": "R3",
651
+ "sideEffect": "Creates or removes the authenticated viewer's externally visible repost of the exact confirmed TikTok post.",
652
+ "idempotency": "local-at-most-once",
653
+ "dedupeWindowMs": 86400000,
654
+ "input": {
655
+ "properties": {
656
+ "post_id": {
657
+ "type": "string",
658
+ "description": "Exact decimal TikTok post ID",
659
+ "minLength": 1,
660
+ "maxLength": 32
661
+ },
662
+ "reposted": {
663
+ "type": "boolean",
664
+ "description": "Exact desired repost state"
665
+ }
666
+ },
667
+ "required": [
668
+ "post_id",
669
+ "reposted"
670
+ ]
671
+ },
672
+ "webSession": {
673
+ "site": "tiktok",
674
+ "action": "posts.repost",
675
+ "contractVersion": 1,
676
+ "timeoutMs": 60000,
677
+ "maxOutputBytes": 2097152
678
+ }
679
+ }
680
+ }
681
+ }