wechaty-puppet-padplus
Version:
Puppet Padplus for Wechaty
60 lines (49 loc) • 1.74 kB
text/typescript
import AWS from 'aws-sdk'
import { log, AWS_S3 } from '../../config'
import { GrpcGateway } from '../../server-manager/grpc-gateway'
import { ApiType } from '../../server-manager/proto-ts/PadPlusServer_pb'
import { GrpcEventEmitter } from '../../server-manager/grpc-event-emitter'
export interface RequestOption {
data?: any,
apiType: ApiType,
}
const PRE = 'REQUEST'
export class RequestClient {
private grpcGateway: GrpcGateway
private emitter: GrpcEventEmitter
constructor (grpcGateway: GrpcGateway, emitter: GrpcEventEmitter) {
this.grpcGateway = grpcGateway
this.emitter = emitter
}
public async request (option: RequestOption) {
log.silly(PRE, `request()`)
const uin = this.emitter.getUIN()
const res = await this.grpcGateway.request(option.apiType, uin, option.data)
return res
}
public async uploadFile (filename: string, stream: NodeJS.ReadableStream) {
filename = decodeURIComponent(filename)
let params: AWS.S3.PutObjectRequest = {
ACL: 'public-read',
Body: stream,
Bucket: AWS_S3.BUCKET,
Key: AWS_S3.PATH + filename,
}
AWS.config.accessKeyId = AWS_S3.ACCESS_KEY_ID
AWS.config.secretAccessKey = AWS_S3.SECRET_ACCESS_KEY
const s3 = new AWS.S3({ region: 'cn-northwest-1', signatureVersion: 'v4' })
const result = await new Promise<AWS.S3.ManagedUpload.SendData>((resolve, reject) => {
s3.upload(params, (err, data) => {
if (err) {
reject(err)
} else {
log.silly(PRE, `data : ${JSON.stringify(data)}`)
resolve(data)
}
})
})
const location = result.Location
const _location = location.split('image-message')[0] + params.Key
return _location
}
}