{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-c43ab2da988b861a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/faq.tsx:23", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/faq.tsx:23"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-320dcf9c11b8b364", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/jobPosting.tsx:67", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/jobPosting.tsx:67"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bba8b5d8d2c302b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/contact.tsx:41", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/contact.tsx:41"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4ffe618a9c293a4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/servicePrice.tsx:142", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/servicePrice.tsx:142"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-26a46ba8b70a3d1a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/product.tsx:98", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/product.tsx:98"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8dc119851eb726fb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/article.tsx:50", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/article.tsx:50"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09ad17fb18e13331", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/homepage.tsx:51", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/homepage.tsx:51"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d03e7f2a8bae5ed", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/breadcrumb.tsx:21", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/breadcrumb.tsx:21"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bbb13bc0c4d5a357", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/service.tsx:35", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/service.tsx:35"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be78eec3d09831fd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:82", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:82"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2167df79958d8e1", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/faq.tsx:23", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/faq.tsx:23"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5d03e74a4d96ad27", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/jobPosting.tsx:67", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/jobPosting.tsx:67"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5843063bc028cb96", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/contact.tsx:41", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/contact.tsx:41"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-484f285490d04d67", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/servicePrice.tsx:142", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/servicePrice.tsx:142"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c44ac08ad1d6999", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/product.tsx:98", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/product.tsx:98"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d6ebff93426daf6", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/article.tsx:50", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/article.tsx:50"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f6d7594f2f1a03e", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/homepage.tsx:51", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/homepage.tsx:51"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b2104040271f9602", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/breadcrumb.tsx:21", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/breadcrumb.tsx:21"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc0025e14be7b801", "name": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/service.tsx:35", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/service.tsx:35"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1035c06c1aec3239", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:82", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:82"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e01429c278592daf", "name": "Insecure pattern 'cors_wildcard' in src/app/api/send-bulk-email/route.ts:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/send-bulk-email/route.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d34656c66866c377", "name": "Insecure pattern 'local_storage_auth_token' in src/lib/errorReporter.ts:43", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/lib/errorReporter.ts:43"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 175 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 26 placeholder/mock markers across 10 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-531e5033b342cafb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ChatWidget.tsx:287", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ChatWidget.tsx:287"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d929a990917bc8f4", "name": "Commented-code block (7 lines) in src/app/api/google-ads-conversion/route.ts:12", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/google-ads-conversion/route.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ee4ac065f9d1b5f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/google-ads-conversion/route.ts:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/google-ads-conversion/route.ts:63"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1dfed37d19959a7b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/fb-capi/route.ts:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/fb-capi/route.ts:89"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-15b889c592e5f9ee", "name": "Commented-code block (5 lines) in src/app/book/page.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/book/page.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4ab4e76d76ec526", "name": "Commented-code block (6 lines) in src/app/book/fetch/masterPriority.ts:47", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/book/fetch/masterPriority.ts:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aeabd617f7edd3b7", "name": "Commented-code block (6 lines) in src/lib/hiring.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/hiring.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7699287fcde5a0c7", "name": "Dangling fetch: POST https://graph.facebook.com/v22.0/${PIXEL_ID}/events?access_token=${ACCESS_TOKEN} (src/app/api/fb-ca", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v22.0/${PIXEL_ID}/events?access_token=${ACCESS_TOKEN} (src/app/api/fb-capi/route.ts:89)"}, "fullDescription": {"text": "`src/app/api/fb-capi/route.ts:89` calls `POST https://graph.facebook.com/v22.0/${PIXEL_ID}/events?access_token=${ACCESS_TOKEN}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v22.0/<p>/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4096f8b87c39cf00", "name": "Dangling fetch: POST /api/career-apply (src/app/kariera/CareerForm.tsx:74)", "shortDescription": {"text": "Dangling fetch: POST /api/career-apply (src/app/kariera/CareerForm.tsx:74)"}, "fullDescription": {"text": "`src/app/kariera/CareerForm.tsx:74` calls `POST /api/career-apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/career-apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd6cc0e9920b25e2", "name": "Dangling fetch: POST /api/fb-capi (src/fetch/pixel.ts:73)", "shortDescription": {"text": "Dangling fetch: POST /api/fb-capi (src/fetch/pixel.ts:73)"}, "fullDescription": {"text": "`src/fetch/pixel.ts:73` calls `POST /api/fb-capi` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/fb-capi`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4660ca72b3184a81", "name": "Dangling fetch: POST /api/google-ads-conversion (src/fetch/googleAds.ts:42)", "shortDescription": {"text": "Dangling fetch: POST /api/google-ads-conversion (src/fetch/googleAds.ts:42)"}, "fullDescription": {"text": "`src/fetch/googleAds.ts:42` calls `POST /api/google-ads-conversion` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/google-ads-conversion`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-caf9b35dffbe6fba", "name": "Unused endpoint: GET /api/blogs?fields[0]=slug", "shortDescription": {"text": "Unused endpoint: GET /api/blogs?fields[0]=slug"}, "fullDescription": {"text": "`src/app/blog/[post]/page.tsx` declares `GET /api/blogs?fields[0]=slug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a2090d108dcaad4", "name": "Unused endpoint: GET /api/services?fields[0]=slug", "shortDescription": {"text": "Unused endpoint: GET /api/services?fields[0]=slug"}, "fullDescription": {"text": "`src/app/service/[slug]/page.tsx` declares `GET /api/services?fields[0]=slug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f58d402d35e9d20f", "name": "Unused endpoint: GET /api/personals?fields[0]=noonaEmployeeId&fields[1]=bookingPriority&filters[isActive][$eq]=true&pagi", "shortDescription": {"text": "Unused endpoint: GET /api/personals?fields[0]=noonaEmployeeId&fields[1]=bookingPriority&filters[isActive][$eq]=true&pagination[pageSize]=100&status=published"}, "fullDescription": {"text": "`src/app/book/fetch/masterPriority.ts` declares `GET /api/personals?fields[0]=noonaEmployeeId&fields[1]=bookingPriority&filters[isActive][$eq]=true&pagination[pageSize]=100&status=published` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb37f53f78209280", "name": "Unused endpoint: GET /api/personals?fields[0]=noonaEmployeeId&fields[1]=tier&filters[isActive][$eq]=true&filters[positio", "shortDescription": {"text": "Unused endpoint: GET /api/personals?fields[0]=noonaEmployeeId&fields[1]=tier&filters[isActive][$eq]=true&filters[position][$eq]=master&pagination[pageSize]=100&status=published"}, "fullDescription": {"text": "`src/app/book/fetch/juniorMap.ts` declares `GET /api/personals?fields[0]=noonaEmployeeId&fields[1]=tier&filters[isActive][$eq]=true&filters[position][$eq]=master&pagination[pageSize]=100&status=published` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70e9aed9507f11b9", "name": "Unused endpoint: GET /api/articles?fields[0]=slug", "shortDescription": {"text": "Unused endpoint: GET /api/articles?fields[0]=slug"}, "fullDescription": {"text": "`src/app/[article]/page.tsx` declares `GET /api/articles?fields[0]=slug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c80dec7e98fdbbd", "name": "Unused endpoint: POST /api/vouchers", "shortDescription": {"text": "Unused endpoint: POST /api/vouchers"}, "fullDescription": {"text": "`src/fetch/voucher.ts` declares `POST /api/vouchers` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19666"}, "properties": {"repository": "simon1400/barbitch-client", "repoUrl": "https://github.com/simon1400/barbitch-client", "branch": "main"}, "results": [{"ruleId": "scanner-c43ab2da988b861a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/faq.tsx:23"}, "properties": {"repobilityId": "ed2e5cb18bf4af00", "scanner": "scanner-primary", "fingerprint": "c43ab2da988b861a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-320dcf9c11b8b364", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/jobPosting.tsx:67"}, "properties": {"repobilityId": "a749c78e898f0646", "scanner": "scanner-primary", "fingerprint": "320dcf9c11b8b364", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2bba8b5d8d2c302b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/contact.tsx:41"}, "properties": {"repobilityId": "092b1b6ce61f927f", "scanner": "scanner-primary", "fingerprint": "2bba8b5d8d2c302b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b4ffe618a9c293a4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/servicePrice.tsx:142"}, "properties": {"repobilityId": "067b54ace0c24b1d", "scanner": "scanner-primary", "fingerprint": "b4ffe618a9c293a4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-26a46ba8b70a3d1a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/product.tsx:98"}, "properties": {"repobilityId": "b5fdd991dc849586", "scanner": "scanner-primary", "fingerprint": "26a46ba8b70a3d1a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8dc119851eb726fb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/article.tsx:50"}, "properties": {"repobilityId": "baa0a6893cd6e40c", "scanner": "scanner-primary", "fingerprint": "8dc119851eb726fb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-09ad17fb18e13331", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/homepage.tsx:51"}, "properties": {"repobilityId": "e05684115a44b933", "scanner": "scanner-primary", "fingerprint": "09ad17fb18e13331", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1d03e7f2a8bae5ed", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/breadcrumb.tsx:21"}, "properties": {"repobilityId": "f7a346e5b67aa192", "scanner": "scanner-primary", "fingerprint": "1d03e7f2a8bae5ed", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bbb13bc0c4d5a357", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/schemasOrg/service.tsx:35"}, "properties": {"repobilityId": "0c25de72666ebfc5", "scanner": "scanner-primary", "fingerprint": "bbb13bc0c4d5a357", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-be78eec3d09831fd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:82"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "be78eec3d09831fd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a2167df79958d8e1", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/faq.tsx:23"}, "properties": {"repobilityId": "fcf5d5bd1afd680d", "scanner": "scanner-primary", "fingerprint": "a2167df79958d8e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/faq.tsx"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-5d03e74a4d96ad27", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/jobPosting.tsx:67"}, "properties": {"repobilityId": "916406ca528c848c", "scanner": "scanner-primary", "fingerprint": "5d03e74a4d96ad27", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/jobPosting.tsx"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-5843063bc028cb96", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/contact.tsx:41"}, "properties": {"repobilityId": "bbb0850cb664e580", "scanner": "scanner-primary", "fingerprint": "5843063bc028cb96", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/contact.tsx"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-484f285490d04d67", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/servicePrice.tsx:142"}, "properties": {"repobilityId": "23612fea0c9ad8cd", "scanner": "scanner-primary", "fingerprint": "484f285490d04d67", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/servicePrice.tsx"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-3c44ac08ad1d6999", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/product.tsx:98"}, "properties": {"repobilityId": "f12f1b693fd89ea0", "scanner": "scanner-primary", "fingerprint": "3c44ac08ad1d6999", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/product.tsx"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-9d6ebff93426daf6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/article.tsx:50"}, "properties": {"repobilityId": "57b34c71a0b05fce", "scanner": "scanner-primary", "fingerprint": "9d6ebff93426daf6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/article.tsx"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-4f6d7594f2f1a03e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/homepage.tsx:51"}, "properties": {"repobilityId": "7d09255b5e7e086b", "scanner": "scanner-primary", "fingerprint": "4f6d7594f2f1a03e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/homepage.tsx"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-b2104040271f9602", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/breadcrumb.tsx:21"}, "properties": {"repobilityId": "862c38f62e66c8cc", "scanner": "scanner-primary", "fingerprint": "b2104040271f9602", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/breadcrumb.tsx"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-fc0025e14be7b801", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/schemasOrg/service.tsx:35"}, "properties": {"repobilityId": "fea03fc3da06c7d3", "scanner": "scanner-primary", "fingerprint": "fc0025e14be7b801", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/schemasOrg/service.tsx"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-1035c06c1aec3239", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:82"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "1035c06c1aec3239", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-e01429c278592daf", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/send-bulk-email/route.ts:14"}, "properties": {"repobilityId": "5fa1c55c34e09aec", "scanner": "scanner-primary", "fingerprint": "e01429c278592daf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/send-bulk-email/route.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-d34656c66866c377", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/lib/errorReporter.ts:43"}, "properties": {"repobilityId": "02a23990eeef0731", "scanner": "scanner-primary", "fingerprint": "d34656c66866c377", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/errorReporter.ts"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "30dc547e5dfa0d7e", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "3a1397186b796c43", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "63c308a6b3e34871", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "adc33f6d33b95326", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "bd32c48d9330d9a1", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "dae3fec8897acad0", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "c6237499cab48cc0", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "823d01d7b51967b7", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-531e5033b342cafb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/ChatWidget.tsx:287"}, "properties": {"repobilityId": "9a757c7554292130", "scanner": "scanner-primary", "fingerprint": "531e5033b342cafb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d929a990917bc8f4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/google-ads-conversion/route.ts:12"}, "properties": {"repobilityId": "d39437816c87a47e", "scanner": "scanner-primary", "fingerprint": "d929a990917bc8f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ee4ac065f9d1b5f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/google-ads-conversion/route.ts:63"}, "properties": {"repobilityId": "d4107695e56e528d", "scanner": "scanner-primary", "fingerprint": "1ee4ac065f9d1b5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1dfed37d19959a7b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/fb-capi/route.ts:89"}, "properties": {"repobilityId": "576715bea4c91d04", "scanner": "scanner-primary", "fingerprint": "1dfed37d19959a7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-15b889c592e5f9ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/book/page.tsx:19"}, "properties": {"repobilityId": "069b91c59a045133", "scanner": "scanner-primary", "fingerprint": "15b889c592e5f9ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4ab4e76d76ec526", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/book/fetch/masterPriority.ts:47"}, "properties": {"repobilityId": "8550ffa23d4bd91e", "scanner": "scanner-primary", "fingerprint": "e4ab4e76d76ec526", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aeabd617f7edd3b7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/hiring.ts:1"}, "properties": {"repobilityId": "17e052c981370cd9", "scanner": "scanner-primary", "fingerprint": "aeabd617f7edd3b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7699287fcde5a0c7", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v22.0/${PIXEL_ID}/events?access_token=${ACCESS_TOKEN} (src/app/api/fb-capi/route.ts:89)"}, "properties": {"repobilityId": "33e0a9adc9f75197", "scanner": "scanner-primary", "fingerprint": "7699287fcde5a0c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4096f8b87c39cf00", "level": "error", "message": {"text": "Dangling fetch: POST /api/career-apply (src/app/kariera/CareerForm.tsx:74)"}, "properties": {"repobilityId": "42c6ced98b341c51", "scanner": "scanner-primary", "fingerprint": "4096f8b87c39cf00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-fd6cc0e9920b25e2", "level": "error", "message": {"text": "Dangling fetch: POST /api/fb-capi (src/fetch/pixel.ts:73)"}, "properties": {"repobilityId": "7e4d462f255181e6", "scanner": "scanner-primary", "fingerprint": "fd6cc0e9920b25e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4660ca72b3184a81", "level": "error", "message": {"text": "Dangling fetch: POST /api/google-ads-conversion (src/fetch/googleAds.ts:42)"}, "properties": {"repobilityId": "0eeda9b424a30b57", "scanner": "scanner-primary", "fingerprint": "4660ca72b3184a81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-caf9b35dffbe6fba", "level": "note", "message": {"text": "Unused endpoint: GET /api/blogs?fields[0]=slug"}, "properties": {"repobilityId": "3794ffacf31fe97b", "scanner": "scanner-primary", "fingerprint": "caf9b35dffbe6fba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a2090d108dcaad4", "level": "note", "message": {"text": "Unused endpoint: GET /api/services?fields[0]=slug"}, "properties": {"repobilityId": "affc0eb6a3dfafab", "scanner": "scanner-primary", "fingerprint": "7a2090d108dcaad4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f58d402d35e9d20f", "level": "note", "message": {"text": "Unused endpoint: GET /api/personals?fields[0]=noonaEmployeeId&fields[1]=bookingPriority&filters[isActive][$eq]=true&pagination[pageSize]=100&status=published"}, "properties": {"repobilityId": "b1cf80cdd6be835c", "scanner": "scanner-primary", "fingerprint": "f58d402d35e9d20f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb37f53f78209280", "level": "note", "message": {"text": "Unused endpoint: GET /api/personals?fields[0]=noonaEmployeeId&fields[1]=tier&filters[isActive][$eq]=true&filters[position][$eq]=master&pagination[pageSize]=100&status=published"}, "properties": {"repobilityId": "4181de4f8eaff479", "scanner": "scanner-primary", "fingerprint": "fb37f53f78209280", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-70e9aed9507f11b9", "level": "note", "message": {"text": "Unused endpoint: GET /api/articles?fields[0]=slug"}, "properties": {"repobilityId": "c69644908a9d99df", "scanner": "scanner-primary", "fingerprint": "70e9aed9507f11b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c80dec7e98fdbbd", "level": "note", "message": {"text": "Unused endpoint: POST /api/vouchers"}, "properties": {"repobilityId": "451564bcaa97be9a", "scanner": "scanner-primary", "fingerprint": "2c80dec7e98fdbbd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}