Skip to content

Commit 3f8865e

Browse files
committed
chore: Update embedder queue to handle all types
1 parent cdc89f0 commit 3f8865e

File tree

1 file changed

+52
-17
lines changed

1 file changed

+52
-17
lines changed

apps/embedder/src/server/api/packs/[id]/loaders/[loaderId].get.ts

+52-17
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ import { embedderDb, Loader } from '@magickml/embedder-db-pg'
33
import { and, eq } from 'drizzle-orm'
44
import { createLoader } from '@magickml/embedder-loaders-core'
55
import { Storage } from '@google-cloud/storage'
6-
import { LoaderWithChunks, LoaderSchema } from '@magickml/embedder-schemas'
6+
import {
7+
LoaderWithChunks,
8+
LoaderSchema,
9+
LoaderType,
10+
} from '@magickml/embedder-schemas'
711

812
const storage = new Storage({
913
projectId: process.env.GOOGLE_CLOUD_PROJECT_ID,
@@ -26,6 +30,15 @@ async function generateV4ReadSignedUrl(bucketName: string, fileName: string) {
2630
return url
2731
}
2832

33+
function isValidUrl(string: string) {
34+
try {
35+
new URL(string)
36+
return true
37+
} catch (_) {
38+
return false
39+
}
40+
}
41+
2942
export default defineEventHandler(async event => {
3043
const packId = z.string().parse(event.context.params?.id)
3144
const loaderId = z.string().parse(event.context.params?.loaderId)
@@ -45,26 +58,48 @@ export default defineEventHandler(async event => {
4558
}
4659

4760
if (loader.status === 'completed') {
48-
let url
49-
50-
// Generate signed URL for private bucket
51-
try {
52-
url = await generateV4ReadSignedUrl(
53-
process.env.GOOGLE_PRIVATE_BUCKET_NAME || '',
54-
(loader.config as any).filePathOrUrl || ''
55-
)
56-
} catch (error) {
57-
console.error('Error getting loader:', error)
61+
let sourceField: string | undefined
62+
let needsSignedUrl = false
63+
64+
switch (loader.type as LoaderType) {
65+
case 'pdf':
66+
case 'docx':
67+
case 'excel':
68+
case 'ppt':
69+
sourceField = 'filePathOrUrl'
70+
needsSignedUrl = true
71+
break
72+
case 'web':
73+
sourceField = 'urlOrContent'
74+
break
75+
case 'youtube':
76+
sourceField = 'videoIdOrUrl'
77+
break
78+
case 'sitemap':
79+
sourceField = 'url'
80+
break
81+
// Add other cases as needed
5882
}
5983

60-
let config = loader.config
61-
62-
if (url) {
63-
url = (loader.config as any).filePathOrUrl
84+
let url = sourceField ? (loader.config as any)[sourceField] : undefined
85+
86+
if (needsSignedUrl && url && !isValidUrl(url)) {
87+
try {
88+
url = await generateV4ReadSignedUrl(
89+
process.env.GOOGLE_PRIVATE_BUCKET_NAME || '',
90+
url
91+
)
92+
} catch (error) {
93+
console.error('Error generating signed URL:', error)
94+
// Handle the error gracefully
95+
}
96+
}
6497

98+
let config = { ...loader.config }
99+
if (sourceField && url) {
65100
config = {
66-
...(loader.config as any),
67-
...(url && { filePathOrUrl: url }),
101+
...config,
102+
[sourceField]: url,
68103
}
69104
}
70105

0 commit comments

Comments
 (0)