@@ -3,7 +3,11 @@ import { embedderDb, Loader } from '@magickml/embedder-db-pg'
3
3
import { and , eq } from 'drizzle-orm'
4
4
import { createLoader } from '@magickml/embedder-loaders-core'
5
5
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'
7
11
8
12
const storage = new Storage ( {
9
13
projectId : process . env . GOOGLE_CLOUD_PROJECT_ID ,
@@ -26,6 +30,15 @@ async function generateV4ReadSignedUrl(bucketName: string, fileName: string) {
26
30
return url
27
31
}
28
32
33
+ function isValidUrl ( string : string ) {
34
+ try {
35
+ new URL ( string )
36
+ return true
37
+ } catch ( _ ) {
38
+ return false
39
+ }
40
+ }
41
+
29
42
export default defineEventHandler ( async event => {
30
43
const packId = z . string ( ) . parse ( event . context . params ?. id )
31
44
const loaderId = z . string ( ) . parse ( event . context . params ?. loaderId )
@@ -45,26 +58,48 @@ export default defineEventHandler(async event => {
45
58
}
46
59
47
60
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
58
82
}
59
83
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
+ }
64
97
98
+ let config = { ...loader . config }
99
+ if ( sourceField && url ) {
65
100
config = {
66
- ...( loader . config as any ) ,
67
- ... ( url && { filePathOrUrl : url } ) ,
101
+ ...config ,
102
+ [ sourceField ] : url ,
68
103
}
69
104
}
70
105
0 commit comments