# JavaScript SDK

### List buckets

```typescript
await s3.listBuckets().promise();
```

### List objects

#### List objects in root folder

```typescript
await s3.listObjectsV2({
    Bucket: 'BUCKET',
    Delimeter: '/',
}).promise();
```

#### List objects in the folder

```typescript
await s3.listObjectsV2({
    Bucket: 'BUCKET',
    Delimeter: '/',
    Prefix: 'my-folder'
}).promise();
```

### Get files metadata

```typescript
const result = await s3.headObject({
    Bucket: 'BUCKET',
    Key: 'folder/file-name.txt',
}).promise();

/*
{
    Metadata: {key: 'value'},
    ContentLength: 123,
    ETag: '...',
    ...
}
*/
```

### Edit objects metadata

Note that you can not change values of these metadatas: `file-hash`, `storage`,`location`. When you set `MetadataDirective: 'REPLACE'` any existing metadatas will be overridden. So if you want to edit only some of metadatas then include existing metadatas too.

```typescript
await s3.copyObject({
  Bucket: 'BUCKET',
  Key: 'file.txt',
  CopySource: 'BUCKET/file.txt',
  Metadata: {
    'key': 'value',
    'key2': 'value2'
  },
  MetadataDirective: 'REPLACE'
}).promise()
```

### Make object private or public

```typescript
await s3.putObjectAcl({
  Bucket: 'BUCKET',
  Key: 'folder/file-name.txt',
  ACL: 'public-read',
}).promise()

await s3.putObjectAcl({
  Bucket: 'BUCKET',
  Key: 'folder/file-name.txt',
  ACL: 'private'
}).promise()
```

### Delete an object

```typescript
await s3.deleteObject({
  Bucket: 'BUCKET',
  Key: 'folder/file-name.txt',
}).promise();
```
