peer-cdn
![license](https://img.shields.io/github/license/vardius/peer-cdn.svg)
Lightweight library providing peer to peer CDN functionality
📖 ABOUT
Contributors:
Want to contribute ? Feel free to send pull requests!
Have problems, bugs, feature ideas?
We are using the github issue tracker to manage them.
📚 Documentation
For documentation (including examples), visit rafallorenz.com/peer-cdn
🚏 HOW TO USE
Installation
$ npm install peer-cdn
Basic example
main.js
"use strict";
import { PeerPlugin } from "peer-cdn";
if ("serviceWorker" in navigator) {
const peerPlugin = new PeerPlugin({
cacheName: CachePlugin.peerFetch + 1,
timeoutAfter: 3000,
servers: {
iceServers: [
{
url: "stun:74.125.142.127:19302",
},
],
},
constraints: {
ordered: true,
},
});
navigator.serviceWorker.addEventListener("message", function (event) {
const request = new Request(event.data.url);
const middleware = peerPlugin.getMiddleware({ request });
middleware
.get()
.then(function (response) {
event.ports[0].postMessage(response);
})
.catch(function (error) {
event.ports[0].postMessage(null);
});
});
navigator.serviceWorker
.register("sw.js")
.then(function (registration) {
console.log(
"ServiceWorker registration successful with scope: ",
registration.scope
);
})
.catch(function (error) {
console.error("Service Worker Error", error);
});
}
sw.js
self.importScripts("https://github.com/vardius/peer-cdn/blob/v1.0.5-beta/dist/index.js");
const { CachePlugin, DelegatePlugin, NetworkPlugin, strategies: { ordered }} = PeerCDN;
const cachePlugin = new CachePlugin({ version: 1 });
const delegatePlugin = new DelegatePlugin({ timeoutAfter: 5000 });
const networkPlugin = new NetworkPlugin();
const cdn = new PeerCDN();
cdn.GET("/css/main.css", ordered,
cachePlugin.getMiddleware,
delegatePlugin.getMiddleware,
networkPlugin.getMiddleware
);
cdn.register();
This package is released under the MIT license. See the complete license in the package