@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,914 @@
1
+ {
2
+ "schemaVersion": 4,
3
+ "id": "linkedin-web",
4
+ "version": "1.22.0",
5
+ "displayName": "LinkedIn (Authenticated Web API)",
6
+ "surfaceId": "linkedin",
7
+ "origins": [
8
+ "https://www.linkedin.com",
9
+ "https://static.licdn.com"
10
+ ],
11
+ "browserDomains": [
12
+ "www.linkedin.com",
13
+ "static.licdn.com"
14
+ ],
15
+ "operations": {
16
+ "contacts.list": {
17
+ "description": "Capture-required contract reservation: list bounded LinkedIn messaging participants with statistics only after current viewer binding, real conversation and message pagination, group attribution, completeness, and acknowledgement-free behavior are reviewed.",
18
+ "risk": "R1",
19
+ "sideEffect": "none",
20
+ "idempotency": "none",
21
+ "dedupeWindowMs": 0,
22
+ "input": {
23
+ "properties": {
24
+ "cursor": {
25
+ "type": "string",
26
+ "description": "Opaque cursor returned by the preceding reviewed conversation page",
27
+ "minLength": 1,
28
+ "maxLength": 4096
29
+ },
30
+ "limit": {
31
+ "type": "number",
32
+ "description": "Maximum projected messaging participants",
33
+ "minimum": 1,
34
+ "maximum": 100
35
+ },
36
+ "stats_scan_limit": {
37
+ "type": "number",
38
+ "description": "Maximum reviewed messages scanned per contact and direction",
39
+ "minimum": 1,
40
+ "maximum": 2000
41
+ }
42
+ },
43
+ "required": []
44
+ },
45
+ "webSession": {
46
+ "site": "linkedin",
47
+ "action": "contacts.list",
48
+ "contractVersion": 1,
49
+ "timeoutMs": 60000,
50
+ "maxOutputBytes": 4194304
51
+ }
52
+ },
53
+ "contacts.read": {
54
+ "description": "Observed contract: read Contact info for one exact 1st-degree LinkedIn connection profile. Projects email when LinkedIn shows it, plus any of the profile link, connected-since date, phone numbers, websites, and birthday. Hidden or non-1st Contact info fails closed.",
55
+ "risk": "R1",
56
+ "sideEffect": "none",
57
+ "idempotency": "none",
58
+ "dedupeWindowMs": 0,
59
+ "input": {
60
+ "properties": {
61
+ "profile_url": {
62
+ "type": "string",
63
+ "description": "Exact public LinkedIn 1st-degree connection profile URL",
64
+ "minLength": 25,
65
+ "maxLength": 2048
66
+ }
67
+ },
68
+ "required": [
69
+ "profile_url"
70
+ ]
71
+ },
72
+ "webSession": {
73
+ "site": "linkedin",
74
+ "action": "contacts.read",
75
+ "contractVersion": 1,
76
+ "timeoutMs": 60000,
77
+ "maxOutputBytes": 4194304
78
+ }
79
+ },
80
+ "feeds.read": {
81
+ "description": "Observed contract: read one page of a member's recent-activity posts through a contained Chrome session. Resolves the live voyagerFeedDashProfileUpdates query, projects authored text and engagement counts when present, and returns an opaque next cursor. feed=home remains capture-required.",
82
+ "risk": "R1",
83
+ "sideEffect": "none",
84
+ "idempotency": "none",
85
+ "dedupeWindowMs": 0,
86
+ "input": {
87
+ "properties": {
88
+ "feed": {
89
+ "type": "string",
90
+ "description": "Feed surface. profile-activity pages a member recent-activity list. home remains capture-required.",
91
+ "enum": [
92
+ "home",
93
+ "profile-activity"
94
+ ]
95
+ },
96
+ "profile_url": {
97
+ "type": "string",
98
+ "description": "Exact public LinkedIn profile or recent-activity URL",
99
+ "minLength": 25,
100
+ "maxLength": 2048
101
+ },
102
+ "vanity": {
103
+ "type": "string",
104
+ "description": "Public LinkedIn profile vanity, such as j-hawkins",
105
+ "minLength": 2,
106
+ "maxLength": 100
107
+ },
108
+ "cursor": {
109
+ "type": "string",
110
+ "description": "Opaque cursor returned by the preceding profile-activity page",
111
+ "minLength": 1,
112
+ "maxLength": 4096
113
+ },
114
+ "limit": {
115
+ "type": "number",
116
+ "description": "Maximum recent-activity posts to project",
117
+ "minimum": 1,
118
+ "maximum": 100
119
+ }
120
+ },
121
+ "required": [
122
+ "feed"
123
+ ]
124
+ },
125
+ "webSession": {
126
+ "site": "linkedin",
127
+ "action": "feeds.read",
128
+ "contractVersion": 2,
129
+ "timeoutMs": 60000,
130
+ "maxOutputBytes": 4194304
131
+ }
132
+ },
133
+ "profiles.read": {
134
+ "description": "Observed contract: read one exact signed-in LinkedIn self profile page with target binding and an optional exact private My Network connection total.",
135
+ "risk": "R1",
136
+ "sideEffect": "none",
137
+ "idempotency": "none",
138
+ "dedupeWindowMs": 0,
139
+ "input": {
140
+ "properties": {
141
+ "profile_url": {
142
+ "type": "string",
143
+ "description": "Exact public LinkedIn self profile URL",
144
+ "minLength": 25,
145
+ "maxLength": 2048
146
+ },
147
+ "include_connections": {
148
+ "type": "boolean",
149
+ "description": "Also read the signed-in account's exact private My Network connection total"
150
+ }
151
+ },
152
+ "required": [
153
+ "profile_url"
154
+ ]
155
+ },
156
+ "webSession": {
157
+ "site": "linkedin",
158
+ "action": "profiles.read",
159
+ "contractVersion": 1,
160
+ "timeoutMs": 60000,
161
+ "maxOutputBytes": 4194304
162
+ }
163
+ },
164
+ "organizations.read": {
165
+ "description": "Observed contract: read one exact LinkedIn company Page and bind its exact follower count through the target Company and FollowingState records embedded by the first-party server render.",
166
+ "risk": "R1",
167
+ "sideEffect": "none",
168
+ "idempotency": "none",
169
+ "dedupeWindowMs": 0,
170
+ "input": {
171
+ "properties": {
172
+ "organization_url": {
173
+ "type": "string",
174
+ "description": "Exact public LinkedIn company Page URL",
175
+ "minLength": 30,
176
+ "maxLength": 2048
177
+ }
178
+ },
179
+ "required": [
180
+ "organization_url"
181
+ ]
182
+ },
183
+ "webSession": {
184
+ "site": "linkedin",
185
+ "action": "organizations.read",
186
+ "contractVersion": 1,
187
+ "timeoutMs": 60000,
188
+ "maxOutputBytes": 8388608
189
+ }
190
+ },
191
+ "relationships.recommendations.read": {
192
+ "description": "Capture-required contract reservation: list one bounded page of LinkedIn recommended connections only after the exact viewer-bound collection, paging variables, and completeness projection are captured and reviewed.",
193
+ "risk": "R1",
194
+ "sideEffect": "none",
195
+ "idempotency": "none",
196
+ "dedupeWindowMs": 0,
197
+ "input": {
198
+ "properties": {
199
+ "source": {
200
+ "type": "string",
201
+ "description": "Exact recommended-connections surface",
202
+ "enum": [
203
+ "all"
204
+ ]
205
+ },
206
+ "cursor": {
207
+ "type": "string",
208
+ "description": "Opaque cursor returned by the preceding recommendations page",
209
+ "minLength": 1,
210
+ "maxLength": 4096
211
+ },
212
+ "limit": {
213
+ "type": "number",
214
+ "description": "Maximum recommended profiles to project",
215
+ "minimum": 1,
216
+ "maximum": 100
217
+ }
218
+ },
219
+ "required": [
220
+ "source"
221
+ ]
222
+ },
223
+ "webSession": {
224
+ "site": "linkedin",
225
+ "action": "relationships.recommendations.read",
226
+ "contractVersion": 1,
227
+ "timeoutMs": 60000,
228
+ "maxOutputBytes": 4194304
229
+ }
230
+ },
231
+ "messaging.list": {
232
+ "description": "Capture-required contract reservation: list one bounded LinkedIn inbox page only after the current-account mailbox projection, registered query, paging, completeness, and acknowledgement-free behavior are recaptured and reviewed.",
233
+ "risk": "R1",
234
+ "sideEffect": "none",
235
+ "idempotency": "none",
236
+ "dedupeWindowMs": 0,
237
+ "input": {
238
+ "properties": {
239
+ "folder": {
240
+ "type": "string",
241
+ "description": "Exact LinkedIn inbox folder",
242
+ "enum": [
243
+ "focused",
244
+ "other",
245
+ "requests",
246
+ "archive",
247
+ "spam",
248
+ "all"
249
+ ]
250
+ },
251
+ "cursor": {
252
+ "type": "string",
253
+ "description": "Opaque cursor returned by the preceding page",
254
+ "minLength": 1,
255
+ "maxLength": 4096
256
+ },
257
+ "limit": {
258
+ "type": "number",
259
+ "description": "Maximum conversations to project",
260
+ "minimum": 1,
261
+ "maximum": 100
262
+ }
263
+ },
264
+ "required": [
265
+ "folder"
266
+ ]
267
+ },
268
+ "webSession": {
269
+ "site": "linkedin",
270
+ "action": "messaging.list",
271
+ "contractVersion": 1,
272
+ "timeoutMs": 60000,
273
+ "maxOutputBytes": 4194304
274
+ }
275
+ },
276
+ "messaging.read": {
277
+ "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.",
278
+ "risk": "R1",
279
+ "sideEffect": "none",
280
+ "idempotency": "none",
281
+ "dedupeWindowMs": 0,
282
+ "input": {
283
+ "properties": {
284
+ "conversation_id": {
285
+ "type": "string",
286
+ "description": "Exact opaque conversation identifier returned by messaging.list",
287
+ "minLength": 1,
288
+ "maxLength": 512
289
+ },
290
+ "cursor": {
291
+ "type": "string",
292
+ "description": "Opaque cursor returned by the preceding page",
293
+ "minLength": 1,
294
+ "maxLength": 4096
295
+ },
296
+ "limit": {
297
+ "type": "number",
298
+ "description": "Maximum messages to project",
299
+ "minimum": 1,
300
+ "maximum": 100
301
+ }
302
+ },
303
+ "required": [
304
+ "conversation_id"
305
+ ]
306
+ },
307
+ "webSession": {
308
+ "site": "linkedin",
309
+ "action": "messaging.read",
310
+ "contractVersion": 1,
311
+ "timeoutMs": 60000,
312
+ "maxOutputBytes": 4194304
313
+ }
314
+ },
315
+ "messaging.send": {
316
+ "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.",
317
+ "risk": "R3",
318
+ "sideEffect": "Sends one externally visible LinkedIn message to the exact confirmed conversation.",
319
+ "idempotency": "local-at-most-once",
320
+ "dedupeWindowMs": 86400000,
321
+ "input": {
322
+ "properties": {
323
+ "conversation_id": {
324
+ "type": "string",
325
+ "description": "Exact opaque conversation identifier returned by messaging.list",
326
+ "minLength": 1,
327
+ "maxLength": 512
328
+ },
329
+ "body": {
330
+ "type": "string",
331
+ "description": "Exact message text",
332
+ "minLength": 1,
333
+ "maxLength": 8000
334
+ },
335
+ "media": {
336
+ "type": "file",
337
+ "description": "Optional reviewed image, video, or document attachment",
338
+ "maxBytes": 536870912,
339
+ "mediaTypes": [
340
+ "image/jpeg",
341
+ "image/png",
342
+ "image/gif",
343
+ "video/mp4",
344
+ "application/pdf",
345
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation",
346
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
347
+ ]
348
+ }
349
+ },
350
+ "required": [
351
+ "conversation_id",
352
+ "body"
353
+ ]
354
+ },
355
+ "webSession": {
356
+ "site": "linkedin",
357
+ "action": "messaging.send",
358
+ "contractVersion": 1,
359
+ "timeoutMs": 600000,
360
+ "maxOutputBytes": 2097152
361
+ }
362
+ },
363
+ "posts.read": {
364
+ "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.",
365
+ "risk": "R1",
366
+ "sideEffect": "none",
367
+ "idempotency": "none",
368
+ "dedupeWindowMs": 0,
369
+ "input": {
370
+ "properties": {
371
+ "post_urn": {
372
+ "type": "string",
373
+ "description": "Exact LinkedIn share or UGC-post URN",
374
+ "minLength": 1,
375
+ "maxLength": 500
376
+ }
377
+ },
378
+ "required": [
379
+ "post_urn"
380
+ ]
381
+ },
382
+ "webSession": {
383
+ "site": "linkedin",
384
+ "action": "posts.read",
385
+ "contractVersion": 1,
386
+ "timeoutMs": 60000,
387
+ "maxOutputBytes": 2097152
388
+ }
389
+ },
390
+ "comments.read": {
391
+ "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.",
392
+ "risk": "R1",
393
+ "sideEffect": "none",
394
+ "idempotency": "none",
395
+ "dedupeWindowMs": 0,
396
+ "input": {
397
+ "properties": {
398
+ "post_urn": {
399
+ "type": "string",
400
+ "description": "Exact LinkedIn share or UGC-post URN",
401
+ "minLength": 1,
402
+ "maxLength": 500
403
+ },
404
+ "cursor": {
405
+ "type": "string",
406
+ "description": "Opaque cursor returned by the preceding page",
407
+ "minLength": 1,
408
+ "maxLength": 4096
409
+ },
410
+ "limit": {
411
+ "type": "number",
412
+ "description": "Maximum comments to project",
413
+ "minimum": 1,
414
+ "maximum": 100
415
+ }
416
+ },
417
+ "required": [
418
+ "post_urn"
419
+ ]
420
+ },
421
+ "webSession": {
422
+ "site": "linkedin",
423
+ "action": "comments.read",
424
+ "contractVersion": 1,
425
+ "timeoutMs": 60000,
426
+ "maxOutputBytes": 4194304
427
+ }
428
+ },
429
+ "articles.read": {
430
+ "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.",
431
+ "risk": "R1",
432
+ "sideEffect": "none",
433
+ "idempotency": "none",
434
+ "dedupeWindowMs": 0,
435
+ "input": {
436
+ "properties": {
437
+ "author_urn": {
438
+ "type": "string",
439
+ "description": "Exact LinkedIn person or organization author URN",
440
+ "minLength": 1,
441
+ "maxLength": 500
442
+ },
443
+ "start": {
444
+ "type": "number",
445
+ "description": "Zero-based article offset",
446
+ "minimum": 0,
447
+ "maximum": 100000
448
+ },
449
+ "limit": {
450
+ "type": "number",
451
+ "description": "Maximum article records to project",
452
+ "minimum": 1,
453
+ "maximum": 100
454
+ }
455
+ },
456
+ "required": [
457
+ "author_urn"
458
+ ]
459
+ },
460
+ "webSession": {
461
+ "site": "linkedin",
462
+ "action": "articles.read",
463
+ "contractVersion": 1,
464
+ "timeoutMs": 60000,
465
+ "maxOutputBytes": 4194304
466
+ }
467
+ },
468
+ "media.publish": {
469
+ "description": "Capture-required contract reservation: publish one confirmed LinkedIn member video only after the exact web-session video registration, contiguous signed byte transfers, processing/finalization, member and audience binding, created-share response, and independent exact-share readback are reviewed.",
470
+ "risk": "R3",
471
+ "sideEffect": "Uploads one video and publishes one externally visible LinkedIn post with the exact confirmed audience and commentary.",
472
+ "idempotency": "local-at-most-once",
473
+ "dedupeWindowMs": 86400000,
474
+ "input": {
475
+ "properties": {
476
+ "body": {
477
+ "type": "string",
478
+ "description": "Exact post commentary",
479
+ "minLength": 1,
480
+ "maxLength": 3000
481
+ },
482
+ "visibility": {
483
+ "type": "string",
484
+ "description": "Confirmed post audience",
485
+ "enum": [
486
+ "public",
487
+ "connections"
488
+ ]
489
+ },
490
+ "media": {
491
+ "type": "file",
492
+ "description": "Exact plan-bound LinkedIn MP4 between 75,000 bytes and 500 MiB; runtime promotion must additionally verify duration and codec processing",
493
+ "maxBytes": 524288000,
494
+ "mediaTypes": [
495
+ "video/mp4"
496
+ ]
497
+ },
498
+ "title": {
499
+ "type": "string",
500
+ "description": "Optional exact video title",
501
+ "minLength": 1,
502
+ "maxLength": 200
503
+ }
504
+ },
505
+ "required": [
506
+ "body",
507
+ "visibility",
508
+ "media"
509
+ ]
510
+ },
511
+ "webSession": {
512
+ "site": "linkedin",
513
+ "action": "media.publish",
514
+ "contractVersion": 1,
515
+ "timeoutMs": 600000,
516
+ "maxOutputBytes": 8388608
517
+ }
518
+ },
519
+ "posts.publish": {
520
+ "description": "Publish one exact confirmed LinkedIn post with text and an optional single PNG through bounded ordered page staging and the current first-party image-registration/upload and post-create contracts, durably retain the accepted share URN, then independently read it back.",
521
+ "risk": "R3",
522
+ "sideEffect": "Publishes one externally visible LinkedIn post with the exact confirmed audience and content.",
523
+ "idempotency": "local-at-most-once",
524
+ "dedupeWindowMs": 86400000,
525
+ "input": {
526
+ "properties": {
527
+ "body": {
528
+ "type": "string",
529
+ "description": "Exact post commentary",
530
+ "minLength": 1,
531
+ "maxLength": 3000
532
+ },
533
+ "visibility": {
534
+ "type": "string",
535
+ "description": "Confirmed post audience",
536
+ "enum": [
537
+ "public",
538
+ "connections"
539
+ ]
540
+ },
541
+ "media": {
542
+ "type": "array",
543
+ "description": "Optional single exact PNG image",
544
+ "items": {
545
+ "type": "file",
546
+ "description": "One exact PNG post image",
547
+ "maxBytes": 20971520,
548
+ "mediaTypes": [
549
+ "image/png"
550
+ ]
551
+ },
552
+ "minItems": 1,
553
+ "maxItems": 1
554
+ },
555
+ "alt_text": {
556
+ "type": "string",
557
+ "description": "Optional image alternative text",
558
+ "minLength": 1,
559
+ "maxLength": 4000
560
+ }
561
+ },
562
+ "required": [
563
+ "body",
564
+ "visibility"
565
+ ]
566
+ },
567
+ "webSession": {
568
+ "site": "linkedin",
569
+ "action": "posts.publish",
570
+ "contractVersion": 3,
571
+ "timeoutMs": 600000,
572
+ "maxOutputBytes": 2097152
573
+ }
574
+ },
575
+ "posts.repost": {
576
+ "description": "Capture-required contract reservation: create one confirmed LinkedIn repost after the exact repost mutation and returned post identity are captured and reviewed.",
577
+ "risk": "R3",
578
+ "sideEffect": "Creates one externally visible LinkedIn repost of the exact confirmed post.",
579
+ "idempotency": "local-at-most-once",
580
+ "dedupeWindowMs": 86400000,
581
+ "input": {
582
+ "properties": {
583
+ "post_urn": {
584
+ "type": "string",
585
+ "description": "Exact LinkedIn share or UGC-post URN to repost",
586
+ "minLength": 1,
587
+ "maxLength": 500
588
+ }
589
+ },
590
+ "required": [
591
+ "post_urn"
592
+ ]
593
+ },
594
+ "webSession": {
595
+ "site": "linkedin",
596
+ "action": "posts.repost",
597
+ "contractVersion": 1,
598
+ "timeoutMs": 60000,
599
+ "maxOutputBytes": 2097152
600
+ }
601
+ },
602
+ "posts.quote": {
603
+ "description": "Capture-required contract reservation: publish one confirmed LinkedIn quote repost after its exact mutation and returned post identity are captured and reviewed.",
604
+ "risk": "R3",
605
+ "sideEffect": "Publishes one externally visible LinkedIn quote repost with the exact confirmed commentary.",
606
+ "idempotency": "local-at-most-once",
607
+ "dedupeWindowMs": 86400000,
608
+ "input": {
609
+ "properties": {
610
+ "post_urn": {
611
+ "type": "string",
612
+ "description": "Exact LinkedIn share or UGC-post URN to quote",
613
+ "minLength": 1,
614
+ "maxLength": 500
615
+ },
616
+ "body": {
617
+ "type": "string",
618
+ "description": "Exact quote commentary",
619
+ "minLength": 1,
620
+ "maxLength": 3000
621
+ },
622
+ "visibility": {
623
+ "type": "string",
624
+ "description": "Confirmed quote-post audience",
625
+ "enum": [
626
+ "public",
627
+ "connections"
628
+ ]
629
+ }
630
+ },
631
+ "required": [
632
+ "post_urn",
633
+ "body",
634
+ "visibility"
635
+ ]
636
+ },
637
+ "webSession": {
638
+ "site": "linkedin",
639
+ "action": "posts.quote",
640
+ "contractVersion": 1,
641
+ "timeoutMs": 60000,
642
+ "maxOutputBytes": 2097152
643
+ }
644
+ },
645
+ "comments.create": {
646
+ "description": "Capture-required contract reservation: create one confirmed top-level LinkedIn comment after exact actor, post, and returned-comment bindings are captured and reviewed.",
647
+ "risk": "R3",
648
+ "sideEffect": "Publishes one externally visible comment on the exact confirmed LinkedIn post.",
649
+ "idempotency": "local-at-most-once",
650
+ "dedupeWindowMs": 86400000,
651
+ "input": {
652
+ "properties": {
653
+ "post_urn": {
654
+ "type": "string",
655
+ "description": "Exact LinkedIn share or UGC-post URN",
656
+ "minLength": 1,
657
+ "maxLength": 500
658
+ },
659
+ "body": {
660
+ "type": "string",
661
+ "description": "Exact comment text",
662
+ "minLength": 1,
663
+ "maxLength": 500
664
+ }
665
+ },
666
+ "required": [
667
+ "post_urn",
668
+ "body"
669
+ ]
670
+ },
671
+ "webSession": {
672
+ "site": "linkedin",
673
+ "action": "comments.create",
674
+ "contractVersion": 1,
675
+ "timeoutMs": 60000,
676
+ "maxOutputBytes": 2097152
677
+ }
678
+ },
679
+ "replies.create": {
680
+ "description": "Capture-required contract reservation: create one confirmed LinkedIn comment reply after exact actor, root, parent, and returned-reply bindings are captured and reviewed.",
681
+ "risk": "R3",
682
+ "sideEffect": "Publishes one externally visible reply to the exact confirmed LinkedIn comment.",
683
+ "idempotency": "local-at-most-once",
684
+ "dedupeWindowMs": 86400000,
685
+ "input": {
686
+ "properties": {
687
+ "post_urn": {
688
+ "type": "string",
689
+ "description": "Exact root LinkedIn share or UGC-post URN",
690
+ "minLength": 1,
691
+ "maxLength": 500
692
+ },
693
+ "comment_urn": {
694
+ "type": "string",
695
+ "description": "Exact parent comment URN",
696
+ "minLength": 1,
697
+ "maxLength": 1000
698
+ },
699
+ "body": {
700
+ "type": "string",
701
+ "description": "Exact reply text",
702
+ "minLength": 1,
703
+ "maxLength": 500
704
+ }
705
+ },
706
+ "required": [
707
+ "post_urn",
708
+ "comment_urn",
709
+ "body"
710
+ ]
711
+ },
712
+ "webSession": {
713
+ "site": "linkedin",
714
+ "action": "replies.create",
715
+ "contractVersion": 1,
716
+ "timeoutMs": 60000,
717
+ "maxOutputBytes": 2097152
718
+ }
719
+ },
720
+ "reactions.set": {
721
+ "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.",
722
+ "risk": "R2",
723
+ "sideEffect": "Sets or clears the authenticated account's reaction on the exact confirmed LinkedIn post.",
724
+ "idempotency": "local-at-most-once",
725
+ "dedupeWindowMs": 86400000,
726
+ "input": {
727
+ "properties": {
728
+ "post_urn": {
729
+ "type": "string",
730
+ "description": "Exact LinkedIn share or UGC-post URN",
731
+ "minLength": 1,
732
+ "maxLength": 500
733
+ },
734
+ "reaction": {
735
+ "type": "string",
736
+ "description": "Exact desired reaction, or none to clear it",
737
+ "enum": [
738
+ "like",
739
+ "celebrate",
740
+ "support",
741
+ "love",
742
+ "insightful",
743
+ "funny",
744
+ "none"
745
+ ]
746
+ }
747
+ },
748
+ "required": [
749
+ "post_urn",
750
+ "reaction"
751
+ ]
752
+ },
753
+ "webSession": {
754
+ "site": "linkedin",
755
+ "action": "reactions.set",
756
+ "contractVersion": 1,
757
+ "timeoutMs": 60000,
758
+ "maxOutputBytes": 2097152
759
+ }
760
+ },
761
+ "relationships.connect": {
762
+ "description": "Capture-required contract reservation: send one confirmed LinkedIn connection invitation only after the exact viewer, target profile, optional note, duplicate state, request, and response bindings are captured and reviewed.",
763
+ "risk": "R3",
764
+ "sideEffect": "Sends one externally visible LinkedIn connection invitation to the exact confirmed profile.",
765
+ "idempotency": "local-at-most-once",
766
+ "dedupeWindowMs": 86400000,
767
+ "input": {
768
+ "properties": {
769
+ "target_profile_urn": {
770
+ "type": "string",
771
+ "description": "Exact LinkedIn profile URN returned by a reviewed profile or recommendation read",
772
+ "minLength": 1,
773
+ "maxLength": 512
774
+ },
775
+ "note": {
776
+ "type": "string",
777
+ "description": "Optional exact invitation note",
778
+ "minLength": 1,
779
+ "maxLength": 300
780
+ }
781
+ },
782
+ "required": [
783
+ "target_profile_urn"
784
+ ]
785
+ },
786
+ "webSession": {
787
+ "site": "linkedin",
788
+ "action": "relationships.connect",
789
+ "contractVersion": 1,
790
+ "timeoutMs": 60000,
791
+ "maxOutputBytes": 2097152
792
+ }
793
+ },
794
+ "articles.draft.save": {
795
+ "description": "Create or replace one private native LinkedIn Article draft from ArticleDraftDocument schemaVersion 2 with native quote blocks, ordered local inline images, alt text, captions, and either one local cover image or the exact existing replacement-draft cover using reviewed current-member-bound autosaves and unpublished readback.",
796
+ "risk": "R2",
797
+ "sideEffect": "Creates one private native LinkedIn Article draft with the confirmed cover, or replaces the exact confirmed existing private draft while either replacing or preserving its banner, plus the confirmed inline image bytes, alt text, and captions; it never publishes the draft.",
798
+ "idempotency": "local-at-most-once",
799
+ "dedupeWindowMs": 86400000,
800
+ "input": {
801
+ "properties": {
802
+ "title": {
803
+ "type": "string",
804
+ "description": "Exact native article title",
805
+ "minLength": 1,
806
+ "maxLength": 150
807
+ },
808
+ "document": {
809
+ "type": "string",
810
+ "description": "Canonical JSON for ArticleDraftDocument schemaVersion 2; this reviewed LinkedIn contract supports bounded paragraphs, H1/H2 headings, native blockquotes, native HTTPS links, and ordered inline image blocks with required alt text and optional captions",
811
+ "minLength": 1,
812
+ "maxLength": 524288
813
+ },
814
+ "draft_id": {
815
+ "type": "string",
816
+ "description": "Optional exact existing private LinkedIn Article draft to replace in place",
817
+ "minLength": 1,
818
+ "maxLength": 512
819
+ },
820
+ "cover_image": {
821
+ "type": "file",
822
+ "description": "Exact local JPEG, PNG, or WebP cover rendered only in LinkedIn's banner slot; required for create, optional on an exact replacement to preserve the existing banner",
823
+ "maxBytes": 5242880,
824
+ "mediaTypes": [
825
+ "image/jpeg",
826
+ "image/png",
827
+ "image/webp"
828
+ ]
829
+ },
830
+ "inline_images": {
831
+ "type": "array",
832
+ "description": "Ordered plan-bound local image files referenced by document imageIndex",
833
+ "items": {
834
+ "type": "file",
835
+ "description": "One exact JPEG, PNG, or WebP inline image",
836
+ "maxBytes": 5242880,
837
+ "mediaTypes": [
838
+ "image/jpeg",
839
+ "image/png",
840
+ "image/webp"
841
+ ]
842
+ },
843
+ "minItems": 1,
844
+ "maxItems": 20
845
+ }
846
+ },
847
+ "required": [
848
+ "title",
849
+ "document",
850
+ "inline_images"
851
+ ]
852
+ },
853
+ "webSession": {
854
+ "site": "linkedin",
855
+ "action": "articles.draft.save",
856
+ "contractVersion": 7,
857
+ "timeoutMs": 600000,
858
+ "maxOutputBytes": 2097152
859
+ }
860
+ },
861
+ "articles.publish": {
862
+ "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.",
863
+ "risk": "R3",
864
+ "sideEffect": "Publishes one externally visible native LinkedIn article with the exact confirmed title, body, cover, and audience.",
865
+ "idempotency": "local-at-most-once",
866
+ "dedupeWindowMs": 86400000,
867
+ "input": {
868
+ "properties": {
869
+ "title": {
870
+ "type": "string",
871
+ "description": "Exact article title",
872
+ "minLength": 1,
873
+ "maxLength": 150
874
+ },
875
+ "body": {
876
+ "type": "string",
877
+ "description": "Exact native article body",
878
+ "minLength": 1,
879
+ "maxLength": 125000
880
+ },
881
+ "cover_image": {
882
+ "type": "file",
883
+ "description": "Optional reviewed article cover image",
884
+ "maxBytes": 20971520,
885
+ "mediaTypes": [
886
+ "image/jpeg",
887
+ "image/png"
888
+ ]
889
+ },
890
+ "visibility": {
891
+ "type": "string",
892
+ "description": "Confirmed article audience",
893
+ "enum": [
894
+ "public",
895
+ "connections"
896
+ ]
897
+ }
898
+ },
899
+ "required": [
900
+ "title",
901
+ "body",
902
+ "visibility"
903
+ ]
904
+ },
905
+ "webSession": {
906
+ "site": "linkedin",
907
+ "action": "articles.publish",
908
+ "contractVersion": 1,
909
+ "timeoutMs": 600000,
910
+ "maxOutputBytes": 2097152
911
+ }
912
+ }
913
+ }
914
+ }