fix: send non-JPEG images as document instead of photo; fix Dockerfile home.html path
Deploy FileDrop / deploy (push) Failing after 23s

- getFileType: only classify image/jpeg as 'photo'; png/gif/webp → 'document'
  (Telegram Bot API rejects non-JPEG for sendPhoto)
- Dockerfile: copy home.html to dist/ instead of root (import.meta.dir = dist/)
- Update test assertion for getFileType(image/png) → 'document'
This commit is contained in:
Claude
2026-07-29 17:15:07 +07:00
parent 9a4853a484
commit 1ecab987a6
3 changed files with 8 additions and 3 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ WORKDIR /usr/src/app
# Copy built files, schema, and package.json # Copy built files, schema, and package.json
COPY --from=builder /usr/src/app/dist/index.js ./dist/index.js COPY --from=builder /usr/src/app/dist/index.js ./dist/index.js
COPY --from=builder /usr/src/app/dist/migrate.js ./dist/migrate.js COPY --from=builder /usr/src/app/dist/migrate.js ./dist/migrate.js
COPY --from=builder /usr/src/app/src/home.html ./home.html COPY --from=builder /usr/src/app/src/home.html ./dist/home.html
COPY schema.sql ./ COPY schema.sql ./
COPY package.json ./ COPY package.json ./
+6 -1
View File
@@ -85,7 +85,12 @@ export const getFileType = (mime: string | null, caption?: string): string => {
if (mimeUpper === 'video') return 'video'; if (mimeUpper === 'video') return 'video';
if (mimeUpper === 'audio') return 'audio'; if (mimeUpper === 'audio') return 'audio';
if (mimeUpper === 'document') return 'document'; if (mimeUpper === 'document') return 'document';
if (mimeUpper === 'image') return captionLower?.includes('gif') ? 'animation' : 'photo'; // ── Photo (JPEG only; Telegram Bot API rejects non-JPEG for sendPhoto) ──
if (mimeUpper === 'image') {
if (captionLower?.includes('gif')) return 'animation';
if (mime?.toLowerCase() === 'image/jpeg' || mime?.toLowerCase() === 'image/jpg') return 'photo';
return 'document';
}
if (captionLower?.includes('voice')) return 'voice'; if (captionLower?.includes('voice')) return 'voice';
if (captionLower?.includes('animation')) return 'animation'; if (captionLower?.includes('animation')) return 'animation';
+1 -1
View File
@@ -21,7 +21,7 @@ describe('File Utilities', () => {
it('should classify image mime types based on caption', () => { it('should classify image mime types based on caption', () => {
expect(getFileType('image/jpeg', 'my photo')).toBe('photo'); expect(getFileType('image/jpeg', 'my photo')).toBe('photo');
expect(getFileType('image/png', 'cool image.png')).toBe('photo'); expect(getFileType('image/png', 'cool image.png')).toBe('document');
expect(getFileType('image/gif', 'funny.gif')).toBe('animation'); expect(getFileType('image/gif', 'funny.gif')).toBe('animation');
expect(getFileType('image/png', 'funny gif')).toBe('animation'); expect(getFileType('image/png', 'funny gif')).toBe('animation');
}); });