@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,762 @@
1
+ {
2
+ "schemaVersion": 4,
3
+ "id": "tiktok-web",
4
+ "version": "1.3.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
+ "profiles.read": {
15
+ "description": "Observed contract: read exact follower, following, and lifetime-like counts for the viewer-bound current TikTok profile through the fixed first-party user-detail endpoint.",
16
+ "risk": "R1",
17
+ "sideEffect": "none",
18
+ "idempotency": "none",
19
+ "dedupeWindowMs": 0,
20
+ "input": {
21
+ "properties": {
22
+ "profile": {
23
+ "type": "string",
24
+ "description": "Exact TikTok handle without @",
25
+ "minLength": 2,
26
+ "maxLength": 24
27
+ }
28
+ },
29
+ "required": [
30
+ "profile"
31
+ ]
32
+ },
33
+ "webSession": {
34
+ "site": "tiktok",
35
+ "action": "profiles.read",
36
+ "contractVersion": 1,
37
+ "timeoutMs": 60000,
38
+ "maxOutputBytes": 2097152
39
+ }
40
+ },
41
+ "feeds.read": {
42
+ "description": "Observed contract: read one bounded signer-free TikTok For You response through the exact first-party recommendation endpoint after binding the current viewer.",
43
+ "risk": "R1",
44
+ "sideEffect": "none",
45
+ "idempotency": "none",
46
+ "dedupeWindowMs": 0,
47
+ "input": {
48
+ "properties": {
49
+ "feed": {
50
+ "type": "string",
51
+ "description": "Exact TikTok feed supported by the reviewed direct request",
52
+ "enum": [
53
+ "for-you"
54
+ ]
55
+ },
56
+ "limit": {
57
+ "type": "number",
58
+ "description": "Maximum complete response page to project",
59
+ "minimum": 1,
60
+ "maximum": 30
61
+ }
62
+ },
63
+ "required": [
64
+ "feed"
65
+ ]
66
+ },
67
+ "webSession": {
68
+ "site": "tiktok",
69
+ "action": "feeds.read",
70
+ "contractVersion": 1,
71
+ "timeoutMs": 60000,
72
+ "maxOutputBytes": 4194304
73
+ }
74
+ },
75
+ "posts.read": {
76
+ "description": "Capture-required contract reservation: read one exact TikTok post after current item-detail proof generation and a bounded target-bound response are reviewed.",
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": "posts.read",
97
+ "contractVersion": 1,
98
+ "timeoutMs": 60000,
99
+ "maxOutputBytes": 4194304
100
+ }
101
+ },
102
+ "media.read": {
103
+ "description": "Capture-required contract reservation: resolve one exact TikTok post's bounded media metadata without persisting expiring playback credentials.",
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
+ },
117
+ "required": [
118
+ "post_id"
119
+ ]
120
+ },
121
+ "webSession": {
122
+ "site": "tiktok",
123
+ "action": "media.read",
124
+ "contractVersion": 1,
125
+ "timeoutMs": 60000,
126
+ "maxOutputBytes": 4194304
127
+ }
128
+ },
129
+ "comments.read": {
130
+ "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.",
131
+ "risk": "R1",
132
+ "sideEffect": "none",
133
+ "idempotency": "none",
134
+ "dedupeWindowMs": 0,
135
+ "input": {
136
+ "properties": {
137
+ "post_id": {
138
+ "type": "string",
139
+ "description": "Exact decimal TikTok post ID",
140
+ "minLength": 1,
141
+ "maxLength": 32
142
+ },
143
+ "cursor": {
144
+ "type": "number",
145
+ "description": "Decimal cursor returned by the preceding comment page",
146
+ "minimum": 0,
147
+ "maximum": 9007199254740991
148
+ },
149
+ "limit": {
150
+ "type": "number",
151
+ "description": "Maximum complete comment response page to project",
152
+ "minimum": 1,
153
+ "maximum": 50
154
+ }
155
+ },
156
+ "required": [
157
+ "post_id"
158
+ ]
159
+ },
160
+ "webSession": {
161
+ "site": "tiktok",
162
+ "action": "comments.read",
163
+ "contractVersion": 1,
164
+ "timeoutMs": 60000,
165
+ "maxOutputBytes": 4194304
166
+ }
167
+ },
168
+ "messaging.list": {
169
+ "description": "Capture-required contract reservation: list one TikTok inbox folder without read receipts, presence, or acknowledgement side effects.",
170
+ "risk": "R1",
171
+ "sideEffect": "none",
172
+ "idempotency": "none",
173
+ "dedupeWindowMs": 0,
174
+ "input": {
175
+ "properties": {
176
+ "folder": {
177
+ "type": "string",
178
+ "description": "Exact TikTok inbox folder",
179
+ "enum": [
180
+ "inbox",
181
+ "requests"
182
+ ]
183
+ },
184
+ "cursor": {
185
+ "type": "string",
186
+ "description": "Opaque cursor returned by the preceding inbox page",
187
+ "minLength": 1,
188
+ "maxLength": 4096
189
+ },
190
+ "limit": {
191
+ "type": "number",
192
+ "description": "Maximum conversations to project",
193
+ "minimum": 1,
194
+ "maximum": 100
195
+ }
196
+ },
197
+ "required": [
198
+ "folder"
199
+ ]
200
+ },
201
+ "webSession": {
202
+ "site": "tiktok",
203
+ "action": "messaging.list",
204
+ "contractVersion": 1,
205
+ "timeoutMs": 60000,
206
+ "maxOutputBytes": 4194304
207
+ }
208
+ },
209
+ "messaging.read": {
210
+ "description": "Capture-required contract reservation: read one exact TikTok conversation without read receipts, presence, or acknowledgement side effects.",
211
+ "risk": "R1",
212
+ "sideEffect": "none",
213
+ "idempotency": "none",
214
+ "dedupeWindowMs": 0,
215
+ "input": {
216
+ "properties": {
217
+ "conversation_id": {
218
+ "type": "string",
219
+ "description": "Exact opaque TikTok conversation ID returned by messaging.list",
220
+ "minLength": 1,
221
+ "maxLength": 512
222
+ },
223
+ "cursor": {
224
+ "type": "string",
225
+ "description": "Opaque cursor returned by the preceding conversation page",
226
+ "minLength": 1,
227
+ "maxLength": 4096
228
+ },
229
+ "limit": {
230
+ "type": "number",
231
+ "description": "Maximum messages to project",
232
+ "minimum": 1,
233
+ "maximum": 100
234
+ }
235
+ },
236
+ "required": [
237
+ "conversation_id"
238
+ ]
239
+ },
240
+ "webSession": {
241
+ "site": "tiktok",
242
+ "action": "messaging.read",
243
+ "contractVersion": 1,
244
+ "timeoutMs": 60000,
245
+ "maxOutputBytes": 4194304
246
+ }
247
+ },
248
+ "likes.set": {
249
+ "description": "Capture-required contract reservation: set one exact TikTok like state only after current csrf/proof material, target binding, and independent readback are proven.",
250
+ "risk": "R2",
251
+ "sideEffect": "Sets or clears the authenticated viewer's like on the exact confirmed TikTok post.",
252
+ "idempotency": "local-at-most-once",
253
+ "dedupeWindowMs": 86400000,
254
+ "input": {
255
+ "properties": {
256
+ "post_id": {
257
+ "type": "string",
258
+ "description": "Exact decimal TikTok post ID",
259
+ "minLength": 1,
260
+ "maxLength": 32
261
+ },
262
+ "liked": {
263
+ "type": "boolean",
264
+ "description": "Exact desired like state"
265
+ }
266
+ },
267
+ "required": [
268
+ "post_id",
269
+ "liked"
270
+ ]
271
+ },
272
+ "webSession": {
273
+ "site": "tiktok",
274
+ "action": "likes.set",
275
+ "contractVersion": 1,
276
+ "timeoutMs": 60000,
277
+ "maxOutputBytes": 2097152
278
+ }
279
+ },
280
+ "content.save": {
281
+ "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.",
282
+ "risk": "R2",
283
+ "sideEffect": "Saves or removes the exact confirmed TikTok post in the authenticated viewer's collection.",
284
+ "idempotency": "local-at-most-once",
285
+ "dedupeWindowMs": 86400000,
286
+ "input": {
287
+ "properties": {
288
+ "post_id": {
289
+ "type": "string",
290
+ "description": "Exact decimal TikTok post ID",
291
+ "minLength": 1,
292
+ "maxLength": 32
293
+ },
294
+ "saved": {
295
+ "type": "boolean",
296
+ "description": "Exact desired saved state"
297
+ }
298
+ },
299
+ "required": [
300
+ "post_id",
301
+ "saved"
302
+ ]
303
+ },
304
+ "webSession": {
305
+ "site": "tiktok",
306
+ "action": "content.save",
307
+ "contractVersion": 1,
308
+ "timeoutMs": 60000,
309
+ "maxOutputBytes": 2097152
310
+ }
311
+ },
312
+ "content.delete": {
313
+ "description": "Capture-required contract reservation: move one exact authored TikTok post to the recycle bin only after current detail, exact recyclable permission, accepted mutation, actor/caption binding, and independently absent readback are proven.",
314
+ "risk": "R3",
315
+ "sideEffect": "Moves the exact confirmed authored TikTok post to the provider recycle bin; this contract does not perform a normal or permanent deletion.",
316
+ "idempotency": "local-at-most-once",
317
+ "dedupeWindowMs": 86400000,
318
+ "input": {
319
+ "properties": {
320
+ "post_id": {
321
+ "type": "string",
322
+ "description": "Exact decimal authored TikTok post ID",
323
+ "minLength": 1,
324
+ "maxLength": 32
325
+ },
326
+ "expected_caption": {
327
+ "type": "string",
328
+ "description": "Exact current caption re-confirmed before deletion",
329
+ "minLength": 1,
330
+ "maxLength": 500
331
+ }
332
+ },
333
+ "required": [
334
+ "post_id",
335
+ "expected_caption"
336
+ ]
337
+ },
338
+ "webSession": {
339
+ "site": "tiktok",
340
+ "action": "content.delete",
341
+ "contractVersion": 1,
342
+ "timeoutMs": 60000,
343
+ "maxOutputBytes": 2097152
344
+ }
345
+ },
346
+ "relationships.follow.set": {
347
+ "description": "Capture-required contract reservation: set one exact TikTok follow state only after the current AB-selected mutation and independent relationship readback are proven.",
348
+ "risk": "R2",
349
+ "sideEffect": "Follows or unfollows the exact confirmed TikTok account as the authenticated viewer.",
350
+ "idempotency": "local-at-most-once",
351
+ "dedupeWindowMs": 86400000,
352
+ "input": {
353
+ "properties": {
354
+ "user_id": {
355
+ "type": "string",
356
+ "description": "Exact decimal target TikTok user ID",
357
+ "minLength": 1,
358
+ "maxLength": 32
359
+ },
360
+ "sec_user_id": {
361
+ "type": "string",
362
+ "description": "Exact target TikTok secUid paired with user_id",
363
+ "minLength": 16,
364
+ "maxLength": 256
365
+ },
366
+ "following": {
367
+ "type": "boolean",
368
+ "description": "Exact desired follow state"
369
+ }
370
+ },
371
+ "required": [
372
+ "user_id",
373
+ "sec_user_id",
374
+ "following"
375
+ ]
376
+ },
377
+ "webSession": {
378
+ "site": "tiktok",
379
+ "action": "relationships.follow.set",
380
+ "contractVersion": 1,
381
+ "timeoutMs": 60000,
382
+ "maxOutputBytes": 2097152
383
+ }
384
+ },
385
+ "comments.create": {
386
+ "description": "Capture-required contract reservation: publish one confirmed TikTok comment after an authorized live fixture proves current proof material and actor/root response binding.",
387
+ "risk": "R3",
388
+ "sideEffect": "Publishes one externally visible TikTok comment on the exact confirmed post.",
389
+ "idempotency": "local-at-most-once",
390
+ "dedupeWindowMs": 86400000,
391
+ "input": {
392
+ "properties": {
393
+ "post_id": {
394
+ "type": "string",
395
+ "description": "Exact decimal TikTok post ID",
396
+ "minLength": 1,
397
+ "maxLength": 32
398
+ },
399
+ "body": {
400
+ "type": "string",
401
+ "description": "Exact comment text",
402
+ "minLength": 1,
403
+ "maxLength": 100
404
+ }
405
+ },
406
+ "required": [
407
+ "post_id",
408
+ "body"
409
+ ]
410
+ },
411
+ "webSession": {
412
+ "site": "tiktok",
413
+ "action": "comments.create",
414
+ "contractVersion": 1,
415
+ "timeoutMs": 60000,
416
+ "maxOutputBytes": 2097152
417
+ }
418
+ },
419
+ "replies.create": {
420
+ "description": "Capture-required contract reservation: publish one confirmed TikTok reply after an authorized live fixture proves actor/root/parent response binding.",
421
+ "risk": "R3",
422
+ "sideEffect": "Publishes one externally visible TikTok reply to the exact confirmed comment.",
423
+ "idempotency": "local-at-most-once",
424
+ "dedupeWindowMs": 86400000,
425
+ "input": {
426
+ "properties": {
427
+ "post_id": {
428
+ "type": "string",
429
+ "description": "Exact decimal TikTok root post ID",
430
+ "minLength": 1,
431
+ "maxLength": 32
432
+ },
433
+ "comment_id": {
434
+ "type": "string",
435
+ "description": "Exact decimal parent TikTok comment ID",
436
+ "minLength": 1,
437
+ "maxLength": 32
438
+ },
439
+ "body": {
440
+ "type": "string",
441
+ "description": "Exact reply text",
442
+ "minLength": 1,
443
+ "maxLength": 100
444
+ }
445
+ },
446
+ "required": [
447
+ "post_id",
448
+ "comment_id",
449
+ "body"
450
+ ]
451
+ },
452
+ "webSession": {
453
+ "site": "tiktok",
454
+ "action": "replies.create",
455
+ "contractVersion": 1,
456
+ "timeoutMs": 60000,
457
+ "maxOutputBytes": 2097152
458
+ }
459
+ },
460
+ "messaging.send": {
461
+ "description": "Capture-required contract reservation: send one confirmed TikTok DM, optionally with one reviewed attachment, after target and delivery response binding are proven.",
462
+ "risk": "R3",
463
+ "sideEffect": "Sends one externally visible TikTok direct message to the exact confirmed user or conversation.",
464
+ "idempotency": "local-at-most-once",
465
+ "dedupeWindowMs": 86400000,
466
+ "input": {
467
+ "properties": {
468
+ "target_kind": {
469
+ "type": "string",
470
+ "description": "Send to an existing conversation or one exact TikTok user",
471
+ "enum": [
472
+ "conversation",
473
+ "user"
474
+ ]
475
+ },
476
+ "target_id": {
477
+ "type": "string",
478
+ "description": "Exact conversation or user identifier selected by target_kind",
479
+ "minLength": 1,
480
+ "maxLength": 512
481
+ },
482
+ "body": {
483
+ "type": "string",
484
+ "description": "Exact direct-message text",
485
+ "minLength": 1,
486
+ "maxLength": 1000
487
+ },
488
+ "media": {
489
+ "type": "file",
490
+ "description": "Optional reviewed TikTok DM video",
491
+ "maxBytes": 536870912,
492
+ "mediaTypes": [
493
+ "video/mp4"
494
+ ]
495
+ }
496
+ },
497
+ "required": [
498
+ "target_kind",
499
+ "target_id",
500
+ "body"
501
+ ]
502
+ },
503
+ "webSession": {
504
+ "site": "tiktok",
505
+ "action": "messaging.send",
506
+ "contractVersion": 1,
507
+ "timeoutMs": 600000,
508
+ "maxOutputBytes": 2097152
509
+ }
510
+ },
511
+ "posts.publish": {
512
+ "description": "Capture-required contract reservation: publish one confirmed native TikTok text post after actor, audience, and returned post binding are proven.",
513
+ "risk": "R3",
514
+ "sideEffect": "Publishes one externally visible TikTok text post with the exact confirmed content and audience.",
515
+ "idempotency": "local-at-most-once",
516
+ "dedupeWindowMs": 86400000,
517
+ "input": {
518
+ "properties": {
519
+ "body": {
520
+ "type": "string",
521
+ "description": "Exact native text-post content",
522
+ "minLength": 1,
523
+ "maxLength": 500
524
+ },
525
+ "audience": {
526
+ "type": "string",
527
+ "description": "Exact reviewed audience option",
528
+ "enum": [
529
+ "public",
530
+ "friends",
531
+ "private"
532
+ ]
533
+ }
534
+ },
535
+ "required": [
536
+ "body",
537
+ "audience"
538
+ ]
539
+ },
540
+ "webSession": {
541
+ "site": "tiktok",
542
+ "action": "posts.publish",
543
+ "contractVersion": 1,
544
+ "timeoutMs": 600000,
545
+ "maxOutputBytes": 2097152
546
+ }
547
+ },
548
+ "media.publish": {
549
+ "description": "Capture-required contract reservation: upload and publish one strictly materialized MP4 through the first-party Studio upload, multipart transfer, commit, project publish, and status families only after signing, authenticated response, actor, and independent post-readback contracts are captured.",
550
+ "risk": "R3",
551
+ "sideEffect": "Uploads and publishes one externally visible TikTok media post with the exact confirmed bytes, caption, settings, and audience.",
552
+ "idempotency": "local-at-most-once",
553
+ "dedupeWindowMs": 86400000,
554
+ "input": {
555
+ "properties": {
556
+ "media": {
557
+ "type": "file",
558
+ "description": "Exactly one stable plan-bound ISO BMFF MP4",
559
+ "maxBytes": 134217728,
560
+ "mediaTypes": [
561
+ "video/mp4"
562
+ ]
563
+ },
564
+ "caption": {
565
+ "type": "string",
566
+ "description": "Optional exact media caption",
567
+ "minLength": 1,
568
+ "maxLength": 500
569
+ },
570
+ "audience": {
571
+ "type": "string",
572
+ "description": "Exact reviewed audience option",
573
+ "enum": [
574
+ "public",
575
+ "friends",
576
+ "private"
577
+ ]
578
+ },
579
+ "allow_comments": {
580
+ "type": "boolean",
581
+ "description": "Exact desired comment permission"
582
+ },
583
+ "allow_duet": {
584
+ "type": "boolean",
585
+ "description": "Exact desired duet permission"
586
+ },
587
+ "allow_stitch": {
588
+ "type": "boolean",
589
+ "description": "Exact desired stitch permission"
590
+ },
591
+ "allow_content_reuse": {
592
+ "type": "boolean",
593
+ "description": "Exact desired content-reuse permission"
594
+ },
595
+ "allow_ai_remix": {
596
+ "type": "boolean",
597
+ "description": "Exact desired AI-remix permission"
598
+ },
599
+ "contains_synthetic_media": {
600
+ "type": "boolean",
601
+ "description": "Explicit creator declaration for AI-generated or significantly AI-edited content"
602
+ },
603
+ "commercial_content": {
604
+ "type": "string",
605
+ "description": "Explicit conservative commercial-content declaration supported by this narrow reservation",
606
+ "enum": [
607
+ "none"
608
+ ]
609
+ }
610
+ },
611
+ "required": [
612
+ "media",
613
+ "audience",
614
+ "allow_comments",
615
+ "allow_duet",
616
+ "allow_stitch",
617
+ "allow_content_reuse",
618
+ "allow_ai_remix",
619
+ "contains_synthetic_media",
620
+ "commercial_content"
621
+ ]
622
+ },
623
+ "webSession": {
624
+ "site": "tiktok",
625
+ "action": "media.publish",
626
+ "contractVersion": 2,
627
+ "timeoutMs": 600000,
628
+ "maxOutputBytes": 2097152
629
+ }
630
+ },
631
+ "content.schedule": {
632
+ "description": "Capture-required contract reservation: schedule one confirmed TikTok media post after exact Studio upload, time-zone, audience, and schedule bindings are proven.",
633
+ "risk": "R3",
634
+ "sideEffect": "Uploads and schedules one TikTok media post for externally visible publication at the exact confirmed time.",
635
+ "idempotency": "local-at-most-once",
636
+ "dedupeWindowMs": 86400000,
637
+ "input": {
638
+ "properties": {
639
+ "media": {
640
+ "type": "file",
641
+ "description": "Exact reviewed image or video bytes",
642
+ "maxBytes": 1073741824,
643
+ "mediaTypes": [
644
+ "image/jpeg",
645
+ "image/png",
646
+ "video/mp4",
647
+ "video/quicktime"
648
+ ]
649
+ },
650
+ "caption": {
651
+ "type": "string",
652
+ "description": "Optional exact scheduled-post caption",
653
+ "minLength": 1,
654
+ "maxLength": 500
655
+ },
656
+ "scheduled_at": {
657
+ "type": "string",
658
+ "description": "Exact reviewed ISO 8601 publication timestamp with offset",
659
+ "minLength": 20,
660
+ "maxLength": 64
661
+ },
662
+ "audience": {
663
+ "type": "string",
664
+ "description": "Exact reviewed audience option",
665
+ "enum": [
666
+ "public",
667
+ "friends",
668
+ "private"
669
+ ]
670
+ }
671
+ },
672
+ "required": [
673
+ "media",
674
+ "scheduled_at",
675
+ "audience"
676
+ ]
677
+ },
678
+ "webSession": {
679
+ "site": "tiktok",
680
+ "action": "content.schedule",
681
+ "contractVersion": 1,
682
+ "timeoutMs": 600000,
683
+ "maxOutputBytes": 2097152
684
+ }
685
+ },
686
+ "content.share": {
687
+ "description": "Capture-required contract reservation: share one exact TikTok post to one confirmed internal recipient only after destination and delivery response binding are proven.",
688
+ "risk": "R3",
689
+ "sideEffect": "Sends one externally visible TikTok share to the exact confirmed user or conversation.",
690
+ "idempotency": "local-at-most-once",
691
+ "dedupeWindowMs": 86400000,
692
+ "input": {
693
+ "properties": {
694
+ "post_id": {
695
+ "type": "string",
696
+ "description": "Exact decimal TikTok post ID",
697
+ "minLength": 1,
698
+ "maxLength": 32
699
+ },
700
+ "target_kind": {
701
+ "type": "string",
702
+ "description": "Share to an existing conversation or one exact TikTok user",
703
+ "enum": [
704
+ "conversation",
705
+ "user"
706
+ ]
707
+ },
708
+ "target_id": {
709
+ "type": "string",
710
+ "description": "Exact conversation or user identifier selected by target_kind",
711
+ "minLength": 1,
712
+ "maxLength": 512
713
+ }
714
+ },
715
+ "required": [
716
+ "post_id",
717
+ "target_kind",
718
+ "target_id"
719
+ ]
720
+ },
721
+ "webSession": {
722
+ "site": "tiktok",
723
+ "action": "content.share",
724
+ "contractVersion": 1,
725
+ "timeoutMs": 60000,
726
+ "maxOutputBytes": 2097152
727
+ }
728
+ },
729
+ "posts.repost": {
730
+ "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.",
731
+ "risk": "R3",
732
+ "sideEffect": "Creates or removes the authenticated viewer's externally visible repost of the exact confirmed TikTok post.",
733
+ "idempotency": "local-at-most-once",
734
+ "dedupeWindowMs": 86400000,
735
+ "input": {
736
+ "properties": {
737
+ "post_id": {
738
+ "type": "string",
739
+ "description": "Exact decimal TikTok post ID",
740
+ "minLength": 1,
741
+ "maxLength": 32
742
+ },
743
+ "reposted": {
744
+ "type": "boolean",
745
+ "description": "Exact desired repost state"
746
+ }
747
+ },
748
+ "required": [
749
+ "post_id",
750
+ "reposted"
751
+ ]
752
+ },
753
+ "webSession": {
754
+ "site": "tiktok",
755
+ "action": "posts.repost",
756
+ "contractVersion": 1,
757
+ "timeoutMs": 60000,
758
+ "maxOutputBytes": 2097152
759
+ }
760
+ }
761
+ }
762
+ }