https://github.com/131/castor
Content addressable storage for nodejs
https://github.com/131/castor
Last synced: 5 months ago
JSON representation
Content addressable storage for nodejs
- Host: GitHub
- URL: https://github.com/131/castor
- Owner: 131
- License: mit
- Created: 2018-11-13T09:08:53.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-05-02T10:39:49.000Z (about 2 years ago)
- Last Synced: 2025-02-09T00:09:31.138Z (over 1 year ago)
- Language: JavaScript
- Size: 87.9 KB
- Stars: 1
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Content addressable storage - castor
An ES7 [CAS designed](https://en.wikipedia.org/wiki/Content-addressable_storage) file storage for nodejs with a simple API and robust implementation.

[](https://github.com/131/castor/actions/workflows/test.yml)
[](https://coveralls.io/github/131/castor?branch=master)
[](https://www.npmjs.com/package/castor)
[](http://opensource.org/licenses/MIT)
[](https://www.npmjs.com/package/eslint-plugin-ivs)
# API
```
const Storage = require('castor');
// castor internal index file path
var store = new Storage('./some/path/index.json');
// return an *index* to write and fetch file into
var index = store.getIndex('medias');
```
## async Index.checkEntry(file_name, file_url, file_md5)
```
// download, if needed, the requested file, store it in CAS and reference it into current index
// file_url can be an url.parse'd object
await index.checkEntry("some/storage/path/file.mp4", "http://remoteurl.com/20320930293", "[CURRENT_MD5]");
```
## Index.get(file_name)
```
// retrieve a file information from current index
index.get("some/storage/path/file.mp4")
/* retrieve {
file_size : (an integer),
file_path : './some/path/00/1/[FULL_MD5]',
file_md5 : '[FULL_MD5]',
}
*/
```
## Index.send(req, res, next)
```
// expose an http/express middleware to delivers content from an existing path
server.use(index.send.bind(index)) // (req, res, next)
```
# Advanced usage
## Storage.warmup
```
// move all existing (and non indexed files) files to CAS design
await store.warmup();
```
## Index.reset()
```
//reset a local index file_path => hash mapping (no files are deleted at this time)
index.reset();
```
## async Storage.purge()
```
//remove all unlinked file (files not referenced in any index) from storage folder
await storage.purge();
```
# References
* [Content-addressable storage](https://en.wikipedia.org/wiki/Content-addressable_storage)
# Credits
* [idjem](https://github.com/idjem)
* [131](https://github.com/131)
* [beaver](https://fr.wikipedia.org/wiki/Castor_(genre)) drawing by [Lincung Studio](https://www.youtube.com/channel/UCeGDCpWeOQnP8S9l7jrWgWw)