test: add Bruno API collections for sync features
- Add device registration and management API tests - Add conflicts resolution API tests - Add queue management API tests - Add KOReader sync protocol tests - Add Kobo sync protocol tests
This commit is contained in:
@@ -0,0 +1,276 @@
|
||||
meta {
|
||||
name: "Bookmann KOReader Sync API"
|
||||
type: "collection"
|
||||
environment: {
|
||||
development: {
|
||||
base_url: "http://localhost:8765/api"
|
||||
},
|
||||
production: {
|
||||
base_url: "https://your-domain.com/api"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Authentication Headers
|
||||
@name("KOReader Device Token")
|
||||
@AuthorizationHeader({
|
||||
name: "Authorization",
|
||||
value: "Bearer {{koreader_device_token}}"
|
||||
})
|
||||
{
|
||||
"token": "{{koreader_device_token}}"
|
||||
}
|
||||
|
||||
# Sync Progress
|
||||
@name("Sync Progress - Single Book")
|
||||
POST {{environment.base_url}}/sync/koreader/progress
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"library_id": "optional-library-uuid",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-uuid-here",
|
||||
"title": "Book Title",
|
||||
"authors": ["Author Name"],
|
||||
"progress": 0.45,
|
||||
"percentage": 0.45,
|
||||
"last_read": "2026-01-30T20:00:00Z",
|
||||
"chapter": 3,
|
||||
"epubcfi": "epubcfi(/6/4/2:15)",
|
||||
"character": 15432
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@name("Sync Progress - Multiple Books")
|
||||
POST {{environment.base_url}}/sync/koreader/progress
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"library_id": "optional-library-uuid",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-1-uuid",
|
||||
"title": "Book One",
|
||||
"authors": ["Author One"],
|
||||
"progress": 0.25,
|
||||
"percentage": 0.25,
|
||||
"last_read": "2026-01-30T19:00:00Z",
|
||||
"chapter": 1,
|
||||
"epubcfi": "epubcfi(/6/4/2:10)"
|
||||
},
|
||||
{
|
||||
"uuid": "book-2-uuid",
|
||||
"title": "Book Two",
|
||||
"authors": ["Author Two"],
|
||||
"progress": 0.75,
|
||||
"percentage": 0.75,
|
||||
"last_read": "2026-01-30T20:00:00Z",
|
||||
"chapter": 8,
|
||||
"epubcfi": "epubcfi(/6/4/2:50)"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@name("Sync Progress - With Bookmarks")
|
||||
POST {{environment.base_url}}/sync/koreader/progress
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"library_id": "optional-library-uuid",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-uuid-here",
|
||||
"title": "Book Title",
|
||||
"authors": ["Author Name"],
|
||||
"progress": 0.45,
|
||||
"percentage": 0.45,
|
||||
"last_read": "2026-01-30T20:00:00Z",
|
||||
"bookmarks": [
|
||||
{
|
||||
"chapter": 3,
|
||||
"datetime": "2026-01-30T19:55:00Z",
|
||||
"notes": "highlighted text",
|
||||
"pos0": "epubcfi(/6/4/2:15)",
|
||||
"pos1": "epubcfi(/6/4/2:20)",
|
||||
"page": 45,
|
||||
"text": "highlighted text excerpt",
|
||||
"type": "highlight"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@name("Sync Progress - With Highlights and Notes")
|
||||
POST {{environment.base_url}}/sync/koreader/progress
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"library_id": "optional-library-uuid",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-uuid-here",
|
||||
"title": "Book Title",
|
||||
"authors": ["Author Name"],
|
||||
"progress": 0.60,
|
||||
"percentage": 0.60,
|
||||
"last_read": "2026-01-30T20:00:00Z",
|
||||
"highlights": [
|
||||
{
|
||||
"datetime": "2026-01-30T19:50:00Z",
|
||||
"text": "Important passage",
|
||||
"chapter": 4,
|
||||
"pos0": "epubcfi(/6/4/2:20)",
|
||||
"pos1": "epubcfi(/6/4/2:30)",
|
||||
"page_start": 78,
|
||||
"page_end": 79
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
{
|
||||
"datetime": "2026-01-30T19:52:00Z",
|
||||
"text": "My note about this chapter",
|
||||
"chapter": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Get Metadata
|
||||
@name("Get Book Metadata")
|
||||
GET {{environment.base_url}}/sync/koreader/metadata/{{book_uuid}}
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
|
||||
@name("Get Metadata for Multiple Books")
|
||||
GET {{environment.base_url}}/sync/koreader/metadata
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"books": ["book-uuid-1", "book-uuid-2", "book-uuid-3"]
|
||||
}
|
||||
|
||||
# Sync Bookmarks
|
||||
@name("Sync Bookmarks")
|
||||
POST {{environment.base_url}}/sync/koreader/bookmarks
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"library_id": "optional-library-uuid",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-uuid",
|
||||
"bookmarks": [
|
||||
{
|
||||
"chapter": 3,
|
||||
"datetime": "2026-01-30T19:55:00Z",
|
||||
"notes": "Marked this chapter as important",
|
||||
"pos0": "epubcfi(/6/4/2:15)",
|
||||
"pos1": "epubcfi(/6/4/2:20)",
|
||||
"page": 45,
|
||||
"text": "Important passage",
|
||||
"type": "bookmark"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@name("Sync Highlights")
|
||||
POST {{environment.base_url}}/sync/koreader/highlights
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"library_id": "optional-library-uuid",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-uuid",
|
||||
"highlights": [
|
||||
{
|
||||
"datetime": "2026-01-30T19:50:00Z",
|
||||
"text": "Important quote from book",
|
||||
"chapter": 4,
|
||||
"pos0": "epubcfi(/6/4/2:20)",
|
||||
"pos1": "epubcfi(/6/4/2:30)",
|
||||
"page_start": 78,
|
||||
"page_end": 79
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@name("Sync Notes")
|
||||
POST {{environment.base_url}}/sync/koreader/notes
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"library_id": "optional-library-uuid",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-uuid",
|
||||
"notes": [
|
||||
{
|
||||
"datetime": "2026-01-30T19:52:00Z",
|
||||
"text": "My personal note about this chapter",
|
||||
"chapter": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Get Library
|
||||
@name("Get User Library for KOReader")
|
||||
GET {{environment.base_url}}/sync/koreader/library
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
|
||||
@name("Get Library for Specific Book")
|
||||
GET {{environment.base_url}}/sync/koreader/library
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"books": ["book-uuid-1", "book-uuid-2"]
|
||||
}
|
||||
|
||||
# Immediate Sync Mode
|
||||
@name("Immediate Sync - Page Turn")
|
||||
POST {{environment.base_url}}/sync/koreader/progress
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"sync_mode": "immediate",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-uuid",
|
||||
"percentage": 0.45678,
|
||||
"chapter": 3,
|
||||
"timestamp": "2026-01-30T20:00:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Checkpoint Sync Mode
|
||||
@name("Checkpoint Sync")
|
||||
POST {{environment.base_url}}/sync/koreader/progress
|
||||
Authorization: Bearer {{koreader_device_token}}
|
||||
Content-Type: application/json
|
||||
{
|
||||
"sync_mode": "checkpoint",
|
||||
"checkpoint_id": "checkpoint-uuid",
|
||||
"since_timestamp": "2026-01-30T19:00:00Z",
|
||||
"books": [
|
||||
{
|
||||
"uuid": "book-uuid-1",
|
||||
"percentage": 0.45,
|
||||
"chapter": 3
|
||||
},
|
||||
{
|
||||
"uuid": "book-uuid-2",
|
||||
"percentage": 0.75,
|
||||
"chapter": 8
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user