Skip to content

Getting started

Libphpsky is a PHP library for interacting with AT Protocol.

Installation

You can install the package via composer:

composer require aazsamir/libphpsky

If you are using Laravel, you can use the libphpsky-laravel package.

composer require aazsamir/libphpsky-laravel

If you are using Symfony, you can use the libphpsky-symfony package.

composer require aazsamir/libphpsky-symfony

Usage

Get list of posts from a bsky.app user:

<?php
use Aazsamir\Libphpsky\Model\Meta\ATProtoMetaClient;

$client = ATProtoMetaClient::default();
$resolved = $client->comAtprotoIdentityResolveHandle()->query('bsky.app');
$posts = $client->appBskyFeedGetAuthorFeed()->query($resolved->did);

var_dump($posts);

Using the ATProtoMetaClient is the easiest way to interact with the AT Protocol. Note that the names of methods are coming directly from the AT Protocol definition.

com.atproto.identity.resolveHandle -> comAtprotoIdentityResolveHandle

However, you can also use plain libphpsky types:

<?php
use Aazsamir\Libphpsky\Model\Com\Atproto\Identity\ResolveHandle\ResolveHandle;
use Aazsamir\Libphpsky\Model\App\Bsky\Feed\GetAuthorFeed\GetAuthorFeed;

$resolveHandle = ResolveHandle::default();
$resolved = $resolveHandle->query('bsky.app');

$getAuthorFeed = GetAuthorFeed::default();
$posts = $getAuthorFeed->query($resolved->did);

var_dump($posts);

Authorization

Most of the ATProto methods require authorization. Default implementation handles this for you, you only need to provide ATPROTO_LOGIN and ATPROTO_PASSWORD environment variables.

You should use an app password instead of your main password. Learn more

If you want to handle authorization by yourself, you need to obtain a JWT token and pass it to the client:

<?php
use Aazsamir\Libphpsky\Model\Com\Atproto\Server\CreateSession\CreateSession;
use Aazsamir\Libphpsky\Model\Com\Atproto\Server\CreateSession\CreateSessionInput;
use Aazsamir\Libphpsky\Model\App\Bsky\Actor\GetProfile\GetProfile;
use Aazsamir\Libphpsky\Model\Meta\ATProtoMetaClient;

$createSession = CreateSession::default();
$input = CreateSessionInput::new(
    login: 'yourlogin.bsky.social',
    password: 'yourpassword',
)

$session = $createSession->procedure($input);

$getProfile = GetProfile::default();
$profile = $getProfile->withAuth($session->accessJwt)->query('bsky.app');

// or directly to meta client
$client = ATProtoMetaClient::default(token: $session->accessJwt);

You can also provide your own client implementation, to handle authorization on a different layer. See the Client section for more details.

OAuth

Libphpsky also supports OAuth authentication. See the OAuth section for more details.

Examples

You can find working examples in the repository in the examples directory.