atproto / atproto
Bluesky API Client for AT Protocol
Fund package maintenance!
ghostwriter
Requires
- php: ^8.4
- ext-curl: *
- ghostwriter/case-converter: ^2.0.0 || ~2.1.0
- ghostwriter/collection: ~2.0.0
- ghostwriter/config: ~1.0.0
- ghostwriter/container: ~5.0.1
- ghostwriter/event-dispatcher: ~5.0.3
- ghostwriter/http: dev-main
- ghostwriter/json: ~3.0.0
- ghostwriter/option: ~2.0.0
- ghostwriter/result: ~2.0.0
- ghostwriter/uuid: ~1.0.3
- laminas/laminas-diactoros: ~3.5.0
- php-http/curl-client: ~2.3.3
- psr/http-client: ~1.0.3
- psr/http-factory: ~1.1.0
Requires (Dev)
- ghostwriter/coding-standard: dev-main
- ghostwriter/filesystem: ~0.1.1
- mockery/mockery: ~1.6.12
- phpunit/phpunit: ~12.1.2
This package is auto-updated.
Last update: 2025-04-20 02:07:56 UTC
README
Warning
This project is not finished yet, work in progress.
Installation
You can install the package via composer:
composer require ghostwriter/atprotocol
Usage
Auth
Info
Use app passwords to securely login to Bluesky without giving full access to your account or password. https://bsky.app/settings/app-passwords
$bsky = new Bluesky(personalDataServer: 'https://bsky.social'); // create a new account on the server $sessionData = $bsky->createAccount( email: 'nathanael.esayeas@protonmail.com', handle: 'codepoet.bsky.social', password: '************' inviteCode: 'black-lives-matter', ); // if an existing session (accessed with 'bsky.session') was securely stored previously, then reuse that $bsky->resumeSession(session: $sessionData); // if no old session was available, create a new one by logging in with password (App Password) $sessionData = $bsky->login( identifier: 'codepoet.bsky.social', password: '************' ); $bsky->post(text: 'My first post using ghostwriter/atprotocol for PHP.'); // Feeds and content $bsky->getTimeline($params,$opts) $bsky->getAuthorFeed($params,$opts) $bsky->getPostThread($params,$opts) $bsky->getPost($params) $bsky->getPosts($params,$opts) $bsky->getLikes($params,$opts) $bsky->getRepostedBy($params,$opts) $bsky->post($record) $bsky->deletePost($postUri) $bsky->like($uri, cid) $bsky->deleteLike($likeUri) $bsky->repost($uri, cid) $bsky->deleteRepost($repostUri) $bsky->uploadBlob($data,$opts) // Social graph $bsky->getFollows($params,$opts) $bsky->getFollowers($params,$opts) $bsky->follow($did) $bsky->deleteFollow($followUri) // Actors $bsky->getProfile($params,$opts) $bsky->upsertProfile($updateFn) $bsky->getProfiles($params,$opts) $bsky->getSuggestions($params,$opts) $bsky->searchActors($params,$opts) $bsky->mute($did) $bsky->unmute($did) $bsky->muteModList($listUri) $bsky->unmuteModList($listUri) $bsky->blockModList($listUri) $bsky->unblockModList($listUri) // Notifications $bsky->listNotifications($params,$opts) $bsky->countUnreadNotifications($params,$opts) $bsky->updateSeenNotifications() // Identity $bsky->resolveHandle($params,$opts) $bsky->updateHandle($params,$opts) // Session management $bsky->createAccount($params) $bsky->login($params) $bsky->resumeSession($session) // Excepions // { "name": "InvalidHandle" }, // { "name": "InvalidPassword" }, // { "name": "InvalidInviteCode" }, // { "name": "HandleNotAvailable" }, // { "name": "UnsupportedDomain" }, // { "name": "UnresolvableDid" }, // { "name": "IncompatibleDidDoc" } // TODO: extract the headers from the lexicon objects
Changelog
Please see CHANGELOG.md for more information on what has changed recently.
Security
If you discover any security-related issues, please use Security Advisories
instead of using the issue tracker.
Credits
License
The BSD-4-Clause. Please see License File for more information.