diff --git a/README.md b/README.md index 1b52851..b11e422 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ - **Vite**: Fast build tool and dev server. - **React Router**: Dynamic routing with code splitting. - **Tailwind CSS**: Utility-first CSS framework. +- **json-server**: Mock backend server for development. ## Setup @@ -11,15 +12,42 @@ ```bash npm install ``` -2. **Start the development server**: + +2. **Install mock server dependencies** (optional): + ```bash + cd mock-server && npm install && cd .. + ``` + +3. **Configure environment variables** (optional): + Create a `.env` file in the root directory: + ``` + VITE_USE_MOCK_SERVER=true + VITE_MOCK_API_URL=http://localhost:3001 + VITE_REAL_API_URL=http://localhost:3000/api + ``` + +4. **Start the mock server** (in a separate terminal): + ```bash + npm run mock-server + ``` + +5. **Start the development server**: ```bash npm run dev ``` -3. **Build for production**: +6. **Build for production**: ```bash npm run build - ``` + ``` + +## Authentication +- **Sign In**: Click "Sign In" button in the top bar +- **Demo Credentials**: + - Username: `admin`, Password: `admin123` + - Username: `user`, Password: `user123` +- **Sign Out**: Click "Sign Out" button when logged in +- **Protected Actions**: Non-logged in users cannot add/edit/delete inventory items ## Features 1. **Shop Page**: @@ -40,8 +68,15 @@ 5. **Store Inventory Page** - This is where the admin adds more books to the store’s -inventory. The books should be viewable either in a list view or grouped by the author via the tab selection. The add to inventory CTA pops up a modal to select the new book and set its price. + This is where the admin adds more books to the store's inventory. Features include: + - View books in a table with columns: Book ID, Name, Pages, Author, Price, Actions + - **Sorting**: Click any column header to sort (ascending/descending) + - **Search**: Use the search bar to filter books + - **Edit Price**: Click edit icon to inline-edit book price + - **Delete**: Click delete icon to remove book from store inventory + - **Add Book**: Click "Add to inventory" to add a new book with price + - **Book Selection**: Searchable dropdown showing up to 7 initial books, with search functionality + - **Authorization**: Only logged-in users can perform add/edit/delete operations ## Project Structure - src/pages/: Contains page components like Home, BrowseStores, Browse, BrowseAuthors, and Inventory. @@ -63,4 +98,76 @@ Routes - /browse-authors: Browse all authors with their published book counts. +## Code Review + +### Strengths + +1. **Modern Tech Stack**: Uses React 19, Vite, and modern React Router with code splitting +2. **Component Structure**: Well-organized component structure with reusable components +3. **Custom Hooks**: Good use of custom hooks (useLibraryData) for data management +4. **Table Component**: Uses @tanstack/react-table for advanced table functionality +5. **Lazy Loading**: Implements route-based code splitting for better performance + +### Areas for Improvement + +1. **Data Fetching** + - **Issue**: Direct fetch calls in components and hooks, no centralized API layer + - **Improvement**: Created centralized API service layer (`src/services/api.js`) for better maintainability + - **Benefit**: Easier to switch between mock and real backend, consistent error handling + +2. **State Management** + - **Issue**: Local state management only, no global state for user/auth + - **Improvement**: Implemented AuthContext for global authentication state + - **Benefit**: Consistent auth state across all components, easier to manage user sessions + +3. **Error Handling** + - **Issue**: Minimal error handling, mostly console.error + - **Improvement**: Added try-catch blocks and fallback mechanisms + - **Benefit**: Better user experience, graceful degradation when API fails + +4. **Data Persistence** + - **Issue**: Changes are only in memory, not persisted + - **Improvement**: Integrated with mock server API for persistence + - **Benefit**: Data persists across page refreshes when using mock server + +5. **Environment Configuration** + - **Issue**: No environment variable configuration + - **Improvement**: Added .env support for API endpoints and configuration + - **Benefit**: Easy switching between development and production environments + +6. **Authentication** + - **Issue**: No authentication system implemented + - **Improvement**: Implemented full authentication with protected routes and actions + - **Benefit**: Secure access control, better user experience + +7. **Code Duplication** + - **Issue**: Similar fetch patterns repeated across components + - **Improvement**: Centralized data fetching logic in API service + - **Benefit**: DRY principle, easier maintenance + +8. **Type Safety** + - **Recommendation**: Consider migrating to TypeScript for better type safety + - **Benefit**: Catch errors at compile time, better IDE support + +### Security Considerations + +1. **Input Validation**: Forms now include validation for required fields +2. **Authentication**: Token-based authentication implemented +3. **Authorization**: Protected actions require authentication +4. **Recommendation**: Add CSRF protection if integrating with real backend + +### Performance + +1. **Good**: Lazy loading implemented +2. **Good**: Memoization used in useLibraryData and components +3. **Improvement**: Could add React.memo for expensive components + +### Testing + +- **Recommendation**: Add unit tests and integration tests +- **Benefit**: Ensure code quality and prevent regressions + +### Accessibility +- **Recommendation**: Add ARIA labels and improve keyboard navigation support +- **Benefit**: Better accessibility for screen readers and keyboard users diff --git a/mock-server/db.json b/mock-server/db.json new file mode 100644 index 0000000..7f53be9 --- /dev/null +++ b/mock-server/db.json @@ -0,0 +1,9700 @@ +{ + "stores": [ + { + "id": 1, + "name": "Namfix", + "address_1": "79177 Main Drive", + "address_2": null, + "city": "New Orleans", + "state": "LA", + "zip": "70142" + }, + { + "id": 2, + "name": "Treeflex", + "address_1": "9 Canary Lane", + "address_2": "Room 1896", + "city": "Atlanta", + "state": "GA", + "zip": "31165" + }, + { + "id": 3, + "name": "Holdlamis", + "address_1": "7 Kenwood Park", + "address_2": "Apt 1933", + "city": "Tulsa", + "state": "OK", + "zip": "74108" + }, + { + "id": 4, + "name": "Alphazap", + "address_1": "1 Cottonwood Road", + "address_2": "PO Box 11889", + "city": "Pasadena", + "state": "CA", + "zip": "91199" + }, + { + "id": 5, + "name": "Zaam-Dox", + "address_1": "55 Westridge Hill", + "address_2": "PO Box 77006", + "city": "Omaha", + "state": "NE", + "zip": "68117" + }, + { + "id": 6, + "name": "Sub-Ex", + "address_1": "060 School Parkway", + "address_2": null, + "city": "San Antonio", + "state": "TX", + "zip": "78240" + }, + { + "id": 7, + "name": "Tresom", + "address_1": "943 Northport Crossing", + "address_2": null, + "city": "Oklahoma City", + "state": "OK", + "zip": "73147" + }, + { + "id": 8, + "name": "Otcom", + "address_1": "22743 Colorado Hill", + "address_2": null, + "city": "Fort Wayne", + "state": "IN", + "zip": "46814" + }, + { + "id": 9, + "name": "Mat Lam Tam", + "address_1": "70 Kedzie Circle", + "address_2": null, + "city": "Shreveport", + "state": "LA", + "zip": "71161" + }, + { + "id": 10, + "name": "Konklux", + "address_1": "81 Melby Junction", + "address_2": null, + "city": "Salt Lake City", + "state": "UT", + "zip": "84145" + }, + { + "id": 11, + "name": "Hatity", + "address_1": "64933 Katie Court", + "address_2": "Apt 1916", + "city": "Lake Charles", + "state": "LA", + "zip": "70607" + }, + { + "id": 12, + "name": "Sonair", + "address_1": "0519 Mockingbird Court", + "address_2": null, + "city": "Austin", + "state": "TX", + "zip": "78710" + }, + { + "id": 13, + "name": "Voyatouch", + "address_1": "91628 Transport Crossing", + "address_2": "16th Floor", + "city": "Saint Louis", + "state": "MO", + "zip": "63180" + }, + { + "id": 14, + "name": "Regrant", + "address_1": "39996 Almo Pass", + "address_2": "Apt 288", + "city": "Dallas", + "state": "TX", + "zip": "75353" + }, + { + "id": 15, + "name": "Transcof", + "address_1": "43 Sycamore Place", + "address_2": "2nd Floor", + "city": "Athens", + "state": "GA", + "zip": "30605" + }, + { + "id": 16, + "name": "Fintone", + "address_1": "95692 Mayer Trail", + "address_2": "Apt 50", + "city": "Houston", + "state": "TX", + "zip": "77020" + }, + { + "id": 17, + "name": "Greenlam", + "address_1": "5816 Atwood Park", + "address_2": "Room 1907", + "city": "New York City", + "state": "NY", + "zip": "10292" + }, + { + "id": 18, + "name": "Namfix", + "address_1": "3 Kim Alley", + "address_2": null, + "city": "New Haven", + "state": "CT", + "zip": "06510" + }, + { + "id": 19, + "name": "Holdlamis", + "address_1": "26 Ruskin Alley", + "address_2": "Apt 1977", + "city": "Oakland", + "state": "CA", + "zip": "94616" + }, + { + "id": 20, + "name": "Tres-Zap", + "address_1": "1 Bluejay Trail", + "address_2": null, + "city": "Atlanta", + "state": "GA", + "zip": "30311" + }, + { + "id": 21, + "name": "Span", + "address_1": "5356 Carpenter Lane", + "address_2": "PO Box 75296", + "city": "Decatur", + "state": "GA", + "zip": "30089" + }, + { + "id": 22, + "name": "Prodder", + "address_1": "727 Elka Center", + "address_2": null, + "city": "Chicago", + "state": "IL", + "zip": "60697" + }, + { + "id": 23, + "name": "Ronstring", + "address_1": "64679 Talmadge Crossing", + "address_2": null, + "city": "Largo", + "state": "FL", + "zip": "34643" + }, + { + "id": 24, + "name": "Flexidy", + "address_1": "39 Schlimgen Terrace", + "address_2": "2nd Floor", + "city": "San Francisco", + "state": "CA", + "zip": "94126" + }, + { + "id": 25, + "name": "Opela", + "address_1": "47 New Castle Avenue", + "address_2": "Room 699", + "city": "Minneapolis", + "state": "MN", + "zip": "55423" + }, + { + "id": 26, + "name": "Zamit", + "address_1": "07 Thackeray Plaza", + "address_2": null, + "city": "New Orleans", + "state": "LA", + "zip": "70149" + }, + { + "id": 27, + "name": "Alphazap", + "address_1": "0 Scoville Alley", + "address_2": null, + "city": "Rochester", + "state": "NY", + "zip": "14624" + }, + { + "id": 28, + "name": "Transcof", + "address_1": "983 Ilene Lane", + "address_2": null, + "city": "Saint Louis", + "state": "MO", + "zip": "63136" + }, + { + "id": 29, + "name": "Fixflex", + "address_1": "4 Dottie Park", + "address_2": null, + "city": "Birmingham", + "state": "AL", + "zip": "35279" + }, + { + "id": 30, + "name": "Y-Solowarm", + "address_1": "21 Merrick Lane", + "address_2": "Apt 521", + "city": "Ocala", + "state": "FL", + "zip": "34479" + }, + { + "id": 31, + "name": "Pannier", + "address_1": "731 Hauk Crossing", + "address_2": "6th Floor", + "city": "Young America", + "state": "MN", + "zip": "55573" + }, + { + "id": 32, + "name": "Voyatouch", + "address_1": "179 Namekagon Trail", + "address_2": "17th Floor", + "city": "Sacramento", + "state": "CA", + "zip": "95823" + }, + { + "id": 33, + "name": "Veribet", + "address_1": "7 Hagan Crossing", + "address_2": null, + "city": "Tulsa", + "state": "OK", + "zip": "74170" + }, + { + "id": 34, + "name": "Hatity", + "address_1": "69077 Tomscot Road", + "address_2": "Suite 34", + "city": "Kansas City", + "state": "MO", + "zip": "64190" + }, + { + "id": 35, + "name": "Duobam", + "address_1": "46 Texas Plaza", + "address_2": null, + "city": "Louisville", + "state": "KY", + "zip": "40256" + }, + { + "id": 36, + "name": "Redhold", + "address_1": "89601 Russell Circle", + "address_2": null, + "city": "Santa Barbara", + "state": "CA", + "zip": "93111" + }, + { + "id": 37, + "name": "Voltsillam", + "address_1": "48696 Buena Vista Crossing", + "address_2": null, + "city": "Milwaukee", + "state": "WI", + "zip": "53234" + }, + { + "id": 38, + "name": "Domainer", + "address_1": "10351 Walton Pass", + "address_2": "Apt 1897", + "city": "Greensboro", + "state": "NC", + "zip": "27409" + }, + { + "id": 39, + "name": "Voltsillam", + "address_1": "40 Fairview Court", + "address_2": "Suite 20", + "city": "Washington", + "state": "DC", + "zip": "20566" + }, + { + "id": 40, + "name": "Temp", + "address_1": "0 Drewry Park", + "address_2": null, + "city": "Chattanooga", + "state": "TN", + "zip": "37450" + }, + { + "id": 41, + "name": "Y-Solowarm", + "address_1": "7192 Kensington Crossing", + "address_2": null, + "city": "Omaha", + "state": "NE", + "zip": "68124" + }, + { + "id": 42, + "name": "Zontrax", + "address_1": "509 Ridgeview Plaza", + "address_2": "Suite 51", + "city": "Santa Barbara", + "state": "CA", + "zip": "93106" + }, + { + "id": 43, + "name": "Overhold", + "address_1": "32 North Circle", + "address_2": null, + "city": "Palm Bay", + "state": "FL", + "zip": "32909" + }, + { + "id": 44, + "name": "Stronghold", + "address_1": "5 Sherman Plaza", + "address_2": "Room 1588", + "city": "Phoenix", + "state": "AZ", + "zip": "85020" + }, + { + "id": 45, + "name": "Tresom", + "address_1": "2567 Vidon Pass", + "address_2": "Suite 53", + "city": "Nashville", + "state": "TN", + "zip": "37210" + }, + { + "id": 46, + "name": "Regrant", + "address_1": "0 Bellgrove Plaza", + "address_2": "Room 1240", + "city": "Milwaukee", + "state": "WI", + "zip": "53263" + }, + { + "id": 47, + "name": "Fix San", + "address_1": "89859 Browning Alley", + "address_2": "12th Floor", + "city": "Seattle", + "state": "WA", + "zip": "98140" + }, + { + "id": 48, + "name": "Tres-Zap", + "address_1": "9321 Glacier Hill Junction", + "address_2": null, + "city": "Toledo", + "state": "OH", + "zip": "43635" + }, + { + "id": 49, + "name": "Matsoft", + "address_1": "80344 Novick Court", + "address_2": "Room 690", + "city": "Santa Barbara", + "state": "CA", + "zip": "93111" + }, + { + "id": 50, + "name": "Y-find", + "address_1": "491 Dovetail Pass", + "address_2": null, + "city": "Huntington", + "state": "WV", + "zip": "25770" + } + ], + "books": [ + { + "id": 1, + "author_id": 2, + "name": "eget tempus vel pede morbi porttitor", + "isbn": "247489521-3", + "language": "Northern Sotho", + "page_count": 2532, + "format": "paperback" + }, + { + "id": 2, + "author_id": 20, + "name": "eu interdum eu tincidunt in leo maecenas", + "isbn": "942012386-3", + "language": "Kashmiri", + "page_count": 257, + "format": "hardcover" + }, + { + "id": 3, + "author_id": 11, + "name": "id turpis integer aliquet massa id", + "isbn": "270878376-9", + "language": "Afrikaans", + "page_count": 1306, + "format": "paperback" + }, + { + "id": 4, + "author_id": 3, + "name": "ultrices posuere cubilia curae duis faucibus accumsan", + "isbn": "962278849-1", + "language": "Afrikaans", + "page_count": 4830, + "format": "paperback" + }, + { + "id": 5, + "author_id": 3, + "name": "donec", + "isbn": "628699639-7", + "language": "Swahili", + "page_count": 8709, + "format": "ebook" + }, + { + "id": 6, + "author_id": 17, + "name": "nec euismod scelerisque quam", + "isbn": "304913246-9", + "language": "Lao", + "page_count": 4066, + "format": "hardcover" + }, + { + "id": 7, + "author_id": 5, + "name": "integer a nibh in quis justo", + "isbn": "675047068-8", + "language": "Italian", + "page_count": 7472, + "format": "paperback" + }, + { + "id": 8, + "author_id": 11, + "name": "velit donec diam neque vestibulum", + "isbn": "507012786-1", + "language": "Punjabi", + "page_count": 9653, + "format": "hardcover" + }, + { + "id": 9, + "author_id": 4, + "name": "vulputate luctus", + "isbn": "169514402-3", + "language": "Persian", + "page_count": 4535, + "format": "ebook" + }, + { + "id": 10, + "author_id": 11, + "name": "felis sed lacus morbi sem mauris laoreet", + "isbn": "530464229-5", + "language": "Spanish", + "page_count": 7031, + "format": "ebook" + }, + { + "id": 11, + "author_id": 5, + "name": "cubilia curae donec pharetra", + "isbn": "862603498-9", + "language": "Tswana", + "page_count": 3426, + "format": "hardcover" + }, + { + "id": 12, + "author_id": 2, + "name": "quam fringilla rhoncus mauris enim leo rhoncus", + "isbn": "745054824-0", + "language": "Papiamento", + "page_count": 8401, + "format": "hardcover" + }, + { + "id": 13, + "author_id": 6, + "name": "eget eleifend luctus ultricies eu nibh", + "isbn": "767214768-4", + "language": "Swedish", + "page_count": 1945, + "format": "paperback" + }, + { + "id": 14, + "author_id": 1, + "name": "platea dictumst etiam faucibus", + "isbn": "367323506-0", + "language": "Marathi", + "page_count": 6414, + "format": "ebook" + }, + { + "id": 15, + "author_id": 10, + "name": "cras non velit nec", + "isbn": "126479747-8", + "language": "Korean", + "page_count": 8327, + "format": "paperback" + }, + { + "id": 16, + "author_id": 20, + "name": "elementum in hac habitasse platea", + "isbn": "046731905-7", + "language": "Papiamento", + "page_count": 4757, + "format": "paperback" + }, + { + "id": 17, + "author_id": 7, + "name": "ipsum integer a nibh in quis justo maecenas", + "isbn": "755845115-9", + "language": "Swati", + "page_count": 5899, + "format": "hardcover" + }, + { + "id": 18, + "author_id": 1, + "name": "aliquet at feugiat non", + "isbn": "306642013-2", + "language": "Lao", + "page_count": 1595, + "format": "ebook" + }, + { + "id": 19, + "author_id": 1, + "name": "ante ipsum primis in faucibus orci luctus et", + "isbn": "886948330-4", + "language": "Quechua", + "page_count": 1694, + "format": "hardcover" + }, + { + "id": 20, + "author_id": 2, + "name": "nullam sit amet turpis elementum ligula vehicula consequat", + "isbn": "631482105-3", + "language": "Georgian", + "page_count": 2525, + "format": "ebook" + }, + { + "id": 21, + "author_id": 20, + "name": "luctus cum sociis natoque penatibus et", + "isbn": "083797409-7", + "language": "Swati", + "page_count": 391, + "format": "ebook" + }, + { + "id": 22, + "author_id": 10, + "name": "mattis egestas metus aenean fermentum", + "isbn": "384079676-8", + "language": "Kannada", + "page_count": 6893, + "format": "hardcover" + }, + { + "id": 23, + "author_id": 6, + "name": "tempus vivamus in felis eu sapien", + "isbn": "161269709-7", + "language": "Maltese", + "page_count": 8294, + "format": "hardcover" + }, + { + "id": 24, + "author_id": 14, + "name": "nibh in quis justo maecenas rhoncus aliquam", + "isbn": "142640224-4", + "language": "Tok Pisin", + "page_count": 49, + "format": "hardcover" + }, + { + "id": 25, + "author_id": 13, + "name": "justo morbi ut odio", + "isbn": "751218835-8", + "language": "Amharic", + "page_count": 9399, + "format": "hardcover" + }, + { + "id": 26, + "author_id": 4, + "name": "erat curabitur gravida nisi at nibh in hac", + "isbn": "992568863-9", + "language": "Persian", + "page_count": 9268, + "format": "paperback" + }, + { + "id": 27, + "author_id": 9, + "name": "etiam pretium iaculis justo in hac habitasse", + "isbn": "541159677-7", + "language": "German", + "page_count": 4412, + "format": "ebook" + }, + { + "id": 28, + "author_id": 11, + "name": "aenean fermentum donec", + "isbn": "076360254-X", + "language": "Maltese", + "page_count": 36, + "format": "paperback" + }, + { + "id": 29, + "author_id": 15, + "name": "mi", + "isbn": "843448954-6", + "language": "Ndebele", + "page_count": 5720, + "format": "paperback" + }, + { + "id": 30, + "author_id": 20, + "name": "lacus morbi sem mauris laoreet ut rhoncus aliquet", + "isbn": "751178420-8", + "language": "Georgian", + "page_count": 9992, + "format": "ebook" + }, + { + "id": 31, + "author_id": 11, + "name": "rutrum at lorem integer tincidunt ante", + "isbn": "587423096-3", + "language": "Zulu", + "page_count": 9589, + "format": "hardcover" + }, + { + "id": 32, + "author_id": 15, + "name": "aliquam lacus morbi quis tortor", + "isbn": "443394473-4", + "language": "Hebrew", + "page_count": 9150, + "format": "hardcover" + }, + { + "id": 33, + "author_id": 17, + "name": "cubilia curae mauris viverra diam vitae quam suspendisse", + "isbn": "773527021-6", + "language": "Northern Sotho", + "page_count": 7703, + "format": "ebook" + }, + { + "id": 34, + "author_id": 1, + "name": "laoreet ut rhoncus aliquet pulvinar sed nisl nunc", + "isbn": "544369357-3", + "language": "Guaraní", + "page_count": 8391, + "format": "paperback" + }, + { + "id": 35, + "author_id": 15, + "name": "sed tincidunt eu felis fusce posuere", + "isbn": "413581617-7", + "language": "Armenian", + "page_count": 2884, + "format": "hardcover" + }, + { + "id": 36, + "author_id": 11, + "name": "augue vestibulum ante", + "isbn": "697537966-1", + "language": "Maltese", + "page_count": 6332, + "format": "ebook" + }, + { + "id": 37, + "author_id": 4, + "name": "accumsan tellus nisi eu orci", + "isbn": "184262573-X", + "language": "Oriya", + "page_count": 4917, + "format": "paperback" + }, + { + "id": 38, + "author_id": 1, + "name": "augue a suscipit nulla elit ac nulla sed", + "isbn": "656971012-5", + "language": "Māori", + "page_count": 2741, + "format": "hardcover" + }, + { + "id": 39, + "author_id": 19, + "name": "mattis pulvinar nulla pede ullamcorper augue a", + "isbn": "168799600-8", + "language": "Tetum", + "page_count": 5161, + "format": "ebook" + }, + { + "id": 40, + "author_id": 7, + "name": "habitasse platea dictumst etiam", + "isbn": "982200302-1", + "language": "Hebrew", + "page_count": 4464, + "format": "paperback" + }, + { + "id": 41, + "author_id": 3, + "name": "pellentesque volutpat dui maecenas tristique est et tempus", + "isbn": "381688537-3", + "language": "Belarusian", + "page_count": 6818, + "format": "ebook" + }, + { + "id": 42, + "author_id": 8, + "name": "nulla quisque arcu libero rutrum ac lobortis", + "isbn": "430521830-5", + "language": "Indonesian", + "page_count": 3170, + "format": "ebook" + }, + { + "id": 43, + "author_id": 16, + "name": "sollicitudin ut suscipit a", + "isbn": "217682586-1", + "language": "Polish", + "page_count": 3938, + "format": "paperback" + }, + { + "id": 44, + "author_id": 20, + "name": "pellentesque eget", + "isbn": "103153641-8", + "language": "Telugu", + "page_count": 6503, + "format": "paperback" + }, + { + "id": 45, + "author_id": 8, + "name": "dui nec nisi", + "isbn": "603554535-1", + "language": "Bulgarian", + "page_count": 154, + "format": "ebook" + }, + { + "id": 46, + "author_id": 6, + "name": "dictumst maecenas ut massa quis augue", + "isbn": "117712830-6", + "language": "Haitian Creole", + "page_count": 7895, + "format": "ebook" + }, + { + "id": 47, + "author_id": 1, + "name": "rutrum nulla nunc purus phasellus in", + "isbn": "697565176-0", + "language": "Finnish", + "page_count": 8128, + "format": "ebook" + }, + { + "id": 48, + "author_id": 2, + "name": "tristique fusce congue diam", + "isbn": "784370844-8", + "language": "English", + "page_count": 5394, + "format": "paperback" + }, + { + "id": 49, + "author_id": 17, + "name": "mollis molestie lorem quisque", + "isbn": "743155735-3", + "language": "West Frisian", + "page_count": 3540, + "format": "paperback" + }, + { + "id": 50, + "author_id": 15, + "name": "non", + "isbn": "901167270-4", + "language": "Azeri", + "page_count": 2647, + "format": "ebook" + }, + { + "id": 51, + "author_id": 4, + "name": "molestie lorem quisque ut", + "isbn": "912712976-4", + "language": "Dzongkha", + "page_count": 6493, + "format": "paperback" + }, + { + "id": 52, + "author_id": 15, + "name": "pretium iaculis justo in hac habitasse", + "isbn": "514955895-8", + "language": "Albanian", + "page_count": 3489, + "format": "ebook" + }, + { + "id": 53, + "author_id": 13, + "name": "semper porta volutpat quam pede lobortis", + "isbn": "335229186-1", + "language": "Quechua", + "page_count": 9228, + "format": "hardcover" + }, + { + "id": 54, + "author_id": 9, + "name": "odio consequat varius", + "isbn": "938415563-2", + "language": "Georgian", + "page_count": 1977, + "format": "ebook" + }, + { + "id": 55, + "author_id": 5, + "name": "vivamus tortor duis mattis egestas metus", + "isbn": "069940528-9", + "language": "Punjabi", + "page_count": 9679, + "format": "paperback" + }, + { + "id": 56, + "author_id": 9, + "name": "eget elit", + "isbn": "095380333-3", + "language": "Thai", + "page_count": 7099, + "format": "paperback" + }, + { + "id": 57, + "author_id": 16, + "name": "quisque id justo sit amet sapien", + "isbn": "294550923-7", + "language": "Catalan", + "page_count": 8988, + "format": "paperback" + }, + { + "id": 58, + "author_id": 3, + "name": "lorem", + "isbn": "295450268-1", + "language": "Dari", + "page_count": 5172, + "format": "ebook" + }, + { + "id": 59, + "author_id": 12, + "name": "justo pellentesque viverra pede ac diam cras", + "isbn": "983376880-6", + "language": "West Frisian", + "page_count": 2915, + "format": "hardcover" + }, + { + "id": 60, + "author_id": 15, + "name": "nisl aenean lectus pellentesque", + "isbn": "850110241-5", + "language": "Telugu", + "page_count": 298, + "format": "hardcover" + }, + { + "id": 61, + "author_id": 17, + "name": "pellentesque quisque porta", + "isbn": "367513326-5", + "language": "Burmese", + "page_count": 1828, + "format": "hardcover" + }, + { + "id": 62, + "author_id": 9, + "name": "sapien", + "isbn": "778066854-1", + "language": "Swedish", + "page_count": 4515, + "format": "paperback" + }, + { + "id": 63, + "author_id": 18, + "name": "dapibus", + "isbn": "887735768-1", + "language": "Moldovan", + "page_count": 8397, + "format": "hardcover" + }, + { + "id": 64, + "author_id": 15, + "name": "quisque", + "isbn": "308254603-X", + "language": "French", + "page_count": 8830, + "format": "paperback" + }, + { + "id": 65, + "author_id": 1, + "name": "pede justo", + "isbn": "862289668-4", + "language": "Pashto", + "page_count": 6427, + "format": "paperback" + }, + { + "id": 66, + "author_id": 15, + "name": "ullamcorper purus sit amet", + "isbn": "350753976-4", + "language": "Greek", + "page_count": 2745, + "format": "paperback" + }, + { + "id": 67, + "author_id": 12, + "name": "lacinia sapien quis libero nullam sit amet turpis", + "isbn": "920734387-8", + "language": "Montenegrin", + "page_count": 2635, + "format": "ebook" + }, + { + "id": 68, + "author_id": 15, + "name": "vel nisl duis ac nibh fusce lacus purus", + "isbn": "251146018-1", + "language": "Malayalam", + "page_count": 2532, + "format": "hardcover" + }, + { + "id": 69, + "author_id": 4, + "name": "ut", + "isbn": "756233459-5", + "language": "Japanese", + "page_count": 4371, + "format": "hardcover" + }, + { + "id": 70, + "author_id": 10, + "name": "dictumst aliquam augue quam", + "isbn": "697410397-2", + "language": "Tamil", + "page_count": 6400, + "format": "hardcover" + }, + { + "id": 71, + "author_id": 18, + "name": "lectus", + "isbn": "101196842-8", + "language": "Luxembourgish", + "page_count": 6449, + "format": "hardcover" + }, + { + "id": 72, + "author_id": 7, + "name": "potenti nullam porttitor", + "isbn": "574280775-9", + "language": "English", + "page_count": 7552, + "format": "paperback" + }, + { + "id": 73, + "author_id": 1, + "name": "duis at velit eu est", + "isbn": "553508789-0", + "language": "Spanish", + "page_count": 9224, + "format": "ebook" + }, + { + "id": 74, + "author_id": 17, + "name": "imperdiet", + "isbn": "154928590-4", + "language": "Quechua", + "page_count": 6096, + "format": "ebook" + }, + { + "id": 75, + "author_id": 17, + "name": "ligula sit amet eleifend", + "isbn": "617873349-6", + "language": "French", + "page_count": 8912, + "format": "ebook" + }, + { + "id": 76, + "author_id": 16, + "name": "convallis nunc proin at turpis a pede", + "isbn": "434092038-X", + "language": "Persian", + "page_count": 9941, + "format": "ebook" + }, + { + "id": 77, + "author_id": 15, + "name": "imperdiet sapien", + "isbn": "295190221-2", + "language": "Dari", + "page_count": 3896, + "format": "hardcover" + }, + { + "id": 78, + "author_id": 5, + "name": "dolor morbi", + "isbn": "124724445-8", + "language": "Afrikaans", + "page_count": 9104, + "format": "hardcover" + }, + { + "id": 79, + "author_id": 8, + "name": "ante ipsum primis in faucibus orci", + "isbn": "144350577-3", + "language": "Bulgarian", + "page_count": 185, + "format": "hardcover" + }, + { + "id": 80, + "author_id": 10, + "name": "augue vestibulum ante ipsum primis", + "isbn": "789834091-4", + "language": "Haitian Creole", + "page_count": 2593, + "format": "hardcover" + }, + { + "id": 81, + "author_id": 15, + "name": "diam", + "isbn": "258545402-9", + "language": "Khmer", + "page_count": 5974, + "format": "hardcover" + }, + { + "id": 82, + "author_id": 13, + "name": "a odio in hac", + "isbn": "526498310-0", + "language": "French", + "page_count": 5924, + "format": "ebook" + }, + { + "id": 83, + "author_id": 18, + "name": "in consequat", + "isbn": "295162517-0", + "language": "Danish", + "page_count": 3021, + "format": "ebook" + }, + { + "id": 84, + "author_id": 11, + "name": "at velit eu est congue elementum in", + "isbn": "080196119-X", + "language": "Arabic", + "page_count": 8285, + "format": "hardcover" + }, + { + "id": 85, + "author_id": 3, + "name": "aliquam sit amet diam", + "isbn": "231975528-4", + "language": "Azeri", + "page_count": 3184, + "format": "ebook" + }, + { + "id": 86, + "author_id": 2, + "name": "praesent blandit nam nulla", + "isbn": "047473645-8", + "language": "Ndebele", + "page_count": 5635, + "format": "hardcover" + }, + { + "id": 87, + "author_id": 11, + "name": "cursus vestibulum proin eu mi nulla ac", + "isbn": "079097946-2", + "language": "Belarusian", + "page_count": 3238, + "format": "ebook" + }, + { + "id": 88, + "author_id": 5, + "name": "mauris morbi non lectus aliquam sit amet", + "isbn": "136267887-2", + "language": "Hungarian", + "page_count": 8215, + "format": "ebook" + }, + { + "id": 89, + "author_id": 2, + "name": "in tempus sit amet", + "isbn": "933922540-6", + "language": "Kurdish", + "page_count": 5905, + "format": "paperback" + }, + { + "id": 90, + "author_id": 19, + "name": "est congue", + "isbn": "360813152-3", + "language": "Malay", + "page_count": 1954, + "format": "hardcover" + }, + { + "id": 91, + "author_id": 15, + "name": "ut ultrices", + "isbn": "499797004-2", + "language": "Latvian", + "page_count": 4610, + "format": "paperback" + }, + { + "id": 92, + "author_id": 1, + "name": "magnis dis parturient montes", + "isbn": "802567187-9", + "language": "Amharic", + "page_count": 9305, + "format": "hardcover" + }, + { + "id": 93, + "author_id": 2, + "name": "dignissim vestibulum vestibulum", + "isbn": "157466082-9", + "language": "Telugu", + "page_count": 9043, + "format": "paperback" + }, + { + "id": 94, + "author_id": 9, + "name": "eros elementum pellentesque quisque porta volutpat", + "isbn": "463605386-9", + "language": "Tajik", + "page_count": 2115, + "format": "paperback" + }, + { + "id": 95, + "author_id": 9, + "name": "montes nascetur ridiculus mus etiam", + "isbn": "928661048-3", + "language": "Latvian", + "page_count": 5256, + "format": "paperback" + }, + { + "id": 96, + "author_id": 5, + "name": "donec dapibus", + "isbn": "143600863-8", + "language": "Armenian", + "page_count": 2753, + "format": "paperback" + }, + { + "id": 97, + "author_id": 19, + "name": "et magnis dis parturient montes nascetur", + "isbn": "399583815-4", + "language": "Kyrgyz", + "page_count": 7725, + "format": "ebook" + }, + { + "id": 98, + "author_id": 7, + "name": "at", + "isbn": "651395053-8", + "language": "Khmer", + "page_count": 1254, + "format": "hardcover" + }, + { + "id": 99, + "author_id": 10, + "name": "at vulputate vitae nisl aenean lectus pellentesque", + "isbn": "879226791-2", + "language": "Dhivehi", + "page_count": 563, + "format": "paperback" + }, + { + "id": 100, + "author_id": 9, + "name": "ultrices enim lorem ipsum dolor sit amet consectetuer", + "isbn": "382103926-4", + "language": "Maltese", + "page_count": 8318, + "format": "paperback" + }, + { + "id": 101, + "author_id": 8, + "name": "nibh quisque id justo sit amet sapien dignissim", + "isbn": "071026906-4", + "language": "Lithuanian", + "page_count": 5814, + "format": "paperback" + }, + { + "id": 102, + "author_id": 2, + "name": "leo rhoncus sed vestibulum sit amet cursus id", + "isbn": "499594831-7", + "language": "Bosnian", + "page_count": 2134, + "format": "paperback" + }, + { + "id": 103, + "author_id": 5, + "name": "eget tempus vel pede morbi porttitor", + "isbn": "072099705-4", + "language": "Dari", + "page_count": 593, + "format": "paperback" + }, + { + "id": 104, + "author_id": 6, + "name": "ac nibh fusce lacus purus aliquet at", + "isbn": "254757545-0", + "language": "Sotho", + "page_count": 5151, + "format": "ebook" + }, + { + "id": 105, + "author_id": 6, + "name": "donec quis orci eget orci vehicula", + "isbn": "962057867-8", + "language": "Moldovan", + "page_count": 6242, + "format": "ebook" + }, + { + "id": 106, + "author_id": 16, + "name": "vitae quam", + "isbn": "279206892-2", + "language": "Haitian Creole", + "page_count": 254, + "format": "paperback" + }, + { + "id": 107, + "author_id": 3, + "name": "metus sapien", + "isbn": "563000656-8", + "language": "Bislama", + "page_count": 3015, + "format": "paperback" + }, + { + "id": 108, + "author_id": 6, + "name": "in consequat ut nulla", + "isbn": "464242746-5", + "language": "Dhivehi", + "page_count": 3879, + "format": "hardcover" + }, + { + "id": 109, + "author_id": 14, + "name": "nisl aenean", + "isbn": "689047810-X", + "language": "Tsonga", + "page_count": 3290, + "format": "hardcover" + }, + { + "id": 110, + "author_id": 19, + "name": "montes nascetur", + "isbn": "139876872-3", + "language": "Hungarian", + "page_count": 3819, + "format": "hardcover" + }, + { + "id": 111, + "author_id": 16, + "name": "purus phasellus in", + "isbn": "218130234-0", + "language": "Persian", + "page_count": 1934, + "format": "ebook" + }, + { + "id": 112, + "author_id": 7, + "name": "erat curabitur gravida nisi", + "isbn": "415467739-X", + "language": "Tswana", + "page_count": 208, + "format": "ebook" + }, + { + "id": 113, + "author_id": 11, + "name": "iaculis diam erat fermentum", + "isbn": "530055313-1", + "language": "Pashto", + "page_count": 4094, + "format": "hardcover" + }, + { + "id": 114, + "author_id": 5, + "name": "ante nulla justo aliquam quis", + "isbn": "382365748-8", + "language": "Korean", + "page_count": 4042, + "format": "paperback" + }, + { + "id": 115, + "author_id": 17, + "name": "id ornare imperdiet sapien urna pretium nisl", + "isbn": "681456328-2", + "language": "Catalan", + "page_count": 3394, + "format": "paperback" + }, + { + "id": 116, + "author_id": 16, + "name": "eleifend luctus ultricies eu nibh", + "isbn": "736207472-7", + "language": "Korean", + "page_count": 6799, + "format": "hardcover" + }, + { + "id": 117, + "author_id": 3, + "name": "nec nisi volutpat eleifend", + "isbn": "154046749-X", + "language": "Japanese", + "page_count": 7676, + "format": "paperback" + }, + { + "id": 118, + "author_id": 6, + "name": "luctus", + "isbn": "940683228-3", + "language": "Thai", + "page_count": 369, + "format": "paperback" + }, + { + "id": 119, + "author_id": 1, + "name": "non pretium quis lectus suspendisse potenti in eleifend", + "isbn": "598844981-6", + "language": "Azeri", + "page_count": 2387, + "format": "hardcover" + }, + { + "id": 120, + "author_id": 16, + "name": "nam nulla integer pede justo lacinia", + "isbn": "623027673-9", + "language": "Sotho", + "page_count": 8252, + "format": "ebook" + }, + { + "id": 121, + "author_id": 13, + "name": "integer tincidunt", + "isbn": "163412623-8", + "language": "Kyrgyz", + "page_count": 6171, + "format": "paperback" + }, + { + "id": 122, + "author_id": 13, + "name": "odio consequat varius integer ac leo", + "isbn": "637739213-3", + "language": "Bulgarian", + "page_count": 9471, + "format": "ebook" + }, + { + "id": 123, + "author_id": 8, + "name": "amet justo morbi ut", + "isbn": "386215535-8", + "language": "Bislama", + "page_count": 2525, + "format": "ebook" + }, + { + "id": 124, + "author_id": 19, + "name": "faucibus orci luctus et ultrices posuere cubilia curae", + "isbn": "803844953-3", + "language": "Ndebele", + "page_count": 6522, + "format": "ebook" + }, + { + "id": 125, + "author_id": 3, + "name": "primis in", + "isbn": "571094971-X", + "language": "West Frisian", + "page_count": 56, + "format": "hardcover" + }, + { + "id": 126, + "author_id": 18, + "name": "vitae mattis nibh ligula nec sem duis aliquam", + "isbn": "957312069-0", + "language": "Georgian", + "page_count": 1169, + "format": "ebook" + }, + { + "id": 127, + "author_id": 20, + "name": "vel augue vestibulum ante", + "isbn": "011523772-0", + "language": "Tajik", + "page_count": 9457, + "format": "hardcover" + }, + { + "id": 128, + "author_id": 13, + "name": "ultrices libero non mattis pulvinar", + "isbn": "451522265-1", + "language": "Kazakh", + "page_count": 9653, + "format": "paperback" + }, + { + "id": 129, + "author_id": 15, + "name": "egestas metus aenean fermentum donec ut mauris", + "isbn": "435221916-9", + "language": "Swedish", + "page_count": 7977, + "format": "hardcover" + }, + { + "id": 130, + "author_id": 17, + "name": "nulla pede ullamcorper augue a", + "isbn": "964575709-6", + "language": "Indonesian", + "page_count": 4987, + "format": "paperback" + }, + { + "id": 131, + "author_id": 4, + "name": "risus dapibus", + "isbn": "802134426-1", + "language": "Assamese", + "page_count": 1096, + "format": "hardcover" + }, + { + "id": 132, + "author_id": 3, + "name": "in blandit ultrices enim lorem ipsum", + "isbn": "235312420-8", + "language": "Swedish", + "page_count": 6037, + "format": "hardcover" + }, + { + "id": 133, + "author_id": 18, + "name": "a suscipit nulla elit ac nulla", + "isbn": "247682115-2", + "language": "Punjabi", + "page_count": 9551, + "format": "ebook" + }, + { + "id": 134, + "author_id": 14, + "name": "et commodo vulputate justo in blandit ultrices", + "isbn": "515423941-5", + "language": "Dutch", + "page_count": 9750, + "format": "hardcover" + }, + { + "id": 135, + "author_id": 2, + "name": "pulvinar sed nisl nunc rhoncus", + "isbn": "949727436-X", + "language": "Marathi", + "page_count": 9117, + "format": "ebook" + }, + { + "id": 136, + "author_id": 17, + "name": "blandit lacinia erat", + "isbn": "921500869-1", + "language": "Malayalam", + "page_count": 7637, + "format": "ebook" + }, + { + "id": 137, + "author_id": 20, + "name": "ligula sit amet eleifend pede", + "isbn": "137572307-3", + "language": "Polish", + "page_count": 6127, + "format": "ebook" + }, + { + "id": 138, + "author_id": 13, + "name": "mauris viverra diam vitae", + "isbn": "404189645-2", + "language": "Quechua", + "page_count": 6238, + "format": "hardcover" + }, + { + "id": 139, + "author_id": 17, + "name": "amet diam in magna bibendum imperdiet nullam orci", + "isbn": "119427205-3", + "language": "Burmese", + "page_count": 8491, + "format": "hardcover" + }, + { + "id": 140, + "author_id": 13, + "name": "ornare consequat lectus in est risus auctor", + "isbn": "426911933-0", + "language": "Northern Sotho", + "page_count": 7436, + "format": "hardcover" + }, + { + "id": 141, + "author_id": 19, + "name": "dis parturient", + "isbn": "284056691-5", + "language": "Papiamento", + "page_count": 4214, + "format": "paperback" + }, + { + "id": 142, + "author_id": 2, + "name": "mauris morbi non lectus", + "isbn": "063062888-2", + "language": "Italian", + "page_count": 7760, + "format": "hardcover" + }, + { + "id": 143, + "author_id": 9, + "name": "placerat praesent blandit nam nulla integer pede", + "isbn": "479535681-5", + "language": "Latvian", + "page_count": 8455, + "format": "ebook" + }, + { + "id": 144, + "author_id": 12, + "name": "nisl ut volutpat sapien arcu", + "isbn": "793951962-X", + "language": "German", + "page_count": 3504, + "format": "paperback" + }, + { + "id": 145, + "author_id": 17, + "name": "leo maecenas pulvinar lobortis est phasellus", + "isbn": "071706623-1", + "language": "Hindi", + "page_count": 9140, + "format": "hardcover" + }, + { + "id": 146, + "author_id": 8, + "name": "mauris enim leo rhoncus", + "isbn": "820916081-8", + "language": "German", + "page_count": 4555, + "format": "ebook" + }, + { + "id": 147, + "author_id": 1, + "name": "orci eget orci vehicula condimentum", + "isbn": "108022721-0", + "language": "French", + "page_count": 6650, + "format": "ebook" + }, + { + "id": 148, + "author_id": 20, + "name": "condimentum curabitur", + "isbn": "741076040-0", + "language": "Tajik", + "page_count": 1315, + "format": "hardcover" + }, + { + "id": 149, + "author_id": 11, + "name": "tortor risus dapibus augue vel", + "isbn": "804513037-7", + "language": "Burmese", + "page_count": 962, + "format": "ebook" + }, + { + "id": 150, + "author_id": 1, + "name": "sit amet", + "isbn": "553114561-6", + "language": "Greek", + "page_count": 4992, + "format": "hardcover" + }, + { + "id": 151, + "author_id": 11, + "name": "pulvinar sed nisl", + "isbn": "513574595-5", + "language": "Icelandic", + "page_count": 5826, + "format": "hardcover" + }, + { + "id": 152, + "author_id": 19, + "name": "eros elementum pellentesque quisque porta volutpat erat quisque", + "isbn": "175164825-7", + "language": "Albanian", + "page_count": 2451, + "format": "ebook" + }, + { + "id": 153, + "author_id": 18, + "name": "sed lacus morbi sem mauris laoreet", + "isbn": "554985466-X", + "language": "Bosnian", + "page_count": 7708, + "format": "hardcover" + }, + { + "id": 154, + "author_id": 8, + "name": "fermentum", + "isbn": "714720995-8", + "language": "Finnish", + "page_count": 2253, + "format": "ebook" + }, + { + "id": 155, + "author_id": 20, + "name": "at nunc commodo placerat praesent blandit nam", + "isbn": "307711555-7", + "language": "Bengali", + "page_count": 4261, + "format": "paperback" + }, + { + "id": 156, + "author_id": 7, + "name": "rhoncus dui vel sem sed sagittis", + "isbn": "857571534-8", + "language": "Swedish", + "page_count": 2603, + "format": "hardcover" + }, + { + "id": 157, + "author_id": 10, + "name": "molestie hendrerit at", + "isbn": "383761689-4", + "language": "Icelandic", + "page_count": 3735, + "format": "ebook" + }, + { + "id": 158, + "author_id": 3, + "name": "blandit mi in porttitor", + "isbn": "974362933-5", + "language": "Bosnian", + "page_count": 6721, + "format": "hardcover" + }, + { + "id": 159, + "author_id": 20, + "name": "maecenas ut massa quis augue luctus tincidunt nulla", + "isbn": "087567507-7", + "language": "Albanian", + "page_count": 2321, + "format": "ebook" + }, + { + "id": 160, + "author_id": 16, + "name": "venenatis turpis enim blandit", + "isbn": "232373455-5", + "language": "Latvian", + "page_count": 1653, + "format": "ebook" + }, + { + "id": 161, + "author_id": 8, + "name": "in imperdiet et commodo vulputate justo in", + "isbn": "475231963-2", + "language": "Assamese", + "page_count": 7118, + "format": "hardcover" + }, + { + "id": 162, + "author_id": 2, + "name": "vel augue vestibulum rutrum rutrum neque aenean", + "isbn": "972631600-6", + "language": "Assamese", + "page_count": 8830, + "format": "paperback" + }, + { + "id": 163, + "author_id": 17, + "name": "lacinia nisi venenatis tristique fusce congue diam", + "isbn": "425780070-4", + "language": "Armenian", + "page_count": 6733, + "format": "ebook" + }, + { + "id": 164, + "author_id": 17, + "name": "habitasse platea dictumst aliquam augue quam sollicitudin", + "isbn": "168978170-X", + "language": "Quechua", + "page_count": 1416, + "format": "ebook" + }, + { + "id": 165, + "author_id": 10, + "name": "volutpat in", + "isbn": "417305798-9", + "language": "Belarusian", + "page_count": 4649, + "format": "paperback" + }, + { + "id": 166, + "author_id": 17, + "name": "ligula vehicula consequat morbi a", + "isbn": "733859537-2", + "language": "New Zealand Sign Language", + "page_count": 1350, + "format": "paperback" + }, + { + "id": 167, + "author_id": 1, + "name": "nisi vulputate nonummy maecenas tincidunt lacus at", + "isbn": "927913417-5", + "language": "German", + "page_count": 5940, + "format": "ebook" + }, + { + "id": 168, + "author_id": 16, + "name": "aliquet maecenas leo odio condimentum id luctus nec", + "isbn": "157721054-9", + "language": "Kashmiri", + "page_count": 6768, + "format": "paperback" + }, + { + "id": 169, + "author_id": 10, + "name": "erat fermentum justo nec condimentum neque sapien", + "isbn": "693888028-X", + "language": "Mongolian", + "page_count": 8270, + "format": "paperback" + }, + { + "id": 170, + "author_id": 13, + "name": "sapien", + "isbn": "761451162-X", + "language": "Icelandic", + "page_count": 6250, + "format": "ebook" + }, + { + "id": 171, + "author_id": 7, + "name": "turpis elementum ligula vehicula consequat morbi", + "isbn": "435535633-7", + "language": "Maltese", + "page_count": 6855, + "format": "paperback" + }, + { + "id": 172, + "author_id": 14, + "name": "et ultrices posuere cubilia curae", + "isbn": "298112285-1", + "language": "Tetum", + "page_count": 8424, + "format": "paperback" + }, + { + "id": 173, + "author_id": 20, + "name": "ut tellus nulla ut erat", + "isbn": "014152141-4", + "language": "Oriya", + "page_count": 8797, + "format": "ebook" + }, + { + "id": 174, + "author_id": 9, + "name": "nulla suspendisse potenti cras in purus eu", + "isbn": "236376810-8", + "language": "Zulu", + "page_count": 6038, + "format": "ebook" + }, + { + "id": 175, + "author_id": 16, + "name": "felis sed lacus morbi sem", + "isbn": "874954385-7", + "language": "Bislama", + "page_count": 7099, + "format": "ebook" + }, + { + "id": 176, + "author_id": 6, + "name": "in sagittis dui vel nisl duis ac", + "isbn": "671574169-7", + "language": "Ndebele", + "page_count": 8550, + "format": "paperback" + }, + { + "id": 177, + "author_id": 11, + "name": "ullamcorper purus sit amet nulla quisque arcu", + "isbn": "652304482-3", + "language": "Danish", + "page_count": 5507, + "format": "ebook" + }, + { + "id": 178, + "author_id": 1, + "name": "in libero ut massa volutpat convallis morbi", + "isbn": "096726253-4", + "language": "Tsonga", + "page_count": 5807, + "format": "ebook" + }, + { + "id": 179, + "author_id": 11, + "name": "in eleifend quam a odio", + "isbn": "547981785-X", + "language": "Chinese", + "page_count": 2821, + "format": "hardcover" + }, + { + "id": 180, + "author_id": 8, + "name": "posuere cubilia curae duis faucibus accumsan odio curabitur", + "isbn": "937767729-7", + "language": "Chinese", + "page_count": 4139, + "format": "hardcover" + }, + { + "id": 181, + "author_id": 4, + "name": "pellentesque volutpat dui", + "isbn": "812787252-0", + "language": "Gagauz", + "page_count": 5813, + "format": "paperback" + }, + { + "id": 182, + "author_id": 20, + "name": "nulla tempus vivamus in felis eu sapien", + "isbn": "923424605-5", + "language": "Swahili", + "page_count": 8175, + "format": "ebook" + }, + { + "id": 183, + "author_id": 18, + "name": "magna ac", + "isbn": "664245222-4", + "language": "Portuguese", + "page_count": 8818, + "format": "ebook" + }, + { + "id": 184, + "author_id": 19, + "name": "lectus in quam fringilla", + "isbn": "431944328-4", + "language": "Oriya", + "page_count": 5068, + "format": "hardcover" + }, + { + "id": 185, + "author_id": 18, + "name": "felis donec", + "isbn": "007072310-9", + "language": "Kazakh", + "page_count": 8842, + "format": "paperback" + }, + { + "id": 186, + "author_id": 7, + "name": "lacinia aenean sit amet justo morbi ut odio", + "isbn": "634274881-0", + "language": "Zulu", + "page_count": 6887, + "format": "ebook" + }, + { + "id": 187, + "author_id": 17, + "name": "justo maecenas rhoncus aliquam lacus morbi quis tortor", + "isbn": "525436308-8", + "language": "Hebrew", + "page_count": 5604, + "format": "paperback" + }, + { + "id": 188, + "author_id": 4, + "name": "eget rutrum at lorem integer tincidunt ante", + "isbn": "433477598-5", + "language": "Swati", + "page_count": 263, + "format": "hardcover" + }, + { + "id": 189, + "author_id": 1, + "name": "quam pharetra", + "isbn": "706429578-4", + "language": "Greek", + "page_count": 9238, + "format": "paperback" + }, + { + "id": 190, + "author_id": 6, + "name": "pede ac diam cras pellentesque volutpat dui", + "isbn": "012204204-2", + "language": "Bengali", + "page_count": 4368, + "format": "paperback" + }, + { + "id": 191, + "author_id": 3, + "name": "suspendisse accumsan tortor", + "isbn": "657348477-0", + "language": "Persian", + "page_count": 1454, + "format": "paperback" + }, + { + "id": 192, + "author_id": 1, + "name": "sed sagittis nam congue risus semper", + "isbn": "582999207-8", + "language": "English", + "page_count": 4497, + "format": "ebook" + }, + { + "id": 193, + "author_id": 5, + "name": "morbi a ipsum integer a nibh in", + "isbn": "321571320-9", + "language": "Papiamento", + "page_count": 9060, + "format": "paperback" + }, + { + "id": 194, + "author_id": 20, + "name": "aliquam convallis nunc proin at turpis a pede", + "isbn": "536601128-0", + "language": "Italian", + "page_count": 5399, + "format": "hardcover" + }, + { + "id": 195, + "author_id": 12, + "name": "non mattis pulvinar nulla pede ullamcorper augue", + "isbn": "147649921-7", + "language": "Dari", + "page_count": 1147, + "format": "paperback" + }, + { + "id": 196, + "author_id": 16, + "name": "fringilla", + "isbn": "262410838-6", + "language": "Croatian", + "page_count": 429, + "format": "hardcover" + }, + { + "id": 197, + "author_id": 17, + "name": "lacus curabitur at ipsum", + "isbn": "910335125-4", + "language": "Montenegrin", + "page_count": 1217, + "format": "hardcover" + }, + { + "id": 198, + "author_id": 17, + "name": "donec", + "isbn": "418410506-8", + "language": "Latvian", + "page_count": 873, + "format": "ebook" + }, + { + "id": 199, + "author_id": 11, + "name": "metus aenean fermentum donec ut", + "isbn": "945259162-5", + "language": "Bengali", + "page_count": 4038, + "format": "ebook" + }, + { + "id": 200, + "author_id": 20, + "name": "tincidunt eu", + "isbn": "715366074-7", + "language": "Romanian", + "page_count": 8328, + "format": "paperback" + }, + { + "id": 201, + "author_id": 12, + "name": "tempor convallis", + "isbn": "988309944-4", + "language": "Danish", + "page_count": 1861, + "format": "paperback" + }, + { + "id": 202, + "author_id": 17, + "name": "curabitur in libero ut massa volutpat", + "isbn": "616366233-4", + "language": "Macedonian", + "page_count": 37, + "format": "ebook" + }, + { + "id": 203, + "author_id": 16, + "name": "massa donec dapibus duis at", + "isbn": "725549578-8", + "language": "Kannada", + "page_count": 1088, + "format": "hardcover" + }, + { + "id": 204, + "author_id": 20, + "name": "ultrices aliquet maecenas leo odio condimentum id", + "isbn": "620375968-6", + "language": "Azeri", + "page_count": 5168, + "format": "hardcover" + }, + { + "id": 205, + "author_id": 3, + "name": "nulla sed accumsan felis ut", + "isbn": "407582671-6", + "language": "Czech", + "page_count": 9165, + "format": "ebook" + }, + { + "id": 206, + "author_id": 2, + "name": "justo lacinia", + "isbn": "671167365-4", + "language": "Khmer", + "page_count": 5399, + "format": "hardcover" + }, + { + "id": 207, + "author_id": 12, + "name": "dolor vel est donec odio", + "isbn": "377135863-9", + "language": "Bislama", + "page_count": 369, + "format": "paperback" + }, + { + "id": 208, + "author_id": 14, + "name": "amet", + "isbn": "500210506-8", + "language": "Dhivehi", + "page_count": 7620, + "format": "hardcover" + }, + { + "id": 209, + "author_id": 8, + "name": "cras mi pede malesuada in imperdiet", + "isbn": "791428205-7", + "language": "Hungarian", + "page_count": 7111, + "format": "hardcover" + }, + { + "id": 210, + "author_id": 18, + "name": "nisi venenatis tristique", + "isbn": "346808947-3", + "language": "Kannada", + "page_count": 6079, + "format": "ebook" + }, + { + "id": 211, + "author_id": 2, + "name": "potenti in eleifend", + "isbn": "452616865-3", + "language": "Filipino", + "page_count": 5899, + "format": "hardcover" + }, + { + "id": 212, + "author_id": 16, + "name": "morbi", + "isbn": "223841232-8", + "language": "Albanian", + "page_count": 8149, + "format": "ebook" + }, + { + "id": 213, + "author_id": 17, + "name": "praesent lectus vestibulum quam sapien varius ut blandit", + "isbn": "952789815-3", + "language": "Maltese", + "page_count": 9429, + "format": "ebook" + }, + { + "id": 214, + "author_id": 1, + "name": "condimentum neque sapien placerat", + "isbn": "619988948-7", + "language": "Armenian", + "page_count": 8241, + "format": "hardcover" + }, + { + "id": 215, + "author_id": 7, + "name": "nisi at", + "isbn": "460972343-3", + "language": "Mongolian", + "page_count": 222, + "format": "paperback" + }, + { + "id": 216, + "author_id": 14, + "name": "ultrices", + "isbn": "537777669-0", + "language": "Ndebele", + "page_count": 8077, + "format": "ebook" + }, + { + "id": 217, + "author_id": 20, + "name": "commodo", + "isbn": "301253172-6", + "language": "Italian", + "page_count": 2520, + "format": "hardcover" + }, + { + "id": 218, + "author_id": 18, + "name": "proin at turpis", + "isbn": "931672325-6", + "language": "Hebrew", + "page_count": 2646, + "format": "ebook" + }, + { + "id": 219, + "author_id": 6, + "name": "hac habitasse platea", + "isbn": "347123869-7", + "language": "Khmer", + "page_count": 5784, + "format": "paperback" + }, + { + "id": 220, + "author_id": 6, + "name": "amet nunc viverra dapibus", + "isbn": "187507380-9", + "language": "Arabic", + "page_count": 6828, + "format": "ebook" + }, + { + "id": 221, + "author_id": 15, + "name": "nunc", + "isbn": "178480416-9", + "language": "Bulgarian", + "page_count": 8923, + "format": "hardcover" + }, + { + "id": 222, + "author_id": 8, + "name": "sem praesent id", + "isbn": "635509215-3", + "language": "Sotho", + "page_count": 8748, + "format": "paperback" + }, + { + "id": 223, + "author_id": 7, + "name": "libero", + "isbn": "461295900-0", + "language": "Kyrgyz", + "page_count": 5171, + "format": "ebook" + }, + { + "id": 224, + "author_id": 20, + "name": "id ligula suspendisse ornare consequat lectus in est", + "isbn": "311128945-1", + "language": "Burmese", + "page_count": 4932, + "format": "hardcover" + }, + { + "id": 225, + "author_id": 18, + "name": "feugiat", + "isbn": "307571748-7", + "language": "Arabic", + "page_count": 4282, + "format": "ebook" + }, + { + "id": 226, + "author_id": 6, + "name": "bibendum imperdiet nullam orci pede venenatis non", + "isbn": "550766608-3", + "language": "Hebrew", + "page_count": 5201, + "format": "hardcover" + }, + { + "id": 227, + "author_id": 16, + "name": "odio", + "isbn": "569298425-3", + "language": "French", + "page_count": 9419, + "format": "paperback" + }, + { + "id": 228, + "author_id": 17, + "name": "consectetuer adipiscing elit", + "isbn": "174221155-0", + "language": "Italian", + "page_count": 1910, + "format": "hardcover" + }, + { + "id": 229, + "author_id": 16, + "name": "nisl duis ac nibh fusce lacus purus", + "isbn": "529415293-2", + "language": "Tswana", + "page_count": 8720, + "format": "paperback" + }, + { + "id": 230, + "author_id": 1, + "name": "amet diam in", + "isbn": "124885141-2", + "language": "Hiri Motu", + "page_count": 7182, + "format": "ebook" + }, + { + "id": 231, + "author_id": 16, + "name": "pharetra magna ac", + "isbn": "817890703-8", + "language": "Māori", + "page_count": 4911, + "format": "hardcover" + }, + { + "id": 232, + "author_id": 10, + "name": "varius nulla facilisi cras non velit nec nisi", + "isbn": "709867671-3", + "language": "Papiamento", + "page_count": 6161, + "format": "hardcover" + }, + { + "id": 233, + "author_id": 13, + "name": "egestas", + "isbn": "814349867-0", + "language": "Swedish", + "page_count": 1900, + "format": "paperback" + }, + { + "id": 234, + "author_id": 15, + "name": "turpis adipiscing", + "isbn": "156256691-1", + "language": "Montenegrin", + "page_count": 2838, + "format": "paperback" + }, + { + "id": 235, + "author_id": 3, + "name": "mus etiam vel", + "isbn": "228519721-7", + "language": "Polish", + "page_count": 3198, + "format": "hardcover" + }, + { + "id": 236, + "author_id": 8, + "name": "augue luctus tincidunt nulla mollis molestie lorem quisque", + "isbn": "090269463-4", + "language": "Māori", + "page_count": 4185, + "format": "ebook" + }, + { + "id": 237, + "author_id": 3, + "name": "in hac habitasse platea", + "isbn": "769132726-9", + "language": "Dutch", + "page_count": 570, + "format": "hardcover" + }, + { + "id": 238, + "author_id": 20, + "name": "vulputate ut ultrices vel augue vestibulum", + "isbn": "408076556-8", + "language": "Georgian", + "page_count": 804, + "format": "paperback" + }, + { + "id": 239, + "author_id": 16, + "name": "sed interdum venenatis turpis enim blandit", + "isbn": "655551949-5", + "language": "Marathi", + "page_count": 8010, + "format": "hardcover" + }, + { + "id": 240, + "author_id": 16, + "name": "at diam nam tristique tortor eu pede", + "isbn": "601176727-3", + "language": "Tajik", + "page_count": 1437, + "format": "ebook" + }, + { + "id": 241, + "author_id": 1, + "name": "pharetra magna ac", + "isbn": "138834791-1", + "language": "Malay", + "page_count": 4473, + "format": "ebook" + }, + { + "id": 242, + "author_id": 18, + "name": "mattis egestas metus aenean fermentum donec", + "isbn": "756582023-7", + "language": "Armenian", + "page_count": 2946, + "format": "hardcover" + }, + { + "id": 243, + "author_id": 9, + "name": "quis", + "isbn": "148586578-6", + "language": "Sotho", + "page_count": 1366, + "format": "hardcover" + }, + { + "id": 244, + "author_id": 16, + "name": "proin interdum mauris non ligula pellentesque ultrices", + "isbn": "491325842-7", + "language": "Kurdish", + "page_count": 4103, + "format": "ebook" + }, + { + "id": 245, + "author_id": 15, + "name": "porttitor", + "isbn": "264234074-0", + "language": "Belarusian", + "page_count": 2356, + "format": "paperback" + }, + { + "id": 246, + "author_id": 14, + "name": "non interdum", + "isbn": "985990809-5", + "language": "Georgian", + "page_count": 8968, + "format": "hardcover" + }, + { + "id": 247, + "author_id": 10, + "name": "etiam", + "isbn": "936241390-6", + "language": "Croatian", + "page_count": 5372, + "format": "hardcover" + }, + { + "id": 248, + "author_id": 2, + "name": "risus dapibus augue vel accumsan tellus nisi eu", + "isbn": "270797510-9", + "language": "Punjabi", + "page_count": 9365, + "format": "paperback" + }, + { + "id": 249, + "author_id": 7, + "name": "enim leo rhoncus sed vestibulum sit amet cursus", + "isbn": "609836714-0", + "language": "Pashto", + "page_count": 6707, + "format": "ebook" + }, + { + "id": 250, + "author_id": 8, + "name": "ipsum integer a nibh", + "isbn": "148960770-6", + "language": "Somali", + "page_count": 8574, + "format": "ebook" + }, + { + "id": 251, + "author_id": 10, + "name": "praesent id massa id nisl venenatis lacinia aenean", + "isbn": "329008929-0", + "language": "Portuguese", + "page_count": 9433, + "format": "hardcover" + }, + { + "id": 252, + "author_id": 6, + "name": "pede justo", + "isbn": "571880546-6", + "language": "Tetum", + "page_count": 265, + "format": "paperback" + }, + { + "id": 253, + "author_id": 9, + "name": "posuere cubilia curae", + "isbn": "072283024-6", + "language": "Italian", + "page_count": 3183, + "format": "paperback" + }, + { + "id": 254, + "author_id": 2, + "name": "tincidunt in leo maecenas pulvinar lobortis", + "isbn": "794531194-6", + "language": "Indonesian", + "page_count": 9725, + "format": "ebook" + }, + { + "id": 255, + "author_id": 17, + "name": "morbi vel", + "isbn": "253889827-7", + "language": "Dzongkha", + "page_count": 7583, + "format": "paperback" + }, + { + "id": 256, + "author_id": 8, + "name": "eget massa", + "isbn": "246404822-4", + "language": "Montenegrin", + "page_count": 5305, + "format": "ebook" + }, + { + "id": 257, + "author_id": 11, + "name": "lectus aliquam sit", + "isbn": "964802829-X", + "language": "Amharic", + "page_count": 5063, + "format": "hardcover" + }, + { + "id": 258, + "author_id": 9, + "name": "platea dictumst maecenas ut massa quis augue", + "isbn": "350783760-9", + "language": "Tamil", + "page_count": 5149, + "format": "ebook" + }, + { + "id": 259, + "author_id": 14, + "name": "eleifend pede libero", + "isbn": "026400853-7", + "language": "West Frisian", + "page_count": 5167, + "format": "hardcover" + }, + { + "id": 260, + "author_id": 11, + "name": "justo eu massa donec dapibus", + "isbn": "625396133-0", + "language": "Bengali", + "page_count": 6176, + "format": "ebook" + }, + { + "id": 261, + "author_id": 1, + "name": "justo morbi ut odio cras", + "isbn": "257121322-9", + "language": "Hungarian", + "page_count": 5752, + "format": "paperback" + }, + { + "id": 262, + "author_id": 4, + "name": "nisi venenatis tristique fusce", + "isbn": "492668629-5", + "language": "Macedonian", + "page_count": 3205, + "format": "hardcover" + }, + { + "id": 263, + "author_id": 16, + "name": "posuere felis sed lacus morbi", + "isbn": "537200040-6", + "language": "Maltese", + "page_count": 7782, + "format": "ebook" + }, + { + "id": 264, + "author_id": 18, + "name": "iaculis diam", + "isbn": "588697762-7", + "language": "Chinese", + "page_count": 5821, + "format": "hardcover" + }, + { + "id": 265, + "author_id": 1, + "name": "integer ac", + "isbn": "500828587-4", + "language": "Swahili", + "page_count": 7607, + "format": "ebook" + }, + { + "id": 266, + "author_id": 1, + "name": "dapibus nulla suscipit ligula in lacus", + "isbn": "439849387-5", + "language": "Telugu", + "page_count": 3986, + "format": "ebook" + }, + { + "id": 267, + "author_id": 10, + "name": "massa", + "isbn": "717118268-1", + "language": "Japanese", + "page_count": 4384, + "format": "hardcover" + }, + { + "id": 268, + "author_id": 6, + "name": "cras pellentesque volutpat dui maecenas tristique", + "isbn": "092886296-8", + "language": "Swedish", + "page_count": 5975, + "format": "hardcover" + }, + { + "id": 269, + "author_id": 11, + "name": "blandit non interdum in ante", + "isbn": "327424454-6", + "language": "Kashmiri", + "page_count": 3578, + "format": "hardcover" + }, + { + "id": 270, + "author_id": 8, + "name": "habitasse platea dictumst aliquam augue quam sollicitudin vitae", + "isbn": "172100725-3", + "language": "Fijian", + "page_count": 1135, + "format": "ebook" + }, + { + "id": 271, + "author_id": 6, + "name": "nulla dapibus dolor vel est donec", + "isbn": "261513527-9", + "language": "Greek", + "page_count": 6602, + "format": "hardcover" + }, + { + "id": 272, + "author_id": 5, + "name": "pretium quis", + "isbn": "055637260-3", + "language": "English", + "page_count": 3195, + "format": "hardcover" + }, + { + "id": 273, + "author_id": 9, + "name": "urna pretium nisl ut volutpat sapien arcu sed", + "isbn": "271772875-9", + "language": "Afrikaans", + "page_count": 3913, + "format": "paperback" + }, + { + "id": 274, + "author_id": 9, + "name": "ac diam cras pellentesque", + "isbn": "088818255-4", + "language": "Arabic", + "page_count": 2763, + "format": "hardcover" + }, + { + "id": 275, + "author_id": 16, + "name": "lorem quisque ut erat curabitur gravida", + "isbn": "683354107-8", + "language": "Yiddish", + "page_count": 4760, + "format": "paperback" + }, + { + "id": 276, + "author_id": 15, + "name": "nullam porttitor", + "isbn": "313721099-2", + "language": "Yiddish", + "page_count": 2349, + "format": "hardcover" + }, + { + "id": 277, + "author_id": 16, + "name": "mi nulla ac enim in tempor", + "isbn": "215968936-X", + "language": "Somali", + "page_count": 5443, + "format": "paperback" + }, + { + "id": 278, + "author_id": 20, + "name": "montes nascetur ridiculus mus etiam vel augue vestibulum", + "isbn": "953598712-7", + "language": "Macedonian", + "page_count": 3205, + "format": "ebook" + }, + { + "id": 279, + "author_id": 20, + "name": "duis consequat dui nec nisi volutpat", + "isbn": "306124894-3", + "language": "Hiri Motu", + "page_count": 2406, + "format": "ebook" + }, + { + "id": 280, + "author_id": 9, + "name": "amet lobortis sapien", + "isbn": "423086385-3", + "language": "Malay", + "page_count": 3941, + "format": "hardcover" + }, + { + "id": 281, + "author_id": 18, + "name": "ut volutpat sapien arcu sed augue aliquam erat", + "isbn": "200515533-0", + "language": "Georgian", + "page_count": 3945, + "format": "hardcover" + }, + { + "id": 282, + "author_id": 13, + "name": "et tempus semper est quam pharetra magna ac", + "isbn": "763413054-0", + "language": "Bislama", + "page_count": 5281, + "format": "paperback" + }, + { + "id": 283, + "author_id": 16, + "name": "tellus nisi eu orci mauris lacinia", + "isbn": "587974973-8", + "language": "Marathi", + "page_count": 1295, + "format": "paperback" + }, + { + "id": 284, + "author_id": 13, + "name": "lobortis est phasellus sit amet erat nulla tempus", + "isbn": "418118890-6", + "language": "Macedonian", + "page_count": 4080, + "format": "hardcover" + }, + { + "id": 285, + "author_id": 15, + "name": "justo morbi ut", + "isbn": "666297608-3", + "language": "English", + "page_count": 4282, + "format": "paperback" + }, + { + "id": 286, + "author_id": 5, + "name": "tortor id nulla", + "isbn": "917855011-4", + "language": "Norwegian", + "page_count": 5947, + "format": "paperback" + }, + { + "id": 287, + "author_id": 8, + "name": "nulla pede ullamcorper", + "isbn": "338783733-X", + "language": "Bulgarian", + "page_count": 5105, + "format": "ebook" + }, + { + "id": 288, + "author_id": 4, + "name": "curabitur convallis duis consequat dui nec nisi volutpat", + "isbn": "734811794-5", + "language": "Albanian", + "page_count": 9335, + "format": "hardcover" + }, + { + "id": 289, + "author_id": 15, + "name": "accumsan felis ut at dolor quis odio consequat", + "isbn": "225856329-1", + "language": "Catalan", + "page_count": 8833, + "format": "paperback" + }, + { + "id": 290, + "author_id": 14, + "name": "nonummy maecenas", + "isbn": "942729283-0", + "language": "Moldovan", + "page_count": 2852, + "format": "paperback" + }, + { + "id": 291, + "author_id": 16, + "name": "congue", + "isbn": "549436542-5", + "language": "Khmer", + "page_count": 1748, + "format": "paperback" + }, + { + "id": 292, + "author_id": 20, + "name": "est congue elementum", + "isbn": "193160753-2", + "language": "Assamese", + "page_count": 7212, + "format": "ebook" + }, + { + "id": 293, + "author_id": 6, + "name": "ac nibh fusce lacus purus", + "isbn": "683474258-1", + "language": "Lao", + "page_count": 3283, + "format": "ebook" + }, + { + "id": 294, + "author_id": 14, + "name": "risus auctor sed tristique", + "isbn": "030422424-3", + "language": "Northern Sotho", + "page_count": 6284, + "format": "hardcover" + }, + { + "id": 295, + "author_id": 10, + "name": "eleifend luctus ultricies eu", + "isbn": "920576944-4", + "language": "Tswana", + "page_count": 4540, + "format": "ebook" + }, + { + "id": 296, + "author_id": 1, + "name": "justo maecenas rhoncus aliquam lacus morbi", + "isbn": "459453761-8", + "language": "Italian", + "page_count": 355, + "format": "paperback" + }, + { + "id": 297, + "author_id": 18, + "name": "est et tempus semper", + "isbn": "377040444-0", + "language": "New Zealand Sign Language", + "page_count": 1880, + "format": "ebook" + }, + { + "id": 298, + "author_id": 13, + "name": "suspendisse", + "isbn": "876111878-8", + "language": "Czech", + "page_count": 5270, + "format": "hardcover" + }, + { + "id": 299, + "author_id": 14, + "name": "quis turpis sed ante", + "isbn": "539211801-1", + "language": "Lao", + "page_count": 2170, + "format": "paperback" + }, + { + "id": 300, + "author_id": 16, + "name": "vel est donec", + "isbn": "666553479-0", + "language": "Portuguese", + "page_count": 3307, + "format": "hardcover" + }, + { + "id": 301, + "author_id": 3, + "name": "ante ipsum primis", + "isbn": "329856870-8", + "language": "Kashmiri", + "page_count": 2088, + "format": "hardcover" + }, + { + "id": 302, + "author_id": 20, + "name": "tempor convallis nulla neque", + "isbn": "763061606-6", + "language": "New Zealand Sign Language", + "page_count": 8290, + "format": "hardcover" + }, + { + "id": 303, + "author_id": 13, + "name": "magnis dis parturient", + "isbn": "608712597-3", + "language": "Somali", + "page_count": 1082, + "format": "hardcover" + }, + { + "id": 304, + "author_id": 16, + "name": "ornare imperdiet sapien urna pretium nisl", + "isbn": "190013279-6", + "language": "Filipino", + "page_count": 9475, + "format": "paperback" + }, + { + "id": 305, + "author_id": 4, + "name": "congue elementum in hac habitasse platea", + "isbn": "192281962-X", + "language": "Mongolian", + "page_count": 9828, + "format": "ebook" + }, + { + "id": 306, + "author_id": 6, + "name": "vivamus vel nulla eget eros", + "isbn": "497517356-5", + "language": "Filipino", + "page_count": 5493, + "format": "ebook" + }, + { + "id": 307, + "author_id": 1, + "name": "lectus aliquam sit amet", + "isbn": "909247882-2", + "language": "Punjabi", + "page_count": 6313, + "format": "paperback" + }, + { + "id": 308, + "author_id": 8, + "name": "suspendisse potenti in eleifend quam a odio", + "isbn": "057310300-3", + "language": "German", + "page_count": 6188, + "format": "paperback" + }, + { + "id": 309, + "author_id": 10, + "name": "nibh quisque id justo sit amet sapien", + "isbn": "578255208-5", + "language": "Kyrgyz", + "page_count": 7887, + "format": "paperback" + }, + { + "id": 310, + "author_id": 14, + "name": "lobortis", + "isbn": "508929433-X", + "language": "Hebrew", + "page_count": 8711, + "format": "paperback" + }, + { + "id": 311, + "author_id": 8, + "name": "sed tristique", + "isbn": "680343867-8", + "language": "Montenegrin", + "page_count": 2192, + "format": "ebook" + }, + { + "id": 312, + "author_id": 6, + "name": "pretium quis lectus suspendisse potenti", + "isbn": "923603336-9", + "language": "Tamil", + "page_count": 2143, + "format": "paperback" + }, + { + "id": 313, + "author_id": 16, + "name": "sollicitudin vitae consectetuer eget rutrum at lorem integer", + "isbn": "587865286-2", + "language": "Hungarian", + "page_count": 1490, + "format": "hardcover" + }, + { + "id": 314, + "author_id": 8, + "name": "ipsum", + "isbn": "230310563-3", + "language": "Icelandic", + "page_count": 82, + "format": "paperback" + }, + { + "id": 315, + "author_id": 7, + "name": "consequat morbi a ipsum integer", + "isbn": "395361920-9", + "language": "Korean", + "page_count": 1262, + "format": "ebook" + }, + { + "id": 316, + "author_id": 18, + "name": "donec odio", + "isbn": "190337838-9", + "language": "Norwegian", + "page_count": 197, + "format": "hardcover" + }, + { + "id": 317, + "author_id": 10, + "name": "tellus semper interdum mauris ullamcorper", + "isbn": "553473597-X", + "language": "Tajik", + "page_count": 8480, + "format": "hardcover" + }, + { + "id": 318, + "author_id": 15, + "name": "nascetur ridiculus", + "isbn": "352468564-1", + "language": "Irish Gaelic", + "page_count": 7210, + "format": "hardcover" + }, + { + "id": 319, + "author_id": 3, + "name": "dolor sit", + "isbn": "007943615-3", + "language": "Gujarati", + "page_count": 7556, + "format": "paperback" + }, + { + "id": 320, + "author_id": 6, + "name": "quis orci eget orci vehicula condimentum curabitur", + "isbn": "706162451-5", + "language": "Lithuanian", + "page_count": 9472, + "format": "hardcover" + }, + { + "id": 321, + "author_id": 10, + "name": "neque sapien placerat ante nulla", + "isbn": "269232471-4", + "language": "Japanese", + "page_count": 9718, + "format": "paperback" + }, + { + "id": 322, + "author_id": 9, + "name": "sapien iaculis congue vivamus metus", + "isbn": "442510335-1", + "language": "Fijian", + "page_count": 1031, + "format": "hardcover" + }, + { + "id": 323, + "author_id": 2, + "name": "non", + "isbn": "001709383-X", + "language": "Mongolian", + "page_count": 6983, + "format": "paperback" + }, + { + "id": 324, + "author_id": 13, + "name": "dictumst morbi vestibulum velit id", + "isbn": "077946156-8", + "language": "Assamese", + "page_count": 4893, + "format": "paperback" + }, + { + "id": 325, + "author_id": 17, + "name": "blandit mi in porttitor pede justo eu", + "isbn": "805386013-3", + "language": "Bengali", + "page_count": 9812, + "format": "hardcover" + }, + { + "id": 326, + "author_id": 4, + "name": "ligula sit", + "isbn": "549503339-6", + "language": "Azeri", + "page_count": 7835, + "format": "paperback" + }, + { + "id": 327, + "author_id": 11, + "name": "rhoncus aliquam lacus morbi quis", + "isbn": "564706258-X", + "language": "Marathi", + "page_count": 4837, + "format": "ebook" + }, + { + "id": 328, + "author_id": 9, + "name": "et", + "isbn": "862394615-4", + "language": "Estonian", + "page_count": 4287, + "format": "ebook" + }, + { + "id": 329, + "author_id": 5, + "name": "amet nunc viverra dapibus nulla suscipit ligula", + "isbn": "182950024-4", + "language": "Bulgarian", + "page_count": 1321, + "format": "hardcover" + }, + { + "id": 330, + "author_id": 18, + "name": "rutrum neque aenean auctor gravida sem praesent id", + "isbn": "453506482-2", + "language": "Telugu", + "page_count": 5205, + "format": "ebook" + }, + { + "id": 331, + "author_id": 15, + "name": "dapibus duis at velit eu est congue", + "isbn": "755690534-9", + "language": "Azeri", + "page_count": 1486, + "format": "hardcover" + }, + { + "id": 332, + "author_id": 8, + "name": "cras non velit nec", + "isbn": "125402326-7", + "language": "Estonian", + "page_count": 215, + "format": "paperback" + }, + { + "id": 333, + "author_id": 8, + "name": "posuere metus vitae ipsum aliquam", + "isbn": "846873310-5", + "language": "Greek", + "page_count": 8511, + "format": "ebook" + }, + { + "id": 334, + "author_id": 7, + "name": "libero convallis eget eleifend luctus ultricies eu", + "isbn": "329747319-3", + "language": "Zulu", + "page_count": 8583, + "format": "ebook" + }, + { + "id": 335, + "author_id": 15, + "name": "lacinia erat vestibulum sed", + "isbn": "536965978-8", + "language": "Hungarian", + "page_count": 5192, + "format": "paperback" + }, + { + "id": 336, + "author_id": 14, + "name": "ut blandit non interdum in ante vestibulum", + "isbn": "465911668-9", + "language": "Belarusian", + "page_count": 2716, + "format": "paperback" + }, + { + "id": 337, + "author_id": 9, + "name": "sit amet consectetuer adipiscing elit", + "isbn": "001285086-1", + "language": "Bosnian", + "page_count": 2231, + "format": "ebook" + }, + { + "id": 338, + "author_id": 15, + "name": "in felis eu sapien cursus", + "isbn": "441586112-1", + "language": "Afrikaans", + "page_count": 6516, + "format": "hardcover" + }, + { + "id": 339, + "author_id": 13, + "name": "massa", + "isbn": "864161889-9", + "language": "French", + "page_count": 3667, + "format": "paperback" + }, + { + "id": 340, + "author_id": 7, + "name": "non pretium quis lectus suspendisse potenti in eleifend", + "isbn": "306203465-3", + "language": "Croatian", + "page_count": 1987, + "format": "ebook" + }, + { + "id": 341, + "author_id": 9, + "name": "morbi", + "isbn": "096172393-9", + "language": "Tajik", + "page_count": 3044, + "format": "hardcover" + }, + { + "id": 342, + "author_id": 2, + "name": "etiam", + "isbn": "874442257-1", + "language": "Aymara", + "page_count": 6175, + "format": "ebook" + }, + { + "id": 343, + "author_id": 7, + "name": "magnis", + "isbn": "061295138-3", + "language": "Montenegrin", + "page_count": 5061, + "format": "ebook" + }, + { + "id": 344, + "author_id": 3, + "name": "vehicula", + "isbn": "602336261-3", + "language": "Kazakh", + "page_count": 464, + "format": "paperback" + }, + { + "id": 345, + "author_id": 7, + "name": "mauris", + "isbn": "802317108-9", + "language": "Croatian", + "page_count": 2436, + "format": "hardcover" + }, + { + "id": 346, + "author_id": 1, + "name": "non interdum in ante vestibulum ante", + "isbn": "254803162-4", + "language": "Khmer", + "page_count": 1277, + "format": "hardcover" + }, + { + "id": 347, + "author_id": 7, + "name": "tempor turpis nec euismod scelerisque quam", + "isbn": "811861028-4", + "language": "Amharic", + "page_count": 545, + "format": "paperback" + }, + { + "id": 348, + "author_id": 8, + "name": "vivamus vel nulla eget eros elementum pellentesque quisque", + "isbn": "053420717-0", + "language": "Sotho", + "page_count": 6619, + "format": "paperback" + }, + { + "id": 349, + "author_id": 6, + "name": "primis in faucibus orci luctus et ultrices posuere", + "isbn": "395130562-2", + "language": "Kurdish", + "page_count": 2577, + "format": "ebook" + }, + { + "id": 350, + "author_id": 5, + "name": "mauris sit amet eros suspendisse", + "isbn": "639117216-1", + "language": "Icelandic", + "page_count": 2619, + "format": "hardcover" + }, + { + "id": 351, + "author_id": 3, + "name": "malesuada in imperdiet et commodo vulputate justo", + "isbn": "213920677-0", + "language": "Chinese", + "page_count": 8083, + "format": "ebook" + }, + { + "id": 352, + "author_id": 14, + "name": "curae mauris viverra", + "isbn": "767707283-6", + "language": "Lithuanian", + "page_count": 5489, + "format": "paperback" + }, + { + "id": 353, + "author_id": 12, + "name": "posuere metus vitae ipsum aliquam non mauris morbi", + "isbn": "387622206-0", + "language": "Fijian", + "page_count": 1526, + "format": "hardcover" + }, + { + "id": 354, + "author_id": 12, + "name": "nunc purus phasellus in felis donec semper", + "isbn": "302486961-1", + "language": "Hiri Motu", + "page_count": 9687, + "format": "hardcover" + }, + { + "id": 355, + "author_id": 19, + "name": "est lacinia", + "isbn": "239956412-X", + "language": "Arabic", + "page_count": 4358, + "format": "ebook" + }, + { + "id": 356, + "author_id": 12, + "name": "ridiculus mus vivamus vestibulum sagittis sapien cum", + "isbn": "954323030-7", + "language": "Croatian", + "page_count": 815, + "format": "ebook" + }, + { + "id": 357, + "author_id": 17, + "name": "quis libero", + "isbn": "133956368-1", + "language": "Indonesian", + "page_count": 6617, + "format": "ebook" + }, + { + "id": 358, + "author_id": 10, + "name": "vestibulum", + "isbn": "949722807-4", + "language": "Ndebele", + "page_count": 2103, + "format": "ebook" + }, + { + "id": 359, + "author_id": 9, + "name": "eget tincidunt eget tempus vel pede morbi", + "isbn": "224682673-X", + "language": "Somali", + "page_count": 7027, + "format": "paperback" + }, + { + "id": 360, + "author_id": 17, + "name": "odio curabitur convallis duis consequat dui nec", + "isbn": "699777964-6", + "language": "Czech", + "page_count": 3407, + "format": "paperback" + }, + { + "id": 361, + "author_id": 3, + "name": "adipiscing molestie hendrerit at vulputate vitae nisl", + "isbn": "726853698-4", + "language": "Lithuanian", + "page_count": 3086, + "format": "paperback" + }, + { + "id": 362, + "author_id": 16, + "name": "eget semper rutrum", + "isbn": "131707570-6", + "language": "West Frisian", + "page_count": 1149, + "format": "hardcover" + }, + { + "id": 363, + "author_id": 18, + "name": "non quam nec dui luctus rutrum", + "isbn": "164850328-4", + "language": "German", + "page_count": 2134, + "format": "paperback" + }, + { + "id": 364, + "author_id": 14, + "name": "ultrices posuere cubilia curae nulla dapibus", + "isbn": "011855149-3", + "language": "Norwegian", + "page_count": 6911, + "format": "paperback" + }, + { + "id": 365, + "author_id": 18, + "name": "mauris laoreet", + "isbn": "397893496-5", + "language": "Papiamento", + "page_count": 8447, + "format": "ebook" + }, + { + "id": 366, + "author_id": 18, + "name": "integer a nibh in quis justo", + "isbn": "834578633-2", + "language": "Sotho", + "page_count": 9797, + "format": "ebook" + }, + { + "id": 367, + "author_id": 12, + "name": "turpis nec euismod scelerisque", + "isbn": "720152382-1", + "language": "Aymara", + "page_count": 1273, + "format": "paperback" + }, + { + "id": 368, + "author_id": 9, + "name": "ipsum integer a nibh in quis", + "isbn": "686419437-X", + "language": "Kyrgyz", + "page_count": 816, + "format": "ebook" + }, + { + "id": 369, + "author_id": 17, + "name": "in imperdiet et commodo vulputate", + "isbn": "494260788-4", + "language": "Moldovan", + "page_count": 1020, + "format": "ebook" + }, + { + "id": 370, + "author_id": 6, + "name": "cras mi", + "isbn": "046446908-2", + "language": "Quechua", + "page_count": 4672, + "format": "ebook" + }, + { + "id": 371, + "author_id": 12, + "name": "diam cras pellentesque", + "isbn": "672020282-0", + "language": "Dari", + "page_count": 943, + "format": "ebook" + }, + { + "id": 372, + "author_id": 15, + "name": "nunc purus phasellus in felis donec", + "isbn": "625143224-1", + "language": "Croatian", + "page_count": 9089, + "format": "ebook" + }, + { + "id": 373, + "author_id": 17, + "name": "tincidunt lacus at velit vivamus", + "isbn": "441430393-1", + "language": "New Zealand Sign Language", + "page_count": 8074, + "format": "ebook" + }, + { + "id": 374, + "author_id": 12, + "name": "penatibus et", + "isbn": "927722190-9", + "language": "Gagauz", + "page_count": 529, + "format": "ebook" + }, + { + "id": 375, + "author_id": 7, + "name": "vel sem sed sagittis nam congue", + "isbn": "675372189-4", + "language": "Kazakh", + "page_count": 8849, + "format": "hardcover" + }, + { + "id": 376, + "author_id": 16, + "name": "posuere cubilia curae nulla dapibus dolor", + "isbn": "941531654-3", + "language": "Mongolian", + "page_count": 7360, + "format": "ebook" + }, + { + "id": 377, + "author_id": 20, + "name": "ut", + "isbn": "135562634-X", + "language": "Georgian", + "page_count": 6488, + "format": "ebook" + }, + { + "id": 378, + "author_id": 10, + "name": "felis donec semper", + "isbn": "789659993-7", + "language": "Assamese", + "page_count": 9824, + "format": "hardcover" + }, + { + "id": 379, + "author_id": 9, + "name": "pede ullamcorper", + "isbn": "652180381-6", + "language": "Mongolian", + "page_count": 4003, + "format": "ebook" + }, + { + "id": 380, + "author_id": 9, + "name": "odio elementum eu interdum eu tincidunt", + "isbn": "086336366-0", + "language": "Quechua", + "page_count": 4734, + "format": "paperback" + }, + { + "id": 381, + "author_id": 8, + "name": "mus vivamus vestibulum sagittis", + "isbn": "801337013-5", + "language": "Finnish", + "page_count": 9252, + "format": "ebook" + }, + { + "id": 382, + "author_id": 16, + "name": "id sapien in sapien iaculis congue", + "isbn": "753826294-6", + "language": "Sotho", + "page_count": 531, + "format": "paperback" + }, + { + "id": 383, + "author_id": 7, + "name": "auctor sed tristique in tempus sit amet sem", + "isbn": "168055098-5", + "language": "Dutch", + "page_count": 4553, + "format": "ebook" + }, + { + "id": 384, + "author_id": 15, + "name": "integer pede justo", + "isbn": "082636506-X", + "language": "Bengali", + "page_count": 5697, + "format": "ebook" + }, + { + "id": 385, + "author_id": 6, + "name": "mauris morbi non lectus aliquam sit amet diam", + "isbn": "694486934-9", + "language": "Luxembourgish", + "page_count": 6775, + "format": "paperback" + }, + { + "id": 386, + "author_id": 7, + "name": "lacinia aenean sit amet justo morbi ut", + "isbn": "657735043-4", + "language": "Greek", + "page_count": 501, + "format": "hardcover" + }, + { + "id": 387, + "author_id": 2, + "name": "nam congue risus semper porta", + "isbn": "632797533-X", + "language": "Bulgarian", + "page_count": 7575, + "format": "ebook" + }, + { + "id": 388, + "author_id": 18, + "name": "adipiscing elit proin risus", + "isbn": "127328049-0", + "language": "Korean", + "page_count": 9834, + "format": "ebook" + }, + { + "id": 389, + "author_id": 13, + "name": "odio justo sollicitudin ut suscipit a feugiat et", + "isbn": "266368238-1", + "language": "Malay", + "page_count": 5363, + "format": "ebook" + }, + { + "id": 390, + "author_id": 11, + "name": "viverra diam vitae quam suspendisse potenti nullam", + "isbn": "722848448-7", + "language": "Quechua", + "page_count": 6662, + "format": "hardcover" + }, + { + "id": 391, + "author_id": 8, + "name": "massa id lobortis convallis tortor risus dapibus augue", + "isbn": "485842583-5", + "language": "Tswana", + "page_count": 9252, + "format": "ebook" + }, + { + "id": 392, + "author_id": 6, + "name": "nunc commodo placerat praesent", + "isbn": "785703012-0", + "language": "Bengali", + "page_count": 1811, + "format": "hardcover" + }, + { + "id": 393, + "author_id": 15, + "name": "id nisl venenatis", + "isbn": "344306016-1", + "language": "Tswana", + "page_count": 2249, + "format": "hardcover" + }, + { + "id": 394, + "author_id": 16, + "name": "nam tristique tortor eu pede", + "isbn": "466135219-X", + "language": "Danish", + "page_count": 7178, + "format": "hardcover" + }, + { + "id": 395, + "author_id": 15, + "name": "volutpat eleifend donec ut dolor morbi vel", + "isbn": "500247488-8", + "language": "Korean", + "page_count": 352, + "format": "ebook" + }, + { + "id": 396, + "author_id": 5, + "name": "curae mauris viverra diam vitae quam suspendisse", + "isbn": "739203715-3", + "language": "Tsonga", + "page_count": 9886, + "format": "hardcover" + }, + { + "id": 397, + "author_id": 4, + "name": "tortor", + "isbn": "203671887-6", + "language": "Northern Sotho", + "page_count": 3034, + "format": "ebook" + }, + { + "id": 398, + "author_id": 19, + "name": "pellentesque ultrices phasellus id", + "isbn": "992704191-8", + "language": "Kashmiri", + "page_count": 6074, + "format": "ebook" + }, + { + "id": 399, + "author_id": 8, + "name": "eget nunc", + "isbn": "986307207-9", + "language": "Guaraní", + "page_count": 3265, + "format": "ebook" + }, + { + "id": 400, + "author_id": 6, + "name": "vel lectus in quam fringilla", + "isbn": "120309444-2", + "language": "Korean", + "page_count": 7301, + "format": "hardcover" + }, + { + "id": 401, + "author_id": 19, + "name": "cras", + "isbn": "256287088-3", + "language": "Polish", + "page_count": 4115, + "format": "ebook" + }, + { + "id": 402, + "author_id": 5, + "name": "sed augue aliquam erat volutpat", + "isbn": "752092154-9", + "language": "Gujarati", + "page_count": 2613, + "format": "ebook" + }, + { + "id": 403, + "author_id": 17, + "name": "duis bibendum felis sed interdum venenatis", + "isbn": "400414555-4", + "language": "Hungarian", + "page_count": 4471, + "format": "ebook" + }, + { + "id": 404, + "author_id": 10, + "name": "vulputate elementum nullam varius nulla facilisi cras", + "isbn": "401581809-1", + "language": "Hungarian", + "page_count": 6806, + "format": "hardcover" + }, + { + "id": 405, + "author_id": 11, + "name": "lectus in quam fringilla rhoncus mauris enim leo", + "isbn": "989959344-3", + "language": "Icelandic", + "page_count": 4680, + "format": "hardcover" + }, + { + "id": 406, + "author_id": 12, + "name": "purus sit amet nulla quisque arcu libero rutrum", + "isbn": "066066135-7", + "language": "Catalan", + "page_count": 6590, + "format": "paperback" + }, + { + "id": 407, + "author_id": 2, + "name": "gravida sem praesent id massa id nisl", + "isbn": "656697508-X", + "language": "Bosnian", + "page_count": 8191, + "format": "ebook" + }, + { + "id": 408, + "author_id": 13, + "name": "diam id ornare imperdiet sapien urna pretium nisl", + "isbn": "694608229-X", + "language": "Croatian", + "page_count": 9327, + "format": "hardcover" + }, + { + "id": 409, + "author_id": 19, + "name": "cubilia curae nulla dapibus dolor vel", + "isbn": "198810919-1", + "language": "Tamil", + "page_count": 7241, + "format": "ebook" + }, + { + "id": 410, + "author_id": 11, + "name": "integer tincidunt ante vel ipsum praesent blandit", + "isbn": "946635967-3", + "language": "Amharic", + "page_count": 9371, + "format": "hardcover" + }, + { + "id": 411, + "author_id": 8, + "name": "nisl duis", + "isbn": "286113123-3", + "language": "Norwegian", + "page_count": 1184, + "format": "ebook" + }, + { + "id": 412, + "author_id": 19, + "name": "lectus suspendisse", + "isbn": "600820924-9", + "language": "Ndebele", + "page_count": 6218, + "format": "ebook" + }, + { + "id": 413, + "author_id": 7, + "name": "at nibh in hac habitasse platea dictumst", + "isbn": "247610699-2", + "language": "Montenegrin", + "page_count": 8478, + "format": "ebook" + }, + { + "id": 414, + "author_id": 3, + "name": "odio in", + "isbn": "427700524-1", + "language": "Bosnian", + "page_count": 3989, + "format": "paperback" + }, + { + "id": 415, + "author_id": 1, + "name": "dictumst etiam faucibus", + "isbn": "262821628-0", + "language": "Polish", + "page_count": 9951, + "format": "hardcover" + }, + { + "id": 416, + "author_id": 20, + "name": "non velit donec", + "isbn": "860699699-8", + "language": "Hindi", + "page_count": 9438, + "format": "ebook" + }, + { + "id": 417, + "author_id": 16, + "name": "nunc nisl duis bibendum", + "isbn": "891453190-2", + "language": "Gujarati", + "page_count": 497, + "format": "hardcover" + }, + { + "id": 418, + "author_id": 7, + "name": "posuere cubilia curae mauris viverra diam vitae", + "isbn": "721177242-5", + "language": "Indonesian", + "page_count": 2910, + "format": "hardcover" + }, + { + "id": 419, + "author_id": 1, + "name": "purus phasellus", + "isbn": "162892905-7", + "language": "Finnish", + "page_count": 2752, + "format": "hardcover" + }, + { + "id": 420, + "author_id": 14, + "name": "arcu sed", + "isbn": "509870887-7", + "language": "Tsonga", + "page_count": 9373, + "format": "hardcover" + }, + { + "id": 421, + "author_id": 9, + "name": "lacus morbi quis", + "isbn": "928341214-1", + "language": "Tsonga", + "page_count": 8497, + "format": "hardcover" + }, + { + "id": 422, + "author_id": 17, + "name": "molestie sed justo pellentesque viverra pede", + "isbn": "021341901-7", + "language": "Estonian", + "page_count": 3963, + "format": "ebook" + }, + { + "id": 423, + "author_id": 2, + "name": "luctus et ultrices posuere cubilia curae mauris viverra", + "isbn": "677822944-6", + "language": "Danish", + "page_count": 2948, + "format": "paperback" + }, + { + "id": 424, + "author_id": 4, + "name": "odio", + "isbn": "194306458-X", + "language": "Swati", + "page_count": 99, + "format": "ebook" + }, + { + "id": 425, + "author_id": 3, + "name": "suspendisse accumsan tortor quis turpis sed ante vivamus", + "isbn": "748014240-4", + "language": "Khmer", + "page_count": 7435, + "format": "paperback" + }, + { + "id": 426, + "author_id": 19, + "name": "risus dapibus augue", + "isbn": "661747921-1", + "language": "Guaraní", + "page_count": 378, + "format": "ebook" + }, + { + "id": 427, + "author_id": 4, + "name": "blandit nam nulla integer pede justo lacinia", + "isbn": "297039770-6", + "language": "Hungarian", + "page_count": 2236, + "format": "hardcover" + }, + { + "id": 428, + "author_id": 11, + "name": "venenatis non sodales", + "isbn": "297534203-9", + "language": "Tetum", + "page_count": 1736, + "format": "paperback" + }, + { + "id": 429, + "author_id": 17, + "name": "pulvinar lobortis est phasellus", + "isbn": "049039775-1", + "language": "Malagasy", + "page_count": 1935, + "format": "ebook" + }, + { + "id": 430, + "author_id": 19, + "name": "pede venenatis non sodales sed tincidunt eu", + "isbn": "877381387-7", + "language": "Norwegian", + "page_count": 2168, + "format": "ebook" + }, + { + "id": 431, + "author_id": 10, + "name": "leo", + "isbn": "825306604-X", + "language": "Dari", + "page_count": 8472, + "format": "ebook" + }, + { + "id": 432, + "author_id": 1, + "name": "augue vestibulum ante ipsum primis in", + "isbn": "164583147-7", + "language": "Hungarian", + "page_count": 779, + "format": "paperback" + }, + { + "id": 433, + "author_id": 5, + "name": "lacus at velit vivamus vel nulla eget", + "isbn": "417435633-5", + "language": "Afrikaans", + "page_count": 4054, + "format": "ebook" + }, + { + "id": 434, + "author_id": 6, + "name": "lacus morbi quis tortor id", + "isbn": "972910539-1", + "language": "Hungarian", + "page_count": 3613, + "format": "ebook" + }, + { + "id": 435, + "author_id": 15, + "name": "libero", + "isbn": "345880016-6", + "language": "Luxembourgish", + "page_count": 197, + "format": "hardcover" + }, + { + "id": 436, + "author_id": 7, + "name": "lobortis sapien", + "isbn": "860989283-2", + "language": "Tamil", + "page_count": 4510, + "format": "ebook" + }, + { + "id": 437, + "author_id": 6, + "name": "consequat lectus in est risus auctor sed tristique", + "isbn": "318093045-4", + "language": "Romanian", + "page_count": 7733, + "format": "paperback" + }, + { + "id": 438, + "author_id": 3, + "name": "et tempus semper est quam pharetra", + "isbn": "385499173-8", + "language": "Papiamento", + "page_count": 2099, + "format": "ebook" + }, + { + "id": 439, + "author_id": 2, + "name": "maecenas rhoncus aliquam", + "isbn": "508143367-5", + "language": "Polish", + "page_count": 1078, + "format": "paperback" + }, + { + "id": 440, + "author_id": 7, + "name": "euismod scelerisque quam turpis adipiscing lorem vitae", + "isbn": "719992922-6", + "language": "Hungarian", + "page_count": 4562, + "format": "paperback" + }, + { + "id": 441, + "author_id": 12, + "name": "turpis sed", + "isbn": "107302452-0", + "language": "Guaraní", + "page_count": 6154, + "format": "ebook" + }, + { + "id": 442, + "author_id": 9, + "name": "vestibulum aliquet ultrices erat tortor sollicitudin mi", + "isbn": "856093417-0", + "language": "Chinese", + "page_count": 9158, + "format": "ebook" + }, + { + "id": 443, + "author_id": 14, + "name": "sed tristique in tempus sit amet", + "isbn": "218784124-3", + "language": "Czech", + "page_count": 8470, + "format": "ebook" + }, + { + "id": 444, + "author_id": 18, + "name": "sapien sapien non mi", + "isbn": "955539304-4", + "language": "Greek", + "page_count": 6242, + "format": "ebook" + }, + { + "id": 445, + "author_id": 18, + "name": "at nibh in", + "isbn": "983445119-9", + "language": "Swati", + "page_count": 4607, + "format": "hardcover" + }, + { + "id": 446, + "author_id": 19, + "name": "nibh quisque id justo sit", + "isbn": "544723020-9", + "language": "Swahili", + "page_count": 7136, + "format": "ebook" + }, + { + "id": 447, + "author_id": 10, + "name": "interdum eu tincidunt in leo maecenas pulvinar", + "isbn": "060591941-0", + "language": "Amharic", + "page_count": 8310, + "format": "hardcover" + }, + { + "id": 448, + "author_id": 19, + "name": "consequat dui nec nisi volutpat eleifend donec ut", + "isbn": "394660843-4", + "language": "Dzongkha", + "page_count": 8415, + "format": "ebook" + }, + { + "id": 449, + "author_id": 16, + "name": "in", + "isbn": "035616218-4", + "language": "Macedonian", + "page_count": 9733, + "format": "paperback" + }, + { + "id": 450, + "author_id": 11, + "name": "a feugiat et eros vestibulum ac", + "isbn": "110062989-0", + "language": "Hungarian", + "page_count": 5985, + "format": "ebook" + }, + { + "id": 451, + "author_id": 9, + "name": "nulla ut erat id mauris", + "isbn": "836537046-8", + "language": "West Frisian", + "page_count": 6223, + "format": "ebook" + }, + { + "id": 452, + "author_id": 16, + "name": "nec dui", + "isbn": "184321884-4", + "language": "Tswana", + "page_count": 9728, + "format": "hardcover" + }, + { + "id": 453, + "author_id": 11, + "name": "cras non velit nec nisi vulputate nonummy", + "isbn": "159916801-4", + "language": "Filipino", + "page_count": 3024, + "format": "ebook" + }, + { + "id": 454, + "author_id": 9, + "name": "bibendum", + "isbn": "423371834-X", + "language": "Māori", + "page_count": 4181, + "format": "paperback" + }, + { + "id": 455, + "author_id": 11, + "name": "lacus at turpis donec posuere metus vitae", + "isbn": "742714290-X", + "language": "Kyrgyz", + "page_count": 3318, + "format": "paperback" + }, + { + "id": 456, + "author_id": 19, + "name": "phasellus sit", + "isbn": "711244349-0", + "language": "Kyrgyz", + "page_count": 6872, + "format": "ebook" + }, + { + "id": 457, + "author_id": 1, + "name": "porttitor pede justo eu massa donec", + "isbn": "600939059-1", + "language": "Romanian", + "page_count": 7355, + "format": "ebook" + }, + { + "id": 458, + "author_id": 1, + "name": "commodo vulputate justo in blandit ultrices enim lorem", + "isbn": "908330795-6", + "language": "Moldovan", + "page_count": 9556, + "format": "paperback" + }, + { + "id": 459, + "author_id": 5, + "name": "in blandit ultrices enim lorem ipsum", + "isbn": "173626995-X", + "language": "Icelandic", + "page_count": 7032, + "format": "paperback" + }, + { + "id": 460, + "author_id": 13, + "name": "ante", + "isbn": "158047201-X", + "language": "Czech", + "page_count": 6577, + "format": "hardcover" + }, + { + "id": 461, + "author_id": 14, + "name": "volutpat in congue", + "isbn": "204552044-7", + "language": "Hebrew", + "page_count": 372, + "format": "hardcover" + }, + { + "id": 462, + "author_id": 2, + "name": "pulvinar sed", + "isbn": "268765026-9", + "language": "Maltese", + "page_count": 7477, + "format": "ebook" + }, + { + "id": 463, + "author_id": 16, + "name": "maecenas rhoncus aliquam lacus morbi quis tortor id", + "isbn": "052987305-2", + "language": "Swedish", + "page_count": 7612, + "format": "paperback" + }, + { + "id": 464, + "author_id": 14, + "name": "lectus pellentesque", + "isbn": "964481019-8", + "language": "Latvian", + "page_count": 6712, + "format": "hardcover" + }, + { + "id": 465, + "author_id": 9, + "name": "rutrum nulla", + "isbn": "003779849-9", + "language": "German", + "page_count": 2084, + "format": "paperback" + }, + { + "id": 466, + "author_id": 10, + "name": "nulla suspendisse potenti cras in purus", + "isbn": "977933572-2", + "language": "Irish Gaelic", + "page_count": 3377, + "format": "paperback" + }, + { + "id": 467, + "author_id": 17, + "name": "curae", + "isbn": "389565544-9", + "language": "Bislama", + "page_count": 1334, + "format": "ebook" + }, + { + "id": 468, + "author_id": 16, + "name": "quam", + "isbn": "517548244-0", + "language": "Bosnian", + "page_count": 179, + "format": "ebook" + }, + { + "id": 469, + "author_id": 1, + "name": "magna vulputate luctus cum sociis", + "isbn": "862781923-8", + "language": "Norwegian", + "page_count": 8618, + "format": "paperback" + }, + { + "id": 470, + "author_id": 18, + "name": "aliquet", + "isbn": "817358909-7", + "language": "Greek", + "page_count": 8349, + "format": "ebook" + }, + { + "id": 471, + "author_id": 14, + "name": "orci luctus", + "isbn": "359497102-3", + "language": "Tetum", + "page_count": 5712, + "format": "ebook" + }, + { + "id": 472, + "author_id": 16, + "name": "pretium quis lectus suspendisse potenti", + "isbn": "081669384-6", + "language": "Burmese", + "page_count": 9803, + "format": "hardcover" + }, + { + "id": 473, + "author_id": 6, + "name": "eu", + "isbn": "929906441-5", + "language": "Guaraní", + "page_count": 6857, + "format": "hardcover" + }, + { + "id": 474, + "author_id": 1, + "name": "in", + "isbn": "026694503-1", + "language": "Tajik", + "page_count": 7051, + "format": "paperback" + }, + { + "id": 475, + "author_id": 17, + "name": "feugiat et", + "isbn": "470224923-1", + "language": "Korean", + "page_count": 8652, + "format": "paperback" + }, + { + "id": 476, + "author_id": 6, + "name": "vivamus", + "isbn": "256114756-8", + "language": "Ndebele", + "page_count": 9958, + "format": "ebook" + }, + { + "id": 477, + "author_id": 11, + "name": "luctus cum sociis natoque", + "isbn": "897351658-2", + "language": "Belarusian", + "page_count": 3756, + "format": "ebook" + }, + { + "id": 478, + "author_id": 6, + "name": "donec posuere metus vitae ipsum", + "isbn": "824365667-7", + "language": "Estonian", + "page_count": 7931, + "format": "ebook" + }, + { + "id": 479, + "author_id": 9, + "name": "porttitor lacus at turpis donec posuere metus vitae", + "isbn": "005883230-0", + "language": "Aymara", + "page_count": 4352, + "format": "ebook" + }, + { + "id": 480, + "author_id": 19, + "name": "luctus et ultrices posuere cubilia curae donec", + "isbn": "851339757-1", + "language": "Tsonga", + "page_count": 9792, + "format": "hardcover" + }, + { + "id": 481, + "author_id": 11, + "name": "volutpat sapien arcu sed augue", + "isbn": "478930207-5", + "language": "Kyrgyz", + "page_count": 596, + "format": "ebook" + }, + { + "id": 482, + "author_id": 11, + "name": "cursus vestibulum proin eu mi nulla ac", + "isbn": "734856452-6", + "language": "Gagauz", + "page_count": 6081, + "format": "ebook" + }, + { + "id": 483, + "author_id": 9, + "name": "viverra eget congue eget semper rutrum nulla", + "isbn": "420947088-0", + "language": "Somali", + "page_count": 1921, + "format": "paperback" + }, + { + "id": 484, + "author_id": 4, + "name": "tincidunt eu felis fusce posuere", + "isbn": "969247894-7", + "language": "Zulu", + "page_count": 7052, + "format": "paperback" + }, + { + "id": 485, + "author_id": 9, + "name": "nulla justo aliquam quis turpis", + "isbn": "194194180-X", + "language": "Haitian Creole", + "page_count": 8198, + "format": "paperback" + }, + { + "id": 486, + "author_id": 20, + "name": "nisl ut", + "isbn": "428017886-0", + "language": "Kashmiri", + "page_count": 9675, + "format": "paperback" + }, + { + "id": 487, + "author_id": 17, + "name": "quam nec dui", + "isbn": "761421712-8", + "language": "Dzongkha", + "page_count": 5669, + "format": "ebook" + }, + { + "id": 488, + "author_id": 17, + "name": "in hac habitasse platea dictumst maecenas ut", + "isbn": "301118474-7", + "language": "Romanian", + "page_count": 5544, + "format": "hardcover" + }, + { + "id": 489, + "author_id": 5, + "name": "et ultrices posuere cubilia curae donec", + "isbn": "587178479-8", + "language": "Polish", + "page_count": 6446, + "format": "ebook" + }, + { + "id": 490, + "author_id": 19, + "name": "imperdiet sapien urna pretium nisl ut volutpat sapien", + "isbn": "742002018-3", + "language": "Tajik", + "page_count": 6090, + "format": "paperback" + }, + { + "id": 491, + "author_id": 16, + "name": "posuere cubilia curae donec pharetra magna", + "isbn": "886355047-6", + "language": "Kyrgyz", + "page_count": 194, + "format": "ebook" + }, + { + "id": 492, + "author_id": 16, + "name": "cum sociis natoque", + "isbn": "980313242-3", + "language": "New Zealand Sign Language", + "page_count": 6478, + "format": "paperback" + }, + { + "id": 493, + "author_id": 8, + "name": "urna ut tellus nulla ut erat", + "isbn": "358109634-X", + "language": "Afrikaans", + "page_count": 7898, + "format": "paperback" + }, + { + "id": 494, + "author_id": 3, + "name": "tempus semper", + "isbn": "244000966-0", + "language": "Moldovan", + "page_count": 1612, + "format": "hardcover" + }, + { + "id": 495, + "author_id": 5, + "name": "vestibulum ante ipsum primis", + "isbn": "380336548-1", + "language": "Afrikaans", + "page_count": 7352, + "format": "hardcover" + }, + { + "id": 496, + "author_id": 14, + "name": "et", + "isbn": "272473505-6", + "language": "Azeri", + "page_count": 475, + "format": "hardcover" + }, + { + "id": 497, + "author_id": 5, + "name": "pede ac diam cras pellentesque volutpat dui maecenas", + "isbn": "535718654-5", + "language": "Bislama", + "page_count": 8853, + "format": "ebook" + }, + { + "id": 498, + "author_id": 7, + "name": "eget rutrum at lorem integer tincidunt", + "isbn": "144413560-0", + "language": "Tetum", + "page_count": 1586, + "format": "ebook" + }, + { + "id": 499, + "author_id": 9, + "name": "sit amet eleifend pede libero", + "isbn": "395137401-2", + "language": "Haitian Creole", + "page_count": 1132, + "format": "paperback" + }, + { + "id": 500, + "author_id": 13, + "name": "nulla sed", + "isbn": "914179467-2", + "language": "Tajik", + "page_count": 2221, + "format": "paperback" + }, + { + "id": 501, + "author_id": 14, + "name": "massa volutpat convallis morbi odio odio elementum", + "isbn": "508082966-4", + "language": "Estonian", + "page_count": 8207, + "format": "ebook" + }, + { + "id": 502, + "author_id": 1, + "name": "pede ullamcorper augue", + "isbn": "580812950-8", + "language": "Tamil", + "page_count": 7788, + "format": "ebook" + }, + { + "id": 503, + "author_id": 12, + "name": "aliquam non mauris", + "isbn": "488376294-7", + "language": "Polish", + "page_count": 7656, + "format": "hardcover" + }, + { + "id": 504, + "author_id": 18, + "name": "sem duis aliquam convallis nunc proin at", + "isbn": "780571087-2", + "language": "Kannada", + "page_count": 2737, + "format": "ebook" + }, + { + "id": 505, + "author_id": 19, + "name": "dictumst aliquam augue", + "isbn": "896921917-X", + "language": "Polish", + "page_count": 6782, + "format": "paperback" + }, + { + "id": 506, + "author_id": 5, + "name": "eu interdum eu tincidunt in", + "isbn": "350771025-0", + "language": "Kurdish", + "page_count": 9831, + "format": "paperback" + }, + { + "id": 507, + "author_id": 3, + "name": "justo in hac habitasse platea dictumst etiam faucibus", + "isbn": "549381646-6", + "language": "Tok Pisin", + "page_count": 9909, + "format": "hardcover" + }, + { + "id": 508, + "author_id": 14, + "name": "tempus vivamus in felis eu sapien cursus", + "isbn": "776041845-0", + "language": "Azeri", + "page_count": 2378, + "format": "paperback" + }, + { + "id": 509, + "author_id": 10, + "name": "sollicitudin vitae consectetuer eget rutrum at", + "isbn": "363383889-9", + "language": "Nepali", + "page_count": 9849, + "format": "hardcover" + }, + { + "id": 510, + "author_id": 2, + "name": "rhoncus aliquet pulvinar sed nisl nunc", + "isbn": "567708911-7", + "language": "Gujarati", + "page_count": 5363, + "format": "paperback" + }, + { + "id": 511, + "author_id": 1, + "name": "nibh in quis justo", + "isbn": "209299304-6", + "language": "Croatian", + "page_count": 4835, + "format": "ebook" + }, + { + "id": 512, + "author_id": 11, + "name": "augue a suscipit nulla elit", + "isbn": "839527114-X", + "language": "Tamil", + "page_count": 3341, + "format": "paperback" + }, + { + "id": 513, + "author_id": 11, + "name": "massa donec dapibus duis at velit eu", + "isbn": "134050727-7", + "language": "Dzongkha", + "page_count": 1500, + "format": "hardcover" + }, + { + "id": 514, + "author_id": 5, + "name": "faucibus orci luctus et ultrices posuere cubilia curae", + "isbn": "529116035-7", + "language": "Danish", + "page_count": 5780, + "format": "hardcover" + }, + { + "id": 515, + "author_id": 20, + "name": "turpis nec euismod scelerisque", + "isbn": "155849227-5", + "language": "Kashmiri", + "page_count": 666, + "format": "ebook" + }, + { + "id": 516, + "author_id": 20, + "name": "congue vivamus", + "isbn": "849213477-1", + "language": "Greek", + "page_count": 5014, + "format": "ebook" + }, + { + "id": 517, + "author_id": 3, + "name": "amet", + "isbn": "298489162-7", + "language": "Macedonian", + "page_count": 5265, + "format": "ebook" + }, + { + "id": 518, + "author_id": 8, + "name": "morbi sem mauris laoreet ut rhoncus aliquet pulvinar", + "isbn": "827411501-5", + "language": "Romanian", + "page_count": 5990, + "format": "paperback" + }, + { + "id": 519, + "author_id": 8, + "name": "ipsum", + "isbn": "004240372-3", + "language": "Azeri", + "page_count": 6854, + "format": "ebook" + }, + { + "id": 520, + "author_id": 13, + "name": "elit proin interdum mauris non ligula pellentesque", + "isbn": "380277713-1", + "language": "Guaraní", + "page_count": 7088, + "format": "paperback" + }, + { + "id": 521, + "author_id": 17, + "name": "et tempus semper", + "isbn": "798379740-0", + "language": "Estonian", + "page_count": 4354, + "format": "ebook" + }, + { + "id": 522, + "author_id": 20, + "name": "primis in faucibus orci luctus et ultrices posuere", + "isbn": "759405760-0", + "language": "French", + "page_count": 7000, + "format": "ebook" + }, + { + "id": 523, + "author_id": 15, + "name": "curabitur convallis duis consequat dui", + "isbn": "362517659-9", + "language": "Afrikaans", + "page_count": 9409, + "format": "ebook" + }, + { + "id": 524, + "author_id": 13, + "name": "mauris enim leo", + "isbn": "700422106-7", + "language": "Armenian", + "page_count": 5079, + "format": "hardcover" + }, + { + "id": 525, + "author_id": 12, + "name": "morbi ut odio cras", + "isbn": "941875353-7", + "language": "Yiddish", + "page_count": 9970, + "format": "hardcover" + }, + { + "id": 526, + "author_id": 7, + "name": "interdum mauris", + "isbn": "912328358-0", + "language": "Amharic", + "page_count": 7581, + "format": "paperback" + }, + { + "id": 527, + "author_id": 8, + "name": "nisi", + "isbn": "243766059-3", + "language": "Malay", + "page_count": 4612, + "format": "paperback" + }, + { + "id": 528, + "author_id": 8, + "name": "consequat ut nulla", + "isbn": "834133329-5", + "language": "Estonian", + "page_count": 435, + "format": "paperback" + }, + { + "id": 529, + "author_id": 10, + "name": "cum", + "isbn": "144119754-0", + "language": "Finnish", + "page_count": 5089, + "format": "hardcover" + }, + { + "id": 530, + "author_id": 15, + "name": "in tempor turpis nec euismod scelerisque quam", + "isbn": "516266728-5", + "language": "Chinese", + "page_count": 2373, + "format": "hardcover" + }, + { + "id": 531, + "author_id": 18, + "name": "non mauris morbi non lectus aliquam", + "isbn": "998679189-8", + "language": "Malagasy", + "page_count": 2406, + "format": "ebook" + }, + { + "id": 532, + "author_id": 12, + "name": "lacinia eget tincidunt eget", + "isbn": "194487704-5", + "language": "Gujarati", + "page_count": 7041, + "format": "paperback" + }, + { + "id": 533, + "author_id": 2, + "name": "auctor", + "isbn": "739586179-5", + "language": "Amharic", + "page_count": 2434, + "format": "hardcover" + }, + { + "id": 534, + "author_id": 3, + "name": "lacinia nisi venenatis", + "isbn": "002621526-8", + "language": "Catalan", + "page_count": 5914, + "format": "paperback" + }, + { + "id": 535, + "author_id": 18, + "name": "faucibus orci luctus et ultrices posuere", + "isbn": "968629592-5", + "language": "German", + "page_count": 8983, + "format": "hardcover" + }, + { + "id": 536, + "author_id": 8, + "name": "hac habitasse", + "isbn": "260000494-7", + "language": "Dari", + "page_count": 1603, + "format": "paperback" + }, + { + "id": 537, + "author_id": 16, + "name": "integer non velit donec diam neque", + "isbn": "718287115-7", + "language": "Māori", + "page_count": 3359, + "format": "paperback" + }, + { + "id": 538, + "author_id": 10, + "name": "mus etiam vel", + "isbn": "908003949-7", + "language": "Kazakh", + "page_count": 1507, + "format": "ebook" + }, + { + "id": 539, + "author_id": 2, + "name": "consectetuer adipiscing", + "isbn": "396510607-4", + "language": "Kyrgyz", + "page_count": 541, + "format": "hardcover" + }, + { + "id": 540, + "author_id": 9, + "name": "potenti nullam", + "isbn": "258654018-2", + "language": "Kyrgyz", + "page_count": 6891, + "format": "hardcover" + }, + { + "id": 541, + "author_id": 1, + "name": "amet sem fusce consequat", + "isbn": "812406332-X", + "language": "Norwegian", + "page_count": 475, + "format": "hardcover" + }, + { + "id": 542, + "author_id": 20, + "name": "iaculis diam erat fermentum", + "isbn": "833765238-1", + "language": "Azeri", + "page_count": 1204, + "format": "ebook" + }, + { + "id": 543, + "author_id": 6, + "name": "sit", + "isbn": "612633231-8", + "language": "Kashmiri", + "page_count": 2535, + "format": "paperback" + }, + { + "id": 544, + "author_id": 7, + "name": "in porttitor pede justo", + "isbn": "221378065-X", + "language": "Spanish", + "page_count": 3456, + "format": "paperback" + }, + { + "id": 545, + "author_id": 17, + "name": "lobortis vel", + "isbn": "615312452-6", + "language": "Mongolian", + "page_count": 9872, + "format": "hardcover" + }, + { + "id": 546, + "author_id": 20, + "name": "vestibulum", + "isbn": "157006146-7", + "language": "Lithuanian", + "page_count": 108, + "format": "ebook" + }, + { + "id": 547, + "author_id": 6, + "name": "a feugiat et eros vestibulum ac", + "isbn": "226289568-6", + "language": "New Zealand Sign Language", + "page_count": 6891, + "format": "ebook" + }, + { + "id": 548, + "author_id": 7, + "name": "massa volutpat convallis morbi odio odio elementum", + "isbn": "449673763-9", + "language": "Romanian", + "page_count": 6355, + "format": "paperback" + }, + { + "id": 549, + "author_id": 4, + "name": "luctus et ultrices posuere cubilia", + "isbn": "492763880-4", + "language": "Tajik", + "page_count": 9543, + "format": "paperback" + }, + { + "id": 550, + "author_id": 2, + "name": "nisi nam ultrices libero non mattis", + "isbn": "384527675-4", + "language": "Filipino", + "page_count": 659, + "format": "hardcover" + }, + { + "id": 551, + "author_id": 10, + "name": "sit amet consectetuer adipiscing elit proin risus", + "isbn": "473900362-7", + "language": "Kashmiri", + "page_count": 199, + "format": "ebook" + }, + { + "id": 552, + "author_id": 18, + "name": "molestie lorem quisque", + "isbn": "446063087-7", + "language": "Estonian", + "page_count": 363, + "format": "ebook" + }, + { + "id": 553, + "author_id": 18, + "name": "elit sodales scelerisque mauris", + "isbn": "717850571-0", + "language": "French", + "page_count": 530, + "format": "hardcover" + }, + { + "id": 554, + "author_id": 2, + "name": "in faucibus", + "isbn": "006986774-7", + "language": "Lithuanian", + "page_count": 9812, + "format": "paperback" + }, + { + "id": 555, + "author_id": 12, + "name": "suspendisse potenti nullam porttitor lacus at turpis donec", + "isbn": "501012384-3", + "language": "Croatian", + "page_count": 874, + "format": "ebook" + }, + { + "id": 556, + "author_id": 14, + "name": "imperdiet", + "isbn": "687156540-X", + "language": "Dhivehi", + "page_count": 6211, + "format": "ebook" + }, + { + "id": 557, + "author_id": 19, + "name": "non lectus aliquam sit", + "isbn": "255888646-0", + "language": "Dari", + "page_count": 7887, + "format": "hardcover" + }, + { + "id": 558, + "author_id": 12, + "name": "in lacus", + "isbn": "361620335-X", + "language": "Bulgarian", + "page_count": 328, + "format": "hardcover" + }, + { + "id": 559, + "author_id": 18, + "name": "sem fusce", + "isbn": "713918763-0", + "language": "Tajik", + "page_count": 2237, + "format": "ebook" + }, + { + "id": 560, + "author_id": 12, + "name": "consequat metus sapien ut nunc vestibulum ante ipsum", + "isbn": "139319780-9", + "language": "Kurdish", + "page_count": 574, + "format": "ebook" + }, + { + "id": 561, + "author_id": 14, + "name": "aliquet maecenas leo odio condimentum", + "isbn": "562121320-3", + "language": "Korean", + "page_count": 7817, + "format": "ebook" + }, + { + "id": 562, + "author_id": 3, + "name": "mollis molestie lorem quisque", + "isbn": "748054183-X", + "language": "Dhivehi", + "page_count": 6710, + "format": "hardcover" + }, + { + "id": 563, + "author_id": 3, + "name": "mauris lacinia sapien quis libero nullam", + "isbn": "138574374-3", + "language": "Nepali", + "page_count": 1758, + "format": "ebook" + }, + { + "id": 564, + "author_id": 8, + "name": "morbi vestibulum velit", + "isbn": "540465314-0", + "language": "Polish", + "page_count": 8733, + "format": "paperback" + }, + { + "id": 565, + "author_id": 1, + "name": "a odio in hac habitasse platea dictumst maecenas", + "isbn": "286942653-4", + "language": "Aymara", + "page_count": 9047, + "format": "hardcover" + }, + { + "id": 566, + "author_id": 17, + "name": "tristique est et tempus semper est", + "isbn": "239191824-0", + "language": "Korean", + "page_count": 4499, + "format": "hardcover" + }, + { + "id": 567, + "author_id": 11, + "name": "tincidunt nulla mollis molestie lorem quisque ut erat", + "isbn": "020954172-5", + "language": "Bengali", + "page_count": 8819, + "format": "paperback" + }, + { + "id": 568, + "author_id": 3, + "name": "integer non velit donec diam", + "isbn": "893658391-3", + "language": "Kazakh", + "page_count": 6690, + "format": "paperback" + }, + { + "id": 569, + "author_id": 5, + "name": "rutrum nulla tellus in", + "isbn": "338354789-2", + "language": "Greek", + "page_count": 1658, + "format": "hardcover" + }, + { + "id": 570, + "author_id": 17, + "name": "fermentum donec ut mauris eget massa tempor", + "isbn": "709249649-7", + "language": "Swedish", + "page_count": 8793, + "format": "ebook" + }, + { + "id": 571, + "author_id": 10, + "name": "mauris sit", + "isbn": "827653668-9", + "language": "Kazakh", + "page_count": 8816, + "format": "hardcover" + }, + { + "id": 572, + "author_id": 19, + "name": "nunc vestibulum ante ipsum primis", + "isbn": "769374391-X", + "language": "Latvian", + "page_count": 4363, + "format": "hardcover" + }, + { + "id": 573, + "author_id": 11, + "name": "eget vulputate ut ultrices vel augue", + "isbn": "631198817-8", + "language": "Finnish", + "page_count": 2285, + "format": "hardcover" + }, + { + "id": 574, + "author_id": 8, + "name": "vehicula consequat morbi", + "isbn": "215605081-3", + "language": "Estonian", + "page_count": 5009, + "format": "paperback" + }, + { + "id": 575, + "author_id": 19, + "name": "posuere cubilia curae mauris viverra diam vitae", + "isbn": "814077734-X", + "language": "Armenian", + "page_count": 3320, + "format": "ebook" + }, + { + "id": 576, + "author_id": 16, + "name": "iaculis diam erat fermentum justo", + "isbn": "405332382-7", + "language": "Italian", + "page_count": 6446, + "format": "paperback" + }, + { + "id": 577, + "author_id": 14, + "name": "quisque ut", + "isbn": "361030836-2", + "language": "Estonian", + "page_count": 5222, + "format": "paperback" + }, + { + "id": 578, + "author_id": 4, + "name": "duis mattis", + "isbn": "191569985-1", + "language": "Sotho", + "page_count": 3217, + "format": "ebook" + }, + { + "id": 579, + "author_id": 18, + "name": "aenean auctor gravida sem praesent id massa", + "isbn": "508195378-4", + "language": "Hindi", + "page_count": 8421, + "format": "ebook" + }, + { + "id": 580, + "author_id": 8, + "name": "integer ac neque duis bibendum morbi non", + "isbn": "324933824-9", + "language": "Spanish", + "page_count": 823, + "format": "ebook" + }, + { + "id": 581, + "author_id": 17, + "name": "sed sagittis nam congue risus semper porta volutpat", + "isbn": "185071479-7", + "language": "Montenegrin", + "page_count": 8620, + "format": "hardcover" + }, + { + "id": 582, + "author_id": 13, + "name": "ornare imperdiet sapien urna pretium nisl ut", + "isbn": "633922032-0", + "language": "Luxembourgish", + "page_count": 2920, + "format": "hardcover" + }, + { + "id": 583, + "author_id": 8, + "name": "ultrices vel augue vestibulum ante ipsum primis in", + "isbn": "255831945-0", + "language": "Arabic", + "page_count": 3876, + "format": "paperback" + }, + { + "id": 584, + "author_id": 11, + "name": "nascetur ridiculus mus vivamus vestibulum sagittis sapien", + "isbn": "202188628-X", + "language": "Marathi", + "page_count": 7359, + "format": "ebook" + }, + { + "id": 585, + "author_id": 6, + "name": "dis parturient montes nascetur ridiculus mus", + "isbn": "469585683-2", + "language": "Afrikaans", + "page_count": 6483, + "format": "ebook" + }, + { + "id": 586, + "author_id": 2, + "name": "elementum pellentesque", + "isbn": "206639734-2", + "language": "Greek", + "page_count": 3631, + "format": "paperback" + }, + { + "id": 587, + "author_id": 20, + "name": "nec molestie sed justo pellentesque", + "isbn": "888444225-7", + "language": "Fijian", + "page_count": 6816, + "format": "paperback" + }, + { + "id": 588, + "author_id": 9, + "name": "tortor id nulla ultrices", + "isbn": "924348018-9", + "language": "Luxembourgish", + "page_count": 9731, + "format": "paperback" + }, + { + "id": 589, + "author_id": 12, + "name": "rhoncus mauris enim leo rhoncus sed vestibulum sit", + "isbn": "560263893-8", + "language": "Ndebele", + "page_count": 4738, + "format": "paperback" + }, + { + "id": 590, + "author_id": 20, + "name": "in", + "isbn": "700359643-1", + "language": "Gujarati", + "page_count": 6609, + "format": "ebook" + }, + { + "id": 591, + "author_id": 14, + "name": "interdum eu tincidunt in leo maecenas", + "isbn": "680087974-6", + "language": "Aymara", + "page_count": 7643, + "format": "paperback" + }, + { + "id": 592, + "author_id": 19, + "name": "ligula suspendisse ornare consequat lectus in est risus", + "isbn": "712427739-6", + "language": "Somali", + "page_count": 8989, + "format": "paperback" + }, + { + "id": 593, + "author_id": 7, + "name": "amet erat nulla tempus", + "isbn": "652958414-5", + "language": "Catalan", + "page_count": 9328, + "format": "paperback" + }, + { + "id": 594, + "author_id": 9, + "name": "tincidunt nulla mollis molestie lorem quisque ut", + "isbn": "944750839-1", + "language": "Zulu", + "page_count": 3906, + "format": "ebook" + }, + { + "id": 595, + "author_id": 8, + "name": "est donec odio justo sollicitudin ut suscipit a", + "isbn": "162113713-9", + "language": "Pashto", + "page_count": 1205, + "format": "ebook" + }, + { + "id": 596, + "author_id": 10, + "name": "est", + "isbn": "439737911-4", + "language": "Tswana", + "page_count": 8543, + "format": "paperback" + }, + { + "id": 597, + "author_id": 1, + "name": "enim leo rhoncus sed vestibulum sit", + "isbn": "726137454-7", + "language": "Finnish", + "page_count": 6418, + "format": "paperback" + }, + { + "id": 598, + "author_id": 12, + "name": "natoque penatibus et magnis dis", + "isbn": "835771663-6", + "language": "Polish", + "page_count": 6415, + "format": "ebook" + }, + { + "id": 599, + "author_id": 13, + "name": "interdum mauris ullamcorper purus sit amet nulla", + "isbn": "486304706-1", + "language": "Tswana", + "page_count": 4641, + "format": "hardcover" + }, + { + "id": 600, + "author_id": 5, + "name": "lorem id ligula suspendisse ornare consequat lectus in", + "isbn": "689390760-5", + "language": "Oriya", + "page_count": 338, + "format": "hardcover" + }, + { + "id": 601, + "author_id": 8, + "name": "cras", + "isbn": "161645803-8", + "language": "Hiri Motu", + "page_count": 492, + "format": "hardcover" + }, + { + "id": 602, + "author_id": 20, + "name": "at lorem integer tincidunt ante", + "isbn": "924139023-9", + "language": "Bosnian", + "page_count": 2745, + "format": "hardcover" + }, + { + "id": 603, + "author_id": 17, + "name": "suscipit nulla elit", + "isbn": "533711255-4", + "language": "Lithuanian", + "page_count": 1799, + "format": "hardcover" + }, + { + "id": 604, + "author_id": 19, + "name": "luctus rutrum nulla tellus", + "isbn": "353351967-8", + "language": "Montenegrin", + "page_count": 3576, + "format": "hardcover" + }, + { + "id": 605, + "author_id": 1, + "name": "morbi non lectus aliquam sit", + "isbn": "722480503-3", + "language": "Hiri Motu", + "page_count": 877, + "format": "paperback" + }, + { + "id": 606, + "author_id": 6, + "name": "aliquet massa id lobortis", + "isbn": "937751857-1", + "language": "Swahili", + "page_count": 9012, + "format": "paperback" + }, + { + "id": 607, + "author_id": 11, + "name": "amet sapien dignissim vestibulum vestibulum", + "isbn": "051228546-2", + "language": "Dhivehi", + "page_count": 9325, + "format": "hardcover" + }, + { + "id": 608, + "author_id": 13, + "name": "quam sapien", + "isbn": "293309416-9", + "language": "Albanian", + "page_count": 1776, + "format": "ebook" + }, + { + "id": 609, + "author_id": 8, + "name": "ipsum primis in faucibus orci luctus et ultrices", + "isbn": "217733069-6", + "language": "Amharic", + "page_count": 1284, + "format": "paperback" + }, + { + "id": 610, + "author_id": 16, + "name": "phasellus sit", + "isbn": "304228649-5", + "language": "Polish", + "page_count": 6578, + "format": "paperback" + }, + { + "id": 611, + "author_id": 1, + "name": "nisl nunc nisl duis bibendum felis", + "isbn": "762830023-5", + "language": "Dhivehi", + "page_count": 5286, + "format": "ebook" + }, + { + "id": 612, + "author_id": 18, + "name": "vivamus vel", + "isbn": "120124855-8", + "language": "Aymara", + "page_count": 3470, + "format": "hardcover" + }, + { + "id": 613, + "author_id": 7, + "name": "nunc donec quis orci eget orci vehicula condimentum", + "isbn": "071675960-8", + "language": "Indonesian", + "page_count": 2014, + "format": "paperback" + }, + { + "id": 614, + "author_id": 4, + "name": "vestibulum", + "isbn": "150891230-0", + "language": "Tswana", + "page_count": 6141, + "format": "ebook" + }, + { + "id": 615, + "author_id": 15, + "name": "arcu adipiscing molestie hendrerit at vulputate vitae", + "isbn": "096292998-0", + "language": "Kannada", + "page_count": 5918, + "format": "paperback" + }, + { + "id": 616, + "author_id": 19, + "name": "penatibus et magnis", + "isbn": "029320057-2", + "language": "Chinese", + "page_count": 7778, + "format": "paperback" + }, + { + "id": 617, + "author_id": 1, + "name": "ullamcorper purus", + "isbn": "840331800-6", + "language": "Estonian", + "page_count": 6464, + "format": "hardcover" + }, + { + "id": 618, + "author_id": 14, + "name": "adipiscing molestie hendrerit at", + "isbn": "678751330-5", + "language": "Bengali", + "page_count": 1046, + "format": "ebook" + }, + { + "id": 619, + "author_id": 19, + "name": "vestibulum sit amet cursus id turpis integer", + "isbn": "784860887-5", + "language": "Moldovan", + "page_count": 5975, + "format": "ebook" + }, + { + "id": 620, + "author_id": 19, + "name": "orci", + "isbn": "667059222-1", + "language": "Latvian", + "page_count": 2453, + "format": "hardcover" + }, + { + "id": 621, + "author_id": 1, + "name": "justo aliquam", + "isbn": "878593676-6", + "language": "Swahili", + "page_count": 5525, + "format": "ebook" + }, + { + "id": 622, + "author_id": 10, + "name": "sed vestibulum sit amet cursus id turpis", + "isbn": "821790729-3", + "language": "Lao", + "page_count": 399, + "format": "hardcover" + }, + { + "id": 623, + "author_id": 13, + "name": "lectus aliquam sit amet diam in", + "isbn": "113454420-0", + "language": "Albanian", + "page_count": 7476, + "format": "ebook" + }, + { + "id": 624, + "author_id": 7, + "name": "mauris non ligula", + "isbn": "726327224-5", + "language": "Sotho", + "page_count": 1327, + "format": "ebook" + }, + { + "id": 625, + "author_id": 15, + "name": "habitasse platea dictumst maecenas", + "isbn": "481620542-X", + "language": "Yiddish", + "page_count": 8082, + "format": "paperback" + }, + { + "id": 626, + "author_id": 11, + "name": "in faucibus orci luctus et", + "isbn": "918096605-5", + "language": "Catalan", + "page_count": 5620, + "format": "paperback" + }, + { + "id": 627, + "author_id": 14, + "name": "vel accumsan tellus nisi eu orci mauris", + "isbn": "941026499-5", + "language": "Tsonga", + "page_count": 8449, + "format": "hardcover" + }, + { + "id": 628, + "author_id": 16, + "name": "aenean lectus pellentesque eget nunc donec", + "isbn": "225029900-5", + "language": "Yiddish", + "page_count": 4870, + "format": "ebook" + }, + { + "id": 629, + "author_id": 15, + "name": "magnis dis parturient", + "isbn": "584278627-3", + "language": "Aymara", + "page_count": 8196, + "format": "hardcover" + }, + { + "id": 630, + "author_id": 15, + "name": "sit amet", + "isbn": "107632128-3", + "language": "Greek", + "page_count": 8293, + "format": "hardcover" + }, + { + "id": 631, + "author_id": 1, + "name": "nibh in hac habitasse platea", + "isbn": "823610028-6", + "language": "Moldovan", + "page_count": 3593, + "format": "ebook" + }, + { + "id": 632, + "author_id": 18, + "name": "felis eu sapien", + "isbn": "121747444-7", + "language": "Telugu", + "page_count": 3020, + "format": "paperback" + }, + { + "id": 633, + "author_id": 5, + "name": "fringilla rhoncus", + "isbn": "857743839-2", + "language": "Hungarian", + "page_count": 8741, + "format": "paperback" + }, + { + "id": 634, + "author_id": 3, + "name": "semper", + "isbn": "804354181-7", + "language": "Bengali", + "page_count": 8563, + "format": "paperback" + }, + { + "id": 635, + "author_id": 5, + "name": "felis fusce posuere felis sed lacus morbi", + "isbn": "999040878-5", + "language": "Aymara", + "page_count": 1788, + "format": "ebook" + }, + { + "id": 636, + "author_id": 4, + "name": "mollis molestie lorem quisque ut erat curabitur", + "isbn": "619972409-7", + "language": "Hebrew", + "page_count": 1067, + "format": "ebook" + }, + { + "id": 637, + "author_id": 7, + "name": "sapien cursus vestibulum proin", + "isbn": "851518386-2", + "language": "Hebrew", + "page_count": 298, + "format": "paperback" + }, + { + "id": 638, + "author_id": 12, + "name": "molestie nibh in lectus pellentesque at nulla", + "isbn": "736050861-4", + "language": "Khmer", + "page_count": 5353, + "format": "ebook" + }, + { + "id": 639, + "author_id": 11, + "name": "placerat ante nulla justo aliquam quis turpis", + "isbn": "239682116-4", + "language": "Romanian", + "page_count": 1745, + "format": "hardcover" + }, + { + "id": 640, + "author_id": 3, + "name": "adipiscing", + "isbn": "514208762-3", + "language": "Tajik", + "page_count": 2694, + "format": "hardcover" + }, + { + "id": 641, + "author_id": 1, + "name": "dis parturient montes nascetur ridiculus", + "isbn": "692466283-8", + "language": "Maltese", + "page_count": 8246, + "format": "ebook" + }, + { + "id": 642, + "author_id": 13, + "name": "eu magna vulputate", + "isbn": "383799312-4", + "language": "Kurdish", + "page_count": 6594, + "format": "hardcover" + }, + { + "id": 643, + "author_id": 17, + "name": "in", + "isbn": "641432497-3", + "language": "Dutch", + "page_count": 922, + "format": "paperback" + }, + { + "id": 644, + "author_id": 15, + "name": "sem sed sagittis nam congue risus semper porta", + "isbn": "249663913-9", + "language": "Tajik", + "page_count": 2217, + "format": "paperback" + }, + { + "id": 645, + "author_id": 10, + "name": "nec sem duis aliquam convallis nunc proin at", + "isbn": "022439112-7", + "language": "Khmer", + "page_count": 6987, + "format": "ebook" + }, + { + "id": 646, + "author_id": 7, + "name": "gravida sem praesent id massa id nisl", + "isbn": "577986252-4", + "language": "Guaraní", + "page_count": 4288, + "format": "ebook" + }, + { + "id": 647, + "author_id": 14, + "name": "amet erat nulla tempus vivamus in felis eu", + "isbn": "224781436-0", + "language": "Papiamento", + "page_count": 808, + "format": "ebook" + }, + { + "id": 648, + "author_id": 13, + "name": "tristique est et tempus semper", + "isbn": "248503567-9", + "language": "Khmer", + "page_count": 7336, + "format": "ebook" + }, + { + "id": 649, + "author_id": 4, + "name": "metus arcu", + "isbn": "389737465-X", + "language": "Italian", + "page_count": 5088, + "format": "ebook" + }, + { + "id": 650, + "author_id": 9, + "name": "hac habitasse platea dictumst etiam", + "isbn": "725112329-0", + "language": "Catalan", + "page_count": 3020, + "format": "paperback" + }, + { + "id": 651, + "author_id": 14, + "name": "felis sed interdum venenatis turpis enim blandit mi", + "isbn": "698962091-9", + "language": "Czech", + "page_count": 2044, + "format": "ebook" + }, + { + "id": 652, + "author_id": 16, + "name": "in blandit ultrices enim", + "isbn": "685451003-1", + "language": "Czech", + "page_count": 7299, + "format": "paperback" + }, + { + "id": 653, + "author_id": 15, + "name": "aliquam augue quam sollicitudin vitae consectetuer eget rutrum", + "isbn": "491144734-6", + "language": "Filipino", + "page_count": 3232, + "format": "paperback" + }, + { + "id": 654, + "author_id": 15, + "name": "integer", + "isbn": "680857867-2", + "language": "Bengali", + "page_count": 4955, + "format": "paperback" + }, + { + "id": 655, + "author_id": 9, + "name": "augue vel", + "isbn": "128389336-3", + "language": "Bengali", + "page_count": 3280, + "format": "ebook" + }, + { + "id": 656, + "author_id": 5, + "name": "ipsum", + "isbn": "483172069-0", + "language": "Italian", + "page_count": 8480, + "format": "paperback" + }, + { + "id": 657, + "author_id": 19, + "name": "sed ante vivamus tortor", + "isbn": "183018873-9", + "language": "Tsonga", + "page_count": 9533, + "format": "paperback" + }, + { + "id": 658, + "author_id": 12, + "name": "in porttitor pede justo eu massa", + "isbn": "147836527-7", + "language": "Telugu", + "page_count": 5818, + "format": "hardcover" + }, + { + "id": 659, + "author_id": 3, + "name": "maecenas tristique est et tempus", + "isbn": "325122986-9", + "language": "Maltese", + "page_count": 9486, + "format": "hardcover" + }, + { + "id": 660, + "author_id": 11, + "name": "id lobortis convallis tortor risus dapibus augue vel", + "isbn": "364248479-4", + "language": "Bulgarian", + "page_count": 8654, + "format": "paperback" + }, + { + "id": 661, + "author_id": 15, + "name": "luctus et ultrices posuere cubilia curae", + "isbn": "936792326-0", + "language": "Greek", + "page_count": 8914, + "format": "paperback" + }, + { + "id": 662, + "author_id": 10, + "name": "eget rutrum at lorem integer tincidunt", + "isbn": "350331079-7", + "language": "Dzongkha", + "page_count": 5882, + "format": "paperback" + }, + { + "id": 663, + "author_id": 7, + "name": "dignissim vestibulum vestibulum ante ipsum primis in", + "isbn": "717637083-4", + "language": "Hindi", + "page_count": 2519, + "format": "ebook" + }, + { + "id": 664, + "author_id": 1, + "name": "dui vel nisl duis ac nibh fusce lacus", + "isbn": "392292333-X", + "language": "Dari", + "page_count": 8751, + "format": "paperback" + }, + { + "id": 665, + "author_id": 1, + "name": "aliquam augue quam sollicitudin vitae consectetuer", + "isbn": "793738143-4", + "language": "Zulu", + "page_count": 6992, + "format": "ebook" + }, + { + "id": 666, + "author_id": 8, + "name": "iaculis justo in hac habitasse platea", + "isbn": "149531645-9", + "language": "Polish", + "page_count": 584, + "format": "ebook" + }, + { + "id": 667, + "author_id": 19, + "name": "nunc purus phasellus", + "isbn": "703277664-7", + "language": "Zulu", + "page_count": 7789, + "format": "hardcover" + }, + { + "id": 668, + "author_id": 14, + "name": "congue risus semper porta volutpat quam", + "isbn": "255162526-2", + "language": "Maltese", + "page_count": 4059, + "format": "ebook" + }, + { + "id": 669, + "author_id": 7, + "name": "ut massa volutpat convallis", + "isbn": "819197925-X", + "language": "Sotho", + "page_count": 8920, + "format": "hardcover" + }, + { + "id": 670, + "author_id": 9, + "name": "proin eu", + "isbn": "967363376-2", + "language": "Polish", + "page_count": 7318, + "format": "ebook" + }, + { + "id": 671, + "author_id": 8, + "name": "amet consectetuer adipiscing elit proin risus praesent lectus", + "isbn": "421586312-0", + "language": "Kannada", + "page_count": 4716, + "format": "hardcover" + }, + { + "id": 672, + "author_id": 10, + "name": "odio in hac habitasse", + "isbn": "584520483-6", + "language": "Chinese", + "page_count": 4948, + "format": "paperback" + }, + { + "id": 673, + "author_id": 9, + "name": "pulvinar lobortis est phasellus sit", + "isbn": "463620328-3", + "language": "Amharic", + "page_count": 9835, + "format": "hardcover" + }, + { + "id": 674, + "author_id": 2, + "name": "sit amet nunc viverra dapibus nulla", + "isbn": "698984645-3", + "language": "Mongolian", + "page_count": 340, + "format": "paperback" + }, + { + "id": 675, + "author_id": 14, + "name": "morbi", + "isbn": "342111836-1", + "language": "Persian", + "page_count": 464, + "format": "ebook" + }, + { + "id": 676, + "author_id": 18, + "name": "nulla quisque arcu", + "isbn": "945823684-3", + "language": "Kannada", + "page_count": 1760, + "format": "hardcover" + }, + { + "id": 677, + "author_id": 16, + "name": "maecenas tristique est et tempus", + "isbn": "208350364-3", + "language": "New Zealand Sign Language", + "page_count": 8161, + "format": "ebook" + }, + { + "id": 678, + "author_id": 14, + "name": "vulputate luctus cum sociis", + "isbn": "259955126-9", + "language": "Kyrgyz", + "page_count": 90, + "format": "ebook" + }, + { + "id": 679, + "author_id": 13, + "name": "luctus et ultrices posuere cubilia", + "isbn": "127838851-6", + "language": "Indonesian", + "page_count": 273, + "format": "ebook" + }, + { + "id": 680, + "author_id": 6, + "name": "id", + "isbn": "166330865-9", + "language": "Marathi", + "page_count": 9388, + "format": "paperback" + }, + { + "id": 681, + "author_id": 5, + "name": "pellentesque volutpat dui maecenas tristique est et tempus", + "isbn": "579600273-2", + "language": "Indonesian", + "page_count": 3522, + "format": "ebook" + }, + { + "id": 682, + "author_id": 13, + "name": "elit proin interdum mauris non ligula pellentesque ultrices", + "isbn": "258318718-X", + "language": "Guaraní", + "page_count": 7059, + "format": "paperback" + }, + { + "id": 683, + "author_id": 20, + "name": "quis turpis sed ante vivamus tortor duis mattis", + "isbn": "680195726-0", + "language": "Mongolian", + "page_count": 2264, + "format": "hardcover" + }, + { + "id": 684, + "author_id": 15, + "name": "mauris enim leo rhoncus sed", + "isbn": "160454173-3", + "language": "English", + "page_count": 4532, + "format": "ebook" + }, + { + "id": 685, + "author_id": 15, + "name": "blandit mi in", + "isbn": "423763352-7", + "language": "Kashmiri", + "page_count": 4061, + "format": "paperback" + }, + { + "id": 686, + "author_id": 15, + "name": "massa quis augue luctus tincidunt nulla mollis molestie", + "isbn": "928415379-4", + "language": "Somali", + "page_count": 2057, + "format": "paperback" + }, + { + "id": 687, + "author_id": 13, + "name": "sociis natoque penatibus et magnis dis", + "isbn": "537109245-5", + "language": "Afrikaans", + "page_count": 7438, + "format": "paperback" + }, + { + "id": 688, + "author_id": 16, + "name": "in quis justo maecenas", + "isbn": "950970640-X", + "language": "Greek", + "page_count": 5330, + "format": "hardcover" + }, + { + "id": 689, + "author_id": 1, + "name": "justo sit amet sapien", + "isbn": "498187269-0", + "language": "Korean", + "page_count": 7871, + "format": "paperback" + }, + { + "id": 690, + "author_id": 5, + "name": "ultrices posuere cubilia curae nulla", + "isbn": "858530919-9", + "language": "Oriya", + "page_count": 1497, + "format": "hardcover" + }, + { + "id": 691, + "author_id": 9, + "name": "donec ut mauris", + "isbn": "935590787-7", + "language": "German", + "page_count": 5097, + "format": "ebook" + }, + { + "id": 692, + "author_id": 4, + "name": "non velit", + "isbn": "349865007-6", + "language": "Belarusian", + "page_count": 1180, + "format": "paperback" + }, + { + "id": 693, + "author_id": 1, + "name": "pede justo eu massa donec dapibus", + "isbn": "362607053-0", + "language": "Italian", + "page_count": 1214, + "format": "hardcover" + }, + { + "id": 694, + "author_id": 9, + "name": "diam cras", + "isbn": "173599751-X", + "language": "Malayalam", + "page_count": 1285, + "format": "paperback" + }, + { + "id": 695, + "author_id": 16, + "name": "odio justo sollicitudin ut suscipit a feugiat et", + "isbn": "156040922-3", + "language": "Thai", + "page_count": 5123, + "format": "hardcover" + }, + { + "id": 696, + "author_id": 16, + "name": "lorem quisque ut erat curabitur gravida nisi", + "isbn": "496441448-5", + "language": "Kashmiri", + "page_count": 5004, + "format": "ebook" + }, + { + "id": 697, + "author_id": 1, + "name": "enim blandit", + "isbn": "074752071-2", + "language": "Tamil", + "page_count": 7424, + "format": "ebook" + }, + { + "id": 698, + "author_id": 14, + "name": "cubilia curae nulla dapibus", + "isbn": "442674629-9", + "language": "Tswana", + "page_count": 7371, + "format": "paperback" + }, + { + "id": 699, + "author_id": 14, + "name": "eleifend luctus", + "isbn": "804752473-9", + "language": "Gagauz", + "page_count": 3365, + "format": "hardcover" + }, + { + "id": 700, + "author_id": 11, + "name": "adipiscing lorem vitae mattis nibh", + "isbn": "899627591-3", + "language": "Tajik", + "page_count": 8631, + "format": "ebook" + }, + { + "id": 701, + "author_id": 18, + "name": "nulla facilisi", + "isbn": "247171709-8", + "language": "Burmese", + "page_count": 6446, + "format": "paperback" + }, + { + "id": 702, + "author_id": 5, + "name": "tellus", + "isbn": "227731262-2", + "language": "Northern Sotho", + "page_count": 5227, + "format": "paperback" + }, + { + "id": 703, + "author_id": 2, + "name": "felis ut at dolor quis odio consequat varius", + "isbn": "991005078-1", + "language": "Mongolian", + "page_count": 3486, + "format": "hardcover" + }, + { + "id": 704, + "author_id": 6, + "name": "nulla justo aliquam quis turpis eget elit", + "isbn": "718081822-4", + "language": "Bulgarian", + "page_count": 6090, + "format": "ebook" + }, + { + "id": 705, + "author_id": 5, + "name": "cubilia curae mauris viverra diam vitae", + "isbn": "694908672-5", + "language": "Armenian", + "page_count": 9578, + "format": "ebook" + }, + { + "id": 706, + "author_id": 20, + "name": "ipsum primis", + "isbn": "753997247-5", + "language": "Tswana", + "page_count": 6608, + "format": "ebook" + }, + { + "id": 707, + "author_id": 4, + "name": "morbi odio odio elementum eu interdum eu tincidunt", + "isbn": "262202203-4", + "language": "Luxembourgish", + "page_count": 90, + "format": "ebook" + }, + { + "id": 708, + "author_id": 6, + "name": "lorem quisque ut", + "isbn": "821460120-7", + "language": "Northern Sotho", + "page_count": 5574, + "format": "paperback" + }, + { + "id": 709, + "author_id": 14, + "name": "odio consequat varius integer ac", + "isbn": "355929088-0", + "language": "Sotho", + "page_count": 9495, + "format": "hardcover" + }, + { + "id": 710, + "author_id": 7, + "name": "platea dictumst morbi vestibulum velit id pretium", + "isbn": "012486147-4", + "language": "Pashto", + "page_count": 3100, + "format": "hardcover" + }, + { + "id": 711, + "author_id": 14, + "name": "justo", + "isbn": "462148382-X", + "language": "Arabic", + "page_count": 1801, + "format": "paperback" + }, + { + "id": 712, + "author_id": 6, + "name": "nec sem duis aliquam convallis nunc proin at", + "isbn": "604456093-7", + "language": "Aymara", + "page_count": 9696, + "format": "hardcover" + }, + { + "id": 713, + "author_id": 19, + "name": "vitae mattis nibh ligula", + "isbn": "155770348-5", + "language": "Fijian", + "page_count": 6615, + "format": "hardcover" + }, + { + "id": 714, + "author_id": 11, + "name": "lobortis convallis tortor risus dapibus", + "isbn": "393253623-1", + "language": "Yiddish", + "page_count": 5235, + "format": "ebook" + }, + { + "id": 715, + "author_id": 13, + "name": "platea dictumst morbi vestibulum velit", + "isbn": "206560095-0", + "language": "Portuguese", + "page_count": 2454, + "format": "hardcover" + }, + { + "id": 716, + "author_id": 6, + "name": "praesent id massa id nisl", + "isbn": "504787406-0", + "language": "Quechua", + "page_count": 3903, + "format": "ebook" + }, + { + "id": 717, + "author_id": 18, + "name": "mauris lacinia sapien", + "isbn": "907255344-6", + "language": "Aymara", + "page_count": 4292, + "format": "paperback" + }, + { + "id": 718, + "author_id": 9, + "name": "platea dictumst aliquam augue quam", + "isbn": "208953339-0", + "language": "Mongolian", + "page_count": 7126, + "format": "hardcover" + }, + { + "id": 719, + "author_id": 11, + "name": "neque sapien placerat ante nulla justo aliquam", + "isbn": "489496212-8", + "language": "French", + "page_count": 5521, + "format": "ebook" + }, + { + "id": 720, + "author_id": 10, + "name": "justo sit amet sapien dignissim", + "isbn": "981814575-5", + "language": "Romanian", + "page_count": 1135, + "format": "paperback" + }, + { + "id": 721, + "author_id": 20, + "name": "hendrerit", + "isbn": "769108502-8", + "language": "West Frisian", + "page_count": 240, + "format": "ebook" + }, + { + "id": 722, + "author_id": 8, + "name": "quisque", + "isbn": "903701571-9", + "language": "Korean", + "page_count": 6937, + "format": "paperback" + }, + { + "id": 723, + "author_id": 14, + "name": "semper sapien a libero nam dui proin leo", + "isbn": "723408528-9", + "language": "Malay", + "page_count": 7818, + "format": "ebook" + }, + { + "id": 724, + "author_id": 4, + "name": "blandit", + "isbn": "497388274-7", + "language": "Armenian", + "page_count": 9478, + "format": "ebook" + }, + { + "id": 725, + "author_id": 17, + "name": "pede", + "isbn": "384768179-6", + "language": "Tetum", + "page_count": 5901, + "format": "paperback" + }, + { + "id": 726, + "author_id": 4, + "name": "nam ultrices libero non mattis pulvinar nulla", + "isbn": "792826123-5", + "language": "Kurdish", + "page_count": 125, + "format": "hardcover" + }, + { + "id": 727, + "author_id": 18, + "name": "vel ipsum", + "isbn": "232159262-1", + "language": "Polish", + "page_count": 7799, + "format": "ebook" + }, + { + "id": 728, + "author_id": 16, + "name": "lorem quisque ut", + "isbn": "532371661-4", + "language": "Assamese", + "page_count": 9487, + "format": "hardcover" + }, + { + "id": 729, + "author_id": 17, + "name": "a odio in hac habitasse platea dictumst maecenas", + "isbn": "184049474-3", + "language": "Punjabi", + "page_count": 686, + "format": "paperback" + }, + { + "id": 730, + "author_id": 15, + "name": "ipsum primis in faucibus orci luctus et", + "isbn": "844848017-1", + "language": "Afrikaans", + "page_count": 3680, + "format": "ebook" + }, + { + "id": 731, + "author_id": 18, + "name": "non mauris morbi non lectus aliquam", + "isbn": "161117064-8", + "language": "Lithuanian", + "page_count": 8953, + "format": "paperback" + }, + { + "id": 732, + "author_id": 4, + "name": "ligula pellentesque ultrices phasellus id sapien in", + "isbn": "473740063-7", + "language": "Papiamento", + "page_count": 3754, + "format": "hardcover" + }, + { + "id": 733, + "author_id": 9, + "name": "in lacus curabitur at", + "isbn": "081547238-2", + "language": "Oriya", + "page_count": 5372, + "format": "paperback" + }, + { + "id": 734, + "author_id": 14, + "name": "ante nulla justo", + "isbn": "081413644-3", + "language": "Armenian", + "page_count": 3262, + "format": "hardcover" + }, + { + "id": 735, + "author_id": 15, + "name": "rutrum nulla", + "isbn": "806209178-3", + "language": "Polish", + "page_count": 3987, + "format": "ebook" + }, + { + "id": 736, + "author_id": 17, + "name": "montes", + "isbn": "967900192-X", + "language": "Bulgarian", + "page_count": 2218, + "format": "hardcover" + }, + { + "id": 737, + "author_id": 12, + "name": "varius integer ac", + "isbn": "382502745-7", + "language": "Pashto", + "page_count": 316, + "format": "hardcover" + }, + { + "id": 738, + "author_id": 2, + "name": "donec ut dolor morbi vel lectus in quam", + "isbn": "620277046-5", + "language": "Kazakh", + "page_count": 7827, + "format": "hardcover" + }, + { + "id": 739, + "author_id": 16, + "name": "diam id", + "isbn": "971565868-7", + "language": "Kannada", + "page_count": 1134, + "format": "paperback" + }, + { + "id": 740, + "author_id": 15, + "name": "risus praesent lectus vestibulum", + "isbn": "855523240-6", + "language": "Zulu", + "page_count": 5212, + "format": "ebook" + }, + { + "id": 741, + "author_id": 17, + "name": "vel dapibus at diam nam tristique tortor eu", + "isbn": "039639353-5", + "language": "Khmer", + "page_count": 2357, + "format": "hardcover" + }, + { + "id": 742, + "author_id": 13, + "name": "viverra diam vitae quam suspendisse potenti nullam", + "isbn": "151936479-2", + "language": "Lithuanian", + "page_count": 3679, + "format": "ebook" + }, + { + "id": 743, + "author_id": 9, + "name": "sed tristique in", + "isbn": "719237898-4", + "language": "Māori", + "page_count": 1144, + "format": "hardcover" + }, + { + "id": 744, + "author_id": 20, + "name": "dui maecenas tristique est et tempus semper est", + "isbn": "750637293-2", + "language": "Indonesian", + "page_count": 6882, + "format": "ebook" + }, + { + "id": 745, + "author_id": 15, + "name": "tellus semper interdum", + "isbn": "147505732-6", + "language": "Norwegian", + "page_count": 1475, + "format": "paperback" + }, + { + "id": 746, + "author_id": 20, + "name": "montes nascetur ridiculus mus etiam vel augue vestibulum", + "isbn": "992142599-4", + "language": "New Zealand Sign Language", + "page_count": 6448, + "format": "ebook" + }, + { + "id": 747, + "author_id": 19, + "name": "mauris ullamcorper purus sit amet nulla quisque arcu", + "isbn": "310315895-5", + "language": "Dari", + "page_count": 419, + "format": "hardcover" + }, + { + "id": 748, + "author_id": 13, + "name": "sit", + "isbn": "093545423-3", + "language": "Finnish", + "page_count": 7649, + "format": "ebook" + }, + { + "id": 749, + "author_id": 11, + "name": "felis ut at dolor quis odio consequat", + "isbn": "447714715-5", + "language": "Hindi", + "page_count": 2581, + "format": "ebook" + }, + { + "id": 750, + "author_id": 14, + "name": "bibendum imperdiet nullam orci pede venenatis non", + "isbn": "358146809-3", + "language": "Burmese", + "page_count": 3992, + "format": "hardcover" + }, + { + "id": 751, + "author_id": 8, + "name": "tortor", + "isbn": "144143188-8", + "language": "Greek", + "page_count": 9150, + "format": "ebook" + }, + { + "id": 752, + "author_id": 16, + "name": "cras pellentesque volutpat dui maecenas tristique est et", + "isbn": "415524478-0", + "language": "Romanian", + "page_count": 1147, + "format": "hardcover" + }, + { + "id": 753, + "author_id": 4, + "name": "pharetra magna ac consequat metus sapien", + "isbn": "316816510-7", + "language": "Danish", + "page_count": 5983, + "format": "paperback" + }, + { + "id": 754, + "author_id": 11, + "name": "risus praesent lectus vestibulum quam sapien varius", + "isbn": "139661493-1", + "language": "Croatian", + "page_count": 3442, + "format": "hardcover" + }, + { + "id": 755, + "author_id": 3, + "name": "fusce", + "isbn": "737413325-1", + "language": "Japanese", + "page_count": 3070, + "format": "paperback" + }, + { + "id": 756, + "author_id": 1, + "name": "blandit mi", + "isbn": "516870262-7", + "language": "Fijian", + "page_count": 814, + "format": "hardcover" + }, + { + "id": 757, + "author_id": 20, + "name": "neque libero convallis eget", + "isbn": "601407012-5", + "language": "Albanian", + "page_count": 5341, + "format": "ebook" + }, + { + "id": 758, + "author_id": 20, + "name": "iaculis congue vivamus metus arcu adipiscing", + "isbn": "805929519-5", + "language": "Icelandic", + "page_count": 9587, + "format": "paperback" + }, + { + "id": 759, + "author_id": 14, + "name": "sit amet nulla quisque arcu libero", + "isbn": "156392085-9", + "language": "Punjabi", + "page_count": 6677, + "format": "ebook" + }, + { + "id": 760, + "author_id": 14, + "name": "blandit ultrices enim lorem ipsum", + "isbn": "515380729-0", + "language": "Assamese", + "page_count": 2907, + "format": "hardcover" + }, + { + "id": 761, + "author_id": 20, + "name": "iaculis justo in hac habitasse platea", + "isbn": "456959347-X", + "language": "Portuguese", + "page_count": 8155, + "format": "paperback" + }, + { + "id": 762, + "author_id": 8, + "name": "a pede posuere", + "isbn": "357225936-3", + "language": "Quechua", + "page_count": 7969, + "format": "paperback" + }, + { + "id": 763, + "author_id": 20, + "name": "tristique", + "isbn": "360494340-X", + "language": "Bulgarian", + "page_count": 1734, + "format": "hardcover" + }, + { + "id": 764, + "author_id": 18, + "name": "sociis natoque penatibus et magnis dis parturient montes", + "isbn": "404183230-6", + "language": "Hindi", + "page_count": 527, + "format": "hardcover" + }, + { + "id": 765, + "author_id": 1, + "name": "augue vestibulum rutrum rutrum neque aenean auctor", + "isbn": "947206780-8", + "language": "Hiri Motu", + "page_count": 3240, + "format": "hardcover" + }, + { + "id": 766, + "author_id": 18, + "name": "purus eu", + "isbn": "414151196-X", + "language": "Marathi", + "page_count": 5830, + "format": "hardcover" + }, + { + "id": 767, + "author_id": 18, + "name": "morbi non quam nec dui luctus rutrum nulla", + "isbn": "314281854-5", + "language": "Papiamento", + "page_count": 2072, + "format": "paperback" + }, + { + "id": 768, + "author_id": 1, + "name": "vel", + "isbn": "289012345-6", + "language": "Aymara", + "page_count": 1742, + "format": "hardcover" + }, + { + "id": 769, + "author_id": 5, + "name": "montes nascetur ridiculus mus etiam vel augue", + "isbn": "566120595-3", + "language": "Tswana", + "page_count": 7194, + "format": "paperback" + }, + { + "id": 770, + "author_id": 16, + "name": "lectus in quam fringilla rhoncus mauris enim leo", + "isbn": "913747221-6", + "language": "Armenian", + "page_count": 2136, + "format": "ebook" + }, + { + "id": 771, + "author_id": 12, + "name": "fermentum", + "isbn": "016462056-7", + "language": "Marathi", + "page_count": 6931, + "format": "hardcover" + }, + { + "id": 772, + "author_id": 9, + "name": "congue etiam justo etiam pretium iaculis justo in", + "isbn": "853690112-8", + "language": "Papiamento", + "page_count": 8499, + "format": "paperback" + }, + { + "id": 773, + "author_id": 15, + "name": "dolor sit amet consectetuer adipiscing elit", + "isbn": "723832946-8", + "language": "Malay", + "page_count": 6458, + "format": "hardcover" + }, + { + "id": 774, + "author_id": 16, + "name": "sodales scelerisque mauris", + "isbn": "788452755-3", + "language": "Icelandic", + "page_count": 9934, + "format": "hardcover" + }, + { + "id": 775, + "author_id": 16, + "name": "iaculis diam", + "isbn": "449073562-6", + "language": "Khmer", + "page_count": 4582, + "format": "ebook" + }, + { + "id": 776, + "author_id": 9, + "name": "ac tellus semper interdum mauris ullamcorper purus", + "isbn": "237173989-8", + "language": "Kannada", + "page_count": 3902, + "format": "ebook" + }, + { + "id": 777, + "author_id": 10, + "name": "mauris", + "isbn": "927617154-1", + "language": "Indonesian", + "page_count": 4146, + "format": "paperback" + }, + { + "id": 778, + "author_id": 12, + "name": "dapibus augue", + "isbn": "043588183-3", + "language": "Tok Pisin", + "page_count": 4020, + "format": "paperback" + }, + { + "id": 779, + "author_id": 19, + "name": "justo eu", + "isbn": "827181017-0", + "language": "Albanian", + "page_count": 3954, + "format": "hardcover" + }, + { + "id": 780, + "author_id": 8, + "name": "interdum mauris non ligula pellentesque ultrices", + "isbn": "111369445-9", + "language": "Northern Sotho", + "page_count": 3476, + "format": "ebook" + }, + { + "id": 781, + "author_id": 17, + "name": "neque aenean auctor gravida sem", + "isbn": "634137310-4", + "language": "Hiri Motu", + "page_count": 207, + "format": "hardcover" + }, + { + "id": 782, + "author_id": 17, + "name": "nisl nunc nisl", + "isbn": "066951301-6", + "language": "Tswana", + "page_count": 5129, + "format": "ebook" + }, + { + "id": 783, + "author_id": 13, + "name": "volutpat in", + "isbn": "246497872-8", + "language": "Malayalam", + "page_count": 4080, + "format": "ebook" + }, + { + "id": 784, + "author_id": 16, + "name": "curae nulla dapibus dolor", + "isbn": "342392082-3", + "language": "Kannada", + "page_count": 3486, + "format": "hardcover" + }, + { + "id": 785, + "author_id": 16, + "name": "in lacus", + "isbn": "169631927-7", + "language": "Albanian", + "page_count": 5618, + "format": "hardcover" + }, + { + "id": 786, + "author_id": 8, + "name": "pellentesque", + "isbn": "218178265-2", + "language": "Khmer", + "page_count": 9304, + "format": "ebook" + }, + { + "id": 787, + "author_id": 5, + "name": "nulla mollis molestie", + "isbn": "183215863-2", + "language": "Swati", + "page_count": 1092, + "format": "ebook" + }, + { + "id": 788, + "author_id": 8, + "name": "integer", + "isbn": "506069140-3", + "language": "Guaraní", + "page_count": 8881, + "format": "paperback" + }, + { + "id": 789, + "author_id": 6, + "name": "non lectus aliquam sit", + "isbn": "961558324-3", + "language": "Gujarati", + "page_count": 1728, + "format": "ebook" + }, + { + "id": 790, + "author_id": 1, + "name": "erat", + "isbn": "151104723-2", + "language": "Albanian", + "page_count": 5713, + "format": "paperback" + }, + { + "id": 791, + "author_id": 16, + "name": "potenti nullam porttitor lacus at turpis donec", + "isbn": "773983124-7", + "language": "Portuguese", + "page_count": 941, + "format": "ebook" + }, + { + "id": 792, + "author_id": 12, + "name": "morbi a ipsum integer a nibh in quis", + "isbn": "737422925-9", + "language": "French", + "page_count": 933, + "format": "paperback" + }, + { + "id": 793, + "author_id": 16, + "name": "rutrum at lorem", + "isbn": "113680273-8", + "language": "Korean", + "page_count": 4939, + "format": "ebook" + }, + { + "id": 794, + "author_id": 8, + "name": "dolor quis odio consequat varius", + "isbn": "171332241-2", + "language": "Gujarati", + "page_count": 9340, + "format": "hardcover" + }, + { + "id": 795, + "author_id": 12, + "name": "cursus id turpis integer aliquet massa id lobortis", + "isbn": "495757352-2", + "language": "French", + "page_count": 9826, + "format": "ebook" + }, + { + "id": 796, + "author_id": 13, + "name": "imperdiet nullam orci pede venenatis", + "isbn": "927997378-9", + "language": "Aymara", + "page_count": 8403, + "format": "paperback" + }, + { + "id": 797, + "author_id": 11, + "name": "nec dui", + "isbn": "854825921-3", + "language": "Nepali", + "page_count": 6303, + "format": "ebook" + }, + { + "id": 798, + "author_id": 17, + "name": "curabitur convallis duis", + "isbn": "759881781-2", + "language": "Italian", + "page_count": 1466, + "format": "hardcover" + }, + { + "id": 799, + "author_id": 12, + "name": "congue vivamus metus arcu adipiscing molestie hendrerit at", + "isbn": "713776161-5", + "language": "Japanese", + "page_count": 3683, + "format": "hardcover" + }, + { + "id": 800, + "author_id": 10, + "name": "lectus in quam fringilla rhoncus mauris", + "isbn": "310159992-X", + "language": "Korean", + "page_count": 5350, + "format": "ebook" + }, + { + "id": 801, + "author_id": 9, + "name": "neque duis bibendum", + "isbn": "548835149-3", + "language": "West Frisian", + "page_count": 688, + "format": "ebook" + }, + { + "id": 802, + "author_id": 3, + "name": "nam", + "isbn": "276523034-X", + "language": "Swedish", + "page_count": 2272, + "format": "hardcover" + }, + { + "id": 803, + "author_id": 12, + "name": "eget semper", + "isbn": "026197957-4", + "language": "Aymara", + "page_count": 191, + "format": "hardcover" + }, + { + "id": 804, + "author_id": 4, + "name": "molestie sed justo", + "isbn": "110085719-2", + "language": "German", + "page_count": 7937, + "format": "hardcover" + }, + { + "id": 805, + "author_id": 9, + "name": "tortor quis turpis sed ante vivamus tortor", + "isbn": "027163307-7", + "language": "Tsonga", + "page_count": 5341, + "format": "ebook" + }, + { + "id": 806, + "author_id": 19, + "name": "ligula vehicula consequat morbi", + "isbn": "179208131-6", + "language": "Dutch", + "page_count": 9456, + "format": "hardcover" + }, + { + "id": 807, + "author_id": 14, + "name": "nulla eget eros elementum pellentesque", + "isbn": "152501101-4", + "language": "Maltese", + "page_count": 2662, + "format": "hardcover" + }, + { + "id": 808, + "author_id": 14, + "name": "odio consequat", + "isbn": "732844057-0", + "language": "Italian", + "page_count": 6221, + "format": "ebook" + }, + { + "id": 809, + "author_id": 10, + "name": "phasellus in felis donec", + "isbn": "448118971-1", + "language": "Thai", + "page_count": 8442, + "format": "ebook" + }, + { + "id": 810, + "author_id": 7, + "name": "sapien in sapien iaculis", + "isbn": "475704640-5", + "language": "Hiri Motu", + "page_count": 803, + "format": "hardcover" + }, + { + "id": 811, + "author_id": 12, + "name": "maecenas tristique est et tempus semper est quam", + "isbn": "328735604-6", + "language": "Polish", + "page_count": 9146, + "format": "ebook" + }, + { + "id": 812, + "author_id": 20, + "name": "tortor id nulla ultrices aliquet", + "isbn": "958201958-1", + "language": "English", + "page_count": 2277, + "format": "hardcover" + }, + { + "id": 813, + "author_id": 1, + "name": "ac leo pellentesque", + "isbn": "141982460-0", + "language": "Pashto", + "page_count": 6282, + "format": "paperback" + }, + { + "id": 814, + "author_id": 15, + "name": "mattis nibh", + "isbn": "777973190-1", + "language": "Dari", + "page_count": 8965, + "format": "paperback" + }, + { + "id": 815, + "author_id": 17, + "name": "interdum", + "isbn": "917604688-5", + "language": "Latvian", + "page_count": 9134, + "format": "paperback" + }, + { + "id": 816, + "author_id": 1, + "name": "at ipsum", + "isbn": "607807817-8", + "language": "Malayalam", + "page_count": 1948, + "format": "ebook" + }, + { + "id": 817, + "author_id": 7, + "name": "cubilia curae donec pharetra magna vestibulum aliquet ultrices", + "isbn": "584052777-7", + "language": "Dhivehi", + "page_count": 9187, + "format": "paperback" + }, + { + "id": 818, + "author_id": 3, + "name": "nullam porttitor lacus at", + "isbn": "381599938-3", + "language": "Marathi", + "page_count": 6011, + "format": "paperback" + }, + { + "id": 819, + "author_id": 3, + "name": "in", + "isbn": "030942666-9", + "language": "Tamil", + "page_count": 2492, + "format": "ebook" + }, + { + "id": 820, + "author_id": 7, + "name": "et ultrices", + "isbn": "675005616-4", + "language": "Danish", + "page_count": 3988, + "format": "ebook" + }, + { + "id": 821, + "author_id": 4, + "name": "egestas metus aenean fermentum donec ut mauris eget", + "isbn": "586769313-9", + "language": "Persian", + "page_count": 7197, + "format": "ebook" + }, + { + "id": 822, + "author_id": 4, + "name": "lacus at turpis", + "isbn": "153920482-0", + "language": "Hindi", + "page_count": 7699, + "format": "ebook" + }, + { + "id": 823, + "author_id": 6, + "name": "aenean lectus pellentesque", + "isbn": "399481016-7", + "language": "Armenian", + "page_count": 430, + "format": "ebook" + }, + { + "id": 824, + "author_id": 20, + "name": "lorem quisque ut erat curabitur gravida", + "isbn": "870487331-9", + "language": "Papiamento", + "page_count": 9061, + "format": "hardcover" + }, + { + "id": 825, + "author_id": 13, + "name": "aliquam", + "isbn": "385144480-9", + "language": "Irish Gaelic", + "page_count": 3380, + "format": "ebook" + }, + { + "id": 826, + "author_id": 12, + "name": "id massa id", + "isbn": "069822800-6", + "language": "Macedonian", + "page_count": 2085, + "format": "hardcover" + }, + { + "id": 827, + "author_id": 10, + "name": "iaculis diam erat fermentum justo nec condimentum", + "isbn": "272566782-8", + "language": "Bosnian", + "page_count": 2302, + "format": "hardcover" + }, + { + "id": 828, + "author_id": 7, + "name": "massa donec dapibus", + "isbn": "838793424-0", + "language": "Kannada", + "page_count": 8452, + "format": "paperback" + }, + { + "id": 829, + "author_id": 1, + "name": "primis in", + "isbn": "919569309-2", + "language": "Swati", + "page_count": 759, + "format": "paperback" + }, + { + "id": 830, + "author_id": 19, + "name": "justo lacinia", + "isbn": "415008744-X", + "language": "Bulgarian", + "page_count": 2834, + "format": "paperback" + }, + { + "id": 831, + "author_id": 15, + "name": "lorem quisque ut", + "isbn": "179818706-X", + "language": "Oriya", + "page_count": 5763, + "format": "hardcover" + }, + { + "id": 832, + "author_id": 1, + "name": "vel augue vestibulum rutrum", + "isbn": "743310064-4", + "language": "Telugu", + "page_count": 3734, + "format": "hardcover" + }, + { + "id": 833, + "author_id": 1, + "name": "felis fusce posuere felis sed lacus morbi sem", + "isbn": "424413690-8", + "language": "Icelandic", + "page_count": 1471, + "format": "paperback" + }, + { + "id": 834, + "author_id": 7, + "name": "porttitor lorem", + "isbn": "447281064-6", + "language": "Bengali", + "page_count": 1180, + "format": "hardcover" + }, + { + "id": 835, + "author_id": 18, + "name": "faucibus orci luctus et ultrices posuere", + "isbn": "137364685-3", + "language": "Hiri Motu", + "page_count": 3958, + "format": "hardcover" + }, + { + "id": 836, + "author_id": 10, + "name": "vel augue vestibulum ante ipsum primis in faucibus", + "isbn": "834374411-X", + "language": "Latvian", + "page_count": 2695, + "format": "hardcover" + }, + { + "id": 837, + "author_id": 2, + "name": "vestibulum sit amet cursus id", + "isbn": "998869241-2", + "language": "Indonesian", + "page_count": 6351, + "format": "hardcover" + }, + { + "id": 838, + "author_id": 15, + "name": "parturient montes nascetur ridiculus mus vivamus vestibulum sagittis", + "isbn": "721563018-8", + "language": "Kashmiri", + "page_count": 3727, + "format": "ebook" + }, + { + "id": 839, + "author_id": 7, + "name": "hac habitasse platea", + "isbn": "365998710-7", + "language": "Tamil", + "page_count": 6158, + "format": "ebook" + }, + { + "id": 840, + "author_id": 18, + "name": "aliquam sit amet diam in magna bibendum imperdiet", + "isbn": "472341729-X", + "language": "Yiddish", + "page_count": 7819, + "format": "ebook" + }, + { + "id": 841, + "author_id": 2, + "name": "odio in hac habitasse platea", + "isbn": "579542424-2", + "language": "Burmese", + "page_count": 4836, + "format": "paperback" + }, + { + "id": 842, + "author_id": 4, + "name": "id nisl", + "isbn": "991138200-1", + "language": "Maltese", + "page_count": 5273, + "format": "ebook" + }, + { + "id": 843, + "author_id": 13, + "name": "congue eget semper", + "isbn": "788930543-5", + "language": "Irish Gaelic", + "page_count": 7479, + "format": "paperback" + }, + { + "id": 844, + "author_id": 14, + "name": "urna", + "isbn": "710889368-1", + "language": "Hiri Motu", + "page_count": 5361, + "format": "ebook" + }, + { + "id": 845, + "author_id": 6, + "name": "adipiscing molestie hendrerit at vulputate vitae nisl", + "isbn": "109847560-7", + "language": "Hiri Motu", + "page_count": 5457, + "format": "paperback" + }, + { + "id": 846, + "author_id": 20, + "name": "at dolor quis odio consequat varius integer ac", + "isbn": "521930861-0", + "language": "Luxembourgish", + "page_count": 9745, + "format": "paperback" + }, + { + "id": 847, + "author_id": 18, + "name": "leo rhoncus sed vestibulum", + "isbn": "090095141-9", + "language": "Burmese", + "page_count": 4989, + "format": "ebook" + }, + { + "id": 848, + "author_id": 14, + "name": "vestibulum ante", + "isbn": "935948970-0", + "language": "Latvian", + "page_count": 4428, + "format": "hardcover" + }, + { + "id": 849, + "author_id": 19, + "name": "condimentum curabitur in libero ut massa", + "isbn": "853467584-8", + "language": "Swati", + "page_count": 5584, + "format": "hardcover" + }, + { + "id": 850, + "author_id": 7, + "name": "mauris viverra diam vitae quam", + "isbn": "598608319-9", + "language": "Japanese", + "page_count": 8066, + "format": "ebook" + }, + { + "id": 851, + "author_id": 5, + "name": "hac habitasse platea dictumst etiam faucibus", + "isbn": "063450771-0", + "language": "Tetum", + "page_count": 1177, + "format": "hardcover" + }, + { + "id": 852, + "author_id": 13, + "name": "amet justo", + "isbn": "473163393-1", + "language": "French", + "page_count": 5784, + "format": "ebook" + }, + { + "id": 853, + "author_id": 14, + "name": "risus dapibus augue vel accumsan tellus nisi", + "isbn": "083847992-8", + "language": "Punjabi", + "page_count": 7728, + "format": "paperback" + }, + { + "id": 854, + "author_id": 18, + "name": "arcu adipiscing", + "isbn": "543752963-5", + "language": "Korean", + "page_count": 6310, + "format": "hardcover" + }, + { + "id": 855, + "author_id": 11, + "name": "risus dapibus", + "isbn": "833777105-4", + "language": "German", + "page_count": 3846, + "format": "hardcover" + }, + { + "id": 856, + "author_id": 8, + "name": "tempus vivamus in felis", + "isbn": "366047282-4", + "language": "Malay", + "page_count": 7123, + "format": "hardcover" + }, + { + "id": 857, + "author_id": 7, + "name": "vitae ipsum aliquam non mauris morbi non", + "isbn": "138186650-6", + "language": "Italian", + "page_count": 3575, + "format": "paperback" + }, + { + "id": 858, + "author_id": 18, + "name": "mauris ullamcorper purus sit amet nulla quisque arcu", + "isbn": "106181547-1", + "language": "Ndebele", + "page_count": 1029, + "format": "paperback" + }, + { + "id": 859, + "author_id": 2, + "name": "quis augue luctus", + "isbn": "502059040-1", + "language": "Haitian Creole", + "page_count": 9098, + "format": "hardcover" + }, + { + "id": 860, + "author_id": 5, + "name": "augue quam sollicitudin vitae consectetuer eget rutrum at", + "isbn": "451983271-3", + "language": "Chinese", + "page_count": 8623, + "format": "paperback" + }, + { + "id": 861, + "author_id": 14, + "name": "lacinia erat vestibulum", + "isbn": "848026400-4", + "language": "Malayalam", + "page_count": 1718, + "format": "paperback" + }, + { + "id": 862, + "author_id": 10, + "name": "enim leo rhoncus sed vestibulum sit amet cursus", + "isbn": "069407569-8", + "language": "Pashto", + "page_count": 9472, + "format": "hardcover" + }, + { + "id": 863, + "author_id": 17, + "name": "in est risus auctor sed tristique in", + "isbn": "186609339-8", + "language": "Thai", + "page_count": 4883, + "format": "ebook" + }, + { + "id": 864, + "author_id": 3, + "name": "libero nam dui proin leo", + "isbn": "837756016-X", + "language": "Danish", + "page_count": 4967, + "format": "ebook" + }, + { + "id": 865, + "author_id": 12, + "name": "cursus vestibulum proin eu mi", + "isbn": "072635207-1", + "language": "Luxembourgish", + "page_count": 8005, + "format": "hardcover" + }, + { + "id": 866, + "author_id": 15, + "name": "luctus rutrum nulla tellus in sagittis dui", + "isbn": "483927405-3", + "language": "Mongolian", + "page_count": 823, + "format": "hardcover" + }, + { + "id": 867, + "author_id": 17, + "name": "proin risus praesent lectus vestibulum quam", + "isbn": "893205393-6", + "language": "Catalan", + "page_count": 2944, + "format": "hardcover" + }, + { + "id": 868, + "author_id": 3, + "name": "sed magna at nunc commodo placerat praesent blandit", + "isbn": "635695783-2", + "language": "Telugu", + "page_count": 346, + "format": "ebook" + }, + { + "id": 869, + "author_id": 20, + "name": "ut erat", + "isbn": "952048955-X", + "language": "Estonian", + "page_count": 557, + "format": "paperback" + }, + { + "id": 870, + "author_id": 9, + "name": "donec ut dolor morbi vel lectus in", + "isbn": "370156749-2", + "language": "Danish", + "page_count": 4985, + "format": "hardcover" + }, + { + "id": 871, + "author_id": 15, + "name": "vitae quam suspendisse", + "isbn": "613583854-7", + "language": "Polish", + "page_count": 6687, + "format": "ebook" + }, + { + "id": 872, + "author_id": 19, + "name": "felis fusce", + "isbn": "439761651-5", + "language": "Dutch", + "page_count": 7424, + "format": "hardcover" + }, + { + "id": 873, + "author_id": 9, + "name": "at velit eu est congue elementum", + "isbn": "598970099-7", + "language": "Norwegian", + "page_count": 6115, + "format": "paperback" + }, + { + "id": 874, + "author_id": 13, + "name": "vestibulum sed magna", + "isbn": "978934778-2", + "language": "Arabic", + "page_count": 543, + "format": "paperback" + }, + { + "id": 875, + "author_id": 20, + "name": "metus vitae ipsum aliquam non mauris morbi", + "isbn": "932696875-8", + "language": "Dari", + "page_count": 3896, + "format": "ebook" + }, + { + "id": 876, + "author_id": 13, + "name": "habitasse platea dictumst aliquam augue quam", + "isbn": "837464556-3", + "language": "Ndebele", + "page_count": 2417, + "format": "paperback" + }, + { + "id": 877, + "author_id": 2, + "name": "curae duis faucibus accumsan odio curabitur convallis duis", + "isbn": "408795994-5", + "language": "Persian", + "page_count": 9024, + "format": "paperback" + }, + { + "id": 878, + "author_id": 2, + "name": "eget congue eget semper rutrum nulla nunc", + "isbn": "905885571-6", + "language": "Somali", + "page_count": 6790, + "format": "hardcover" + }, + { + "id": 879, + "author_id": 5, + "name": "montes nascetur ridiculus mus etiam", + "isbn": "846604924-X", + "language": "Punjabi", + "page_count": 8396, + "format": "ebook" + }, + { + "id": 880, + "author_id": 6, + "name": "aliquet maecenas leo odio", + "isbn": "944295506-3", + "language": "West Frisian", + "page_count": 5064, + "format": "paperback" + }, + { + "id": 881, + "author_id": 17, + "name": "lacus at", + "isbn": "162301760-2", + "language": "Marathi", + "page_count": 5602, + "format": "ebook" + }, + { + "id": 882, + "author_id": 13, + "name": "nulla justo aliquam quis turpis eget", + "isbn": "310215546-4", + "language": "German", + "page_count": 7234, + "format": "hardcover" + }, + { + "id": 883, + "author_id": 12, + "name": "nullam molestie nibh in lectus pellentesque at", + "isbn": "651228603-0", + "language": "Armenian", + "page_count": 3229, + "format": "hardcover" + }, + { + "id": 884, + "author_id": 10, + "name": "mauris ullamcorper purus sit", + "isbn": "091865254-5", + "language": "Tamil", + "page_count": 4018, + "format": "hardcover" + }, + { + "id": 885, + "author_id": 3, + "name": "vitae ipsum aliquam", + "isbn": "946937599-8", + "language": "Lithuanian", + "page_count": 9672, + "format": "paperback" + }, + { + "id": 886, + "author_id": 5, + "name": "vel accumsan tellus nisi eu", + "isbn": "699498694-2", + "language": "Azeri", + "page_count": 8217, + "format": "hardcover" + }, + { + "id": 887, + "author_id": 14, + "name": "volutpat in congue etiam justo etiam", + "isbn": "310621471-6", + "language": "Amharic", + "page_count": 6539, + "format": "paperback" + }, + { + "id": 888, + "author_id": 19, + "name": "ultrices posuere cubilia curae donec pharetra", + "isbn": "419262048-0", + "language": "Albanian", + "page_count": 8290, + "format": "ebook" + }, + { + "id": 889, + "author_id": 6, + "name": "eu tincidunt in leo maecenas pulvinar lobortis est", + "isbn": "074787596-0", + "language": "Marathi", + "page_count": 2464, + "format": "paperback" + }, + { + "id": 890, + "author_id": 12, + "name": "molestie hendrerit at vulputate", + "isbn": "033394604-9", + "language": "Portuguese", + "page_count": 1945, + "format": "hardcover" + }, + { + "id": 891, + "author_id": 3, + "name": "in porttitor pede justo", + "isbn": "362469899-0", + "language": "Bislama", + "page_count": 73, + "format": "paperback" + }, + { + "id": 892, + "author_id": 5, + "name": "potenti in eleifend", + "isbn": "124738588-4", + "language": "Catalan", + "page_count": 3614, + "format": "hardcover" + }, + { + "id": 893, + "author_id": 5, + "name": "sollicitudin vitae consectetuer eget rutrum at lorem", + "isbn": "976483365-9", + "language": "Korean", + "page_count": 9107, + "format": "paperback" + }, + { + "id": 894, + "author_id": 9, + "name": "etiam pretium iaculis justo in hac", + "isbn": "710530610-6", + "language": "Mongolian", + "page_count": 452, + "format": "hardcover" + }, + { + "id": 895, + "author_id": 17, + "name": "semper porta volutpat quam pede lobortis", + "isbn": "268129707-9", + "language": "Japanese", + "page_count": 9670, + "format": "hardcover" + }, + { + "id": 896, + "author_id": 13, + "name": "nullam orci pede", + "isbn": "110594816-1", + "language": "Somali", + "page_count": 7139, + "format": "ebook" + }, + { + "id": 897, + "author_id": 14, + "name": "elementum", + "isbn": "681503647-2", + "language": "Kashmiri", + "page_count": 4677, + "format": "ebook" + }, + { + "id": 898, + "author_id": 8, + "name": "et ultrices posuere cubilia", + "isbn": "869325367-0", + "language": "Ndebele", + "page_count": 8298, + "format": "ebook" + }, + { + "id": 899, + "author_id": 19, + "name": "eros vestibulum ac est lacinia nisi venenatis tristique", + "isbn": "189537147-3", + "language": "Bulgarian", + "page_count": 3625, + "format": "paperback" + }, + { + "id": 900, + "author_id": 8, + "name": "convallis morbi odio odio elementum eu", + "isbn": "237570017-1", + "language": "Belarusian", + "page_count": 6659, + "format": "ebook" + }, + { + "id": 901, + "author_id": 11, + "name": "vitae nisl aenean lectus pellentesque eget nunc donec", + "isbn": "881790677-8", + "language": "Filipino", + "page_count": 1203, + "format": "paperback" + }, + { + "id": 902, + "author_id": 6, + "name": "sapien cursus vestibulum proin", + "isbn": "574665063-3", + "language": "Montenegrin", + "page_count": 4300, + "format": "ebook" + }, + { + "id": 903, + "author_id": 5, + "name": "semper sapien a", + "isbn": "070762870-9", + "language": "German", + "page_count": 6068, + "format": "ebook" + }, + { + "id": 904, + "author_id": 3, + "name": "ac diam cras pellentesque volutpat dui maecenas", + "isbn": "639065379-4", + "language": "Aymara", + "page_count": 1699, + "format": "hardcover" + }, + { + "id": 905, + "author_id": 11, + "name": "consequat", + "isbn": "522666510-5", + "language": "Portuguese", + "page_count": 2668, + "format": "ebook" + }, + { + "id": 906, + "author_id": 6, + "name": "rhoncus aliquam lacus morbi quis tortor", + "isbn": "437955292-6", + "language": "Khmer", + "page_count": 699, + "format": "hardcover" + }, + { + "id": 907, + "author_id": 20, + "name": "orci", + "isbn": "129701547-9", + "language": "Japanese", + "page_count": 6948, + "format": "ebook" + }, + { + "id": 908, + "author_id": 10, + "name": "dapibus duis", + "isbn": "572117857-4", + "language": "German", + "page_count": 2410, + "format": "paperback" + }, + { + "id": 909, + "author_id": 9, + "name": "posuere metus", + "isbn": "204306871-7", + "language": "West Frisian", + "page_count": 2097, + "format": "paperback" + }, + { + "id": 910, + "author_id": 18, + "name": "ante nulla justo aliquam", + "isbn": "158763086-9", + "language": "Latvian", + "page_count": 7567, + "format": "paperback" + }, + { + "id": 911, + "author_id": 20, + "name": "volutpat quam pede lobortis", + "isbn": "841788572-2", + "language": "Irish Gaelic", + "page_count": 2724, + "format": "ebook" + }, + { + "id": 912, + "author_id": 5, + "name": "cras in purus eu magna", + "isbn": "009898851-4", + "language": "Romanian", + "page_count": 3388, + "format": "paperback" + }, + { + "id": 913, + "author_id": 7, + "name": "arcu", + "isbn": "675626216-5", + "language": "Malay", + "page_count": 5381, + "format": "ebook" + }, + { + "id": 914, + "author_id": 11, + "name": "vel pede morbi", + "isbn": "645084251-2", + "language": "Tetum", + "page_count": 4541, + "format": "paperback" + }, + { + "id": 915, + "author_id": 20, + "name": "aliquam convallis nunc proin at turpis", + "isbn": "585217075-5", + "language": "Ndebele", + "page_count": 4852, + "format": "ebook" + }, + { + "id": 916, + "author_id": 11, + "name": "amet eros suspendisse accumsan tortor quis", + "isbn": "851389046-4", + "language": "Danish", + "page_count": 7467, + "format": "ebook" + }, + { + "id": 917, + "author_id": 14, + "name": "porttitor id consequat", + "isbn": "504132326-7", + "language": "Telugu", + "page_count": 5492, + "format": "hardcover" + }, + { + "id": 918, + "author_id": 20, + "name": "fusce", + "isbn": "751714600-9", + "language": "Japanese", + "page_count": 3297, + "format": "ebook" + }, + { + "id": 919, + "author_id": 16, + "name": "a suscipit nulla elit ac nulla sed", + "isbn": "785433509-5", + "language": "Marathi", + "page_count": 3687, + "format": "paperback" + }, + { + "id": 920, + "author_id": 12, + "name": "amet justo morbi ut odio cras", + "isbn": "308528508-3", + "language": "Catalan", + "page_count": 6881, + "format": "paperback" + }, + { + "id": 921, + "author_id": 10, + "name": "pellentesque eget nunc", + "isbn": "665149961-0", + "language": "Malay", + "page_count": 4532, + "format": "ebook" + }, + { + "id": 922, + "author_id": 19, + "name": "morbi ut odio", + "isbn": "289178449-9", + "language": "German", + "page_count": 9355, + "format": "ebook" + }, + { + "id": 923, + "author_id": 1, + "name": "a suscipit", + "isbn": "744277476-8", + "language": "Tamil", + "page_count": 7640, + "format": "hardcover" + }, + { + "id": 924, + "author_id": 12, + "name": "mauris morbi non lectus aliquam", + "isbn": "461158319-8", + "language": "Malagasy", + "page_count": 4380, + "format": "paperback" + }, + { + "id": 925, + "author_id": 5, + "name": "cras in purus eu magna vulputate luctus cum", + "isbn": "279228134-0", + "language": "Japanese", + "page_count": 7502, + "format": "hardcover" + }, + { + "id": 926, + "author_id": 4, + "name": "consequat ut nulla", + "isbn": "719374200-0", + "language": "Armenian", + "page_count": 7060, + "format": "ebook" + }, + { + "id": 927, + "author_id": 20, + "name": "felis eu sapien", + "isbn": "951250239-9", + "language": "Hiri Motu", + "page_count": 102, + "format": "ebook" + }, + { + "id": 928, + "author_id": 9, + "name": "quam sapien varius ut blandit", + "isbn": "627598346-9", + "language": "Tetum", + "page_count": 2775, + "format": "hardcover" + }, + { + "id": 929, + "author_id": 12, + "name": "hendrerit at vulputate vitae", + "isbn": "667791694-4", + "language": "Japanese", + "page_count": 2014, + "format": "hardcover" + }, + { + "id": 930, + "author_id": 15, + "name": "sociis natoque penatibus et magnis dis parturient montes", + "isbn": "278606477-5", + "language": "Chinese", + "page_count": 8354, + "format": "paperback" + }, + { + "id": 931, + "author_id": 3, + "name": "non sodales sed tincidunt eu felis fusce posuere", + "isbn": "619096090-1", + "language": "West Frisian", + "page_count": 3549, + "format": "paperback" + }, + { + "id": 932, + "author_id": 20, + "name": "sollicitudin mi", + "isbn": "382446505-1", + "language": "Romanian", + "page_count": 7662, + "format": "ebook" + }, + { + "id": 933, + "author_id": 13, + "name": "vestibulum ante ipsum primis in", + "isbn": "484296042-6", + "language": "Hiri Motu", + "page_count": 1402, + "format": "paperback" + }, + { + "id": 934, + "author_id": 13, + "name": "varius nulla facilisi cras", + "isbn": "625997044-7", + "language": "Albanian", + "page_count": 6040, + "format": "ebook" + }, + { + "id": 935, + "author_id": 13, + "name": "maecenas pulvinar lobortis", + "isbn": "044054022-4", + "language": "Punjabi", + "page_count": 7443, + "format": "paperback" + }, + { + "id": 936, + "author_id": 15, + "name": "faucibus orci luctus et ultrices posuere", + "isbn": "816339955-4", + "language": "Hungarian", + "page_count": 327, + "format": "paperback" + }, + { + "id": 937, + "author_id": 15, + "name": "nulla nunc purus phasellus in felis", + "isbn": "103434892-2", + "language": "Marathi", + "page_count": 6656, + "format": "hardcover" + }, + { + "id": 938, + "author_id": 13, + "name": "pretium nisl ut volutpat", + "isbn": "348470660-0", + "language": "Chinese", + "page_count": 8697, + "format": "hardcover" + }, + { + "id": 939, + "author_id": 12, + "name": "erat eros", + "isbn": "318637435-9", + "language": "Polish", + "page_count": 7142, + "format": "ebook" + }, + { + "id": 940, + "author_id": 16, + "name": "eros elementum pellentesque quisque", + "isbn": "373660083-6", + "language": "Bulgarian", + "page_count": 201, + "format": "paperback" + }, + { + "id": 941, + "author_id": 14, + "name": "at ipsum ac", + "isbn": "760053883-0", + "language": "Amharic", + "page_count": 437, + "format": "paperback" + }, + { + "id": 942, + "author_id": 11, + "name": "integer non velit donec diam neque vestibulum", + "isbn": "006257937-1", + "language": "Gujarati", + "page_count": 2538, + "format": "ebook" + }, + { + "id": 943, + "author_id": 14, + "name": "parturient", + "isbn": "598061746-9", + "language": "Macedonian", + "page_count": 6543, + "format": "hardcover" + }, + { + "id": 944, + "author_id": 12, + "name": "condimentum curabitur in libero ut massa volutpat convallis", + "isbn": "315678570-9", + "language": "Swahili", + "page_count": 6062, + "format": "hardcover" + }, + { + "id": 945, + "author_id": 15, + "name": "pellentesque ultrices mattis odio donec", + "isbn": "307733488-7", + "language": "Haitian Creole", + "page_count": 9604, + "format": "ebook" + }, + { + "id": 946, + "author_id": 6, + "name": "in hac habitasse platea dictumst etiam faucibus", + "isbn": "588193851-8", + "language": "Macedonian", + "page_count": 28, + "format": "hardcover" + }, + { + "id": 947, + "author_id": 9, + "name": "pede malesuada in", + "isbn": "888034106-5", + "language": "Icelandic", + "page_count": 4608, + "format": "hardcover" + }, + { + "id": 948, + "author_id": 1, + "name": "cras non velit nec", + "isbn": "075011249-2", + "language": "Czech", + "page_count": 2137, + "format": "hardcover" + }, + { + "id": 949, + "author_id": 12, + "name": "ligula vehicula consequat morbi a ipsum", + "isbn": "953147032-4", + "language": "Thai", + "page_count": 6388, + "format": "paperback" + }, + { + "id": 950, + "author_id": 18, + "name": "ligula pellentesque ultrices phasellus id", + "isbn": "910726688-X", + "language": "Mongolian", + "page_count": 6551, + "format": "paperback" + }, + { + "id": 951, + "author_id": 13, + "name": "posuere felis sed lacus", + "isbn": "018017909-8", + "language": "Swahili", + "page_count": 9940, + "format": "paperback" + }, + { + "id": 952, + "author_id": 4, + "name": "non", + "isbn": "709018611-3", + "language": "Icelandic", + "page_count": 8371, + "format": "hardcover" + }, + { + "id": 953, + "author_id": 8, + "name": "felis eu sapien cursus vestibulum proin", + "isbn": "776555936-2", + "language": "Aymara", + "page_count": 8787, + "format": "paperback" + }, + { + "id": 954, + "author_id": 12, + "name": "quam sapien varius ut", + "isbn": "949187416-0", + "language": "Kazakh", + "page_count": 2135, + "format": "ebook" + }, + { + "id": 955, + "author_id": 10, + "name": "tellus nulla ut erat id mauris", + "isbn": "210073863-1", + "language": "French", + "page_count": 1553, + "format": "ebook" + }, + { + "id": 956, + "author_id": 3, + "name": "quis orci eget orci vehicula condimentum curabitur in", + "isbn": "145863076-5", + "language": "Hungarian", + "page_count": 5125, + "format": "ebook" + }, + { + "id": 957, + "author_id": 3, + "name": "quam turpis adipiscing lorem vitae mattis nibh ligula", + "isbn": "404162002-3", + "language": "New Zealand Sign Language", + "page_count": 8013, + "format": "ebook" + }, + { + "id": 958, + "author_id": 15, + "name": "quis", + "isbn": "098559948-0", + "language": "Kurdish", + "page_count": 9656, + "format": "ebook" + }, + { + "id": 959, + "author_id": 1, + "name": "nonummy maecenas tincidunt lacus at velit vivamus vel", + "isbn": "144527984-3", + "language": "Bengali", + "page_count": 3013, + "format": "paperback" + }, + { + "id": 960, + "author_id": 4, + "name": "id sapien in sapien iaculis congue vivamus metus", + "isbn": "971339187-X", + "language": "Gujarati", + "page_count": 9928, + "format": "hardcover" + }, + { + "id": 961, + "author_id": 5, + "name": "curabitur in libero ut massa volutpat convallis", + "isbn": "274814560-7", + "language": "Azeri", + "page_count": 7100, + "format": "hardcover" + }, + { + "id": 962, + "author_id": 17, + "name": "tellus in sagittis dui vel nisl", + "isbn": "247089666-5", + "language": "English", + "page_count": 2778, + "format": "ebook" + }, + { + "id": 963, + "author_id": 6, + "name": "ultrices vel augue vestibulum ante ipsum primis", + "isbn": "692248686-2", + "language": "Bosnian", + "page_count": 3028, + "format": "paperback" + }, + { + "id": 964, + "author_id": 3, + "name": "id nisl venenatis lacinia aenean sit", + "isbn": "646032970-2", + "language": "Catalan", + "page_count": 3135, + "format": "ebook" + }, + { + "id": 965, + "author_id": 3, + "name": "sed tincidunt", + "isbn": "238305689-8", + "language": "Tsonga", + "page_count": 1342, + "format": "paperback" + }, + { + "id": 966, + "author_id": 2, + "name": "augue", + "isbn": "337725228-2", + "language": "Kazakh", + "page_count": 3164, + "format": "paperback" + }, + { + "id": 967, + "author_id": 10, + "name": "justo lacinia eget tincidunt eget tempus vel pede", + "isbn": "643959689-6", + "language": "Punjabi", + "page_count": 544, + "format": "paperback" + }, + { + "id": 968, + "author_id": 3, + "name": "scelerisque quam", + "isbn": "055591355-4", + "language": "Spanish", + "page_count": 5782, + "format": "hardcover" + }, + { + "id": 969, + "author_id": 18, + "name": "consequat ut nulla sed accumsan", + "isbn": "568034318-5", + "language": "Mongolian", + "page_count": 1008, + "format": "hardcover" + }, + { + "id": 970, + "author_id": 8, + "name": "duis bibendum morbi non quam nec dui", + "isbn": "029744981-8", + "language": "Polish", + "page_count": 5427, + "format": "paperback" + }, + { + "id": 971, + "author_id": 10, + "name": "odio condimentum id luctus nec molestie", + "isbn": "125545437-7", + "language": "Icelandic", + "page_count": 6861, + "format": "paperback" + }, + { + "id": 972, + "author_id": 5, + "name": "ac nibh fusce lacus", + "isbn": "054517028-1", + "language": "Macedonian", + "page_count": 8631, + "format": "paperback" + }, + { + "id": 973, + "author_id": 15, + "name": "quam nec dui luctus rutrum nulla tellus in", + "isbn": "934790505-4", + "language": "Malayalam", + "page_count": 6274, + "format": "paperback" + }, + { + "id": 974, + "author_id": 19, + "name": "condimentum", + "isbn": "245538247-8", + "language": "Telugu", + "page_count": 9091, + "format": "hardcover" + }, + { + "id": 975, + "author_id": 11, + "name": "nisl ut volutpat sapien arcu sed augue", + "isbn": "196737076-1", + "language": "Marathi", + "page_count": 962, + "format": "paperback" + }, + { + "id": 976, + "author_id": 13, + "name": "sit", + "isbn": "549617609-3", + "language": "Indonesian", + "page_count": 1507, + "format": "paperback" + }, + { + "id": 977, + "author_id": 7, + "name": "vel accumsan tellus nisi", + "isbn": "958195152-0", + "language": "Papiamento", + "page_count": 139, + "format": "hardcover" + }, + { + "id": 978, + "author_id": 20, + "name": "ultrices aliquet maecenas leo", + "isbn": "266410036-X", + "language": "Albanian", + "page_count": 7404, + "format": "paperback" + }, + { + "id": 979, + "author_id": 14, + "name": "morbi ut odio cras mi pede malesuada in", + "isbn": "912483247-2", + "language": "Dari", + "page_count": 5520, + "format": "paperback" + }, + { + "id": 980, + "author_id": 13, + "name": "pretium iaculis", + "isbn": "697285355-9", + "language": "Tamil", + "page_count": 5576, + "format": "hardcover" + }, + { + "id": 981, + "author_id": 14, + "name": "montes nascetur ridiculus mus vivamus vestibulum", + "isbn": "857393805-6", + "language": "Icelandic", + "page_count": 9186, + "format": "hardcover" + }, + { + "id": 982, + "author_id": 4, + "name": "nisi venenatis tristique fusce congue", + "isbn": "842755415-X", + "language": "Fijian", + "page_count": 2710, + "format": "ebook" + }, + { + "id": 983, + "author_id": 15, + "name": "augue luctus tincidunt nulla", + "isbn": "031419731-1", + "language": "Yiddish", + "page_count": 1934, + "format": "hardcover" + }, + { + "id": 984, + "author_id": 1, + "name": "at", + "isbn": "201855135-3", + "language": "Albanian", + "page_count": 5473, + "format": "hardcover" + }, + { + "id": 985, + "author_id": 20, + "name": "maecenas tincidunt lacus at velit vivamus", + "isbn": "898097316-0", + "language": "Assamese", + "page_count": 2277, + "format": "paperback" + }, + { + "id": 986, + "author_id": 10, + "name": "sed augue aliquam erat volutpat", + "isbn": "412364890-8", + "language": "Kashmiri", + "page_count": 9526, + "format": "ebook" + }, + { + "id": 987, + "author_id": 3, + "name": "auctor gravida sem praesent id massa id", + "isbn": "273533630-1", + "language": "Gagauz", + "page_count": 7674, + "format": "paperback" + }, + { + "id": 988, + "author_id": 6, + "name": "curabitur gravida nisi at", + "isbn": "493241961-9", + "language": "Dari", + "page_count": 5950, + "format": "ebook" + }, + { + "id": 989, + "author_id": 10, + "name": "in porttitor", + "isbn": "159766326-3", + "language": "Bulgarian", + "page_count": 7319, + "format": "paperback" + }, + { + "id": 990, + "author_id": 15, + "name": "turpis adipiscing lorem vitae mattis", + "isbn": "513149405-2", + "language": "Khmer", + "page_count": 1269, + "format": "hardcover" + }, + { + "id": 991, + "author_id": 14, + "name": "id ligula suspendisse", + "isbn": "137971887-2", + "language": "Swedish", + "page_count": 2721, + "format": "hardcover" + }, + { + "id": 992, + "author_id": 3, + "name": "mauris", + "isbn": "710542540-7", + "language": "Aymara", + "page_count": 7881, + "format": "ebook" + }, + { + "id": 993, + "author_id": 15, + "name": "turpis integer", + "isbn": "532222906-X", + "language": "Danish", + "page_count": 3456, + "format": "paperback" + }, + { + "id": 994, + "author_id": 15, + "name": "mi integer", + "isbn": "160266514-1", + "language": "Guaraní", + "page_count": 2149, + "format": "paperback" + }, + { + "id": 995, + "author_id": 11, + "name": "est risus auctor", + "isbn": "618119489-4", + "language": "Fijian", + "page_count": 37, + "format": "ebook" + }, + { + "id": 996, + "author_id": 20, + "name": "ut blandit non interdum in", + "isbn": "701449103-2", + "language": "Luxembourgish", + "page_count": 4379, + "format": "ebook" + }, + { + "id": 997, + "author_id": 15, + "name": "mi nulla ac enim in tempor", + "isbn": "382844949-2", + "language": "Catalan", + "page_count": 6191, + "format": "ebook" + }, + { + "id": 998, + "author_id": 6, + "name": "at turpis a pede posuere nonummy integer", + "isbn": "099139762-2", + "language": "Norwegian", + "page_count": 8712, + "format": "hardcover" + }, + { + "id": 999, + "author_id": 13, + "name": "vel pede morbi porttitor lorem id ligula", + "isbn": "601799374-7", + "language": "Hebrew", + "page_count": 341, + "format": "hardcover" + }, + { + "id": 1000, + "author_id": 3, + "name": "eget vulputate ut ultrices vel", + "isbn": "277841236-0", + "language": "Luxembourgish", + "page_count": 5516, + "format": "ebook" + } + ], + "authors": [ + { + "id": 1, + "first_name": "Darlene", + "last_name": "Shatliff", + "email": "dshatliff0@canalblog.com", + "nationality": "Cyprus" + }, + { + "id": 2, + "first_name": "David", + "last_name": "Le Count", + "email": "dlecount1@xrea.com", + "nationality": "Russia" + }, + { + "id": 3, + "first_name": "Kylynn", + "last_name": "Phillps", + "email": "kphillps2@merriam-webster.com", + "nationality": "Costa Rica" + }, + { + "id": 4, + "first_name": "Dottie", + "last_name": "Mersey", + "email": "dmersey3@rakuten.co.jp", + "nationality": "Indonesia" + }, + { + "id": 5, + "first_name": "Merilyn", + "last_name": "Gilffillan", + "email": "mgilffillan4@fotki.com", + "nationality": "Indonesia" + }, + { + "id": 6, + "first_name": "Victoria", + "last_name": "Bradforth", + "email": "vbradforth5@noaa.gov", + "nationality": "Malaysia" + }, + { + "id": 7, + "first_name": "Sigismund", + "last_name": "Mcwhinnie", + "email": "smcwhinnie6@webs.com", + "nationality": "China" + }, + { + "id": 8, + "first_name": "Pammie", + "last_name": "Janicijevic", + "email": "pjanicijevic7@huffingtonpost.com", + "nationality": "Czech Republic" + }, + { + "id": 9, + "first_name": "Thorpe", + "last_name": "Liddall", + "email": "tliddall8@constantcontact.com", + "nationality": "Sweden" + }, + { + "id": 10, + "first_name": "Vasily", + "last_name": "Allom", + "email": "vallom9@xinhuanet.com", + "nationality": "Jamaica" + }, + { + "id": 11, + "first_name": "Ernestine", + "last_name": "Huton", + "email": "ehutona@list-manage.com", + "nationality": "Indonesia" + }, + { + "id": 12, + "first_name": "Randa", + "last_name": "Bramwich", + "email": "rbramwichb@sfgate.com", + "nationality": "Madagascar" + }, + { + "id": 13, + "first_name": "Danielle", + "last_name": "Van Halen", + "email": "dvanhalenc@ask.com", + "nationality": "Russia" + }, + { + "id": 14, + "first_name": "Herschel", + "last_name": "Plank", + "email": "hplankd@fema.gov", + "nationality": "China" + }, + { + "id": 15, + "first_name": "Gilbertine", + "last_name": "Penelli", + "email": "gpenellie@flavors.me", + "nationality": "China" + }, + { + "id": 16, + "first_name": "Franni", + "last_name": "Stein", + "email": "fsteinf@histats.com", + "nationality": "Indonesia" + }, + { + "id": 17, + "first_name": "Nedda", + "last_name": "Hadrill", + "email": "nhadrillg@hao123.com", + "nationality": "China" + }, + { + "id": 18, + "first_name": "Raviv", + "last_name": "Chadwick", + "email": "rchadwickh@utexas.edu", + "nationality": "United States" + }, + { + "id": 19, + "first_name": "Chane", + "last_name": "Guidera", + "email": "cguiderai@hexun.com", + "nationality": "China" + }, + { + "id": 20, + "first_name": "Arlyn", + "last_name": "Lorenc", + "email": "alorencj@pinterest.com", + "nationality": "France" + } + ], + "inventory": [ + { + "id": 1, + "book_id": 7, + "store_id": 5, + "price": 24.99 + }, + { + "id": 2, + "book_id": 7, + "store_id": 12, + "price": 29.99 + }, + { + "id": 3, + "book_id": 15, + "store_id": 5, + "price": 19.99 + }, + { + "id": 4, + "book_id": 22, + "store_id": 5, + "price": 34.99 + }, + { + "id": 5, + "book_id": 15, + "store_id": 8, + "price": 21.99 + }, + { + "id": 6, + "book_id": 42, + "store_id": 8, + "price": 15.99 + }, + { + "id": 7, + "book_id": 56, + "store_id": 12, + "price": 25.99 + }, + { + "id": 8, + "book_id": 89, + "store_id": 5, + "price": 45.99 + }, + { + "id": 9, + "book_id": 102, + "store_id": 8, + "price": 32.99 + }, + { + "id": 10, + "book_id": 102, + "store_id": 12, + "price": 29.99 + }, + { + "id": 11, + "book_id": 15, + "store_id": 5, + "price": 19.99 + }, + { + "id": 12, + "book_id": 22, + "store_id": 5, + "price": 34.99 + }, + { + "id": 13, + "book_id": 42, + "store_id": 8, + "price": 15.99 + }, + { + "id": 14, + "book_id": 56, + "store_id": 12, + "price": 25.99 + } + ], + "users": [ + { + "id": 1, + "username": "admin", + "password": "admin123", + "email": "admin@bookstore.com", + "name": "Admin User" + }, + { + "id": 2, + "username": "user", + "password": "user123", + "email": "user@bookstore.com", + "name": "Regular User" + } + ] +} \ No newline at end of file diff --git a/mock-server/package-lock.json b/mock-server/package-lock.json new file mode 100644 index 0000000..ac4889d --- /dev/null +++ b/mock-server/package-lock.json @@ -0,0 +1,1483 @@ +{ + "name": "mock-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mock-server", + "version": "1.0.0", + "dependencies": { + "json-server": "^0.17.4" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/connect-pause": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/connect-pause/-/connect-pause-0.1.1.tgz", + "integrity": "sha512-a1gSWQBQD73krFXdUEYJom2RTFrWUL3YvXDCRkyv//GVXc79cdW9MngtRuN9ih4FDKBtfJAJId+BbDuX+1rh2w==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-urlrewrite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/express-urlrewrite/-/express-urlrewrite-1.4.0.tgz", + "integrity": "sha512-PI5h8JuzoweS26vFizwQl6UTF25CAHSggNv0J25Dn/IKZscJHWZzPrI5z2Y2jgOzIaw2qh8l6+/jUcig23Z2SA==", + "license": "MIT", + "dependencies": { + "debug": "*", + "path-to-regexp": "^1.0.3" + } + }, + "node_modules/express-urlrewrite/node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "license": "MIT" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "license": "MIT" + }, + "node_modules/json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", + "license": "MIT", + "dependencies": { + "jju": "^1.1.0" + } + }, + "node_modules/json-server": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/json-server/-/json-server-0.17.4.tgz", + "integrity": "sha512-bGBb0WtFuAKbgI7JV3A864irWnMZSvBYRJbohaOuatHwKSRFUfqtQlrYMrB6WbalXy/cJabyjlb7JkHli6dYjQ==", + "license": "MIT", + "dependencies": { + "body-parser": "^1.19.0", + "chalk": "^4.1.2", + "compression": "^1.7.4", + "connect-pause": "^0.1.1", + "cors": "^2.8.5", + "errorhandler": "^1.5.1", + "express": "^4.17.1", + "express-urlrewrite": "^1.4.0", + "json-parse-helpfulerror": "^1.0.3", + "lodash": "^4.17.21", + "lodash-id": "^0.14.1", + "lowdb": "^1.0.0", + "method-override": "^3.0.0", + "morgan": "^1.10.0", + "nanoid": "^3.1.23", + "please-upgrade-node": "^3.2.0", + "pluralize": "^8.0.0", + "server-destroy": "^1.0.1", + "yargs": "^17.0.1" + }, + "bin": { + "json-server": "lib/cli/bin.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-id": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/lodash-id/-/lodash-id-0.14.1.tgz", + "integrity": "sha512-ikQPBTiq/d5m6dfKQlFdIXFzvThPi2Be9/AHxktOnDSfSxE1j9ICbBT5Elk1ke7HSTgM38LHTpmJovo9/klnLg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/lowdb": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", + "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.3", + "is-promise": "^2.1.0", + "lodash": "4", + "pify": "^3.0.0", + "steno": "^0.4.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/method-override": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", + "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", + "license": "MIT", + "dependencies": { + "debug": "3.1.0", + "methods": "~1.1.2", + "parseurl": "~1.3.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/method-override/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/morgan": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.1.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "license": "MIT", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", + "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "license": "ISC" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/steno": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", + "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.3" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/mock-server/package.json b/mock-server/package.json new file mode 100644 index 0000000..a690600 --- /dev/null +++ b/mock-server/package.json @@ -0,0 +1,13 @@ +{ + "name": "mock-server", + "version": "1.0.0", + "description": "Mock server for bookstore application", + "main": "server.js", + "scripts": { + "start": "node server.js" + }, + "dependencies": { + "json-server": "^0.17.4" + } +} + diff --git a/mock-server/server.js b/mock-server/server.js new file mode 100644 index 0000000..b44e093 --- /dev/null +++ b/mock-server/server.js @@ -0,0 +1,117 @@ +const jsonServer = require('json-server'); +const server = jsonServer.create(); +const middlewares = jsonServer.defaults(); +const fs = require('fs'); +const path = require('path'); + +// Load initial data from public/data +const loadData = () => { + const dataPath = path.join(__dirname, '..', 'public', 'data'); + return { + stores: JSON.parse(fs.readFileSync(path.join(dataPath, 'stores.json'), 'utf8')), + books: JSON.parse(fs.readFileSync(path.join(dataPath, 'books.json'), 'utf8')), + authors: JSON.parse(fs.readFileSync(path.join(dataPath, 'authors.json'), 'utf8')), + inventory: JSON.parse(fs.readFileSync(path.join(dataPath, 'inventory.json'), 'utf8')), + }; +}; + +// Initialize db.json +const dbPath = path.join(__dirname, 'db.json'); +let db; + +if (!fs.existsSync(dbPath)) { + const initialData = loadData(); + db = { + ...initialData, + users: [ + { + id: 1, + username: "admin", + password: "admin123", + email: "admin@bookstore.com", + name: "Admin User" + }, + { + id: 2, + username: "user", + password: "user123", + email: "user@bookstore.com", + name: "Regular User" + } + ] + }; + fs.writeFileSync(dbPath, JSON.stringify(db, null, 2)); +} else { + db = JSON.parse(fs.readFileSync(dbPath, 'utf8')); + if (!db.stores || db.stores.length === 0) { + const initialData = loadData(); + db = { ...db, ...initialData }; + if (!db.users) { + db.users = [ + { id: 1, username: "admin", password: "admin123", email: "admin@bookstore.com", name: "Admin User" }, + { id: 2, username: "user", password: "user123", email: "user@bookstore.com", name: "Regular User" } + ]; + } + fs.writeFileSync(dbPath, JSON.stringify(db, null, 2)); + } +} + +const router = jsonServer.router(dbPath); + +server.use(middlewares); +server.use(jsonServer.bodyParser); + +// CORS headers +server.use((req, res, next) => { + res.header('Access-Control-Allow-Origin', '*'); + res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); + res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); + if (req.method === 'OPTIONS') { + res.sendStatus(200); + } else { + next(); + } +}); + +// Authentication routes +server.post('/auth/signin', (req, res) => { + const currentDb = JSON.parse(fs.readFileSync(dbPath, 'utf8')); + const { username, password } = req.body; + const user = currentDb.users?.find(u => u.username === username && u.password === password); + + if (user) { + const { password: _, ...userWithoutPassword } = user; + res.json({ user: userWithoutPassword, token: `mock-token-${user.id}` }); + } else { + res.status(401).json({ error: 'Invalid credentials' }); + } +}); + +server.post('/auth/signout', (req, res) => { + res.json({ message: 'Signed out successfully' }); +}); + +server.get('/auth/me', (req, res) => { + const currentDb = JSON.parse(fs.readFileSync(dbPath, 'utf8')); + const token = req.headers.authorization?.replace('Bearer ', ''); + if (token && token.startsWith('mock-token-')) { + const userId = parseInt(token.replace('mock-token-', '')); + const user = currentDb.users?.find(u => u.id === userId); + if (user) { + const { password: _, ...userWithoutPassword } = user; + res.json({ user: userWithoutPassword }); + } else { + res.status(401).json({ error: 'Unauthorized' }); + } + } else { + res.status(401).json({ error: 'Unauthorized' }); + } +}); + +server.use(router); + +const PORT = process.env.PORT || 3001; +server.listen(PORT, () => { + console.log(`Mock server running on http://localhost:${PORT}`); +}); + diff --git a/package-lock.json b/package-lock.json index d5cd7ef..0b4ccee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2183,10 +2183,12 @@ "license": "MIT" }, "node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", - "license": "MIT", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -2883,10 +2885,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "license": "MIT", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "engines": { "node": ">=12" }, @@ -3166,13 +3167,12 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", - "license": "MIT", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dependencies": { - "fdir": "^6.4.3", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -3242,17 +3242,16 @@ } }, "node_modules/vite": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz", - "integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==", - "license": "MIT", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.3", + "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", - "tinyglobby": "^0.2.12" + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" diff --git a/package.json b/package.json index 87c69dc..b361be8 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "vite", "build": "vite build", "lint": "eslint .", - "preview": "vite preview" + "preview": "vite preview", + "mock-server": "node mock-server/server.js" }, "dependencies": { "@tailwindcss/vite": "^4.1.4", diff --git a/src/App.jsx b/src/App.jsx index 5913c1b..9b7f9d5 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -2,6 +2,7 @@ import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { Suspense, lazy } from 'react'; import Layout from './components/Layout'; import Loading from './pages/Loading'; +import { AuthProvider } from './contexts/AuthContext'; // Lazy load components for route-based code splitting const Home = lazy(() => import('./pages/Home')); @@ -15,23 +16,25 @@ const BrowseAuthors = lazy(() => import('./pages/BrowseAuthors')); const BrowseStores = lazy(() => import('./pages/BrowseStores')); function App() { return ( - - }> - - }> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - - - - + + + }> + + }> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + + + ); } diff --git a/src/components/ActionButton/ActionButton.jsx b/src/components/ActionButton/ActionButton.jsx index 3e6e627..39c1e10 100644 --- a/src/components/ActionButton/ActionButton.jsx +++ b/src/components/ActionButton/ActionButton.jsx @@ -2,14 +2,17 @@ import React from 'react' const ActionButton = ({ icon, - action + action, + disabled = false, + title = '' }) => { return ( ) diff --git a/src/components/ActionButton/TableActions.jsx b/src/components/ActionButton/TableActions.jsx index ee479d3..ee077cf 100644 --- a/src/components/ActionButton/TableActions.jsx +++ b/src/components/ActionButton/TableActions.jsx @@ -3,21 +3,21 @@ import ActionButton from '../ActionButton/ActionButton' import pencil from '../../assets/Pencil.png' import trash from '../../assets/Bin.png' -const TableActions = ({ row, onEdit, onDelete, }) => { - - +const TableActions = ({ row, onEdit, onDelete, isAuthenticated = true }) => { return (
onEdit(row)} - + disabled={!isAuthenticated} + title="Edit" /> onDelete(row)} + disabled={!isAuthenticated} + title="Delete" className="bg-red-500 hover:bg-red-600" - />
) diff --git a/src/components/Auth/SignInModal.jsx b/src/components/Auth/SignInModal.jsx new file mode 100644 index 0000000..9f133c5 --- /dev/null +++ b/src/components/Auth/SignInModal.jsx @@ -0,0 +1,96 @@ +import { useState } from 'react'; +import Modal from '../Modal'; +import { useAuth } from '../../contexts/AuthContext'; + +const SignInModal = ({ show, setShow }) => { + const [credentials, setCredentials] = useState({ username: '', password: '' }); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(false); + const { signIn } = useAuth(); + + const handleSubmit = async () => { + setError(''); + setLoading(true); + + if (!credentials.username || !credentials.password) { + setError('Please enter both username and password'); + setLoading(false); + return; + } + + const result = await signIn(credentials); + setLoading(false); + + if (result.success) { + setShow(false); + setCredentials({ username: '', password: '' }); + } else { + setError(result.error || 'Sign in failed. Please check your credentials.'); + } + }; + + const handleCancel = () => { + setShow(false); + setCredentials({ username: '', password: '' }); + setError(''); + }; + + return ( + +
+ {error && ( +
+ {error} +
+ )} +
+ + setCredentials({ ...credentials, username: e.target.value })} + className="border border-gray-300 rounded p-2 w-full" + placeholder="Enter username" + disabled={loading} + required + /> +
+
+ + setCredentials({ ...credentials, password: e.target.value })} + className="border border-gray-300 rounded p-2 w-full" + placeholder="Enter password" + disabled={loading} + onKeyDown={(e) => { + if (e.key === 'Enter') handleSubmit(); + }} + required + /> +
+
+

Demo credentials:

+

Username: admin, Password: admin123

+

Username: user, Password: user123

+
+
+
+ ); +}; + +export default SignInModal; + diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 3edbb58..778884f 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -1,7 +1,7 @@ import React from 'react' import Searchbar from './Searchbar' -const Header = ({addNew, title, buttonTitle}) => { +const Header = ({addNew, title, buttonTitle, canAdd = true}) => { return (
@@ -9,12 +9,17 @@ const Header = ({addNew, title, buttonTitle}) => {

{title || 'Authors List'}

- + diff --git a/src/components/Topbar.jsx b/src/components/Topbar.jsx index e097a0c..9f92af2 100644 --- a/src/components/Topbar.jsx +++ b/src/components/Topbar.jsx @@ -1,54 +1,81 @@ -import React from 'react' +import React, { useState } from 'react' import { useLocation } from 'react-router-dom' import usrImg from '../assets/usr.png' +import { useAuth } from '../contexts/AuthContext' +import SignInModal from './Auth/SignInModal' + const Topbar = () => { const location = useLocation() const path = location.pathname; - const title = { - '/': { - title: 'Shop', - subtitle: 'Shop > Books', - }, - - '/stores': { - title: 'Stores', - subtitle: 'Admin > Stores', - }, - '/author': { - title: 'Authors', - subtitle: 'Admin > Authors', - }, - '/books': { - title: 'Books', - subtitle: 'Admin > Books', - }, - '/store/:storeId': { - title: 'Store Inventory', - subtitle: 'Admin > Store Inventory', - }, - '/browsebooks': { - title: 'Browse Books', - subtitle: 'Shop > Books', - }, - '/browseauthors': { - title: 'Browse Authors', - subtitle: 'Shop > Authors', - }, + const { user, isAuthenticated, signOut } = useAuth(); + const [showSignInModal, setShowSignInModal] = useState(false); + + const getTitle = () => { + if (path === '/') { + return { title: 'Shop', subtitle: 'Shop > Books' }; + } + if (path === '/stores') { + return { title: 'Stores', subtitle: 'Admin > Stores' }; + } + if (path === '/author') { + return { title: 'Authors', subtitle: 'Admin > Authors' }; + } + if (path === '/books') { + return { title: 'Books', subtitle: 'Admin > Books' }; + } + if (path.startsWith('/store/')) { + return { title: 'Store Inventory', subtitle: 'Admin > Store Inventory' }; + } + if (path === '/browsebooks') { + return { title: 'Browse Books', subtitle: 'Shop > Books' }; + } + if (path === '/browseauthors') { + return { title: 'Browse Authors', subtitle: 'Shop > Authors' }; + } + if (path === '/browsestores') { + return { title: 'Browse Stores', subtitle: 'Shop > Stores' }; + } + return { title: '', subtitle: '' }; + }; + + const pageTitle = getTitle(); + + const handleSignOut = async () => { + await signOut(); } return ( -
-
-

{title[path]?.title}

-

{title[path]?.subtitle}

+ <> +
+
+

{pageTitle.title}

+

{pageTitle.subtitle}

+
+
+ {isAuthenticated && user ? ( + <> + profile +

{user.name || user.username}

+ + + ) : ( + + )} +
-
- profile -

User Name

- -
-
+ + ) } diff --git a/src/contexts/AuthContext.jsx b/src/contexts/AuthContext.jsx new file mode 100644 index 0000000..3279d73 --- /dev/null +++ b/src/contexts/AuthContext.jsx @@ -0,0 +1,75 @@ +import { createContext, useContext, useState, useEffect } from 'react'; +import { api } from '../services/api'; + +const AuthContext = createContext(null); + +export const AuthProvider = ({ children }) => { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const checkAuth = async () => { + try { + const token = localStorage.getItem('authToken'); + if (token) { + const response = await api.getCurrentUser(); + if (response.user) { + setUser(response.user); + } else { + localStorage.removeItem('authToken'); + } + } + } catch (error) { + localStorage.removeItem('authToken'); + } finally { + setLoading(false); + } + }; + + checkAuth(); + }, []); + + const signIn = async (credentials) => { + try { + const response = await api.signIn(credentials); + if (response.user && response.token) { + localStorage.setItem('authToken', response.token); + setUser(response.user); + return { success: true }; + } + return { success: false, error: 'Invalid response' }; + } catch (error) { + return { success: false, error: error.message || 'Sign in failed' }; + } + }; + + const signOut = async () => { + try { + await api.signOut(); + } catch (error) { + console.error('Sign out error:', error); + } finally { + localStorage.removeItem('authToken'); + setUser(null); + } + }; + + const value = { + user, + loading, + signIn, + signOut, + isAuthenticated: !!user, + }; + + return {children}; +}; + +export const useAuth = () => { + const context = useContext(AuthContext); + if (!context) { + throw new Error('useAuth must be used within AuthProvider'); + } + return context; +}; + diff --git a/src/pages/StoreInventory.jsx b/src/pages/StoreInventory.jsx index 0480320..406f447 100644 --- a/src/pages/StoreInventory.jsx +++ b/src/pages/StoreInventory.jsx @@ -1,80 +1,397 @@ -// src/pages/Inventory.jsx -import { useEffect, useState } from 'react'; +import { useEffect, useState, useMemo } from 'react'; +import { useParams, useSearchParams } from 'react-router-dom'; import Modal from '../components/Modal'; import Header from '../components/Header'; +import Table from '../components/Table/Table'; +import TableActions from '../components/ActionButton/TableActions'; +import Loading from './Loading'; +import { api } from '../services/api'; +import { useAuth } from '../contexts/AuthContext'; -const Inventory = () => { - // State for UI +const StoreInventory = () => { + const { storeId } = useParams(); + const [searchParams] = useSearchParams(); + const { isAuthenticated } = useAuth(); + const [activeTab, setActiveTab] = useState('books'); const [showModal, setShowModal] = useState(false); + const [editingPriceId, setEditingPriceId] = useState(null); + const [editPrice, setEditPrice] = useState(''); + + const [books, setBooks] = useState([]); + const [authors, setAuthors] = useState([]); + const [inventory, setInventory] = useState([]); + const [store, setStore] = useState(null); + const [loading, setLoading] = useState(true); + + const [selectedBookId, setSelectedBookId] = useState(''); + const [newPrice, setNewPrice] = useState(''); + const [bookSearchTerm, setBookSearchTerm] = useState(''); + + const searchTerm = searchParams.get('search') || ''; - // Set active tab based on view query param - const view = 'books'; useEffect(() => { - if (view === 'authors' || view === 'books') { - setActiveTab(view); + const fetchData = async () => { + setLoading(true); + try { + const [booksData, authorsData, inventoryData, storesData] = await Promise.all([ + api.getBooks(), + api.getAuthors(), + api.getInventory(), + api.getStores(), + ]); + + setBooks(Array.isArray(booksData) ? booksData : [booksData]); + setAuthors(Array.isArray(authorsData) ? authorsData : [authorsData]); + setInventory(Array.isArray(inventoryData) ? inventoryData : [inventoryData]); + + const currentStore = Array.isArray(storesData) + ? storesData.find(s => s.id === parseInt(storeId, 10)) + : null; + setStore(currentStore); + } catch (error) { + console.error('Error fetching data:', error); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, [storeId]); + + const authorMap = useMemo(() => { + return authors.reduce((map, author) => { + map[author.id] = `${author.first_name} ${author.last_name}`; + return map; + }, {}); + }, [authors]); + + const storeBooks = useMemo(() => { + const storeInventory = inventory.filter( + (item) => item.store_id === parseInt(storeId, 10) + ); + + let booksWithInventory = books + .filter((book) => storeInventory.some((item) => item.book_id === book.id)) + .map((book) => { + const inventoryItem = storeInventory.find((item) => item.book_id === book.id); + return { + ...book, + inventory_id: inventoryItem.id, + price: inventoryItem.price, + author_name: authorMap[book.author_id] || 'Unknown Author', + }; + }); + + if (searchTerm.trim()) { + const lowerSearch = searchTerm.toLowerCase(); + booksWithInventory = booksWithInventory.filter((book) => + Object.values(book).some((value) => + String(value).toLowerCase().includes(lowerSearch) + ) + ); } - }, [view]); - // Modal controls - const openModal = () => setShowModal(true); - const closeModal = () => { - setShowModal(false); + return booksWithInventory; + }, [storeId, books, inventory, searchTerm, authorMap]); + + const availableBooks = useMemo(() => { + const storeInventory = inventory.filter( + (item) => item.store_id === parseInt(storeId, 10) + ); + const inventoryBookIds = new Set(storeInventory.map(item => item.book_id)); + + let available = books + .filter(book => !inventoryBookIds.has(book.id)) + .map(book => ({ + ...book, + author_name: authorMap[book.author_id] || 'Unknown Author', + })); + + if (bookSearchTerm.trim()) { + const lowerSearch = bookSearchTerm.toLowerCase(); + available = available.filter((book) => + book.name.toLowerCase().includes(lowerSearch) || + book.author_name.toLowerCase().includes(lowerSearch) + ); + } + + return available; + }, [books, inventory, storeId, authorMap, bookSearchTerm]); + + const columns = useMemo( + () => [ + { header: 'Book Id', accessorKey: 'id' }, + { header: 'Name', accessorKey: 'name' }, + { header: 'Pages', accessorKey: 'page_count' }, + { header: 'Author', accessorKey: 'author_name' }, + { + header: 'Price', + accessorKey: 'price', + cell: ({ row }) => + editingPriceId === row.original.inventory_id ? ( + setEditPrice(e.target.value)} + onKeyDown={(e) => { + if (e.key === 'Enter') handleSavePrice(row.original.inventory_id); + if (e.key === 'Escape') handleCancelEdit(); + }} + onBlur={() => handleSavePrice(row.original.inventory_id)} + className="border border-gray-300 rounded p-1 w-24 focus:outline-none focus:ring-2 focus:ring-blue-500" + autoFocus + /> + ) : ( + `$${row.original.price?.toFixed(2) || '0.00'}` + ), + }, + { + header: 'Actions', + id: 'actions', + cell: ({ row }) => ( + handleEditPrice(row.original)} + onDelete={() => handleDeleteBook(row.original.inventory_id, row.original.name)} + /> + ), + }, + ], + [editingPriceId, editPrice] + ); + + const handleEditPrice = (book) => { + if (!isAuthenticated) { + alert('Please sign in to edit books'); + return; + } + setEditingPriceId(book.inventory_id); + setEditPrice(book.price?.toString() || ''); + }; + + const handleSavePrice = async (inventoryId) => { + if (!isAuthenticated) { + alert('Please sign in to edit books'); + return; + } + + const price = parseFloat(editPrice); + if (isNaN(price) || price < 0) { + alert('Please enter a valid price'); + return; + } + + try { + const inventoryItem = inventory.find(item => item.id === inventoryId); + if (inventoryItem) { + try { + await api.updateInventoryItem(inventoryId, { ...inventoryItem, price }); + } catch { + // Fallback: update local state + } + setInventory(prev => + prev.map(item => + item.id === inventoryId ? { ...item, price } : item + ) + ); + } + } catch (error) { + console.error('Error updating price:', error); + } + + setEditingPriceId(null); + setEditPrice(''); }; + const handleCancelEdit = () => { + setEditingPriceId(null); + setEditPrice(''); + }; + + const handleDeleteBook = async (inventoryId, bookName) => { + if (!isAuthenticated) { + alert('Please sign in to delete books'); + return; + } + + if (window.confirm(`Are you sure you want to remove "${bookName}" from this store?`)) { + try { + try { + await api.deleteInventoryItem(inventoryId); + } catch { + // Fallback: update local state + } + setInventory(prev => prev.filter(item => item.id !== inventoryId)); + } catch (error) { + console.error('Error deleting inventory item:', error); + } + } + }; + + const handleAddNew = () => { + if (!isAuthenticated) { + alert('Please sign in to add books to inventory'); + return; + } + setShowModal(true); + setSelectedBookId(''); + setNewPrice(''); + setBookSearchTerm(''); + }; + + const handleSaveNewBook = async () => { + if (!selectedBookId || !newPrice) { + alert('Please select a book and enter a price'); + return; + } + + const price = parseFloat(newPrice); + if (isNaN(price) || price < 0) { + alert('Please enter a valid price'); + return; + } + + try { + const newInventoryItem = { + book_id: parseInt(selectedBookId, 10), + store_id: parseInt(storeId, 10), + price: price, + }; + + try { + await api.createInventoryItem(newInventoryItem); + } catch { + // Fallback: update local state + } + + const newId = inventory.length > 0 + ? Math.max(...inventory.map(i => i.id)) + 1 + : 1; + setInventory(prev => [...prev, { id: newId, ...newInventoryItem }]); + + setShowModal(false); + setSelectedBookId(''); + setNewPrice(''); + setBookSearchTerm(''); + } catch (error) { + console.error('Error adding inventory item:', error); + } + }; + + const initialBooks = useMemo(() => { + return availableBooks.slice(0, 7); + }, [availableBooks]); + + const filteredBooksForDropdown = useMemo(() => { + if (!bookSearchTerm.trim()) { + return initialBooks; + } + return availableBooks; + }, [bookSearchTerm, availableBooks, initialBooks]); + + if (loading) { + return ; + } + return (
-
+
{activeTab === 'books' ? ( -

No books found in this store.

+ storeBooks.length > 0 ? ( + + ) : ( +

No books found in this store.

+ ) ) : ( -

No authors with books in this store.

+

No authors with books in this store.

)} { + setShowModal(false); + setSelectedBookId(''); + setNewPrice(''); + setBookSearchTerm(''); + }} show={showModal} setShow={setShowModal} >
+
+ + setBookSearchTerm(e.target.value)} + className="border border-gray-300 rounded p-2 w-full" + placeholder="Search by book title or author..." + /> +
+ {filteredBooksForDropdown.length === 0 && ( +

No books available

+ )}
-
setNewPrice(e.target.value)} className="border border-gray-300 rounded p-2 w-full" placeholder="Enter Price (e.g., 29.99)" + required />
@@ -83,4 +400,4 @@ const Inventory = () => { ); }; -export default Inventory; \ No newline at end of file +export default StoreInventory; diff --git a/src/services/api.js b/src/services/api.js new file mode 100644 index 0000000..7e982c6 --- /dev/null +++ b/src/services/api.js @@ -0,0 +1,139 @@ +// API service that can switch between mock server and real backend +const USE_MOCK_SERVER = import.meta.env.VITE_USE_MOCK_SERVER !== 'false'; +const MOCK_API_URL = import.meta.env.VITE_MOCK_API_URL || 'http://localhost:3001'; +const REAL_API_URL = import.meta.env.VITE_REAL_API_URL || 'http://localhost:3000/api'; + +const getBaseUrl = () => { + return USE_MOCK_SERVER ? MOCK_API_URL : REAL_API_URL; +}; + +// Helper for API calls +const apiCall = async (endpoint, options = {}) => { + const baseUrl = getBaseUrl(); + const url = `${baseUrl}${endpoint}`; + + const token = localStorage.getItem('authToken'); + const defaultHeaders = { + 'Content-Type': 'application/json', + }; + + if (token) { + defaultHeaders['Authorization'] = `Bearer ${token}`; + } + + const config = { + ...options, + headers: { + ...defaultHeaders, + ...(options.headers || {}), + }, + }; + + if (config.body && typeof config.body === 'object') { + config.body = JSON.stringify(config.body); + } + + try { + const response = await fetch(url, config); + + if (!response.ok) { + throw new Error(`API Error: ${response.status} ${response.statusText}`); + } + + return await response.json(); + } catch (error) { + console.error('API call failed:', error); + throw error; + } +}; + +// Fallback to static JSON files +const fallbackFetch = async (path) => { + try { + const response = await fetch(`/data${path}.json`); + if (!response.ok) throw new Error('Not found'); + return await response.json(); + } catch (error) { + console.error(`Fallback fetch failed for ${path}:`, error); + throw error; + } +}; + +// API methods with fallback +export const api = { + // Stores + getStores: async () => { + try { + return await apiCall('/stores'); + } catch { + return await fallbackFetch('/stores'); + } + }, + + // Books + getBooks: async () => { + try { + return await apiCall('/books'); + } catch { + return await fallbackFetch('/books'); + } + }, + + // Authors + getAuthors: async () => { + try { + return await apiCall('/authors'); + } catch { + return await fallbackFetch('/authors'); + } + }, + + // Inventory + getInventory: async () => { + try { + return await apiCall('/inventory'); + } catch { + return await fallbackFetch('/inventory'); + } + }, + + createInventoryItem: async (item) => { + try { + return await apiCall('/inventory', { method: 'POST', body: item }); + } catch (error) { + throw error; + } + }, + + updateInventoryItem: async (id, item) => { + try { + return await apiCall(`/inventory/${id}`, { method: 'PUT', body: item }); + } catch (error) { + throw error; + } + }, + + deleteInventoryItem: async (id) => { + try { + return await apiCall(`/inventory/${id}`, { method: 'DELETE' }); + } catch (error) { + throw error; + } + }, + + // Authentication + signIn: async (credentials) => { + return await apiCall('/auth/signin', { method: 'POST', body: credentials }); + }, + + signOut: async () => { + return await apiCall('/auth/signout', { method: 'POST' }); + }, + + getCurrentUser: async () => { + return await apiCall('/auth/me'); + }, +}; + +export default api; +