Laravel AT Protocol Client (alpha & unstable)
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

Update Ozone clients to return typed responses

+66 -28
+35 -14
src/Client/Requests/Ozone/ModerationRequestClient.php
··· 4 4 5 5 use SocialDept\AtpClient\Attributes\RequiresScope; 6 6 use SocialDept\AtpClient\Client\Requests\Request; 7 + use SocialDept\AtpClient\Data\Responses\Ozone\Moderation\QueryEventsResponse; 8 + use SocialDept\AtpClient\Data\Responses\Ozone\Moderation\QueryStatusesResponse; 9 + use SocialDept\AtpClient\Data\Responses\Ozone\Moderation\SearchReposResponse; 7 10 use SocialDept\AtpClient\Enums\Scope; 8 11 use SocialDept\AtpClient\Http\Response; 12 + use SocialDept\AtpSchema\Generated\Tools\Ozone\Moderation\Defs\ModEventView; 13 + use SocialDept\AtpSchema\Generated\Tools\Ozone\Moderation\Defs\ModEventViewDetail; 14 + use SocialDept\AtpSchema\Generated\Tools\Ozone\Moderation\Defs\RecordViewDetail; 15 + use SocialDept\AtpSchema\Generated\Tools\Ozone\Moderation\Defs\RepoViewDetail; 9 16 10 17 class ModerationRequestClient extends Request 11 18 { ··· 17 24 * @see https://docs.bsky.app/docs/api/tools-ozone-moderation-get-event 18 25 */ 19 26 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.moderation.getEvent')] 20 - public function getModerationEvent(int $id): Response 27 + public function getModerationEvent(int $id): ModEventViewDetail 21 28 { 22 - return $this->atp->client->get( 29 + $response = $this->atp->client->get( 23 30 endpoint: 'tools.ozone.moderation.getEvent', 24 31 params: compact('id') 25 32 ); 33 + 34 + return ModEventViewDetail::fromArray($response->json()); 26 35 } 27 36 28 37 /** ··· 57 66 * @see https://docs.bsky.app/docs/api/tools-ozone-moderation-get-record 58 67 */ 59 68 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.moderation.getRecord')] 60 - public function getRecord(string $uri, ?string $cid = null): Response 69 + public function getRecord(string $uri, ?string $cid = null): RecordViewDetail 61 70 { 62 - return $this->atp->client->get( 71 + $response = $this->atp->client->get( 63 72 endpoint: 'tools.ozone.moderation.getRecord', 64 73 params: compact('uri', 'cid') 65 74 ); 75 + 76 + return RecordViewDetail::fromArray($response->json()); 66 77 } 67 78 68 79 /** ··· 73 84 * @see https://docs.bsky.app/docs/api/tools-ozone-moderation-get-repo 74 85 */ 75 86 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.moderation.getRepo')] 76 - public function getRepo(string $did): Response 87 + public function getRepo(string $did): RepoViewDetail 77 88 { 78 - return $this->atp->client->get( 89 + $response = $this->atp->client->get( 79 90 endpoint: 'tools.ozone.moderation.getRepo', 80 91 params: compact('did') 81 92 ); 93 + 94 + return RepoViewDetail::fromArray($response->json()); 82 95 } 83 96 84 97 /** ··· 96 109 int $limit = 50, 97 110 ?string $cursor = null, 98 111 bool $sortDirection = false 99 - ): Response { 100 - return $this->atp->client->get( 112 + ): QueryEventsResponse { 113 + $response = $this->atp->client->get( 101 114 endpoint: 'tools.ozone.moderation.queryEvents', 102 115 params: array_filter( 103 116 compact('types', 'createdBy', 'subject', 'limit', 'cursor', 'sortDirection'), 104 117 fn ($v) => ! is_null($v) 105 118 ) 106 119 ); 120 + 121 + return QueryEventsResponse::fromArray($response->json()); 107 122 } 108 123 109 124 /** ··· 120 135 ?string $excludeTags = null, 121 136 int $limit = 50, 122 137 ?string $cursor = null 123 - ): Response { 124 - return $this->atp->client->get( 138 + ): QueryStatusesResponse { 139 + $response = $this->atp->client->get( 125 140 endpoint: 'tools.ozone.moderation.queryStatuses', 126 141 params: array_filter( 127 142 compact('subject', 'tags', 'excludeTags', 'limit', 'cursor'), 128 143 fn ($v) => ! is_null($v) 129 144 ) 130 145 ); 146 + 147 + return QueryStatusesResponse::fromArray($response->json()); 131 148 } 132 149 133 150 /** ··· 143 160 ?string $invitedBy = null, 144 161 int $limit = 50, 145 162 ?string $cursor = null 146 - ): Response { 147 - return $this->atp->client->get( 163 + ): SearchReposResponse { 164 + $response = $this->atp->client->get( 148 165 endpoint: 'tools.ozone.moderation.searchRepos', 149 166 params: array_filter( 150 167 compact('term', 'invitedBy', 'limit', 'cursor'), 151 168 fn ($v) => ! is_null($v) 152 169 ) 153 170 ); 171 + 172 + return SearchReposResponse::fromArray($response->json()); 154 173 } 155 174 156 175 /** ··· 166 185 string $subject, 167 186 array $subjectBlobCids = [], 168 187 ?string $createdBy = null 169 - ): Response { 170 - return $this->atp->client->post( 188 + ): ModEventView { 189 + $response = $this->atp->client->post( 171 190 endpoint: 'tools.ozone.moderation.emitEvent', 172 191 body: compact('event', 'subject', 'subjectBlobCids', 'createdBy') 173 192 ); 193 + 194 + return ModEventView::fromArray($response->json()); 174 195 } 175 196 }
+6 -3
src/Client/Requests/Ozone/ServerRequestClient.php
··· 4 4 5 5 use SocialDept\AtpClient\Attributes\RequiresScope; 6 6 use SocialDept\AtpClient\Client\Requests\Request; 7 + use SocialDept\AtpClient\Data\Responses\Ozone\Server\GetConfigResponse; 7 8 use SocialDept\AtpClient\Enums\Scope; 8 9 use SocialDept\AtpClient\Http\Response; 9 10 10 11 class ServerRequestClient extends Request 11 12 { 12 13 /** 13 - * Get blob 14 + * Get blob (returns binary data) 14 15 * 15 16 * @requires transition:generic (rpc:tools.ozone.server.getBlob) 16 17 * ··· 33 34 * @see https://docs.bsky.app/docs/api/tools-ozone-server-get-config 34 35 */ 35 36 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.server.getConfig')] 36 - public function getConfig(): Response 37 + public function getConfig(): GetConfigResponse 37 38 { 38 - return $this->atp->client->get( 39 + $response = $this->atp->client->get( 39 40 endpoint: 'tools.ozone.server.getConfig' 40 41 ); 42 + 43 + return GetConfigResponse::fromArray($response->json()); 41 44 } 42 45 }
+25 -11
src/Client/Requests/Ozone/TeamRequestClient.php
··· 4 4 5 5 use SocialDept\AtpClient\Attributes\RequiresScope; 6 6 use SocialDept\AtpClient\Client\Requests\Request; 7 + use SocialDept\AtpClient\Data\Responses\Ozone\Team\ListMembersResponse; 7 8 use SocialDept\AtpClient\Enums\Scope; 8 - use SocialDept\AtpClient\Http\Response; 9 9 10 10 class TeamRequestClient extends Request 11 11 { ··· 14 14 * 15 15 * @requires transition:generic (rpc:tools.ozone.team.getMember) 16 16 * 17 + * @return array<string, mixed> Team member object 18 + * 17 19 * @see https://docs.bsky.app/docs/api/tools-ozone-team-list-members 18 20 */ 19 21 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.getMember')] 20 - public function getTeamMember(string $did): Response 22 + public function getTeamMember(string $did): array 21 23 { 22 - return $this->atp->client->get( 24 + $response = $this->atp->client->get( 23 25 endpoint: 'tools.ozone.team.getMember', 24 26 params: compact('did') 25 27 ); 28 + 29 + return $response->json(); 26 30 } 27 31 28 32 /** ··· 33 37 * @see https://docs.bsky.app/docs/api/tools-ozone-team-list-members 34 38 */ 35 39 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.listMembers')] 36 - public function listTeamMembers(int $limit = 50, ?string $cursor = null): Response 40 + public function listTeamMembers(int $limit = 50, ?string $cursor = null): ListMembersResponse 37 41 { 38 - return $this->atp->client->get( 42 + $response = $this->atp->client->get( 39 43 endpoint: 'tools.ozone.team.listMembers', 40 44 params: compact('limit', 'cursor') 41 45 ); 46 + 47 + return ListMembersResponse::fromArray($response->json()); 42 48 } 43 49 44 50 /** 45 51 * Add team member 46 52 * 47 53 * @requires transition:generic (rpc:tools.ozone.team.addMember) 54 + * 55 + * @return array<string, mixed> Team member object 48 56 * 49 57 * @see https://docs.bsky.app/docs/api/tools-ozone-team-add-member 50 58 */ 51 59 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.addMember')] 52 - public function addTeamMember(string $did, string $role): Response 60 + public function addTeamMember(string $did, string $role): array 53 61 { 54 - return $this->atp->client->post( 62 + $response = $this->atp->client->post( 55 63 endpoint: 'tools.ozone.team.addMember', 56 64 body: compact('did', 'role') 57 65 ); 66 + 67 + return $response->json(); 58 68 } 59 69 60 70 /** ··· 62 72 * 63 73 * @requires transition:generic (rpc:tools.ozone.team.updateMember) 64 74 * 75 + * @return array<string, mixed> Team member object 76 + * 65 77 * @see https://docs.bsky.app/docs/api/tools-ozone-team-update-member 66 78 */ 67 79 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.updateMember')] ··· 69 81 string $did, 70 82 ?bool $disabled = null, 71 83 ?string $role = null 72 - ): Response { 73 - return $this->atp->client->post( 84 + ): array { 85 + $response = $this->atp->client->post( 74 86 endpoint: 'tools.ozone.team.updateMember', 75 87 body: array_filter( 76 88 compact('did', 'disabled', 'role'), 77 89 fn ($v) => ! is_null($v) 78 90 ) 79 91 ); 92 + 93 + return $response->json(); 80 94 } 81 95 82 96 /** ··· 87 101 * @see https://docs.bsky.app/docs/api/tools-ozone-team-delete-member 88 102 */ 89 103 #[RequiresScope(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.deleteMember')] 90 - public function deleteTeamMember(string $did): Response 104 + public function deleteTeamMember(string $did): void 91 105 { 92 - return $this->atp->client->post( 106 + $this->atp->client->post( 93 107 endpoint: 'tools.ozone.team.deleteMember', 94 108 body: compact('did') 95 109 );