cds-rate-limit
Version:
enabled rate limit pattern for CAP NodeJS Runtime
45 lines (37 loc) • 1.06 kB
text/typescript
import { KeyPart } from "./types";
/**
* custom key extractor
*/
export interface KeyExtractor {
/**
* extract key for target key part label
*/
targetKeyPart: string;
/**
* extract key part from cds event/context
*/
extract: (evt: any) => string;
}
export const builtInExtractors: Array<KeyExtractor> = [
{
targetKeyPart: "tenant",
extract: (evt) => evt?.tenant ?? "unknown_tenant"
},
{
targetKeyPart: "user_id",
extract: (evt) => evt?.user?.id ?? "unknown_user"
},
{
targetKeyPart: "remote_ip",
extract: (evt) => evt?._?.req?.ip ?? evt?._?.req?.socket.remoteAddress ?? "unknown_ip"
},
];
export const keyExtractorCreatorBuilder = (extensionExtractors: Array<KeyExtractor> = []) => (keyParts: Array<KeyPart>) => (evt: any) => {
const parts = [];
for (const extractor of [...builtInExtractors, ...extensionExtractors]) {
if (extractor.targetKeyPart !== undefined && keyParts.includes(extractor.targetKeyPart)) {
parts.push(extractor.extract(evt));
}
}
return parts.join("/");
};