@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,604 @@
1
+ {
2
+ "schemaVersion": 4,
3
+ "id": "linkedin-web",
4
+ "version": "1.1.0",
5
+ "displayName": "LinkedIn (Authenticated Web API)",
6
+ "surfaceId": "linkedin",
7
+ "origins": [
8
+ "https://www.linkedin.com"
9
+ ],
10
+ "browserDomains": [
11
+ "www.linkedin.com"
12
+ ],
13
+ "operations": {
14
+ "feeds.read": {
15
+ "description": "Capture-required contract reservation: the LinkedIn home-feed query revision is known, but execution remains disabled until exact current variables and a bounded response projection are captured and reviewed.",
16
+ "risk": "R1",
17
+ "sideEffect": "none",
18
+ "idempotency": "none",
19
+ "dedupeWindowMs": 0,
20
+ "input": {
21
+ "properties": {
22
+ "feed": {
23
+ "type": "string",
24
+ "description": "Captured feed surface",
25
+ "enum": [
26
+ "home"
27
+ ]
28
+ },
29
+ "cursor": {
30
+ "type": "string",
31
+ "description": "Opaque cursor returned by the preceding page",
32
+ "minLength": 1,
33
+ "maxLength": 4096
34
+ },
35
+ "limit": {
36
+ "type": "number",
37
+ "description": "Maximum feed entries to project",
38
+ "minimum": 1,
39
+ "maximum": 100
40
+ }
41
+ },
42
+ "required": [
43
+ "feed"
44
+ ]
45
+ },
46
+ "webSession": {
47
+ "site": "linkedin",
48
+ "action": "feeds.read",
49
+ "contractVersion": 1,
50
+ "timeoutMs": 60000,
51
+ "maxOutputBytes": 4194304
52
+ }
53
+ },
54
+ "messaging.list": {
55
+ "description": "Observed contract: list one bounded LinkedIn inbox page through the current mailbox-bound registered query, with main, additional, requests, archived, spam, or all selected locally and no seen, presence, delivery, or badge request.",
56
+ "risk": "R1",
57
+ "sideEffect": "none",
58
+ "idempotency": "none",
59
+ "dedupeWindowMs": 0,
60
+ "input": {
61
+ "properties": {
62
+ "folder": {
63
+ "type": "string",
64
+ "description": "Exact LinkedIn inbox folder",
65
+ "enum": [
66
+ "focused",
67
+ "other",
68
+ "requests",
69
+ "archive",
70
+ "spam",
71
+ "all"
72
+ ]
73
+ },
74
+ "cursor": {
75
+ "type": "string",
76
+ "description": "Opaque cursor returned by the preceding page",
77
+ "minLength": 1,
78
+ "maxLength": 4096
79
+ },
80
+ "limit": {
81
+ "type": "number",
82
+ "description": "Maximum conversations to project",
83
+ "minimum": 1,
84
+ "maximum": 100
85
+ }
86
+ },
87
+ "required": [
88
+ "folder"
89
+ ]
90
+ },
91
+ "webSession": {
92
+ "site": "linkedin",
93
+ "action": "messaging.list",
94
+ "contractVersion": 1,
95
+ "timeoutMs": 60000,
96
+ "maxOutputBytes": 4194304
97
+ }
98
+ },
99
+ "messaging.read": {
100
+ "description": "Capture-required contract reservation: the LinkedIn message query revision is known, but execution remains disabled until exact current variables and acknowledgement-free response handling are captured and reviewed.",
101
+ "risk": "R1",
102
+ "sideEffect": "none",
103
+ "idempotency": "none",
104
+ "dedupeWindowMs": 0,
105
+ "input": {
106
+ "properties": {
107
+ "conversation_id": {
108
+ "type": "string",
109
+ "description": "Exact opaque conversation identifier returned by messaging.list",
110
+ "minLength": 1,
111
+ "maxLength": 512
112
+ },
113
+ "cursor": {
114
+ "type": "string",
115
+ "description": "Opaque cursor returned by the preceding page",
116
+ "minLength": 1,
117
+ "maxLength": 4096
118
+ },
119
+ "limit": {
120
+ "type": "number",
121
+ "description": "Maximum messages to project",
122
+ "minimum": 1,
123
+ "maximum": 100
124
+ }
125
+ },
126
+ "required": [
127
+ "conversation_id"
128
+ ]
129
+ },
130
+ "webSession": {
131
+ "site": "linkedin",
132
+ "action": "messaging.read",
133
+ "contractVersion": 1,
134
+ "timeoutMs": 60000,
135
+ "maxOutputBytes": 4194304
136
+ }
137
+ },
138
+ "messaging.send": {
139
+ "description": "Capture-required contract reservation: send one confirmed LinkedIn message, optionally with one reviewed attachment, only after createMessage request and response bindings are captured and reviewed.",
140
+ "risk": "R3",
141
+ "sideEffect": "Sends one externally visible LinkedIn message to the exact confirmed conversation.",
142
+ "idempotency": "local-at-most-once",
143
+ "dedupeWindowMs": 86400000,
144
+ "input": {
145
+ "properties": {
146
+ "conversation_id": {
147
+ "type": "string",
148
+ "description": "Exact opaque conversation identifier returned by messaging.list",
149
+ "minLength": 1,
150
+ "maxLength": 512
151
+ },
152
+ "body": {
153
+ "type": "string",
154
+ "description": "Exact message text",
155
+ "minLength": 1,
156
+ "maxLength": 8000
157
+ },
158
+ "media": {
159
+ "type": "file",
160
+ "description": "Optional reviewed image, video, or document attachment",
161
+ "maxBytes": 536870912,
162
+ "mediaTypes": [
163
+ "image/jpeg",
164
+ "image/png",
165
+ "image/gif",
166
+ "video/mp4",
167
+ "application/pdf",
168
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
169
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
170
+ ]
171
+ }
172
+ },
173
+ "required": [
174
+ "conversation_id",
175
+ "body"
176
+ ]
177
+ },
178
+ "webSession": {
179
+ "site": "linkedin",
180
+ "action": "messaging.send",
181
+ "contractVersion": 1,
182
+ "timeoutMs": 600000,
183
+ "maxOutputBytes": 2097152
184
+ }
185
+ },
186
+ "posts.read": {
187
+ "description": "Capture-required contract reservation: read one LinkedIn consumer-web post after its exact first-party post-detail query and bounded projection are captured and reviewed.",
188
+ "risk": "R1",
189
+ "sideEffect": "none",
190
+ "idempotency": "none",
191
+ "dedupeWindowMs": 0,
192
+ "input": {
193
+ "properties": {
194
+ "post_urn": {
195
+ "type": "string",
196
+ "description": "Exact LinkedIn share or UGC-post URN",
197
+ "minLength": 1,
198
+ "maxLength": 500
199
+ }
200
+ },
201
+ "required": [
202
+ "post_urn"
203
+ ]
204
+ },
205
+ "webSession": {
206
+ "site": "linkedin",
207
+ "action": "posts.read",
208
+ "contractVersion": 1,
209
+ "timeoutMs": 60000,
210
+ "maxOutputBytes": 2097152
211
+ }
212
+ },
213
+ "comments.read": {
214
+ "description": "Capture-required contract reservation: list one bounded page of comments for an exact LinkedIn post after the consumer-web collection request is captured and reviewed.",
215
+ "risk": "R1",
216
+ "sideEffect": "none",
217
+ "idempotency": "none",
218
+ "dedupeWindowMs": 0,
219
+ "input": {
220
+ "properties": {
221
+ "post_urn": {
222
+ "type": "string",
223
+ "description": "Exact LinkedIn share or UGC-post URN",
224
+ "minLength": 1,
225
+ "maxLength": 500
226
+ },
227
+ "cursor": {
228
+ "type": "string",
229
+ "description": "Opaque cursor returned by the preceding page",
230
+ "minLength": 1,
231
+ "maxLength": 4096
232
+ },
233
+ "limit": {
234
+ "type": "number",
235
+ "description": "Maximum comments to project",
236
+ "minimum": 1,
237
+ "maximum": 100
238
+ }
239
+ },
240
+ "required": [
241
+ "post_urn"
242
+ ]
243
+ },
244
+ "webSession": {
245
+ "site": "linkedin",
246
+ "action": "comments.read",
247
+ "contractVersion": 1,
248
+ "timeoutMs": 60000,
249
+ "maxOutputBytes": 4194304
250
+ }
251
+ },
252
+ "articles.read": {
253
+ "description": "Capture-required contract reservation: list LinkedIn first-party article records only after a fresh capture proves exact author, article identity, and paging response bindings.",
254
+ "risk": "R1",
255
+ "sideEffect": "none",
256
+ "idempotency": "none",
257
+ "dedupeWindowMs": 0,
258
+ "input": {
259
+ "properties": {
260
+ "author_urn": {
261
+ "type": "string",
262
+ "description": "Exact LinkedIn person or organization author URN",
263
+ "minLength": 1,
264
+ "maxLength": 500
265
+ },
266
+ "start": {
267
+ "type": "number",
268
+ "description": "Zero-based article offset",
269
+ "minimum": 0,
270
+ "maximum": 100000
271
+ },
272
+ "limit": {
273
+ "type": "number",
274
+ "description": "Maximum article records to project",
275
+ "minimum": 1,
276
+ "maximum": 100
277
+ }
278
+ },
279
+ "required": [
280
+ "author_urn"
281
+ ]
282
+ },
283
+ "webSession": {
284
+ "site": "linkedin",
285
+ "action": "articles.read",
286
+ "contractVersion": 1,
287
+ "timeoutMs": 60000,
288
+ "maxOutputBytes": 4194304
289
+ }
290
+ },
291
+ "posts.publish": {
292
+ "description": "Capture-required contract reservation: publish one confirmed LinkedIn post with optional reviewed media or link after each sharebox and upload request shape is captured and response-bound.",
293
+ "risk": "R3",
294
+ "sideEffect": "Publishes one externally visible LinkedIn post with the exact confirmed audience and content.",
295
+ "idempotency": "local-at-most-once",
296
+ "dedupeWindowMs": 86400000,
297
+ "input": {
298
+ "properties": {
299
+ "body": {
300
+ "type": "string",
301
+ "description": "Exact post commentary",
302
+ "minLength": 1,
303
+ "maxLength": 3000
304
+ },
305
+ "visibility": {
306
+ "type": "string",
307
+ "description": "Confirmed post audience",
308
+ "enum": [
309
+ "public",
310
+ "connections"
311
+ ]
312
+ },
313
+ "media": {
314
+ "type": "array",
315
+ "description": "Optional reviewed images, or one reviewed video or document",
316
+ "items": {
317
+ "type": "file",
318
+ "description": "One exact post attachment",
319
+ "maxBytes": 536870912,
320
+ "mediaTypes": [
321
+ "image/jpeg",
322
+ "image/png",
323
+ "image/gif",
324
+ "video/mp4",
325
+ "application/pdf",
326
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
327
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
328
+ ]
329
+ },
330
+ "minItems": 1,
331
+ "maxItems": 20
332
+ },
333
+ "media_title": {
334
+ "type": "string",
335
+ "description": "Optional document or video title",
336
+ "minLength": 1,
337
+ "maxLength": 200
338
+ },
339
+ "alt_text": {
340
+ "type": "string",
341
+ "description": "Optional image alternative text",
342
+ "minLength": 1,
343
+ "maxLength": 4000
344
+ },
345
+ "link_url": {
346
+ "type": "string",
347
+ "description": "Optional exact HTTPS link-card source",
348
+ "minLength": 1,
349
+ "maxLength": 8192
350
+ }
351
+ },
352
+ "required": [
353
+ "body",
354
+ "visibility"
355
+ ]
356
+ },
357
+ "webSession": {
358
+ "site": "linkedin",
359
+ "action": "posts.publish",
360
+ "contractVersion": 1,
361
+ "timeoutMs": 600000,
362
+ "maxOutputBytes": 2097152
363
+ }
364
+ },
365
+ "posts.repost": {
366
+ "description": "Capture-required contract reservation: create one confirmed LinkedIn repost after the exact repost mutation and returned post identity are captured and reviewed.",
367
+ "risk": "R3",
368
+ "sideEffect": "Creates one externally visible LinkedIn repost of the exact confirmed post.",
369
+ "idempotency": "local-at-most-once",
370
+ "dedupeWindowMs": 86400000,
371
+ "input": {
372
+ "properties": {
373
+ "post_urn": {
374
+ "type": "string",
375
+ "description": "Exact LinkedIn share or UGC-post URN to repost",
376
+ "minLength": 1,
377
+ "maxLength": 500
378
+ }
379
+ },
380
+ "required": [
381
+ "post_urn"
382
+ ]
383
+ },
384
+ "webSession": {
385
+ "site": "linkedin",
386
+ "action": "posts.repost",
387
+ "contractVersion": 1,
388
+ "timeoutMs": 60000,
389
+ "maxOutputBytes": 2097152
390
+ }
391
+ },
392
+ "posts.quote": {
393
+ "description": "Capture-required contract reservation: publish one confirmed LinkedIn quote repost after its exact mutation and returned post identity are captured and reviewed.",
394
+ "risk": "R3",
395
+ "sideEffect": "Publishes one externally visible LinkedIn quote repost with the exact confirmed commentary.",
396
+ "idempotency": "local-at-most-once",
397
+ "dedupeWindowMs": 86400000,
398
+ "input": {
399
+ "properties": {
400
+ "post_urn": {
401
+ "type": "string",
402
+ "description": "Exact LinkedIn share or UGC-post URN to quote",
403
+ "minLength": 1,
404
+ "maxLength": 500
405
+ },
406
+ "body": {
407
+ "type": "string",
408
+ "description": "Exact quote commentary",
409
+ "minLength": 1,
410
+ "maxLength": 3000
411
+ },
412
+ "visibility": {
413
+ "type": "string",
414
+ "description": "Confirmed quote-post audience",
415
+ "enum": [
416
+ "public",
417
+ "connections"
418
+ ]
419
+ }
420
+ },
421
+ "required": [
422
+ "post_urn",
423
+ "body",
424
+ "visibility"
425
+ ]
426
+ },
427
+ "webSession": {
428
+ "site": "linkedin",
429
+ "action": "posts.quote",
430
+ "contractVersion": 1,
431
+ "timeoutMs": 60000,
432
+ "maxOutputBytes": 2097152
433
+ }
434
+ },
435
+ "comments.create": {
436
+ "description": "Capture-required contract reservation: create one confirmed top-level LinkedIn comment after exact actor, post, and returned-comment bindings are captured and reviewed.",
437
+ "risk": "R3",
438
+ "sideEffect": "Publishes one externally visible comment on the exact confirmed LinkedIn post.",
439
+ "idempotency": "local-at-most-once",
440
+ "dedupeWindowMs": 86400000,
441
+ "input": {
442
+ "properties": {
443
+ "post_urn": {
444
+ "type": "string",
445
+ "description": "Exact LinkedIn share or UGC-post URN",
446
+ "minLength": 1,
447
+ "maxLength": 500
448
+ },
449
+ "body": {
450
+ "type": "string",
451
+ "description": "Exact comment text",
452
+ "minLength": 1,
453
+ "maxLength": 500
454
+ }
455
+ },
456
+ "required": [
457
+ "post_urn",
458
+ "body"
459
+ ]
460
+ },
461
+ "webSession": {
462
+ "site": "linkedin",
463
+ "action": "comments.create",
464
+ "contractVersion": 1,
465
+ "timeoutMs": 60000,
466
+ "maxOutputBytes": 2097152
467
+ }
468
+ },
469
+ "replies.create": {
470
+ "description": "Capture-required contract reservation: create one confirmed LinkedIn comment reply after exact actor, root, parent, and returned-reply bindings are captured and reviewed.",
471
+ "risk": "R3",
472
+ "sideEffect": "Publishes one externally visible reply to the exact confirmed LinkedIn comment.",
473
+ "idempotency": "local-at-most-once",
474
+ "dedupeWindowMs": 86400000,
475
+ "input": {
476
+ "properties": {
477
+ "post_urn": {
478
+ "type": "string",
479
+ "description": "Exact root LinkedIn share or UGC-post URN",
480
+ "minLength": 1,
481
+ "maxLength": 500
482
+ },
483
+ "comment_urn": {
484
+ "type": "string",
485
+ "description": "Exact parent comment URN",
486
+ "minLength": 1,
487
+ "maxLength": 1000
488
+ },
489
+ "body": {
490
+ "type": "string",
491
+ "description": "Exact reply text",
492
+ "minLength": 1,
493
+ "maxLength": 500
494
+ }
495
+ },
496
+ "required": [
497
+ "post_urn",
498
+ "comment_urn",
499
+ "body"
500
+ ]
501
+ },
502
+ "webSession": {
503
+ "site": "linkedin",
504
+ "action": "replies.create",
505
+ "contractVersion": 1,
506
+ "timeoutMs": 60000,
507
+ "maxOutputBytes": 2097152
508
+ }
509
+ },
510
+ "reactions.set": {
511
+ "description": "Capture-required contract reservation: set the exact desired LinkedIn reaction after reviewed create and delete mutations can bind the actor, target post, and resulting state.",
512
+ "risk": "R2",
513
+ "sideEffect": "Sets or clears the authenticated account's reaction on the exact confirmed LinkedIn post.",
514
+ "idempotency": "local-at-most-once",
515
+ "dedupeWindowMs": 86400000,
516
+ "input": {
517
+ "properties": {
518
+ "post_urn": {
519
+ "type": "string",
520
+ "description": "Exact LinkedIn share or UGC-post URN",
521
+ "minLength": 1,
522
+ "maxLength": 500
523
+ },
524
+ "reaction": {
525
+ "type": "string",
526
+ "description": "Exact desired reaction, or none to clear it",
527
+ "enum": [
528
+ "like",
529
+ "celebrate",
530
+ "support",
531
+ "love",
532
+ "insightful",
533
+ "funny",
534
+ "none"
535
+ ]
536
+ }
537
+ },
538
+ "required": [
539
+ "post_urn",
540
+ "reaction"
541
+ ]
542
+ },
543
+ "webSession": {
544
+ "site": "linkedin",
545
+ "action": "reactions.set",
546
+ "contractVersion": 1,
547
+ "timeoutMs": 60000,
548
+ "maxOutputBytes": 2097152
549
+ }
550
+ },
551
+ "articles.publish": {
552
+ "description": "Capture-required contract reservation: publish one confirmed native LinkedIn article only after its draft, optional cover upload, and publish sequence is captured and response-bound.",
553
+ "risk": "R3",
554
+ "sideEffect": "Publishes one externally visible native LinkedIn article with the exact confirmed title, body, cover, and audience.",
555
+ "idempotency": "local-at-most-once",
556
+ "dedupeWindowMs": 86400000,
557
+ "input": {
558
+ "properties": {
559
+ "title": {
560
+ "type": "string",
561
+ "description": "Exact article title",
562
+ "minLength": 1,
563
+ "maxLength": 150
564
+ },
565
+ "body": {
566
+ "type": "string",
567
+ "description": "Exact native article body",
568
+ "minLength": 1,
569
+ "maxLength": 125000
570
+ },
571
+ "cover_image": {
572
+ "type": "file",
573
+ "description": "Optional reviewed article cover image",
574
+ "maxBytes": 20971520,
575
+ "mediaTypes": [
576
+ "image/jpeg",
577
+ "image/png"
578
+ ]
579
+ },
580
+ "visibility": {
581
+ "type": "string",
582
+ "description": "Confirmed article audience",
583
+ "enum": [
584
+ "public",
585
+ "connections"
586
+ ]
587
+ }
588
+ },
589
+ "required": [
590
+ "title",
591
+ "body",
592
+ "visibility"
593
+ ]
594
+ },
595
+ "webSession": {
596
+ "site": "linkedin",
597
+ "action": "articles.publish",
598
+ "contractVersion": 1,
599
+ "timeoutMs": 600000,
600
+ "maxOutputBytes": 2097152
601
+ }
602
+ }
603
+ }
604
+ }