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