Laravel AT Protocol Client (alpha & unstable)
1<?php
2
3namespace SocialDept\AtpClient\Client\Requests\Ozone;
4
5use SocialDept\AtpClient\Attributes\ScopedEndpoint;
6use SocialDept\AtpClient\Client\Requests\Request;
7use SocialDept\AtpClient\Data\Responses\EmptyResponse;
8use SocialDept\AtpClient\Data\Responses\Ozone\Team\ListMembersResponse;
9use SocialDept\AtpClient\Data\Responses\Ozone\Team\MemberResponse;
10use SocialDept\AtpClient\Enums\Nsid\OzoneTeam;
11use SocialDept\AtpClient\Enums\Scope;
12
13class TeamRequestClient extends Request
14{
15 /**
16 * Get team member
17 *
18 * @requires transition:generic (rpc:tools.ozone.team.getMember)
19 *
20 * @see https://docs.bsky.app/docs/api/tools-ozone-team-list-members
21 */
22 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.getMember')]
23 public function getTeamMember(string $did): MemberResponse
24 {
25 $response = $this->atp->client->get(
26 endpoint: OzoneTeam::GetMember,
27 params: compact('did')
28 );
29
30 return MemberResponse::fromArray($response->json());
31 }
32
33 /**
34 * List team members
35 *
36 * @requires transition:generic (rpc:tools.ozone.team.listMembers)
37 *
38 * @see https://docs.bsky.app/docs/api/tools-ozone-team-list-members
39 */
40 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.listMembers')]
41 public function listTeamMembers(int $limit = 50, ?string $cursor = null): ListMembersResponse
42 {
43 $response = $this->atp->client->get(
44 endpoint: OzoneTeam::ListMembers,
45 params: compact('limit', 'cursor')
46 );
47
48 return ListMembersResponse::fromArray($response->json());
49 }
50
51 /**
52 * Add team member
53 *
54 * @requires transition:generic (rpc:tools.ozone.team.addMember)
55 *
56 * @see https://docs.bsky.app/docs/api/tools-ozone-team-add-member
57 */
58 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.addMember')]
59 public function addTeamMember(string $did, string $role): MemberResponse
60 {
61 $response = $this->atp->client->post(
62 endpoint: OzoneTeam::AddMember,
63 body: compact('did', 'role')
64 );
65
66 return MemberResponse::fromArray($response->json());
67 }
68
69 /**
70 * Update team member
71 *
72 * @requires transition:generic (rpc:tools.ozone.team.updateMember)
73 *
74 * @see https://docs.bsky.app/docs/api/tools-ozone-team-update-member
75 */
76 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.updateMember')]
77 public function updateTeamMember(
78 string $did,
79 ?bool $disabled = null,
80 ?string $role = null
81 ): MemberResponse {
82 $response = $this->atp->client->post(
83 endpoint: OzoneTeam::UpdateMember,
84 body: array_filter(
85 compact('did', 'disabled', 'role'),
86 fn ($v) => ! is_null($v)
87 )
88 );
89
90 return MemberResponse::fromArray($response->json());
91 }
92
93 /**
94 * Delete team member
95 *
96 * @requires transition:generic (rpc:tools.ozone.team.deleteMember)
97 *
98 * @see https://docs.bsky.app/docs/api/tools-ozone-team-delete-member
99 */
100 #[ScopedEndpoint(Scope::TransitionGeneric, granular: 'rpc:tools.ozone.team.deleteMember')]
101 public function deleteTeamMember(string $did): EmptyResponse
102 {
103 $this->atp->client->post(
104 endpoint: OzoneTeam::DeleteMember,
105 body: compact('did')
106 );
107
108 return new EmptyResponse;
109 }
110}