npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

webdav-tulip

v1.0.1

Published

WebDAV client for NodeJS

Downloads

5

Readme

WebDAV client

A WebDAV client written in JavaScript for NodeJS.

Build Status

NPM NPM

About

This client was branched from webdav-fs as the core functionality deserved its own repository. As webdav-fs' API was designed to resemble NodeJS' fs API, little could be done to improve the adapter interface for regular use.

This WebDAV client library is designed to provide an improved API for low-level WebDAV integration. This client uses window.fetch when available in the browser.

Usage

Usage is very simple (API) - the main exported object is a factory to create adapter instances:

var createClient = require("webdav");

var client = createClient(
    "https://webdav-server.org/remote.php/webdav",
    "username",
    "password"
);

client
    .getDirectoryContents("/")
    .then(function(contents) {
        console.log(JSON.stringify(contents, undefined, 4));
    });

Each method returns a Promise.

Adapter methods

These methods can be called on the object returned from the main factory.

createDirectory(remotePath [, options])

Create a new directory at the remote path.

createReadStream(remotePath [, options])

Creates a readable stream on the remote path.

Returns a readable stream instance.

createWriteStream(remotePath [, options])

Creates a writeable stream to a remote path.

Returns a writeable stream instance.

deleteFile(remotePath [, options])

Delete a file or directory at remotePath.

getDirectoryContents(remotePath [, options])

Get an array of items within a directory. remotePath is a string that begins with a forward-slash and indicates the remote directory to get the contents of.

client
    .getDirectoryContents("/MyFolder")
    .then(function(contents) {
        console.log(JSON.stringify(contents, undefined, 2));
    });

The returned value is a Promise, which resolves with an array of item stat objects.

getFileContents(remotePath [, options])

Get the contents of the file at remotePath as a Buffer or String. format can either be "binary" or "text", where "binary" is default.

var fs = require("fs");

client
    .getFileContents("/folder/myImage.jpg")
    .then(function(imageData) {
        fs.writeFileSync("./myImage.jpg", imageData);
    });

Or with text:

client
    .getFileContents("/doc.txt", "text")
    .then(function(text) {
        console.log(text);
    });

getFileStream(remotePath [, options])

Get a readable stream on a remote file. Returns a Promise that resolves with a readable stream instance.

This is the underlying method to createReadStream (uses a PassThrough stream to delay the data). Due to the requirement of waiting on the request to complete before being able to get the true read stream, a Promise is returned that resolves when it becomes available. createReadStream simply creates and returns a PassThrough stream immediately and writes to it once this method resolves.

var fs = require("fs");

client
    .getFileStream("/test/image.png")
    .then(function(imageStream) {
        imageStream.pipe(fs.createWriteStream("./image.png"));
    });

options is an object that may look like the following:

{
    "headers": {}
}
options.range

Optionally request part of the remote file by specifying the start and end byte positions. The end byte position is optional and the rest of the file from start onwards will be streamed.

var stream = client.getFileStream("/test/image.png", {
    range: { start: 0, end: 499 } // first 500 bytes
});

getQuota([options])

Get quota information. Returns null upon failure or an object like so:

{
    "used": "12842",
    "available": "512482001"
}

Both values are provided in bytes in string form. available may also be one of the following:

  • unknown: The available space is unknown or not yet calculated
  • unlimited: The space available is not limited by quotas

moveFile(remotePath, targetPath [, options])

Move a file or directory from remotePath to targetPath.

// Move a directory
client.moveFile("/some-dir", "/storage/moved-dir");

// Rename a file
client.moveFile("/images/pic.jpg", "/images/profile.jpg");

putFileContents(remotePath, data [, options])

Put some data in a remote file at remotePath from a Buffer or String. data is a Buffer or a String. options has a property called format which can be "binary" (default) or "text".

var fs = require("fs");

var imageData = fs.readFileSync("someImage.jpg");

client.putFileContents("/folder/myImage.jpg", imageData, { format: "binary" });
client.putFileContents("/example.txt", "some text", { format: "text" });

options, which is optional, can be set to an object like the following:

{
    "format": "binary",
    "headers": {
        "Content-Type": "application/octet-stream"
    },
    "overwrite": true
}

options.overwrite (default: true), if set to false, will add an additional header which tells the server to abort writing if the target already exists.

stat(remotePath [, options])

Get the stat properties of a remote file or directory at remotePath. Resolved object is a item stat object.

Overriding the built-in fetch function

Under the hood, webdav-client uses node-fetch to perform requests. This can be overridden by running the following:

// For example, use the `fetch` method in the browser:
const createWebDAVClient = require("webdav");
createWebDAVClient.setFetchMethod(window.fetch);

Returned data structures

Item stat

Item stats are objects with properties that descibe a file or directory. They resemble the following:

{
    "filename": "/test",
    "basename": "test",
    "lastmod": "Tue, 05 Apr 2016 14:39:18 GMT",
    "size": 0,
    "type": "directory"
}

or:

{
    "filename": "/image.jpg",
    "basename": "image.jpg",
    "lastmod": "Sun, 13 Mar 2016 04:23:32 GMT",
    "size": 42497,
    "type": "file",
    "mime": "image/jpeg"
}

Properties:

| Property name | Type | Present | Description | |---------------|---------|--------------|---------------------------------------------| | filename | String | Always | File path of the remote item | | basename | String | Always | Base filename of the remote item, no path | | lastmod | String | Always | Last modification date of the item | | size | Number | Always | File size - 0 for directories | | type | String | Always | Item type - "file" or "directory" | | mime | String | Files only | Mime type - for file items only |