@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.
- package/CHANGELOG.md +458 -0
- package/LICENSE +21 -0
- package/README.md +1359 -0
- package/bunfig.toml +2 -0
- package/dist/apple-photos-client.js +704 -0
- package/dist/beeper-client.js +4602 -0
- package/dist/client.js +1605 -0
- package/dist/index-26yq8q16.js +31 -0
- package/dist/index-9t13b4k7.js +508 -0
- package/dist/index-axwm9b3v.js +5 -0
- package/dist/index-gwk7rbyj.js +30 -0
- package/dist/index.js +701 -0
- package/dist/messaging.js +1130 -0
- package/dist/omni-client.js +1406 -0
- package/dist/whatsapp-client.js +355 -0
- package/docs/imessage-direct-provider.md +106 -0
- package/docs/rental-listings.md +94 -0
- package/package.json +600 -0
- package/skills/ghostget/SKILL.md +251 -0
- package/skills/ghostget/agents/openai.yaml +4 -0
- package/skills/ghostget/references/adapter-contract.md +181 -0
- package/skills/ghostget/references/apple-photos.md +115 -0
- package/skills/ghostget/references/article-drafts.md +235 -0
- package/skills/ghostget/references/code-owned-provider-scaffold.md +134 -0
- package/skills/ghostget/references/cross-posting-video.md +139 -0
- package/skills/ghostget/references/cross-posting.md +82 -0
- package/skills/ghostget/references/derivation.md +390 -0
- package/skills/ghostget/references/hraness-social-profile-stats.json +269 -0
- package/skills/ghostget/references/install.md +66 -0
- package/skills/ghostget/references/linkedin-adapter.md +442 -0
- package/skills/ghostget/references/messaging.md +168 -0
- package/skills/ghostget/references/meta-comet-contract.md +153 -0
- package/skills/ghostget/references/platform-patterns.md +122 -0
- package/skills/ghostget/references/provider-plugins.md +496 -0
- package/skills/ghostget/references/reddit-flair.md +78 -0
- package/skills/ghostget/references/safety-and-state.md +214 -0
- package/skills/ghostget/references/settlement-and-duplicate-cleanup.md +79 -0
- package/skills/ghostget/references/social-platform-routing.md +66 -0
- package/skills/ghostget/references/social-profile-stats.md +195 -0
- package/skills/ghostget/references/social-video-platform-routing.md +89 -0
- package/skills/ghostget/references/whatsapp-adapter.md +101 -0
- package/skills/ghostget/references/x-adapter.md +332 -0
- package/skills/ghostget/references/x-ai-disclosure.md +71 -0
- package/src/apple-photos-cli.ts +639 -0
- package/src/apple-photos-client-types.ts +168 -0
- package/src/apple-photos-client.ts +201 -0
- package/src/apple-photos-contact-evidence.ts +838 -0
- package/src/apple-photos-local-source.ts +1131 -0
- package/src/args.ts +2053 -0
- package/src/article-draft-document.ts +417 -0
- package/src/article-draft-embeds.ts +123 -0
- package/src/article-draft-images.ts +214 -0
- package/src/assets/adapter-template/wrench-adapter.json +40 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.json +1500 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v1.0.0.json +129 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v1.1.0.json +207 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.0.0.json +1463 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.1.0.json +1463 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.2.0.json +1475 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.3.0.json +1488 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.json +684 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.0.0.json +581 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.1.0.json +581 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.2.0.json +581 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.3.0.json +615 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.4.0.json +684 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.5.0.json +684 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.6.0.json +684 -0
- package/src/assets/adapters/clasificados/wrench-web-adapter.json +54 -0
- package/src/assets/adapters/facebook/wrench-web-adapter.json +750 -0
- package/src/assets/adapters/facebook/wrench-web-adapter.v1.0.0.json +706 -0
- package/src/assets/adapters/facebook/wrench-web-adapter.v1.1.0.json +703 -0
- package/src/assets/adapters/facebook/wrench-web-adapter.v1.2.0.json +750 -0
- package/src/assets/adapters/facebook-group/wrench-web-adapter.json +682 -0
- package/src/assets/adapters/facebook-group/wrench-web-adapter.v1.0.0.json +583 -0
- package/src/assets/adapters/facebook-group/wrench-web-adapter.v1.1.0.json +682 -0
- package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.json +437 -0
- package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.0.0.json +383 -0
- package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.1.0.json +437 -0
- package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.1.1.json +437 -0
- package/src/assets/adapters/facebook-page/wrench-web-adapter.json +880 -0
- package/src/assets/adapters/facebook-page/wrench-web-adapter.v1.0.0.json +740 -0
- package/src/assets/adapters/facebook-page/wrench-web-adapter.v1.1.0.json +880 -0
- package/src/assets/adapters/github/wrench-web-adapter.json +69 -0
- package/src/assets/adapters/github/wrench-web-adapter.v1.0.0.json +42 -0
- package/src/assets/adapters/github/wrench-web-adapter.v1.1.0.json +69 -0
- package/src/assets/adapters/gmail/wrench-adapter.json +161 -0
- package/src/assets/adapters/gmail/wrench-adapter.v1.2.0.json +157 -0
- package/src/assets/adapters/hacker-news/wrench-web-adapter.json +315 -0
- package/src/assets/adapters/hacker-news/wrench-web-adapter.v1.0.0.json +315 -0
- package/src/assets/adapters/imessage/wrench-web-adapter.json +236 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.json +719 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.0.0.json +627 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.1.0.json +609 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.2.0.json +640 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.3.0.json +671 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.4.0.json +710 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.5.0.json +710 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.6.0.json +719 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.7.0.json +719 -0
- package/src/assets/adapters/linkedin/wrench-adapter.json +442 -0
- package/src/assets/adapters/linkedin/wrench-adapter.v0.4.0.json +124 -0
- package/src/assets/adapters/linkedin/wrench-adapter.v1.0.0.json +411 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.json +914 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.0.0.json +604 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.1.0.json +604 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.10.0.json +809 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.11.0.json +809 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.12.0.json +820 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.13.0.json +819 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.14.0.json +819 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.15.0.json +819 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.16.0.json +874 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.17.0.json +874 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.18.0.json +874 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.19.0.json +874 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.2.0.json +731 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.3.0.json +768 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.4.0.json +808 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.5.0.json +808 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.6.0.json +808 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.7.0.json +825 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.8.0.json +792 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.9.0.json +809 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.json +855 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.0.0.json +577 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.1.0.json +604 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.10.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.11.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.12.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.2.0.json +653 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.3.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.4.0.json +713 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.5.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.6.0.json +713 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.7.0.json +713 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.8.0.json +713 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.9.0.json +713 -0
- package/src/assets/adapters/substack/wrench-web-adapter.json +936 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.0.0.json +817 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.1.0.json +812 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.2.0.json +812 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.3.0.json +902 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.4.0.json +936 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.5.0.json +936 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.6.0.json +936 -0
- package/src/assets/adapters/threads/wrench-web-adapter.json +692 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.0.0.json +629 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.1.0.json +623 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.2.0.json +622 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.3.0.json +622 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.4.0.json +622 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.5.0.json +699 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.6.0.json +693 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.7.0.json +692 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.json +762 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.v1.0.0.json +681 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.v1.1.0.json +708 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.v1.2.0.json +762 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.v1.3.0.json +762 -0
- package/src/assets/adapters/twitch/wrench-web-adapter.json +42 -0
- package/src/assets/adapters/twitch/wrench-web-adapter.v1.0.0.json +42 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.json +400 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.0.0.json +355 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.1.0.json +386 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.2.0.json +386 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.3.0.json +400 -0
- package/src/assets/adapters/x/wrench-adapter.json +749 -0
- package/src/assets/adapters/x/wrench-adapter.v1.0.0.json +700 -0
- package/src/assets/adapters/x/wrench-adapter.v1.1.0.json +707 -0
- package/src/assets/adapters/x/wrench-web-adapter.json +712 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.1.0.json +579 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.10.0.json +685 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.11.0.json +712 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.12.0.json +712 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.13.0.json +712 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.2.0.json +578 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.3.0.json +610 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.4.0.json +617 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.5.0.json +634 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.6.0.json +632 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.7.0.json +649 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.8.0.json +649 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.9.0.json +683 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.json +561 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.v1.0.0.json +465 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.v1.1.0.json +519 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.v1.2.0.json +561 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.v1.3.0.json +561 -0
- package/src/assets/code-owned-provider-template/plugin.test.ts.template +54 -0
- package/src/assets/code-owned-provider-template/plugin.ts.template +102 -0
- package/src/assets/code-owned-provider-template/runtime.internal.test.ts.template +44 -0
- package/src/assets/code-owned-provider-template/runtime.ts.template +59 -0
- package/src/assets/code-owned-provider-template/wrench-adapter.json.template +33 -0
- package/src/assets/fonts/nebula-sans/LICENSE.txt +96 -0
- package/src/assets/fonts/nebula-sans/NebulaSans-Book.woff2 +0 -0
- package/src/assets/fonts/nebula-sans/PROVENANCE.md +14 -0
- package/src/assets.d.ts +4 -0
- package/src/auth.ts +1157 -0
- package/src/beeper-client-types.ts +169 -0
- package/src/beeper-client.ts +250 -0
- package/src/beeper-contact-interactions-cli.ts +180 -0
- package/src/beeper-contact-interactions.ts +1612 -0
- package/src/beeper-message-bundle-v1.ts +257 -0
- package/src/beeper-message-like-me-cli.ts +84 -0
- package/src/beeper-message-like-me-export.ts +2274 -0
- package/src/beeper-message-like-me-recovery.ts +931 -0
- package/src/beeper-message-like-me-source.ts +4034 -0
- package/src/browser-admission.ts +928 -0
- package/src/browser-snapshots.ts +260 -0
- package/src/browser.ts +3873 -0
- package/src/canonical-json.ts +60 -0
- package/src/catalog-cli.ts +638 -0
- package/src/cli.ts +208 -0
- package/src/client-types.ts +301 -0
- package/src/client.ts +2726 -0
- package/src/confirmed-write-failure.ts +44 -0
- package/src/confirmed-write-model.ts +72 -0
- package/src/confirmed-write-platform.ts +1055 -0
- package/src/confirmed-write-program.ts +224 -0
- package/src/confirmed-write-runtime.ts +16 -0
- package/src/cursor-token.ts +228 -0
- package/src/derivation-dnr-readiness.ts +367 -0
- package/src/derivation-file-chooser.ts +384 -0
- package/src/derivation-network-boundary.ts +835 -0
- package/src/derivation-network-guard.ts +782 -0
- package/src/derivation-network-proxy-helper.ts +440 -0
- package/src/derivation-network-proxy.ts +385 -0
- package/src/derive-command-helper.ts +693 -0
- package/src/derive-fixtures.ts +343 -0
- package/src/derive-review.ts +980 -0
- package/src/derive.ts +4754 -0
- package/src/fixtures/beeper-message-like-me-v1/accounts.ndjson +2 -0
- package/src/fixtures/beeper-message-like-me-v1/conversations.ndjson +1 -0
- package/src/fixtures/beeper-message-like-me-v1/manifest.json +1 -0
- package/src/fixtures/beeper-message-like-me-v1/messages.ndjson +2 -0
- package/src/fixtures/beeper-message-like-me-v1/participants.ndjson +3 -0
- package/src/fixtures/beeper-message-like-me-v1/reactions.ndjson +1 -0
- package/src/fixtures/beeper-message-like-me-v1/tombstones.ndjson +1 -0
- package/src/ghostget.ts +3672 -0
- package/src/gmail-capture.ts +1244 -0
- package/src/har-internal.ts +1242 -0
- package/src/har.ts +743 -0
- package/src/index.ts +218 -0
- package/src/invocation-read-platform.ts +55 -0
- package/src/invocation-read-program.ts +93 -0
- package/src/invocation-read-runtime.ts +11 -0
- package/src/linked-device-lifecycle-admission.ts +450 -0
- package/src/linked-device-lifecycle-journal.ts +1560 -0
- package/src/linked-device-lifecycle-runtime.ts +1602 -0
- package/src/local-cli-admission.ts +135 -0
- package/src/local-cli-contracts.ts +271 -0
- package/src/local-cli-execution.ts +98 -0
- package/src/local-cli-surface-contract.ts +1510 -0
- package/src/local-cli-tool-identity.ts +336 -0
- package/src/media/archive.ts +2325 -0
- package/src/media/args.ts +303 -0
- package/src/media/cli.ts +287 -0
- package/src/media/doctor.ts +475 -0
- package/src/media/ffmpeg.ts +1330 -0
- package/src/media/http-capture.ts +711 -0
- package/src/media/http-probe.ts +593 -0
- package/src/media/http.ts +387 -0
- package/src/media/index.ts +10 -0
- package/src/media/local-transcription.ts +613 -0
- package/src/media/lock.ts +321 -0
- package/src/media/manifest.ts +1712 -0
- package/src/media/metadata.ts +906 -0
- package/src/media/process.ts +723 -0
- package/src/media/revision.ts +166 -0
- package/src/media/runtime-closure.ts +1063 -0
- package/src/media/source-router.ts +187 -0
- package/src/media/transcriber-config.ts +1122 -0
- package/src/media/transcript-persistence-model.ts +15 -0
- package/src/media/transcript-persistence-platform.ts +89 -0
- package/src/media/transcript-persistence-program.ts +39 -0
- package/src/media/transcript-persistence-runtime.ts +24 -0
- package/src/media/transcript.ts +616 -0
- package/src/media/utf8-order.ts +30 -0
- package/src/media/whisper-cpp.ts +464 -0
- package/src/media/whisper-language.ts +58 -0
- package/src/media/yt-dlp.ts +439 -0
- package/src/message-like-me-agentic-messaging.ts +882 -0
- package/src/messaging-action-store.ts +793 -0
- package/src/messaging-runtime.ts +2136 -0
- package/src/messaging-store.ts +539 -0
- package/src/messaging-types.ts +1663 -0
- package/src/messaging.ts +334 -0
- package/src/model.ts +2671 -0
- package/src/oauth-google.ts +888 -0
- package/src/omni-client-types.ts +306 -0
- package/src/omni-client.ts +2225 -0
- package/src/omni-limits.ts +34 -0
- package/src/omni-model.ts +1614 -0
- package/src/omni-request.ts +379 -0
- package/src/omni-runtime.ts +1632 -0
- package/src/operation-deadline.ts +189 -0
- package/src/path-helper.ts +1656 -0
- package/src/pinned-https.ts +194 -0
- package/src/plan-assets.ts +832 -0
- package/src/platform-catalog.ts +1832 -0
- package/src/plugins/beeper-linked-device/plugin.ts +310 -0
- package/src/plugins/bluesky-web/plugin.ts +178 -0
- package/src/plugins/clasificados-web/plugin.ts +66 -0
- package/src/plugins/github-web/plugin.ts +80 -0
- package/src/plugins/gmail-official/plugin.ts +110 -0
- package/src/plugins/hacker-news-web/plugin.ts +52 -0
- package/src/plugins/imessage-direct/plugin.ts +195 -0
- package/src/plugins/imessage-direct/vendor/0001-fix-keep-AppleScript-send-payloads-out-of-child-argv.patch +1430 -0
- package/src/plugins/imessage-direct/vendor/0002-feat-rpc-add-exact-chat-lookup.patch +225 -0
- package/src/plugins/imessage-direct/vendor/provenance.json +80 -0
- package/src/plugins/linkedin-official/plugin.ts +84 -0
- package/src/plugins/linkedin-web/plugin.ts +412 -0
- package/src/plugins/meta-web/plugin.ts +317 -0
- package/src/plugins/reddit-web/flair.ts +492 -0
- package/src/plugins/reddit-web/plugin.ts +477 -0
- package/src/plugins/substack-web/plugin.ts +124 -0
- package/src/plugins/tiktok-web/plugin.ts +67 -0
- package/src/plugins/twitch-web/plugin.ts +54 -0
- package/src/plugins/whatsapp-linked-device/plugin.ts +105 -0
- package/src/plugins/x-official/plugin.ts +64 -0
- package/src/plugins/x-web/plugin.ts +488 -0
- package/src/plugins/youtube-web/plugin.ts +101 -0
- package/src/portable-run-recovery.ts +466 -0
- package/src/process-identity.ts +501 -0
- package/src/profile-clone-helper.ts +104 -0
- package/src/provider-catalog-views.ts +51 -0
- package/src/provider-context.ts +69 -0
- package/src/provider-contract-definitions-x.ts +45 -0
- package/src/provider-contract-definitions.ts +948 -0
- package/src/provider-contract-input-gmail.ts +176 -0
- package/src/provider-contract-input-linkedin.ts +77 -0
- package/src/provider-contract-input-x.ts +304 -0
- package/src/provider-contract-planning.ts +23 -0
- package/src/provider-contract-semantic-identity.ts +54 -0
- package/src/provider-contracts.ts +251 -0
- package/src/provider-http.ts +723 -0
- package/src/provider-plugin-auth.ts +36 -0
- package/src/provider-plugin-builtins.ts +229 -0
- package/src/provider-plugin-cleanup-barrier.ts +229 -0
- package/src/provider-plugin-cleanup-execution.ts +79 -0
- package/src/provider-plugin-cleanup-resource.ts +470 -0
- package/src/provider-plugin-contract-identity.ts +707 -0
- package/src/provider-plugin-host.ts +1972 -0
- package/src/provider-plugin-identifiers.ts +60 -0
- package/src/provider-plugin-invocation-lease.ts +889 -0
- package/src/provider-plugin-lifecycle-kernel.ts +566 -0
- package/src/provider-plugin-lifecycle.ts +1455 -0
- package/src/provider-plugin-module-analysis.ts +336 -0
- package/src/provider-plugin-package.ts +2530 -0
- package/src/provider-plugin-portable-authority.ts +106 -0
- package/src/provider-plugin-portable-catalog.ts +94 -0
- package/src/provider-plugin-portable-identity.ts +315 -0
- package/src/provider-plugin-portable-runtime.ts +2057 -0
- package/src/provider-plugin-protocol.ts +1625 -0
- package/src/provider-plugin-registry.ts +3342 -0
- package/src/provider-plugin-store.ts +2155 -0
- package/src/provider-plugin-test-fixture.ts +5 -0
- package/src/provider-plugin.ts +4907 -0
- package/src/provider-plugins.generated.ts +43 -0
- package/src/provider-plugins.ts +8 -0
- package/src/provider-subject.ts +41 -0
- package/src/provider.ts +315 -0
- package/src/providers/beeper-local-runtime.ts +5426 -0
- package/src/providers/beeper-local.ts +2739 -0
- package/src/providers/beeper-messaging.ts +462 -0
- package/src/providers/beeper-omni.ts +1159 -0
- package/src/providers/bluesky-web-runtime.ts +2895 -0
- package/src/providers/bluesky-web.ts +1614 -0
- package/src/providers/clasificados-web-runtime.ts +255 -0
- package/src/providers/clasificados-web.ts +503 -0
- package/src/providers/contact-projection.ts +301 -0
- package/src/providers/github-read-model.ts +94 -0
- package/src/providers/github-read-platform.ts +165 -0
- package/src/providers/github-read-program.ts +97 -0
- package/src/providers/github-web-runtime.ts +320 -0
- package/src/providers/github-web.ts +403 -0
- package/src/providers/gmail-api.ts +2834 -0
- package/src/providers/gmail-omni.ts +830 -0
- package/src/providers/gmail.ts +1130 -0
- package/src/providers/hacker-news-web-runtime.ts +220 -0
- package/src/providers/hacker-news-web.ts +809 -0
- package/src/providers/imessage-direct-install.ts +354 -0
- package/src/providers/imessage-direct-messaging.ts +532 -0
- package/src/providers/imessage-direct-omni.ts +400 -0
- package/src/providers/imessage-direct-runtime.ts +1498 -0
- package/src/providers/imessage-direct.ts +351 -0
- package/src/providers/instagram-video-foundations.ts +913 -0
- package/src/providers/instagram-web-profile-browser.ts +600 -0
- package/src/providers/iso-bmff.ts +338 -0
- package/src/providers/linkedin-company-platform.ts +42 -0
- package/src/providers/linkedin-company-program.ts +88 -0
- package/src/providers/linkedin-contact-failure.ts +84 -0
- package/src/providers/linkedin-contact-platform.ts +45 -0
- package/src/providers/linkedin-contact-program.ts +91 -0
- package/src/providers/linkedin-profile-activity-failure.ts +76 -0
- package/src/providers/linkedin-profile-activity-platform.ts +41 -0
- package/src/providers/linkedin-profile-activity-program.ts +67 -0
- package/src/providers/linkedin-read-failure.ts +52 -0
- package/src/providers/linkedin-self-platform.ts +53 -0
- package/src/providers/linkedin-self-program.ts +122 -0
- package/src/providers/linkedin-web-article-browser.ts +794 -0
- package/src/providers/linkedin-web-bootstrap.ts +146 -0
- package/src/providers/linkedin-web-contact.ts +830 -0
- package/src/providers/linkedin-web-feed-browser.ts +832 -0
- package/src/providers/linkedin-web-feed.ts +864 -0
- package/src/providers/linkedin-web-post-browser.ts +653 -0
- package/src/providers/linkedin-web-profile-browser.ts +683 -0
- package/src/providers/linkedin-web-runtime.ts +2388 -0
- package/src/providers/linkedin-web.ts +3305 -0
- package/src/providers/linkedin.ts +1885 -0
- package/src/providers/meta-bootstrap.ts +1043 -0
- package/src/providers/meta-facebook-group.ts +690 -0
- package/src/providers/meta-marketplace-relay.ts +747 -0
- package/src/providers/meta-omni.ts +373 -0
- package/src/providers/meta-relay-bundle.ts +1049 -0
- package/src/providers/meta-web-descriptors.ts +1740 -0
- package/src/providers/meta-web-runtime.ts +3388 -0
- package/src/providers/meta-web.ts +2931 -0
- package/src/providers/read-failure.ts +139 -0
- package/src/providers/reddit-omni.ts +462 -0
- package/src/providers/reddit-web-runtime.ts +1929 -0
- package/src/providers/reddit-web.ts +1611 -0
- package/src/providers/rental-listings.ts +460 -0
- package/src/providers/substack-omni.ts +406 -0
- package/src/providers/substack-video-mp4.ts +33 -0
- package/src/providers/substack-web-runtime.ts +2812 -0
- package/src/providers/substack-web.ts +1502 -0
- package/src/providers/tiktok-video-mp4.ts +33 -0
- package/src/providers/tiktok-web-runtime.ts +770 -0
- package/src/providers/tiktok-web.ts +2786 -0
- package/src/providers/twitch-web-runtime.ts +226 -0
- package/src/providers/twitch-web.ts +274 -0
- package/src/providers/whatsapp-account-identity.ts +55 -0
- package/src/providers/whatsapp-contact-projection-helper.ts +874 -0
- package/src/providers/whatsapp-contact-projection-protocol.ts +403 -0
- package/src/providers/whatsapp-interaction-projection-helper.ts +1452 -0
- package/src/providers/whatsapp-interaction-projection-protocol.ts +462 -0
- package/src/providers/whatsapp-message-export-projection-protocol.ts +532 -0
- package/src/providers/whatsapp-messaging.ts +132 -0
- package/src/providers/whatsapp-omni.ts +586 -0
- package/src/providers/whatsapp-web-runtime.ts +3108 -0
- package/src/providers/whatsapp-web.ts +1037 -0
- package/src/providers/x-image-provenance.ts +523 -0
- package/src/providers/x-made-with-ai.ts +106 -0
- package/src/providers/x-transaction-id.ts +413 -0
- package/src/providers/x-web-runtime.ts +3485 -0
- package/src/providers/x-web.ts +2332 -0
- package/src/providers/x.ts +1889 -0
- package/src/providers/youtube-web-runtime.ts +1400 -0
- package/src/providers/youtube-web.ts +1221 -0
- package/src/read-admission-runtime.ts +91 -0
- package/src/read-client.ts +521 -0
- package/src/read-effect-platform.ts +7 -0
- package/src/read-effect-runtime.ts +14 -0
- package/src/read-effect.ts +52 -0
- package/src/read-projection-admission.ts +866 -0
- package/src/read-projections.ts +3151 -0
- package/src/recovery.ts +1492 -0
- package/src/reviewed-template.ts +146 -0
- package/src/run-journal.ts +1272 -0
- package/src/runtime.ts +5116 -0
- package/src/scripts/generate-provider-plugin-catalog.ts +121 -0
- package/src/scripts/install-whatsapp-protocol.sh +232 -0
- package/src/scripts/recover-install-stages.ts +1491 -0
- package/src/scripts/resolve-state-home.ts +30 -0
- package/src/scripts/scaffold-web-provider.ts +973 -0
- package/src/scripts/sync-bundled-adapters.ts +695 -0
- package/src/session-secrets.ts +1183 -0
- package/src/state-helper.bunfig.toml +2 -0
- package/src/state-helper.ts +2914 -0
- package/src/storage.ts +3842 -0
- package/src/transport-policy.ts +2 -0
- package/src/usage.ts +182 -0
- package/src/version.ts +2 -0
- package/src/web-session-authentication-policy.ts +136 -0
- package/src/web-session-cleanup-admission.ts +2344 -0
- package/src/web-session-cleanup-join.ts +99 -0
- package/src/web-session-client.ts +996 -0
- package/src/web-session-contract-definitions.ts +820 -0
- package/src/web-session-contract-planning.ts +42 -0
- package/src/web-session-contracts.ts +228 -0
- package/src/web-session-cookies.ts +500 -0
- package/src/web-session-execution.ts +385 -0
- package/src/web-session-http.ts +373 -0
- package/src/web-session-read-errors.ts +19 -0
- package/src/web-session-read-runtime.ts +124 -0
- package/src/web-session-recovery.ts +818 -0
- package/src/web-session-sites.ts +58 -0
- package/src/web-session-template.ts +994 -0
- package/src/web-session.ts +93 -0
- package/src/whatsapp-client-binding.ts +21 -0
- package/src/whatsapp-client-types.ts +75 -0
- package/src/whatsapp-client.ts +395 -0
- package/src/whatsapp-export-coordinate.ts +17 -0
- package/src/whatsapp-message-bundle-v2.ts +195 -0
- package/src/whatsapp-message-like-me-cli.ts +195 -0
- package/src/whatsapp-message-like-me-export.ts +1072 -0
- package/src/whatsapp-message-like-me-source.ts +1012 -0
- package/tsconfig.json +67 -0
package/src/usage.ts
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static CLI help kept separate from the command implementation graph.
|
|
3
|
+
*
|
|
4
|
+
* The installed entrypoint imports only this module and the static release
|
|
5
|
+
* identity for a valid help request, so help remains available even when an
|
|
6
|
+
* optional provider runtime is broken.
|
|
7
|
+
*/
|
|
8
|
+
export const ghostgetUsage = `Usage:
|
|
9
|
+
ghostget --version Print the exact Ghostget release version
|
|
10
|
+
ghostget init [directory] [--json] Initialize a Markdown vault
|
|
11
|
+
ghostget inspect <url> [capture-options] Inspect capture without persistence
|
|
12
|
+
ghostget pdf <file-or-url> [pdf-options] Capture a PDF into the vault
|
|
13
|
+
ghostget refresh|check|graph [vault-options] Maintain or inspect the vault graph
|
|
14
|
+
ghostget backlinks|links <note> [vault-options] Navigate explicit note relationships
|
|
15
|
+
ghostget list [query-options] Query notes and metadata
|
|
16
|
+
ghostget index [semantic-options] Build the local semantic index
|
|
17
|
+
ghostget search <query> [semantic-options] Search the local vault
|
|
18
|
+
ghostget url-metadata backfill [metadata-options] Backfill saved URL metadata
|
|
19
|
+
ghostget context <repository-path> [context-options] Resolve scoped agent context
|
|
20
|
+
ghostget agents identity|check|audit [...] Inspect repository agent guides
|
|
21
|
+
ghostget adapters [--json] List public capture adapters
|
|
22
|
+
|
|
23
|
+
ghostget <url> [slug] [clip-options] [--auth <id>] Capture a durable clip
|
|
24
|
+
ghostget clip <url> [slug] [clip-options] [--auth <id>] Capture a durable clip
|
|
25
|
+
ghostget read <url> [clip-options] [--auth <id>] Read without persistence
|
|
26
|
+
ghostget archive <url> [media-options] Create a verified complete media archive
|
|
27
|
+
ghostget media [archive|audio|video|transcript] <url> [media-options]
|
|
28
|
+
ghostget audio|video|transcript <url> [media-options]
|
|
29
|
+
ghostget verify <archive-item-directory> [--json] Verify every archived media artifact
|
|
30
|
+
ghostget transcriber setup --engine whisper-cpp --model <file> [media-options]
|
|
31
|
+
ghostget doctor [--json] Check capture, media, auth, and action dependencies
|
|
32
|
+
ghostget capabilities [adapter] [--json] List installed semantic capabilities
|
|
33
|
+
ghostget imessage transport install --binary <absolute-reviewed-imsg-file> [--json]
|
|
34
|
+
Install only the current reviewed iMessage transport bytes
|
|
35
|
+
ghostget plugin list [--json] List trusted source and installed portable plugins
|
|
36
|
+
ghostget plugin show <id> [--json] Inspect one source or portable plugin
|
|
37
|
+
ghostget plugin scaffold --site <id> --display-name <name> --origin <https-origin>
|
|
38
|
+
--operation <semantic.action> --risk <R1|R2|R3>
|
|
39
|
+
--evidence <internal-api-evidence.json> --candidate <index>
|
|
40
|
+
--output <empty-directory> [--json]
|
|
41
|
+
ghostget plugin init <id> --display-name <name> --surface <id> --origin <https-origin>
|
|
42
|
+
--operation <semantic.action>
|
|
43
|
+
[--transport provider-api|web-session-api|linked-device]
|
|
44
|
+
[--scope-set <comma-list>...] [--coverage <comma-list>]
|
|
45
|
+
--output <empty-directory> [--json]
|
|
46
|
+
ghostget plugin check <directory> [--json] Check a source or portable plugin
|
|
47
|
+
ghostget plugin test <directory> --trust-code [--json]
|
|
48
|
+
Run secret-free portable fixtures
|
|
49
|
+
ghostget plugin pack <directory> --output <empty.ghostgetplugin-directory> [--json]
|
|
50
|
+
ghostget plugin install <package-directory> --trust-code
|
|
51
|
+
[--expected-current <bundle-sha256>] [--json]
|
|
52
|
+
ghostget plugin doctor [--json]
|
|
53
|
+
ghostget plugin disable <id> [--expected-current <bundle-sha256>] [--json]
|
|
54
|
+
ghostget plugin remove <id> [--expected-current <bundle-sha256>] --yes [--json]
|
|
55
|
+
ghostget platforms [surface-id] [--json] Inspect reviewed policy, not installed adapters
|
|
56
|
+
ghostget thread split <surface-id> --text <text|@file|-> [--json]
|
|
57
|
+
ghostget thread publish <surface-id> --adapter <id> --text <text|@file|-> --auth <id>
|
|
58
|
+
[--preview] [--headed] [--json]
|
|
59
|
+
ghostget operator doctor [--json] Compatibility alias for 'ghostget doctor'
|
|
60
|
+
|
|
61
|
+
ghostget auth list [--json]
|
|
62
|
+
ghostget auth login <id> --client-file <desktop-client.json>
|
|
63
|
+
[--no-open] [--force] [--json]
|
|
64
|
+
ghostget auth bind <id> --site <provider-surface-id> [--force] [--json]
|
|
65
|
+
ghostget auth add <id> --cookie-source <browser> [--cookie-profile <name>]
|
|
66
|
+
[--subject <provider-viewer-or-account-id>] [--force]
|
|
67
|
+
ghostget auth add <id> --cookies-file <path>
|
|
68
|
+
[--subject <provider-viewer-or-account-id>] [--force]
|
|
69
|
+
ghostget auth add <id> --browser-profile <name|path> --trust-profile-egress
|
|
70
|
+
[--browser-executable <absolute-browser-binary>]
|
|
71
|
+
[--cookie-source <browser> [--cookie-profile <name>]]
|
|
72
|
+
[--subject <provider-viewer-or-account-id>] [--force]
|
|
73
|
+
ghostget auth add <id> --oauth-provider <provider-surface-id> --token-file <path>
|
|
74
|
+
--scopes <comma-list> [--subject <provider-viewer-or-account-id>] [--force]
|
|
75
|
+
ghostget auth add <id> --linked-device <provider-surface-id> [--device-store <private-directory>]
|
|
76
|
+
[--subject <provider-account-id>] [--force]
|
|
77
|
+
ghostget auth pair <id> [--phone <international-number>]
|
|
78
|
+
ghostget auth sync <id> --once [--json] Explicitly connect and refresh the local projection
|
|
79
|
+
ghostget auth remove <id> --yes
|
|
80
|
+
|
|
81
|
+
ghostget apple-photos export-contact-evidence
|
|
82
|
+
[--library <normalized-absolute-.photoslibrary>] [--json]
|
|
83
|
+
# private cluster evidence; returned JSON has no images, crops, or templates
|
|
84
|
+
|
|
85
|
+
ghostget beeper export-message-like-me --auth <id> --output <new-absolute-directory>
|
|
86
|
+
[--limit-chats <n>] [--limit-messages <n>]
|
|
87
|
+
[--max-participants <n>] [--json]
|
|
88
|
+
ghostget beeper export-contact-interactions --auth <id>
|
|
89
|
+
[--limit-chats <n>] [--limit-messages <n>]
|
|
90
|
+
[--max-participants <n>] [--json]
|
|
91
|
+
# body-free receipt/output envelope on stdout; progress on stderr
|
|
92
|
+
|
|
93
|
+
ghostget whatsapp export-message-like-me --auth <id>
|
|
94
|
+
--output <new-absolute-directory> [--json]
|
|
95
|
+
# local wacli.db bundle only; no send, pairing, or cloud sync
|
|
96
|
+
|
|
97
|
+
ghostget messaging routes --input <-|@absolute-private-file>
|
|
98
|
+
--private-output <absolute-mode-0600-file> [--json]
|
|
99
|
+
ghostget messaging resolve --input <-|@absolute-private-file>
|
|
100
|
+
--private-output <absolute-mode-0600-file> [--json]
|
|
101
|
+
ghostget messaging context --input <-|@absolute-private-file>
|
|
102
|
+
--private-output <absolute-mode-0600-file> [--json]
|
|
103
|
+
ghostget messaging preview --input <-|@absolute-private-file>
|
|
104
|
+
--private-output <absolute-mode-0600-file> [--json]
|
|
105
|
+
ghostget messaging reconcile <run-id> [--json]
|
|
106
|
+
# capability refs and bodies never appear in argv or stdout
|
|
107
|
+
|
|
108
|
+
ghostget adapter init <id> (--origin <https-origin> | --platform <surface-id>)
|
|
109
|
+
--output <directory> [--force]
|
|
110
|
+
ghostget adapter sync-bundled [--json] Install or safely upgrade reviewed bundled manifests
|
|
111
|
+
ghostget adapter scaffold [plugin-scaffold-options] Compatibility alias for 'ghostget plugin scaffold'
|
|
112
|
+
ghostget adapter validate <manifest> [--json]
|
|
113
|
+
ghostget adapter install <manifest> [--force | --upgrade-from <prior-bundled-manifest>...]
|
|
114
|
+
ghostget adapter remove <id> --yes
|
|
115
|
+
|
|
116
|
+
ghostget derive start <id> <url> [--auth <id>] [--content none|text] [--domains <list>]
|
|
117
|
+
[--cookie-origin <exact-https-origin>...] [--fixture <media>...]
|
|
118
|
+
[--allow-remote-actions] [--headed] [--json]
|
|
119
|
+
ghostget derive list [--json]
|
|
120
|
+
ghostget derive browser <derivation-id> -- <semantic agent-browser command>
|
|
121
|
+
# bounded textbox reset: cleartext @snapshot-textbox-ref
|
|
122
|
+
# bounded upload: upload @ref|@single-file-input|@single-image-input|@single-video-input fixture:<n>...
|
|
123
|
+
# chooser upload: choose-upload @upload-control-ref fixture:<n>...
|
|
124
|
+
# terminal upload: upload-and-seal @ref|@single-file-input|@single-image-input|@single-video-input fixture:<n>...
|
|
125
|
+
ghostget derive review <derivation-id> [--review-origin <exact-https-origin>]
|
|
126
|
+
[--offset <n> --limit <1-100>] [--json]
|
|
127
|
+
ghostget derive review <derivation-id> --entry <zero-based>
|
|
128
|
+
[--review-origin <exact-https-origin>]
|
|
129
|
+
[--fixtures - | --field-names -] [--json]
|
|
130
|
+
ghostget derive finish <derivation-id> --output <directory> [--review-origin <exact-https-origin>]
|
|
131
|
+
[--platform <surface-id>] [--force] [--json]
|
|
132
|
+
ghostget derive analyze <har> --adapter <id> --origin <origin> --output <directory> [--platform <surface-id>]
|
|
133
|
+
ghostget derive discard <derivation-id> --yes
|
|
134
|
+
|
|
135
|
+
ghostget invoke <adapter> <operation> [--input <json|@file|->] [--auth <id>]
|
|
136
|
+
[--preview | --cache-only | --projection-identity-only]
|
|
137
|
+
[--duplicate-risk-of <run-id>]
|
|
138
|
+
[--headed] [--json]
|
|
139
|
+
ghostget omni read --input <json|@file|->
|
|
140
|
+
[--cache-only | --identity-only | --from-exact-cache]
|
|
141
|
+
[--headed] [--json]
|
|
142
|
+
ghostget <adapter> <operation> [invoke-options] Shorthand for 'ghostget invoke'
|
|
143
|
+
ghostget confirm <plan-digest> [--headed] [--private-output <absolute-path> --receipt-binding-output <absolute-path>] [--json]
|
|
144
|
+
ghostget plans list [--json]
|
|
145
|
+
ghostget plans cancel <plan-digest> --yes
|
|
146
|
+
ghostget runs list [--json]
|
|
147
|
+
ghostget runs show <run-id> [--private-output <absolute-path> --receipt-binding-output <absolute-path>] [--json]
|
|
148
|
+
ghostget runs reconcile <run-id> [--input <json|@file|->] [--json] Reconcile from transport-specific external evidence
|
|
149
|
+
|
|
150
|
+
Local browser admission:
|
|
151
|
+
Ghostget runs at most two locally owned browsers across processes sharing one
|
|
152
|
+
state home for fresh/profile page capture. Polling consumes the capture
|
|
153
|
+
timeout and has a 30-second budget; an in-flight bounded state helper may
|
|
154
|
+
settle later, but no browser launches after deadline revalidation. Initialize
|
|
155
|
+
a new state home serially with 'ghostget runs list --json'.
|
|
156
|
+
Explicit CDP and browser-live attachments skip this gate. Same-boot stale
|
|
157
|
+
claims stay occupied; use 'ghostget doctor --json' for the state-home path.
|
|
158
|
+
Managed provider/bootstrap and derivation sessions remain outside this cap.
|
|
159
|
+
|
|
160
|
+
Risk policy:
|
|
161
|
+
R1 authenticated reads execute directly. R2/R3 writes create an exact, five-minute
|
|
162
|
+
preview plan; run 'ghostget confirm <digest>' to execute it once. R4 is blocked.
|
|
163
|
+
Signed-in site actions use code-owned first-party API or linked-device protocol
|
|
164
|
+
contracts; browser action recipes are rejected across protected site families.
|
|
165
|
+
Ghostget never exposes arbitrary eval, request, selector, cookie, storage, or raw
|
|
166
|
+
file-transfer capabilities.
|
|
167
|
+
|
|
168
|
+
Read projections:
|
|
169
|
+
Successful subject-bound R1 results publish encrypted exact-query snapshots.
|
|
170
|
+
Repeat the invocation with --cache-only to return that snapshot without a browser
|
|
171
|
+
or provider roundtrip. --projection-identity-only returns only opaque auth/query
|
|
172
|
+
identity and the validated input hash without decoding the snapshot. A normal
|
|
173
|
+
invocation explicitly revalidates it. Unbound reads are never cached.
|
|
174
|
+
Bind the auth locator to its verified account subject before private snapshots can
|
|
175
|
+
be served.
|
|
176
|
+
|
|
177
|
+
Omni views:
|
|
178
|
+
Supported provider inbox reads materialize into encrypted Conversation, Message,
|
|
179
|
+
and Notification entities. 'omni read --cache-only' returns the merged local view
|
|
180
|
+
without provider work. A normal omni read explicitly revalidates each declared
|
|
181
|
+
source; --from-exact-cache rebuilds derivatives from exact snapshots only.
|
|
182
|
+
`;
|
package/src/version.ts
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { GhostgetAuth } from "./auth";
|
|
2
|
+
import { canonicalJson, sha256 } from "./canonical-json";
|
|
3
|
+
import type { WebSessionRecipe } from "./model";
|
|
4
|
+
|
|
5
|
+
export const PUBLIC_WEB_SESSION_AUTHORITY_KIND = "public-web-session";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Kernel-owned authority for a reviewed operation that is deliberately public.
|
|
9
|
+
* It is an invocation/cache coordinate, never an auth locator or credential.
|
|
10
|
+
*/
|
|
11
|
+
export type PublicWebSessionInvocationAuthority = {
|
|
12
|
+
readonly schemaVersion: 1;
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly kind: typeof PUBLIC_WEB_SESSION_AUTHORITY_KIND;
|
|
15
|
+
readonly subject: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type InvocationAuthority = GhostgetAuth | PublicWebSessionInvocationAuthority;
|
|
19
|
+
|
|
20
|
+
export type WebSessionAuthenticationPolicy =
|
|
21
|
+
| { readonly kind: "required" }
|
|
22
|
+
| {
|
|
23
|
+
readonly kind: "public";
|
|
24
|
+
readonly authority: PublicWebSessionInvocationAuthority;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type WebSessionAuthenticationPolicyContext = {
|
|
28
|
+
readonly adapterId: string;
|
|
29
|
+
readonly access?: "public";
|
|
30
|
+
readonly operationId: string;
|
|
31
|
+
readonly recipe: WebSessionRecipe;
|
|
32
|
+
readonly pluginSourceKind: "built-in" | "source" | "portable";
|
|
33
|
+
readonly portable: boolean;
|
|
34
|
+
readonly risk: "R1" | "R2" | "R3" | "R4";
|
|
35
|
+
readonly state: "observed" | "capture-required";
|
|
36
|
+
readonly dispatch: "none" | "single" | "thread-items" | "bounded-items";
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const requiredPolicy = Object.freeze({ kind: "required" as const });
|
|
40
|
+
|
|
41
|
+
export function publicWebSessionInvocationAuthority(
|
|
42
|
+
adapterId: string,
|
|
43
|
+
operationId: string,
|
|
44
|
+
): PublicWebSessionInvocationAuthority {
|
|
45
|
+
const coordinate = Object.freeze({
|
|
46
|
+
adapter: adapterId,
|
|
47
|
+
operation: operationId,
|
|
48
|
+
});
|
|
49
|
+
return Object.freeze({
|
|
50
|
+
schemaVersion: 1,
|
|
51
|
+
id: `public-${sha256(canonicalJson(coordinate)).slice(0, 32)}`,
|
|
52
|
+
kind: PUBLIC_WEB_SESSION_AUTHORITY_KIND,
|
|
53
|
+
subject: `public:${adapterId}:${operationId}`,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Authentication policy is code-owned. Manifests and portable plugins cannot
|
|
59
|
+
* opt into public execution by declaring data that resembles this route.
|
|
60
|
+
*/
|
|
61
|
+
export function webSessionAuthenticationPolicy(
|
|
62
|
+
context: WebSessionAuthenticationPolicyContext,
|
|
63
|
+
): WebSessionAuthenticationPolicy {
|
|
64
|
+
if (context.access === "public") {
|
|
65
|
+
if (
|
|
66
|
+
context.pluginSourceKind !== "built-in"
|
|
67
|
+
|| context.portable
|
|
68
|
+
|| context.risk !== "R1"
|
|
69
|
+
|| context.state !== "observed"
|
|
70
|
+
|| context.dispatch !== "none"
|
|
71
|
+
) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
"public web-session access requires an observed dispatch-free built-in R1 operation",
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
return Object.freeze({
|
|
77
|
+
kind: "public" as const,
|
|
78
|
+
authority: publicWebSessionInvocationAuthority(
|
|
79
|
+
context.adapterId,
|
|
80
|
+
context.operationId,
|
|
81
|
+
),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return requiredPolicy;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export function isPublicWebSessionInvocationAuthority(
|
|
88
|
+
value: InvocationAuthority,
|
|
89
|
+
): value is PublicWebSessionInvocationAuthority {
|
|
90
|
+
return value.kind === PUBLIC_WEB_SESSION_AUTHORITY_KIND;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function parsePublicWebSessionInvocationAuthority(
|
|
94
|
+
value: unknown,
|
|
95
|
+
expected: PublicWebSessionInvocationAuthority,
|
|
96
|
+
): PublicWebSessionInvocationAuthority {
|
|
97
|
+
if (
|
|
98
|
+
typeof value !== "object"
|
|
99
|
+
|| value === null
|
|
100
|
+
|| Array.isArray(value)
|
|
101
|
+
) throw new Error("public web-session invocation authority must be an object");
|
|
102
|
+
const record = value as Record<string, unknown>;
|
|
103
|
+
const keys = Object.keys(record).sort();
|
|
104
|
+
if (
|
|
105
|
+
keys.length !== 4
|
|
106
|
+
|| keys[0] !== "id"
|
|
107
|
+
|| keys[1] !== "kind"
|
|
108
|
+
|| keys[2] !== "schemaVersion"
|
|
109
|
+
|| keys[3] !== "subject"
|
|
110
|
+
|| record.schemaVersion !== 1
|
|
111
|
+
|| record.id !== expected.id
|
|
112
|
+
|| record.kind !== expected.kind
|
|
113
|
+
|| record.subject !== expected.subject
|
|
114
|
+
) {
|
|
115
|
+
throw new Error("public web-session invocation authority is malformed");
|
|
116
|
+
}
|
|
117
|
+
return expected;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function publicWebSessionAuthorityIdentityHash(
|
|
121
|
+
authority: PublicWebSessionInvocationAuthority,
|
|
122
|
+
): string {
|
|
123
|
+
return sha256(
|
|
124
|
+
`wrench-public-web-session-authority-v1\0${canonicalJson(authority)}`,
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function persistedAuthAuthority(
|
|
129
|
+
authority: InvocationAuthority,
|
|
130
|
+
message = "operation requires a persisted auth locator",
|
|
131
|
+
): GhostgetAuth {
|
|
132
|
+
if (isPublicWebSessionInvocationAuthority(authority)) {
|
|
133
|
+
throw new Error(message);
|
|
134
|
+
}
|
|
135
|
+
return authority;
|
|
136
|
+
}
|