MCPcopy Index your code
hub / github.com/simstudioai/sim / extractFilename

Function extractFilename

apps/sim/app/api/files/utils.ts:88–121  ·  view source on GitHub ↗
(path: string)

Source from the content-addressed store, hash-verified

86}
87
88export function extractFilename(path: string): string {
89 let filename: string
90
91 if (path.startsWith('/api/files/serve/')) {
92 filename = path.substring('/api/files/serve/'.length)
93 } else {
94 filename = path.split('/').pop() || path
95 }
96
97 filename = filename
98 .replace(/\.\./g, '')
99 .replace(/\/\.\./g, '')
100 .replace(/\.\.\//g, '')
101
102 if (filename.startsWith('s3/') || filename.startsWith('blob/')) {
103 const parts = filename.split('/')
104 const prefix = parts[0] // 's3' or 'blob'
105 const keyParts = parts.slice(1)
106
107 const sanitizedKeyParts = keyParts
108 .map((part) => part.replace(/\.\./g, '').replace(/^\./g, '').trim())
109 .filter((part) => part.length > 0)
110
111 filename = `${prefix}/${sanitizedKeyParts.join('/')}`
112 } else {
113 filename = filename.replace(/[/\\]/g, '')
114 }
115
116 if (!filename || filename.trim().length === 0) {
117 throw new Error('Invalid or empty filename after sanitization')
118 }
119
120 return filename
121}
122
123export async function findLocalFile(filename: string): Promise<string | null> {
124 try {

Callers 2

utils.test.tsFile · 0.90

Calls 2

joinMethod · 0.80
replaceMethod · 0.65

Tested by

no test coverage detected