1
0
mirror of https://github.com/seejohnrun/haste-server.git synced 2025-12-28 09:41:27 +00:00
Files
haste-server/src/lib/document-stores/amazon-s3.ts
Yusuf Yilmaz a5b0a98b3f add prettier
2022-06-06 19:44:11 +02:00

81 lines
1.7 KiB
TypeScript

import * as winston from 'winston'
import AWS from 'aws-sdk'
import type { Callback, Store } from 'src/types/store'
import type { AmazonStoreConfig } from 'src/types/config'
class AmazonS3DocumentStore implements Store {
bucket: string | undefined
client: AWS.S3
type: string
expire?: number | undefined
constructor(options: AmazonStoreConfig) {
this.expire = options.expire
this.bucket = options.bucket
this.type = options.type
this.client = new AWS.S3({ region: options.region })
}
get = (
key: string,
callback: Callback,
skipExpire?: boolean | undefined
): void => {
if (!this.bucket) {
callback(false)
return
}
const req = {
Bucket: this.bucket,
Key: key
}
this.client.getObject(req, (err, data) => {
if (err || !data.Body) {
callback(false)
} else {
callback(data.Body.toString('utf-8'))
if (this.expire && !skipExpire) {
winston.warn('amazon s3 store cannot set expirations on keys')
}
}
})
}
set = (
key: string,
data: string,
callback: Callback,
skipExpire?: boolean | undefined
): void => {
if (!this.bucket) {
callback(false)
return
}
const req = {
Bucket: this.bucket,
Key: key,
Body: data as AWS.S3.PutObjectOutput,
ContentType: 'text/plain'
}
this.client.putObject(req, err => {
if (err) {
callback(false)
} else {
callback(true)
if (this.expire && !skipExpire) {
winston.warn('amazon s3 store cannot set expirations on keys')
}
}
})
}
}
export default AmazonS3DocumentStore