A social knowledge tool for researchers built on ATProto
at development 8.2 kB view raw
1import { BaseClient } from './BaseClient'; 2import { 3 GetUrlMetadataResponse, 4 GetUrlCardsResponse, 5 GetUrlCardViewResponse, 6 GetLibrariesForCardResponse, 7 GetProfileResponse, 8 GetCollectionPageResponse, 9 GetCollectionsResponse, 10 GetUrlStatusForMyLibraryResponse, 11 GetMyUrlCardsParams, 12 GetUrlCardsParams, 13 GetCollectionPageParams, 14 GetMyCollectionsParams, 15 GetCollectionsParams, 16 GetCollectionPageByAtUriParams, 17 GetProfileParams, 18 GetUrlStatusForMyLibraryParams, 19 GetLibrariesForUrlParams, 20 GetLibrariesForUrlResponse, 21 GetNoteCardsForUrlParams, 22 GetNoteCardsForUrlResponse, 23 GetCollectionsForUrlParams, 24 GetCollectionsForUrlResponse, 25} from '../types'; 26 27export class QueryClient extends BaseClient { 28 async getUrlMetadata(url: string): Promise<GetUrlMetadataResponse> { 29 const params = new URLSearchParams({ url }); 30 return this.request<GetUrlMetadataResponse>( 31 'GET', 32 `/api/cards/metadata?${params}`, 33 ); 34 } 35 36 async getMyUrlCards( 37 params?: GetMyUrlCardsParams, 38 ): Promise<GetUrlCardsResponse> { 39 const searchParams = new URLSearchParams(); 40 if (params?.page) searchParams.set('page', params.page.toString()); 41 if (params?.limit) searchParams.set('limit', params.limit.toString()); 42 if (params?.sortBy) searchParams.set('sortBy', params.sortBy); 43 if (params?.sortOrder) searchParams.set('sortOrder', params.sortOrder); 44 45 const queryString = searchParams.toString(); 46 const endpoint = queryString 47 ? `/api/cards/my?${queryString}` 48 : '/api/cards/my'; 49 50 return this.request<GetUrlCardsResponse>('GET', endpoint); 51 } 52 53 async getUserUrlCards( 54 params: GetUrlCardsParams, 55 ): Promise<GetUrlCardsResponse> { 56 const searchParams = new URLSearchParams(); 57 if (params.page) searchParams.set('page', params.page.toString()); 58 if (params.limit) searchParams.set('limit', params.limit.toString()); 59 if (params.sortBy) searchParams.set('sortBy', params.sortBy); 60 if (params.sortOrder) searchParams.set('sortOrder', params.sortOrder); 61 62 const queryString = searchParams.toString(); 63 const endpoint = queryString 64 ? `/api/cards/user/${params.identifier}?${queryString}` 65 : `/api/cards/user/${params.identifier}`; 66 67 return this.request<GetUrlCardsResponse>('GET', endpoint); 68 } 69 70 async getUrlCardView(cardId: string): Promise<GetUrlCardViewResponse> { 71 return this.request<GetUrlCardViewResponse>('GET', `/api/cards/${cardId}`); 72 } 73 74 async getLibrariesForCard( 75 cardId: string, 76 ): Promise<GetLibrariesForCardResponse> { 77 return this.request<GetLibrariesForCardResponse>( 78 'GET', 79 `/api/cards/${cardId}/libraries`, 80 ); 81 } 82 83 async getMyProfile(): Promise<GetProfileResponse> { 84 return this.request<GetProfileResponse>('GET', '/api/users/me'); 85 } 86 87 async getUserProfile(params: GetProfileParams): Promise<GetProfileResponse> { 88 return this.request<GetProfileResponse>( 89 'GET', 90 `/api/users/${params.identifier}`, 91 ); 92 } 93 94 async getCollectionPage( 95 collectionId: string, 96 params?: GetCollectionPageParams, 97 ): Promise<GetCollectionPageResponse> { 98 const searchParams = new URLSearchParams(); 99 if (params?.page) searchParams.set('page', params.page.toString()); 100 if (params?.limit) searchParams.set('limit', params.limit.toString()); 101 if (params?.sortBy) searchParams.set('sortBy', params.sortBy); 102 if (params?.sortOrder) searchParams.set('sortOrder', params.sortOrder); 103 104 const queryString = searchParams.toString(); 105 const endpoint = queryString 106 ? `/api/collections/${collectionId}?${queryString}` 107 : `/api/collections/${collectionId}`; 108 109 return this.request<GetCollectionPageResponse>('GET', endpoint); 110 } 111 112 async getCollectionPageByAtUri( 113 params: GetCollectionPageByAtUriParams, 114 ): Promise<GetCollectionPageResponse> { 115 const { handle, recordKey, ...queryParams } = params; 116 const searchParams = new URLSearchParams(); 117 118 if (queryParams.page) searchParams.set('page', queryParams.page.toString()); 119 if (queryParams.limit) 120 searchParams.set('limit', queryParams.limit.toString()); 121 if (queryParams.sortBy) searchParams.set('sortBy', queryParams.sortBy); 122 if (queryParams.sortOrder) 123 searchParams.set('sortOrder', queryParams.sortOrder); 124 125 const queryString = searchParams.toString(); 126 const endpoint = queryString 127 ? `/api/collections/at/${handle}/${recordKey}?${queryString}` 128 : `/api/collections/at/${handle}/${recordKey}`; 129 130 return this.request<GetCollectionPageResponse>('GET', endpoint); 131 } 132 133 async getMyCollections( 134 params?: GetMyCollectionsParams, 135 ): Promise<GetCollectionsResponse> { 136 const searchParams = new URLSearchParams(); 137 if (params?.page) searchParams.set('page', params.page.toString()); 138 if (params?.limit) searchParams.set('limit', params.limit.toString()); 139 if (params?.sortBy) searchParams.set('sortBy', params.sortBy); 140 if (params?.sortOrder) searchParams.set('sortOrder', params.sortOrder); 141 if (params?.searchText) searchParams.set('searchText', params.searchText); 142 143 const queryString = searchParams.toString(); 144 const endpoint = queryString 145 ? `/api/collections?${queryString}` 146 : '/api/collections'; 147 148 return this.request<GetCollectionsResponse>('GET', endpoint); 149 } 150 151 async getUserCollections( 152 params: GetCollectionsParams, 153 ): Promise<GetCollectionsResponse> { 154 const searchParams = new URLSearchParams(); 155 if (params.page) searchParams.set('page', params.page.toString()); 156 if (params.limit) searchParams.set('limit', params.limit.toString()); 157 if (params.sortBy) searchParams.set('sortBy', params.sortBy); 158 if (params.sortOrder) searchParams.set('sortOrder', params.sortOrder); 159 if (params.searchText) searchParams.set('searchText', params.searchText); 160 161 const queryString = searchParams.toString(); 162 const endpoint = queryString 163 ? `/api/collections/user/${params.identifier}?${queryString}` 164 : `/api/collections/user/${params.identifier}`; 165 166 return this.request<GetCollectionsResponse>('GET', endpoint); 167 } 168 169 async getUrlStatusForMyLibrary( 170 params: GetUrlStatusForMyLibraryParams, 171 ): Promise<GetUrlStatusForMyLibraryResponse> { 172 const searchParams = new URLSearchParams({ url: params.url }); 173 return this.request<GetUrlStatusForMyLibraryResponse>( 174 'GET', 175 `/api/cards/library/status?${searchParams}`, 176 ); 177 } 178 179 async getLibrariesForUrl( 180 params: GetLibrariesForUrlParams, 181 ): Promise<GetLibrariesForUrlResponse> { 182 const searchParams = new URLSearchParams({ url: params.url }); 183 if (params.page) searchParams.set('page', params.page.toString()); 184 if (params.limit) searchParams.set('limit', params.limit.toString()); 185 if (params.sortBy) searchParams.set('sortBy', params.sortBy); 186 if (params.sortOrder) searchParams.set('sortOrder', params.sortOrder); 187 188 return this.request<GetLibrariesForUrlResponse>( 189 'GET', 190 `/api/cards/libraries/url?${searchParams}`, 191 ); 192 } 193 194 async getNoteCardsForUrl( 195 params: GetNoteCardsForUrlParams, 196 ): Promise<GetNoteCardsForUrlResponse> { 197 const searchParams = new URLSearchParams({ url: params.url }); 198 if (params.page) searchParams.set('page', params.page.toString()); 199 if (params.limit) searchParams.set('limit', params.limit.toString()); 200 if (params.sortBy) searchParams.set('sortBy', params.sortBy); 201 if (params.sortOrder) searchParams.set('sortOrder', params.sortOrder); 202 203 return this.request<GetNoteCardsForUrlResponse>( 204 'GET', 205 `/api/cards/notes/url?${searchParams}`, 206 ); 207 } 208 209 async getCollectionsForUrl( 210 params: GetCollectionsForUrlParams, 211 ): Promise<GetCollectionsForUrlResponse> { 212 const searchParams = new URLSearchParams({ url: params.url }); 213 if (params.page) searchParams.set('page', params.page.toString()); 214 if (params.limit) searchParams.set('limit', params.limit.toString()); 215 if (params.sortBy) searchParams.set('sortBy', params.sortBy); 216 if (params.sortOrder) searchParams.set('sortOrder', params.sortOrder); 217 218 return this.request<GetCollectionsForUrlResponse>( 219 'GET', 220 `/api/collections/url?${searchParams}`, 221 ); 222 } 223}