Laravel AT Protocol Client (alpha & unstable)
at main 72 lines 2.5 kB view raw
1<?php 2 3namespace SocialDept\AtpClient\Client\Records; 4 5use DateTimeInterface; 6use SocialDept\AtpClient\Attributes\ScopedEndpoint; 7use SocialDept\AtpClient\Client\Requests\Request; 8use SocialDept\AtpClient\Data\Record; 9use SocialDept\AtpClient\Data\Responses\Atproto\Repo\CreateRecordResponse; 10use SocialDept\AtpClient\Data\Responses\Atproto\Repo\DeleteRecordResponse; 11use SocialDept\AtpClient\Data\StrongRef; 12use SocialDept\AtpClient\Enums\Nsid\BskyFeed; 13use SocialDept\AtpClient\Enums\Scope; 14 15class LikeRecordClient extends Request 16{ 17 /** 18 * Like a post 19 * 20 * @requires transition:generic OR (rpc:com.atproto.repo.createRecord AND repo:app.bsky.feed.like?action=create) 21 */ 22 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:com.atproto.repo.createRecord')] 23 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'repo:app.bsky.feed.like?action=create')] 24 public function create( 25 StrongRef $subject, 26 ?DateTimeInterface $createdAt = null 27 ): CreateRecordResponse { 28 $record = [ 29 '$type' => BskyFeed::Like->value, 30 'subject' => $subject->toArray(), 31 'createdAt' => ($createdAt ?? now())->format('c'), 32 ]; 33 34 return $this->atp->atproto->repo->createRecord( 35 collection: BskyFeed::Like, 36 record: $record 37 ); 38 } 39 40 /** 41 * Unlike a post (delete like record) 42 * 43 * @requires transition:generic OR (rpc:com.atproto.repo.deleteRecord AND repo:app.bsky.feed.like?action=delete) 44 */ 45 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:com.atproto.repo.deleteRecord')] 46 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'repo:app.bsky.feed.like?action=delete')] 47 public function delete(string $rkey): DeleteRecordResponse 48 { 49 return $this->atp->atproto->repo->deleteRecord( 50 collection: BskyFeed::Like, 51 rkey: $rkey 52 ); 53 } 54 55 /** 56 * Get a like record 57 * 58 * @requires transition:generic (rpc:com.atproto.repo.getRecord) 59 */ 60 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:com.atproto.repo.getRecord')] 61 public function get(string $rkey, ?string $cid = null): Record 62 { 63 $response = $this->atp->atproto->repo->getRecord( 64 repo: $this->atp->client->session()->did(), 65 collection: BskyFeed::Like, 66 rkey: $rkey, 67 cid: $cid 68 ); 69 70 return Record::fromArrayRaw($response->toArray()); 71 } 72}