From 96641a26f2004695a69c3847e8bdd90bbfa92e6e Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 1 Apr 2020 15:10:13 +0800 Subject: [PATCH] monorepo --- .gitignore | 2 + .nowignore | 4 + api/.gitignore | 23 + api/index.js | 324 +++++-- api/package-lock.json | 814 ++++++++++++++++++ api/package.json | 15 +- api/shadow-cljs.edn | 12 + {frontend => api/src}/dev/shadow/user.clj | 0 api/src/server/main.cljs | 40 + api/src/server/router.cljs | 67 ++ api/yarn.lock | 648 +++++++++++++- build.sh | 7 + frontend/deploy.sh | 6 - frontend/src/frontend/api.cljs | 135 --- now.json | 19 + public | 1 + {frontend => web}/.gitignore | 0 {frontend => web}/deps.edn | 0 {frontend => web}/dev/shadow/hooks.clj | 0 web/dev/shadow/user.clj | 7 + {frontend => web}/images/screenshot.png | Bin {frontend => web}/package-lock.json | 0 {frontend => web}/package.json | 0 {frontend => web}/public/css/highlight.css | 0 {frontend => web}/public/css/style.css | 0 {frontend => web}/public/css/tailwind.min.css | 0 {frontend => web}/public/favicon.ico | Bin .../public/img/angled-background.svg | 0 .../public/img/hero-pattern-lg.png | Bin {frontend => web}/public/index.html | 0 {frontend => web}/shadow-cljs.edn | 9 +- .../src/frontend/components/agenda.cljs | 0 .../src/frontend/components/auth.cljs | 0 .../src/frontend/components/file.cljs | 0 .../src/frontend/components/home.cljs | 8 +- .../src/frontend/components/repo.cljs | 0 .../src/frontend/components/settings.cljs | 0 .../src/frontend/components/sidebar.cljs | 0 {frontend => web}/src/frontend/config.cljs | 7 +- {frontend => web}/src/frontend/core.cljs | 4 +- {frontend => web}/src/frontend/db.cljs | 0 {frontend => web}/src/frontend/format.cljs | 0 .../src/frontend/format/markdown.cljs | 0 .../src/frontend/format/org/block.cljs | 0 .../src/frontend/format/org_mode.cljs | 0 .../src/frontend/format/protocol.cljs | 0 {frontend => web}/src/frontend/fs.cljs | 0 {frontend => web}/src/frontend/git.cljs | 0 {frontend => web}/src/frontend/handler.cljs | 31 +- {frontend => web}/src/frontend/mixins.cljs | 0 {frontend => web}/src/frontend/page.cljs | 0 {frontend => web}/src/frontend/posh.cljs | 0 {frontend => web}/src/frontend/routes.cljs | 0 {frontend => web}/src/frontend/rum.cljs | 0 {frontend => web}/src/frontend/state.cljs | 0 {frontend => web}/src/frontend/storage.cljs | 0 {frontend => web}/src/frontend/ui.cljs | 0 {frontend => web}/src/frontend/util.cljs | 0 {frontend => web}/yarn.lock | 0 59 files changed, 1917 insertions(+), 266 deletions(-) create mode 100644 .nowignore create mode 100644 api/.gitignore create mode 100644 api/package-lock.json create mode 100644 api/shadow-cljs.edn rename {frontend => api/src}/dev/shadow/user.clj (100%) create mode 100644 api/src/server/main.cljs create mode 100644 api/src/server/router.cljs create mode 100755 build.sh delete mode 100755 frontend/deploy.sh delete mode 100644 frontend/src/frontend/api.cljs create mode 100644 now.json create mode 120000 public rename {frontend => web}/.gitignore (100%) rename {frontend => web}/deps.edn (100%) rename {frontend => web}/dev/shadow/hooks.clj (100%) create mode 100644 web/dev/shadow/user.clj rename {frontend => web}/images/screenshot.png (100%) rename {frontend => web}/package-lock.json (100%) rename {frontend => web}/package.json (100%) rename {frontend => web}/public/css/highlight.css (100%) rename {frontend => web}/public/css/style.css (100%) rename {frontend => web}/public/css/tailwind.min.css (100%) rename {frontend => web}/public/favicon.ico (100%) rename {frontend => web}/public/img/angled-background.svg (100%) rename {frontend => web}/public/img/hero-pattern-lg.png (100%) rename {frontend => web}/public/index.html (100%) rename {frontend => web}/shadow-cljs.edn (79%) rename {frontend => web}/src/frontend/components/agenda.cljs (100%) rename {frontend => web}/src/frontend/components/auth.cljs (100%) rename {frontend => web}/src/frontend/components/file.cljs (100%) rename {frontend => web}/src/frontend/components/home.cljs (94%) rename {frontend => web}/src/frontend/components/repo.cljs (100%) rename {frontend => web}/src/frontend/components/settings.cljs (100%) rename {frontend => web}/src/frontend/components/sidebar.cljs (100%) rename {frontend => web}/src/frontend/config.cljs (61%) rename {frontend => web}/src/frontend/core.cljs (92%) rename {frontend => web}/src/frontend/db.cljs (100%) rename {frontend => web}/src/frontend/format.cljs (100%) rename {frontend => web}/src/frontend/format/markdown.cljs (100%) rename {frontend => web}/src/frontend/format/org/block.cljs (100%) rename {frontend => web}/src/frontend/format/org_mode.cljs (100%) rename {frontend => web}/src/frontend/format/protocol.cljs (100%) rename {frontend => web}/src/frontend/fs.cljs (100%) rename {frontend => web}/src/frontend/git.cljs (100%) rename {frontend => web}/src/frontend/handler.cljs (92%) rename {frontend => web}/src/frontend/mixins.cljs (100%) rename {frontend => web}/src/frontend/page.cljs (100%) rename {frontend => web}/src/frontend/posh.cljs (100%) rename {frontend => web}/src/frontend/routes.cljs (100%) rename {frontend => web}/src/frontend/rum.cljs (100%) rename {frontend => web}/src/frontend/state.cljs (100%) rename {frontend => web}/src/frontend/storage.cljs (100%) rename {frontend => web}/src/frontend/ui.cljs (100%) rename {frontend => web}/src/frontend/util.cljs (100%) rename {frontend => web}/yarn.lock (100%) diff --git a/.gitignore b/.gitignore index 72e98501ad..ed02e7898a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ pom.xml.asc .hgignore .hg/ + +.now \ No newline at end of file diff --git a/.nowignore b/.nowignore new file mode 100644 index 0000000000..5b51b4e4ea --- /dev/null +++ b/.nowignore @@ -0,0 +1,4 @@ +web +api/shadow-cljs.edn +api/.shadow-cljs +api/src diff --git a/api/.gitignore b/api/.gitignore new file mode 100644 index 0000000000..20d813777b --- /dev/null +++ b/api/.gitignore @@ -0,0 +1,23 @@ +node_modules/ +public/js +index.js + +/target +/checkouts +/src/gen + +pom.xml +pom.xml.asc +*.iml +*.jar +*.log +.shadow-cljs +.idea +.lein-* +.nrepl-* +.DS_Store + +.hgignore +.hg/ + +.now \ No newline at end of file diff --git a/api/index.js b/api/index.js index 4f7332d736..9f4fe5766f 100644 --- a/api/index.js +++ b/api/index.js @@ -1,88 +1,236 @@ -// index.js -const express = require('express'); -const cors = require('cors'); -const app = express(); -const request = require('request'); - -app.use(cors()); -app.use(express.json()); - -const config = { - clientId: process.env.GITHUB_APP_KEY, - clientSecret: process.env.GITHUB_APP_SECRET, - redirectUri: process.env.GITHUB_REDIRECT_URI, - allowedOrigins: ['http://localhost:8080', 'https://gitnotes.tiensonqin.now.sh'], -}; - -const corsOptions = { - origin: function (origin, callback) { - if (config.allowedOrigins.indexOf(origin) !== -1) { - callback(null, true); - } else { - callback(new Error('Not allowed by CORS')); - } - } -}; - -const githubLoginHandler = function (req, res) { - // Retrieve the request, more details about the event variable later - const headers = req.headers; - - const oauthUrl = `https://github.com/login/oauth/authorize?response_type=code&client_id=${config.clientId}&redirect_uri=${config.redirectUri}&scope=user%3Aemail%2Crepo`; - - res.redirect(301, oauthUrl); -}; - -const githubOauthHandler = function (req, res) { - // Retrieve the request, more details about the event variable later - const headers = req.headers; - const origin = headers.origin || headers.Origin; - const code = req.query.code; - console.log(`Received code ${code}`); - - // Check for malicious request - if (!config.allowedOrigins.includes(origin)) { - throw new Error(`${headers.origin} is not an allowed origin.`); - } - - const url = 'https://github.com/login/oauth/access_token'; - const options = { - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/json', - }, - body: JSON.stringify({ - code: req.query.code, - client_id: config.clientId, - client_secret: config.clientSecret, - redirect_uri: config.redirectUri, - }), - }; - - // Request to GitHub with the given code - request(url, options, function(err, response) { - if (err) { - res.send({ success: false, error: err }); - return; - } - - const body = JSON.parse(response.body); - - if (body.error) { - res.send({ success: false, error: body }); - return; - } - - console.log(body); - res.send({ - success: true, - // Access token should be stored in response.body - body: body, - }); - }); -}; - -app.get('/login/github', githubLoginHandler); -app.get('/api/oauth/github', cors(corsOptions), githubOauthHandler); - -app.listen(3001, () => console.log("Github Oauth app listening on port 3001!")); +#!/usr/bin/env node +(function(){ +var shadow$provide = {}; +var f; +function r(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"== +b&&"undefined"==typeof a.call)return"object";return b}var aa="closure_uid_"+(1E9*Math.random()>>>0),ba=0;function ca(a){var b=a.length;if(0>>16&65535)*d+c*(b>>>16&65535)<<16>>>0)|0};function tb(a){a=sb(a|0,-862048943);return sb(a<<15|a>>>-15,461845907)}function ub(a,b){a=(a|0)^(b|0);return sb(a<<13|a>>>-13,5)+-430675100|0}function vb(a,b){a=(a|0)^b;a=sb(a^a>>>16,-2048144789);a=sb(a^a>>>13,-1028477387);return a^a>>>16} +function wb(a){a:{var b=1;for(var c=0;;)if(b>2)} +function Cb(a,b,c,d,e){this.Za=a;this.name=b;this.ua=c;this.Oa=d;this.ma=e;this.f=2154168321;this.o=4096}f=Cb.prototype;f.toString=function(){return this.ua};f.D=function(a,b){return b instanceof Cb?this.ua===b.ua:!1};f.call=function(a){switch(arguments.length-1){case 1:return this.a(arguments[1]);case 2:return this.b(arguments[1],arguments[2]);default:throw Error(["Invalid arity: ",z.a(arguments.length-1)].join(""));}};f.apply=function(a,b){return this.call.apply(this,[this].concat(Aa(b)))}; +f.a=function(a){return G.b?G.b(a,this):G.call(null,a,this)};f.b=function(a,b){return G.g?G.g(a,this,b):G.call(null,a,this,b)};f.H=function(){return this.ma};f.N=function(a,b){return new Cb(this.Za,this.name,this.ua,this.Oa,b)};f.G=function(){var a=this.Oa;return null!=a?a:this.Oa=a=Bb(wb(this.name),zb(this.Za))};f.I=function(a,b){return F(b,this.ua)}; +var Db=function Db(a){switch(arguments.length){case 1:return Db.a(arguments[0]);case 2:return Db.b(arguments[0],arguments[1]);default:throw Error(["Invalid arity: ",z.a(arguments.length)].join(""));}};Db.a=function(a){for(;;){if(a instanceof Cb)return a;if("string"===typeof a){var b=a.indexOf("/");return 1>b?Db.b(null,a):Db.b(a.substring(0,b),a.substring(b+1,a.length))}if(a instanceof I)a=a.qa;else throw Error("no conversion to symbol");}}; +Db.b=function(a,b){var c=null!=a?[z.a(a),"/",z.a(b)].join(""):b;return new Cb(a,b,c,null,null)};Db.P=2;function Eb(a){return null!=a?a.o&131072||u===a.Qb?!0:a.o?!1:w(ob,a):w(ob,a)}function J(a){if(null==a)return null;if(null!=a&&(a.f&8388608||u===a.Eb))return a.F(null);if(Array.isArray(a)||"string"===typeof a)return 0===a.length?null:new K(a,0,null);if(w($a,a))return ab(a);throw Error([z.a(a)," is not ISeqable"].join(""));} +function N(a){if(null==a)return null;if(null!=a&&(a.f&64||u===a.Ta))return a.aa(null);a=J(a);return null==a?null:D(a)}function Fb(a){return null!=a?null!=a&&(a.f&64||u===a.Ta)?a.ba(null):(a=J(a))?a.ba(null):O:O}function P(a){return null==a?null:null!=a&&(a.f&128||u===a.Sa)?a.V():J(Fb(a))} +var Q=function Q(a){switch(arguments.length){case 1:return Q.a(arguments[0]);case 2:return Q.b(arguments[0],arguments[1]);default:for(var c=[],d=arguments.length,e=0;;)if(e=d)return-1;!(0c&&(c+=d,c=0>c?0:c);for(;;)if(cc?d+c:c;for(;;)if(0<=c){if(Q.b(Ub?Ub(a,c):Vb.call(null,a,c),b))return c;--c}else return-1}function Wb(a,b){this.c=a;this.i=b}Wb.prototype.ca=function(){return this.ia?0:a};f.G=function(){return Ib(this)};f.D=function(a,b){return Xb.b?Xb.b(this,b):Xb.call(null,this,b)};f.U=function(){return O};f.X=function(a,b){return Rb(this.c,b,this.c[this.i],this.i+1)};f.Y=function(a,b,c){return Rb(this.c,b,c,this.i)};f.aa=function(){return this.c[this.i]}; +f.ba=function(){return this.i+1b)throw Error("Index out of bounds");a:for(;;){if(null==a)throw Error("Index out of bounds"); +if(0===b){if(J(a)){a=N(a);break a}throw Error("Index out of bounds");}if(Tb(a)){a=C(a,b);break a}if(J(a))a=P(a),--b;else throw Error("Index out of bounds");}return a}if(w(Ha,a))return C(a,b);throw Error(["nth not supported on this type ",z.a(ya(null==a?null:a.constructor))].join(""));} +function W(a,b,c){if("number"!==typeof b)throw Error("Index argument to nth must be a number.");if(null==a)return c;if(null!=a&&(a.f&16||u===a.mb))return a.fa(null,b,c);if(Array.isArray(a))return-1b?c:bc(a,b,c);if(w(Ha,a))return C(a,b,c);throw Error(["nth not supported on this type ",z.a(ya(null==a?null:a.constructor))].join(""));} +var G=function G(a){switch(arguments.length){case 2:return G.b(arguments[0],arguments[1]);case 3:return G.g(arguments[0],arguments[1],arguments[2]);default:throw Error(["Invalid arity: ",z.a(arguments.length)].join(""));}};G.b=function(a,b){return null==a?null:null!=a&&(a.f&256||u===a.xb)?a.ga(null,b):Array.isArray(a)?null!=b&&b>1&1431655765;a=(a&858993459)+(a>>2&858993459);return 16843009*(a+(a>>4)&252645135)>>24} +var z=function z(a){switch(arguments.length){case 0:return z.w();case 1:return z.a(arguments[0]);default:for(var c=[],d=arguments.length,e=0;;)if(ea?0:a-1>>>5<<5}function fd(a,b,c){for(;;){if(0===b)return c;var d=dd(a);d.c[0]=c;c=d;b-=5}}var gd=function gd(a,b,c,d){var g=new cd(c.v,Aa(c.c)),h=a.h-1>>>b&31;5===b?g.c[h]=d:(c=c.c[h],null!=c?(b-=5,a=gd.K?gd.K(a,b,c,d):gd.call(null,a,b,c,d)):a=fd(null,b-5,d),g.c[h]=a);return g}; +function hd(a,b){if(b>=ed(a))return a.$;var c=a.root;for(a=a.shift;;)if(0>>a&31];a=d}else return c.c}function id(a,b){if(0<=b&&b>>b&31;b-=5;c=c.c[k];a=jd.pa?jd.pa(a,b,c,d,e):jd.call(null,a,b,c,d,e);h.c[k]=a}return h}; +function kd(a,b,c){this.eb=this.i=0;this.c=a;this.Jb=b;this.start=0;this.end=c}kd.prototype.ca=function(){return this.i=this.h)return new K(this.$,0,null);a:{var a=this.root;for(var b=this.shift;;)if(0this.h-ed(this)){a=this.$.length;for(var c=Array(a+1),d=0;;)if(d>>5>1<>>b&31;if(5===b)a=d;else{var h=c.c[g];null!=h?(b-=5,a=vd.K?vd.K(a,b,h,d):vd.call(null,a,b,h,d)):a=fd(a.root.v,b-5,d)}c.c[g]=a;return c}; +function nd(a,b,c,d){this.h=a;this.shift=b;this.root=c;this.$=d;this.o=88;this.f=275}f=nd.prototype; +f.Ua=function(a,b){if(this.root.v){if(32>this.h-ed(this))this.$[this.h&31]=b;else{a=new cd(this.root.v,this.$);var c=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];c[0]=b;this.$=c;this.h>>>5>1<>>g&31;g=k(g-5,h.c[l]);h.c[l]=g}return h}(a.shift,a.root);a.root=d}return a}if(b===a.h)return a.Ua(null,c);throw Error(["Index ",z.a(b)," out of bounds for TransientVector of length",z.a(a.h)].join(""));}throw Error("assoc! after persistent!");}f.T=function(){if(this.root.v)return this.h;throw Error("count after persistent!");}; +f.M=function(a,b){if(this.root.v)return id(this,b)[b&31];throw Error("nth after persistent!");};f.fa=function(a,b,c){return 0<=b&&bb?4:2*(b+1));nc(this.c,0,c,0,2*b);return new Ud(a,this.J,c)};f.Wa=function(){return Vd?Vd(this.c):Wd.call(null,this.c)};f.Xa=function(a,b){return Sd(this.c,a,b)};f.Ma=function(a,b,c,d){var e=1<<(b>>>a&31);if(0===(this.J&e))return d;var g=zc(this.J&e-1);e=this.c[2*g];g=this.c[2*g+1];return null==e?g.Ma(a+5,b,c,d):Od(c,e)?g:d}; +f.ia=function(a,b,c,d,e,g){var h=1<<(c>>>b&31),k=zc(this.J&h-1);if(0===(this.J&h)){var l=zc(this.J);if(2*l>>b&31]=Xd.ia(a,b+5,c,d,e,g);for(e=d=0;;)if(32>d)0===(this.J>>>d&1)? +d+=1:(k[d]=null!=this.c[e]?Xd.ia(a,b+5,Ab(this.c[e]),this.c[e],this.c[e+1],g):this.c[e+1],e+=2,d+=1);else break;return new Yd(a,l+1,k)}b=Array(2*(l+4));nc(this.c,0,b,0,2*k);b[2*k]=d;b[2*k+1]=e;nc(this.c,2*k,b,2*(k+1),2*(l-k));g.C=!0;a=this.La(a);a.c=b;a.J|=h;return a}l=this.c[2*k];h=this.c[2*k+1];if(null==l)return l=h.ia(a,b+5,c,d,e,g),l===h?this:Qd(this,a,2*k+1,l);if(Od(d,l))return e===h?this:Qd(this,a,2*k+1,e);g.C=!0;g=b+5;d=Zd?Zd(a,g,l,h,c,d,e):$d.call(null,a,g,l,h,c,d,e);e=2*k;k=2*k+1;a=this.La(a); +a.c[e]=null;a.c[k]=d;return a}; +f.ha=function(a,b,c,d,e){var g=1<<(b>>>a&31),h=zc(this.J&g-1);if(0===(this.J&g)){var k=zc(this.J);if(16<=k){h=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null];h[b>>>a&31]=Xd.ha(a+5,b,c,d,e);for(d=c=0;;)if(32>c)0===(this.J>>>c&1)?c+=1:(h[c]=null!=this.c[d]?Xd.ha(a+5,Ab(this.c[d]),this.c[d],this.c[d+1],e):this.c[d+1],d+=2,c+=1);else break;return new Yd(null,k+1,h)}a=Array(2*(k+1));nc(this.c, +0,a,0,2*h);a[2*h]=c;a[2*h+1]=d;nc(this.c,2*h,a,2*(h+1),2*(k-h));e.C=!0;return new Ud(null,this.J|g,a)}var l=this.c[2*h];g=this.c[2*h+1];if(null==l)return k=g.ha(a+5,b,c,d,e),k===g?this:new Ud(null,this.J,Pd(this.c,2*h+1,k));if(Od(c,l))return d===g?this:new Ud(null,this.J,Pd(this.c,2*h+1,d));e.C=!0;e=this.J;k=this.c;a+=5;a=ae?ae(a,l,g,b,c,d):$d.call(null,a,l,g,b,c,d);c=2*h;h=2*h+1;d=Aa(k);d[c]=null;d[h]=a;return new Ud(null,e,d)};f.na=function(){return new Td(this.c)};var Xd=new Ud(null,0,[]); +function be(a){this.c=a;this.i=0;this.ka=null}be.prototype.ca=function(){for(var a=this.c.length;;){if(null!=this.ka&&this.ka.ca())return!0;if(this.i>>a&31];return null!=e?e.Ma(a+5,b,c,d):d}; +f.ia=function(a,b,c,d,e,g){var h=c>>>b&31,k=this.c[h];if(null==k)return a=Qd(this,a,h,Xd.ia(a,b+5,c,d,e,g)),a.h+=1,a;b=k.ia(a,b+5,c,d,e,g);return b===k?this:Qd(this,a,h,b)};f.ha=function(a,b,c,d,e){var g=b>>>a&31,h=this.c[g];if(null==h)return new Yd(null,this.h+1,Pd(this.c,g,Xd.ha(a+5,b,c,d,e)));a=h.ha(a+5,b,c,d,e);return a===h?this:new Yd(null,this.h,Pd(this.c,g,a))};f.na=function(){return new be(this.c)};function ee(a,b,c){b*=2;for(var d=0;;)if(da?d:Od(c,this.c[a])?this.c[a+1]:d}; +f.ia=function(a,b,c,d,e,g){if(c===this.ta){b=ee(this.c,this.h,d);if(-1===b){if(this.c.length>2*this.h)return b=2*this.h,c=2*this.h+1,a=this.La(a),a.c[b]=d,a.c[c]=e,g.C=!0,a.h+=1,a;c=this.c.length;b=Array(c+2);nc(this.c,0,b,0,c);b[c]=d;b[c+1]=e;g.C=!0;d=this.h+1;a===this.v?(this.c=b,this.h=d,a=this):a=new fe(this.v,this.ta,d,b);return a}return this.c[b+1]===e?this:Qd(this,a,b+1,e)}return(new Ud(a,1<<(this.ta>>>b&31),[null,this,null,null])).ia(a,b,c,d,e,g)}; +f.ha=function(a,b,c,d,e){return b===this.ta?(a=ee(this.c,this.h,c),-1===a?(a=2*this.h,b=Array(a+2),nc(this.c,0,b,0,a),b[a]=c,b[a+1]=d,e.C=!0,new fe(null,this.ta,this.h+1,b)):Q.b(this.c[a+1],d)?this:new fe(null,this.ta,this.h,Pd(this.c,a+1,d))):(new Ud(null,1<<(this.ta>>>a&31),[null,this])).ha(a,b,c,d,e)};f.na=function(){return new Td(this.c)}; +function $d(a){switch(arguments.length){case 6:return ae(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);case 7:return Zd(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6]);default:throw Error(["Invalid arity: ",z.a(arguments.length)].join(""));}}function ae(a,b,c,d,e,g){var h=Ab(b);if(h===d)return new fe(null,h,2,[b,c,e,g]);var k=new Nd;return Xd.ha(a,h,b,c,k).ha(a,d,e,g,k)} +function Zd(a,b,c,d,e,g,h){var k=Ab(c);if(k===e)return new fe(null,k,2,[c,d,g,h]);var l=new Nd;return Xd.ia(a,b,k,c,d,l).ia(a,b,e,g,h,l)}function ge(a,b,c,d,e){this.l=a;this.la=b;this.i=c;this.u=d;this.m=e;this.f=32374988;this.o=0}f=ge.prototype;f.toString=function(){return rb(this)}; +f.indexOf=function(){var a=null;a=function(b,c){switch(arguments.length){case 1:return S(this,b,0);case 2:return S(this,b,c)}throw Error("Invalid arity: "+arguments.length);};a.a=function(b){return S(this,b,0)};a.b=function(b,c){return S(this,b,c)};return a}(); +f.lastIndexOf=function(){function a(c){return U(this,c,T(this))}var b=null;b=function(c,d){switch(arguments.length){case 1:return a.call(this,c);case 2:return U(this,c,d)}throw Error("Invalid arity: "+arguments.length);};b.a=a;b.b=function(c,d){return U(this,c,d)};return b}();f.H=function(){return this.l};f.V=function(){if(null==this.u){var a=this.la,b=this.i+2;return he?he(a,b,null):Wd.call(null,a,b,null)}a=this.la;b=this.i;var c=P(this.u);return he?he(a,b,c):Wd.call(null,a,b,c)}; +f.G=function(){var a=this.m;return null!=a?a:this.m=a=Ib(this)};f.D=function(a,b){return Xb(this,b)};f.U=function(){return O};f.X=function(a,b){return qc(b,this)};f.Y=function(a,b,c){return tc(b,c,this)};f.aa=function(){return null==this.u?new Bd(this.la[this.i],this.la[this.i+1]):N(this.u)}; +f.ba=function(){var a=this,b=null==a.u?function(){var c=a.la,d=a.i+2;return he?he(c,d,null):Wd.call(null,c,d,null)}():function(){var c=a.la,d=a.i,e=P(a.u);return he?he(c,d,e):Wd.call(null,c,d,e)}();return null!=b?b:O};f.F=function(){return this};f.N=function(a,b){return b===this.l?this:new ge(b,this.la,this.i,this.u,this.m)};f.S=function(a,b){return V(b,this)};ge.prototype[za]=function(){return Hb(this)}; +function Wd(a){switch(arguments.length){case 1:return Vd(arguments[0]);case 3:return he(arguments[0],arguments[1],arguments[2]);default:throw Error(["Invalid arity: ",z.a(arguments.length)].join(""));}}function Vd(a){return he(a,0,null)}function he(a,b,c){if(null==c)for(c=a.length;;)if(bpa)return F(a,"#");F(a,c);if(0===wa.a(g))J(h)&&F(a,function(){var t=se.a(g);return v(t)?t:"..."}());else{if(J(h)){var l=N(h);b.g?b.g(l,a,g):b.call(null,l,a,g)}for(var m=P(h),n=wa.a(g)-1;;)if(!m||null!=n&&0===n){J(m)&&0===n&&(F(a,d),F(a,function(){var t=se.a(g);return v(t)?t:"..."}()));break}else{F(a,d);var p=N(m);c=a;h=g;b.g?b.g(p,c,h):b.call(null,p,c,h);var q=P(m);c=n-1;m=q;n=c}}return F(a,e)}finally{pa=k}} +function te(a,b){b=J(b);for(var c=null,d=0,e=0;;)if(ek)h=new X(null,k,5,Yc,h,null);else for(var l=32,m=(new X(null,32,5,Yc,h.slice(0,32),null)).Ra(null);;)if(ljs cors-options))) + (.use app (cookie-parser js/process.env.COOKIE_SECRET)) + (.use app "/api" router) + (.listen app 3000 (fn [] (println "Example app listening on port 3000!"))))) + +(defn start! [] + ;; called by main and after reloading code + (reset! server (start-server))) + +(defn stop! [] + ;; called before reloading code + (.close @server) + (reset! server nil)) + +(defn -main [] + ;; executed once, on startup, can do one time setup here + (start!)) diff --git a/api/src/server/router.cljs b/api/src/server/router.cljs new file mode 100644 index 0000000000..9cb4d112a0 --- /dev/null +++ b/api/src/server/router.cljs @@ -0,0 +1,67 @@ +(ns server.router + (:require ["express" :as express] + [goog.object :as gobj] + ["request" :as request])) + +(def router (express/Router.)) + +(def config + {:client_id js/process.env.GITHUB_APP_KEY + :client_secret js/process.env.GITHUB_APP_SECRET + :redirect_uri js/process.env.GITHUB_REDIRECT_URI}) + +;; utils +(def dev? ^boolean goog.DEBUG) + +(def cookie-domain (if dev? "" ".gitnotes.now.sh")) + +(def cookie-options + {:maxAge (* 1000 60 60 24 30) ; 30 days + :httpOnly true + :signed true + :secure (not dev?) + :path "/" + :domain cookie-domain}) + +(.get router "/login/github" + (fn [req res] + (let [oauth-url + (str "https://github.com/login/oauth/authorize?response_type=code&client_id=" + (:client_id config) + "&redirect_uri=" + (:redirect_uri config) + "&scope=user%3Aemail%2Crepo")] + (.redirect res 301 oauth-url)))) + +(.get router "/oauth/github" + (fn [req res] + (let [code (gobj/getValueByKeys req "query" "code") + req-url "https://github.com/login/oauth/access_token" + options {:headers {:Content-Type "application/json" + :Accept "application/json"} + :body (js/JSON.stringify + (clj->js (assoc config :code code)))}] + (request req-url (clj->js options) + (fn [error response] + (if error + (.send res #js {:success false + :error error}) + (let [body (js/JSON.parse (gobj/get response "body"))] + (if-let [error (gobj/get body "error")] + (.send res #js {:success false + :error error}) + (let [access-token (gobj/get body "access_token")] + (.cookie res "id" access-token #js {:signed true}) + (.send res #js {:success true + :body body})))))))))) + +(.get router "/token/github" + (fn [req res] + (js/console.dir req) + ;; get access token from the cookie + ;; req.cookies.cookie1 + (if-let [access-token (gobj/getValueByKeys req "signedCookies" "id")] + (.send res #js {:success true + :body #js {:access_token access-token}}) + (.send res #js {:success false + :error "No cookies"})))) diff --git a/api/yarn.lock b/api/yarn.lock index 399dfd8975..f1ef11340b 100644 --- a/api/yarn.lock +++ b/api/yarn.lock @@ -25,6 +25,15 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -37,6 +46,19 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -52,6 +74,11 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -59,6 +86,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -75,6 +107,89 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" @@ -85,6 +200,14 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -92,6 +215,16 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -104,6 +237,14 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +cookie-parser@^1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" + integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== + dependencies: + cookie "0.4.0" + cookie-signature "1.0.6" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -114,7 +255,7 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== -core-util-is@1.0.2: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -127,6 +268,54 @@ cors@^2.8.5: object-assign "^4" vary "^1" +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -151,11 +340,33 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -169,6 +380,19 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +elliptic@^6.0.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -184,6 +408,19 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +events@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -302,6 +539,31 @@ har-validator@~5.1.3: ajv "^6.5.5" har-schema "^2.0.0" +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -333,6 +595,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -340,12 +607,22 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inherits@2.0.4: +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -360,6 +637,16 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -395,6 +682,15 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -410,6 +706,14 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@1.43.0: version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" @@ -427,6 +731,28 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" + integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== + dependencies: + minimist "^1.2.5" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -442,12 +768,46 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +node-fetch@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -459,21 +819,69 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -483,9 +891,31 @@ proxy-addr@~2.0.5: ipaddr.js "1.9.1" psl@^1.1.28: - version "1.7.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" - integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" @@ -502,6 +932,31 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -517,6 +972,24 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readline-sync@^1.4.7: + version "1.4.10" + resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" + integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== + request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -543,12 +1016,20 @@ request@^2.88.2: tunnel-agent "^0.6.0" uuid "^3.3.2" -safe-buffer@5.1.2: +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.2: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -587,11 +1068,54 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shadow-cljs-jar@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.2.tgz#97273afe1747b6a2311917c1c88d9e243c81957b" + integrity sha512-XmeffAZHv8z7451kzeq9oKh8fh278Ak+UIOGGrapyqrFBB773xN8vMQ3O7J7TYLnb9BUwcqadKkmgaq7q6fhZg== + +shadow-cljs@2.8.93: + version "2.8.93" + resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.8.93.tgz#60d475658819246892f74159ce5a6026b275892e" + integrity sha512-JWxdfLZextA55oo/ZkTt+D5aszaNs0UR/V7j/jKI7aSbc46uJrycSalkQEvTzFkr+E7BiLdBsI6zBqezRgEgDw== + dependencies: + mkdirp "^0.5.1" + node-libs-browser "^2.0.0" + readline-sync "^1.4.7" + shadow-cljs-jar "1.3.2" + source-map-support "^0.4.15" + which "^1.3.1" + ws "^3.0.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -612,6 +1136,51 @@ sshpk@^1.7.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +string_decoder@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -625,6 +1194,11 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -645,6 +1219,11 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -657,6 +1236,33 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -680,3 +1286,29 @@ verror@1.10.0: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== diff --git a/build.sh b/build.sh new file mode 100755 index 0000000000..a3f582f770 --- /dev/null +++ b/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +cd api && yarn release +cd ../web +yarn clean && yarn release +cd ../ +now diff --git a/frontend/deploy.sh b/frontend/deploy.sh deleted file mode 100755 index 028bdff95f..0000000000 --- a/frontend/deploy.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -yarn clean && yarn release - -cd public && now -n gitnotes -cd .. diff --git a/frontend/src/frontend/api.cljs b/frontend/src/frontend/api.cljs deleted file mode 100644 index 8ead3ea3b7..0000000000 --- a/frontend/src/frontend/api.cljs +++ /dev/null @@ -1,135 +0,0 @@ -(ns frontend.api - (:require [clojure.string :as str] - [cognitect.transit :as t] - [clojure.walk :as walk] - [goog.events :as events] - [frontend.config :as config]) - (:import [goog.net XhrIo EventType])) - -(defn parse-headers [headers] - (reduce - #(let [[k v] (str/split %2 #":\s+")] - (if (or (str/blank? k) (str/blank? v)) - %1 (assoc %1 (str/lower-case k) v))) - {} (str/split (or headers "") #"(\n)|(\r)|(\r\n)|(\n\r)"))) - -;; goog.net.ErrorCode constants to CLJS keywords -(def error-kw - {0 :no-error - 1 :access-denied - 2 :file-not-found - 3 :ff-silent-error - 4 :custom-error - 5 :exception - 6 :http-error - 7 :abort - 8 :timeout - 9 :offline}) - -(defn to-transit - "Serialization for clojure data." - [msg] - (let [writer (t/writer :json)] - (t/write writer msg))) - -(defn from-transit - "Deserialization for clojure data." - [in keywordize?] - (let [reader (t/reader :json)] - (cond-> (t/read reader in) - keywordize? - (walk/keywordize-keys)))) - -(defn from-json - [in] - (-> in - js/JSON.parse - (js->clj :keywordize-keys true))) - -(defn to-json [params] - (.stringify js/JSON (clj->js params))) - -(defn- type->header [type] - (case type - :text {"Content-Type" "text/plain"} - :edn {"Content-Type" "application/edn"} - :transit {"Content-Type" "application/transit+json" - "Accept" "application/transit+json"} - nil)) - -(defn- token->header [token] - (if token - {"Authorization" (str "Bearer " token)} - {})) - -(defn fetch [api-host {:keys [endpoint params method type headers token on-success on-error - on-progress on-upload on-download - keywordize?] - :or {method :post - type :transit - endpoint nil - keywordize? true} - :as args}] - (let [xhr (XhrIo.) - ;; (doto (XhrIo.) - ;; (.setTimeoutInterval 5000)) - named-method (str/upper-case (name method)) - body (case type - :json (to-json params) - :edn (pr-str params) - :transit (to-transit params) - :raw params) - headers (merge (type->header type) - headers - ;; (token->header token) - )] - (when (or on-upload on-download) - (.setProgressEventsEnabled xhr true) - ;; (events/listen xhr EventType.PROGRESS - ;; (fn [e] - ;; (on-progress {:loaded (.-loaded e) - ;; :total (.-total e)}))) - (when on-upload - (events/listen xhr EventType.UPLOAD_PROGRESS on-upload)) - (when on-download - (events/listen xhr EventType.DOWNLOAD_PROGRESS on-download))) - (events/listen xhr EventType.COMPLETE - (fn [e] - (let [target ^js (.-target e) - ] - (if (.isSuccess target) - (let [body (from-transit (.getResponseText target) keywordize?)] - (on-success body)) - (let [response {:status (.getStatus target) - :success (.isSuccess target) - :body (.getResponseText target) - :headers (parse-headers (.getAllResponseHeaders target)) - :error-code (error-kw (.getLastErrorCode target)) - :error-text (.getLastError target)}]))))) - (.send xhr (str api-host endpoint) - named-method - body - headers - ;; ;; timeoutInterval - ;; 5000 - ;; ;; withCredentials - ;; true - ))) - -(defn get-me - [on-success on-error] - (fetch config/api - {:endpoint "me" - :method :get - :on-success on-success - :on-error on-error})) - -;; TODO: add spec -(defn add-repo - [url on-success on-error] - (fetch config/api - {:endpoint "repos" - :method :post - :params {:url url} - :on-success on-success - :on-error on-error})) diff --git a/now.json b/now.json new file mode 100644 index 0000000000..762b9deb3a --- /dev/null +++ b/now.json @@ -0,0 +1,19 @@ +{ + "version": 2, + "env": { + "NODE_ENV": "production", + "GITHUB_APP_KEY": "@github_app_key", + "GITHUB_APP_SECRET": "@github_app_secret", + "GITHUB_REDIRECT_URI": "@github_redirect_uri", + "COOKIE_SECRET": "@cookie_secret" + }, + "builds": [ + { "src": "api/index.js", "use": "@now/node"}, + { "src": "/public/**", "use": "@now/static"} + ], + "routes": [ + { "src": "/api(.*)", "dest": "api/index.js" }, + { "src": "/(.+js|.+css|.+png|.+ico|robots.txt)", "dest": "/public/$1" }, + { "src": "/(.*)", "dest": "/public/index.html" } + ] +} diff --git a/public b/public new file mode 120000 index 0000000000..1abdadb9ce --- /dev/null +++ b/public @@ -0,0 +1 @@ +web/public \ No newline at end of file diff --git a/frontend/.gitignore b/web/.gitignore similarity index 100% rename from frontend/.gitignore rename to web/.gitignore diff --git a/frontend/deps.edn b/web/deps.edn similarity index 100% rename from frontend/deps.edn rename to web/deps.edn diff --git a/frontend/dev/shadow/hooks.clj b/web/dev/shadow/hooks.clj similarity index 100% rename from frontend/dev/shadow/hooks.clj rename to web/dev/shadow/hooks.clj diff --git a/web/dev/shadow/user.clj b/web/dev/shadow/user.clj new file mode 100644 index 0000000000..84dd6be423 --- /dev/null +++ b/web/dev/shadow/user.clj @@ -0,0 +1,7 @@ +(ns shadow.user + (:require [shadow.cljs.devtools.api :as api])) + +(defn cljs-repl + [] + (api/watch :app) + (api/repl :app)) diff --git a/frontend/images/screenshot.png b/web/images/screenshot.png similarity index 100% rename from frontend/images/screenshot.png rename to web/images/screenshot.png diff --git a/frontend/package-lock.json b/web/package-lock.json similarity index 100% rename from frontend/package-lock.json rename to web/package-lock.json diff --git a/frontend/package.json b/web/package.json similarity index 100% rename from frontend/package.json rename to web/package.json diff --git a/frontend/public/css/highlight.css b/web/public/css/highlight.css similarity index 100% rename from frontend/public/css/highlight.css rename to web/public/css/highlight.css diff --git a/frontend/public/css/style.css b/web/public/css/style.css similarity index 100% rename from frontend/public/css/style.css rename to web/public/css/style.css diff --git a/frontend/public/css/tailwind.min.css b/web/public/css/tailwind.min.css similarity index 100% rename from frontend/public/css/tailwind.min.css rename to web/public/css/tailwind.min.css diff --git a/frontend/public/favicon.ico b/web/public/favicon.ico similarity index 100% rename from frontend/public/favicon.ico rename to web/public/favicon.ico diff --git a/frontend/public/img/angled-background.svg b/web/public/img/angled-background.svg similarity index 100% rename from frontend/public/img/angled-background.svg rename to web/public/img/angled-background.svg diff --git a/frontend/public/img/hero-pattern-lg.png b/web/public/img/hero-pattern-lg.png similarity index 100% rename from frontend/public/img/hero-pattern-lg.png rename to web/public/img/hero-pattern-lg.png diff --git a/frontend/public/index.html b/web/public/index.html similarity index 100% rename from frontend/public/index.html rename to web/public/index.html diff --git a/frontend/shadow-cljs.edn b/web/shadow-cljs.edn similarity index 79% rename from frontend/shadow-cljs.edn rename to web/shadow-cljs.edn index e5a47b4f73..68cd371b72 100644 --- a/frontend/shadow-cljs.edn +++ b/web/shadow-cljs.edn @@ -22,10 +22,11 @@ :compiler-options {:infer-externs :auto :externs ["datascript/externs.js"]} - :build-hooks [(shadow.hooks/purge-css - {:css-source "node_modules/tailwindcss/dist/tailwind.min.css" - :js-globs ["public/js/*.js"] - :public-dir "public/css"})] + ;; TODO: purge-css not working properly + ;; :build-hooks [(shadow.hooks/purge-css + ;; {:css-source "node_modules/tailwindcss/dist/tailwind.min.css" + ;; :js-globs ["public/js/*.js"] + ;; :public-dir "public/css"})] :devtools ;; before live-reloading any code call this function {:before-load frontend.core/stop diff --git a/frontend/src/frontend/components/agenda.cljs b/web/src/frontend/components/agenda.cljs similarity index 100% rename from frontend/src/frontend/components/agenda.cljs rename to web/src/frontend/components/agenda.cljs diff --git a/frontend/src/frontend/components/auth.cljs b/web/src/frontend/components/auth.cljs similarity index 100% rename from frontend/src/frontend/components/auth.cljs rename to web/src/frontend/components/auth.cljs diff --git a/frontend/src/frontend/components/file.cljs b/web/src/frontend/components/file.cljs similarity index 100% rename from frontend/src/frontend/components/file.cljs rename to web/src/frontend/components/file.cljs diff --git a/frontend/src/frontend/components/home.cljs b/web/src/frontend/components/home.cljs similarity index 94% rename from frontend/src/frontend/components/home.cljs rename to web/src/frontend/components/home.cljs index 5202d09188..115e38d604 100644 --- a/frontend/src/frontend/components/home.cljs +++ b/web/src/frontend/components/home.cljs @@ -70,8 +70,12 @@ [:p.text-sm.text-gray-500.leading-tight "Author of Refactoring UI"]]]]]]]) -(rum/defq home < - {:q (fn [_state] (db/sub-github-token))} +(rum/defq home < (rum/local false ::loading?) + {:will-mount (fn [state] + (when-not (db/get-github-token) + (handler/get-github-access-token)) + state) + :q (fn [_state] (db/sub-github-token))} [state {:keys [:github/token]}] (if token (sidebar/sidebar (sidebar/main-content)) diff --git a/frontend/src/frontend/components/repo.cljs b/web/src/frontend/components/repo.cljs similarity index 100% rename from frontend/src/frontend/components/repo.cljs rename to web/src/frontend/components/repo.cljs diff --git a/frontend/src/frontend/components/settings.cljs b/web/src/frontend/components/settings.cljs similarity index 100% rename from frontend/src/frontend/components/settings.cljs rename to web/src/frontend/components/settings.cljs diff --git a/frontend/src/frontend/components/sidebar.cljs b/web/src/frontend/components/sidebar.cljs similarity index 100% rename from frontend/src/frontend/components/sidebar.cljs rename to web/src/frontend/components/sidebar.cljs diff --git a/frontend/src/frontend/config.cljs b/web/src/frontend/config.cljs similarity index 61% rename from frontend/src/frontend/config.cljs rename to web/src/frontend/config.cljs index a8ce9f8b01..a8cd3ebd19 100644 --- a/frontend/src/frontend/config.cljs +++ b/web/src/frontend/config.cljs @@ -6,8 +6,9 @@ (def website (if dev? "http://localhost:8080" - "https://gitnotes.tiensonqin.now.sh']")) + "https://gitnotes.now.sh")) + (def api (if dev? - "http://localhost:3001/" - "https://github-oauth.tiensonqin.now.sh/")) + "http://localhost:3000/api/" + (str website "/api/"))) diff --git a/frontend/src/frontend/core.cljs b/web/src/frontend/core.cljs similarity index 92% rename from frontend/src/frontend/core.cljs rename to web/src/frontend/core.cljs index 3bba5f8632..bf10e16c90 100644 --- a/frontend/src/frontend/core.cljs +++ b/web/src/frontend/core.cljs @@ -16,8 +16,8 @@ (defn start [] (rum/mount - (page/current-page) - (.getElementById js/document "root")) + (page/current-page) + (.getElementById js/document "root")) (set-router!)) (defn ^:export init [] diff --git a/frontend/src/frontend/db.cljs b/web/src/frontend/db.cljs similarity index 100% rename from frontend/src/frontend/db.cljs rename to web/src/frontend/db.cljs diff --git a/frontend/src/frontend/format.cljs b/web/src/frontend/format.cljs similarity index 100% rename from frontend/src/frontend/format.cljs rename to web/src/frontend/format.cljs diff --git a/frontend/src/frontend/format/markdown.cljs b/web/src/frontend/format/markdown.cljs similarity index 100% rename from frontend/src/frontend/format/markdown.cljs rename to web/src/frontend/format/markdown.cljs diff --git a/frontend/src/frontend/format/org/block.cljs b/web/src/frontend/format/org/block.cljs similarity index 100% rename from frontend/src/frontend/format/org/block.cljs rename to web/src/frontend/format/org/block.cljs diff --git a/frontend/src/frontend/format/org_mode.cljs b/web/src/frontend/format/org_mode.cljs similarity index 100% rename from frontend/src/frontend/format/org_mode.cljs rename to web/src/frontend/format/org_mode.cljs diff --git a/frontend/src/frontend/format/protocol.cljs b/web/src/frontend/format/protocol.cljs similarity index 100% rename from frontend/src/frontend/format/protocol.cljs rename to web/src/frontend/format/protocol.cljs diff --git a/frontend/src/frontend/fs.cljs b/web/src/frontend/fs.cljs similarity index 100% rename from frontend/src/frontend/fs.cljs rename to web/src/frontend/fs.cljs diff --git a/frontend/src/frontend/git.cljs b/web/src/frontend/git.cljs similarity index 100% rename from frontend/src/frontend/git.cljs rename to web/src/frontend/git.cljs diff --git a/frontend/src/frontend/handler.cljs b/web/src/frontend/handler.cljs similarity index 92% rename from frontend/src/frontend/handler.cljs rename to web/src/frontend/handler.cljs index 90d70b980a..f5e8098825 100644 --- a/frontend/src/frontend/handler.cljs +++ b/web/src/frontend/handler.cljs @@ -12,7 +12,6 @@ [clojure.walk :as walk] [clojure.string :as string] [promesa.core :as p] - [frontend.api :as api] [cljs-bean.core :as bean] [reitit.frontend.easy :as rfe]) (:import [goog.events EventHandler])) @@ -286,17 +285,25 @@ (swap! state/state assoc :route-match route)) (defn get-github-access-token - [code] - (util/fetch (str config/api "api/oauth/github?code=" code) - (fn [resp] - (if (:success resp) - (do - (db/transact-github-token! (get-in resp [:body :access_token])) - ;; redirect to home - (rfe/push-state :home)) - (prn "Get token failed, error: " resp))) - (fn [error] - (prn "Get token failed, error: " error)))) + ([] + (util/fetch (str config/api "token/github") + (fn [resp] + (if (:success resp) + (db/transact-github-token! (get-in resp [:body :access_token])) + (prn "Get token failed, error: " resp))) + (fn [error] + (prn "Get token failed, error: " error)))) + ([code] + (util/fetch (str config/api "oauth/github?code=" code) + (fn [resp] + (if (:success resp) + (do + (db/transact-github-token! (get-in resp [:body :access_token])) + ;; redirect to home + (rfe/push-state :home)) + (prn "Get token failed, error: " resp))) + (fn [error] + (prn "Get token failed, error: " error))))) (defn init-db! [] diff --git a/frontend/src/frontend/mixins.cljs b/web/src/frontend/mixins.cljs similarity index 100% rename from frontend/src/frontend/mixins.cljs rename to web/src/frontend/mixins.cljs diff --git a/frontend/src/frontend/page.cljs b/web/src/frontend/page.cljs similarity index 100% rename from frontend/src/frontend/page.cljs rename to web/src/frontend/page.cljs diff --git a/frontend/src/frontend/posh.cljs b/web/src/frontend/posh.cljs similarity index 100% rename from frontend/src/frontend/posh.cljs rename to web/src/frontend/posh.cljs diff --git a/frontend/src/frontend/routes.cljs b/web/src/frontend/routes.cljs similarity index 100% rename from frontend/src/frontend/routes.cljs rename to web/src/frontend/routes.cljs diff --git a/frontend/src/frontend/rum.cljs b/web/src/frontend/rum.cljs similarity index 100% rename from frontend/src/frontend/rum.cljs rename to web/src/frontend/rum.cljs diff --git a/frontend/src/frontend/state.cljs b/web/src/frontend/state.cljs similarity index 100% rename from frontend/src/frontend/state.cljs rename to web/src/frontend/state.cljs diff --git a/frontend/src/frontend/storage.cljs b/web/src/frontend/storage.cljs similarity index 100% rename from frontend/src/frontend/storage.cljs rename to web/src/frontend/storage.cljs diff --git a/frontend/src/frontend/ui.cljs b/web/src/frontend/ui.cljs similarity index 100% rename from frontend/src/frontend/ui.cljs rename to web/src/frontend/ui.cljs diff --git a/frontend/src/frontend/util.cljs b/web/src/frontend/util.cljs similarity index 100% rename from frontend/src/frontend/util.cljs rename to web/src/frontend/util.cljs diff --git a/frontend/yarn.lock b/web/yarn.lock similarity index 100% rename from frontend/yarn.lock rename to web/yarn.lock