Skip to content

Drive ​

Drive is a service responsible for handle files, it is used by other services to store and retrieve files. It provides a simple API to upload, download and delete files. It also provides a way to generate signed URLs for secure access to files.

ts
import { drive } from '@sidekick-coder/zenith-kit/server';

console.log(drive.selected);

By default the current drive will be the one selected by the user

Drive entry ​

Drive entry is an object that represents a file or a folder in the drive. It has the following properties:

ts
class DriveEntry {
    public name: string
    public path: string
    public type: 'file' | 'directory'
    public metas: Record<string, any> = {}
}

List entries ​

The simple way to use the Drive service is to create an instance of it by passing the name of the drive you want to use. For example, if you have a drive named my-drive, you can create an instance of it like this:

ts
const files = await drive.list('my-folder') // DriveEntry[]

Check if a entry exists ​

To check if a entry exists in the drive, you can use the exists method.

ts
const fileExists = await drive.exists('my-folder/my-file.txt');

Get entry information ​

To get information about a file, you can use the find method.

ts
const fileInfo = await drive.find('my-folder/my-file.txt'); // DriveEntry | null

Read entry content ​

To read the content of a file, you can use the read method.

There is also some variations of the read method that you can use too

ts
const data = await drive.read('my-folder/my-file.txt'); // Uint8Array
const text = await drive.readText('my-folder/my-file.txt'); // string 
const stream = await drive.readStream('my-folder/my-file.txt'); // ReadableStream

Write entry content ​

To write content to a file, you can use the write method. This method accepts a path and a content

ts
// text
await drive.write('my-folder/my-file.txt', 'Hello, world!');

// json 
await drive.write('my-folder/my-file.json', { message: 'Hello, world!' });

// binary data
const data = new Uint8Array([72, 101, 108, 108, 111]);

await drive.write('my-folder/my-file.bin', data);

// stream
await drive.writeStream('my-folder/my-file.txt', stream);

Delete entry ​

To delete a file or a folder, you can use the delete method.

ts
await drive.delete('my-folder/my-file.txt');

Upload entry ​

To upload a file, you can use the upload method. This method accepts a path to a local file and the target path in the drive where you want to upload it.

ts
const localFilePath = '/path/to/local/file.txt';
const targetPath = 'my-folder/file.txt';

await drive.upload(localFilePath, targetPath);

Download entry ​

To download a file, you can use the download method. This method accepts the path of the file in the drive and the local path where you want to save it.

ts
const filePathInDrive = 'my-folder/file.txt';
const localTargetPath = '/path/to/local/file.txt';

await drive.download(filePathInDrive, localTargetPath);

Entry URL ​

To generate a URL for a file to read or download, you can use the url method.

ts
await drive.url('file.txt');
await drive.url('file.txt', { expires: '1h' }); // valid for 1 hour

Entry upload URL ​

To generate a URL for uploading a file, you can use the uploadUrl method.

ts
await drive.uploadUrl('my-folder/file.txt');
await drive.uploadUrl('my-folder/file.txt', { expires: '1h' }); // valid for 1 hour

List available drives ​

To list all the available drives, you can use the list method of the drive service. This will return an array of drive names that are available for use.

ts
import { drive } from '@sidekick-coder/zenith-kit/server';

const availableDrives = await drive.list();

console.log(availableDrives);

Use specific drive ​

If the user has many drives available, you can use the use method to switch between them.

ts
import { drive } from '@sidekick-coder/zenith-kit/server';

const anotherDrive = drive.use('another-drive');