2.4 KiB
2.4 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
PHP Composer library (lthn/php-plug-web3) providing decentralised/Web3 social media provider integrations for the Plug framework. Depends on lthn/php which supplies the base contracts, concerns, and Response class.
Commands
No build step — this is a library. Install dependencies:
composer install
No test suite or linter is configured in this repository.
Architecture
Namespace: Core\Plug\Web3\ (PSR-4 from src/)
Six providers, each under src/{Provider}/:
- Bluesky — AT Protocol, app passwords, optional custom PDS via
withPds() - Farcaster — Neynar API, managed signers via
withSigner()+withApiKey() - Lemmy — REST API v3, username/password JWT auth, federated via
forInstance() - Mastodon — REST API v1, OAuth 2.0, federated via
forInstance() - Nostr — Cryptographic key pairs (secp256k1), relay-based publishing, no HTTP auth
- Threads — Meta Graph API, OAuth 2.0, two-step container+publish flow
Each provider has up to 5 classes implementing contracts from Core\Plug\Contract\:
AuthimplementsAuthenticable— authentication/token exchangePostimplementsPostable— publishing content (publish(string $text, Collection $media, array $params))ReadimplementsReadable— fetching content (get(),me(),list())DeleteimplementsDeletable— removing contentMediaimplementsMediaUploadable— file uploads (Mastodon, Bluesky only)- Lemmy also has
CommentandCommunities(implementsListable)
Shared behaviour via concerns from Core\Plug\Concern\:
BuildsResponse— wraps API responses intoCore\Plug\Response(fromHttp(),ok(),error())UsesHttp— provides$this->http()(Laravel HTTP client)ManagesTokens—withToken(),accessToken(),getToken()
Key patterns:
- All public methods return
Core\Plug\Response - Federated providers (Mastodon, Lemmy) require instance URL set via
forInstance()before API calls Post::publish()has a uniform signature across all providers; provider-specific options go in$params- Each provider has static
externalPostUrl()andexternalAccountUrl()helpers for generating web URLs - Strict types declared in every file; PHP 8.2+ required