pdfPreviewService.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { PDFStatus } from '../types';
  2. const API_BASE = '/api';
  3. export const pdfPreviewService = {
  4. // PDFプレビューURLの取得
  5. async getPDFUrl(fileId: string): Promise<{ url: string }> {
  6. const response = await fetch(`${API_BASE}/knowledge-bases/${fileId}/pdf-url`, {
  7. headers: {
  8. 'Authorization': `Bearer ${localStorage.getItem('authToken')}`,
  9. },
  10. });
  11. if (!response.ok) throw new Error('Failed to get PDF URL');
  12. return response.json();
  13. },
  14. // PDFステータスの確認
  15. async getPDFStatus(fileId: string): Promise<PDFStatus> {
  16. const response = await fetch(`${API_BASE}/knowledge-bases/${fileId}/pdf-status`, {
  17. headers: {
  18. 'Authorization': `Bearer ${localStorage.getItem('authToken')}`,
  19. },
  20. });
  21. if (!response.ok) throw new Error('Failed to fetch PDF status');
  22. return response.json();
  23. },
  24. // PDFのプリロード(変換のトリガー)
  25. async preloadPDF(fileId: string, force: boolean = false): Promise<void> {
  26. try {
  27. const url = `${API_BASE}/knowledge-bases/${fileId}/pdf-url` + (force ? '?force=true' : '');
  28. const response = await fetch(url, {
  29. method: 'GET',
  30. headers: {
  31. 'Authorization': `Bearer ${localStorage.getItem('authToken')}`,
  32. },
  33. signal: AbortSignal.timeout(30000), // Increase timeout for conversion
  34. });
  35. if (response.ok) {
  36. console.log('PDF already exists or conversion completed');
  37. }
  38. } catch (error) {
  39. console.log('PDF conversion triggered:', error.message);
  40. }
  41. },
  42. };