@coralreefventures/site-tools 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -5
- package/dist/bin/reef-door-bundle.js +19 -1
- package/dist/bin/reef-door-bundle.js.map +1 -1
- package/dist/door/config.d.ts +5 -1
- package/dist/door/config.d.ts.map +1 -1
- package/dist/door/config.js +3 -0
- package/dist/door/config.js.map +1 -1
- package/dist/door/package.d.ts +16 -0
- package/dist/door/package.d.ts.map +1 -1
- package/dist/door/package.js +47 -2
- package/dist/door/package.js.map +1 -1
- package/dist/door/page.d.ts +70 -0
- package/dist/door/page.d.ts.map +1 -0
- package/dist/door/page.js +171 -0
- package/dist/door/page.js.map +1 -0
- package/dist/door/server.d.ts +24 -3
- package/dist/door/server.d.ts.map +1 -1
- package/dist/door/server.js +85 -13
- package/dist/door/server.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/bin/reef-door-bundle.ts +19 -1
- package/src/door/config.ts +6 -1
- package/src/door/package.ts +57 -2
- package/src/door/page.ts +218 -0
- package/src/door/server.ts +92 -12
- package/src/index.ts +10 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/door/page.ts"],"names":[],"mappings":"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"}
|
package/dist/door/server.d.ts
CHANGED
|
@@ -5,6 +5,13 @@ export declare const sessionCookie = "__Host-crv_door";
|
|
|
5
5
|
/** The nonce the gate sets before it sends a visitor to the door, which the ticket must name as `st`. */
|
|
6
6
|
export declare const stateCookie = "__Host-crv_door_state";
|
|
7
7
|
export declare const stateLifetimeSeconds = 600;
|
|
8
|
+
/**
|
|
9
|
+
* A marker that this browser has held a session here, so that once the hour is up a page load bounces silently through
|
|
10
|
+
* the door (which issues a fresh ticket while its own sign-in lives) instead of meeting the coming-soon page. It holds
|
|
11
|
+
* no identity and opens nothing: without a valid session it changes only which way a page load is sent to sign in.
|
|
12
|
+
*/
|
|
13
|
+
export declare const seenCookie = "__Host-crv_door_seen";
|
|
14
|
+
export declare const seenLifetimeSeconds: number;
|
|
8
15
|
/** One value of a cookie, or undefined when it is absent or sent twice (which a `__Host-` cookie never is). */
|
|
9
16
|
export declare const readCookie: (header: string | undefined, name: string) => string | undefined;
|
|
10
17
|
/**
|
|
@@ -17,8 +24,20 @@ export declare const splitTarget: (target: string) => {
|
|
|
17
24
|
rawPath: string;
|
|
18
25
|
rawQuery: string;
|
|
19
26
|
};
|
|
27
|
+
/**
|
|
28
|
+
* The challenge every 401 carries, as RFC 9110 requires of one. No registered scheme describes a session cookie from a
|
|
29
|
+
* sign-in page, so this is the shape of the Cookie scheme drafted for exactly that (draft-broyer-http-cookie-auth):
|
|
30
|
+
* where the sign-in starts, and the cookie it ends in. Browsers prompt only for the schemes they implement (Basic,
|
|
31
|
+
* Digest, Negotiate, NTLM), so for this one they render the body, which for a page load is the coming-soon page.
|
|
32
|
+
*/
|
|
33
|
+
export declare const challenge: (site: string) => string;
|
|
20
34
|
/** Whether a request is a page load, which gets the door, rather than a fetch, which gets a bare 401. */
|
|
21
35
|
export declare const isDocumentRequest: (request: IncomingMessage) => boolean;
|
|
36
|
+
/**
|
|
37
|
+
* A page load in the window itself: a document request whose `Sec-Fetch-Dest`, when sent, is `document`. Only this
|
|
38
|
+
* may start a sign-in, so an image, a frame or a fetch from another site cannot overwrite a visitor's state cookie.
|
|
39
|
+
*/
|
|
40
|
+
export declare const isTopLevelNavigation: (request: IncomingMessage) => boolean;
|
|
22
41
|
export type GateOptions = {
|
|
23
42
|
config: GateConfig;
|
|
24
43
|
/** The static export the gate serves from. */
|
|
@@ -30,9 +49,11 @@ export type GateOptions = {
|
|
|
30
49
|
* The gate: every request to a locked site, in this order. (1) A path with a backslash, a control character or a dot
|
|
31
50
|
* segment, raw or encoded, is a 400; a method other than GET, HEAD or POST is a 405. (2) A host not on the list is a
|
|
32
51
|
* 403. (3) robots.txt disallows everything, and /_door/health answers ok. (4) POST /_door verifies a ticket from the
|
|
33
|
-
* door and sets the session. (5) /_door/signout clears
|
|
34
|
-
* session is served from the export. (7) Without one, a page load
|
|
35
|
-
*
|
|
52
|
+
* door and sets the session; /_door/signin starts a sign-in at the door. (5) /_door/signout clears the door's cookies and walks
|
|
53
|
+
* a fixed map. (6) A request with a valid session is served from the export. (7) Without one, a page load gets the
|
|
54
|
+
* coming-soon page, a 401 whose sign-in link carries the canonical next (or, from a browser that has had a session
|
|
55
|
+
* here, a silent bounce through the door), and anything else gets an empty 401. (8) An
|
|
56
|
+
* exception is a 500 with nothing in it: the gate fails closed.
|
|
36
57
|
*/
|
|
37
58
|
export declare const createGate: ({ config, site, now, }: GateOptions) => RequestListener;
|
|
38
59
|
export type StartGateOptions = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/door/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAIvH,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/door/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAIvH,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,aAAa,CAAC;AAQ9D,+DAA+D;AAC/D,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,yGAAyG;AACzG,eAAO,MAAM,WAAW,0BAA0B,CAAC;AACnD,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC;;;;GAIG;AACH,eAAO,MAAM,UAAU,yBAAyB,CAAC;AACjD,eAAO,MAAM,mBAAmB,QAAoB,CAAC;AAqBrD,+GAA+G;AAC/G,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,GAAG,SAAS,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAO9E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,MAAM,GAAG,IAaxD,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAG/E,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,WACiD,CAAC;AAKxF,yGAAyG;AACzG,eAAO,MAAM,iBAAiB,GAAI,SAAS,eAAe,KAAG,OAK5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,SAAS,eAAe,KAAG,OAI/D,CAAC;AAgCF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,UAAU,CAAC;IACnB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,wBAIxB,WAAW,KAAG,eAwMhB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB;IACxB,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;IACrB,yBAAyB;IACzB,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,gHAAgH;AAChH,eAAO,MAAM,SAAS,GAAU,wBAA+B,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAU/F,CAAC"}
|
package/dist/door/server.js
CHANGED
|
@@ -4,6 +4,7 @@ import { fileURLToPath } from "node:url";
|
|
|
4
4
|
import { sendFile, staticTarget } from "../serve.js";
|
|
5
5
|
import { readGateConfig } from "./config.js";
|
|
6
6
|
import { canonicalNext, unsafe } from "./next.js";
|
|
7
|
+
import { comingSoon } from "./page.js";
|
|
7
8
|
import { verifyTicket } from "./verify.js";
|
|
8
9
|
// The gate is the one thing in a locked site's compute bundle, and the bundle carries no node_modules, so this file
|
|
9
10
|
// and everything it imports use Node's own modules only (a test holds it).
|
|
@@ -12,6 +13,13 @@ export const sessionCookie = "__Host-crv_door";
|
|
|
12
13
|
/** The nonce the gate sets before it sends a visitor to the door, which the ticket must name as `st`. */
|
|
13
14
|
export const stateCookie = "__Host-crv_door_state";
|
|
14
15
|
export const stateLifetimeSeconds = 600;
|
|
16
|
+
/**
|
|
17
|
+
* A marker that this browser has held a session here, so that once the hour is up a page load bounces silently through
|
|
18
|
+
* the door (which issues a fresh ticket while its own sign-in lives) instead of meeting the coming-soon page. It holds
|
|
19
|
+
* no identity and opens nothing: without a valid session it changes only which way a page load is sent to sign in.
|
|
20
|
+
*/
|
|
21
|
+
export const seenCookie = "__Host-crv_door_seen";
|
|
22
|
+
export const seenLifetimeSeconds = 30 * 24 * 60 * 60;
|
|
15
23
|
const maxBodyBytes = 16 * 1024;
|
|
16
24
|
const encodedUnsafe = /%(5c|[01][0-9a-f]|7f)/i;
|
|
17
25
|
/** Every response, whatever its status: none of a locked site may be framed, sniffed or indexed. */
|
|
@@ -25,6 +33,8 @@ const securityHeaders = {
|
|
|
25
33
|
const cookie = (name, value, maxAge, sameSite) => `${name}=${value}; Max-Age=${maxAge}; Path=/; Secure; HttpOnly; SameSite=${sameSite}`;
|
|
26
34
|
const clearSession = cookie(sessionCookie, "", 0, "Lax");
|
|
27
35
|
const clearState = cookie(stateCookie, "", 0, "None");
|
|
36
|
+
const markSeen = cookie(seenCookie, "1", seenLifetimeSeconds, "Lax");
|
|
37
|
+
const clearSeen = cookie(seenCookie, "", 0, "Lax");
|
|
28
38
|
/** One value of a cookie, or undefined when it is absent or sent twice (which a `__Host-` cookie never is). */
|
|
29
39
|
export const readCookie = (header, name) => {
|
|
30
40
|
const values = (header ?? "")
|
|
@@ -62,6 +72,13 @@ export const splitTarget = (target) => {
|
|
|
62
72
|
};
|
|
63
73
|
/** GET, HEAD and POST; the gate answers anything else with 405. */
|
|
64
74
|
const isGatedMethod = (method) => method === "GET" || method === "HEAD" || method === "POST";
|
|
75
|
+
/**
|
|
76
|
+
* The challenge every 401 carries, as RFC 9110 requires of one. No registered scheme describes a session cookie from a
|
|
77
|
+
* sign-in page, so this is the shape of the Cookie scheme drafted for exactly that (draft-broyer-http-cookie-auth):
|
|
78
|
+
* where the sign-in starts, and the cookie it ends in. Browsers prompt only for the schemes they implement (Basic,
|
|
79
|
+
* Digest, Negotiate, NTLM), so for this one they render the body, which for a page load is the coming-soon page.
|
|
80
|
+
*/
|
|
81
|
+
export const challenge = (site) => `Cookie realm="${site}", form-action="/_door/signin", cookie-name="${sessionCookie}"`;
|
|
65
82
|
/** The paths the gate answers itself, with or without a session: robots.txt and its own /_door/ endpoints. */
|
|
66
83
|
const isOwnPath = (path) => path === "/robots.txt" || path.startsWith("/_door/");
|
|
67
84
|
/** Whether a request is a page load, which gets the door, rather than a fetch, which gets a bare 401. */
|
|
@@ -73,6 +90,16 @@ export const isDocumentRequest = (request) => {
|
|
|
73
90
|
return mode === "navigate";
|
|
74
91
|
return String(request.headers.accept ?? "").includes("text/html");
|
|
75
92
|
};
|
|
93
|
+
/**
|
|
94
|
+
* A page load in the window itself: a document request whose `Sec-Fetch-Dest`, when sent, is `document`. Only this
|
|
95
|
+
* may start a sign-in, so an image, a frame or a fetch from another site cannot overwrite a visitor's state cookie.
|
|
96
|
+
*/
|
|
97
|
+
export const isTopLevelNavigation = (request) => {
|
|
98
|
+
if (!isDocumentRequest(request))
|
|
99
|
+
return false;
|
|
100
|
+
const dest = request.headers["sec-fetch-dest"];
|
|
101
|
+
return dest === undefined || dest === "document";
|
|
102
|
+
};
|
|
76
103
|
/**
|
|
77
104
|
* The form body, or null once it passes 16 KB. The rest of an oversized body is read and thrown away rather than the
|
|
78
105
|
* socket destroyed, so the visitor still gets the redirect back to the door; that response closes the connection.
|
|
@@ -104,9 +131,11 @@ const field = (form, name) => {
|
|
|
104
131
|
* The gate: every request to a locked site, in this order. (1) A path with a backslash, a control character or a dot
|
|
105
132
|
* segment, raw or encoded, is a 400; a method other than GET, HEAD or POST is a 405. (2) A host not on the list is a
|
|
106
133
|
* 403. (3) robots.txt disallows everything, and /_door/health answers ok. (4) POST /_door verifies a ticket from the
|
|
107
|
-
* door and sets the session. (5) /_door/signout clears
|
|
108
|
-
* session is served from the export. (7) Without one, a page load
|
|
109
|
-
*
|
|
134
|
+
* door and sets the session; /_door/signin starts a sign-in at the door. (5) /_door/signout clears the door's cookies and walks
|
|
135
|
+
* a fixed map. (6) A request with a valid session is served from the export. (7) Without one, a page load gets the
|
|
136
|
+
* coming-soon page, a 401 whose sign-in link carries the canonical next (or, from a browser that has had a session
|
|
137
|
+
* here, a silent bounce through the door), and anything else gets an empty 401. (8) An
|
|
138
|
+
* exception is a 500 with nothing in it: the gate fails closed.
|
|
110
139
|
*/
|
|
111
140
|
export const createGate = ({ config, site, now = () => Math.floor(Date.now() / 1000), }) => {
|
|
112
141
|
const empty = (response, status, headers = {}) => {
|
|
@@ -124,6 +153,8 @@ export const createGate = ({ config, site, now = () => Math.floor(Date.now() / 1
|
|
|
124
153
|
response.end(request.method === "HEAD" ? undefined : body);
|
|
125
154
|
};
|
|
126
155
|
const doorSignout = `${config.door}/signout/`;
|
|
156
|
+
const page = comingSoon(config.page, config.door, config.site);
|
|
157
|
+
const unauthorized = challenge(config.site);
|
|
127
158
|
/** Where `then` leads: the next stop's gate, or the door's sign-out page. Never a URL from the query. */
|
|
128
159
|
const signoutTarget = (then) => {
|
|
129
160
|
const index = config.signout.findIndex((stop) => stop.id === then);
|
|
@@ -167,19 +198,58 @@ export const createGate = ({ config, site, now = () => Math.floor(Date.now() / 1
|
|
|
167
198
|
if (formNext === null || claimNext === null || formNext !== claimNext)
|
|
168
199
|
return toDoorWithError(response);
|
|
169
200
|
const maxAge = verdict.claims.exp - now();
|
|
170
|
-
return redirect(response, 303, claimNext, [
|
|
201
|
+
return redirect(response, 303, claimNext, [
|
|
202
|
+
cookie(sessionCookie, ticket ?? "", maxAge, "Lax"),
|
|
203
|
+
clearState,
|
|
204
|
+
markSeen,
|
|
205
|
+
]);
|
|
171
206
|
};
|
|
172
|
-
/**
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
207
|
+
/**
|
|
208
|
+
* Step 4's sign-in start, which the coming-soon page's button links to: a fresh state cookie and a 302 to the door,
|
|
209
|
+
* naming this site, this host and where to come back to. `next` is taken from the query only after *Canonical next*;
|
|
210
|
+
* one that fails, or is missing or sent twice, becomes `/`. Only a top-level navigation starts one; anything else
|
|
211
|
+
* gets an empty 401 and no cookie.
|
|
212
|
+
*/
|
|
213
|
+
const startSignin = (request, response, rawQuery, host) => {
|
|
214
|
+
if (!isTopLevelNavigation(request))
|
|
215
|
+
return empty(response, 401, { "WWW-Authenticate": unauthorized });
|
|
216
|
+
const asked = new URLSearchParams(rawQuery).getAll("next");
|
|
217
|
+
const next = (asked.length === 1 ? canonicalNext(asked[0], host) : null) ?? "/";
|
|
218
|
+
return toDoor(response, next, host);
|
|
219
|
+
};
|
|
220
|
+
/** A fresh state cookie and a 302 to the door, for an already canonical `next`. */
|
|
221
|
+
const toDoor = (response, next, host) => {
|
|
176
222
|
const nonce = randomBytes(32).toString("base64url");
|
|
177
|
-
const next = canonicalNext(target, host) ?? "/";
|
|
178
223
|
const query = new URLSearchParams({ site: config.site, host, next, state: nonce });
|
|
179
224
|
return redirect(response, 302, `${config.door}/?${query}`, [
|
|
180
225
|
cookie(stateCookie, nonce, stateLifetimeSeconds, "None"),
|
|
181
226
|
]);
|
|
182
227
|
};
|
|
228
|
+
/**
|
|
229
|
+
* Step 7: no session. A page load gets the coming-soon page, which is the gate's own and holds none of the site;
|
|
230
|
+
* its sign-in link carries the raw request target after *Canonical next*, or `/`. Anything else is a bare 401.
|
|
231
|
+
* Both are 401, so a request without a session never gets a 2xx with anything of the site's in it, and a probe can
|
|
232
|
+
* tell locked from open by the status alone. A page load from a browser that has held a session here (the seen
|
|
233
|
+
* cookie) is sent straight to the door instead, which renews the session silently while the door's sign-in lives.
|
|
234
|
+
*/
|
|
235
|
+
const refuse = (request, response, target, host) => {
|
|
236
|
+
if (!isDocumentRequest(request))
|
|
237
|
+
return empty(response, 401, { "WWW-Authenticate": unauthorized });
|
|
238
|
+
const next = canonicalNext(target, host) ?? "/";
|
|
239
|
+
if (readCookie(request.headers.cookie, seenCookie) === "1" && isTopLevelNavigation(request)) {
|
|
240
|
+
return toDoor(response, next, host);
|
|
241
|
+
}
|
|
242
|
+
const body = page.html(next);
|
|
243
|
+
response.writeHead(401, {
|
|
244
|
+
...securityHeaders,
|
|
245
|
+
"Cache-Control": "no-store",
|
|
246
|
+
"Content-Type": "text/html; charset=utf-8",
|
|
247
|
+
"Content-Length": String(Buffer.byteLength(body)),
|
|
248
|
+
"Content-Security-Policy": page.csp,
|
|
249
|
+
"WWW-Authenticate": unauthorized,
|
|
250
|
+
});
|
|
251
|
+
response.end(request.method === "HEAD" ? undefined : body);
|
|
252
|
+
};
|
|
183
253
|
/** Step 6: the export, as Amplify maps it, private to the browser that holds the session. */
|
|
184
254
|
const serveSite = async (request, response, path, location) => {
|
|
185
255
|
const found = await staticTarget(site, path);
|
|
@@ -200,15 +270,17 @@ export const createGate = ({ config, site, now = () => Math.floor(Date.now() / 1
|
|
|
200
270
|
: "private, no-store";
|
|
201
271
|
return sendFile(request, response, found.file, 200, { ...securityHeaders, "Cache-Control": cacheControl });
|
|
202
272
|
};
|
|
203
|
-
/** Steps 3 and 5: what the gate answers itself, which holds nothing of the site. */
|
|
204
|
-
const answerOwn = (request, response, path, rawQuery) => {
|
|
273
|
+
/** Steps 3, 4's sign-in start and 5: what the gate answers itself, which holds nothing of the site. */
|
|
274
|
+
const answerOwn = (request, response, path, rawQuery, host) => {
|
|
205
275
|
if (path === "/robots.txt")
|
|
206
276
|
return text(response, request, "User-agent: *\nDisallow: /\n");
|
|
207
277
|
if (path === "/_door/health")
|
|
208
278
|
return text(response, request, "ok");
|
|
279
|
+
if (path === "/_door/signin")
|
|
280
|
+
return startSignin(request, response, rawQuery, host);
|
|
209
281
|
if (path === "/_door/signout") {
|
|
210
282
|
const then = new URLSearchParams(rawQuery).get("then");
|
|
211
|
-
return redirect(response, 303, signoutTarget(then), [clearSession, clearState]);
|
|
283
|
+
return redirect(response, 303, signoutTarget(then), [clearSession, clearState, clearSeen]);
|
|
212
284
|
}
|
|
213
285
|
return empty(response, 404);
|
|
214
286
|
};
|
|
@@ -240,7 +312,7 @@ export const createGate = ({ config, site, now = () => Math.floor(Date.now() / 1
|
|
|
240
312
|
if (request.method === "POST")
|
|
241
313
|
return empty(response, 405, { Allow: "GET, HEAD" });
|
|
242
314
|
if (isOwnPath(path))
|
|
243
|
-
return answerOwn(request, response, path, rawQuery);
|
|
315
|
+
return answerOwn(request, response, path, rawQuery, host);
|
|
244
316
|
if (!hasSession(request, host))
|
|
245
317
|
return refuse(request, response, target, host);
|
|
246
318
|
return serveSite(request, response, path, { rawPath, rawQuery, host });
|
package/dist/door/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/door/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/door/server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { doorOrigin, type GateConfig, type GateConfigFile, parseGateConfig, parseSignoutChain, readGateConfig, type SignoutStop, } from "./door/config.ts";
|
|
2
2
|
export { canonicalNext } from "./door/next.ts";
|
|
3
|
-
export { type BundleDoorOptions, bundleDoor, checkDeployment, type DeployManifest, fetchJwks, gateFiles, maxBundleBytes, } from "./door/package.ts";
|
|
4
|
-
export {
|
|
3
|
+
export { type BundleDoorOptions, type BundlePageOptions, bundleDoor, checkDeployment, type DeployManifest, fetchJwks, gateFiles, maxBundleBytes, } from "./door/package.ts";
|
|
4
|
+
export { type ComingSoon, comingSoon, type PageConfig, type PageConfigFile, type PageImage, parsePageConfig, } from "./door/page.ts";
|
|
5
|
+
export { createGate, type GateOptions, type StartGateOptions, seenCookie, sessionCookie, startGate, stateCookie, } from "./door/server.ts";
|
|
5
6
|
export { type DoorClaims, type Jwks, parseJwks, type Verdict, type VerifyOptions, verifyTicket, } from "./door/verify.ts";
|
|
6
7
|
export { type Category, categories, type LighthouseOptions, type PageResult, pagesFromSitemap, reportBase, runLighthouse, } from "./lighthouse.ts";
|
|
7
8
|
export { contentTypeOf, createStaticServer, encodingFor, type ServeOptions, type StaticTarget, sendFile, serve, staticTarget, } from "./serve.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,KAAK,iBAAiB,EACtB,UAAU,EACV,eAAe,EACf,KAAK,cAAc,EACnB,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,aAAa,EACb,SAAS,EACT,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,IAAI,EACT,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,QAAQ,EACb,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,QAAQ,EACR,KAAK,EACL,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,UAAU,EACV,eAAe,EACf,KAAK,cAAc,EACnB,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,UAAU,EACf,UAAU,EACV,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,IAAI,EACT,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,QAAQ,EACb,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,QAAQ,EACR,KAAK,EACL,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { doorOrigin, parseGateConfig, parseSignoutChain, readGateConfig, } from "./door/config.js";
|
|
2
2
|
export { canonicalNext } from "./door/next.js";
|
|
3
3
|
export { bundleDoor, checkDeployment, fetchJwks, gateFiles, maxBundleBytes, } from "./door/package.js";
|
|
4
|
-
export {
|
|
4
|
+
export { comingSoon, parsePageConfig, } from "./door/page.js";
|
|
5
|
+
export { createGate, seenCookie, sessionCookie, startGate, stateCookie, } from "./door/server.js";
|
|
5
6
|
export { parseJwks, verifyTicket, } from "./door/verify.js";
|
|
6
7
|
export { categories, pagesFromSitemap, reportBase, runLighthouse, } from "./lighthouse.js";
|
|
7
8
|
export { contentTypeOf, createStaticServer, encodingFor, sendFile, serve, staticTarget, } from "./serve.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGV,eAAe,EACf,iBAAiB,EACjB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGV,eAAe,EACf,iBAAiB,EACjB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAGL,UAAU,EACV,eAAe,EAEf,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,UAAU,EAIV,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EAGV,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,SAAS,EAGT,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,UAAU,EAGV,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EAGX,QAAQ,EACR,KAAK,EACL,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coralreefventures/site-tools",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Command-line tools for a Coral Reef public site: serve the static export as the host does, gate it with Lighthouse, and lock it behind the door.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -6,10 +6,16 @@ import { bundleDoor } from "../door/package.ts";
|
|
|
6
6
|
|
|
7
7
|
const usage = `reef-door-bundle --site <id> [--out out] [--dest .amplify-hosting] --door-url <url> --hosts <h1,h2>
|
|
8
8
|
--jwks-url <url> [--signout-chain id=host,id=host] [--host-header host|x-forwarded-host]
|
|
9
|
+
[--name <display name>] [--mark <file in out>] [--mark-dark <file in out>]
|
|
10
|
+
[--accent #rrggbb] [--accent-dark #rrggbb]
|
|
9
11
|
|
|
10
12
|
Locks a static export behind the door: writes .amplify-hosting with the export inside the gate's compute bundle and
|
|
11
13
|
one route, /* to Compute. --door-url, --hosts, --jwks-url, --signout-chain and --host-header fall back to
|
|
12
|
-
CRV_DOOR_URL, CRV_DOOR_HOSTS, CRV_DOOR_JWKS_URL, CRV_DOOR_SIGNOUT_CHAIN and CRV_DOOR_HOST_HEADER
|
|
14
|
+
CRV_DOOR_URL, CRV_DOOR_HOSTS, CRV_DOOR_JWKS_URL, CRV_DOOR_SIGNOUT_CHAIN and CRV_DOOR_HOST_HEADER.
|
|
15
|
+
|
|
16
|
+
A page load without a session gets a coming-soon page: --name (the site id, capitalized, by default), --mark and
|
|
17
|
+
--mark-dark (an .svg or .png inside the export, inlined; none by default), --accent and --accent-dark (the button's
|
|
18
|
+
color in each scheme, at least 3:1 on the page; neutral by default).`;
|
|
13
19
|
|
|
14
20
|
const { values } = parseArgs({
|
|
15
21
|
options: {
|
|
@@ -21,6 +27,11 @@ const { values } = parseArgs({
|
|
|
21
27
|
"jwks-url": { type: "string" },
|
|
22
28
|
"signout-chain": { type: "string" },
|
|
23
29
|
"host-header": { type: "string" },
|
|
30
|
+
name: { type: "string" },
|
|
31
|
+
mark: { type: "string" },
|
|
32
|
+
"mark-dark": { type: "string" },
|
|
33
|
+
accent: { type: "string" },
|
|
34
|
+
"accent-dark": { type: "string" },
|
|
24
35
|
help: { type: "boolean", short: "h" },
|
|
25
36
|
},
|
|
26
37
|
});
|
|
@@ -52,6 +63,13 @@ try {
|
|
|
52
63
|
jwksUrl,
|
|
53
64
|
signout: parseSignoutChain(values["signout-chain"] ?? env.CRV_DOOR_SIGNOUT_CHAIN),
|
|
54
65
|
hostHeader,
|
|
66
|
+
page: {
|
|
67
|
+
name: values.name,
|
|
68
|
+
mark: values.mark,
|
|
69
|
+
markDark: values["mark-dark"],
|
|
70
|
+
accent: values.accent,
|
|
71
|
+
accentDark: values["accent-dark"],
|
|
72
|
+
},
|
|
55
73
|
});
|
|
56
74
|
console.log(`reef-door-bundle: ${values.dest} written for ${values.site}, gate ${manifest.framework.version}`);
|
|
57
75
|
} catch (error) {
|
package/src/door/config.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
|
|
3
|
+
import { type PageConfig, type PageConfigFile, parsePageConfig } from "./page.ts";
|
|
3
4
|
import { type Jwks, parseJwks } from "./verify.ts";
|
|
4
5
|
|
|
5
6
|
/** One stop on the sign-out walk: a site behind the door, by id, and the host its gate answers on. */
|
|
@@ -20,9 +21,11 @@ export type GateConfigFile = {
|
|
|
20
21
|
signout: SignoutStop[];
|
|
21
22
|
/** The door's public keys. */
|
|
22
23
|
jwks: { keys: unknown[] };
|
|
24
|
+
/** The coming-soon page a visitor without a session sees: the product's name, mark and colors. Optional (0.4.0). */
|
|
25
|
+
page?: PageConfigFile;
|
|
23
26
|
};
|
|
24
27
|
|
|
25
|
-
export type GateConfig = Omit<GateConfigFile, "jwks"> & { keys: Jwks; issuer: string };
|
|
28
|
+
export type GateConfig = Omit<GateConfigFile, "jwks" | "page"> & { keys: Jwks; issuer: string; page: PageConfig };
|
|
26
29
|
|
|
27
30
|
const siteId = /^[a-z0-9][a-z0-9-]{0,31}$/;
|
|
28
31
|
const hostName = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*(:\d{1,5})?$/;
|
|
@@ -79,6 +82,7 @@ export const parseGateConfig = (value: unknown): GateConfig => {
|
|
|
79
82
|
}
|
|
80
83
|
const signout = checkSignout(file.signout ?? []);
|
|
81
84
|
const keys = parseJwks(file.jwks);
|
|
85
|
+
const page = parsePageConfig(file.page, file.site);
|
|
82
86
|
return {
|
|
83
87
|
version: 1,
|
|
84
88
|
site: file.site,
|
|
@@ -88,6 +92,7 @@ export const parseGateConfig = (value: unknown): GateConfig => {
|
|
|
88
92
|
hostHeader: file.hostHeader,
|
|
89
93
|
signout,
|
|
90
94
|
keys,
|
|
95
|
+
page,
|
|
91
96
|
};
|
|
92
97
|
};
|
|
93
98
|
|
package/src/door/package.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { cp, mkdir, readdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
1
|
+
import { cp, mkdir, readdir, readFile, realpath, rm, stat, writeFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
|
|
5
5
|
import { type GateConfigFile, parseGateConfig, type SignoutStop } from "./config.ts";
|
|
6
|
+
import { maxMarkBytes, type PageConfigFile, type PageImage } from "./page.ts";
|
|
6
7
|
import { parseJwks } from "./verify.ts";
|
|
7
8
|
|
|
8
9
|
/**
|
|
@@ -10,7 +11,14 @@ import { parseJwks } from "./verify.ts";
|
|
|
10
11
|
* import Node's modules and each other and nothing else, so the bundle needs no node_modules (a test holds the list
|
|
11
12
|
* against the imports).
|
|
12
13
|
*/
|
|
13
|
-
export const gateFiles = [
|
|
14
|
+
export const gateFiles = [
|
|
15
|
+
"serve.js",
|
|
16
|
+
"door/server.js",
|
|
17
|
+
"door/config.js",
|
|
18
|
+
"door/next.js",
|
|
19
|
+
"door/page.js",
|
|
20
|
+
"door/verify.js",
|
|
21
|
+
];
|
|
14
22
|
|
|
15
23
|
/** Amplify takes a deployment of up to 220 MB; the gate refuses one over 200, which leaves room. */
|
|
16
24
|
export const maxBundleBytes = 200 * 1024 * 1024;
|
|
@@ -38,11 +46,57 @@ export type BundleDoorOptions = {
|
|
|
38
46
|
/** The sign-out walk, in order. */
|
|
39
47
|
signout?: SignoutStop[];
|
|
40
48
|
hostHeader?: GateConfigFile["hostHeader"];
|
|
49
|
+
/** The coming-soon page: the product's display name, its mark and dark mark as files in the export, its colors. */
|
|
50
|
+
page?: BundlePageOptions;
|
|
41
51
|
/** The compiled package root the gate's files are copied from; this package's own `dist` by default. */
|
|
42
52
|
gateRoot?: string;
|
|
43
53
|
maxBytes?: number;
|
|
44
54
|
};
|
|
45
55
|
|
|
56
|
+
/** What the bin's page flags name. The marks are paths inside the static export, which the bundle inlines. */
|
|
57
|
+
export type BundlePageOptions = {
|
|
58
|
+
name?: string | undefined;
|
|
59
|
+
mark?: string | undefined;
|
|
60
|
+
markDark?: string | undefined;
|
|
61
|
+
accent?: string | undefined;
|
|
62
|
+
accentDark?: string | undefined;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const pngSignature = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Reads a mark from the site's own export, for the coming-soon page to carry inline: an SVG or a PNG, inside the
|
|
69
|
+
* export (a symbolic link out of it is refused), and small. It is shown through `<img>`, where an SVG runs no script.
|
|
70
|
+
*/
|
|
71
|
+
export const readMark = async (out: string, file: string): Promise<PageImage> => {
|
|
72
|
+
const root = await realpath(out);
|
|
73
|
+
const resolved = await realpath(path.resolve(root, file.replace(/^\/+/, ""))).catch(() => {
|
|
74
|
+
throw new Error(`the mark is not in the static export: ${file}`);
|
|
75
|
+
});
|
|
76
|
+
if (!resolved.startsWith(`${root}${path.sep}`)) throw new Error(`the mark is outside the static export: ${file}`);
|
|
77
|
+
const bytes = await readFile(resolved);
|
|
78
|
+
if (bytes.length > maxMarkBytes) throw new Error(`the mark is ${bytes.length} bytes, over ${maxMarkBytes}: ${file}`);
|
|
79
|
+
const extension = path.extname(resolved).toLowerCase();
|
|
80
|
+
if (extension === ".png") {
|
|
81
|
+
if (!bytes.subarray(0, 8).equals(pngSignature)) throw new Error(`the mark is not a PNG: ${file}`);
|
|
82
|
+
return { type: "image/png", data: bytes.toString("base64") };
|
|
83
|
+
}
|
|
84
|
+
if (extension === ".svg") {
|
|
85
|
+
if (!/<svg[\s>]/.test(bytes.toString("utf8"))) throw new Error(`the mark is not an SVG: ${file}`);
|
|
86
|
+
return { type: "image/svg+xml", data: bytes.toString("base64") };
|
|
87
|
+
}
|
|
88
|
+
throw new Error(`the mark must be an .svg or a .png: ${file}`);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/** The page's configuration from the bin's flags: the marks read from the export, everything else as given. */
|
|
92
|
+
const pageFile = async (out: string, options: BundlePageOptions = {}): Promise<PageConfigFile> => ({
|
|
93
|
+
...(options.name !== undefined && { name: options.name }),
|
|
94
|
+
...(options.mark !== undefined && { mark: await readMark(out, options.mark) }),
|
|
95
|
+
...(options.markDark !== undefined && { markDark: await readMark(out, options.markDark) }),
|
|
96
|
+
...(options.accent !== undefined && { accent: options.accent }),
|
|
97
|
+
...(options.accentDark !== undefined && { accentDark: options.accentDark }),
|
|
98
|
+
});
|
|
99
|
+
|
|
46
100
|
const packageRoot = fileURLToPath(new URL("../../", import.meta.url));
|
|
47
101
|
const compiledRoot = fileURLToPath(new URL("../", import.meta.url));
|
|
48
102
|
|
|
@@ -155,6 +209,7 @@ export const bundleDoor = async (options: BundleDoorOptions): Promise<DeployMani
|
|
|
155
209
|
hostHeader: options.hostHeader ?? "host",
|
|
156
210
|
signout: options.signout ?? [],
|
|
157
211
|
jwks,
|
|
212
|
+
page: await pageFile(out, options.page),
|
|
158
213
|
};
|
|
159
214
|
const config = parseGateConfig(configFile);
|
|
160
215
|
configFile.door = config.door;
|