New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@stamhoofd/backend-middleware

Package Overview
Dependencies
Maintainers
0
Versions
113
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stamhoofd/backend-middleware - npm Package Compare versions

Comparing version 2.74.0 to 2.75.0

2

dist/src/CORSMiddleware.d.ts

@@ -1,3 +0,3 @@

import { ResponseMiddleware } from "@simonbackx/simple-endpoints";
import { ResponseMiddleware } from '@simonbackx/simple-endpoints';
export declare const CORSMiddleware: ResponseMiddleware;
//# sourceMappingURL=CORSMiddleware.d.ts.map

@@ -6,11 +6,11 @@ "use strict";

handleResponse(request, response) {
response.headers["Access-Control-Allow-Origin"] = request.headers.origin ?? "*";
response.headers["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS, PATCH, PUT, DELETE";
response.headers["Access-Control-Allow-Headers"] = request.headers["access-control-request-headers"] ?? "*";
response.headers["Access-Control-Max-Age"] = "86400"; // Cache 24h
if (request.method !== "OPTIONS") {
response.headers['Access-Control-Allow-Origin'] = request.headers.origin ?? '*';
response.headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PATCH, PUT, DELETE';
response.headers['Access-Control-Allow-Headers'] = request.headers['access-control-request-headers'] ?? '*';
response.headers['Access-Control-Max-Age'] = '86400'; // Cache 24h
if (request.method !== 'OPTIONS') {
// Expose all headers
const exposeHeaders = Object.keys(response.headers).map(h => h.toLowerCase()).filter(h => !['content-length', 'cache-control', 'content-language', 'content-type', 'expires', 'last-modified', 'pragma'].includes(h)).join(", ");
const exposeHeaders = Object.keys(response.headers).map(h => h.toLowerCase()).filter(h => !['content-length', 'cache-control', 'content-language', 'content-type', 'expires', 'last-modified', 'pragma'].includes(h)).join(', ');
if (exposeHeaders) {
response.headers["Access-Control-Expose-Headers"] = exposeHeaders;
response.headers['Access-Control-Expose-Headers'] = exposeHeaders;
}

@@ -21,8 +21,8 @@ }

// API is public
response.headers["Cross-Origin-Resource-Policy"] = "cross-origin";
if (request.headers.origin && !response.headers["Vary"]) {
response.headers["Vary"] = "Origin";
response.headers['Cross-Origin-Resource-Policy'] = 'cross-origin';
if (request.headers.origin && !response.headers['Vary']) {
response.headers['Vary'] = 'Origin';
}
}
},
};
//# sourceMappingURL=CORSMiddleware.js.map

@@ -1,3 +0,3 @@

import { RequestMiddleware, ResponseMiddleware } from "@simonbackx/simple-endpoints";
import { RequestMiddleware, ResponseMiddleware } from '@simonbackx/simple-endpoints';
export declare const LogMiddleware: ResponseMiddleware & RequestMiddleware;
//# sourceMappingURL=LogMiddleware.d.ts.map

@@ -13,3 +13,3 @@ "use strict";

}
simple_logging_1.logger.error(...requestPrefix(request, 'query'), "Request query was ", json);
simple_logging_1.logger.error(...requestPrefix(request, 'query'), 'Request query was ', json);
}

@@ -26,7 +26,7 @@ request.body.then((body) => {

}
simple_logging_1.logger.error(...requestPrefix(request, 'body'), "Request body was ", json);
simple_logging_1.logger.error(...requestPrefix(request, 'body'), 'Request body was ', json);
}
}
catch (e) {
simple_logging_1.logger.error(...requestPrefix(request, 'body'), "Request body was ", body);
simple_logging_1.logger.error(...requestPrefix(request, 'body'), 'Request body was ', body);
}

@@ -44,8 +44,11 @@ }).catch(console.error);

new simple_logging_1.StyledText(request.host).addClass('request', 'host'),
')'
')',
];
}
function requestPrefix(request, ...classes) {
if (!request._uniqueIndex) {
return [];
}
return [
new simple_logging_1.StyledText(`[R${request._uniqueIndex.toString().padStart(4, "0")}] `).addClass('request', 'tag', ...classes),
new simple_logging_1.StyledText(`[R${request._uniqueIndex.toString().padStart(4, '0')}] `).addClass('request', 'tag', ...classes),
];

@@ -57,4 +60,4 @@ }

request._startTime = process.hrtime();
if (request.method == "OPTIONS") {
if (STAMHOOFD.environment === "development") {
if (request.method == 'OPTIONS') {
if (STAMHOOFD.environment === 'development') {
simple_logging_1.logger.log(...requestPrefix(request), ...requestOneLiner(request));

@@ -69,3 +72,3 @@ }

prefixes: requestPrefix(request, 'output'),
tags: ['request', 'request-output']
tags: ['request', 'request-output'],
}, run);

@@ -77,9 +80,9 @@ },

const timeInMs = Math.round((endTime[0] - startTime[0]) * 1000 + (endTime[1] - startTime[1]) / 1000000);
if (request.method !== "OPTIONS") {
simple_logging_1.logger.log(...requestPrefix(request, 'time'), response.status + " - Finished in " + timeInMs + "ms");
if (request.method !== 'OPTIONS') {
simple_logging_1.logger.log(...requestPrefix(request, 'time'), response.status + ' - Finished in ' + timeInMs + 'ms');
}
if (error) {
if ((0, simple_errors_1.isSimpleError)(error) || (0, simple_errors_1.isSimpleErrors)(error)) {
if (!error.hasCode("expired_access_token") && !error.hasCode('unknown_domain') && !error.hasCode('unknown_webshop')) {
simple_logging_1.logger.error(...requestPrefix(request, 'error'), "Request with error in response ", new simple_logging_1.StyledText(error).addClass('request', 'error'));
if (!error.hasCode('expired_access_token') && !error.hasCode('unknown_domain') && !error.hasCode('unknown_webshop')) {
simple_logging_1.logger.error(...requestPrefix(request, 'error'), 'Request with error in response ', new simple_logging_1.StyledText(error).addClass('request', 'error'));
logRequestDetails(request);

@@ -89,8 +92,8 @@ }

else {
simple_logging_1.logger.error(...requestPrefix(request, 'error'), "Request with internal error ", new simple_logging_1.StyledText(error).addClass('request', 'error'));
simple_logging_1.logger.error(...requestPrefix(request, 'error'), 'Request with internal error ', new simple_logging_1.StyledText(error).addClass('request', 'error'));
logRequestDetails(request);
}
}
}
},
};
//# sourceMappingURL=LogMiddleware.js.map

@@ -1,2 +0,2 @@

import { EncodedResponse, Request, RequestMiddleware, ResponseMiddleware } from "@simonbackx/simple-endpoints";
import { Response, Request, RequestMiddleware, ResponseMiddleware } from '@simonbackx/simple-endpoints';
export declare class VersionMiddleware implements RequestMiddleware, ResponseMiddleware {

@@ -18,4 +18,4 @@ minimumVersion: number | undefined;

handleRequest(request: Request): void;
handleResponse(request: Request, response: EncodedResponse): void;
handleResponse(request: Request, response: Response): void;
}
//# sourceMappingURL=VersionMiddleware.d.ts.map

@@ -17,3 +17,3 @@ "use strict";

}
const platform = request.headers["x-platform"];
const platform = request.headers['x-platform'];
let version;

@@ -26,3 +26,3 @@ try {

// Allow missing version on /openid/ path
if (STAMHOOFD.environment === 'development' || request.url.startsWith("/openid/")) {
if (STAMHOOFD.environment === 'development' || request.url.startsWith('/openid/')) {
request.version = this.latestVersions.web;

@@ -34,3 +34,3 @@ return;

}
/*if (request.getIP() === '') {
/* if (request.getIP() === '') {
throw new SimpleError({

@@ -42,11 +42,11 @@ code: "blocked",

})
}*/
} */
if (version < this.minimumVersion) {
// WARNING: update caddy config for on demand certificates, because we don't want to throw errors over there!
if (platform === "web" || platform === undefined) {
if (platform === 'web' || platform === undefined) {
throw new simple_errors_1.SimpleError({
code: "client_update_required",
code: 'client_update_required',
statusCode: 400,
message: "Er is een noodzakelijke update beschikbaar. Herlaad de pagina en wis indien nodig de cache van jouw browser.",
human: "Er is een noodzakelijke update beschikbaar. Herlaad de pagina en wis indien nodig de cache van jouw browser."
message: 'Er is een noodzakelijke update beschikbaar. Herlaad de pagina en wis indien nodig de cache van jouw browser.',
human: 'Er is een noodzakelijke update beschikbaar. Herlaad de pagina en wis indien nodig de cache van jouw browser.',
});

@@ -56,6 +56,6 @@ }

throw new simple_errors_1.SimpleError({
code: "client_update_required",
code: 'client_update_required',
statusCode: 400,
message: "Er is een noodzakelijke update beschikbaar. Update de app en probeer opnieuw!",
human: "Er is een noodzakelijke update beschikbaar. Update de app en probeer opnieuw!"
message: 'Er is een noodzakelijke update beschikbaar. Update de app en probeer opnieuw!',
human: 'Er is een noodzakelijke update beschikbaar. Update de app en probeer opnieuw!',
});

@@ -66,14 +66,14 @@ }

handleResponse(request, response) {
const platform = request.headers["x-platform"];
if (platform === "android") {
response.headers["X-Platform-Latest-Version"] = this.latestVersions.android;
const platform = request.headers['x-platform'];
if (platform === 'android') {
response.headers['X-Platform-Latest-Version'] = this.latestVersions.android;
}
if (platform === "ios") {
response.headers["X-Platform-Latest-Version"] = this.latestVersions.ios;
if (platform === 'ios') {
response.headers['X-Platform-Latest-Version'] = this.latestVersions.ios;
}
if (platform === "web") {
response.headers["X-Platform-Latest-Version"] = this.latestVersions.web;
if (platform === 'web') {
response.headers['X-Platform-Latest-Version'] = this.latestVersions.web;
}
try {
response.headers["X-Version"] = Math.min(structures_1.Version, request.getVersion());
response.headers['X-Version'] = Math.min(structures_1.Version, request.getVersion());
}

@@ -80,0 +80,0 @@ catch (e) {

{
"name": "@stamhoofd/backend-middleware",
"version": "2.74.0",
"version": "2.75.0",
"main": "./dist/index.js",

@@ -16,3 +16,3 @@ "types": "./dist/index.d.ts",

"dependencies": {
"@simonbackx/simple-endpoints": "1.15.0",
"@simonbackx/simple-endpoints": "1.19.0",
"@simonbackx/simple-errors": "^1.4",

@@ -24,3 +24,3 @@ "@simonbackx/simple-logging": "^1.0.1"

},
"gitHead": "3a77692b8163f10c231785de2f720c423a909762"
"gitHead": "4710a9386f9f489356e04518622cc83c5faa2bf1"
}

@@ -1,18 +0,18 @@

import { EncodedResponse, Request, ResponseMiddleware } from "@simonbackx/simple-endpoints";
import { Request, Response, ResponseMiddleware } from '@simonbackx/simple-endpoints';
export const CORSMiddleware: ResponseMiddleware = {
handleResponse(request: Request, response: EncodedResponse) {
response.headers["Access-Control-Allow-Origin"] = request.headers.origin ?? "*"
response.headers["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS, PATCH, PUT, DELETE"
response.headers["Access-Control-Allow-Headers"] = request.headers["access-control-request-headers"] ?? "*";
response.headers["Access-Control-Max-Age"] = "86400"; // Cache 24h
if (request.method !== "OPTIONS") {
handleResponse(request: Request, response: Response) {
response.headers['Access-Control-Allow-Origin'] = request.headers.origin ?? '*';
response.headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PATCH, PUT, DELETE';
response.headers['Access-Control-Allow-Headers'] = request.headers['access-control-request-headers'] ?? '*';
response.headers['Access-Control-Max-Age'] = '86400'; // Cache 24h
if (request.method !== 'OPTIONS') {
// Expose all headers
const exposeHeaders = Object.keys(response.headers).map(h => h.toLowerCase()).filter(h => !['content-length', 'cache-control', 'content-language', 'content-type', 'expires', 'last-modified', 'pragma'].includes(h)).join(", ");
const exposeHeaders = Object.keys(response.headers).map(h => h.toLowerCase()).filter(h => !['content-length', 'cache-control', 'content-language', 'content-type', 'expires', 'last-modified', 'pragma'].includes(h)).join(', ');
if (exposeHeaders) {
response.headers["Access-Control-Expose-Headers"] = exposeHeaders
response.headers['Access-Control-Expose-Headers'] = exposeHeaders;
}
}
// Not needed

@@ -22,8 +22,8 @@ // response.headers["Access-Control-Allow-Credentials"] = "true";

// API is public
response.headers["Cross-Origin-Resource-Policy"] = "cross-origin"
response.headers['Cross-Origin-Resource-Policy'] = 'cross-origin';
if (request.headers.origin && !response.headers["Vary"]) {
response.headers["Vary"] = "Origin"
if (request.headers.origin && !response.headers['Vary']) {
response.headers['Vary'] = 'Origin';
}
}
}
},
};

@@ -1,4 +0,4 @@

import { EncodedResponse, Request, RequestMiddleware,ResponseMiddleware } from "@simonbackx/simple-endpoints";
import { isSimpleError, isSimpleErrors } from "@simonbackx/simple-errors";
import { logger, StyledText } from "@simonbackx/simple-logging";
import { Response, Request, RequestMiddleware, ResponseMiddleware } from '@simonbackx/simple-endpoints';
import { isSimpleError, isSimpleErrors } from '@simonbackx/simple-errors';
import { logger, StyledText } from '@simonbackx/simple-logging';
let requestCounter = 0;

@@ -8,11 +8,11 @@

if (Object.keys(request.query).length) {
const json: any = {...request.query}
const json: any = { ...request.query };
if (json && json.password) {
json.password = '*******'
json.password = '*******';
}
logger.error(
...requestPrefix(request, 'query'),
"Request query was ",
json
)
'Request query was ',
json,
);
}

@@ -22,9 +22,9 @@

if (!body) {
return
return;
}
try {
const json = JSON.parse(body)
const json = JSON.parse(body);
if (Array.isArray(json) || Object.keys(json).length) {
if (json && json.password) {
json.password = '*******'
json.password = '*******';
}

@@ -34,17 +34,18 @@

...requestPrefix(request, 'body'),
"Request body was ",
json
)
'Request body was ',
json,
);
}
} catch (e) {
}
catch (e) {
logger.error(
...requestPrefix(request, 'body'),
"Request body was ",
body
)
'Request body was ',
body,
);
}
}).catch(console.error)
}).catch(console.error);
}
function requestOneLiner(request: Request): (StyledText | string)[] {
function requestOneLiner(request: Request): (StyledText | string)[] {
return [

@@ -55,13 +56,16 @@ new StyledText(request.method).addClass('request', 'method', request.method.toLowerCase()),

' (',
new StyledText(request.getIP()).addClass('request', 'ip'),
'@',
new StyledText(request.host).addClass('request', 'host'),
')'
]
new StyledText(request.getIP()).addClass('request', 'ip'),
'@',
new StyledText(request.host).addClass('request', 'host'),
')',
];
}
function requestPrefix(request: Request, ...classes: string[]): (StyledText | string)[] {
if (!(request as any)._uniqueIndex) {
return [];
}
return [
new StyledText(`[R${((request as any)._uniqueIndex as number).toString().padStart(4, "0")}] `).addClass('request', 'tag', ...classes),
]
new StyledText(`[R${((request as any)._uniqueIndex as number).toString().padStart(4, '0')}] `).addClass('request', 'tag', ...classes),
];
}

@@ -71,13 +75,13 @@

handleRequest(request: Request) {
(request as any)._uniqueIndex = requestCounter++
(request as any)._uniqueIndex = requestCounter++;
(request as any)._startTime = process.hrtime();
if (request.method == "OPTIONS") {
if (STAMHOOFD.environment === "development") {
if (request.method == 'OPTIONS') {
if (STAMHOOFD.environment === 'development') {
logger.log(
...requestPrefix(request),
...requestOneLiner(request)
)
...requestOneLiner(request),
);
}
return
return;
}

@@ -87,4 +91,4 @@

...requestPrefix(request),
...requestOneLiner(request)
)
...requestOneLiner(request),
);
},

@@ -95,7 +99,7 @@

prefixes: requestPrefix(request, 'output'),
tags: ['request', 'request-output']
}, run)
tags: ['request', 'request-output'],
}, run);
},
handleResponse(request: Request, response: EncodedResponse, error?: Error) {
handleResponse(request: Request, response: Response, error?: Error) {
const endTime = process.hrtime();

@@ -105,7 +109,7 @@ const startTime = (request as any)._startTime ?? endTime;

if (request.method !== "OPTIONS") {
if (request.method !== 'OPTIONS') {
logger.log(
...requestPrefix(request, 'time'),
response.status + " - Finished in "+timeInMs+"ms"
)
response.status + ' - Finished in ' + timeInMs + 'ms',
);
}

@@ -115,22 +119,23 @@

if (isSimpleError(error) || isSimpleErrors(error)) {
if (!error.hasCode("expired_access_token") && !error.hasCode('unknown_domain') && !error.hasCode('unknown_webshop')) {
if (!error.hasCode('expired_access_token') && !error.hasCode('unknown_domain') && !error.hasCode('unknown_webshop')) {
logger.error(
...requestPrefix(request, 'error'),
"Request with error in response ",
new StyledText(error).addClass('request', 'error')
)
'Request with error in response ',
new StyledText(error).addClass('request', 'error'),
);
logRequestDetails(request)
logRequestDetails(request);
}
} else {
}
else {
logger.error(
...requestPrefix(request, 'error'),
"Request with internal error ",
new StyledText(error).addClass('request', 'error')
)
'Request with internal error ',
new StyledText(error).addClass('request', 'error'),
);
logRequestDetails(request)
logRequestDetails(request);
}
}
}
}
},
};

@@ -1,12 +0,12 @@

import { EncodedResponse, Request, RequestMiddleware, ResponseMiddleware } from "@simonbackx/simple-endpoints";
import { isSimpleError, isSimpleErrors, SimpleError } from "@simonbackx/simple-errors";
import { Version } from "@stamhoofd/structures";
import { Response, Request, RequestMiddleware, ResponseMiddleware } from '@simonbackx/simple-endpoints';
import { isSimpleError, isSimpleErrors, SimpleError } from '@simonbackx/simple-errors';
import { Version } from '@stamhoofd/structures';
export class VersionMiddleware implements RequestMiddleware, ResponseMiddleware {
minimumVersion: number | undefined
latestVersions: {android: number, ios: number, web: number}
minimumVersion: number | undefined;
latestVersions: { android: number; ios: number; web: number };
constructor(options: {latestVersions: {android: number, ios: number, web: number}, minimumVersion?: number}) {
this.minimumVersion = options.minimumVersion
this.latestVersions = options.latestVersions
constructor(options: { latestVersions: { android: number; ios: number; web: number }; minimumVersion?: number }) {
this.minimumVersion = options.minimumVersion;
this.latestVersions = options.latestVersions;
}

@@ -16,6 +16,6 @@

if (!this.minimumVersion) {
return
return;
}
const platform = request.headers["x-platform"];
const platform = request.headers['x-platform'];

@@ -25,9 +25,10 @@ let version!: number;

try {
version = request.getVersion()
} catch (e) {
version = request.getVersion();
}
catch (e) {
if ((isSimpleError(e) || isSimpleErrors(e)) && e.hasCode('missing_version')) {
// Allow missing version on /openid/ path
if (STAMHOOFD.environment === 'development' || request.url.startsWith("/openid/")) {
request.version = this.latestVersions.web
return
if (STAMHOOFD.environment === 'development' || request.url.startsWith('/openid/')) {
request.version = this.latestVersions.web;
return;
}

@@ -38,3 +39,3 @@ }

/*if (request.getIP() === '') {
/* if (request.getIP() === '') {
throw new SimpleError({

@@ -46,20 +47,21 @@ code: "blocked",

})
}*/
} */
if (version < this.minimumVersion) {
// WARNING: update caddy config for on demand certificates, because we don't want to throw errors over there!
if (platform === "web" || platform === undefined) {
if (platform === 'web' || platform === undefined) {
throw new SimpleError({
code: "client_update_required",
code: 'client_update_required',
statusCode: 400,
message: "Er is een noodzakelijke update beschikbaar. Herlaad de pagina en wis indien nodig de cache van jouw browser.",
human: "Er is een noodzakelijke update beschikbaar. Herlaad de pagina en wis indien nodig de cache van jouw browser."
})
} else {
message: 'Er is een noodzakelijke update beschikbaar. Herlaad de pagina en wis indien nodig de cache van jouw browser.',
human: 'Er is een noodzakelijke update beschikbaar. Herlaad de pagina en wis indien nodig de cache van jouw browser.',
});
}
else {
throw new SimpleError({
code: "client_update_required",
code: 'client_update_required',
statusCode: 400,
message: "Er is een noodzakelijke update beschikbaar. Update de app en probeer opnieuw!",
human: "Er is een noodzakelijke update beschikbaar. Update de app en probeer opnieuw!"
})
message: 'Er is een noodzakelijke update beschikbaar. Update de app en probeer opnieuw!',
human: 'Er is een noodzakelijke update beschikbaar. Update de app en probeer opnieuw!',
});
}

@@ -69,18 +71,19 @@ }

handleResponse(request: Request, response: EncodedResponse) {
const platform = request.headers["x-platform"];
handleResponse(request: Request, response: Response) {
const platform = request.headers['x-platform'];
if (platform === "android") {
response.headers["X-Platform-Latest-Version"] = this.latestVersions.android
if (platform === 'android') {
response.headers['X-Platform-Latest-Version'] = this.latestVersions.android;
}
if (platform === "ios") {
response.headers["X-Platform-Latest-Version"] = this.latestVersions.ios
if (platform === 'ios') {
response.headers['X-Platform-Latest-Version'] = this.latestVersions.ios;
}
if (platform === "web") {
response.headers["X-Platform-Latest-Version"] = this.latestVersions.web
if (platform === 'web') {
response.headers['X-Platform-Latest-Version'] = this.latestVersions.web;
}
try {
response.headers["X-Version"] = Math.min(Version, request.getVersion())
} catch (e) {
response.headers['X-Version'] = Math.min(Version, request.getVersion());
}
catch (e) {
// No version provided or invalid version

@@ -87,0 +90,0 @@ }

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc