add middlewareManifest type, ensure events to hook into are valid when calling use(middleware)
This commit is contained in:
parent
4395c41041
commit
6f4f234c82
8 changed files with 330 additions and 249 deletions
2
masqr.js
2
masqr.js
|
|
@ -1,5 +1,5 @@
|
|||
import path from "path";
|
||||
import fs from "fs"
|
||||
import fs from "fs";
|
||||
|
||||
const failureFile = fs.readFileSync("Checkfailed.html", "utf8");
|
||||
|
||||
|
|
|
|||
16
public/sw.js
16
public/sw.js
|
|
@ -10,20 +10,22 @@ const ww = new WorkerWare({
|
|||
debug: true,
|
||||
});
|
||||
|
||||
function logContext(ctx, event) {
|
||||
console.log("Context:", ctx);
|
||||
function logContext(event) {
|
||||
console.log("Event:", event);
|
||||
return void 0;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
ww.use(logContext)
|
||||
ww.use({
|
||||
function: logContext,
|
||||
events: ["fetch"],
|
||||
});
|
||||
|
||||
const uv = new UVServiceWorker();
|
||||
|
||||
self.addEventListener("fetch", async (event) => {
|
||||
let middleware = await ww.run(self, event)();
|
||||
if (middleware.includes(null)) {
|
||||
console.log("Aborting Request!")
|
||||
let mwResponse = await ww.run(event)();
|
||||
if (mwResponse.includes(null)) {
|
||||
console.log("Aborting Request!");
|
||||
return;
|
||||
}
|
||||
event.respondWith(
|
||||
|
|
|
|||
6
public/workerware/WWError.js
Normal file
6
public/workerware/WWError.js
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class WWError extends Error {
|
||||
constructor(message) {
|
||||
super(message);
|
||||
this.name = "[WorkerWare Exception]";
|
||||
}
|
||||
}
|
||||
|
|
@ -1,28 +1,97 @@
|
|||
importScripts("/workerware/WWError.js");
|
||||
const dbg = console.log.bind(console, "[WorkerWare]");
|
||||
|
||||
const defaultOpt = {
|
||||
debug: false,
|
||||
}
|
||||
};
|
||||
|
||||
// type middlewareManifest = {
|
||||
// function: Function,
|
||||
// name?: string,
|
||||
// events: string[], // Should be a union of validEvents.
|
||||
// }
|
||||
|
||||
const validEvents = [
|
||||
"abortpayment",
|
||||
"activate",
|
||||
"backgroundfetchabort",
|
||||
"backgroundfetchclick",
|
||||
"backgroundfetchfail",
|
||||
"backgroundfetchsuccess",
|
||||
"canmakepayment",
|
||||
"contentdelete",
|
||||
"cookiechange",
|
||||
"fetch",
|
||||
"install",
|
||||
"message",
|
||||
"messageerror",
|
||||
"notificationclick",
|
||||
"notificationclose",
|
||||
"paymentrequest",
|
||||
"periodicsync",
|
||||
"push",
|
||||
"pushsubscriptionchange",
|
||||
"sync",
|
||||
];
|
||||
|
||||
class WorkerWare {
|
||||
constructor(opt) {
|
||||
this._opt = opt;
|
||||
this._middlewares = [];
|
||||
}
|
||||
use(fn) {
|
||||
if (typeof fn !== 'function') throw new TypeError('[WorkerWare] Middleware must be a function!');
|
||||
if (this._opt.debug) dbg("Added middleware", fn.name || "<anonymous>");
|
||||
this._middlewares.push(fn);
|
||||
use(middleware) {
|
||||
let validateMW = this.validateMiddleware(middleware);
|
||||
if (validateMW.error) throw new WWError(validateMW.error);
|
||||
// This means the middleware is an anonymous function, or the user is silly and named their function "function"
|
||||
if (middleware.function.name == "function") middleware.name = crypto.randomUUID();
|
||||
if (!middleware.name) middleware.name = middleware.function.name;
|
||||
if (this._opt.debug) dbg("Adding middleware:", middleware.name);
|
||||
this._middlewares.push(middleware);
|
||||
}
|
||||
run(ctx, event) {
|
||||
run(event) {
|
||||
const middlewares = this._middlewares;
|
||||
const returnList = [];
|
||||
let fn = async () => {
|
||||
for (let i = 0; i < middlewares.length; i++) {
|
||||
returnList.push(await middlewares[i](ctx, event));
|
||||
dbg(middlewares[i], event.type);
|
||||
if (middlewares[i].events.includes(event.type)) {
|
||||
returnList.push(await middlewares[i].function(event));
|
||||
}
|
||||
}
|
||||
return returnList;
|
||||
};
|
||||
return fn;
|
||||
}
|
||||
runMW(id, event) {
|
||||
const middlewares = this._middlewares;
|
||||
if (this._opt.debug) dbg("Running middleware:", id);
|
||||
if (middlewares.includes(id)) {
|
||||
return middlewares[id](event);
|
||||
}
|
||||
}
|
||||
validateMiddleware(middleware) {
|
||||
if (!middleware.function)
|
||||
return {
|
||||
error: "middleware.function is required",
|
||||
};
|
||||
if (typeof middleware.function !== "function")
|
||||
return {
|
||||
error: "middleware.function must be typeof function",
|
||||
};
|
||||
if (!middleware.events)
|
||||
return {
|
||||
error: "middleware.events is required",
|
||||
};
|
||||
if (!Array.isArray(middleware.events))
|
||||
return {
|
||||
error: "middleware.events must be an array",
|
||||
};
|
||||
if (middleware.events.some((ev) => !validEvents.includes(ev)))
|
||||
return {
|
||||
error: "Invalid event type! Must be one of the following: " + validEvents.join(", "),
|
||||
};
|
||||
return {
|
||||
error: undefined,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -48,9 +48,7 @@
|
|||
}
|
||||
|
||||
function getUVProxyURL(frame: HTMLIFrameElement) {
|
||||
return window.__uv$config.decodeUrl(
|
||||
frame.contentWindow!.location.href.split("/service/")[1]
|
||||
)
|
||||
return window.__uv$config.decodeUrl(frame.contentWindow!.location.href.split("/service/")[1]);
|
||||
}
|
||||
|
||||
async function loadContent() {
|
||||
|
|
@ -209,9 +207,7 @@
|
|||
input!.value.trim()
|
||||
);
|
||||
} else {
|
||||
navigator.clipboard.writeText(
|
||||
getUVProxyURL(proxyFrame)
|
||||
);
|
||||
navigator.clipboard.writeText(getUVProxyURL(proxyFrame));
|
||||
}
|
||||
new Notyf({
|
||||
duration: 2000,
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ export async function registerSW() {
|
|||
});
|
||||
return new Promise(async (resolve) => {
|
||||
await navigator.serviceWorker.register("/sw.js").then((registration) => {
|
||||
console.log("Registered SW!")
|
||||
console.log("Registered SW!");
|
||||
resolve(null);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -57,10 +57,12 @@ const { title, optionalPreloads } = Astro.props;
|
|||
<script src="https://www.googletagmanager.com/gtag/js?id=G-P1JX4G9KSF" is:inline></script>
|
||||
<script is:inline>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
function gtag() {
|
||||
dataLayer.push(arguments);
|
||||
}
|
||||
gtag("js", new Date());
|
||||
|
||||
gtag('config', 'G-P1JX4G9KSF');
|
||||
gtag("config", "G-P1JX4G9KSF");
|
||||
</script>
|
||||
<meta name="generator" content={Astro.generator} />
|
||||
<title>{title}</title>
|
||||
|
|
|
|||
|
|
@ -21,21 +21,21 @@ import Layout from "src/layouts/Layout.astro";
|
|||
<p>
|
||||
The following terminology applies to these Terms and Conditions, Privacy Statement and
|
||||
Disclaimer Notice and all Agreements: "Client", "You" and "Your" refers to you, the person log
|
||||
on this website and compliant to the Company's terms and conditions. "The Company", "Ourselves",
|
||||
"We", "Our" and "Us", refers to our Company. "Party", "Parties", or "Us", refers to both the
|
||||
Client and ourselves. All terms refer to the offer, acceptance and consideration of payment
|
||||
necessary to undertake the process of our assistance to the Client in the most appropriate
|
||||
manner for the express purpose of meeting the Client's needs in respect of provision of the
|
||||
Company's stated services, in accordance with and subject to, prevailing law of us. Any use of
|
||||
the above terminology or other words in the singular, plural, capitalization and/or he/she or
|
||||
they, are taken as interchangeable and therefore as referring to same.
|
||||
on this website and compliant to the Company's terms and conditions. "The Company",
|
||||
"Ourselves", "We", "Our" and "Us", refers to our Company. "Party", "Parties", or "Us", refers
|
||||
to both the Client and ourselves. All terms refer to the offer, acceptance and consideration
|
||||
of payment necessary to undertake the process of our assistance to the Client in the most
|
||||
appropriate manner for the express purpose of meeting the Client's needs in respect of
|
||||
provision of the Company's stated services, in accordance with and subject to, prevailing law
|
||||
of us. Any use of the above terminology or other words in the singular, plural, capitalization
|
||||
and/or he/she or they, are taken as interchangeable and therefore as referring to same.
|
||||
</p>
|
||||
|
||||
<h3><strong>Cookies</strong></h3>
|
||||
|
||||
<p>
|
||||
We employ the use of cookies. By accessing Alu, you agreed to use cookies in agreement with the
|
||||
Alu Project's Privacy Policy.
|
||||
We employ the use of cookies. By accessing Alu, you agreed to use cookies in agreement with
|
||||
the Alu Project's Privacy Policy.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
@ -49,8 +49,9 @@ import Layout from "src/layouts/Layout.astro";
|
|||
|
||||
<p>
|
||||
Unless otherwise stated, Alu Project and/or its licensors own the intellectual property rights
|
||||
for all material on Alu. All intellectual property rights are reserved. You may access this from
|
||||
Alu for your own personal use subjected to restrictions set in these terms and conditions.
|
||||
for all material on Alu. All intellectual property rights are reserved. You may access this
|
||||
from Alu for your own personal use subjected to restrictions set in these terms and
|
||||
conditions.
|
||||
</p>
|
||||
|
||||
<p>You must not:</p>
|
||||
|
|
@ -72,12 +73,12 @@ import Layout from "src/layouts/Layout.astro";
|
|||
<li>Search engines;</li>
|
||||
<li>News organizations;</li>
|
||||
<li>
|
||||
Online directory distributors may link to our Website in the same manner as they hyperlink to
|
||||
the Websites of other listed businesses; and
|
||||
Online directory distributors may link to our Website in the same manner as they hyperlink
|
||||
to the Websites of other listed businesses; and
|
||||
</li>
|
||||
<li>
|
||||
System wide Accredited Businesses except soliciting non-profit organizations, charity shopping
|
||||
malls, and charity fundraising groups which may not hyperlink to our Web site.
|
||||
System wide Accredited Businesses except soliciting non-profit organizations, charity
|
||||
shopping malls, and charity fundraising groups which may not hyperlink to our Web site.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
|
@ -88,7 +89,9 @@ import Layout from "src/layouts/Layout.astro";
|
|||
within the context of the linking party's site.
|
||||
</p>
|
||||
|
||||
<p>We may consider and approve other link requests from the following types of organizations:</p>
|
||||
<p>
|
||||
We may consider and approve other link requests from the following types of organizations:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>commonly-known consumer and/or business information sources;</li>
|
||||
|
|
@ -101,25 +104,26 @@ import Layout from "src/layouts/Layout.astro";
|
|||
</ul>
|
||||
|
||||
<p>
|
||||
We will approve link requests from these organizations if we decide that: (a) the link would not
|
||||
make us look unfavorably to ourselves or to our accredited businesses; (b) the organization does
|
||||
not have any negative records with us; (c) the benefit to us from the visibility of the
|
||||
hyperlink compensates the absence of Alu Project; and (d) the link is in the context of general
|
||||
resource information.
|
||||
We will approve link requests from these organizations if we decide that: (a) the link would
|
||||
not make us look unfavorably to ourselves or to our accredited businesses; (b) the
|
||||
organization does not have any negative records with us; (c) the benefit to us from the
|
||||
visibility of the hyperlink compensates the absence of Alu Project; and (d) the link is in the
|
||||
context of general resource information.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
These organizations may link to our home page so long as the link: (a) is not in any way
|
||||
deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking party
|
||||
and its products or services; and (c) fits within the context of the linking party's site.
|
||||
deceptive; (b) does not falsely imply sponsorship, endorsement or approval of the linking
|
||||
party and its products or services; and (c) fits within the context of the linking party's
|
||||
site.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you are one of the organizations listed in paragraph 2 above and are interested in linking to
|
||||
our website, you must inform us by sending an e-mail to Alu Project. Please include your name,
|
||||
your organization name, contact information as well as the URL of your site, a list of any URLs
|
||||
from which you intend to link to our Website, and a list of the URLs on our site to which you
|
||||
would like to link. Wait 2-3 weeks for a response.
|
||||
If you are one of the organizations listed in paragraph 2 above and are interested in linking
|
||||
to our website, you must inform us by sending an e-mail to Alu Project. Please include your
|
||||
name, your organization name, contact information as well as the URL of your site, a list of
|
||||
any URLs from which you intend to link to our Website, and a list of the URLs on our site to
|
||||
which you would like to link. Wait 2-3 weeks for a response.
|
||||
</p>
|
||||
|
||||
<p>Approved organizations may hyperlink to our Website as follows:</p>
|
||||
|
|
@ -158,24 +162,25 @@ import Layout from "src/layouts/Layout.astro";
|
|||
<h3><strong>Reservation of Rights</strong></h3>
|
||||
|
||||
<p>
|
||||
We reserve the right to request that you remove all links or any particular link to our Website.
|
||||
You approve to immediately remove all links to our Website upon request. We also reserve the
|
||||
right to amen these terms and conditions and it's linking policy at any time. By continuously
|
||||
linking to our Website, you agree to be bound to and follow these linking terms and conditions.
|
||||
We reserve the right to request that you remove all links or any particular link to our
|
||||
Website. You approve to immediately remove all links to our Website upon request. We also
|
||||
reserve the right to amen these terms and conditions and it's linking policy at any time. By
|
||||
continuously linking to our Website, you agree to be bound to and follow these linking terms
|
||||
and conditions.
|
||||
</p>
|
||||
|
||||
<h3><strong>Removal of links from our website</strong></h3>
|
||||
|
||||
<p>
|
||||
If you find any link on our Website that is offensive for any reason, you are free to contact
|
||||
and inform us any moment. We will consider requests to remove links but we are not obligated to
|
||||
or so or to respond to you directly.
|
||||
and inform us any moment. We will consider requests to remove links but we are not obligated
|
||||
to or so or to respond to you directly.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
We do not ensure that the information on this website is correct, we do not warrant its
|
||||
completeness or accuracy; nor do we promise to ensure that the website remains available or that
|
||||
the material on the website is kept up to date.
|
||||
completeness or accuracy; nor do we promise to ensure that the website remains available or
|
||||
that the material on the website is kept up to date.
|
||||
</p>
|
||||
|
||||
<h3><strong>Disclaimer</strong></h3>
|
||||
|
|
@ -190,7 +195,8 @@ import Layout from "src/layouts/Layout.astro";
|
|||
<li>limit or exclude our or your liability for death or personal injury;</li>
|
||||
<li>limit or exclude our or your liability for fraud or fraudulent misrepresentation;</li>
|
||||
<li>
|
||||
limit any of our or your liabilities in any way that is not permitted under applicable law; or
|
||||
limit any of our or your liabilities in any way that is not permitted under applicable law;
|
||||
or
|
||||
</li>
|
||||
<li>exclude any of our or your liabilities that may not be excluded under applicable law.</li>
|
||||
</ul>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue