import { S3 } from 'aws-sdk' export default class AwsS3Api { static async delete (configMap: IStringKeyMap): Promise { const { imgUrl, config: { accessKeyID, secretAccessKey, bucketName, region, endpoint, pathStyleAccess, bucketEndpoint, rejectUnauthorized } } = configMap try { const url = new URL(!/^https?:\/\//.test(imgUrl) ? `http://${imgUrl}` : imgUrl) const fileKey = url.pathname let endpointUrl if (endpoint) { if (!/^https?:\/\//.test(endpoint)) { endpointUrl = `http://${endpoint}` } else { endpointUrl = endpoint } } let sslEnabled = true if (endpointUrl) { sslEnabled = endpointUrl.startsWith('https') } const http = sslEnabled ? require('https') : require('http') const client = new S3({ accessKeyId: accessKeyID, secretAccessKey, endpoint: endpointUrl, s3ForcePathStyle: pathStyleAccess, sslEnabled, region, s3BucketEndpoint: bucketEndpoint, httpOptions: { agent: new http.Agent({ rejectUnauthorized, timeout: 30000 }) } }) const result = await client.deleteObject({ Bucket: bucketName, Key: fileKey.replace(/^\//, '') }).promise() return result.$response.httpResponse.statusCode === 204 } catch (error) { return false } } }