@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,561 @@
1
+ {
2
+ "schemaVersion": 4,
3
+ "id": "youtube-web",
4
+ "version": "1.4.0",
5
+ "displayName": "YouTube (Authenticated Web API)",
6
+ "surfaceId": "youtube",
7
+ "origins": [
8
+ "https://www.youtube.com"
9
+ ],
10
+ "browserDomains": [
11
+ "www.youtube.com"
12
+ ],
13
+ "operations": {
14
+ "profiles.read": {
15
+ "description": "Observed contract: resolve one exact YouTube channel and project exact subscriber, video, and lifetime-view counts from its target-bound first-party channel response; rounded text remains unavailable.",
16
+ "risk": "R1",
17
+ "sideEffect": "none",
18
+ "idempotency": "none",
19
+ "dedupeWindowMs": 0,
20
+ "input": {
21
+ "properties": {
22
+ "profile": {
23
+ "type": "string",
24
+ "description": "Exact @handle or canonical YouTube channel URL",
25
+ "minLength": 2,
26
+ "maxLength": 2048
27
+ }
28
+ },
29
+ "required": [
30
+ "profile"
31
+ ]
32
+ },
33
+ "webSession": {
34
+ "site": "youtube",
35
+ "action": "profiles.read",
36
+ "contractVersion": 1,
37
+ "timeoutMs": 60000,
38
+ "maxOutputBytes": 4194304
39
+ }
40
+ },
41
+ "feeds.read": {
42
+ "description": "Observed contract: read one bounded signed-in YouTube Home, Subscriptions, Library, History, Playlists, Watch Later, or Liked Videos page through the fixed first-party Innertube browse endpoint.",
43
+ "risk": "R1",
44
+ "sideEffect": "none",
45
+ "idempotency": "none",
46
+ "dedupeWindowMs": 0,
47
+ "input": {
48
+ "properties": {
49
+ "feed": {
50
+ "type": "string",
51
+ "description": "Exact reviewed YouTube feed",
52
+ "enum": [
53
+ "home",
54
+ "subscriptions",
55
+ "library",
56
+ "history",
57
+ "playlists",
58
+ "watch-later",
59
+ "liked"
60
+ ]
61
+ },
62
+ "limit": {
63
+ "type": "number",
64
+ "description": "Maximum projected feed items",
65
+ "minimum": 1,
66
+ "maximum": 100
67
+ }
68
+ },
69
+ "required": [
70
+ "feed"
71
+ ]
72
+ },
73
+ "webSession": {
74
+ "site": "youtube",
75
+ "action": "feeds.read",
76
+ "contractVersion": 1,
77
+ "timeoutMs": 60000,
78
+ "maxOutputBytes": 4194304
79
+ }
80
+ },
81
+ "media.read": {
82
+ "description": "Observed contract: read bounded metadata for one exact YouTube video through the fixed first-party Innertube player endpoint without exposing playback URLs or session material.",
83
+ "risk": "R1",
84
+ "sideEffect": "none",
85
+ "idempotency": "none",
86
+ "dedupeWindowMs": 0,
87
+ "input": {
88
+ "properties": {
89
+ "video_id": {
90
+ "type": "string",
91
+ "description": "Exact 11-character YouTube video ID",
92
+ "minLength": 11,
93
+ "maxLength": 11
94
+ }
95
+ },
96
+ "required": [
97
+ "video_id"
98
+ ]
99
+ },
100
+ "webSession": {
101
+ "site": "youtube",
102
+ "action": "media.read",
103
+ "contractVersion": 1,
104
+ "timeoutMs": 60000,
105
+ "maxOutputBytes": 4194304
106
+ }
107
+ },
108
+ "posts.read": {
109
+ "description": "Observed contract: read one exact YouTube Community post through the fixed first-party Innertube browse endpoint with a bounded text and attachment-kind projection.",
110
+ "risk": "R1",
111
+ "sideEffect": "none",
112
+ "idempotency": "none",
113
+ "dedupeWindowMs": 0,
114
+ "input": {
115
+ "properties": {
116
+ "post_id": {
117
+ "type": "string",
118
+ "description": "Exact YouTube Community post ID",
119
+ "minLength": 10,
120
+ "maxLength": 256
121
+ }
122
+ },
123
+ "required": [
124
+ "post_id"
125
+ ]
126
+ },
127
+ "webSession": {
128
+ "site": "youtube",
129
+ "action": "posts.read",
130
+ "contractVersion": 1,
131
+ "timeoutMs": 60000,
132
+ "maxOutputBytes": 4194304
133
+ }
134
+ },
135
+ "comments.read": {
136
+ "description": "Observed contract: read one bounded YouTube video-comment page through the fixed acknowledgement-free Innertube next endpoint after binding the exact video target.",
137
+ "risk": "R1",
138
+ "sideEffect": "none",
139
+ "idempotency": "none",
140
+ "dedupeWindowMs": 0,
141
+ "input": {
142
+ "properties": {
143
+ "video_id": {
144
+ "type": "string",
145
+ "description": "Exact 11-character YouTube video ID",
146
+ "minLength": 11,
147
+ "maxLength": 11
148
+ },
149
+ "limit": {
150
+ "type": "number",
151
+ "description": "Maximum projected comments",
152
+ "minimum": 1,
153
+ "maximum": 100
154
+ }
155
+ },
156
+ "required": [
157
+ "video_id"
158
+ ]
159
+ },
160
+ "webSession": {
161
+ "site": "youtube",
162
+ "action": "comments.read",
163
+ "contractVersion": 1,
164
+ "timeoutMs": 60000,
165
+ "maxOutputBytes": 4194304
166
+ }
167
+ },
168
+ "likes.set": {
169
+ "description": "Capture-required contract reservation: the fixed like implementation and independent target readback are deterministic-test proven, but an authorized low-stakes live fixture is still required.",
170
+ "risk": "R2",
171
+ "sideEffect": "Sets or clears the authenticated YouTube account's like on the exact confirmed video.",
172
+ "idempotency": "local-at-most-once",
173
+ "dedupeWindowMs": 86400000,
174
+ "input": {
175
+ "properties": {
176
+ "video_id": {
177
+ "type": "string",
178
+ "description": "Exact 11-character YouTube video ID",
179
+ "minLength": 11,
180
+ "maxLength": 11
181
+ },
182
+ "liked": {
183
+ "type": "boolean",
184
+ "description": "Exact desired like state"
185
+ }
186
+ },
187
+ "required": [
188
+ "video_id",
189
+ "liked"
190
+ ]
191
+ },
192
+ "webSession": {
193
+ "site": "youtube",
194
+ "action": "likes.set",
195
+ "contractVersion": 1,
196
+ "timeoutMs": 60000,
197
+ "maxOutputBytes": 4194304
198
+ }
199
+ },
200
+ "content.save": {
201
+ "description": "Capture-required contract reservation: the fixed Watch Later playlist edit implementation and independent target readback are deterministic-test proven, but an authorized low-stakes live fixture is still required.",
202
+ "risk": "R2",
203
+ "sideEffect": "Adds or removes the exact confirmed YouTube video in the authenticated account's Watch Later playlist.",
204
+ "idempotency": "local-at-most-once",
205
+ "dedupeWindowMs": 86400000,
206
+ "input": {
207
+ "properties": {
208
+ "video_id": {
209
+ "type": "string",
210
+ "description": "Exact 11-character YouTube video ID",
211
+ "minLength": 11,
212
+ "maxLength": 11
213
+ },
214
+ "saved": {
215
+ "type": "boolean",
216
+ "description": "Exact desired Watch Later state"
217
+ }
218
+ },
219
+ "required": [
220
+ "video_id",
221
+ "saved"
222
+ ]
223
+ },
224
+ "webSession": {
225
+ "site": "youtube",
226
+ "action": "content.save",
227
+ "contractVersion": 1,
228
+ "timeoutMs": 60000,
229
+ "maxOutputBytes": 4194304
230
+ }
231
+ },
232
+ "relationships.follow.set": {
233
+ "description": "Capture-required contract reservation: the fixed subscription implementation and independent target readback are deterministic-test proven, but an authorized low-stakes live fixture is still required.",
234
+ "risk": "R2",
235
+ "sideEffect": "Subscribes or unsubscribes the authenticated YouTube account from the exact confirmed channel.",
236
+ "idempotency": "local-at-most-once",
237
+ "dedupeWindowMs": 86400000,
238
+ "input": {
239
+ "properties": {
240
+ "channel_id": {
241
+ "type": "string",
242
+ "description": "Exact 24-character YouTube channel ID beginning with UC",
243
+ "minLength": 24,
244
+ "maxLength": 24
245
+ },
246
+ "followed": {
247
+ "type": "boolean",
248
+ "description": "Exact desired subscription state"
249
+ }
250
+ },
251
+ "required": [
252
+ "channel_id",
253
+ "followed"
254
+ ]
255
+ },
256
+ "webSession": {
257
+ "site": "youtube",
258
+ "action": "relationships.follow.set",
259
+ "contractVersion": 1,
260
+ "timeoutMs": 60000,
261
+ "maxOutputBytes": 4194304
262
+ }
263
+ },
264
+ "comments.create": {
265
+ "description": "Capture-required contract reservation: create one confirmed YouTube top-level comment only after its current mutation, actor/target response binding, and authorized live fixture are reviewed.",
266
+ "risk": "R3",
267
+ "sideEffect": "Publishes one externally visible comment on the exact confirmed YouTube video.",
268
+ "idempotency": "local-at-most-once",
269
+ "dedupeWindowMs": 86400000,
270
+ "input": {
271
+ "properties": {
272
+ "video_id": {
273
+ "type": "string",
274
+ "description": "Exact 11-character YouTube video ID",
275
+ "minLength": 11,
276
+ "maxLength": 11
277
+ },
278
+ "body": {
279
+ "type": "string",
280
+ "description": "Exact comment body",
281
+ "minLength": 1,
282
+ "maxLength": 500
283
+ }
284
+ },
285
+ "required": [
286
+ "video_id",
287
+ "body"
288
+ ]
289
+ },
290
+ "webSession": {
291
+ "site": "youtube",
292
+ "action": "comments.create",
293
+ "contractVersion": 1,
294
+ "timeoutMs": 60000,
295
+ "maxOutputBytes": 4194304
296
+ }
297
+ },
298
+ "replies.create": {
299
+ "description": "Capture-required contract reservation: create one confirmed YouTube comment reply only after its current mutation, actor/parent response binding, and authorized live fixture are reviewed.",
300
+ "risk": "R3",
301
+ "sideEffect": "Publishes one externally visible reply to the exact confirmed YouTube comment.",
302
+ "idempotency": "local-at-most-once",
303
+ "dedupeWindowMs": 86400000,
304
+ "input": {
305
+ "properties": {
306
+ "comment_id": {
307
+ "type": "string",
308
+ "description": "Exact parent YouTube comment ID",
309
+ "minLength": 8,
310
+ "maxLength": 256
311
+ },
312
+ "body": {
313
+ "type": "string",
314
+ "description": "Exact reply body",
315
+ "minLength": 1,
316
+ "maxLength": 500
317
+ }
318
+ },
319
+ "required": [
320
+ "comment_id",
321
+ "body"
322
+ ]
323
+ },
324
+ "webSession": {
325
+ "site": "youtube",
326
+ "action": "replies.create",
327
+ "contractVersion": 1,
328
+ "timeoutMs": 60000,
329
+ "maxOutputBytes": 4194304
330
+ }
331
+ },
332
+ "posts.publish": {
333
+ "description": "Capture-required contract reservation: publish one confirmed YouTube Community post only after text/image variants, actor binding, and an authorized live fixture are reviewed.",
334
+ "risk": "R3",
335
+ "sideEffect": "Publishes one externally visible YouTube Community post with the exact confirmed text and optional image.",
336
+ "idempotency": "local-at-most-once",
337
+ "dedupeWindowMs": 86400000,
338
+ "input": {
339
+ "properties": {
340
+ "body": {
341
+ "type": "string",
342
+ "description": "Exact Community post body",
343
+ "minLength": 1,
344
+ "maxLength": 500
345
+ },
346
+ "media": {
347
+ "type": "file",
348
+ "description": "Optional reviewed Community post image",
349
+ "maxBytes": 20971520,
350
+ "mediaTypes": [
351
+ "image/jpeg",
352
+ "image/png",
353
+ "image/webp"
354
+ ]
355
+ }
356
+ },
357
+ "required": [
358
+ "body"
359
+ ]
360
+ },
361
+ "webSession": {
362
+ "site": "youtube",
363
+ "action": "posts.publish",
364
+ "contractVersion": 1,
365
+ "timeoutMs": 600000,
366
+ "maxOutputBytes": 4194304
367
+ }
368
+ },
369
+ "media.publish": {
370
+ "description": "Capture-required contract reservation: the signed-in Studio attempt reached metadata responses but the selected MP4 remained at 0%; resumable initiation, byte-transfer acceptance, finalization, processing, and exact current-account readback remain unproved.",
371
+ "risk": "R3",
372
+ "sideEffect": "Uploads one YouTube video with the exact confirmed media, title, description, and reviewed audience settings.",
373
+ "idempotency": "local-at-most-once",
374
+ "dedupeWindowMs": 86400000,
375
+ "input": {
376
+ "properties": {
377
+ "title": {
378
+ "type": "string",
379
+ "description": "Exact video title",
380
+ "minLength": 1,
381
+ "maxLength": 90
382
+ },
383
+ "caption": {
384
+ "type": "string",
385
+ "description": "Optional exact video description",
386
+ "minLength": 1,
387
+ "maxLength": 1000
388
+ },
389
+ "media": {
390
+ "type": "file",
391
+ "description": "Exact plan-bound ISO BMFF MP4 video file",
392
+ "maxBytes": 134217728,
393
+ "mediaTypes": [
394
+ "video/mp4"
395
+ ]
396
+ },
397
+ "visibility": {
398
+ "type": "string",
399
+ "description": "Exact initial video visibility",
400
+ "enum": [
401
+ "private",
402
+ "unlisted",
403
+ "public"
404
+ ]
405
+ },
406
+ "made_for_kids": {
407
+ "type": "boolean",
408
+ "description": "Exact made-for-kids declaration"
409
+ },
410
+ "notify_subscribers": {
411
+ "type": "boolean",
412
+ "description": "Exact subscriber-notification choice"
413
+ },
414
+ "category_id": {
415
+ "type": "string",
416
+ "description": "Exact provider video-category ID",
417
+ "minLength": 1,
418
+ "maxLength": 3
419
+ },
420
+ "contains_synthetic_media": {
421
+ "type": "boolean",
422
+ "description": "Exact altered or synthetic-media disclosure"
423
+ },
424
+ "age_restricted": {
425
+ "type": "boolean",
426
+ "description": "Exact creator-selected age-restriction declaration"
427
+ }
428
+ },
429
+ "required": [
430
+ "title",
431
+ "media",
432
+ "visibility",
433
+ "made_for_kids",
434
+ "notify_subscribers",
435
+ "category_id",
436
+ "contains_synthetic_media",
437
+ "age_restricted"
438
+ ]
439
+ },
440
+ "webSession": {
441
+ "site": "youtube",
442
+ "action": "media.publish",
443
+ "contractVersion": 2,
444
+ "timeoutMs": 600000,
445
+ "maxOutputBytes": 4194304
446
+ }
447
+ },
448
+ "content.delete": {
449
+ "description": "Capture-required contract reservation: cleanup only discarded the stalled incomplete Studio draft; no uploaded-video authored pre-read, accepted video/delete response, or exact-target absence readback was observed.",
450
+ "risk": "R3",
451
+ "sideEffect": "Permanently deletes the exact confirmed YouTube video authored by the authenticated account.",
452
+ "idempotency": "local-at-most-once",
453
+ "dedupeWindowMs": 2592000000,
454
+ "input": {
455
+ "properties": {
456
+ "video_id": {
457
+ "type": "string",
458
+ "description": "Exact 11-character current-account YouTube video ID",
459
+ "minLength": 11,
460
+ "maxLength": 11
461
+ },
462
+ "expected_title": {
463
+ "type": "string",
464
+ "description": "Exact current video title used for pre-delete confirmation",
465
+ "minLength": 1,
466
+ "maxLength": 90
467
+ }
468
+ },
469
+ "required": [
470
+ "video_id",
471
+ "expected_title"
472
+ ]
473
+ },
474
+ "webSession": {
475
+ "site": "youtube",
476
+ "action": "content.delete",
477
+ "contractVersion": 1,
478
+ "timeoutMs": 60000,
479
+ "maxOutputBytes": 4194304
480
+ }
481
+ },
482
+ "content.edit": {
483
+ "description": "Capture-required contract reservation: edit one exact owned YouTube video, Community post, or comment only after each target-specific mutation and independent readback are reviewed.",
484
+ "risk": "R3",
485
+ "sideEffect": "Edits externally visible content owned by the authenticated YouTube account on the exact confirmed target.",
486
+ "idempotency": "local-at-most-once",
487
+ "dedupeWindowMs": 86400000,
488
+ "input": {
489
+ "properties": {
490
+ "target_kind": {
491
+ "type": "string",
492
+ "description": "Exact YouTube content kind",
493
+ "enum": [
494
+ "video",
495
+ "community-post",
496
+ "comment"
497
+ ]
498
+ },
499
+ "target_id": {
500
+ "type": "string",
501
+ "description": "Exact target identifier",
502
+ "minLength": 8,
503
+ "maxLength": 256
504
+ },
505
+ "body": {
506
+ "type": "string",
507
+ "description": "Exact replacement title, body, or comment text",
508
+ "minLength": 1,
509
+ "maxLength": 5000
510
+ }
511
+ },
512
+ "required": [
513
+ "target_kind",
514
+ "target_id",
515
+ "body"
516
+ ]
517
+ },
518
+ "webSession": {
519
+ "site": "youtube",
520
+ "action": "content.edit",
521
+ "contractVersion": 1,
522
+ "timeoutMs": 60000,
523
+ "maxOutputBytes": 4194304
524
+ }
525
+ },
526
+ "content.schedule": {
527
+ "description": "Capture-required contract reservation: schedule one owned YouTube video only after Studio visibility, timezone, audience, target binding, and independent readback are reviewed.",
528
+ "risk": "R3",
529
+ "sideEffect": "Schedules the exact confirmed owned YouTube video to become externally visible at the confirmed time.",
530
+ "idempotency": "local-at-most-once",
531
+ "dedupeWindowMs": 86400000,
532
+ "input": {
533
+ "properties": {
534
+ "video_id": {
535
+ "type": "string",
536
+ "description": "Exact 11-character owned YouTube video ID",
537
+ "minLength": 11,
538
+ "maxLength": 11
539
+ },
540
+ "publish_at": {
541
+ "type": "string",
542
+ "description": "Exact confirmed ISO-8601 publication instant",
543
+ "minLength": 20,
544
+ "maxLength": 40
545
+ }
546
+ },
547
+ "required": [
548
+ "video_id",
549
+ "publish_at"
550
+ ]
551
+ },
552
+ "webSession": {
553
+ "site": "youtube",
554
+ "action": "content.schedule",
555
+ "contractVersion": 1,
556
+ "timeoutMs": 60000,
557
+ "maxOutputBytes": 4194304
558
+ }
559
+ }
560
+ }
561
+ }