Boilerplate for how I like to write a backend web service.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

111 lines
3.1 KiB

(function () {
"use strict";
// AJQuery
function $(sel, el) {
if (!el) {
el = document;
}
return el.querySelector(sel);
}
function $$(sel, el) {
if (!el) {
el = document;
}
return el.querySelectorAll(sel);
}
function displayToken(token) {
$$(".js-token").forEach(function (el) {
el.innerText = token;
});
}
Pocket.onToken(function (token) {
// TODO Pocket v1.0 will make this obsolete
localStorage.setItem("pocket-token", token);
displayToken();
});
displayToken(localStorage.getItem("pocket-token"));
// requires div with class 'pocket'
$("form.js-signin").addEventListener("submit", function (ev) {
ev.preventDefault();
ev.stopPropagation();
var email = $("[name=email]").value;
Pocket.openSignin(ev, { email: email });
});
$("form.js-healthcheck").addEventListener("submit", function (ev) {
ev.preventDefault();
ev.stopPropagation();
window.fetch("/api/public/ping").then(async function (resp) {
var res = await resp.json();
$(".js-server-health").innerText = JSON.stringify(res, null, 2);
});
});
`
# Demo Mode Only
DELETE /public/reset Drop database and re-initialize
# Public
GET /public/ping Health Check
POST /public/setup <= (none) Bootstrap
# Admin-only
GET /admin/ping (authenticated) Health Check
GET /admin/users []Users => List ALL Users
# User
GET /user/ping (authenticated) Health Check
GET /user => User User profile
`
.trim()
.split(/\n/)
.forEach(function (line) {
line = line.trim();
if ("#" === line[0] || !line.trim()) {
return;
}
line = line.replace(/(<=)?\s*\(none\)\s*(=>)?/g, "");
var parts = line.split(/\s+/g);
var method = parts[0];
if ("GET" != method) {
method = "-X " + method + " ";
} else {
method = "";
}
var pathname = parts[1];
var auth = pathname.match(/(public|user|admin)/)[1];
if ("admin" == auth) {
auth = " \\\n -H 'Authorization: Bearer ADMIN_TOKEN'";
} else if ("user" == auth) {
auth = " \\\n -H 'Authorization: Bearer USER_TOKEN'";
} else {
auth = "";
}
document.body.querySelector(".js-pre").innerHTML += (
`
<div class="card-text">
<pre><code>curl -X POST https://example.com/api</code></pre>
<pre><code class="js-` +
pathname.replace(/\//g, "-") +
`">-</code></pre>
</div>
`
)
.replace(
/https:\/\/example\.com/g,
location.protocol + "//" + location.host
)
.replace(/-X POST /g, method)
.replace(/\/api/g, "/api" + pathname + auth);
});
/*
document.body.querySelector(".js-pre").innerHTML = document.body
.querySelector(".js-pre")
.innerHTML
*/
})();