do-spaces

package for simple managing Digital Ocean spaces written in Typescript

Usage no npm install needed!

<script type="module">
  import doSpaces from 'https://cdn.skypack.dev/do-spaces';
</script>

README

do-spaces

package for simple managing Digital Ocean spaces written in Typescript

Motivation

I've created this package to ease working with spaces. Be more expressive then aws-sdk. And to solve "quirks" aws-sdk have (like uploading with mime-types, delete whole folder...)

Install

npm i do-spaces

Usage

// commonJS
const Spaces = require('do-spaces').default;
// ES6 modules
import Spaces from 'do-spaces';

const spaces = new Spaces({
  endpoint: `<endpoint>`, // under settings of bucket in digital ocean
  accessKey: `<access_key>`, // in GLOBAL settings of digital ocean
  secret: `<secret>`, // in GLOBAL settings of digital ocean
  bucket: `<name_of_the_bucket>`,
});

Methods

  • every method takes optional awsParams to enhance/replace it's default configuration for underlying method. Configuration docs can be found here
  • path - string, path folder like (ending with /)
  • pathname -- string, full path to file (e.g /test/image.png)
  • all methods returns Promise
const spaces = new Spaces({
    endpoint: `<endpoint>`, // under settings of bucket in digital ocean
    accessKey: `<access_key>`, // in GLOBAL settings of digital ocean
    secret: `<secret>`, // in GLOBAL settings of digital ocean
    bucket: `<name_of_the_bucket>`,
});

// ....

// `s3.putObject`
await spaces.createFolder({
    path: `/some/test/path/`,
    awsParams // optional - `s3.putObject`
});

// ....

// recursively removes all files in specified folder
await spaces.deleteFolder({
  path: `/some/test/path/`,
  awsListParams, //optional - used to list items before deleting - `s3.listObjects`
  awsDeleteParams, // optional - used to delete `s3.deleteObjects`
});

// folders are automatically created, no need to createthem beforehand
// automatically determines mime-type
await spaces.uploadFile({
    pathname: `/some/test/path/myfile.txt`,
    privacy: "public-read", // 'private' | 'public-read' (DO supports only those)
    file,// Blob, string...
    awsParams  // optional - `s3.putObject`
});

await spaces.downloadFile({
    pathname: "/some/test/path/myfile.txt", // or link https://<bucket>.<endpoint>/path/to/file
    awsParams // optional -  `s3.getObject`
});

// if there are more then 1000 files you will recieve in response `nextMarker`,
// to continue with listing
await spaces.listFiles({
    maxFiles = 1000, // optional - default is 1000 (max allowed in DO/AWS)
    path: `/some/test/path/` ,
    nextMarker, // optional - from which path it should start listing (supplied)
    awsParams, // optional - `s3.getObjects`
});

await spaces.copyFile({
    pathname: "/test/newFile.txt",
    copiedPathname: "/test/copied.txt",
    privacy: "public-read", // 'private' | 'public-read'
    fromBucket, // optional - differnt bucket name if copied from elsewhere
    awsParams, // optional -`s3.copyObject`
});

await spaces.deleteFile({
    pathname: "/test/remove_me.txt",
    awsParams // optional `s3.deleteObject`
});