This repository was archived by the owner on Jun 3, 2022. It is now read-only.

Repository files navigation

MaintainabilityCoverageKnown Vulnerabilities

Espresso is a highly-opionionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Installation

At the moment, to install, clone this repository. However, it's not recommended to use this in a production release at the moment as this is alpha software.

Features

  • Uses RxJS and Observers to signal changes in:
    • Incoming and outgoing traffic
    • Changes to routing
    • More to be added as development progresses.
  • Core
    • JSON and XML parsed and processed by default
  • Routing
    • GET, POST or ANY
    • Route formats (expect JSON, XML, etc)
    • Named route parameters (/path/{param1}/{param2}/)
    • Route parameter requirements (i.e. formats)
  • Modules
    • Lifecycle - run at different stages (connection,auth,response,post-response) - no more iterative junk.
    • Integrated module runtime - EspressoServer determines what runs when.
    • Global error handler - No more "last in the queue", EspressoServer handles all errors globally.
    • Append-only - Modules only append the ingoing or outgoing response, and EspressoServer determines when to send the message, not the module, ensuring message is always sent and junk modules don't break the stack.

Use

To create a single Espresso instance, it's as simple as:

constespresso=require("espresso"),EspressoServer=espresso.EspressoServer;constmy_functionality=require("./../my_stuff");// Starts the servervar_server=newEspressoServer({port: 3000});// Set up modules (will be executed on every incoming request)_server.modules([module_1,module_2,
...
]);// Set up routing.var_routes=[{path: "/{param1}/{param2}",method: "any",format: "json",path_requirements: {"param1": {"pattern": /(rick|morty|schwifty)/},"param2": {"pattern": /[A-Za-z0-9]/}}handler: my_functionality.do_stuff}];// Tell the server what routes to use._server.routes(_routes);// Start the server._server.start();

Example of a module:

constEspressoServerModule=require("espresso").EspressoServerModule;module.exports=newEspressoServerModule("Tst","beforeResponse",(request)=>{returnrequest.set({contentType: "application/json",statusCode: 200,headers: {"x-super-schwift": "morty"},content: {"a" :"b","c" : "rick"}});

Design

Espresso is designed to take all of the configuration out, and to provide you with a well-formed, easy-to-deploy HTTP server, and separates out server-wide functionality (i.e. Authentication, body parsing, etc) from server-specific functionality (i.e. Your routes, etc).

Core functionality

Espresso provides default functionality which can be configured, but which, generally, you just want to leave alone and let run. This is defined as classes that run at runtime which the server chooses to load based upon the incoming or outgoing message type.

Core functionality for both incoming and outgoing includes:

  • Formats/MIME Type parsing
    • JSON
    • XML
    • Others not yet supported
  • Authentication
  • Security (CORS, Origin, etc)
  • Timeouts
  • More to be added here as development progresses

This functionality will be provided as separate packages, however, this functionality sits differently within Espresso.

Modules

Modules are additional functionality within Espresso to extend what espresso does when it receives or sends a response to the end-user. They are termed modules, because they extend the functionality of Espresso, but are not used to provide basic functionality (like parsing incoming data, etc).

About

Espresso is a highly-opinionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Jun 3, 2022. It is now read-only.

Repository files navigation

MaintainabilityCoverageKnown Vulnerabilities

Espresso is a highly-opionionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Installation

At the moment, to install, clone this repository. However, it's not recommended to use this in a production release at the moment as this is alpha software.

Features

  • Uses RxJS and Observers to signal changes in:
    • Incoming and outgoing traffic
    • Changes to routing
    • More to be added as development progresses.
  • Core
    • JSON and XML parsed and processed by default
  • Routing
    • GET, POST or ANY
    • Route formats (expect JSON, XML, etc)
    • Named route parameters (/path/{param1}/{param2}/)
    • Route parameter requirements (i.e. formats)
  • Modules
    • Lifecycle - run at different stages (connection,auth,response,post-response) - no more iterative junk.
    • Integrated module runtime - EspressoServer determines what runs when.
    • Global error handler - No more "last in the queue", EspressoServer handles all errors globally.
    • Append-only - Modules only append the ingoing or outgoing response, and EspressoServer determines when to send the message, not the module, ensuring message is always sent and junk modules don't break the stack.

Use

To create a single Espresso instance, it's as simple as:

constespresso=require("espresso"),EspressoServer=espresso.EspressoServer;constmy_functionality=require("./../my_stuff");// Starts the servervar_server=newEspressoServer({port: 3000});// Set up modules (will be executed on every incoming request)_server.modules([module_1,module_2,
...
]);// Set up routing.var_routes=[{path: "/{param1}/{param2}",method: "any",format: "json",path_requirements: {"param1": {"pattern": /(rick|morty|schwifty)/},"param2": {"pattern": /[A-Za-z0-9]/}}handler: my_functionality.do_stuff}];// Tell the server what routes to use._server.routes(_routes);// Start the server._server.start();

Example of a module:

constEspressoServerModule=require("espresso").EspressoServerModule;module.exports=newEspressoServerModule("Tst","beforeResponse",(request)=>{returnrequest.set({contentType: "application/json",statusCode: 200,headers: {"x-super-schwift": "morty"},content: {"a" :"b","c" : "rick"}});

Design

Espresso is designed to take all of the configuration out, and to provide you with a well-formed, easy-to-deploy HTTP server, and separates out server-wide functionality (i.e. Authentication, body parsing, etc) from server-specific functionality (i.e. Your routes, etc).

Core functionality

Espresso provides default functionality which can be configured, but which, generally, you just want to leave alone and let run. This is defined as classes that run at runtime which the server chooses to load based upon the incoming or outgoing message type.

Core functionality for both incoming and outgoing includes:

  • Formats/MIME Type parsing
    • JSON
    • XML
    • Others not yet supported
  • Authentication
  • Security (CORS, Origin, etc)
  • Timeouts
  • More to be added here as development progresses

This functionality will be provided as separate packages, however, this functionality sits differently within Espresso.

Modules

Modules are additional functionality within Espresso to extend what espresso does when it receives or sends a response to the end-user. They are termed modules, because they extend the functionality of Espresso, but are not used to provide basic functionality (like parsing incoming data, etc).

About

Espresso is a highly-opinionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jun 3, 2022. It is now read-only.

Repository files navigation

MaintainabilityCoverageKnown Vulnerabilities

Espresso is a highly-opionionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Installation

At the moment, to install, clone this repository. However, it's not recommended to use this in a production release at the moment as this is alpha software.

Features

  • Uses RxJS and Observers to signal changes in:
    • Incoming and outgoing traffic
    • Changes to routing
    • More to be added as development progresses.
  • Core
    • JSON and XML parsed and processed by default
  • Routing
    • GET, POST or ANY
    • Route formats (expect JSON, XML, etc)
    • Named route parameters (/path/{param1}/{param2}/)
    • Route parameter requirements (i.e. formats)
  • Modules
    • Lifecycle - run at different stages (connection,auth,response,post-response) - no more iterative junk.
    • Integrated module runtime - EspressoServer determines what runs when.
    • Global error handler - No more "last in the queue", EspressoServer handles all errors globally.
    • Append-only - Modules only append the ingoing or outgoing response, and EspressoServer determines when to send the message, not the module, ensuring message is always sent and junk modules don't break the stack.

Use

To create a single Espresso instance, it's as simple as:

constespresso=require("espresso"),EspressoServer=espresso.EspressoServer;constmy_functionality=require("./../my_stuff");// Starts the servervar_server=newEspressoServer({port: 3000});// Set up modules (will be executed on every incoming request)_server.modules([module_1,module_2,
...
]);// Set up routing.var_routes=[{path: "/{param1}/{param2}",method: "any",format: "json",path_requirements: {"param1": {"pattern": /(rick|morty|schwifty)/},"param2": {"pattern": /[A-Za-z0-9]/}}handler: my_functionality.do_stuff}];// Tell the server what routes to use._server.routes(_routes);// Start the server._server.start();

Example of a module:

constEspressoServerModule=require("espresso").EspressoServerModule;module.exports=newEspressoServerModule("Tst","beforeResponse",(request)=>{returnrequest.set({contentType: "application/json",statusCode: 200,headers: {"x-super-schwift": "morty"},content: {"a" :"b","c" : "rick"}});

Design

Espresso is designed to take all of the configuration out, and to provide you with a well-formed, easy-to-deploy HTTP server, and separates out server-wide functionality (i.e. Authentication, body parsing, etc) from server-specific functionality (i.e. Your routes, etc).

Core functionality

Espresso provides default functionality which can be configured, but which, generally, you just want to leave alone and let run. This is defined as classes that run at runtime which the server chooses to load based upon the incoming or outgoing message type.

Core functionality for both incoming and outgoing includes:

  • Formats/MIME Type parsing
    • JSON
    • XML
    • Others not yet supported
  • Authentication
  • Security (CORS, Origin, etc)
  • Timeouts
  • More to be added here as development progresses

This functionality will be provided as separate packages, however, this functionality sits differently within Espresso.

Modules

Modules are additional functionality within Espresso to extend what espresso does when it receives or sends a response to the end-user. They are termed modules, because they extend the functionality of Espresso, but are not used to provide basic functionality (like parsing incoming data, etc).

About

Espresso is a highly-opinionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jun 3, 2022. It is now read-only.

Repository files navigation

MaintainabilityCoverageKnown Vulnerabilities

Espresso is a highly-opionionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Installation

At the moment, to install, clone this repository. However, it's not recommended to use this in a production release at the moment as this is alpha software.

Features

  • Uses RxJS and Observers to signal changes in:
    • Incoming and outgoing traffic
    • Changes to routing
    • More to be added as development progresses.
  • Core
    • JSON and XML parsed and processed by default
  • Routing
    • GET, POST or ANY
    • Route formats (expect JSON, XML, etc)
    • Named route parameters (/path/{param1}/{param2}/)
    • Route parameter requirements (i.e. formats)
  • Modules
    • Lifecycle - run at different stages (connection,auth,response,post-response) - no more iterative junk.
    • Integrated module runtime - EspressoServer determines what runs when.
    • Global error handler - No more "last in the queue", EspressoServer handles all errors globally.
    • Append-only - Modules only append the ingoing or outgoing response, and EspressoServer determines when to send the message, not the module, ensuring message is always sent and junk modules don't break the stack.

Use

To create a single Espresso instance, it's as simple as:

constespresso=require("espresso"),EspressoServer=espresso.EspressoServer;constmy_functionality=require("./../my_stuff");// Starts the servervar_server=newEspressoServer({port: 3000});// Set up modules (will be executed on every incoming request)_server.modules([module_1,module_2,
...
]);// Set up routing.var_routes=[{path: "/{param1}/{param2}",method: "any",format: "json",path_requirements: {"param1": {"pattern": /(rick|morty|schwifty)/},"param2": {"pattern": /[A-Za-z0-9]/}}handler: my_functionality.do_stuff}];// Tell the server what routes to use._server.routes(_routes);// Start the server._server.start();

Example of a module:

constEspressoServerModule=require("espresso").EspressoServerModule;module.exports=newEspressoServerModule("Tst","beforeResponse",(request)=>{returnrequest.set({contentType: "application/json",statusCode: 200,headers: {"x-super-schwift": "morty"},content: {"a" :"b","c" : "rick"}});

Design

Espresso is designed to take all of the configuration out, and to provide you with a well-formed, easy-to-deploy HTTP server, and separates out server-wide functionality (i.e. Authentication, body parsing, etc) from server-specific functionality (i.e. Your routes, etc).

Core functionality

Espresso provides default functionality which can be configured, but which, generally, you just want to leave alone and let run. This is defined as classes that run at runtime which the server chooses to load based upon the incoming or outgoing message type.

Core functionality for both incoming and outgoing includes:

  • Formats/MIME Type parsing
    • JSON
    • XML
    • Others not yet supported
  • Authentication
  • Security (CORS, Origin, etc)
  • Timeouts
  • More to be added here as development progresses

This functionality will be provided as separate packages, however, this functionality sits differently within Espresso.

Modules

Modules are additional functionality within Espresso to extend what espresso does when it receives or sends a response to the end-user. They are termed modules, because they extend the functionality of Espresso, but are not used to provide basic functionality (like parsing incoming data, etc).

About

Espresso is a highly-opinionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Jun 3, 2022. It is now read-only.

Repository files navigation

MaintainabilityCoverageKnown Vulnerabilities

Espresso is a highly-opionionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Installation

At the moment, to install, clone this repository. However, it's not recommended to use this in a production release at the moment as this is alpha software.

Features

  • Uses RxJS and Observers to signal changes in:
    • Incoming and outgoing traffic
    • Changes to routing
    • More to be added as development progresses.
  • Core
    • JSON and XML parsed and processed by default
  • Routing
    • GET, POST or ANY
    • Route formats (expect JSON, XML, etc)
    • Named route parameters (/path/{param1}/{param2}/)
    • Route parameter requirements (i.e. formats)
  • Modules
    • Lifecycle - run at different stages (connection,auth,response,post-response) - no more iterative junk.
    • Integrated module runtime - EspressoServer determines what runs when.
    • Global error handler - No more "last in the queue", EspressoServer handles all errors globally.
    • Append-only - Modules only append the ingoing or outgoing response, and EspressoServer determines when to send the message, not the module, ensuring message is always sent and junk modules don't break the stack.

Use

To create a single Espresso instance, it's as simple as:

constespresso=require("espresso"),EspressoServer=espresso.EspressoServer;constmy_functionality=require("./../my_stuff");// Starts the servervar_server=newEspressoServer({port: 3000});// Set up modules (will be executed on every incoming request)_server.modules([module_1,module_2,
...
]);// Set up routing.var_routes=[{path: "/{param1}/{param2}",method: "any",format: "json",path_requirements: {"param1": {"pattern": /(rick|morty|schwifty)/},"param2": {"pattern": /[A-Za-z0-9]/}}handler: my_functionality.do_stuff}];// Tell the server what routes to use._server.routes(_routes);// Start the server._server.start();

Example of a module:

constEspressoServerModule=require("espresso").EspressoServerModule;module.exports=newEspressoServerModule("Tst","beforeResponse",(request)=>{returnrequest.set({contentType: "application/json",statusCode: 200,headers: {"x-super-schwift": "morty"},content: {"a" :"b","c" : "rick"}});

Design

Espresso is designed to take all of the configuration out, and to provide you with a well-formed, easy-to-deploy HTTP server, and separates out server-wide functionality (i.e. Authentication, body parsing, etc) from server-specific functionality (i.e. Your routes, etc).

Core functionality

Espresso provides default functionality which can be configured, but which, generally, you just want to leave alone and let run. This is defined as classes that run at runtime which the server chooses to load based upon the incoming or outgoing message type.

Core functionality for both incoming and outgoing includes:

  • Formats/MIME Type parsing
    • JSON
    • XML
    • Others not yet supported
  • Authentication
  • Security (CORS, Origin, etc)
  • Timeouts
  • More to be added here as development progresses

This functionality will be provided as separate packages, however, this functionality sits differently within Espresso.

Modules

Modules are additional functionality within Espresso to extend what espresso does when it receives or sends a response to the end-user. They are termed modules, because they extend the functionality of Espresso, but are not used to provide basic functionality (like parsing incoming data, etc).

About

Espresso is a highly-opinionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jun 3, 2022. It is now read-only.

Repository files navigation

MaintainabilityCoverageKnown Vulnerabilities

Espresso is a highly-opionionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Installation

At the moment, to install, clone this repository. However, it's not recommended to use this in a production release at the moment as this is alpha software.

Features

  • Uses RxJS and Observers to signal changes in:
    • Incoming and outgoing traffic
    • Changes to routing
    • More to be added as development progresses.
  • Core
    • JSON and XML parsed and processed by default
  • Routing
    • GET, POST or ANY
    • Route formats (expect JSON, XML, etc)
    • Named route parameters (/path/{param1}/{param2}/)
    • Route parameter requirements (i.e. formats)
  • Modules
    • Lifecycle - run at different stages (connection,auth,response,post-response) - no more iterative junk.
    • Integrated module runtime - EspressoServer determines what runs when.
    • Global error handler - No more "last in the queue", EspressoServer handles all errors globally.
    • Append-only - Modules only append the ingoing or outgoing response, and EspressoServer determines when to send the message, not the module, ensuring message is always sent and junk modules don't break the stack.

Use

To create a single Espresso instance, it's as simple as:

constespresso=require("espresso"),EspressoServer=espresso.EspressoServer;constmy_functionality=require("./../my_stuff");// Starts the servervar_server=newEspressoServer({port: 3000});// Set up modules (will be executed on every incoming request)_server.modules([module_1,module_2,
...
]);// Set up routing.var_routes=[{path: "/{param1}/{param2}",method: "any",format: "json",path_requirements: {"param1": {"pattern": /(rick|morty|schwifty)/},"param2": {"pattern": /[A-Za-z0-9]/}}handler: my_functionality.do_stuff}];// Tell the server what routes to use._server.routes(_routes);// Start the server._server.start();

Example of a module:

constEspressoServerModule=require("espresso").EspressoServerModule;module.exports=newEspressoServerModule("Tst","beforeResponse",(request)=>{returnrequest.set({contentType: "application/json",statusCode: 200,headers: {"x-super-schwift": "morty"},content: {"a" :"b","c" : "rick"}});

Design

Espresso is designed to take all of the configuration out, and to provide you with a well-formed, easy-to-deploy HTTP server, and separates out server-wide functionality (i.e. Authentication, body parsing, etc) from server-specific functionality (i.e. Your routes, etc).

Core functionality

Espresso provides default functionality which can be configured, but which, generally, you just want to leave alone and let run. This is defined as classes that run at runtime which the server chooses to load based upon the incoming or outgoing message type.

Core functionality for both incoming and outgoing includes:

  • Formats/MIME Type parsing
    • JSON
    • XML
    • Others not yet supported
  • Authentication
  • Security (CORS, Origin, etc)
  • Timeouts
  • More to be added here as development progresses

This functionality will be provided as separate packages, however, this functionality sits differently within Espresso.

Modules

Modules are additional functionality within Espresso to extend what espresso does when it receives or sends a response to the end-user. They are termed modules, because they extend the functionality of Espresso, but are not used to provide basic functionality (like parsing incoming data, etc).

About

Espresso is a highly-opinionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jun 3, 2022. It is now read-only.

Repository files navigation

MaintainabilityCoverageKnown Vulnerabilities

Espresso is a highly-opionionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Installation

At the moment, to install, clone this repository. However, it's not recommended to use this in a production release at the moment as this is alpha software.

Features

  • Uses RxJS and Observers to signal changes in:
    • Incoming and outgoing traffic
    • Changes to routing
    • More to be added as development progresses.
  • Core
    • JSON and XML parsed and processed by default
  • Routing
    • GET, POST or ANY
    • Route formats (expect JSON, XML, etc)
    • Named route parameters (/path/{param1}/{param2}/)
    • Route parameter requirements (i.e. formats)
  • Modules
    • Lifecycle - run at different stages (connection,auth,response,post-response) - no more iterative junk.
    • Integrated module runtime - EspressoServer determines what runs when.
    • Global error handler - No more "last in the queue", EspressoServer handles all errors globally.
    • Append-only - Modules only append the ingoing or outgoing response, and EspressoServer determines when to send the message, not the module, ensuring message is always sent and junk modules don't break the stack.

Use

To create a single Espresso instance, it's as simple as:

constespresso=require("espresso"),EspressoServer=espresso.EspressoServer;constmy_functionality=require("./../my_stuff");// Starts the servervar_server=newEspressoServer({port: 3000});// Set up modules (will be executed on every incoming request)_server.modules([module_1,module_2,
...
]);// Set up routing.var_routes=[{path: "/{param1}/{param2}",method: "any",format: "json",path_requirements: {"param1": {"pattern": /(rick|morty|schwifty)/},"param2": {"pattern": /[A-Za-z0-9]/}}handler: my_functionality.do_stuff}];// Tell the server what routes to use._server.routes(_routes);// Start the server._server.start();

Example of a module:

constEspressoServerModule=require("espresso").EspressoServerModule;module.exports=newEspressoServerModule("Tst","beforeResponse",(request)=>{returnrequest.set({contentType: "application/json",statusCode: 200,headers: {"x-super-schwift": "morty"},content: {"a" :"b","c" : "rick"}});

Design

Espresso is designed to take all of the configuration out, and to provide you with a well-formed, easy-to-deploy HTTP server, and separates out server-wide functionality (i.e. Authentication, body parsing, etc) from server-specific functionality (i.e. Your routes, etc).

Core functionality

Espresso provides default functionality which can be configured, but which, generally, you just want to leave alone and let run. This is defined as classes that run at runtime which the server chooses to load based upon the incoming or outgoing message type.

Core functionality for both incoming and outgoing includes:

  • Formats/MIME Type parsing
    • JSON
    • XML
    • Others not yet supported
  • Authentication
  • Security (CORS, Origin, etc)
  • Timeouts
  • More to be added here as development progresses

This functionality will be provided as separate packages, however, this functionality sits differently within Espresso.

Modules

Modules are additional functionality within Espresso to extend what espresso does when it receives or sends a response to the end-user. They are termed modules, because they extend the functionality of Espresso, but are not used to provide basic functionality (like parsing incoming data, etc).

About

Espresso is a highly-opinionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Jun 3, 2022. It is now read-only.

Repository files navigation

MaintainabilityCoverageKnown Vulnerabilities

Espresso is a highly-opionionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Installation

At the moment, to install, clone this repository. However, it's not recommended to use this in a production release at the moment as this is alpha software.

Features

  • Uses RxJS and Observers to signal changes in:
    • Incoming and outgoing traffic
    • Changes to routing
    • More to be added as development progresses.
  • Core
    • JSON and XML parsed and processed by default
  • Routing
    • GET, POST or ANY
    • Route formats (expect JSON, XML, etc)
    • Named route parameters (/path/{param1}/{param2}/)
    • Route parameter requirements (i.e. formats)
  • Modules
    • Lifecycle - run at different stages (connection,auth,response,post-response) - no more iterative junk.
    • Integrated module runtime - EspressoServer determines what runs when.
    • Global error handler - No more "last in the queue", EspressoServer handles all errors globally.
    • Append-only - Modules only append the ingoing or outgoing response, and EspressoServer determines when to send the message, not the module, ensuring message is always sent and junk modules don't break the stack.

Use

To create a single Espresso instance, it's as simple as:

constespresso=require("espresso"),EspressoServer=espresso.EspressoServer;constmy_functionality=require("./../my_stuff");// Starts the servervar_server=newEspressoServer({port: 3000});// Set up modules (will be executed on every incoming request)_server.modules([module_1,module_2,
...
]);// Set up routing.var_routes=[{path: "/{param1}/{param2}",method: "any",format: "json",path_requirements: {"param1": {"pattern": /(rick|morty|schwifty)/},"param2": {"pattern": /[A-Za-z0-9]/}}handler: my_functionality.do_stuff}];// Tell the server what routes to use._server.routes(_routes);// Start the server._server.start();

Example of a module:

constEspressoServerModule=require("espresso").EspressoServerModule;module.exports=newEspressoServerModule("Tst","beforeResponse",(request)=>{returnrequest.set({contentType: "application/json",statusCode: 200,headers: {"x-super-schwift": "morty"},content: {"a" :"b","c" : "rick"}});

Design

Espresso is designed to take all of the configuration out, and to provide you with a well-formed, easy-to-deploy HTTP server, and separates out server-wide functionality (i.e. Authentication, body parsing, etc) from server-specific functionality (i.e. Your routes, etc).

Core functionality

Espresso provides default functionality which can be configured, but which, generally, you just want to leave alone and let run. This is defined as classes that run at runtime which the server chooses to load based upon the incoming or outgoing message type.

Core functionality for both incoming and outgoing includes:

  • Formats/MIME Type parsing
    • JSON
    • XML
    • Others not yet supported
  • Authentication
  • Security (CORS, Origin, etc)
  • Timeouts
  • More to be added here as development progresses

This functionality will be provided as separate packages, however, this functionality sits differently within Espresso.

Modules

Modules are additional functionality within Espresso to extend what espresso does when it receives or sends a response to the end-user. They are termed modules, because they extend the functionality of Espresso, but are not used to provide basic functionality (like parsing incoming data, etc).

About

Espresso is a highly-opinionated, agitating, loudmouth brawler of a HTTP server. Based upon RxJS and Observables, it's designed to take all the headache out of HTTP-servering, and provide simple modularity.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages