mirror of
https://github.com/ToolJet/ToolJet
synced 2026-04-24 06:57:40 +00:00
66 lines
2.5 KiB
TypeScript
66 lines
2.5 KiB
TypeScript
import * as stream from 'stream';
|
|
export async function listBuckets(client, _options) {
|
|
const [buckets, ,] = await client.getBuckets({
|
|
autoPaginate: false,
|
|
});
|
|
return { buckets: buckets.map((bucket) => bucket.name) };
|
|
}
|
|
export async function listFiles(client, options) {
|
|
const [, , metadata] = await client
|
|
.bucket(options['bucket'])
|
|
.getFiles({ prefix: options['prefix'], autoPaginate: false });
|
|
return { files: metadata.items };
|
|
}
|
|
export async function getFile(client, options) {
|
|
// Create a helper function to convert a ReadableStream to a string.
|
|
const streamToString = (stream) =>
|
|
new Promise((resolve, reject) => {
|
|
const chunks = [];
|
|
stream.on('data', (chunk) => chunks.push(chunk));
|
|
stream.on('error', reject);
|
|
stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
});
|
|
const data = client.bucket(options['bucket']).file(options['file']).createReadStream();
|
|
// Convert the ReadableStream to a string.
|
|
const bodyContents = await streamToString(data);
|
|
return Object.assign(Object.assign({}, data), { Body: bodyContents });
|
|
}
|
|
export async function uploadFile(client, options) {
|
|
// Get a reference to the bucket
|
|
const myBucket = client.bucket(options['bucket']);
|
|
// Create a reference to a file object
|
|
const file = myBucket.file(options['file']);
|
|
// Create a pass through stream from a string
|
|
const passthroughStream = new stream.PassThrough();
|
|
passthroughStream.end(Buffer.from(options['data'], options['encoding'] || 'utf8'));
|
|
passthroughStream.pipe(
|
|
file.createWriteStream({
|
|
metadata: { contentType: options['contentType'] },
|
|
})
|
|
);
|
|
return { success: true };
|
|
}
|
|
export async function signedUrlForGet(client, options) {
|
|
const defaultExpiry = Date.now() + 15 * 60 * 1000; // 15 mins
|
|
const expiresIn = options['expiresIn'] ? Date.now() + options['expiresIn'] * 1000 : defaultExpiry;
|
|
const [url] = await client.bucket(options['bucket']).file(options['file']).getSignedUrl({
|
|
version: 'v4',
|
|
action: 'read',
|
|
expires: expiresIn,
|
|
});
|
|
return { url };
|
|
}
|
|
export async function signedUrlForPut(client, options) {
|
|
const defaultExpiry = Date.now() + 15 * 60 * 1000; // 15 mins
|
|
const expiresIn = options['expiresIn'] ? Date.now() + options['expiresIn'] * 1000 : defaultExpiry;
|
|
const [url] = await client
|
|
.bucket(options['bucket'])
|
|
.file(options['file'])
|
|
.getSignedUrl(
|
|
Object.assign(
|
|
{ version: 'v4', action: 'write', expires: expiresIn },
|
|
options['contentType'] && { contentType: options['contentType'] }
|
|
)
|
|
);
|
|
return { url };
|
|
}
|