@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,707 @@
1
+ import {
2
+ isProviderPluginOperationName,
3
+ isProviderPluginSurfaceId,
4
+ } from "./provider-plugin-identifiers";
5
+
6
+ export interface ReviewedBuiltInContractIdentityV1 {
7
+ readonly schemaVersion: 1;
8
+ readonly pluginVersion: string;
9
+ /** Canonical durable writer identity for the current contract distribution. */
10
+ readonly implementationSha256: string;
11
+ /** Exact later current-distribution writer identities accepted only by readers. */
12
+ readonly legacyCurrentReadImplementationSha256: readonly string[];
13
+ /** Exact historical distribution identities scoped to every route that distribution owned. */
14
+ readonly legacyDistributionReadImplementationSha256?: readonly Readonly<{
15
+ readonly implementationSha256: string;
16
+ readonly routes: readonly string[];
17
+ }>[];
18
+ /** Exact later writer identities accepted only for routes that existed in that distribution. */
19
+ readonly legacyRouteReadImplementationSha256?: Readonly<
20
+ Record<string, readonly string[]>
21
+ >;
22
+ /** Exact b64ccd66 predecessor execution identities accepted only by readers. */
23
+ readonly legacyReadImplementationSha256: Readonly<{
24
+ readonly test: string;
25
+ readonly production: string;
26
+ readonly development: string;
27
+ }> | null;
28
+ /** Exact later e71c9bd3 predecessor-runtime identities, kept as one distribution. */
29
+ readonly legacyE71ReadImplementationSha256: Readonly<{
30
+ readonly default: string;
31
+ readonly test: string;
32
+ readonly production: string;
33
+ readonly development: string;
34
+ }> | null;
35
+ }
36
+
37
+ const BEEPER_V1_ROUTE_COORDINATES = Object.freeze([
38
+ "accounts.list", "accounts.read", "bridges.list", "bridges.read",
39
+ "contacts.list", "contacts.search", "contacts.read", "messaging.list",
40
+ "messaging.search", "conversations.read", "messaging.read",
41
+ "messaging.content.search", "messaging.message.read", "messaging.context.read",
42
+ "messaging.send", "reactions.set", "messaging.edit", "conversations.start",
43
+ "conversations.archive.set", "conversations.pin.set", "conversations.mute.set",
44
+ "conversations.read-state.set", "conversations.priority.set",
45
+ "conversations.notify", "conversations.title.set",
46
+ "conversations.description.set", "conversations.avatar.set",
47
+ "conversations.draft.set", "conversations.disappearing.set",
48
+ "conversations.reminder.set", "conversations.focus", "presence.set",
49
+ ].map((operation) => `${operation}@1`));
50
+
51
+ const BEEPER_2_2_DIRECT_ROUTE_COORDINATES = Object.freeze([
52
+ "accounts.list@2",
53
+ "messaging.search@2",
54
+ "conversations.read@2",
55
+ "messaging.read@2",
56
+ "messaging.content.search@2",
57
+ ]);
58
+
59
+ const BEEPER_V1_BINDING_ROUTE_COORDINATES = Object.freeze(
60
+ BEEPER_V1_ROUTE_COORDINATES.map((route) => `local-cli:beeper/${route}`),
61
+ );
62
+ const BEEPER_2_2_DIRECT_BINDING_ROUTE_COORDINATES = Object.freeze(
63
+ BEEPER_2_2_DIRECT_ROUTE_COORDINATES.map((route) => `local-cli:beeper/${route}`),
64
+ );
65
+ const BEEPER_2_3_BINDING_ROUTE_COORDINATES = Object.freeze([
66
+ ...BEEPER_V1_BINDING_ROUTE_COORDINATES,
67
+ ...BEEPER_2_2_DIRECT_BINDING_ROUTE_COORDINATES,
68
+ "local-cli:beeper/bridges.list@2",
69
+ "local-cli:beeper/contacts.list@2",
70
+ "local-cli:beeper/messaging.read@3",
71
+ ]);
72
+
73
+ const REDDIT_1_3_BINDING_ROUTE_COORDINATES = Object.freeze([
74
+ "comments.create@1", "comments.read@1", "communities.membership.set@1",
75
+ "content.delete@1", "content.edit@1", "content.save@1", "feeds.read@1",
76
+ "media.publish@1", "media.publish@2", "media.publish@3", "media.publish@4",
77
+ "media.publish@5", "media.publish@6", "media.publish@7", "media.publish@8",
78
+ "media.publish@9", "media.read@1", "media.read@2", "messaging.list@1",
79
+ "messaging.read@1", "messaging.send@1", "posts.publish@1", "posts.read@1",
80
+ "posts.repost@1", "profiles.read@1", "reactions.set@1",
81
+ "relationships.follow.set@1", "replies.create@1",
82
+ ].map((route) => `web-session-api:reddit/${route}`));
83
+
84
+ const identities = Object.freeze({
85
+ "beeper-linked-device": {
86
+ schemaVersion: 1,
87
+ pluginVersion: "2.4.0",
88
+ implementationSha256: "a989e65e372aa63af41cb36f32d6a1d769c734ba0adc207dd2f25d916f877ff5",
89
+ legacyCurrentReadImplementationSha256: [],
90
+ legacyDistributionReadImplementationSha256: [
91
+ {
92
+ implementationSha256:
93
+ "2d2cef38ce2d0c193f4e6890c51d59f8a3547d9011d5c3aa8df18f5f077ebcdd",
94
+ routes: [...BEEPER_2_3_BINDING_ROUTE_COORDINATES],
95
+ },
96
+ {
97
+ implementationSha256:
98
+ "e6d49d29ece94d3c9eb1817ea194699bbe56ecb1170e3691e0242e16ef2c26eb",
99
+ routes: [
100
+ ...BEEPER_V1_BINDING_ROUTE_COORDINATES,
101
+ ...BEEPER_2_2_DIRECT_BINDING_ROUTE_COORDINATES,
102
+ ],
103
+ },
104
+ {
105
+ implementationSha256:
106
+ "89a51cc1e082b15ff89dd4e85e48e218653ca4bf7e49b5bbc824e5381bad86e1",
107
+ routes: BEEPER_V1_BINDING_ROUTE_COORDINATES,
108
+ },
109
+ {
110
+ implementationSha256:
111
+ "1f5ed0abd4eaaef92e0d035452273e8a081f564da827897547b6e65939974a60",
112
+ routes: BEEPER_V1_BINDING_ROUTE_COORDINATES,
113
+ },
114
+ ],
115
+ legacyRouteReadImplementationSha256: {
116
+ "accounts.list@1": [
117
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
118
+ ],
119
+ "accounts.read@1": [
120
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
121
+ ],
122
+ "bridges.read@1": [
123
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
124
+ ],
125
+ "contacts.search@1": [
126
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
127
+ ],
128
+ "contacts.read@1": [
129
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
130
+ ],
131
+ "messaging.list@1": [
132
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
133
+ ],
134
+ "messaging.search@1": [
135
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
136
+ ],
137
+ "conversations.read@1": [
138
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
139
+ ],
140
+ "messaging.content.search@1": [
141
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
142
+ ],
143
+ "messaging.message.read@1": [
144
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
145
+ ],
146
+ "messaging.context.read@1": [
147
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
148
+ ],
149
+ "messaging.send@1": [
150
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
151
+ ],
152
+ "reactions.set@1": [
153
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
154
+ ],
155
+ "messaging.edit@1": [
156
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
157
+ ],
158
+ "conversations.start@1": [
159
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
160
+ ],
161
+ "conversations.archive.set@1": [
162
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
163
+ ],
164
+ "conversations.pin.set@1": [
165
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
166
+ ],
167
+ "conversations.mute.set@1": [
168
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
169
+ ],
170
+ "conversations.read-state.set@1": [
171
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
172
+ ],
173
+ "conversations.priority.set@1": [
174
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
175
+ ],
176
+ "conversations.notify@1": [
177
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
178
+ ],
179
+ "conversations.title.set@1": [
180
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
181
+ ],
182
+ "conversations.description.set@1": [
183
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
184
+ ],
185
+ "conversations.avatar.set@1": [
186
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
187
+ ],
188
+ "conversations.draft.set@1": [
189
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
190
+ ],
191
+ "conversations.disappearing.set@1": [
192
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
193
+ ],
194
+ "conversations.reminder.set@1": [
195
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
196
+ ],
197
+ "conversations.focus@1": [
198
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
199
+ ],
200
+ "presence.set@1": [
201
+ "6b166b3cd61866e1af17d1d0fd2e63b78500f9e49255a03d89ca11ed6406ec92",
202
+ ],
203
+ },
204
+ legacyReadImplementationSha256: null,
205
+ legacyE71ReadImplementationSha256: null,
206
+ },
207
+ "bluesky-web": {
208
+ schemaVersion: 1,
209
+ pluginVersion: "1.4.0",
210
+ implementationSha256: "478d1e92d3f266dde61c4808104da239a0cc60d5a3c7000d7d2733792641e861",
211
+ legacyCurrentReadImplementationSha256: [
212
+ "f16f456fd06952bdd28e4bbed6e6faaed9b2c18899487224453e7ef314f585e8",
213
+ "81344b367a11c7dcaeff83386bc0f796c41260cb373b9818527f4cb55bc80d48",
214
+ "e824f922748673edb9515055d208cfc4333c832b04cec528aa71f7be736e5846",
215
+ "eb4cc4aa49296d11d2c36d798e5e3dd0b1664aa2d37e885ffd0919ad526d44d4",
216
+ "9bdebb45464120249abc8b9d74068f8921b19c999429a74cfef67d06b7816ccc",
217
+ ],
218
+ legacyReadImplementationSha256: {
219
+ test: "49cef73be8ec202c2f991092020e4106c84f0f8b8fa6f5f2c89cd79df285fe43",
220
+ production: "85170f98a6fc658021e83192e07fd3186bcdc3f9bc958d323c874a5e15a4a82d",
221
+ development: "200f125ea0b219b045e99a4cddc9da28ed510be52d830c4e1abefe722c219fae",
222
+ },
223
+ legacyE71ReadImplementationSha256: {
224
+ default: "bef6a8762825a070015aabbb019e32974ddef1a960e0e2901d3d4b168ad48804",
225
+ test: "f8e82be035f3280809a3941b81a2c10a354a73006edfbbdc5e89207bc036244d",
226
+ production: "89d80d4603413a79092c369572f571cb3d36fe1716b401d00ba0f55019d9f306",
227
+ development: "d5ada0c9f22748494b12def42560c761777e69f5a58496523cd9641984787aa5",
228
+ },
229
+ },
230
+ "clasificados-web": {
231
+ schemaVersion: 1,
232
+ pluginVersion: "1.0.0",
233
+ implementationSha256: "fda5a8870cfd235df6419c15541c8ddb1345c15a801c1264e58339d9e9c53828",
234
+ legacyCurrentReadImplementationSha256: [],
235
+ legacyReadImplementationSha256: null,
236
+ legacyE71ReadImplementationSha256: null,
237
+ },
238
+ "gmail-official": {
239
+ schemaVersion: 1,
240
+ pluginVersion: "1.3.0",
241
+ implementationSha256: "821e81dcd0d09756253ace93bece4b906c9fca3f1ab27adcbf0108a3fb0f6702",
242
+ legacyCurrentReadImplementationSha256: [],
243
+ legacyReadImplementationSha256: null,
244
+ legacyE71ReadImplementationSha256: null,
245
+ },
246
+ "github-web": {
247
+ schemaVersion: 1,
248
+ pluginVersion: "1.2.0",
249
+ implementationSha256: "42cf485abbc03c95495bd48b946e92f2bece607d26af20efda340699210c170d",
250
+ legacyCurrentReadImplementationSha256: [
251
+ "2764fb3c746755b2453279b5a6672f1460a139717c45e83520dfa5d9f753025a",
252
+ ],
253
+ legacyRouteReadImplementationSha256: {
254
+ "profiles.read@1": [
255
+ "a27e177eb3f874d46ad8ad29d71bc5a1b17b98fb966725a54e9b741f24c7bf9b",
256
+ ],
257
+ },
258
+ legacyReadImplementationSha256: null,
259
+ legacyE71ReadImplementationSha256: null,
260
+ },
261
+ "hacker-news-web": {
262
+ schemaVersion: 1,
263
+ pluginVersion: "1.1.0",
264
+ implementationSha256: "66b9744caeb514cd9c4a749db4baaca84346098b162cdf4bcba653b7e9d9408a",
265
+ legacyCurrentReadImplementationSha256: [],
266
+ legacyReadImplementationSha256: {
267
+ test: "e4c9e459c0185428d759994a160200b5d883119caca828b6ae7469124ef82f14",
268
+ production: "c54f71de41c0df51a36f8a1c80b092b4534ffbd16aedacfba599d68e8f6b4130",
269
+ development: "ff716adff5a4f962a765020474325037d0d4795c61f086c13e5d2adc61484ec8",
270
+ },
271
+ legacyE71ReadImplementationSha256: {
272
+ default: "da3cdd6465b92ce933004fb9e3f2bf3dd48811e766079647d2cdaec43e507e1d",
273
+ test: "e4c9e459c0185428d759994a160200b5d883119caca828b6ae7469124ef82f14",
274
+ production: "c54f71de41c0df51a36f8a1c80b092b4534ffbd16aedacfba599d68e8f6b4130",
275
+ development: "ff716adff5a4f962a765020474325037d0d4795c61f086c13e5d2adc61484ec8",
276
+ },
277
+ },
278
+ "imessage-direct": {
279
+ schemaVersion: 1,
280
+ pluginVersion: "1.0.0",
281
+ implementationSha256: "00ef9201e77ffe5258f13b81a5e934af0ccf6317e095644ccfcec258c6928e8d",
282
+ legacyCurrentReadImplementationSha256: [],
283
+ legacyReadImplementationSha256: null,
284
+ legacyE71ReadImplementationSha256: null,
285
+ },
286
+ "linkedin-official": {
287
+ schemaVersion: 1,
288
+ pluginVersion: "1.0.0",
289
+ implementationSha256: "b279da0925b7f5f75066a07eca59610132da82caf385d83bc02e8b9d135aa121",
290
+ legacyCurrentReadImplementationSha256: [],
291
+ legacyReadImplementationSha256: {
292
+ test: "bd53061f2cd8d9089e82143c546e1b79d5352077d9c701ad27975179dc4e1c96",
293
+ production: "7cd9fae0e9aaf198a3944508455b2e6a74bc3bc7bf7329dd156c3091e7193e5d",
294
+ development: "6fd3705ab96ac48ae3f2ef014ef6ea3fc7ec2452d255cd27ae1b0347c2e4975e",
295
+ },
296
+ legacyE71ReadImplementationSha256: {
297
+ default: "b279da0925b7f5f75066a07eca59610132da82caf385d83bc02e8b9d135aa121",
298
+ test: "bd53061f2cd8d9089e82143c546e1b79d5352077d9c701ad27975179dc4e1c96",
299
+ production: "7cd9fae0e9aaf198a3944508455b2e6a74bc3bc7bf7329dd156c3091e7193e5d",
300
+ development: "6fd3705ab96ac48ae3f2ef014ef6ea3fc7ec2452d255cd27ae1b0347c2e4975e",
301
+ },
302
+ },
303
+ "linkedin-web": {
304
+ schemaVersion: 1,
305
+ pluginVersion: "1.6.0",
306
+ implementationSha256: "e4614ab9c7733d7526b8157410e462f1bb48fdaa1c2319a6a4179c18b9e6839d",
307
+ legacyCurrentReadImplementationSha256: [
308
+ "97194dc5a8ec3afc4f4a20152efe51dbdc2fa8a8dde0cd9484b54718c4767f45",
309
+ "64621493e09949fcb9973270140fec1d7398374cf48d3ef150a0c24b882fdeb8",
310
+ "da9d19f6a31d5308579bff7d9b4f77bc458ef69890f0f8c3239cbebeac4bb2a5",
311
+ "97d1f8169a39f207db27145ef79de0f52ea98ad416ee69d4c5d3689d76211e2a",
312
+ "f327a0baca1831436dc98be657c72b52f4e70494ff0e90204ac8c21a17f6a0ea",
313
+ "baa96307587140a460e39274dd2f0f0aab8bee125c34c62231038d0401a7e737",
314
+ "65d95a47f238acf3fac02116a1c671c7a9659dab766bd8081ccf69d4495dccda",
315
+ "dbda2aee2075a0a3726241fd24932113ae6c2d139ae1f7036ea827a335f7344c",
316
+ "9acb34f9ef5f59dd46b249766af236a3876a4975e0797e330f2975b3fd4ed643",
317
+ "951102310bd87f93ce0863c1a444371d62f412934cc805f82c9981f82edfe50e",
318
+ "4fd6c293984be688a9273acb09bccea64a75134daca745b322fa8d33dfe9f97c",
319
+ "624e146839f4d20d361a949c3ddb726f0c6b741f4d094e873e82185cf3f03175",
320
+ ],
321
+ legacyReadImplementationSha256: {
322
+ test: "00a99426ec31182f8d37d5cceb819947a09e630b468bb6e3ed8827f5b0fa4628",
323
+ production: "1ca3e1dcff51ae5557cd55a7d4ed95fbb2d1de6cd98791a99fb92b519e2346e5",
324
+ development: "c3586d7f4eadd0f822f2f51f5719929c8210514cb6f6e7934030d5f4306c1bf0",
325
+ },
326
+ legacyE71ReadImplementationSha256: {
327
+ default: "a8355972fff8da1370cb7022b1fcc5af07155162f45785578f190623a07a3821",
328
+ test: "12faf713184aebc92a170f4d8f2fcea7edaa1e6c37bb63db5197c693c768452b",
329
+ production: "ddcff51fbfebab8f67dc0049137d7ac7ec7d3315f50f4b23fe1f05f14af1a3bc",
330
+ development: "101e7f112a6e563a875dcc5ece4d97bfa5b7c30950de8c4da8d3fad3eaf27c41",
331
+ },
332
+ },
333
+ "meta-web": {
334
+ schemaVersion: 1,
335
+ pluginVersion: "1.5.0",
336
+ implementationSha256: "7fa464a81bdedf8926f36b6c6e75f6c1484b66bbb65672ce626d7e580d339a52",
337
+ legacyCurrentReadImplementationSha256: [
338
+ "1a1c67883a899a3a0b414656f0e4033579e9ea89dc29e80691b733b28402c979",
339
+ "349991a62eb1b3e08c3917948554ba4e53016cf66f30d0d4513c2c0321548763",
340
+ "cd8847f028199857b1aed8f6873af25470a6c9945c38b1deb49e52402a0bf84b",
341
+ "8b5f59a6aa223ea1493fb49c2f9959565fef931318af55880973c3dd2758c101",
342
+ "6f3f5d29dd6a8e19c2d6eba9bd92cce0406f24df9a6a8b121731f20ed5604994",
343
+ "af2d809b8a18806c8f36e86660289c219a99eb0799baa42a2afbcfbc428e37c2",
344
+ "5d62645a730274c6dc86dd058886a2eb6b9a8bddf94ba888f017b7294580e452",
345
+ "b1e997c0540283f45b3b7b0f4c5712f8592e140a840bab75e463aac40efaa805",
346
+ "2267887ca46e413fab5fded684edb1bab495b4782925f6be67153195131ad6c6",
347
+ "5690d4ba2d37bce7aed32f12a44a2ed6066cb01c319674d37521f011122c9da7",
348
+ ],
349
+ legacyReadImplementationSha256: {
350
+ test: "398b1b05ef6493dab56e37d2edb440b1a591163148d861dda475b17941b81225",
351
+ production: "ce165bd29547d1b57070857720464495cf91c39d4d2ac34cbdf5921336abf402",
352
+ development: "5a2e6f985d692d9170e299d15908a20b96be2214f51ca81e90079d2b750d9227",
353
+ },
354
+ legacyE71ReadImplementationSha256: {
355
+ default: "fc6875171617dfe466f1e39308b8a208253b7b4adae3201f58634cfd43c30913",
356
+ test: "ee800a30b1800646209eb9099f1520d70b42033962c8296129e37ff9247ee6f7",
357
+ production: "6d8840ab038514bea52c5fee62446d4190a10770b6d85a74ab3aab6a0c993b20",
358
+ development: "1339b1d792a6cfd8e411d90ec419f8c2ab5de35edb38ff10941481fae1ade8e9",
359
+ },
360
+ },
361
+ "reddit-web": {
362
+ schemaVersion: 1,
363
+ pluginVersion: "1.4.0",
364
+ implementationSha256: "468b6032e209bcf128279c891f40d2232d6147c3fc5e14abd39c65f919fd337e",
365
+ legacyCurrentReadImplementationSha256: [],
366
+ legacyDistributionReadImplementationSha256: [
367
+ "64a4c1e78ce8565a50613f63ff605f0f57f488617ef31386b5ddce5e3db885c9",
368
+ "058987e5eac61505ca53f80d8494fb5505e697e0313e6e197a198649be7c3a3c",
369
+ "05173089ec6d555845fa5fb7b08a70bd0bf810a18882c9ecdd784a437db791c5",
370
+ "dea85e9a5bc2a134ce48769655c2e4df89d68a876012b4af3e08f40526d02512",
371
+ "16e4e48609c12d5ffdaf47e622764e06cc9b3381c6b8ceb2c9f773fa9d99bdd9",
372
+ "91cc3364ab1ccba66bd2e099f64fcccc187fde94145a8bf1eaa14f0f5533f6d7",
373
+ "646a29b320373f50ccdf9ae8b8b60d5147428f0f899a226480c2c5b009294d8a",
374
+ ].map((implementationSha256) => ({
375
+ implementationSha256,
376
+ routes: REDDIT_1_3_BINDING_ROUTE_COORDINATES,
377
+ })),
378
+ legacyReadImplementationSha256: null,
379
+ legacyE71ReadImplementationSha256: null,
380
+ },
381
+ "substack-web": {
382
+ schemaVersion: 1,
383
+ pluginVersion: "1.3.0",
384
+ implementationSha256: "3dfe5b506cef46b6534c7abd195a98df0a825a321bd0690eddae674e4592c041",
385
+ legacyCurrentReadImplementationSha256: [
386
+ "d35dda6043e224f4a2d6305a4a6aac9f05bef37ecfbfd087973394cdbe0c6811",
387
+ "2062f7c39c75ce286f26e7bd513871e5cbc2b62e2408d20df28af906f8ad5012",
388
+ "e4ba73882eb3f5bf489c88861cdd1fedd790a55af027e03ff5a07b526b8f0f5f",
389
+ "96a992faae17420dc2ec74c9d22903bb7973f69d3f0de198800d357480651269",
390
+ ],
391
+ legacyReadImplementationSha256: {
392
+ test: "99fc0287f9445b0e4d692e39201ebb8b9e9bb86308c9619c20e3bff83655243d",
393
+ production: "fb58ac6ba745b2dc4dc176e8e3b7f4d3362cd8026d3e00557f72342b76b7c519",
394
+ development: "58c2b588db7154883a154d05194cde62ff19b8e14045d10f854aacc9a4433e73",
395
+ },
396
+ legacyE71ReadImplementationSha256: {
397
+ default: "4fbfe4ae9638728c1ce48c15e0c8b2343a39c372ab01d8b5f6a75665af0df040",
398
+ test: "99fc0287f9445b0e4d692e39201ebb8b9e9bb86308c9619c20e3bff83655243d",
399
+ production: "fb58ac6ba745b2dc4dc176e8e3b7f4d3362cd8026d3e00557f72342b76b7c519",
400
+ development: "58c2b588db7154883a154d05194cde62ff19b8e14045d10f854aacc9a4433e73",
401
+ },
402
+ },
403
+ "tiktok-web": {
404
+ schemaVersion: 1,
405
+ pluginVersion: "1.3.0",
406
+ implementationSha256: "c0e36121d70d23753ce35019128be01e25d880393217332661de76e724c4169c",
407
+ legacyCurrentReadImplementationSha256: [
408
+ "59b037c542e5a32290c10a6d16a22e85a1f5b8c7b65d562fda67b6e04364f069",
409
+ "d92111d5ae92e002310ad201144b7a5cd05ad209cebac2fe2b31c3852cfca1cd",
410
+ "d6693ee40e9de8f62a09f44000e7d5005d69715baa50c3034109a381f3c53180",
411
+ "7d7f92ec9bbb5675102dd5cc0d1441334f723e66a7d9f5926e89a163c4cd2989",
412
+ "48f1e574b3e897b51a1ea90bdf26280ae4841d34eaa012e1b9a19e9b42b5e59b",
413
+ "a61661497f61933afc8fcc1f4b4a0997eae3c4c85327c842738f1acb4b7f6418",
414
+ ],
415
+ legacyReadImplementationSha256: {
416
+ test: "09f48f093e444206b5ef41fae135a1543d4cf1217d590978b9a1470ccb7a1df3",
417
+ production: "dd1b13afa9a164e40c1dce423a5808e1cd8bafddf39a83c59d5ee83c1474705f",
418
+ development: "0f70eaee8275a922d6c6fff85507caf3f5000a8c7a32a3cc01f05d643da85b0d",
419
+ },
420
+ legacyE71ReadImplementationSha256: {
421
+ default: "48caac81218d23b00b2c48ab70fc6c135ae70228c4b2db90cc4626848dab67d5",
422
+ test: "09f48f093e444206b5ef41fae135a1543d4cf1217d590978b9a1470ccb7a1df3",
423
+ production: "dd1b13afa9a164e40c1dce423a5808e1cd8bafddf39a83c59d5ee83c1474705f",
424
+ development: "0f70eaee8275a922d6c6fff85507caf3f5000a8c7a32a3cc01f05d643da85b0d",
425
+ },
426
+ },
427
+ "twitch-web": {
428
+ schemaVersion: 1,
429
+ pluginVersion: "1.1.0",
430
+ implementationSha256: "c764d5733bcbbc60d7a5a8ced6d7294bfdfa53a5371567a63804104d9199157b",
431
+ legacyCurrentReadImplementationSha256: [
432
+ "325065c463ecf8d7b5e6202780c0392c1f7556baeb4a0b33fec1d3af937e5eb9",
433
+ ],
434
+ legacyReadImplementationSha256: null,
435
+ legacyE71ReadImplementationSha256: null,
436
+ },
437
+ "whatsapp-linked-device": {
438
+ schemaVersion: 1,
439
+ pluginVersion: "1.2.0",
440
+ implementationSha256: "f5690e617cb5ef3ac06e2a35dc6833af1f47947688934fb0ccdbdf6aa2620af7",
441
+ legacyCurrentReadImplementationSha256: [
442
+ "b098d86a3fedee6c2a0f5bbd10b683af7ad4c27e4a633930d61e4ee188206a00",
443
+ "4c58bd39ab0971764bc1361a8093f5965146c81e9be6785eb2c6c324765518c3",
444
+ ],
445
+ legacyReadImplementationSha256: {
446
+ test: "7647d40e2dc89aa4562fd760b4a5616880412ffe8bc2e4e265b140e0f4515f28",
447
+ production: "6b75371d75a8924b46523338c0ea96ece7cae4680a294bf89edc002bd286e803",
448
+ development: "530e7c0705af04d5501cb2f6d3cfc9ecb9b5d3e23305d7b314fc646f7c304e39",
449
+ },
450
+ legacyE71ReadImplementationSha256: {
451
+ default: "60876cd5a4648d0734c717faf7f22c6af6481847b8ff392ba15aeadf8e1c39a4",
452
+ test: "f81d5e3ed96d780065569c8ee39606ee493cd0aa902a5619e1ccca2e82921068",
453
+ production: "57536075d4a0fc223cb9116b6e89f0103cad5c7edf552f3c372f4f66bb1c4114",
454
+ development: "5692fed6cbece0dc2a057d33f2e6d82220663f6edcac7cf636337f323c391f86",
455
+ },
456
+ },
457
+ "x-official": {
458
+ schemaVersion: 1,
459
+ pluginVersion: "1.0.0",
460
+ implementationSha256: "b861f63def7aec7c0a90415df4c3bc1b6dc9eb9724d08c90dffa23a9482066cd",
461
+ legacyCurrentReadImplementationSha256: [],
462
+ legacyReadImplementationSha256: {
463
+ test: "8650f975d15a5a6d1daefc5a202d248612d2c702287fa554d4737abbad37cb4f",
464
+ production: "4bdc46fbb5d224730ef2042239d72dcf84aabb3985c75d4a775bdec6b19e3706",
465
+ development: "e5f5982e62b415ca7b4cfe314996377295d6bbc65574ab3e1b10639649418490",
466
+ },
467
+ legacyE71ReadImplementationSha256: {
468
+ default: "b861f63def7aec7c0a90415df4c3bc1b6dc9eb9724d08c90dffa23a9482066cd",
469
+ test: "8650f975d15a5a6d1daefc5a202d248612d2c702287fa554d4737abbad37cb4f",
470
+ production: "4bdc46fbb5d224730ef2042239d72dcf84aabb3985c75d4a775bdec6b19e3706",
471
+ development: "e5f5982e62b415ca7b4cfe314996377295d6bbc65574ab3e1b10639649418490",
472
+ },
473
+ },
474
+ "x-web": {
475
+ schemaVersion: 1,
476
+ pluginVersion: "1.4.0",
477
+ implementationSha256: "8cdc6996e77125b4435586126442aae33fedf7ea27f788bddd01f39efe4f8a09",
478
+ legacyCurrentReadImplementationSha256: [
479
+ "e464e4e97ed3cbf430c2008251e45e0024508c64357325882718cba31e6bf9ea",
480
+ "03d906c92bfb5c30eb2d66e161ec67f7a081efa75e2a210a62b117df70b2af00",
481
+ "54589eaf65c7de95442dcff6a81327d0a32ec38f58560769e7b807519db10eeb",
482
+ ],
483
+ legacyReadImplementationSha256: {
484
+ test: "bcf7411c6ac01b16dc2a602b9928f8d0f9f5fd3ac0901d2ef197b72a8f763d31",
485
+ production: "ebba20c72150dcef1eb21d3a1ea02a1dee91f8654c1f33621e5217faabf2be25",
486
+ development: "c9e10ff1af5d4f102cfc73bc5b7def23a41db7cba978f516b0bc515616b6506c",
487
+ },
488
+ legacyE71ReadImplementationSha256: {
489
+ default: "e3e73a938b442339034d4484ac6984f9c6beb612fff10d01a499bf326fd1b15a",
490
+ test: "bcf7411c6ac01b16dc2a602b9928f8d0f9f5fd3ac0901d2ef197b72a8f763d31",
491
+ production: "ebba20c72150dcef1eb21d3a1ea02a1dee91f8654c1f33621e5217faabf2be25",
492
+ development: "c9e10ff1af5d4f102cfc73bc5b7def23a41db7cba978f516b0bc515616b6506c",
493
+ },
494
+ },
495
+ "youtube-web": {
496
+ schemaVersion: 1,
497
+ pluginVersion: "1.3.0",
498
+ implementationSha256: "06480c8aa798ec228e44b7b20a7b35f471400c44439b85548c3d8c513caf8c9d",
499
+ legacyCurrentReadImplementationSha256: [
500
+ "4d38cceaf871d6885abf76790b3d47b1e77b8b35dbb94bf5411d86f60202acb4",
501
+ "2c73bbfcb49ba86a7dec8b08d62b87c98c234545d8a1fd93cf02f03868dced34",
502
+ "324abc5f2776c5dc16b9f42f65c20d9781ffc3925ba9f80ca098de45e8d29407",
503
+ "e7d4f87718ebfd9e499d5a8a939acaca2f73c2bd78388e360419f9ab098a5cb0",
504
+ ],
505
+ legacyReadImplementationSha256: {
506
+ test: "02fe9106b2d620b3be3f4d0cd415ae7edebfe67997ae97c7fff8cedd4508b99f",
507
+ production: "4de654022a34ac7dd93ef913fc9e7c5f5dfa992d573d53b27cb2fa60b1a730d3",
508
+ development: "ce6527db4e1d109aa2d3d67ae81e8222568865edcba489528c30d5010137a1bd",
509
+ },
510
+ legacyE71ReadImplementationSha256: {
511
+ default: "b600cedf02a4360f4d74c2823a50d1f16b1409d879d839b1cd1dea874c721ef4",
512
+ test: "02fe9106b2d620b3be3f4d0cd415ae7edebfe67997ae97c7fff8cedd4508b99f",
513
+ production: "4de654022a34ac7dd93ef913fc9e7c5f5dfa992d573d53b27cb2fa60b1a730d3",
514
+ development: "ce6527db4e1d109aa2d3d67ae81e8222568865edcba489528c30d5010137a1bd",
515
+ },
516
+ },
517
+ } as const satisfies Readonly<Record<string, ReviewedBuiltInContractIdentityV1>>);
518
+
519
+ const SHA256_PATTERN = /^[a-f0-9]{64}$/u;
520
+ const MAXIMUM_LATER_CURRENT_IDENTITIES = 12;
521
+ const MAXIMUM_ROUTE_SCOPED_IDENTITIES = 4_096;
522
+ const MAXIMUM_LEGACY_DISTRIBUTIONS = 64;
523
+ const reviewedBuiltInContractTransports = new Set([
524
+ "provider-api",
525
+ "web-session-api",
526
+ "linked-device",
527
+ "local-cli",
528
+ ]);
529
+
530
+ export function isReviewedBuiltInContractRouteCoordinate(
531
+ value: unknown,
532
+ ): value is string {
533
+ if (typeof value !== "string") return false;
534
+ const separator = value.lastIndexOf("@");
535
+ if (separator < 1 || value.indexOf("@") !== separator) return false;
536
+ const operation = value.slice(0, separator);
537
+ const versionText = value.slice(separator + 1);
538
+ if (!isProviderPluginOperationName(operation) || !/^[1-9][0-9]*$/u.test(versionText)) {
539
+ return false;
540
+ }
541
+ const version = Number(versionText);
542
+ return Number.isSafeInteger(version)
543
+ && version >= 1
544
+ && version <= 1_000_000
545
+ && String(version) === versionText;
546
+ }
547
+
548
+ export function isReviewedBuiltInContractBindingRouteCoordinate(
549
+ value: unknown,
550
+ ): value is string {
551
+ if (typeof value !== "string") return false;
552
+ const slash = value.indexOf("/");
553
+ if (slash < 1 || value.lastIndexOf("/") !== slash) return false;
554
+ const binding = value.slice(0, slash);
555
+ const colon = binding.indexOf(":");
556
+ if (colon < 1 || binding.lastIndexOf(":") !== colon) return false;
557
+ return reviewedBuiltInContractTransports.has(binding.slice(0, colon))
558
+ && isProviderPluginSurfaceId(binding.slice(colon + 1))
559
+ && isReviewedBuiltInContractRouteCoordinate(value.slice(slash + 1));
560
+ }
561
+
562
+ for (const [pluginId, identity] of Object.entries(identities)) {
563
+ const reviewedIdentity = identity as ReviewedBuiltInContractIdentityV1;
564
+ if (!SHA256_PATTERN.test(identity.implementationSha256)) {
565
+ throw new Error(`${pluginId} current contract identity is not one lowercase SHA-256`);
566
+ }
567
+ if (
568
+ identity.legacyCurrentReadImplementationSha256.length
569
+ > MAXIMUM_LATER_CURRENT_IDENTITIES
570
+ ) {
571
+ throw new Error(`${pluginId} has too many later current contract identities`);
572
+ }
573
+ const olderIdentities = [
574
+ ...(identity.legacyReadImplementationSha256 === null
575
+ ? []
576
+ : Object.values(identity.legacyReadImplementationSha256)),
577
+ ...(identity.legacyE71ReadImplementationSha256 === null
578
+ ? []
579
+ : Object.values(identity.legacyE71ReadImplementationSha256)),
580
+ ];
581
+ const reviewedIdentities: string[] = [
582
+ identity.implementationSha256,
583
+ ...olderIdentities,
584
+ ];
585
+ for (const value of identity.legacyCurrentReadImplementationSha256) {
586
+ if (!SHA256_PATTERN.test(value)) {
587
+ throw new Error(`${pluginId} later current contract identity is not one lowercase SHA-256`);
588
+ }
589
+ if (reviewedIdentities.includes(value)) {
590
+ throw new Error(`${pluginId} later current contract identity is duplicated`);
591
+ }
592
+ reviewedIdentities.push(value);
593
+ }
594
+ const legacyDistributions =
595
+ reviewedIdentity.legacyDistributionReadImplementationSha256 ?? [];
596
+ if (
597
+ legacyDistributions.length > 0
598
+ && (
599
+ identity.legacyCurrentReadImplementationSha256.length > 0
600
+ || identity.legacyReadImplementationSha256 !== null
601
+ || identity.legacyE71ReadImplementationSha256 !== null
602
+ )
603
+ ) {
604
+ throw new Error(
605
+ `${pluginId} cannot combine global predecessor identities with route-scoped distributions`,
606
+ );
607
+ }
608
+ if (legacyDistributions.length > MAXIMUM_LEGACY_DISTRIBUTIONS) {
609
+ throw new Error(`${pluginId} has too many legacy contract distributions`);
610
+ }
611
+ for (const distribution of legacyDistributions) {
612
+ if (!SHA256_PATTERN.test(distribution.implementationSha256)) {
613
+ throw new Error(`${pluginId} legacy distribution identity is not one lowercase SHA-256`);
614
+ }
615
+ if (reviewedIdentities.includes(distribution.implementationSha256)) {
616
+ throw new Error(`${pluginId} legacy distribution identity is duplicated`);
617
+ }
618
+ if (
619
+ distribution.routes.length < 1
620
+ || distribution.routes.length > MAXIMUM_ROUTE_SCOPED_IDENTITIES
621
+ ) {
622
+ throw new Error(`${pluginId} legacy distribution route count is outside bounds`);
623
+ }
624
+ const routes = new Set<string>();
625
+ for (const route of distribution.routes) {
626
+ if (
627
+ !isReviewedBuiltInContractBindingRouteCoordinate(route)
628
+ || routes.has(route)
629
+ ) {
630
+ throw new Error(`${pluginId} has a malformed or repeated legacy distribution route`);
631
+ }
632
+ routes.add(route);
633
+ }
634
+ reviewedIdentities.push(distribution.implementationSha256);
635
+ Object.freeze(distribution.routes);
636
+ Object.freeze(distribution);
637
+ }
638
+ const routeIdentities = Object.entries(
639
+ reviewedIdentity.legacyRouteReadImplementationSha256 ?? {},
640
+ );
641
+ if (routeIdentities.length > MAXIMUM_ROUTE_SCOPED_IDENTITIES) {
642
+ throw new Error(`${pluginId} has too many route-scoped reader identities`);
643
+ }
644
+ for (const [operation, values] of routeIdentities) {
645
+ if (!isReviewedBuiltInContractRouteCoordinate(operation)) {
646
+ throw new Error(`${pluginId} has a malformed route-scoped reader identity`);
647
+ }
648
+ if (values.length < 1) {
649
+ throw new Error(`${pluginId}/${operation} has no operation-scoped reader identity`);
650
+ }
651
+ if (values.length > MAXIMUM_LATER_CURRENT_IDENTITIES) {
652
+ throw new Error(`${pluginId}/${operation} has too many operation-scoped reader identities`);
653
+ }
654
+ const operationValues = new Set<string>();
655
+ for (const value of values) {
656
+ if (!SHA256_PATTERN.test(value)) {
657
+ throw new Error(`${pluginId}/${operation} reader identity is not one lowercase SHA-256`);
658
+ }
659
+ if (reviewedIdentities.includes(value) || operationValues.has(value)) {
660
+ throw new Error(`${pluginId}/${operation} reader identity is duplicated`);
661
+ }
662
+ operationValues.add(value);
663
+ }
664
+ Object.freeze(values);
665
+ }
666
+ Object.freeze(identity.legacyCurrentReadImplementationSha256);
667
+ if (reviewedIdentity.legacyDistributionReadImplementationSha256 !== undefined) {
668
+ Object.freeze(reviewedIdentity.legacyDistributionReadImplementationSha256);
669
+ }
670
+ if (reviewedIdentity.legacyRouteReadImplementationSha256 !== undefined) {
671
+ Object.freeze(reviewedIdentity.legacyRouteReadImplementationSha256);
672
+ }
673
+ if (identity.legacyReadImplementationSha256 !== null) {
674
+ Object.freeze(identity.legacyReadImplementationSha256);
675
+ }
676
+ if (identity.legacyE71ReadImplementationSha256 !== null) {
677
+ Object.freeze(identity.legacyE71ReadImplementationSha256);
678
+ }
679
+ Object.freeze(identity);
680
+ }
681
+
682
+ export function reviewedBuiltInContractIdentity(
683
+ pluginId: string,
684
+ pluginVersion: string,
685
+ ): ReviewedBuiltInContractIdentityV1 {
686
+ const identity = reviewedBuiltInContractIdentityIfPresent(pluginId, pluginVersion);
687
+ if (identity === null) {
688
+ throw new Error(
689
+ `built-in provider plugin ${pluginId}@${pluginVersion} has no reviewed durable contract identity`,
690
+ );
691
+ }
692
+ return identity;
693
+ }
694
+
695
+ export function reviewedBuiltInContractIdentityIfPresent(
696
+ pluginId: string,
697
+ pluginVersion: string,
698
+ ): ReviewedBuiltInContractIdentityV1 | null {
699
+ const identity = identities[pluginId as keyof typeof identities];
700
+ if (identity === undefined) return null;
701
+ if (identity.pluginVersion !== pluginVersion) {
702
+ throw new Error(
703
+ `built-in provider plugin ${pluginId}@${pluginVersion} has no reviewed durable contract identity`,
704
+ );
705
+ }
706
+ return identity;
707
+ }