All files / api/src/ai-providers/google-vertex-ai retrieve-file.ts

8.33% Statements 4/48
100% Branches 0/0
0% Functions 0/2
8.33% Lines 4/48

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65          1x 1x   1x                                                                                                     1x          
import type {
  RequestHandlerFunction,
  ResponseTransformFunction,
} from '@shared/types/ai-providers/config';
import type { FileRetrieveResponseBody } from '@shared/types/api/routes/files-api';
import { vertexAPIConfig } from './api';
import { getBucketAndFile } from './utils';
 
export const googleRetrieveFileRequestHandler: RequestHandlerFunction = async ({
  c,
  saTarget,
  saRequestData,
}) => {
  const fileId = saRequestData.url.split('/').pop();
 
  const { bucket, file } = getBucketAndFile(fileId ?? '');
 
  const googleHeaders = await vertexAPIConfig.headers({
    c,
    saTarget,
    saRequestData,
  });
 
  const url = `https://storage.googleapis.com/${bucket}/${file}`;
 
  const response = await fetch(url, {
    headers: googleHeaders as Record<string, string>,
    method: 'HEAD',
  });
 
  if (response.status !== 200) {
    throw new Error('File not found');
  }
 
  const responseHeaders = response.headers;
 
  const bytes = responseHeaders.get('Content-Length');
  const updatedAt = responseHeaders.get('Last-Modified');
  const createdAt = responseHeaders.get('Date');
  const id = fileId;
  const filename = file.split('/').pop();
  const purpose = null;
  const status = 'processed';
 
  const fileObject = {
    bytes: Number.parseInt(bytes ?? '0', 10),
    updatedAt: new Date(updatedAt ?? '').getTime(),
    createdAt: new Date(createdAt ?? '').getTime(),
    id,
    filename,
    purpose,
    status,
  };
 
  return new Response(JSON.stringify(fileObject), {
    headers: { 'Content-Type': 'application/json' },
  });
};
 
export const googleRetrieveFileResponseTransform: ResponseTransformFunction = (
  response,
) => {
  return response as unknown as FileRetrieveResponseBody;
};