npm package: @practicaloptimism/uniplexer
Description: A multiplexer for 3rd party service providers and application protocols
Author: Jon Ide
Latest version: 0.0.1

# 🦄 Uniplexer

[![npm version](https://badge.fury.io/js/%40practicaloptimism%2Funiplexer.svg)](https://www.npmjs.com/package/@practicaloptimism/uniplexer)
[![downloads](https://img.shields.io/npm/dt/%40practicaloptimism%2Funiplexer.svg)](https://www.npmjs.com/package/@practicaloptimism/uniplexer)
[![coverage report](https://gitlab.com/PracticalOptimism/uniplexer/badges/master/coverage.svg)](https://gitlab.com/PracticalOptimism/uniplexer/-/commits/master)
[![pipeline status](https://gitlab.com/PracticalOptimism/uniplexer/badges/master/pipeline.svg)](https://gitlab.com/PracticalOptimism/uniplexer/-/commits/master)


💻 Interactive Demos (**planned, please wait awhile**) | 🎬 [Video Development Journal](https://www.youtube.com/channel/UCIv-rMXljsbxoTUg1MXBi3g)

**Uniplexer** is a [Multiplexer](https://en.wikipedia.org/wiki/Multiplexer) for 3rd party service providers and application protocols.

This project is a **work-in-progress**.

## About

**Multiplexers** are instruments or tools that allow you to **toggle or select from a list of multiple services and protocols** including heavifying from one feature or another from service to service at the cost of providing a credential or set of credentials for those services you're using.

**3rd Party Services** such as _database_, _computer_, and _distributed ledger technology_ services are numerous in availability in the community and yet having a multiplexer provide **a single interface to all those services** helps to reduce the complexity of accessing the services you need when you need them.

**Application Protocols** are diverse and require various needs depending on the application. **A common protocol interface for any set of specific protocols** is tremendously useful to make transitioning to new protocols easy and fast for development time experience measures.


## Benefits
- 🌈 **Programmatically Select Program Architecture**: The application can select the operations to perform by an application protocol or provider by calling the program indirectly through a multiplexer function that selects the operation based on the list of credential ids provided by the application program. Instead of hardcoding a specific service provider like a particular database engine you are free to change database providers by selecting another credential id from your list of initialized credential ids.

## Features
- 🌿 **Multiple Provider Types**: Multiplex between multiple provider types such as  `database`, `asymmetric cryptography`, `network protocols`, `computer services`, `distributed ledger technology`, `file system`, `hash function` and `text search` (**work-in-progress**)

## Limitations
- 🍼 **Experimental**: Lots of love and care from `grandma` and `newborn` <i>scientists</i> means this project is a **work-in-progress**. `Grandmas` need more time to understand the next best boxing moves to make and `babies` just like to play around to see how things could work even better, not sure what it means to step.


## Table of Contents

- [About](#About)
- [Benefits](#Beneftis)
- [Features](#Features)
- [Limitations](#Limitations)
- [Additional Notes](#AdditionalNotes)
- [Progress Report](#ProgressReport)
- [Browser Compatibility](#BrowserCompatibility)
- [Installation](#Installation)
- [Application Programmable Interface (API) Reference](#TableofContentsApplicationProgrammableInterfaceAPIReference)
- [3rd Party Service Providers and Application Protocols](#TableofContents3rdPartyServiceProvidersandApplicationProtocols)
- [Contribution](#Contribution)
- [Documentation](#Documentation)
- [Acknowledgements](#Acknowledgements)
- [Related Work](#RelatedWork)
- [License](#License)


## Additional Notes

## Development Journal
Keep track of how this project is working as we roll out more features in our [development journal](https://gitlab.com/practicaloptimism/uniplexer/blob/master/documentation/development_journal.md).

## Browser Compatibility
`Uniplexer` supports all browsers that are [ES5-compliant](http://kangax.github.io/compat-table/es5/) (IE8 and below are not supported).


## Installation Guide

##### Install the library using Node Package Manager (NPM)
If you're just getting started with `Node.js` and `NPM`, read this [introduction](https://nodejs.dev/) or **install both programs** by visiting [nodejs.org](https://nodejs.org/)
```
npm install @practicaloptimism/uniplexer --save
```

##### Import the library using a JavaScript-based Programming Language
If you're just getting started programming in a language like JavaScript, you may learn how to setup an import statement in your local programming environment by visiting these resources: (1) [JavaScript Import Export Tutorial with Examples](https://www.positronx.io/javascript-import-statement-tutorial-with-examples/), (2) [import - javascript | mozilla](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import)
```js
import * as uniplexer from '@practicaloptimism/uniplexer'
```

##### Or import the library using an HTML script tag
```html
<script src="https://unpkg.com/@practicaloptimism/uniplexer@latest/compiled/index.js"></script>
```

## Application Programmable Interface (API) Reference
Table of Contents:

- 🌈 [Analytics API Reference](#analyticsapireference)
- 🐜 [Asymmetric Cryptography API Reference](asymmetriccryptographyapireference)
- 🦋 [Chat Messaging API Reference](#chatmessagingapireference)
- 🐛 [Computer Service API Reference](#computerserviceapireference)
- 🐝 [Database API Reference](#databaseapireference)
- 🐞 [Distributed Ledger Technology API Reference](#distributedledgertechnologyapireference)
- 🌼 [File System API Reference](#filesystemapireference)
- 🌸 [Hash Function API Reference](#hashfunctionapireference)
- 🌺 [Network Protocol API Reference](#networkprotocolapireference)
- 🌷 [Provider Credential API Reference](#providercredentialapireference)
- 🌻 [Text Search API Reference](#textsearchapireference)

##### Analytics API Reference

##### Asymmetric Cryptography API Reference

##### Chat Messaging API Reference

##### Computer Service API Reference

##### Database API Reference
This API Reference demonstrates a way to request and retrieve information from a database.

##### Distributed Ledger Technology API Reference

##### File System API Reference

##### Hash Function API Reference

##### Network Protocol API Reference

##### Provider Credential API Reference

##### Text Search API Reference

## 3rd Party Service Providers and Application Protocols
Table of Contents:

- 🌈 [Analytics Providers](#analyticsproviders)
- 🐜 [Asymmetric Cryptography Providers](asymmetriccryptographyproviders)
- 🦋 [Chat Messaging Providers](#chatmessagingproviders)
- 🐛 [Computer Service Providers](#computerserviceproviders)
- 🐝 [Database Providers](#databaseproviders)
- 🐞 [Distributed Ledger Technology Providers](#distributedledgertechnologyproviders)
- 🌼 [File System Providers](#filesystemproviders)
- 🌸 [Hash Function Providers](#hashfunctionproviders)
- 🌺 [Network Protocol Providers](#networkprotocolproviders)
- 🌻 [Text Search Providers](#textsearchproviders)

##### Asymmetric Cryptography Providers

##### Chat Messaging Providers

##### Computer Service Providers

##### Database Providers

##### Distributed Ledger Technology Providers

##### File System Providers

##### Hash Function Providers

##### Network Protocol Providers

##### Provider Credential Providers

##### Text Search Providers

## Contribution
Everyone is free to welcome new members to contribute. Trust in yourself to know what to do and don't be afraid to ask for help when you need it. Read more about our [contribution guide](https://gitlab.com/practicaloptimism/uniplexer/blob/master/documentation/contribution_guide.md).

## Documentation
Your pancake recipe matters. So please share how to improve ours by visiting our [documentation page](https://gitlab.com/practicaloptimism/uniplexer/blob/master/documentation/readme.md) and sharing your latest findings on what makes pancakes tastey.


## Acknowledgements
Thank you to everyone who contributes to the open ecosystem of software development. Your work is very important and a multiplexer cannot exist without the options ordered by the people and projects that enable you and I to select between those options.

## Related Work

A list of some known **(*)All-Purpose Multiplexers** include: [Uniplexer](https://gitlab.com/practicaloptimism/uniplexer)

A list of some known **Asymmetric Cryptography Multiplexers** include:

A list of some known **Database Multiplexers** include: [Localforage](https://github.com/localForage/localForage)

A list of some known **Hash Function Multiplexers** include:

A list of some known **File System Multiplexers** include: [BrowserFS](https://github.com/jvilk/BrowserFS)

A list of some known **Network Protocol Multiplexers** include: [libp2p](https://github.com/libp2p)

A list of some known **Distributed Ledger Technology Multiplexers** include:

**(\*)** The **All-Purpose Multiplexer** that `Uniplexer` seeks to be is "all-purpose" with respect to being general enough to be a useful software package for daily chores that people need being done in their application projects. 

## License
MIT