@alpacali/papyrus-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +188 -0
- package/dist/api.d.ts +67 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +247 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +391 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/cards.d.ts +52 -0
- package/dist/commands/cards.d.ts.map +1 -0
- package/dist/commands/cards.js +189 -0
- package/dist/commands/cards.js.map +1 -0
- package/dist/commands/data.d.ts +34 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +230 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/review.d.ts +16 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +132 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/serve.d.ts +24 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +161 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/config.d.ts +37 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +94 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +114 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +52 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +141 -0
- package/dist/utils.js.map +1 -0
- package/package.json +62 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Papyrus Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# 📜 Papyrus CLI
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@papyrus/cli)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
A powerful command-line interface for [Papyrus](https://github.com/Papyrus/Papyrus) - the SRS (Spaced Repetition System) learning application.
|
|
7
|
+
|
|
8
|
+
## ✨ Features
|
|
9
|
+
|
|
10
|
+
- 🎴 **Card Management** - Create, edit, delete, and search flashcards
|
|
11
|
+
- 📚 **Interactive Review** - Terminal-based review sessions with SM-2 algorithm
|
|
12
|
+
- 📊 **Statistics** - Track your learning progress
|
|
13
|
+
- 💾 **Data Management** - Backup, restore, import, and export your data
|
|
14
|
+
- 🚀 **Server Control** - Start and manage the Papyrus API server
|
|
15
|
+
- ⚙️ **Configuration** - Flexible CLI configuration
|
|
16
|
+
|
|
17
|
+
## 📦 Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install -g @papyrus/cli
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Or use with npx:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx @papyrus/cli <command>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 🚀 Quick Start
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 1. Start the Papyrus server
|
|
33
|
+
papyrus serve
|
|
34
|
+
|
|
35
|
+
# 2. Add a card
|
|
36
|
+
papyrus card add "What is the capital of France?" "Paris"
|
|
37
|
+
|
|
38
|
+
# 3. Start reviewing
|
|
39
|
+
papyrus review
|
|
40
|
+
|
|
41
|
+
# 4. Check your stats
|
|
42
|
+
papyrus stats
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 📖 Commands
|
|
46
|
+
|
|
47
|
+
### Card Management
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# List all cards
|
|
51
|
+
papyrus card list
|
|
52
|
+
papyrus card list --tags "language" --detailed
|
|
53
|
+
|
|
54
|
+
# Show card details
|
|
55
|
+
papyrus card show <id>
|
|
56
|
+
|
|
57
|
+
# Add a new card
|
|
58
|
+
papyrus card add "Question" "Answer" --tags "tag1,tag2"
|
|
59
|
+
|
|
60
|
+
# Edit a card
|
|
61
|
+
papyrus card edit <id> --question "New question" --tags "updated"
|
|
62
|
+
|
|
63
|
+
# Delete a card
|
|
64
|
+
papyrus card delete <id>
|
|
65
|
+
papyrus card delete <id> --force
|
|
66
|
+
|
|
67
|
+
# Search cards
|
|
68
|
+
papyrus card search "keyword"
|
|
69
|
+
|
|
70
|
+
# Import from text file
|
|
71
|
+
papyrus card import cards.txt
|
|
72
|
+
|
|
73
|
+
# Export to JSON
|
|
74
|
+
papyrus card export --output cards.json
|
|
75
|
+
|
|
76
|
+
# List due cards
|
|
77
|
+
papyrus card due
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Review
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Start interactive review session
|
|
84
|
+
papyrus review
|
|
85
|
+
|
|
86
|
+
# Show review statistics
|
|
87
|
+
papyrus stats
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Data Management
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Create backup
|
|
94
|
+
papyrus data backup
|
|
95
|
+
papyrus data backup --output my-backup.db
|
|
96
|
+
|
|
97
|
+
# Restore from backup
|
|
98
|
+
papyrus data restore my-backup.db
|
|
99
|
+
|
|
100
|
+
# List backups
|
|
101
|
+
papyrus data list-backups
|
|
102
|
+
|
|
103
|
+
# Clean old backups
|
|
104
|
+
papyrus data clean-backups --keep 5
|
|
105
|
+
|
|
106
|
+
# Export data
|
|
107
|
+
papyrus data export data.json
|
|
108
|
+
|
|
109
|
+
# Import data
|
|
110
|
+
papyrus data import data.json
|
|
111
|
+
|
|
112
|
+
# Show data stats
|
|
113
|
+
papyrus data stats
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Server Management
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Start server
|
|
120
|
+
papyrus serve
|
|
121
|
+
papyrus serve --port 8080 --detach
|
|
122
|
+
|
|
123
|
+
# Check server status
|
|
124
|
+
papyrus serve status
|
|
125
|
+
|
|
126
|
+
# Stop server
|
|
127
|
+
papyrus serve stop
|
|
128
|
+
|
|
129
|
+
# Open API docs
|
|
130
|
+
papyrus serve docs
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Configuration
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Show configuration
|
|
137
|
+
papyrus config
|
|
138
|
+
|
|
139
|
+
# Get specific value
|
|
140
|
+
papyrus config --get apiUrl
|
|
141
|
+
|
|
142
|
+
# Set value
|
|
143
|
+
papyrus config --set apiUrl=http://localhost:8080
|
|
144
|
+
|
|
145
|
+
# Reset to defaults
|
|
146
|
+
papyrus config --reset
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 📝 Import Format
|
|
150
|
+
|
|
151
|
+
When importing cards from a text file, use the following format:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
Question 1 === Answer 1
|
|
155
|
+
|
|
156
|
+
Question 2 === Answer 2
|
|
157
|
+
|
|
158
|
+
# Lines starting with # are ignored
|
|
159
|
+
Question 3 === Answer 3
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## ⚙️ Configuration
|
|
163
|
+
|
|
164
|
+
Configuration is stored in `~/.papyrus/config.json`:
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"apiUrl": "http://127.0.0.1:8000",
|
|
169
|
+
"dataDir": "~/Documents/Papyrus"
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## 🔧 Requirements
|
|
174
|
+
|
|
175
|
+
- Node.js 18+
|
|
176
|
+
- Papyrus API server running
|
|
177
|
+
|
|
178
|
+
## 🤝 Contributing
|
|
179
|
+
|
|
180
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
181
|
+
|
|
182
|
+
## 📄 License
|
|
183
|
+
|
|
184
|
+
MIT License - see the [LICENSE](LICENSE) file for details.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
**Papyrus CLI** - Learn smarter, remember longer.
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - API Client
|
|
3
|
+
*/
|
|
4
|
+
import type { Card, CreateCardInput, HealthResponse, ReviewStatsResponse, SearchResponse, UpdateCardInput } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Health check
|
|
7
|
+
*/
|
|
8
|
+
export declare function healthCheck(): Promise<HealthResponse>;
|
|
9
|
+
/**
|
|
10
|
+
* Check if API is available
|
|
11
|
+
*/
|
|
12
|
+
export declare function isApiAvailable(): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* List all cards
|
|
15
|
+
*/
|
|
16
|
+
export declare function listCards(): Promise<Card[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Get a single card by ID
|
|
19
|
+
*/
|
|
20
|
+
export declare function getCard(id: string): Promise<Card>;
|
|
21
|
+
/**
|
|
22
|
+
* Create a new card
|
|
23
|
+
*/
|
|
24
|
+
export declare function createCard(input: CreateCardInput): Promise<Card>;
|
|
25
|
+
/**
|
|
26
|
+
* Update a card
|
|
27
|
+
*/
|
|
28
|
+
export declare function updateCard(id: string, input: UpdateCardInput): Promise<Card>;
|
|
29
|
+
/**
|
|
30
|
+
* Delete a card
|
|
31
|
+
*/
|
|
32
|
+
export declare function deleteCard(id: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Import cards from text
|
|
35
|
+
*/
|
|
36
|
+
export declare function importCards(content: string): Promise<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Get review queue
|
|
39
|
+
*/
|
|
40
|
+
export declare function getReviewQueue(): Promise<Card[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Get review stats
|
|
43
|
+
*/
|
|
44
|
+
export declare function getReviewStats(): Promise<ReviewStatsResponse>;
|
|
45
|
+
/**
|
|
46
|
+
* Submit review
|
|
47
|
+
*/
|
|
48
|
+
export declare function submitReview(cardId: string, quality: number): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Search cards
|
|
51
|
+
*/
|
|
52
|
+
export declare function searchCards(query: string): Promise<SearchResponse>;
|
|
53
|
+
/**
|
|
54
|
+
* Export data
|
|
55
|
+
*/
|
|
56
|
+
export declare function exportData(): Promise<unknown>;
|
|
57
|
+
/**
|
|
58
|
+
* Import data
|
|
59
|
+
*/
|
|
60
|
+
export declare function importData(data: unknown): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Create backup
|
|
63
|
+
*/
|
|
64
|
+
export declare function createBackup(): Promise<{
|
|
65
|
+
path: string;
|
|
66
|
+
}>;
|
|
67
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,IAAI,EAGJ,eAAe,EAEf,cAAc,EAEd,mBAAmB,EAEnB,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AA4CpB;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,CAQ3D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAID;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAQjD;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYvD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAQtE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUlE;AAID;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAQtD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAQnE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjF;AAID;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAUxE;AAID;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAQnD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7D;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ9D"}
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Papyrus CLI - API Client
|
|
3
|
+
*/
|
|
4
|
+
import axios, { AxiosError } from "axios";
|
|
5
|
+
import { getApiUrl } from "./config.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create configured Axios instance
|
|
8
|
+
*/
|
|
9
|
+
function createClient() {
|
|
10
|
+
return axios.create({
|
|
11
|
+
baseURL: getApiUrl(),
|
|
12
|
+
timeout: 30000,
|
|
13
|
+
headers: {
|
|
14
|
+
"Content-Type": "application/json",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handle API errors
|
|
20
|
+
*/
|
|
21
|
+
function handleError(error) {
|
|
22
|
+
if (error instanceof AxiosError) {
|
|
23
|
+
const message = error.response?.data?.detail ||
|
|
24
|
+
error.response?.data?.message ||
|
|
25
|
+
error.message;
|
|
26
|
+
const status = error.response?.status;
|
|
27
|
+
if (status === 404) {
|
|
28
|
+
throw new Error(`Not found: ${message}`);
|
|
29
|
+
}
|
|
30
|
+
else if (status === 400) {
|
|
31
|
+
throw new Error(`Bad request: ${message}`);
|
|
32
|
+
}
|
|
33
|
+
else if (status === 500) {
|
|
34
|
+
throw new Error(`Server error: ${message}`);
|
|
35
|
+
}
|
|
36
|
+
else if (error.code === "ECONNREFUSED") {
|
|
37
|
+
throw new Error("Cannot connect to Papyrus API. " +
|
|
38
|
+
"Make sure the server is running with: papyrus serve");
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`API error: ${message}`);
|
|
41
|
+
}
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Health check
|
|
46
|
+
*/
|
|
47
|
+
export async function healthCheck() {
|
|
48
|
+
const client = createClient();
|
|
49
|
+
try {
|
|
50
|
+
const response = await client.get("/api/health");
|
|
51
|
+
return response.data;
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return handleError(error);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if API is available
|
|
59
|
+
*/
|
|
60
|
+
export async function isApiAvailable() {
|
|
61
|
+
try {
|
|
62
|
+
await healthCheck();
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// ==================== Card APIs ====================
|
|
70
|
+
/**
|
|
71
|
+
* List all cards
|
|
72
|
+
*/
|
|
73
|
+
export async function listCards() {
|
|
74
|
+
const client = createClient();
|
|
75
|
+
try {
|
|
76
|
+
const response = await client.get("/api/cards");
|
|
77
|
+
return response.data.cards;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return handleError(error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get a single card by ID
|
|
85
|
+
*/
|
|
86
|
+
export async function getCard(id) {
|
|
87
|
+
const client = createClient();
|
|
88
|
+
try {
|
|
89
|
+
const cards = await listCards();
|
|
90
|
+
const card = cards.find(c => c.id === id);
|
|
91
|
+
if (!card) {
|
|
92
|
+
throw new Error(`Card not found: ${id}`);
|
|
93
|
+
}
|
|
94
|
+
return card;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return handleError(error);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a new card
|
|
102
|
+
*/
|
|
103
|
+
export async function createCard(input) {
|
|
104
|
+
const client = createClient();
|
|
105
|
+
try {
|
|
106
|
+
const response = await client.post("/api/cards", input);
|
|
107
|
+
return response.data.card;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
return handleError(error);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Update a card
|
|
115
|
+
*/
|
|
116
|
+
export async function updateCard(id, input) {
|
|
117
|
+
const client = createClient();
|
|
118
|
+
try {
|
|
119
|
+
const response = await client.patch(`/api/cards/${id}`, input);
|
|
120
|
+
return response.data.card;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
return handleError(error);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Delete a card
|
|
128
|
+
*/
|
|
129
|
+
export async function deleteCard(id) {
|
|
130
|
+
const client = createClient();
|
|
131
|
+
try {
|
|
132
|
+
await client.delete(`/api/cards/${id}`);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return handleError(error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Import cards from text
|
|
140
|
+
*/
|
|
141
|
+
export async function importCards(content) {
|
|
142
|
+
const client = createClient();
|
|
143
|
+
try {
|
|
144
|
+
const response = await client.post("/api/cards/import/txt", {
|
|
145
|
+
content,
|
|
146
|
+
});
|
|
147
|
+
return response.data.count;
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
return handleError(error);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ==================== Review APIs ====================
|
|
154
|
+
/**
|
|
155
|
+
* Get review queue
|
|
156
|
+
*/
|
|
157
|
+
export async function getReviewQueue() {
|
|
158
|
+
const client = createClient();
|
|
159
|
+
try {
|
|
160
|
+
const response = await client.get("/api/review/queue");
|
|
161
|
+
return response.data.cards;
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
return handleError(error);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get review stats
|
|
169
|
+
*/
|
|
170
|
+
export async function getReviewStats() {
|
|
171
|
+
const client = createClient();
|
|
172
|
+
try {
|
|
173
|
+
const response = await client.get("/api/review/stats");
|
|
174
|
+
return response.data;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return handleError(error);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Submit review
|
|
182
|
+
*/
|
|
183
|
+
export async function submitReview(cardId, quality) {
|
|
184
|
+
const client = createClient();
|
|
185
|
+
try {
|
|
186
|
+
await client.post(`/api/review/${cardId}`, { quality });
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
return handleError(error);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// ==================== Search APIs ====================
|
|
193
|
+
/**
|
|
194
|
+
* Search cards
|
|
195
|
+
*/
|
|
196
|
+
export async function searchCards(query) {
|
|
197
|
+
const client = createClient();
|
|
198
|
+
try {
|
|
199
|
+
const response = await client.get("/api/search", {
|
|
200
|
+
params: { q: query },
|
|
201
|
+
});
|
|
202
|
+
return response.data;
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
return handleError(error);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// ==================== Data APIs ====================
|
|
209
|
+
/**
|
|
210
|
+
* Export data
|
|
211
|
+
*/
|
|
212
|
+
export async function exportData() {
|
|
213
|
+
const client = createClient();
|
|
214
|
+
try {
|
|
215
|
+
const response = await client.get("/api/data/export");
|
|
216
|
+
return response.data;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
return handleError(error);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Import data
|
|
224
|
+
*/
|
|
225
|
+
export async function importData(data) {
|
|
226
|
+
const client = createClient();
|
|
227
|
+
try {
|
|
228
|
+
await client.post("/api/data/import", data);
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
return handleError(error);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Create backup
|
|
236
|
+
*/
|
|
237
|
+
export async function createBackup() {
|
|
238
|
+
const client = createClient();
|
|
239
|
+
try {
|
|
240
|
+
const response = await client.post("/api/data/backup");
|
|
241
|
+
return response.data;
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
return handleError(error);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|