From fb7c25319c3a0d83aaec2b99a490b9e309985d6c Mon Sep 17 00:00:00 2001 From: Osmar Reyes Date: Tue, 19 Jan 2021 15:23:22 -0500 Subject: [PATCH 1/7] add doc template to project, fill the first view data --- docs/.gemspec | 20 ++ docs/.gitignore | 3 + docs/404.html | 24 ++ docs/Gemfile | 31 ++ docs/Gemfile.lock | 68 +++++ docs/LICENSE | 21 ++ docs/_config.yml | 63 +++++ docs/_includes/blog_menu.html | 10 + docs/_includes/footer.html | 18 ++ docs/_includes/header.html | 31 ++ docs/_includes/sidebar.html | 15 + docs/_layouts/blog.html | 18 ++ docs/_layouts/community.html | 7 + docs/_layouts/default.html | 46 +++ docs/_layouts/docs.html | 18 ++ docs/_layouts/home.html | 27 ++ .../2020-04-21-welcome-to-docstrap.markdown | 25 ++ docs/_sass/docstrap.scss | 79 ++++++ docs/_sass/docstrap/base.scss | 267 ++++++++++++++++++ docs/_sass/docstrap/theme_color.scss | 56 ++++ docs/assets/img/default-logo-white.png | Bin 0 -> 87484 bytes docs/assets/img/default-logo.png | Bin 0 -> 68318 bytes docs/assets/img/docstrap-white.svg | 26 ++ docs/assets/img/docstrap.svg | 26 ++ docs/assets/img/metaflux-logo-black.svg | 20 ++ docs/assets/js/index.js | 22 ++ docs/assets/js/store.js | 13 + docs/assets/main.scss | 5 + docs/blog.md | 13 + docs/community.md | 12 + docs/docs/api.md | 8 + docs/docs/examples.md | 43 +++ docs/docs/faq.md | 7 + docs/docs/getting_started.md | 60 ++++ docs/docs/overview.md | 14 + docs/index.md | 7 + 36 files changed, 1123 insertions(+) create mode 100644 docs/.gemspec create mode 100644 docs/.gitignore create mode 100644 docs/404.html create mode 100644 docs/Gemfile create mode 100644 docs/Gemfile.lock create mode 100644 docs/LICENSE create mode 100644 docs/_config.yml create mode 100644 docs/_includes/blog_menu.html create mode 100644 docs/_includes/footer.html create mode 100644 docs/_includes/header.html create mode 100644 docs/_includes/sidebar.html create mode 100644 docs/_layouts/blog.html create mode 100644 docs/_layouts/community.html create mode 100644 docs/_layouts/default.html create mode 100644 docs/_layouts/docs.html create mode 100644 docs/_layouts/home.html create mode 100644 docs/_posts/2020-04-21-welcome-to-docstrap.markdown create mode 100644 docs/_sass/docstrap.scss create mode 100644 docs/_sass/docstrap/base.scss create mode 100644 docs/_sass/docstrap/theme_color.scss create mode 100644 docs/assets/img/default-logo-white.png create mode 100644 docs/assets/img/default-logo.png create mode 100644 docs/assets/img/docstrap-white.svg create mode 100644 docs/assets/img/docstrap.svg create mode 100644 docs/assets/img/metaflux-logo-black.svg create mode 100644 docs/assets/js/index.js create mode 100644 docs/assets/js/store.js create mode 100644 docs/assets/main.scss create mode 100644 docs/blog.md create mode 100644 docs/community.md create mode 100644 docs/docs/api.md create mode 100644 docs/docs/examples.md create mode 100644 docs/docs/faq.md create mode 100644 docs/docs/getting_started.md create mode 100644 docs/docs/overview.md create mode 100644 docs/index.md diff --git a/docs/.gemspec b/docs/.gemspec new file mode 100644 index 0000000..ce94972 --- /dev/null +++ b/docs/.gemspec @@ -0,0 +1,20 @@ +# coding: utf-8 + +Gem::Specification.new do |spec| + spec.name = "docstrap-theme" + spec.version = "v1.0.1" + spec.authors = ["Osmar Reyes"] + spec.email = ["osmarreyesst@gmail.com"] + + spec.summary = %q{Docstrap documentation theme} + spec.description = "Docstrap is a open source theme for your documentation" + spec.homepage = "" + spec.license = "MIT" + + spec.files = git ls-files -z.split("\x0").select { |f| f.match(%r{^(assets|_layouts|_includes|_sass|LICENSE|README)}i) } + + spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.0" + + spec.add_development_dependency "jekyll", "~> 3.3" + spec.add_development_dependency "bundler", "~> 1.12" + end \ No newline at end of file diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..45c1505 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,3 @@ +_site +.sass-cache +.jekyll-metadata diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..c472b4e --- /dev/null +++ b/docs/404.html @@ -0,0 +1,24 @@ +--- +layout: default +--- + + + +
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 0000000..0835083 --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,31 @@ +source "https://rubygems.org" + +# Hello! This is where you manage which Jekyll version is used to run. +# When you want to use a different version, change it below, save the +# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# +# bundle exec jekyll serve +# +# This will help ensure the proper Jekyll version is running. +# Happy Jekylling! +gem "jekyll", "~> 3.8.5" + +# This is the default theme for new Jekyll sites. You may change this to anything you like. +# gem "minima", "~> 2.0" + +# If you want to use GitHub Pages, remove the "gem "jekyll"" above and +# uncomment the line below. To upgrade, run `bundle update github-pages`. +# gem "github-pages", group: :jekyll_plugins + +# If you have any plugins, put them here! +group :jekyll_plugins do + gem "jekyll-feed", "~> 0.6" + gem 'jekyll-seo-tag' +end + +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby] + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.0" if Gem.win_platform? + diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock new file mode 100644 index 0000000..e012109 --- /dev/null +++ b/docs/Gemfile.lock @@ -0,0 +1,68 @@ +GEM + remote: https://rubygems.org/ + specs: + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + colorator (1.1.0) + concurrent-ruby (1.1.6) + em-websocket (0.5.1) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + eventmachine (1.2.7) + ffi (1.12.2) + forwardable-extended (2.6.0) + http_parser.rb (0.6.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.8.5) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (~> 1.14) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-feed (0.13.0) + jekyll (>= 3.7, < 5.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + kramdown (1.17.0) + liquid (4.0.3) + listen (3.2.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (3.1.1) + rb-fsevent (0.10.3) + rb-inotify (0.10.1) + ffi (~> 1.0) + rouge (3.13.0) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + +PLATFORMS + ruby + +DEPENDENCIES + jekyll (~> 3.8.5) + jekyll-feed (~> 0.6) + jekyll-seo-tag + tzinfo-data + +BUNDLED WITH + 1.17.2 diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 0000000..4ec2a9c --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 rebelstackio + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..66c0321 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,63 @@ +# For technical reasons, this file is *NOT* reloaded automatically when you use +# 'bundle exec jekyll serve'. If you change this file, please restart the server process. + +# Site settings +# These are used to personalize your new site. If you look in the HTML files, +# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. +# You can create any custom variable you would like, and they will be accessible +# in the templates via {{ site.myvariable }}. +title: Expressif Documentation +email: osmarreyesst@gmai.com +description: >- # this means to ignore newlines until "baseurl:" + expressif is an opinionated wrapper and bootstrap for the express framework Routing that vastly simplifies creating self-documenting RESTful web services. It borrows (overtly) heavily from ayEs but opines further for the sake of simplifying the construction of RESTful APIs. +baseurl: "/" # the subpath of your site, e.g. /blog +url: "" # the base hostname & protocol for your site, e.g. http://example.com +twitter_username: jekyllrb +github_username: oreyes1991 +benefits: >- +
+ +

Secure

+

+ Authorization is handled using JWT and supports adding additional middleware to handle, for example, roles and/or permissions. +

+
+
+ +

Self documenting endpoints

+

+ expressif can handle self-documented endpoints, will deliver a JSON file with each endpoint information +

+
+links: >- + + docstrap logo + + + metaflux logo + +name: Expressif +repository: https://github.com/rebelstackio/expressif +discord: https://discord.gg/rj4UUErTnj +stackoverflow: \#linkto-so +themecolor: orange +clearlogo: assets/img/default-logo-white.png +darklogo: assets/img/default-logo.png + +# Build settings +markdown: kramdown +plugins: + - jekyll-feed + - jekyll-seo-tag + +# Exclude from processing. +# The following items will not be processed, by default. Create a custom list +# to override the default setting. +# exclude: +# - Gemfile +# - Gemfile.lock +# - node_modules +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ diff --git a/docs/_includes/blog_menu.html b/docs/_includes/blog_menu.html new file mode 100644 index 0000000..8e1c56f --- /dev/null +++ b/docs/_includes/blog_menu.html @@ -0,0 +1,10 @@ + + {% for post in site.posts %} + + + {{post.title}} - + + + + {% endfor %} + \ No newline at end of file diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html new file mode 100644 index 0000000..a2ed9ae --- /dev/null +++ b/docs/_includes/footer.html @@ -0,0 +1,18 @@ + diff --git a/docs/_includes/header.html b/docs/_includes/header.html new file mode 100644 index 0000000..4aa7194 --- /dev/null +++ b/docs/_includes/header.html @@ -0,0 +1,31 @@ +
+ + +
+ + +
+
diff --git a/docs/_includes/sidebar.html b/docs/_includes/sidebar.html new file mode 100644 index 0000000..f7ae14e --- /dev/null +++ b/docs/_includes/sidebar.html @@ -0,0 +1,15 @@ +{% assign pages = site.pages | sort: "tabindex"%} + + + {% for page in pages %} + {% if page.layout == "docs" %} + +
+ + {{page.title}} + +
+
+ {% endif %} + {% endfor %} +
diff --git a/docs/_layouts/blog.html b/docs/_layouts/blog.html new file mode 100644 index 0000000..39cb1e8 --- /dev/null +++ b/docs/_layouts/blog.html @@ -0,0 +1,18 @@ +--- +layout: default +--- + +
+ {%- include blog_menu.html -%} + {{content}} + +
+ + \ No newline at end of file diff --git a/docs/_layouts/community.html b/docs/_layouts/community.html new file mode 100644 index 0000000..433e77f --- /dev/null +++ b/docs/_layouts/community.html @@ -0,0 +1,7 @@ +--- +layout: default +--- + +
+ {{content}} +
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html new file mode 100644 index 0000000..84cfcf9 --- /dev/null +++ b/docs/_layouts/default.html @@ -0,0 +1,46 @@ + + + + + + + {% seo %} + {{site.title}} + + + + + + + + {%- include header.html -%} +
+
+
+ {{ content }} +
+
+ {%- include footer.html -%} +
+ + + + + diff --git a/docs/_layouts/docs.html b/docs/_layouts/docs.html new file mode 100644 index 0000000..7d4a32e --- /dev/null +++ b/docs/_layouts/docs.html @@ -0,0 +1,18 @@ +--- +layout: default +--- + +
+ {%- include sidebar.html -%} + {{ content }} +
+ + \ No newline at end of file diff --git a/docs/_layouts/home.html b/docs/_layouts/home.html new file mode 100644 index 0000000..f51c27b --- /dev/null +++ b/docs/_layouts/home.html @@ -0,0 +1,27 @@ +--- +layout: default +--- + +
+
+
+
+

{{site.name}}

+

+ {{site.description}} +

+ +
+ default-logo +
+
+ {{site.benefits}} +
+ +
+
diff --git a/docs/_posts/2020-04-21-welcome-to-docstrap.markdown b/docs/_posts/2020-04-21-welcome-to-docstrap.markdown new file mode 100644 index 0000000..992952f --- /dev/null +++ b/docs/_posts/2020-04-21-welcome-to-docstrap.markdown @@ -0,0 +1,25 @@ +--- +layout: blog +title: "Welcome to Docstrap" +date: 2020-04-21 14:26:46 -0500 +categories: blog update +--- +You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. + +To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works. + +Jekyll also offers powerful support for code snippets: + +```ruby +def print_hi(name) + puts "Hi, #{name}" +end +print_hi('Tom') +#=> prints 'Hi, Tom' to STDOUT. +``` + +Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk]. + +[jekyll-docs]: https://jekyllrb.com/docs/home +[jekyll-gh]: https://github.com/jekyll/jekyll +[jekyll-talk]: https://talk.jekyllrb.com/ diff --git a/docs/_sass/docstrap.scss b/docs/_sass/docstrap.scss new file mode 100644 index 0000000..287913b --- /dev/null +++ b/docs/_sass/docstrap.scss @@ -0,0 +1,79 @@ +@charset "utf-8"; +/*variables*/ +$custom-border-radius: 6px; +$clear-color: ghostwhite; +/* purple theme */ +$main-color: #84099e; +$main-color-light: rgba(132, 9, 158, .5); +/* default theme */ +$default-d-color: #09569e; +$default-d-color-light: rgba(9, 86, 158, .5); +/* orange theme*/ +$orange-color: #e48d0d; +$orange-color-light: rgba(228, 141, 13, .5); +/* fuchsia theme*/ +$fuchsia-color: #e91e63; +$fuchsia-color-light: rgba(233, 30, 99, .5); +/* dark theme*/ + +$dark-color: #333333; +$custom-blue: #00a4df; +$custom-red: #f56954; + +/*media querys*/ + +@mixin media-query($device) { + @media screen and (max-width: $device) { + @content; + } +} + +@mixin relative-font-size($ratio) { + font-size: $base-font-size * $ratio; +} + +@media only screen and (min-device-width: 300px) + and (max-device-width: 800px) + and (orientation: portrait) + { + .benefits { + grid-auto-flow: row !important; + row-gap: 10px; + padding: 0 10px !important; + } + .mobile-hidden { + display: none !important; + } + .main-header { + grid-template-columns: auto 1fr; + & .active { + display: none; + } + } + .footer img { + width: 3em; + } + .sumary { + grid-template-columns: unset !important; + & img { + grid-area: 1 / 1; + } + } + pretty-menu::after { + display: none !important; + } + .related > div { + grid-auto-flow: row !important; + } + .md-content{ + margin-left: unset !important; + } + } + + +/* import other sass files */ +@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap'); +@import + "docstrap/base", + "docstrap/theme_color.scss" +; diff --git a/docs/_sass/docstrap/base.scss b/docs/_sass/docstrap/base.scss new file mode 100644 index 0000000..e06987e --- /dev/null +++ b/docs/_sass/docstrap/base.scss @@ -0,0 +1,267 @@ +html, body { + font-family: 'Roboto', sans-serif; + background-color: $clear-color; + margin: 0; + padding: 0; + height: 100% +} + +body { + display: grid; + /* place-items: center; */ +} + +/*HEADER*/ + +.main-header { + position: fixed; + top: 0; + left: 0; + right: 0; + display: grid; + grid-template-columns: .5fr 4fr 1fr; + padding: 14px 10px; + background-color: $default-d-color; + color: #fff; + column-gap: 10px; + z-index: 100; + overflow-x: auto; + height: 98px; + box-sizing: border-box; + & .items{ + display: grid; + grid-auto-flow: column; + place-content: center start; + column-gap: 10px; + & > * { + position: relative; + cursor: default; + &.active::after { + position: absolute; + content: ""; + border-bottom: 2px solid rgba(255,255,255,.6); + left: 0; + right: 0; + bottom: -3px; + } + } + & > *:not(.active) { + color: rgba(255,255,255, .7); + cursor: pointer; + transition: color .3s ease; + user-select: none; + &:hover { + color: #fff; + } + } + } + & .logo > img { + padding: 10px; + box-sizing: border-box; + width: 70px; + } + & .logo { + place-content: center start; + align-items: center; + column-gap: 10px; + } + & .socials { + display: grid; + grid-auto-flow: column; + place-items:center; + & > div > * { + font-size: 2em; + cursor: pointer; + } + & > a { + color: #fff; + font-size: 28px; + &:hover { + color: rgba(255,255,255,.6); + } + } + } + & .item { + & > a { + color: inherit; + text-decoration: none; + } + } +} + +/*--------------------- main content ------------------------- */ + +.main-content { + display: grid; + max-width: calc(100vw); + margin-bottom: 239px; + padding: 10px 15px; + row-gap: 15px; + & > h2 { + margin: 15px 0; + text-align: center; + } +} + +.sumary { + display: grid; + grid-template-columns: 1fr 1fr; + background-color: #fff; + padding: 10px; + & > div { + padding: 0 15px; + color: #666; + & > p { + margin: 10px 0; + text-align: justify; + } + } + & > img { + width: 10em; + place-self: center; + } + & h1 { + color: $dark-color; + } + & pretty-button * { + font-size: 20px !important; + color: $default-d-color-light; + border-color: $default-d-color-light; + &:hover { + color: $default-d-color; + border-color: $default-d-color; + } + } +} + +.benefits { + display: grid; + grid-auto-flow: column; + column-gap: 10px; + background-color: rgba(252, 250, 226,.5); + text-align: justify; + padding: 0 15px; + & > * { + padding: 5px; + display: grid; + } + & .porperty > svg { + place-self: center; + font-size: 50px; + color: $default-d-color + } +} +.related { + display: grid; + text-align: center; + & > div { + display: grid; + grid-auto-flow: column; + place-items: center; + } + & img { + width: 150px; + cursor: pointer; + } +} + +.communication, .issues { + padding: 10px; +} + +.communication h3, .issues h3 { + margin: 10px + 0px; +} + +#content { + margin-top: 100px; + position: relative; +} + +.wrapper { + height: calc(100% - 101px); + display: grid; + margin-top: 101px; + overflow-y: auto; + position: relative; +} + +/*-----------------FOOTER-----------------*/ +.footer { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + background-color: #d9d9d9; + position: absolute; + bottom: 0; + place-content: center; + padding: 10px; + left: 0; + right: 0; + column-gap: 10px; + & img { + grid-area: 2 / 2; + width: 5em; + place-self: center; + } + & div { + display: grid; + place-self: center; + } + & a { + text-decoration: none; + color: var(--primary-bg); + transition: all .3s ease; + &:hover { + color: var(--primary-bg-hv); + } + } +} + +/*--------------------sidebar------------------------------------*/ + +pretty-menu-item { + & a { + color: inherit; + text-decoration: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + & .p-menu-item-box > div { + position: relative; + } +} + +pretty-menu::after { + position: absolute; +} +/*-------------------- DOCS CONTENT ------------------*/ +.md-content { + margin-left: 250px; + & ul { + padding-left: 20px; + } + &.no-menu { + margin-left: 0; + } +} + +.article-date { + padding: 10px 15px; + color: #666; + font-style: italic; +} + +main.page-content { + position: relative; +} + +code.highlighter-rouge { + padding: 0 5px; + background-color: #282c34; + margin: 5px; + color: #fff; +} diff --git a/docs/_sass/docstrap/theme_color.scss b/docs/_sass/docstrap/theme_color.scss new file mode 100644 index 0000000..45818b8 --- /dev/null +++ b/docs/_sass/docstrap/theme_color.scss @@ -0,0 +1,56 @@ +/*--------------------------- themes----------------------------------- */ +/**/ +.docs-theme-purple{ + & .main-header { + background-color: $main-color !important; + } + & .sumary pretty-button * { + color: $main-color-light !important; + border-color: $main-color-light !important; + &:hover { + color: $main-color !important; + border-color: $main-color !important; + } + } + & .benefits .porperty > svg { + color: $main-color !important + } +} +/**/ +/**/ +.docs-theme-orange { + & .main-header { + background-color: $orange-color !important; + } + & .sumary pretty-button * { + color: $orange-color-light !important; + border-color: $orange-color-light !important; + &:hover { + color: $orange-color !important; + border-color: $orange-color !important; + } + } + & .benefits .porperty > svg { + color: $orange-color !important + } +} +/**/ +/**/ +.docs-theme-fuchsia{ + & .main-header { + background-color: $fuchsia-color !important; + } + & .sumary pretty-button * { + color: $fuchsia-color-light !important; + border-color: $fuchsia-color-light !important; + &:hover { + color: $fuchsia-color !important; + border-color: $fuchsia-color !important; + } + } + & .benefits .porperty > svg { + color: $fuchsia-color !important + } +} +/**/ +/*---------------------------END-THEMES-------------------------------*/ diff --git a/docs/assets/img/default-logo-white.png b/docs/assets/img/default-logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..14ef5ac02893ea2d8421613a3e487810b558de87 GIT binary patch literal 87484 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ðOZL>P1Dj4WpaV#0=OAXBqB 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 literal 0 HcmV?d00001 diff --git a/docs/assets/img/default-logo.png b/docs/assets/img/default-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..50c78ed3a08c4e3a27825093aa794935bd86e91c GIT binary patch literal 68318 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®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 literal 0 HcmV?d00001 diff --git a/docs/assets/img/docstrap-white.svg b/docs/assets/img/docstrap-white.svg new file mode 100644 index 0000000..681125e --- /dev/null +++ b/docs/assets/img/docstrap-white.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/img/docstrap.svg b/docs/assets/img/docstrap.svg new file mode 100644 index 0000000..b202228 --- /dev/null +++ b/docs/assets/img/docstrap.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/img/metaflux-logo-black.svg b/docs/assets/img/metaflux-logo-black.svg new file mode 100644 index 0000000..ddb1fdd --- /dev/null +++ b/docs/assets/img/metaflux-logo-black.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + diff --git a/docs/assets/js/index.js b/docs/assets/js/index.js new file mode 100644 index 0000000..abdf2af --- /dev/null +++ b/docs/assets/js/index.js @@ -0,0 +1,22 @@ +document.addEventListener('DOMContentLoaded', () => { + setActiveHeaderTab(); +}); + +/** + * On load set active tab to the top menu + */ +function setActiveHeaderTab() { + const { pathname } = document.location; + const tabName = getTabName(pathname); + changeHeaderActiveTab(tabName); +} +/** + * toggle active class to the header elementes + * @param {String} name tab name + */ +function changeHeaderActiveTab(name) { + const newActive = document.querySelector(`.main-header div[name="${name}"]`); + const prevActive = document.querySelector('.main-header .active'); + prevActive.classList.remove('active'); + newActive.classList.add('active'); +} \ No newline at end of file diff --git a/docs/assets/js/store.js b/docs/assets/js/store.js new file mode 100644 index 0000000..fb7c1ae --- /dev/null +++ b/docs/assets/js/store.js @@ -0,0 +1,13 @@ +window.storage = new Store( + { + //ini state + headerTabActive: 0 + }, + { + //handlres + CHANGE_VIEW: (action, state) => { + console.log(action) + return { newState: state } + } + } +); diff --git a/docs/assets/main.scss b/docs/assets/main.scss new file mode 100644 index 0000000..676a760 --- /dev/null +++ b/docs/assets/main.scss @@ -0,0 +1,5 @@ +--- +# Only the main Sass file needs front matter (the dashes are enough) +--- + +@import "docstrap"; \ No newline at end of file diff --git a/docs/blog.md b/docs/blog.md new file mode 100644 index 0000000..9b79bbc --- /dev/null +++ b/docs/blog.md @@ -0,0 +1,13 @@ +--- +layout: blog +permalink: /blog/ +date: 2020-04-20 14:26:46 -0500 +author: Osmar Reyes +--- + +# Docstrap blog Overview + +Welcome to the blog for docstrap, here the dev team will be leaving theit thoughts, ideas or just some explination, the obstacles and here you will be able to see the core, the hard of the beast, as we update this library will highlight pieces of code, sketches or diagrams that help us to conquer our goal. + +We love this community, that's why Docstrap is open source, we want you to get involved, to help us improve, perhaps report a bug in our [repository](https://github.com/rebelstackio/docstrap), or just forked and play with it and if you can improve something you can feel free to create a pull request, connect to our [discord](https://discord.gg/pRG332) channel and pitch your ideas. + diff --git a/docs/community.md b/docs/community.md new file mode 100644 index 0000000..c4c99cb --- /dev/null +++ b/docs/community.md @@ -0,0 +1,12 @@ +--- +layout: community +title: Community +permalink: /community/ +--- + +### Communication +The Docstrap community is most readily found on its [Discord](https://discord.gg/pRG332) + +### Issues +Github is used for tracking issues. The primary location for these is the main [Docstrap repository](https://github.com/rebelstackio/docstrap/issues). +If you’re a Docstrap user, you’re highly encouraged to keep an eye on these issues and jump in on the discussions, to help us understand how to design tradeoffs that might affect you. diff --git a/docs/docs/api.md b/docs/docs/api.md new file mode 100644 index 0000000..7394ee1 --- /dev/null +++ b/docs/docs/api.md @@ -0,0 +1,8 @@ +--- +layout: docs +title: Api Reference +permalink: /docs/api/ +tabindex: 2 +--- + +# Api Reference \ No newline at end of file diff --git a/docs/docs/examples.md b/docs/docs/examples.md new file mode 100644 index 0000000..d31d80e --- /dev/null +++ b/docs/docs/examples.md @@ -0,0 +1,43 @@ +--- +layout: docs +title: Examples | Tutorials +permalink: /docs/examples/ +tabindex: 3 +--- + +# Examples + +## How to set your config file + +In the root of your generated template, you will see a _config.yml, this file is the main configuration file and should look something like this +```yml +title: Site Name +email: your@emal.com +description: >- # this means to ignore newlines until "baseurl:" + site description +baseurl: "/" # the subpath of your site, e.g. /blog +url: "" # the base hostname & protocol for your site, e.g. http://example.com +twitter_username: twitter_user +github_username: github_user +benefits: >- + bennefits of your project +links: >- + related links +name: Docstrap +repository: link to your repository +discord: linkto to your discord +stackoverflow: link to stackaoverflow +# Build settings +markdown: kramdown +plugins: + - jekyll-feed + - jekyll-seo-tag + +``` +this file will be parsed to the template with the variable site, so if you want to reference the property title in this file it will be ```site.title``` + +## How to set this to your Github pages? +The template is made in Jekyll, so you don't need to build every addition to the docs files, the template should be in the branch pointing your Github pages. +Let's say our gh-pages URL is ```gh_user.hithub.io/repo_name/``` our Jekyll template is using relative_url that means the folder structure for your site will be constructed as ```site.baseurl + url```. +By default ```baseurl: "/"``` so you will need to set it to ```baseurl: "/repo_name/"```, it is important to have both slashes at the beginning and end. + diff --git a/docs/docs/faq.md b/docs/docs/faq.md new file mode 100644 index 0000000..3119924 --- /dev/null +++ b/docs/docs/faq.md @@ -0,0 +1,7 @@ +--- +layout: docs +title: FAQ +permalink: /docs/faq/ +tabindex: 4 +--- +# Frequently asked questions \ No newline at end of file diff --git a/docs/docs/getting_started.md b/docs/docs/getting_started.md new file mode 100644 index 0000000..7a79ff9 --- /dev/null +++ b/docs/docs/getting_started.md @@ -0,0 +1,60 @@ +--- +layout: docs +title: Getting Started +permalink: /docs/getting-started/ +tabindex: 1 +--- + +## Instalation +```bash +npm i @rebelstack-io/docstrap -g +``` + +## Usage +```bash +docstrap [-d --dir] +``` +if no dir provided will generate documentation webview in docs folder + +### Configuration file +For better results is recomended to add a configuration file wich contains +basic information such name of your project, keywords, views sections and more. This file must be in the route where you execute the docstrap command with the name .docstrap.js. + +this is not mandatory, it will generate the view eather way without a configuration file, you latter can modify your just generated HTML files with the info for your project. + +## Documentation structure +``` +. ++-- community +| +-- index.html ++-- css +| +-- general.css +| +-- main.css +| +-- responsive.css ++-- docs +| +-- api +| | +-- api-reference.md +| | +-- index.html +| +-- examples +| | +-- examples.md +| | +-- index.html +| +-- faq +| | +-- faq.md +| | +-- index.html +| +-- getting-started +| | +-- getting-started.md +| | +-- index.html +| +-- overview +| | +-- overview.md +| | +-- index.html ++-- img +| +-- default-logo-white.svg +| +-- default-logo.svg ++-- js +| +-- index.js +| +-- markdown.js ++-- index.html +``` + +## Notes +Notice that there are some HTML files with .md files, the idea is to keep writing your documentation as you're used to, we then parse every MD file to the web view, all this is done in the server-side, so your HTML files will be fully statics helping with loading time and SEO, so don't forget to build your docstrap when a change to the .md files, or just leave it to Travis, Jenkins or the CI of your choice. \ No newline at end of file diff --git a/docs/docs/overview.md b/docs/docs/overview.md new file mode 100644 index 0000000..7c900d7 --- /dev/null +++ b/docs/docs/overview.md @@ -0,0 +1,14 @@ +--- +layout: docs +title: Overview +permalink: /docs/overview/ +tabindex: 0 +--- + +# Wath is Docstrap? + +Docstrap is an open-source library providing tools that allow easy deployment for your documentation, All you have to do is write your documentaion in markdown notation as you're used to. + +- CI/CD easy to hook Doctrap with Travis or Jenkins. +- Easy to customize, is only old plain HTML and CSS. +- Fast build, due to the simplicity of the library and well-ptimized code, you don't have to worry about long build process. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..e15ffc7 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,7 @@ +--- +# Feel free to add content and custom Front Matter to this file. +# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults + +layout: home +--- +# Docstrap From ed81c282f5a0913f63628736d7a92bb8b45349e4 Mon Sep 17 00:00:00 2001 From: Osmar Reyes Date: Tue, 19 Jan 2021 15:29:51 -0500 Subject: [PATCH 2/7] add info to doc/overview --- docs/docs/overview.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/docs/overview.md b/docs/docs/overview.md index 7c900d7..4d0ee5a 100644 --- a/docs/docs/overview.md +++ b/docs/docs/overview.md @@ -5,10 +5,11 @@ permalink: /docs/overview/ tabindex: 0 --- -# Wath is Docstrap? +# Wath is Expressif? -Docstrap is an open-source library providing tools that allow easy deployment for your documentation, All you have to do is write your documentaion in markdown notation as you're used to. +[![Build Status](https://travis-ci.com/rebelstackio/expressif.svg?branch=develop)](https://travis-ci.com/rebelstackio/expressif) -- CI/CD easy to hook Doctrap with Travis or Jenkins. -- Easy to customize, is only old plain HTML and CSS. -- Fast build, due to the simplicity of the library and well-ptimized code, you don't have to worry about long build process. +expressif is an opinionated wrapper and bootstrap for the express framework(https://expressjs.com/en/guide/routing.html) that vastly simplifies creating self-documenting RESTful web services. It borrows (overtly) heavily from [ayEs](https://github.com/rebelstackio/ayEs) but opines further for the sake of simplifying the construction of RESTful APIs. +
    +
    +The request flow goes through `authorize` -> `validate request structure` -> `validate request parameters` -> `controller middleware` -> `response`. From 27f108525117d15b23ec946ab3df67abb60eb3bc Mon Sep 17 00:00:00 2001 From: Osmar Reyes Date: Tue, 19 Jan 2021 15:40:34 -0500 Subject: [PATCH 3/7] add getting started info --- docs/_sass/docstrap/base.scss | 5 ++ docs/docs/getting_started.md | 137 +++++++++++++++++++++++----------- 2 files changed, 99 insertions(+), 43 deletions(-) diff --git a/docs/_sass/docstrap/base.scss b/docs/_sass/docstrap/base.scss index e06987e..0a55b7c 100644 --- a/docs/_sass/docstrap/base.scss +++ b/docs/_sass/docstrap/base.scss @@ -265,3 +265,8 @@ code.highlighter-rouge { margin: 5px; color: #fff; } + +*[class^=language-] { + margin-top: 10px; + margin-bottom: 10px; +} diff --git a/docs/docs/getting_started.md b/docs/docs/getting_started.md index 7a79ff9..72b531c 100644 --- a/docs/docs/getting_started.md +++ b/docs/docs/getting_started.md @@ -7,54 +7,105 @@ tabindex: 1 ## Instalation ```bash -npm i @rebelstack-io/docstrap -g +npm i @rebelstack-io/expressif ``` -## Usage -```bash -docstrap [-d --dir] -``` -if no dir provided will generate documentation webview in docs folder +## Using expressif +```js +/* Bootstrap a server */ +const {Server} = require('expressif'); +let myserver = new Server(/* config, globals */); -### Configuration file -For better results is recomended to add a configuration file wich contains -basic information such name of your project, keywords, views sections and more. This file must be in the route where you execute the docstrap command with the name .docstrap.js. +/* Create a sample login controller to deal with login requests. + * PLEASE NOTE: This is not a recommended login strategy for production sites. +*/ +const loginController = function loginController(req, res) { + const { username, password } = req.body; + if (password) { + const response = { + id: Math.floor(Math.random() * 6) + 1, + username + }; + res.status(200).send(response); + } +}; +/** + * The buildRouter helper function takes a configuration object with an + * array of route definitions. +*/ +const arouterdata = { + routes: [ + { + method: 'post', + path: '/login', + mwares: loginController + } + ] +}; +/** + * Call the Router#buildRouter function returns an express router with routes + * for each configuration in the routes array. +*/ +const authRouter = Router.buildRouter(arouterdata); +``` -this is not mandatory, it will generate the view eather way without a configuration file, you latter can modify your just generated HTML files with the info for your project. +Okay, but so far this is just a wrapper for the `Express#Router`. It gives us a nice clean format for router definitions, easy to read and reason about. Now let's add more support for the [request flow](#at-your-express-service) outlined above. -## Documentation structure +## Auth +ayEs provides an implementation of authentication by [JWT](https://jwt.io/) through the `Auth` lib. If an endpoint or a set of endpoints grouped into a router instance requires authentication, create and instance of the `ayEs#Auth` handler and pass it to the route configuration. +```js +const ayEs = require('ayes'); +const Auth = ayes.Auth; +const auth = new Auth(process.env.JWT_SECRET); +// Or use the factory function +const auth = ayEs.returnAuthInstance(process.env.JWT_SECRET); +const routerOptions = { + routes: [ + { + auth: auth, //Pass the auth instance here to authenticate just the /me endpoint. + method: 'post', + path: '/me', + mwares: getMe //A controller function + }, ... + ] +} ``` -. -+-- community -| +-- index.html -+-- css -| +-- general.css -| +-- main.css -| +-- responsive.css -+-- docs -| +-- api -| | +-- api-reference.md -| | +-- index.html -| +-- examples -| | +-- examples.md -| | +-- index.html -| +-- faq -| | +-- faq.md -| | +-- index.html -| +-- getting-started -| | +-- getting-started.md -| | +-- index.html -| +-- overview -| | +-- overview.md -| | +-- index.html -+-- img -| +-- default-logo-white.svg -| +-- default-logo.svg -+-- js -| +-- index.js -| +-- markdown.js -+-- index.html +If all routes for a particular router require authentication, simply pass the auth instance on the `options.auth` property of the router configuration instead. +```js +const routerOptions = { + auth: auth, //Pass the auth instance here to authenticate all routes by JWT. + routes: [ + { + method: 'post', + path: '/me', + mwares: getMe //A controller function + }, + { + method: 'put', + path: '/some/other/authenticated/route', + mwares: anotherController + } + ] +} ``` -## Notes -Notice that there are some HTML files with .md files, the idea is to keep writing your documentation as you're used to, we then parse every MD file to the web view, all this is done in the server-side, so your HTML files will be fully statics helping with loading time and SEO, so don't forget to build your docstrap when a change to the .md files, or just leave it to Travis, Jenkins or the CI of your choice. \ No newline at end of file +Request to endpoints configured with the `ayEs#Auth` lib must send in an `Authorization: Bearer ` header with a valid JWT to access the service. + +The lib adds an express middleware function to the route that will handle JWT validation for authentication. This middleware decodes the JWT present in the request's `Authorization` header, returning errors on failed validation. If the JWT is present and valid, the JWT payload is added to the express request object as the `dtoken` property, so you can access it inside any subsequent middleware. + +```js +/** + * With a JWT payload of + * { + * "exp": "2018-03-01T04:49:49.781Z", + * "user": { + * "id": "596dcd99dd19f9227f5a94b1", + * "username": "nectarsoft" + * } + * } +*/ +function (req, res) { + const username = req.dtoken.user.username; + console.log(username) // nectarsoft +} +``` From d3c5d00f3ab0083210040b54594978c1430695be Mon Sep 17 00:00:00 2001 From: Osmar Reyes Date: Tue, 19 Jan 2021 16:15:35 -0500 Subject: [PATCH 4/7] add API reference --- docs/docs/api.md | 667 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 666 insertions(+), 1 deletion(-) diff --git a/docs/docs/api.md b/docs/docs/api.md index 7394ee1..48ca516 100644 --- a/docs/docs/api.md +++ b/docs/docs/api.md @@ -5,4 +5,669 @@ permalink: /docs/api/ tabindex: 2 --- -# Api Reference \ No newline at end of file +# Api Reference +

    + +## Auth API +

    + +### new ayEs#Auth(String jwtsecret, Object options) -> Object ayEs#auth +Create `ayEs#Auth` instance. +

    + +__options__ + +* _logger_: A custom logger for the instance to use. +

    + +### Auth#decodeJWT(String jwt, String jwtsecret) -> Object +Decodes the given `jwt` string and returns the jwt payload as an object. Throws an error if `jwt` is not valid. +

    + +### Auth#decodeErr(Object) -> Object ayEs#Error +Helper function that take the error object returned by `Auth#decodeJWT` and parses it to a custom [`ayEs#Error#AuthError`](#new-errorautherrorstring-message-string-code---object) type with relevant error code and message. +

    + +### Auth#encodeJWT(Object payload, String jwtsecret) -> String +Returns a JWT string with `payload`, signed with the given secret key `jwtsecret`. +

    + +### ayEs#returnAuthInstance(String jwtsecret, Object options) -> Object ayEs#auth +Helper factory function that returns an `ayEs#Auth` instances. +

    + +### ayEs#auth#generateAuthMiddleWare() -> Function +Returns the auth middleware function. + +This is exposed so that you can add additional authentication middleware if required. + +```js +const authMiddleware = []; +authMiddleware.push(auth.generateAuthMiddleWare()); +authMiddleware.push(someOtherAuthFunction); +const routerOptions = { + auth: auth, // auth property can be an array of functions. + routes: [ ... ] +} +``` +

    + +## Error +A set of custom error objects for use in controller middleware to standardise error responses. + +All `Error` constructors accept a code parameter that can be used to pass in a code string as a non-verbose mechanism to give more specific detail about an error (see [error codes](#errorcodes)). + +ayEs error objects are intended for use along side the [response](#response) library to form a standard error response to api request. +

    + +### Error API + +#### new Error#BadRequestError(String message, String code) -> Object +Returns an `BadRequestError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 400; +``` +

    + +#### new Error#NotFoundError(String message, String code) -> Object +Returns an `NotFoundError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 404; +``` +

    + +#### new Error#BadHeaderError(String message, String code) -> Object +Returns an `BadHeaderError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 400; +``` +

    + +#### new Error#AuthError(String message, String code) -> Object +Returns an `AuthError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 401; +``` + +This is intended for authentication errors, not authorisation errors (see [Error#ForbiddenError](#new-errorforbiddenerrorstring-message-string-code---object)) +

    + +#### new Error#ForbiddenError(String message, String code) -> Object +Returns an `ForbiddenError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 403; +``` +

    + +#### new Error#UnauthorizedError(String message, String code) -> Object +Returns an `UnauthorizedError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 401; +``` +This is intended for authentication errors, not authorisation errors (see [Error#ForbiddenError](#new-errorforbiddenerrorstring-message-string-code---object)) +

    + +#### new Error#UnavailableRetryError(String message, String code, String retryafter) -> Object +Returns an `UnavailableRetryError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 503; + error.retryafter = retryafter; +``` +This error includes a `retryafter` property to indicate a wait period until retrying to access the service. Can be used for temporary unavailability, such as cache updates. +

    + +#### new Error#ConflictError(String message, String code) -> Object +Returns an `ConflictError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 409; +``` +

    + +#### new Error#DataBaseReturnError(String message, String code) -> Object +Returns an `DataBaseReturnError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 500; +``` +

    + +#### new Error#JSONValidationError(String message, Object errorData, String code) -> Object +Returns an `JSONValidationError` instance with properties +```js + error.message = message; + error.code = code; + error.httpstatus = 400; + error.info = errorData; +``` +This error is used by the [`JSONValidator`](#jsonvalidator) lib to return errors on validation. The validation error data is passed in the `info` property. +

    + +### Server Errors +There are a set of errors that wrap server errors and are passed the original error as a parameter to the constructor. This error object is then available on the `errObj` property. +

    + +#### new Error#DataBaseError(Object errobj, String message, String code) -> Object +Returns an `DataBaseError` instance with properties +```js + error.message = message; + error.errObj = errobj; + error.code = code; + error.httpstatus = 500; +``` +

    + +#### new Error#ServerError(Object errobj, String message, String code) -> Object +Returns an `ServerError` instance with properties +```js + error.message = message; + error.errObj = errobj; + error.code = code; + error.httpstatus = 500; +``` +

    + +#### new Error#FBError(Object errobj, String message, String code) -> Object +Returns an `FBError` instance with properties +```js + error.message = message; + error.errObj = errobj; + error.code = code; + error.httpstatus = 500; +``` +

    + +#### new Error#AWSError(Object errobj, String message, String code) -> Object +Returns an `AWSError` instance with properties +```js + error.message = message; + error.errObj = errobj; + error.code = code; + error.httpstatus = 500; +``` +

    + +### Error#codes +Most times an error is sent back to a client along with a message to give more detail of the cause of the error. A `400 Bad Request` status does not let the client know what was incorrect in the request, so a message is added to clarify, "Email parameter must be a valid email". + +There are two good cases when it might be better to replace that message with a code instead. +* We care about bandwidth and want to send less bytes across the wire, +* we want to inform the client app of an error but not a user who might read the response content. + +For this purpose `atEs` includes the concept of error codes that can be passed to the custom error constructors that give a little more detail about the error cause. These codes are read by the `ayEs#response` functions and a custom header, `X-Error-Code`, is added with the code. This can be read by developers or client applications for greater granularity of errors without verbose strings over the wire. +

    + +#### codes +See available codes and their meanings [here](lib/error/codes.js). + +__TODO__ Allow for code customisation. +

    + +## JSONValidator +A wrapper for the [AJV](https://github.com/epoberezkin/ajv) JSON schema validation library used to validate request parameters. +

    + +The idea here is to create an instance of the `ayEs#JSONValidator` and register a set of JSON schema that can be used in route configuration. So, given a JSON schema for validating login parameters with an `$id` property of `postloginin`, such as +```js +const authReqSchema = { + $schema: 'http://json-schema.org/draft-07/schema#', + $id: 'postloginin', + title: 'Login Object', + type: 'object', + properties: { + email: { + title: 'user email', + type: 'string', + format: 'email' + }, + username: { + title: 'username', + type: 'string' + }, + password: { + title: 'user password', + type: 'string', + minLength: 5, + maxLength: 400 + } + }, + required: ['username', 'password'] +}; +``` +we can instantiate the validator either by passing the schema to the constructor +```js +const JSONValidator = ayEs.JSONValidator; +const jv = new JSONValidator(authReqSchema); +``` +or using the `JSONValidator#addSchema` instance function +```js +const JSONValidator = ayEs.JSONValidator; +const jv = new JSONValidator(); +jv.addSchema(authReqSchema); +``` +

    + +Now, this instance can be assigned to the [`Router#options#jsonv`](#options) property and the registered schema can be referenced in a route configuration as `validreq: 'postloginin'` +```js +{ + jsonv: jv, + routes: [ + { + method: 'post', + path: '/login', + mwares: loginController, + validreq: 'postloginin' // Reference the schema here + } + ] +} +``` +The router library will now add a validation middleware for request parameters using the schema indicated. Any failure against the schema is wrapped in a [`Error#JSONValidationError`](#new-errorjsonvalidationerrorstring-message-object-errordata-string-code---object) and reported back to the client using [`Respond#invalidRequest`](#invalidRequest). +

    + +#### $ref in JSON schema +If you use the [`$ref` property](https://spacetelescope.github.io/understanding-json-schema/structuring.html) in your JSON schema to reference common definitions in a separate schema file we must pass that to our `ayEs#JSONValidator` instance in a slightly different way. This is due to how it is passed to the underlying [`ajv` library](https://github.com/epoberezkin/ajv#ref). +

    + +First add all the definition schemas into the array of schemas you wish to register with the validator and then wrap the array into an options object. +```js +// schemas/defs.json +{ + "$id": "defs", // Id used to reference this schema in other schemas + "definitions": { + "username": { + "title": "Username", + "type": "string", + "pattern": "^[a-zA-Z0-9\\-_.]{3,25}$" + } + } +} + +// schemas/user.json +[{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "GET User Params", + "type": "object", + "required": ["username"], + "properties": { + "username": { "$ref": "defs#/definitions/username" } + } +}] + +// routes/user.js +const JSONValidator = ayEs.JSONValidator; +const ds = require('schemas/defs'); +const su = require('schemas/user'); + +su.push(ds); +const jvoptions = { schemas: su }; +const jv = new JSONValidator(null, jvoptions); +``` +

    + +## Respond +A wrapper lib for the [`Express#res.send`](https://expressjs.com/en/4x/api.html#res.send) function. All responses are standardised. Data returned for a successful request can be wrapped with `respond#wrapSuccessData()` before being passed to `respond#success()` to be returned to the requestor. +

    + +```js +const ayEs = require('ayes'); +const respond = ayEs.respond; + +// controller for /login route +const loginController = function loginController(req, res) { + const { username, password } = req.body; + if (password) { + const response = { + id: Math.floor(Math.random() * 6) + 1, + username + }; + respond.success(res, req, respond.wrapSuccessData(response, req.path)); + } +}; + +// Responds to requester with JSON body +{ + "data": { + "id": 2, + "username": "nectarsoft" + }, + "path": "/login" +} +``` + +### Respond API +#### respond#forbidden(Object response, Object Request, Object Error) +Will respond to the requestor with http status `403`. +

    + +The last parameter is intended to be a custom `ayEs#Error` object and can include `message`, `httpstatus` and `code` properties. +

    + +If `httpstatus` is present, this will be used in place of `403`. +

    + +The `code` property is anticipated to be one of ['ayes#Error#codes](#errorcodes) and if present `respond#forbidden` returns an empty body and includes the custom header `X-Error-Code` set to the value of `code`. +

    + +If `code` is not present a response body is sent using the `message` property from the `Error` parameter if present or 'Forbidden' if not. +```js +{ + "data": { + "message": "Forbidden" // Or Error.message is present + }, + "type": "ForbiddenError" +} + +``` +

    + +#### respond#invalidRequest(Object response, Object Request, Object Error) +This response is intended to pass back information about any invalid request so a requester can amend and resubmit their failed request. +

    + +Any information to be passed to the requester can be attached to the `Error.info` property of the last parameter. +

    + +So, for example, if used in conjunction with an [`Error#JSONValidationError`](#new-errorjsonvalidationerrorstring-message-object-errordata-string-code---object) returned by the [`ayEs#JSONValidator`](#jsonvalidator) library we get a response body of the form +```js +response.invalidRequest(response, request ,JSONValidationError); +// Returns a request body of e.g. +{ + "data": { + "message": "JSON validation errors were found against schema: postloginin", + "info": [ + { + "keyword": "required", + "dataPath": "", + "schemaPath": "#/required", + "params": { + "missingProperty": "password" + }, + "message": "should have required property 'password'" + } + ] + }, + "type": "JSONValidationError", + "code": 400.43 +} +``` +

    + +#### respond#notAuthorized(Object response, Object Request, Object Error) +Will respond to the requestor with http status [`401`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401) and set the `WWW-Authenticate` header to `Bearer token_path="JWT"`. + +The last parameter is intended to be a custom `ayEs#Error` object and can include `message`, `httpstatus` and `code` properties. + +If `httpstatus` is present, this will be used in place of `401`. + +The `code` property is anticipated to be one of ['ayes#Error#codes](#errorcodes) and if present `respond#notAuthorized` returns an empty body and includes the custom header `X-Error-Code` set to the value of `code`. + +If `code` is not present a response body is sent using the `message` property from the `Error` parameter if present or 'Authorisation error' if not. +```js +{ + "data": { + "message": "Authorisation error" // Or Error.message is present + }, + "type": "Not_Authorized_Error" // Or Error Constructor name. +} +``` +

    + +#### respond#notFound(Object response, Object Request, Object Error) +Will respond to the requestor with http status [`404`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404). + +The last parameter is intended to be a custom `ayEs#Error` object and can include `message`, `httpstatus` and `code` properties. + +If `httpstatus` is present, this will be used in place of `404`. + +The `code` property is anticipated to be one of ['ayes#Error#codes](#errorcodes) and if present `respond#notFound` returns an empty body and includes the custom header `X-Error-Code` set to the value of `code`. + +If `code` is not present a response body is sent using the `message` property from the `Error` parameter if present or 'Resource not found' if not. +```js +{ + "data": { + "message": "Resource not found" // Or Error.message is present + }, + "type": "Not_Found_Error" // Or Error Constructor name. +} + +``` +

    + +#### respond#notImplemented(Object response, Object Request, Object Error) +Will respond to the requestor with http status [`501`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501). + +The last parameter is intended to be a custom `ayEs#Error` object and can include `message`, `httpstatus` and `code` properties. + +If `httpstatus` is present, this will be used in place of `501`. + +The `code` property is anticipated to be one of ['ayes#Error#codes](#errorcodes) and if present `respond#notImplemented` returns an empty body and includes the custom header `X-Error-Code` set to the value of `code`. + +If `code` is not present a response body is sent using the `message` property from the `Error` parameter if present or 'Not Implemented' if not. +```js +{ + "data": { + "message": "Not Implemented" // Or Error.message is present + }, + "type": "Not_Implemented_Error" // Or Error Constructor name. +} + +``` +

    + +#### respond#redirect(Object response, Object headers, Number statusCode, String noWrapDataStr) +Will respond to the requestor with http status [`307`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307). +

    + +The headers parameter should contain key value pairs of header names and values that will be added to the response. Typically this will include the `Location` header with an URL intended for the redirect. +

    + +If `httpstatus` is present, this will be used in place of `307`. +

    + +#### respond#serverError(Object response, Object Request, Object Error) +Will respond to the requestor with http status [`500`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500). +

    + +The last parameter is intended to be a custom `ayEs#Error` object and can include `message`, `httpstatus` and `code` properties. +

    + +If `httpstatus` is present, this will be used in place of `500`. +

    + +The `code` property is anticipated to be one of ['ayes#Error#codes](#errorcodes) and if present `respond#serverError` returns an empty body and includes the custom header `X-Error-Code` set to the value of `code`. +

    + +If `code` is not present a response body is sent using the `message` "Unexpected Error" if not and setting the type to "Server_Error". +```js +{ + "data": { + "message": "Unexpected Error" + }, + "type": "Server_Error" // Or Error Constructor name. +} + +``` +

    + +#### respond#success(Object response, Object request, Object WrappedData, Number HttpStatus) +Will respond to the requestor with http status [`200`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200). +

    + +If `HttpStatus` parameter is present this will be used in place of `200`. +

    + +If `WrappedData` if present it is used to build the response object, passing the data as teh `data` property of the response an either a `path` property, if one exists on the `wrappedData` object, or `type` property if not. + +```json +{ + "data": { + "id": 2, + "username": "nectarsoft" + }, + "path": "/login" +} +// Or +{ + "data": { + "id": 2, + "username": "nectarsoft" + }, + "type": "success" +} +``` +

    + +If no `WrappedData` parameter is passed `respond#success` will return an empty body, but still use http status `200` and not [`204`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204). +

    + +#### respond#unavailableRetry(Object response, Object Request, Object Error) +Will respond to the requestor with http status [`503`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503). +

    + +The last parameter is intended to be a custom `ayEs#Error` object and can include `message`, `httpstatus`, `retryafter` and `code` properties. +

    + +This response will set the `Retry-After` header to either the number 1 or a value passed in the `Error#retryafter` property. +

    + +If `httpstatus` is present, this will be used in place of `503`. +

    + +The `code` property is anticipated to be one of ['ayes#Error#codes](#errorcodes) and if present `respond#unavailableRetry` returns an empty body and includes the custom header `X-Error-Code` set to the value of `code`. +

    + +If `code` is not present a response body is sent using the `message` property from the `Error` parameter if present or 'Service temporarily unavailable. Please retry' if not. +```js +{ + "data": { + "message": "Service temporarily unavailable. Please retry" // Or Error.message is present + }, + "type": "Service_Unavailable_Please_Retry" // Or Error Constructor name. +} + +``` +

    + +#### respond#wrapSuccessData(Object Data, String path, Object options) +A function to wrap the return data into an options object for the `respond#success` function. +

    + +```javascript +const wrappedData = Respond.wrapSuccessData(response, req.path, { stripNull: true }); +Respond.success(res, req, wrappedData); +``` +

    + +__options__ +* stripNull : Boolean flag to pass to the `respond#success` function to indicate that any value in the data object with a null value should not be returned to the requester. +

    + +## Reqvalidator +A peculiar beast used for validating request formats. TODO. +

    + +## Router +#### Router#buildRouter(Object options) -> Express#Router +Build an Express Router instance containing endpoints for each of the routes configured in the `options.routes` +

    + +##### options +* _addOptionsRoute_: Boolean flag to indicate whether to add an `options` endpoint that returns a documentation JSON as described [here](#self-documenting-endpoints). Defaults to `false`. +* _auth_: This options takes an instance of [ayEs#Auth](#Auth).If present at this level the authentication middleware will be added to all endpoints configured in the `routes` array. +* _jsonv_: This option takes an instance of the [ayEs#JSONValidator](#JSONValidator). If present, route configurations (in the routes option array) can indicate a json schema registered with the validator to use to validate request parameters. +* _routes_: An array of endpoint configuration objects. Each object in the array will be used to build and add one endpoint to the returned `Express#Router`. Route configuration options are: + * _auth_: an instance of [ayEs#Auth](#Auth).If present at this level the authentication middleware will be added to only the endpoints configured in this route config. Clearly this will be overidden by any `Auth` instance in the `options.auth` option (which applies to all routes). If only some routes are required to be authenticated, or ypu wish to use a different authentication instance for any route, no `options.auth` option should be declared and the `auth` options set at the route configuration level for all authenticated routes. + * _method_: The [HTTP method](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) for this endpoint. + * _mwares_: An array of express middleware functions (or single function) for this endpoint. These middleware functions will be added to the router AFTER any authentication and validation middlewares that are generated by the `Auth` and/or `JSONValidator` instances in the `auth` or `jsonv` options. + * _path_: The path for this endpoint. This can be any string excepted as an express route path (see [here](https://expressjs.com/en/guide/routing.html#route-paths)) + * _rxvalid_: A list of request validation requirements. __TODO__ Refactor this interface. + * _validreq_: A string identifier for a JSON schema registered with the `ayEs#JSONValidator` instance set as the `options.jsonv` option. The schema will be used to validate the request parameters to this endpoint. See [JSONValidator](#JSONValidator) for more details. + * _validres_: A string identifier for a JSON schema registered with the `ayEs#JSONValidator` instance set as the `options.jsonv` option. This is currently only used when [generating the documentation JSON](#self-documenting-endpoints) for the `OPTIONS` route. See [JSONValidator](#JSONValidator) for more details. +

    + +### Self documenting endpoints +If the flag `addOptionsRoute` is set on the options object passed to the `Router#buildRouter` function, it will add an `OPTIONS` endpoint at the root URL for that router that will return a `JSON` containing information about all routes within the router. This will include a `data` property that is an object whose property keys are the available paths for the router. Each path will have an array of objects describing each available verb for that path with the following properties: +

    + +* _verb_: HTTP method +* _validations_: What validations are carried out on the request format. Currently this will list required headers. +* _body_schema_: A JSON schema for the parameters for this request. +* _response_: A JSON schema describing the response for this endpoint. + +```json +{ + "data": { + "/login": [{ + "verb": "post", + "validations": { + "headers": { + "Accept": "application/json", + "Content-Type": "application/json" + } + }, + "body_schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "postloginin", + "title": "Login Object", + "type": "object", + "properties": { + "email": { + "title": "user email", + "type": "string", + "format": "email" + }, + "username": { + "title": "username", + "type": "string" + }, + "password": { + "title": "user password", + "type": "string", + "minLength": 5, + "maxLength": 400 + } + }, + "required": ["username", "password"] + }, + "response": { + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "postloginout", + "title": "Login Object", + "type": "object", + "properties": { + "id": { + "title": "user id", + "type": "string" + }, + "username": { + "title": "username", + "type": "string" + }, + "role": { + "title": "user role", + "type": "number" + } + }, + "required": ["id", "username", "role"] + } + }] + }, + "path": "/" +} +``` From cd49b807069efa433c551506bcc462660c588259 Mon Sep 17 00:00:00 2001 From: Osmar Reyes Date: Tue, 19 Jan 2021 16:56:42 -0500 Subject: [PATCH 5/7] add community info --- docs/community.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/community.md b/docs/community.md index c4c99cb..8a92867 100644 --- a/docs/community.md +++ b/docs/community.md @@ -5,8 +5,8 @@ permalink: /community/ --- ### Communication -The Docstrap community is most readily found on its [Discord](https://discord.gg/pRG332) +The Expressif community is most readily found on its [Discord](https://discord.gg/rj4UUErTnj) ### Issues -Github is used for tracking issues. The primary location for these is the main [Docstrap repository](https://github.com/rebelstackio/docstrap/issues). -If you’re a Docstrap user, you’re highly encouraged to keep an eye on these issues and jump in on the discussions, to help us understand how to design tradeoffs that might affect you. +Github is used for tracking issues. The primary location for these is the main [Expressif repository](https://github.com/rebelstackio/expressif/issues). +If you’re a Expressif user, you’re highly encouraged to keep an eye on these issues and jump in on the discussions, to help us understand how to design tradeoffs that might affect you. From 7adda1f6770703b098501c1c13d7570de66bace3 Mon Sep 17 00:00:00 2001 From: Osmar Reyes Date: Tue, 19 Jan 2021 18:06:42 -0500 Subject: [PATCH 6/7] add blog secction --- ...strap.markdown => 2021-01-19-welcome-to-expressif.md} | 9 +++++++-- docs/assets/img/ServiceRequestFlow.svg | 2 ++ docs/blog.md | 8 ++++---- docs/docs/overview.md | 3 +++ 4 files changed, 16 insertions(+), 6 deletions(-) rename docs/_posts/{2020-04-21-welcome-to-docstrap.markdown => 2021-01-19-welcome-to-expressif.md} (75%) create mode 100644 docs/assets/img/ServiceRequestFlow.svg diff --git a/docs/_posts/2020-04-21-welcome-to-docstrap.markdown b/docs/_posts/2021-01-19-welcome-to-expressif.md similarity index 75% rename from docs/_posts/2020-04-21-welcome-to-docstrap.markdown rename to docs/_posts/2021-01-19-welcome-to-expressif.md index 992952f..64a7c6d 100644 --- a/docs/_posts/2020-04-21-welcome-to-docstrap.markdown +++ b/docs/_posts/2021-01-19-welcome-to-expressif.md @@ -1,9 +1,14 @@ --- layout: blog -title: "Welcome to Docstrap" -date: 2020-04-21 14:26:46 -0500 +title: "Welcome to Expressif" categories: blog update --- +# Welcome to the first entry of Expressif +We're implementing for the first time Documentation template (docstrap), we know there are a lot of improvements to do, but we feel proud of our first version, whit this template we now can create new blog entries for every new version updates or patch notes. +

    + +## How does it work? + You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated. To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works. diff --git a/docs/assets/img/ServiceRequestFlow.svg b/docs/assets/img/ServiceRequestFlow.svg new file mode 100644 index 0000000..68781fd --- /dev/null +++ b/docs/assets/img/ServiceRequestFlow.svg @@ -0,0 +1,2 @@ + +
    Validate Request

    ayEs.reqvalidator#validate



    [Not supported by viewer]
    Authorise

    ayEs.auth#parseAuthHeaders
    ayEs.auth#decodeJWT

    + custom auth middleware
    [Not supported by viewer]
    Validate Parameters

    ayEs.jsonvalidator#validateReq


    + JSON Schema
    [Not supported by viewer]
    Respond

    ayEs.Respond#*



    [Not supported by viewer]
    Controller Middleware

      ayEs.Error#*
      ayEs.Respond#*

      + custom middleware
    [Not supported by viewer]
    \ No newline at end of file diff --git a/docs/blog.md b/docs/blog.md index 9b79bbc..a254463 100644 --- a/docs/blog.md +++ b/docs/blog.md @@ -1,13 +1,13 @@ --- layout: blog permalink: /blog/ -date: 2020-04-20 14:26:46 -0500 +date: 2021-01-19 14:26:46 -0500 author: Osmar Reyes --- -# Docstrap blog Overview +# Expressiff blog Overview -Welcome to the blog for docstrap, here the dev team will be leaving theit thoughts, ideas or just some explination, the obstacles and here you will be able to see the core, the hard of the beast, as we update this library will highlight pieces of code, sketches or diagrams that help us to conquer our goal. +Welcome to the blog for Expressif, here the dev team will be leaving their thoughts, ideas, or just some explanation, the obstacles, and here you will be able to see the core, the heart of the beast, as we update this library will highlight pieces of code, sketches or diagrams that help us to conquer our goal. -We love this community, that's why Docstrap is open source, we want you to get involved, to help us improve, perhaps report a bug in our [repository](https://github.com/rebelstackio/docstrap), or just forked and play with it and if you can improve something you can feel free to create a pull request, connect to our [discord](https://discord.gg/pRG332) channel and pitch your ideas. +We love this community, that's why Expressif is open source, we want you to get involved, to help us improve, perhaps report a bug in our [repository](https://github.com/rebelstackio/expressif), or just forked and play with it and if you can improve something you can feel free to create a pull request, connect to our [discord](https://discord.gg/rj4UUErTnj) channel and pitch your ideas. diff --git a/docs/docs/overview.md b/docs/docs/overview.md index 4d0ee5a..74a4f5d 100644 --- a/docs/docs/overview.md +++ b/docs/docs/overview.md @@ -13,3 +13,6 @@ expressif is an opinionated wrapper and bootstrap for the express framework(http

    The request flow goes through `authorize` -> `validate request structure` -> `validate request parameters` -> `controller middleware` -> `response`. +

    + +![Service Request Flow]({% link /assets/img/ServiceRequestFlow.svg %}) From 0380965193ff89d5c41db00029255f1311dbba15 Mon Sep 17 00:00:00 2001 From: Osmar Reyes Date: Wed, 20 Jan 2021 13:50:32 -0500 Subject: [PATCH 7/7] add base url to docs, due to gh-pages publish in a subdomain by default --- docs/_config.yml | 2 +- docs/docs/overview.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index 66c0321..885e408 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -10,7 +10,7 @@ title: Expressif Documentation email: osmarreyesst@gmai.com description: >- # this means to ignore newlines until "baseurl:" expressif is an opinionated wrapper and bootstrap for the express framework Routing that vastly simplifies creating self-documenting RESTful web services. It borrows (overtly) heavily from ayEs but opines further for the sake of simplifying the construction of RESTful APIs. -baseurl: "/" # the subpath of your site, e.g. /blog +baseurl: "/expressif/" # the subpath of your site, e.g. /blog url: "" # the base hostname & protocol for your site, e.g. http://example.com twitter_username: jekyllrb github_username: oreyes1991 diff --git a/docs/docs/overview.md b/docs/docs/overview.md index 74a4f5d..9797e0f 100644 --- a/docs/docs/overview.md +++ b/docs/docs/overview.md @@ -15,4 +15,4 @@ expressif is an opinionated wrapper and bootstrap for the express framework(http The request flow goes through `authorize` -> `validate request structure` -> `validate request parameters` -> `controller middleware` -> `response`.

    -![Service Request Flow]({% link /assets/img/ServiceRequestFlow.svg %}) +![Service Request Flow]({{ site.baseurl }}{% link /assets/img/ServiceRequestFlow.svg %})