mirror of
https://github.com/formbricks/formbricks.git
synced 2025-12-30 02:10:12 -06:00
fix: feedback
This commit is contained in:
4
packages/storage/.gitignore
vendored
4
packages/storage/.gitignore
vendored
@@ -1,4 +0,0 @@
|
||||
node_modules
|
||||
dist
|
||||
coverage
|
||||
.turbo
|
||||
@@ -1,5 +1,6 @@
|
||||
import { S3Client } from "@aws-sdk/client-s3";
|
||||
import { logger } from "@formbricks/logger";
|
||||
import { ErrorCode, type Result, type S3CredentialsError, type UnknownError, err, ok } from "../types/error";
|
||||
import {
|
||||
S3_ACCESS_KEY,
|
||||
S3_BUCKET_NAME,
|
||||
@@ -8,7 +9,6 @@ import {
|
||||
S3_REGION,
|
||||
S3_SECRET_KEY,
|
||||
} from "./constants";
|
||||
import { type Result, type S3CredentialsError, type UnknownError, err, ok } from "./types/error";
|
||||
|
||||
/**
|
||||
* Create an S3 client from environment variables
|
||||
@@ -19,7 +19,7 @@ export const createS3ClientFromEnv = (): Result<S3Client, S3CredentialsError | U
|
||||
if (!S3_ACCESS_KEY || !S3_SECRET_KEY || !S3_BUCKET_NAME || !S3_REGION) {
|
||||
logger.error("S3 Client: S3 credentials are not set");
|
||||
return err({
|
||||
code: "s3_credentials_error",
|
||||
code: ErrorCode.S3CredentialsError,
|
||||
message: "S3 credentials are not set",
|
||||
});
|
||||
}
|
||||
@@ -35,7 +35,7 @@ export const createS3ClientFromEnv = (): Result<S3Client, S3CredentialsError | U
|
||||
} catch (error) {
|
||||
logger.error("Error creating S3 client from environment variables", { error });
|
||||
return err({
|
||||
code: "unknown",
|
||||
code: ErrorCode.Unknown,
|
||||
message: "Error creating S3 client from environment variables",
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2,9 +2,8 @@ import { DeleteObjectCommand, GetObjectCommand, HeadObjectCommand } from "@aws-s
|
||||
import { type PresignedPostOptions, createPresignedPost } from "@aws-sdk/s3-presigned-post";
|
||||
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
|
||||
import { logger } from "@formbricks/logger";
|
||||
import { createS3Client } from "./client";
|
||||
import { S3_BUCKET_NAME } from "./constants";
|
||||
import {
|
||||
ErrorCode,
|
||||
type FileNotFoundError,
|
||||
type Result,
|
||||
type S3ClientError,
|
||||
@@ -12,7 +11,9 @@ import {
|
||||
type UnknownError,
|
||||
err,
|
||||
ok,
|
||||
} from "./types/error";
|
||||
} from "../types/error";
|
||||
import { createS3Client } from "./client";
|
||||
import { S3_BUCKET_NAME } from "./constants";
|
||||
|
||||
const s3Client = createS3Client();
|
||||
|
||||
@@ -42,7 +43,7 @@ export const getSignedUploadUrl = async (
|
||||
if (!s3Client) {
|
||||
logger.error("Failed to get signed upload URL: S3 client is not set");
|
||||
return err({
|
||||
code: "s3_client_error",
|
||||
code: ErrorCode.S3ClientError,
|
||||
message: "S3 client is not set",
|
||||
});
|
||||
}
|
||||
@@ -54,7 +55,7 @@ export const getSignedUploadUrl = async (
|
||||
if (!S3_BUCKET_NAME) {
|
||||
logger.error("Failed to get signed upload URL: S3 bucket name is not set");
|
||||
return err({
|
||||
code: "s3_credentials_error",
|
||||
code: ErrorCode.S3CredentialsError,
|
||||
message: "S3 bucket name is not set",
|
||||
});
|
||||
}
|
||||
@@ -77,7 +78,7 @@ export const getSignedUploadUrl = async (
|
||||
} catch (error) {
|
||||
logger.error("Failed to get signed upload URL", { error });
|
||||
const unknownError: UnknownError = {
|
||||
code: "unknown",
|
||||
code: ErrorCode.Unknown,
|
||||
message: "Failed to get signed upload URL",
|
||||
};
|
||||
|
||||
@@ -96,14 +97,14 @@ export const getSignedDownloadUrl = async (
|
||||
try {
|
||||
if (!s3Client) {
|
||||
return err({
|
||||
code: "s3_client_error",
|
||||
code: ErrorCode.S3ClientError,
|
||||
message: "S3 client is not set",
|
||||
});
|
||||
}
|
||||
|
||||
if (!S3_BUCKET_NAME) {
|
||||
return err({
|
||||
code: "s3_credentials_error",
|
||||
code: ErrorCode.S3CredentialsError,
|
||||
message: "S3 bucket name is not set",
|
||||
});
|
||||
}
|
||||
@@ -123,15 +124,12 @@ export const getSignedDownloadUrl = async (
|
||||
(headError as { $metadata?: { httpStatusCode?: number } }).$metadata?.httpStatusCode === 404
|
||||
) {
|
||||
return err({
|
||||
code: "file_not_found_error",
|
||||
code: ErrorCode.FileNotFoundError,
|
||||
message: `File not found: ${fileKey}`,
|
||||
});
|
||||
}
|
||||
|
||||
return err({
|
||||
code: "unknown",
|
||||
message: `Failed to get signed download URL for file: ${fileKey}`,
|
||||
});
|
||||
logger.warn("HeadObject check failed; proceeding to sign download URL", { error: headError, fileKey });
|
||||
}
|
||||
|
||||
const getObjectCommand = new GetObjectCommand({
|
||||
@@ -143,7 +141,7 @@ export const getSignedDownloadUrl = async (
|
||||
} catch (error) {
|
||||
logger.error("Failed to get signed download URL", { error });
|
||||
const unknownError: UnknownError = {
|
||||
code: "unknown",
|
||||
code: ErrorCode.Unknown,
|
||||
message: "Failed to get signed download URL",
|
||||
};
|
||||
|
||||
@@ -162,14 +160,14 @@ export const deleteFile = async (
|
||||
try {
|
||||
if (!s3Client) {
|
||||
return err({
|
||||
code: "s3_client_error",
|
||||
code: ErrorCode.S3ClientError,
|
||||
message: "S3 client is not set",
|
||||
});
|
||||
}
|
||||
|
||||
if (!S3_BUCKET_NAME) {
|
||||
return err({
|
||||
code: "s3_credentials_error",
|
||||
code: ErrorCode.S3CredentialsError,
|
||||
message: "S3 bucket name is not set",
|
||||
});
|
||||
}
|
||||
@@ -186,7 +184,7 @@ export const deleteFile = async (
|
||||
logger.error("Failed to delete file", { error });
|
||||
|
||||
const unknownError: UnknownError = {
|
||||
code: "unknown",
|
||||
code: ErrorCode.Unknown,
|
||||
message: "Failed to delete file",
|
||||
};
|
||||
|
||||
|
||||
@@ -19,22 +19,29 @@ export const err = <E = Error>(error: E): ResultError<E> => ({
|
||||
error,
|
||||
});
|
||||
|
||||
export enum ErrorCode {
|
||||
Unknown = "unknown",
|
||||
S3CredentialsError = "s3_credentials_error",
|
||||
S3ClientError = "s3_client_error",
|
||||
FileNotFoundError = "file_not_found_error",
|
||||
}
|
||||
|
||||
export interface UnknownError {
|
||||
code: "unknown";
|
||||
code: ErrorCode.Unknown;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface S3CredentialsError {
|
||||
code: "s3_credentials_error";
|
||||
code: ErrorCode.S3CredentialsError;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface S3ClientError {
|
||||
code: "s3_client_error";
|
||||
code: ErrorCode.S3ClientError;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface FileNotFoundError {
|
||||
code: "file_not_found_error";
|
||||
code: ErrorCode.FileNotFoundError;
|
||||
message: string;
|
||||
}
|
||||
@@ -45,6 +45,11 @@
|
||||
"@formbricks/storage#build": {
|
||||
"dependsOn": ["@formbricks/logger#build"]
|
||||
},
|
||||
"@formbricks/storage#go": {
|
||||
"cache": false,
|
||||
"dependsOn": ["@formbricks/storage#build"],
|
||||
"persistent": true
|
||||
},
|
||||
"@formbricks/storage#lint": {
|
||||
"dependsOn": ["@formbricks/logger#build"]
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user