{"id":13672831,"url":"https://github.com/OpenMarshal/npm-WebDAV-Server","last_synced_at":"2025-04-28T03:33:07.967Z","repository":{"id":49462137,"uuid":"90717132","full_name":"OpenMarshal/npm-WebDAV-Server","owner":"OpenMarshal","description":"WebDAV Server for npm","archived":false,"fork":false,"pushed_at":"2023-12-03T16:16:05.000Z","size":1635,"stargazers_count":263,"open_issues_count":67,"forks_count":68,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-14T14:17:34.745Z","etag":null,"topics":["npm","server","webdav","webdav-server"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenMarshal.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-09T07:42:58.000Z","updated_at":"2025-04-04T14:47:51.000Z","dependencies_parsed_at":"2024-06-18T12:40:11.023Z","dependency_job_id":"354c7df9-be77-49cd-97a6-79250a7a3920","html_url":"https://github.com/OpenMarshal/npm-WebDAV-Server","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenMarshal%2Fnpm-WebDAV-Server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenMarshal%2Fnpm-WebDAV-Server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenMarshal%2Fnpm-WebDAV-Server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenMarshal%2Fnpm-WebDAV-Server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenMarshal","download_url":"https://codeload.github.com/OpenMarshal/npm-WebDAV-Server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251246394,"owners_count":21558762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["npm","server","webdav","webdav-server"],"created_at":"2024-08-02T09:01:50.588Z","updated_at":"2025-04-28T03:33:02.959Z","avatar_url":"https://github.com/OpenMarshal.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# WebDAV Server for npm\r\n\r\n[![Build Status](https://travis-ci.org/OpenMarshal/npm-WebDAV-Server.svg?branch=master)](https://travis-ci.org/OpenMarshal/npm-WebDAV-Server)\r\n[![Code Climate Rate](https://codeclimate.com/github/OpenMarshal/npm-WebDAV-Server/badges/gpa.svg)](https://codeclimate.com/github/OpenMarshal/npm-WebDAV-Server)\r\n[![Dependencies Status](https://img.shields.io/david/OpenMarshal/npm-WebDAV-Server.svg)](https://david-dm.org/OpenMarshal/npm-WebDAV-Server.svg)\r\n[![License](https://img.shields.io/npm/l/webdav-server.svg)](http://unlicense.org/)\r\n[![npm Version](https://img.shields.io/npm/v/webdav-server.svg)](https://www.npmjs.com/package/webdav-server)\r\n\r\n[![Join the chat at https://gitter.im/npm-WebDAV-Server/Lobby](https://badges.gitter.im/npm-WebDAV-Server/Lobby.svg)](https://gitter.im/npm-WebDAV-Server/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\r\n[![Join the chat at https://gitter.im/npm-WebDAV-Server/help-v2](https://img.shields.io/badge/chat-help%20v2-blue.svg)](https://gitter.im/npm-WebDAV-Server/help-v2?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\r\n[![Join the chat at https://gitter.im/npm-WebDAV-Server/help-v1](https://img.shields.io/badge/chat-help%20v1-blue.svg)](https://gitter.im/npm-WebDAV-Server/help-v1?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\r\n[![Join the chat at https://gitter.im/npm-WebDAV-Server/file-systems](https://img.shields.io/badge/chat-%40webdav--server-blue.svg)](https://gitter.im/npm-WebDAV-Server/file-systems?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\r\n\r\n# Description\r\n\r\nThis server can use physical resources (files and folders on a hard drive, for instance), virtual resources (in-memory files and folders), processed/computed resources (for instance a file which provide the content of a remote web page), customized resources (whatever you created, whatever you can imagine), and use all of them on the same server instance. And it's easy to integrate in your JavaScript code!\r\n\r\nYou can use it to provide human readable content, easily manageable thanks to the WebDAV clients, or use a temporary and virtual file system to share information between running programs, or store crypted documents while still being able to use them as if they were not crypted (take a look at [`cwdav`](https://www.npmjs.com/package/cwdav)), etc...\r\n\r\nThis is a fully configurable server. You can use you own user manager, your own resources, your own HTTP methods, your own way to save the state of the server, etc... Find more in the [documentation](https://github.com/OpenMarshal/npm-WebDAV-Server/wiki).\r\n\r\n# Project information\r\n\r\nHere are some project related links :\r\n* [Documentation](https://github.com/OpenMarshal/npm-WebDAV-Server/wiki)\r\n* [Project development details](https://github.com/OpenMarshal/npm-WebDAV-Server/projects)\r\n* [Changelog](https://github.com/OpenMarshal/npm-WebDAV-Server/blob/master/CHANGELOG.md)\r\n* [Examples](https://github.com/OpenMarshal/npm-WebDAV-Server/tree/master/examples)\r\n* [Issues](https://github.com/OpenMarshal/npm-WebDAV-Server/issues)\r\n* [GitHub](https://github.com/OpenMarshal/npm-WebDAV-Server)\r\n* [Gitter (chat)](https://gitter.im/npm-WebDAV-Server/Lobby)\r\n  * [Gitter for version 1](https://gitter.im/npm-WebDAV-Server/help-v1)\r\n  * [Gitter for version 2](https://gitter.im/npm-WebDAV-Server/help-v2)\r\n  * [Gitter for @webdav-server/...](https://gitter.im/npm-WebDAV-Server/file-systems)\r\n  \r\nYou can find a list of file systems here :\r\n* [Repositories on GitHub](https://github.com/OpenMarshal/npm-WebDAV-Server-Types/tree/master/repositories)\r\n* [Repositories on npm](https://www.npmjs.com/search?q=%40webdav-server)\r\n\r\nThis project rely upon the [RFC4918](http://www.webdav.org/specs/rfc4918.html).\r\n\r\nThis is an active project. Do not hesitate to post an issue if you have an idea or if you encounter a problem.\r\n\r\nThe project comes with two versions : the obselete version 1 and the version 2. Prefer using the version 2. At the moment, for compatibility issues, to access the version you must use the `v2` namespace.\r\n\r\n# Install\r\n\r\n```bash\r\nnpm install webdav-server\r\n```\r\n\r\n# Quick usage\r\n\r\nVery simple usage :\r\n\r\n```javascript\r\n// TypeScript\r\nimport { v2 as webdav } from 'webdav-server'\r\n// JavaScript\r\nconst webdav = require('webdav-server').v2;\r\n\r\nconst server = new webdav.WebDAVServer({\r\n    port: 1900\r\n});\r\n\r\nserver.start(() =\u003e console.log('READY'));\r\n```\r\n\r\nWith some logs :\r\n\r\n```javascript\r\n// TypeScript\r\nimport { v2 as webdav } from 'webdav-server'\r\n// JavaScript\r\nconst webdav = require('webdav-server').v2;\r\n\r\nconst server = new webdav.WebDAVServer({\r\n    port: 1900\r\n});\r\n\r\nserver.afterRequest((arg, next) =\u003e {\r\n    // Display the method, the URI, the returned status code and the returned message\r\n    console.log('\u003e\u003e', arg.request.method, arg.requested.uri, '\u003e', arg.response.statusCode, arg.response.statusMessage);\r\n    // If available, display the body of the response\r\n    console.log(arg.responseBody);\r\n    next();\r\n});\r\n\r\nserver.start(() =\u003e console.log('READY'));\r\n```\r\n\r\nWith a user manager, privilege manager and serialization (save/load the state of the server) :\r\n\r\n```javascript\r\n// TypeScript\r\nimport { v2 as webdav } from 'webdav-server'\r\n// JavaScript\r\nconst webdav = require('webdav-server').v2;\r\n\r\n// User manager (tells who are the users)\r\nconst userManager = new webdav.SimpleUserManager();\r\nconst user = userManager.addUser('username', 'password', false);\r\n\r\n// Privilege manager (tells which users can access which files/folders)\r\nconst privilegeManager = new webdav.SimplePathPrivilegeManager();\r\nprivilegeManager.setRights(user, '/', [ 'all' ]);\r\n\r\nconst server = new webdav.WebDAVServer({\r\n    // HTTP Digest authentication with the realm 'Default realm'\r\n    httpAuthentication: new webdav.HTTPDigestAuthentication(userManager, 'Default realm'),\r\n    privilegeManager: privilegeManager,\r\n    port: 2000, // Load the server on the port 2000 (if not specified, default is 1900)\r\n    autoSave: { // Will automatically save the changes in the 'data.json' file\r\n        treeFilePath: 'data.json'\r\n    }\r\n});\r\n\r\n// Try to load the 'data.json' file\r\nserver.autoLoad((e) =\u003e {\r\n    if(e)\r\n    { // Couldn't load the 'data.json' (file is not accessible or it has invalid content)\r\n        server.rootFileSystem().addSubTree(server.createExternalContext(), {\r\n            'folder1': {                                // /folder1\r\n                'file1.txt': webdav.ResourceType.File,  // /folder1/file1.txt\r\n                'file2.txt': webdav.ResourceType.File   // /folder1/file2.txt\r\n            },\r\n            'file0.txt': webdav.ResourceType.File       // /file0.txt\r\n        })\r\n    }\r\n    \r\n    server.start(() =\u003e console.log('READY'));\r\n})\r\n```\r\n\r\nWithin `Express` :\r\n\r\n```javascript\r\n// TypeScript\r\nimport { v2 as webdav } from 'webdav-server'\r\nimport * as express from 'express'\r\n// JavaScript\r\nconst webdav = require('webdav-server').v2;\r\nconst express = require('express');\r\n\r\nconst server = new webdav.WebDAVServer();\r\nconst app = express();\r\n\r\n// Mount the WebDAVServer instance\r\napp.use(webdav.extensions.express('/my/sub/path', server));\r\napp.listen(1901); // Start the Express server\r\n```\r\n\r\nMore examples at the [example page of the wiki](https://github.com/OpenMarshal/npm-WebDAV-Server/wiki/Examples-%5Bv2%5D).\r\n\r\nMore information/possibilities in the [documentation](https://github.com/OpenMarshal/npm-WebDAV-Server/wiki).\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpenMarshal%2Fnpm-WebDAV-Server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOpenMarshal%2Fnpm-WebDAV-Server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpenMarshal%2Fnpm-WebDAV-Server/lists"}