Files
formbricks-formbricks/apps/web/lib/utils/url.ts
Piyush Gupta 84294f9df2 feat: adds debug logs (#6237)
Co-authored-by: Matthias Nannt <mail@matthiasnannt.com>
2025-08-01 11:10:21 +00:00

61 lines
1.6 KiB
TypeScript

import { TActionClassPageUrlRule } from "@formbricks/types/action-classes";
export const testURLmatch = (
testUrl: string,
pageUrlValue: string,
pageUrlRule: TActionClassPageUrlRule,
t: (key: string) => string
): boolean => {
let regex: RegExp;
switch (pageUrlRule) {
case "exactMatch":
return testUrl === pageUrlValue;
case "contains":
return testUrl.includes(pageUrlValue);
case "startsWith":
return testUrl.startsWith(pageUrlValue);
case "endsWith":
return testUrl.endsWith(pageUrlValue);
case "notMatch":
return testUrl !== pageUrlValue;
case "notContains":
return !testUrl.includes(pageUrlValue);
case "matchesRegex":
try {
regex = new RegExp(pageUrlValue);
} catch {
throw new Error(t("environments.actions.invalid_regex"));
}
return regex.test(testUrl);
default:
throw new Error(t("environments.actions.invalid_match_type"));
}
};
// Helper function to validate callback URLs
export const isValidCallbackUrl = (url: string, WEBAPP_URL: string): boolean => {
try {
const parsedUrl = new URL(url);
const allowedSchemes = ["https:", "http:"];
// Extract the domain from WEBAPP_URL
const parsedWebAppUrl = new URL(WEBAPP_URL);
const allowedDomains = [parsedWebAppUrl.hostname];
return allowedSchemes.includes(parsedUrl.protocol) && allowedDomains.includes(parsedUrl.hostname);
} catch (err) {
return false;
}
};
export const isStringUrl = (url: string): boolean => {
try {
new URL(url);
return true;
} catch {
return false;
}
};