socket-function 0.66.0 → 0.68.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socket-function",
3
- "version": "0.66.0",
3
+ "version": "0.68.0",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
@@ -134,8 +134,9 @@ class RequireControllerBase {
134
134
 
135
135
  public async requireHTML(config?: {
136
136
  requireCalls?: string[];
137
+ cacheTime?: number;
137
138
  }) {
138
- let { requireCalls } = config || {};
139
+ let { requireCalls, cacheTime } = config || {};
139
140
  let result = resolvedHTMLFile();
140
141
  if (beforeEntryText.length > 0) {
141
142
  let resolved: string[] = [];
@@ -166,7 +167,13 @@ class RequireControllerBase {
166
167
  } else {
167
168
  result = result.replace(ENTRY_TEMPLATE, "");
168
169
  }
169
- return setHTTPResultHeaders(Buffer.from(result), { "Content-Type": "text/html" });
170
+ let headers: Record<string, string> = {
171
+ "Content-Type": "text/html"
172
+ };
173
+ if (cacheTime) {
174
+ headers["Cache-Control"] = `max-age=${Math.floor(cacheTime / 1000)}`;
175
+ }
176
+ return setHTTPResultHeaders(Buffer.from(result), headers);
170
177
  }
171
178
 
172
179
  public async getModules(
@@ -61,6 +61,58 @@ export async function httpCallHandler(request: http.IncomingMessage, response: h
61
61
  // Don't keep alive, to prevent issues with zombie sockets.
62
62
  response.setHeader("Connection", "close");
63
63
 
64
+ // CORS bs (due to having to explictly allow subdomains)
65
+ {
66
+ response.setHeader("Strict-Transport-Security", "max-age=63072000; includeSubDomains; preload");
67
+ response.setHeader("Cross-Origin-Opener-Policy", "same-origin-allow-popups");
68
+ // NOTE: "credentialless" would work here too
69
+ response.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
70
+
71
+ let origin = request.headers.origin || request.headers.referer;
72
+ let allowed = false;
73
+ if (!origin) {
74
+ // I guess it's a script, so just allow it (as it could easily set any header it wanted anyways)
75
+ allowed = true;
76
+ origin = "*";
77
+ } else {
78
+ let host = request.headers.host;
79
+ if (!host) {
80
+ throw new Error("Missing host in request headers");
81
+ }
82
+ function rootDomain(hostname: string) {
83
+ let parts = hostname.split(".");
84
+ if (parts.length > 2) {
85
+ return parts.slice(-2).join(".");
86
+ }
87
+ return hostname;
88
+ }
89
+ let hostDomain = rootDomain(host);
90
+ let originDomain = rootDomain(origin);
91
+ allowed = hostDomain === originDomain;
92
+ if (!allowed) {
93
+ console.log(`Rejected CORS, hostDomain: ${hostDomain} !== ${originDomain}`);
94
+ }
95
+ }
96
+
97
+ // Allow if it has no origin, as that means it isn't a CORS request?
98
+ if (allowed) {
99
+ response.setHeader("Cross-Origin-Resource-Policy", "cross-origin");
100
+ } else {
101
+ response.setHeader("Cross-Origin-Resource-Policy", "same-site");
102
+ }
103
+
104
+ response.setHeader("vary", "Access-Control-Request-Headers");
105
+ response.setHeader("Access-Control-Allow-Origin", allowed ? origin : "");
106
+
107
+ if (allowed) {
108
+ response.setHeader("Access-Control-Allow-Credentials", "true");
109
+ response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
110
+ response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Content-Length, X-Requested-With, x-uncompressed-content-length, Cookie");
111
+ }
112
+ response.setHeader("Access-Control-Expose-Headers", "x-uncompressed-content-length");
113
+ }
114
+
115
+
64
116
  let urlBase = request.url;
65
117
  if (!urlBase) {
66
118
  throw new Error("Missing URL");
File without changes