A social knowledge tool for researchers built on ATProto
1import { BaseClient } from './BaseClient';
2import {
3 AddUrlToLibraryRequest,
4 AddUrlToLibraryResponse,
5 AddCardToLibraryRequest,
6 AddCardToLibraryResponse,
7 AddCardToCollectionRequest,
8 AddCardToCollectionResponse,
9 UpdateNoteCardRequest,
10 UpdateNoteCardResponse,
11 UpdateUrlCardAssociationsRequest,
12 UpdateUrlCardAssociationsResponse,
13 RemoveCardFromLibraryRequest,
14 RemoveCardFromLibraryResponse,
15 RemoveCardFromCollectionRequest,
16 RemoveCardFromCollectionResponse,
17} from '@semble/types';
18
19export class CardClient extends BaseClient {
20 async addUrlToLibrary(
21 request: AddUrlToLibraryRequest,
22 ): Promise<AddUrlToLibraryResponse> {
23 return this.request<AddUrlToLibraryResponse>(
24 'POST',
25 '/api/cards/library/urls',
26 request,
27 );
28 }
29
30 async addCardToLibrary(
31 request: AddCardToLibraryRequest,
32 ): Promise<AddCardToLibraryResponse> {
33 return this.request<AddCardToLibraryResponse>(
34 'POST',
35 '/api/cards/library',
36 request,
37 );
38 }
39
40 async addCardToCollection(
41 request: AddCardToCollectionRequest,
42 ): Promise<AddCardToCollectionResponse> {
43 return this.request<AddCardToCollectionResponse>(
44 'POST',
45 '/api/cards/collections',
46 request,
47 );
48 }
49
50 async updateNoteCard(
51 request: UpdateNoteCardRequest,
52 ): Promise<UpdateNoteCardResponse> {
53 return this.request<UpdateNoteCardResponse>(
54 'PUT',
55 `/api/cards/${request.cardId}/note`,
56 {
57 note: request.note,
58 },
59 );
60 }
61
62 async updateUrlCardAssociations(
63 request: UpdateUrlCardAssociationsRequest,
64 ): Promise<UpdateUrlCardAssociationsResponse> {
65 return this.request<UpdateUrlCardAssociationsResponse>(
66 'PUT',
67 '/api/cards/url/associations',
68 request,
69 );
70 }
71
72 async removeCardFromLibrary(
73 request: RemoveCardFromLibraryRequest,
74 ): Promise<RemoveCardFromLibraryResponse> {
75 return this.request<RemoveCardFromLibraryResponse>(
76 'DELETE',
77 `/api/cards/${request.cardId}/library`,
78 );
79 }
80
81 async removeCardFromCollection(
82 request: RemoveCardFromCollectionRequest,
83 ): Promise<RemoveCardFromCollectionResponse> {
84 const collectionIdsParam = request.collectionIds.join(',');
85 return this.request<RemoveCardFromCollectionResponse>(
86 'DELETE',
87 `/api/cards/${request.cardId}/collections?collectionIds=${encodeURIComponent(collectionIdsParam)}`,
88 );
89 }
90}