From 974fa1660adac0c5046cfddbae60851adca55c83 Mon Sep 17 00:00:00 2001 From: Marcus Noble Date: Sun, 22 Mar 2020 13:51:40 +0000 Subject: [PATCH] Initial commit --- .dockerignore | 3 ++ .gitignore | 3 ++ Dockerfile | 15 ++++++++ Makefile | 18 +++++++++ failure.html | 29 +++++++++++++++ index.html | 54 +++++++++++++++++++++++++++ index.js | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ manifest.json | 26 +++++++++++++ package.json | 18 +++++++++ rocket.png | Bin 0 -> 45460 bytes success.html | 29 +++++++++++++++ sw-toolbox.js | 16 ++++++++ sw.js | 3 ++ 13 files changed, 314 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 failure.html create mode 100644 index.html create mode 100644 index.js create mode 100644 manifest.json create mode 100644 package.json create mode 100644 rocket.png create mode 100644 success.html create mode 100644 sw-toolbox.js create mode 100644 sw.js diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9c5c92f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +node_modules +.env +Makefile diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..992f45f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.env +node_modules +.DS_Store diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a1f6020 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM node:10-alpine + +RUN apk add --no-cache chromium nss freetype freetype-dev harfbuzz ca-certificates ttf-freefont + +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true +ENV CHROMIUM_PATH "/usr/bin/chromium-browser" + +WORKDIR /app + +ADD package.json . +RUN npm install + +ADD . . + +CMD npm start diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3a78a3b --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +.DEFAULT_GOAL := default + +IMAGE := docker.cloud.cluster.fun/averagemarcus/website-to-remarkable:latest + +.PHONY: docker-build # Build the docker image +docker-build: + @docker build -t $(IMAGE) . + +.PHONY: publish # Publish the docker image to the Artifactory registry +publish: + @docker push $(IMAGE) + +.PHONY: help # Show this list of commands +help: + @grep '^.PHONY: .* #' Makefile | sed 's/\.PHONY: \(.*\) # \(.*\)/\1: \2/' | expand -t20 + +default: format test build + diff --git a/failure.html b/failure.html new file mode 100644 index 0000000..d325eca --- /dev/null +++ b/failure.html @@ -0,0 +1,29 @@ + + + + + + + Website to reMarkable + + + +

⚠️

+

Failed to send to reMarkable

+ + diff --git a/index.html b/index.html new file mode 100644 index 0000000..5ee539b --- /dev/null +++ b/index.html @@ -0,0 +1,54 @@ + + + + + + + Website to reMarkable + + + + +

🚀

+ + + + + + + + + + diff --git a/index.js b/index.js new file mode 100644 index 0000000..df5bc3e --- /dev/null +++ b/index.js @@ -0,0 +1,100 @@ +require("dotenv").config(); +const http = require('http'); +const fs = require("fs"); +const puppeteer = require('puppeteer'); +const { Remarkable } = require('remarkable-typescript'); + +const client = new Remarkable({ token: process.env.REMARKABLE_TOKEN }); + +const server = http.createServer(async (req, res) => { + const incomingURL = new URL(`http://localhost:8000${req.url}`); + + if (incomingURL.searchParams.get("website")) { + const website = new URL(incomingURL.searchParams.get("website")); + console.log(`Fetching '${website.toString()}'`); + if (await sendPage(website)) { + fs.readFile(__dirname + "/success.html", function (err,data) { + if (err) { + res.writeHead(404); + res.end(JSON.stringify(err)); + return; + } + res.writeHead(200, {'Content-Type': 'text/html'}); + res.end(data); + }); + } else { + fs.readFile(__dirname + "/failure.html", function (err,data) { + if (err) { + res.writeHead(404); + res.end(JSON.stringify(err)); + return; + } + res.writeHead(500, {'Content-Type': 'text/html'}); + res.end(data); + }); + } + }else { + let url = req.url === "/" ? "/index.html": req.url; + fs.readFile(__dirname + url || "/index.html", function (err,data) { + if (err) { + res.writeHead(404); + res.end(JSON.stringify(err)); + return; + } + + if (url.endsWith(".js")) { + res.writeHead(200, {'Content-Type': 'application/javascript'}); + } else if (url.endsWith(".json")) { + res.writeHead(200, {'Content-Type': 'application/json'}); + } else if (url.endsWith(".png")) { + res.writeHead(200, {'Content-Type': 'image/png'}); + } else { + res.writeHead(200, {'Content-Type': 'text/html'}); + } + + res.end(data); + }); + } +}); + +server.listen(8000); + +async function sendPage(website, tries = 0) { + const browser = await puppeteer.launch({ + executablePath: process.env.CHROMIUM_PATH, + args: ['--disable-dev-shm-usage', '--no-sandbox'] + }); + try { + const page = await browser.newPage(); + await page.emulate(Object.assign({}, puppeteer.devices["iPad Pro"], { userAgent: "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" })); + await page.goto(website.toString()); + const title = await page.title() + console.log("Page loaded. Title - " + title) + + await page.evaluate( function(){ + [...document.querySelectorAll('*')].forEach(node => { + const pos = window.getComputedStyle(node).getPropertyValue("position"); + if (pos == "fixed" || pos == "sticky") { + node.style.position = "unset"; + } + }) + } ); + + const myPDF = await page.pdf({ format: 'A3' }); + console.log("Saved to PDF") + + await client.uploadPDF(title, myPDF); + console.log("Uploaded to reMarkable"); + + return true; + } catch (ex) { + console.log(ex); + if (tries < 5) { + return await sendPage(website, ++tries); + } else { + return false; + } + } finally { + await browser.close(); + } +} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..346f5f5 --- /dev/null +++ b/manifest.json @@ -0,0 +1,26 @@ +{ + "name": "Website-to-reMarkable", + "short_name": "Website-to-reMarkable", + "description": "Send websites as PDFs to reMarkable", + "theme_color": "#999", + "background_color": "#999", + "display": "standalone", + "scope": "/", + "start_url": "/", + "icons": [ + { + "src": "rocket.png", + "sizes": "192x192", + "type": "image/png" + } + ], + "splash_pages": null, + "share_target": { + "action": "/", + "method": "GET", + "params": { + "url": "website", + "text": "website" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3013050 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "website-to-remarkable", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "node index.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "crypto-random-string": "^3.2.0", + "dotenv": "^8.2.0", + "express": "^4.17.1", + "puppeteer": "^2.1.1", + "remarkable-typescript": "^1.0.5" + } +} diff --git a/rocket.png b/rocket.png new file mode 100644 index 0000000000000000000000000000000000000000..3188cb87585f49a2969738930f058198ee1bd293 GIT binary patch literal 45460 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

aNpuzoqU5SY5thAJc*3o%fNKREs6-30K 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 Z{~r^T>RTRb)jj|K002ovPDHLkV1i#= + + + + + + Website to reMarkable + + + +

🚀

+

Sent to reMarkable

+ + diff --git a/sw-toolbox.js b/sw-toolbox.js new file mode 100644 index 0000000..dacb855 --- /dev/null +++ b/sw-toolbox.js @@ -0,0 +1,16 @@ +/* + Copyright 2016 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.toolbox=e()}}(function(){return function e(t,n,r){function o(c,s){if(!n[c]){if(!t[c]){var a="function"==typeof require&&require;if(!s&&a)return a(c,!0);if(i)return i(c,!0);var u=new Error("Cannot find module '"+c+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[c]={exports:{}};t[c][0].call(f.exports,function(e){var n=t[c][1][e];return o(n||e)},f,f.exports,e,t,n,r)}return n[c].exports}for(var i="function"==typeof require&&require,c=0;ct.value[l]){var r=t.value[p];c.push(r),a.delete(r),t.continue()}},s.oncomplete=function(){r(c)},s.onabort=o}):Promise.resolve([])}function s(e,t){return t?new Promise(function(n,r){var o=[],i=e.transaction(h,"readwrite"),c=i.objectStore(h),s=c.index(l),a=s.count();s.count().onsuccess=function(){var e=a.result;e>t&&(s.openCursor().onsuccess=function(n){var r=n.target.result;if(r){var i=r.value[p];o.push(i),c.delete(i),e-o.length>t&&r.continue()}})},i.oncomplete=function(){n(o)},i.onabort=r}):Promise.resolve([])}function a(e,t,n,r){return c(e,n,r).then(function(n){return s(e,t).then(function(e){return n.concat(e)})})}var u="sw-toolbox-",f=1,h="store",p="url",l="timestamp",d={};t.exports={getDb:o,setTimestampForUrl:i,expireEntries:a}},{}],3:[function(e,t,n){"use strict";function r(e){var t=a.match(e.request);t?e.respondWith(t(e.request)):a.default&&"GET"===e.request.method&&0===e.request.url.indexOf("http")&&e.respondWith(a.default(e.request))}function o(e){s.debug("activate event fired");var t=u.cache.name+"$$$inactive$$$";e.waitUntil(s.renameCache(t,u.cache.name))}function i(e){return e.reduce(function(e,t){return e.concat(t)},[])}function c(e){var t=u.cache.name+"$$$inactive$$$";s.debug("install event fired"),s.debug("creating cache ["+t+"]"),e.waitUntil(s.openCache({cache:{name:t}}).then(function(e){return Promise.all(u.preCacheItems).then(i).then(s.validatePrecacheInput).then(function(t){return s.debug("preCache list: "+(t.join(", ")||"(none)")),e.addAll(t)})}))}e("serviceworker-cache-polyfill");var s=e("./helpers"),a=e("./router"),u=e("./options");t.exports={fetchListener:r,activateListener:o,installListener:c}},{"./helpers":1,"./options":4,"./router":6,"serviceworker-cache-polyfill":16}],4:[function(e,t,n){"use strict";var r;r=self.registration?self.registration.scope:self.scope||new URL("./",self.location).href,t.exports={cache:{name:"$$$toolbox-cache$$$"+r+"$$$",maxAgeSeconds:null,maxEntries:null,queryOptions:null},debug:!1,networkTimeoutSeconds:null,preCacheItems:[],successResponses:/^0|([123]\d\d)|(40[14567])|410$/}},{}],5:[function(e,t,n){"use strict";var r=new URL("./",self.location),o=r.pathname,i=e("path-to-regexp"),c=function(e,t,n,r){t instanceof RegExp?this.fullUrlRegExp=t:(0!==t.indexOf("/")&&(t=o+t),this.keys=[],this.regexp=i(t,this.keys)),this.method=e,this.options=r,this.handler=n};c.prototype.makeHandler=function(e){var t;if(this.regexp){var n=this.regexp.exec(e);t={},this.keys.forEach(function(e,r){t[e.name]=n[r+1]})}return function(e){return this.handler(e,t,this.options)}.bind(this)},t.exports=c},{"path-to-regexp":15}],6:[function(e,t,n){"use strict";function r(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var o=e("./route"),i=e("./helpers"),c=function(e,t){for(var n=e.entries(),r=n.next(),o=[];!r.done;){new RegExp(r.value[0]).test(t)&&o.push(r.value[1]),r=n.next()}return o},s=function(){this.routes=new Map,this.routes.set(RegExp,new Map),this.default=null};["get","post","put","delete","head","any"].forEach(function(e){s.prototype[e]=function(t,n,r){return this.add(e,t,n,r)}}),s.prototype.add=function(e,t,n,c){c=c||{};var s;t instanceof RegExp?s=RegExp:(s=c.origin||self.location.origin,s=s instanceof RegExp?s.source:r(s)),e=e.toLowerCase();var a=new o(e,t,n,c);this.routes.has(s)||this.routes.set(s,new Map);var u=this.routes.get(s);u.has(e)||u.set(e,new Map);var f=u.get(e),h=a.regexp||a.fullUrlRegExp;f.has(h.source)&&i.debug('"'+t+'" resolves to same regex as existing route.'),f.set(h.source,a)},s.prototype.matchMethod=function(e,t){var n=new URL(t),r=n.origin,o=n.pathname;return this._match(e,c(this.routes,r),o)||this._match(e,[this.routes.get(RegExp)],t)},s.prototype._match=function(e,t,n){if(0===t.length)return null;for(var r=0;r0)return s[0].makeHandler(n)}}return null},s.prototype.match=function(e){return this.matchMethod(e.method,e.url)||this.matchMethod("any",e.url)},t.exports=new s},{"./helpers":1,"./route":5}],7:[function(e,t,n){"use strict";function r(e,t,n){n=n||{};var r=n.cache||o.cache,c=r.queryOptions;return i.debug("Strategy: cache first ["+e.url+"]",n),i.openCache(n).then(function(t){return t.match(e,c).then(function(t){var o=Date.now();return i.isResponseFresh(t,r.maxAgeSeconds,o)?t:i.fetchAndCache(e,n)})})}var o=e("../options"),i=e("../helpers");t.exports=r},{"../helpers":1,"../options":4}],8:[function(e,t,n){"use strict";function r(e,t,n){n=n||{};var r=n.cache||o.cache,c=r.queryOptions;return i.debug("Strategy: cache only ["+e.url+"]",n),i.openCache(n).then(function(t){return t.match(e,c).then(function(e){var t=Date.now();if(i.isResponseFresh(e,r.maxAgeSeconds,t))return e})})}var o=e("../options"),i=e("../helpers");t.exports=r},{"../helpers":1,"../options":4}],9:[function(e,t,n){"use strict";function r(e,t,n){return o.debug("Strategy: fastest ["+e.url+"]",n),new Promise(function(r,c){var s=!1,a=[],u=function(e){a.push(e.toString()),s?c(new Error('Both cache and network failed: "'+a.join('", "')+'"')):s=!0},f=function(e){e instanceof Response?r(e):u("No result returned")};o.fetchAndCache(e.clone(),n).then(f,u),i(e,t,n).then(f,u)})}var o=e("../helpers"),i=e("./cacheOnly");t.exports=r},{"../helpers":1,"./cacheOnly":8}],10:[function(e,t,n){t.exports={networkOnly:e("./networkOnly"),networkFirst:e("./networkFirst"),cacheOnly:e("./cacheOnly"),cacheFirst:e("./cacheFirst"),fastest:e("./fastest")}},{"./cacheFirst":7,"./cacheOnly":8,"./fastest":9,"./networkFirst":11,"./networkOnly":12}],11:[function(e,t,n){"use strict";function r(e,t,n){n=n||{};var r=n.cache||o.cache,c=r.queryOptions,s=n.successResponses||o.successResponses,a=n.networkTimeoutSeconds||o.networkTimeoutSeconds;return i.debug("Strategy: network first ["+e.url+"]",n),i.openCache(n).then(function(t){var o,u,f=[];if(a){var h=new Promise(function(n){o=setTimeout(function(){t.match(e,c).then(function(e){var t=Date.now(),o=r.maxAgeSeconds;i.isResponseFresh(e,o,t)&&n(e)})},1e3*a)});f.push(h)}var p=i.fetchAndCache(e,n).then(function(e){if(o&&clearTimeout(o),s.test(e.status))return e;throw i.debug("Response was an HTTP error: "+e.statusText,n),u=e,new Error("Bad response")}).catch(function(r){return i.debug("Network or response error, fallback to cache ["+e.url+"]",n),t.match(e,c).then(function(e){if(e)return e;if(u)return u;throw r})});return f.push(p),Promise.race(f)})}var o=e("../options"),i=e("../helpers");t.exports=r},{"../helpers":1,"../options":4}],12:[function(e,t,n){"use strict";function r(e,t,n){return o.debug("Strategy: network only ["+e.url+"]",n),fetch(e)}var o=e("../helpers");t.exports=r},{"../helpers":1}],13:[function(e,t,n){"use strict";var r=e("./options"),o=e("./router"),i=e("./helpers"),c=e("./strategies"),s=e("./listeners");i.debug("Service Worker Toolbox is loading"),self.addEventListener("install",s.installListener),self.addEventListener("activate",s.activateListener),self.addEventListener("fetch",s.fetchListener),t.exports={networkOnly:c.networkOnly,networkFirst:c.networkFirst,cacheOnly:c.cacheOnly,cacheFirst:c.cacheFirst,fastest:c.fastest,router:o,options:r,cache:i.cache,uncache:i.uncache,precache:i.precache}},{"./helpers":1,"./listeners":3,"./options":4,"./router":6,"./strategies":10}],14:[function(e,t,n){t.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],15:[function(e,t,n){function r(e,t){for(var n,r=[],o=0,i=0,c="",s=t&&t.delimiter||"/";null!=(n=x.exec(e));){var f=n[0],h=n[1],p=n.index;if(c+=e.slice(i,p),i=p+f.length,h)c+=h[1];else{var l=e[i],d=n[2],m=n[3],g=n[4],v=n[5],w=n[6],y=n[7];c&&(r.push(c),c="");var b=null!=d&&null!=l&&l!==d,E="+"===w||"*"===w,R="?"===w||"*"===w,k=n[2]||s,$=g||v;r.push({name:m||o++,prefix:d||"",delimiter:k,optional:R,repeat:E,partial:b,asterisk:!!y,pattern:$?u($):y?".*":"[^"+a(k)+"]+?"})}}return i=46||"Chrome"===n&&r>=50)||(Cache.prototype.addAll=function(e){function t(e){this.name="NetworkError",this.code=19,this.message=e}var n=this;return t.prototype=Object.create(Error.prototype),Promise.resolve().then(function(){if(arguments.length<1)throw new TypeError;return e=e.map(function(e){return e instanceof Request?e:String(e)}),Promise.all(e.map(function(e){"string"==typeof e&&(e=new Request(e));var n=new URL(e.url).protocol;if("http:"!==n&&"https:"!==n)throw new t("Invalid scheme");return fetch(e.clone())}))}).then(function(r){if(r.some(function(e){return!e.ok}))throw new t("Incorrect response status");return Promise.all(r.map(function(t,r){return n.put(e[r],t)}))}).then(function(){})},Cache.prototype.add=function(e){return this.addAll([e])})}()},{}]},{},[13])(13)}); +//# sourceMappingURL=sw-toolbox.js.map diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..de136d7 --- /dev/null +++ b/sw.js @@ -0,0 +1,3 @@ +importScripts('sw-toolbox.js'); +toolbox.precache([]); +toolbox.router.get('/*', toolbox.networkFirst, { networkTimeoutSeconds: 60 });