fix: address code review findings for info broker removal service
- Fix Prisma enum casing: snake_case -> UPPERCASE to match TypeScript types - Add admin auth guard on POST /process endpoint (P0 security) - Fix DELETE /request/:id to return valid enum status (REJECTED not cancelled) - Fix brokerName bug: was set to brokerId, now resolves actual broker name - Add missing BrokerCategory enum export to types package - Add HOME_TITLE to AlertSource enum - Replace unsafe 'as any' casts with proper enum imports - Fix broker ID with space (familytree Now -> familytreenow) - Add missing Prisma relation fields for RemovalRequest and BrokerListing - Add FALSE_POSITIVE to CorrelationStatus enum Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import { FastifyInstance, FastifyRequest, FastifyReply } from 'fastify';
|
import { FastifyInstance, FastifyRequest, FastifyReply } from 'fastify';
|
||||||
import { prisma } from '@shieldai/db';
|
import { prisma } from '@shieldai/db';
|
||||||
import { RemovalStatus, Severity } from '@shieldai/types';
|
import { RemovalStatus, Severity, AlertCategory, EntityTypes } from '@shieldai/types';
|
||||||
import {
|
import {
|
||||||
removeBrokersService,
|
removeBrokersService,
|
||||||
removeBrokersScheduler,
|
removeBrokersScheduler,
|
||||||
@@ -144,13 +144,13 @@ export async function removebrokersRoutes(fastify: FastifyInstance) {
|
|||||||
userId: (request as AuthRequest).user!.id,
|
userId: (request as AuthRequest).user!.id,
|
||||||
brokerName: listing.brokerName,
|
brokerName: listing.brokerName,
|
||||||
brokerId: listing.brokerId,
|
brokerId: listing.brokerId,
|
||||||
category: 'INFO_BROKER_LISTING' as any,
|
category: AlertCategory.INFO_BROKER_LISTING,
|
||||||
severity: Severity.MEDIUM,
|
severity: Severity.MEDIUM,
|
||||||
title: `Personal listing found on ${listing.brokerName}`,
|
title: `Personal listing found on ${listing.brokerName}`,
|
||||||
description: `Your personal information was found on ${listing.brokerName} (${listing.brokerId}). Consider submitting a removal request.`,
|
description: `Your personal information was found on ${listing.brokerName} (${listing.brokerId}). Consider submitting a removal request.`,
|
||||||
entities: [
|
entities: [
|
||||||
{ type: 'USER_ID' as any, value: (request as AuthRequest).user!.id },
|
{ type: EntityTypes.USER_ID, value: (request as AuthRequest).user!.id },
|
||||||
],
|
],
|
||||||
metadata: { url: listing.url },
|
metadata: { url: listing.url },
|
||||||
});
|
});
|
||||||
} catch {
|
} catch {
|
||||||
@@ -319,7 +319,7 @@ export async function removebrokersRoutes(fastify: FastifyInstance) {
|
|||||||
return reply.send({
|
return reply.send({
|
||||||
request: {
|
request: {
|
||||||
id: req.id,
|
id: req.id,
|
||||||
status: 'cancelled',
|
status: RemovalStatus.REJECTED,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -335,6 +335,10 @@ export async function removebrokersRoutes(fastify: FastifyInstance) {
|
|||||||
return reply.code(401).send({ error: 'User not authenticated' });
|
return reply.code(401).send({ error: 'User not authenticated' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (authReq.user.role !== 'admin' && authReq.user.role !== 'support') {
|
||||||
|
return reply.code(403).send({ error: 'Admin access required' });
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const results = await removeBrokersService.processPendingRequests();
|
const results = await removeBrokersService.processPendingRequests();
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,6 @@ model User {
|
|||||||
correlationGroups CorrelationGroup[]
|
correlationGroups CorrelationGroup[]
|
||||||
securityReports SecurityReport[]
|
securityReports SecurityReport[]
|
||||||
analysisJobs AnalysisJob[]
|
analysisJobs AnalysisJob[]
|
||||||
removalRequests RemovalRequest[]
|
|
||||||
brokerListings BrokerListing[]
|
|
||||||
|
|
||||||
// Audit
|
// Audit
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
@@ -578,6 +576,7 @@ enum NormalizedAlertSeverity {
|
|||||||
enum CorrelationStatus {
|
enum CorrelationStatus {
|
||||||
ACTIVE
|
ACTIVE
|
||||||
RESOLVED
|
RESOLVED
|
||||||
|
FALSE_POSITIVE
|
||||||
}
|
}
|
||||||
|
|
||||||
model NormalizedAlert {
|
model NormalizedAlert {
|
||||||
@@ -816,29 +815,29 @@ model PropertyChange {
|
|||||||
// ============================================
|
// ============================================
|
||||||
|
|
||||||
enum BrokerCategory {
|
enum BrokerCategory {
|
||||||
people_search
|
PEOPLE_SEARCH
|
||||||
background_check
|
BACKGROUND_CHECK
|
||||||
public_records
|
PUBLIC_RECORDS
|
||||||
reverse_lookup
|
REVERSE_LOOKUP
|
||||||
social_media
|
SOCIAL_MEDIA
|
||||||
}
|
}
|
||||||
|
|
||||||
enum RemovalMethod {
|
enum RemovalMethod {
|
||||||
automated
|
AUTOMATED
|
||||||
manual_form
|
MANUAL_FORM
|
||||||
email
|
EMAIL
|
||||||
phone
|
PHONE
|
||||||
mail
|
MAIL
|
||||||
none
|
NONE
|
||||||
}
|
}
|
||||||
|
|
||||||
enum RemovalStatus {
|
enum RemovalStatus {
|
||||||
pending
|
PENDING
|
||||||
submitted
|
SUBMITTED
|
||||||
in_progress
|
IN_PROGRESS
|
||||||
completed
|
COMPLETED
|
||||||
failed
|
FAILED
|
||||||
rejected
|
REJECTED
|
||||||
}
|
}
|
||||||
|
|
||||||
model InfoBroker {
|
model InfoBroker {
|
||||||
@@ -867,7 +866,7 @@ model RemovalRequest {
|
|||||||
id String @id @default(uuid())
|
id String @id @default(uuid())
|
||||||
subscriptionId String
|
subscriptionId String
|
||||||
brokerId String
|
brokerId String
|
||||||
status RemovalStatus @default(pending)
|
status RemovalStatus @default(PENDING)
|
||||||
personalInfo Json // { fullName, email?, phone?, address?, dob? }
|
personalInfo Json // { fullName, email?, phone?, address?, dob? }
|
||||||
method RemovalMethod
|
method RemovalMethod
|
||||||
attempts Int @default(0)
|
attempts Int @default(0)
|
||||||
@@ -879,6 +878,8 @@ model RemovalRequest {
|
|||||||
metadata Json? // Broker response data, tracking info
|
metadata Json? // Broker response data, tracking info
|
||||||
|
|
||||||
broker InfoBroker @relation(fields: [brokerId], references: [id])
|
broker InfoBroker @relation(fields: [brokerId], references: [id])
|
||||||
|
subscription Subscription @relation(fields: [subscriptionId], references: [id], onDelete: Cascade)
|
||||||
|
brokerListings BrokerListing[]
|
||||||
|
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
updatedAt DateTime @default(now()) @updatedAt
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
@@ -902,6 +903,7 @@ model BrokerListing {
|
|||||||
removedAt DateTime?
|
removedAt DateTime?
|
||||||
|
|
||||||
removalRequest RemovalRequest? @relation(fields: [removalRequestId], references: [id])
|
removalRequest RemovalRequest? @relation(fields: [removalRequestId], references: [id])
|
||||||
|
subscription Subscription @relation(fields: [subscriptionId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
scannedAt DateTime @default(now())
|
scannedAt DateTime @default(now())
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export const AlertSource = {
|
|||||||
SPAMSHIELD: "SPAMSHIELD",
|
SPAMSHIELD: "SPAMSHIELD",
|
||||||
VOICEPRINT: "VOICEPRINT",
|
VOICEPRINT: "VOICEPRINT",
|
||||||
CALL_ANALYSIS: "CALL_ANALYSIS",
|
CALL_ANALYSIS: "CALL_ANALYSIS",
|
||||||
|
HOME_TITLE: "HOME_TITLE",
|
||||||
INFO_BROKER: "INFO_BROKER",
|
INFO_BROKER: "INFO_BROKER",
|
||||||
} as const;
|
} as const;
|
||||||
export type AlertSource = (typeof AlertSource)[keyof typeof AlertSource];
|
export type AlertSource = (typeof AlertSource)[keyof typeof AlertSource];
|
||||||
@@ -375,6 +376,15 @@ export interface SecurityReportOutput {
|
|||||||
// Info Broker Removal Types
|
// Info Broker Removal Types
|
||||||
// ============================================
|
// ============================================
|
||||||
|
|
||||||
|
export const BrokerCategory = {
|
||||||
|
PEOPLE_SEARCH: "PEOPLE_SEARCH",
|
||||||
|
BACKGROUND_CHECK: "BACKGROUND_CHECK",
|
||||||
|
PUBLIC_RECORDS: "PUBLIC_RECORDS",
|
||||||
|
REVERSE_LOOKUP: "REVERSE_LOOKUP",
|
||||||
|
SOCIAL_MEDIA: "SOCIAL_MEDIA",
|
||||||
|
} as const;
|
||||||
|
export type BrokerCategory = (typeof BrokerCategory)[keyof typeof BrokerCategory];
|
||||||
|
|
||||||
export const BrokerStatus = {
|
export const BrokerStatus = {
|
||||||
ACTIVE: "ACTIVE",
|
ACTIVE: "ACTIVE",
|
||||||
INACTIVE: "INACTIVE",
|
INACTIVE: "INACTIVE",
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ export class RemoveBrokersService {
|
|||||||
const job: RemovalJob = {
|
const job: RemovalJob = {
|
||||||
requestId: request.id,
|
requestId: request.id,
|
||||||
brokerId: request.brokerId,
|
brokerId: request.brokerId,
|
||||||
brokerName: request.brokerId,
|
brokerName: getBrokerById(request.brokerId)?.name || request.brokerId,
|
||||||
personalInfo: request.personalInfo as PersonalInfo,
|
personalInfo: request.personalInfo as PersonalInfo,
|
||||||
method: request.method,
|
method: request.method,
|
||||||
attempt: request.attempts + 1,
|
attempt: request.attempts + 1,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { RemovalMethod } from "@shieldai/types";
|
import { RemovalMethod, BrokerCategory } from "@shieldai/types";
|
||||||
import type { BrokerEntry } from "./types";
|
import type { BrokerEntry } from "./types";
|
||||||
|
|
||||||
export const BROKER_REGISTRY: BrokerEntry[] = [
|
export const BROKER_REGISTRY: BrokerEntry[] = [
|
||||||
@@ -6,7 +6,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "whitepages",
|
id: "whitepages",
|
||||||
name: "Whitepages",
|
name: "Whitepages",
|
||||||
domain: "whitepages.com",
|
domain: "whitepages.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://www.whitepages.com/optout",
|
removalUrl: "https://www.whitepages.com/optout",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -18,7 +18,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "spokeo",
|
id: "spokeo",
|
||||||
name: "Spokeo",
|
name: "Spokeo",
|
||||||
domain: "spokeo.com",
|
domain: "spokeo.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://www.spokeo.com/privacy/removal-request",
|
removalUrl: "https://www.spokeo.com/privacy/removal-request",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -30,7 +30,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "truepeoplesearch",
|
id: "truepeoplesearch",
|
||||||
name: "TruePeopleSearch",
|
name: "TruePeopleSearch",
|
||||||
domain: "truepeoplesearch.com",
|
domain: "truepeoplesearch.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.AUTOMATED,
|
removalMethod: RemovalMethod.AUTOMATED,
|
||||||
removalUrl: "https://www.truepeoplesearch.com/remove-your-info",
|
removalUrl: "https://www.truepeoplesearch.com/remove-your-info",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -42,7 +42,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "peoplefinders",
|
id: "peoplefinders",
|
||||||
name: "PeopleFinders",
|
name: "PeopleFinders",
|
||||||
domain: "peoplefinders.com",
|
domain: "peoplefinders.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://www.peoplefinders.com/privacy-policy",
|
removalUrl: "https://www.peoplefinders.com/privacy-policy",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -54,7 +54,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "thatsmth",
|
id: "thatsmth",
|
||||||
name: "That's Them",
|
name: "That's Them",
|
||||||
domain: "thatsmth.com",
|
domain: "thatsmth.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.AUTOMATED,
|
removalMethod: RemovalMethod.AUTOMATED,
|
||||||
removalUrl: "https://thatsmth.com/opt-out",
|
removalUrl: "https://thatsmth.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -66,7 +66,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "fastpeoplesearch",
|
id: "fastpeoplesearch",
|
||||||
name: "FastPeopleSearch",
|
name: "FastPeopleSearch",
|
||||||
domain: "fastpeoplesearch.com",
|
domain: "fastpeoplesearch.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.AUTOMATED,
|
removalMethod: RemovalMethod.AUTOMATED,
|
||||||
removalUrl: "https://www.fastpeoplesearch.com/opt-out",
|
removalUrl: "https://www.fastpeoplesearch.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -78,7 +78,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "backgroundcheck",
|
id: "backgroundcheck",
|
||||||
name: "BackgroundCheck",
|
name: "BackgroundCheck",
|
||||||
domain: "backgroundcheck.com",
|
domain: "backgroundcheck.com",
|
||||||
category: "background_check",
|
category: BrokerCategory.BACKGROUND_CHECK,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://www.backgroundcheck.com/removal",
|
removalUrl: "https://www.backgroundcheck.com/removal",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -90,7 +90,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "freepeopledirectory",
|
id: "freepeopledirectory",
|
||||||
name: "Free People Directory",
|
name: "Free People Directory",
|
||||||
domain: "freepeopledirectory.com",
|
domain: "freepeopledirectory.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.AUTOMATED,
|
removalMethod: RemovalMethod.AUTOMATED,
|
||||||
removalUrl: "https://freepeopledirectory.com/optout",
|
removalUrl: "https://freepeopledirectory.com/optout",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -102,7 +102,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "radaris",
|
id: "radaris",
|
||||||
name: "Radaris",
|
name: "Radaris",
|
||||||
domain: "radaris.com",
|
domain: "radaris.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.EMAIL,
|
removalMethod: RemovalMethod.EMAIL,
|
||||||
removalUrl: undefined,
|
removalUrl: undefined,
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -114,7 +114,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "zynda",
|
id: "zynda",
|
||||||
name: "Zynda",
|
name: "Zynda",
|
||||||
domain: "zynda.com",
|
domain: "zynda.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://zynda.com/opt-out",
|
removalUrl: "https://zynda.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -126,7 +126,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "addressinator",
|
id: "addressinator",
|
||||||
name: "Addressinator",
|
name: "Addressinator",
|
||||||
domain: "addressinator.com",
|
domain: "addressinator.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://addressinator.com/opt-out",
|
removalUrl: "https://addressinator.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -135,10 +135,10 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
isActive: true,
|
isActive: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "familytree Now",
|
id: "familytreenow",
|
||||||
name: "FamilyTree Now",
|
name: "FamilyTree Now",
|
||||||
domain: "familytreenow.com",
|
domain: "familytreenow.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.EMAIL,
|
removalMethod: RemovalMethod.EMAIL,
|
||||||
removalUrl: undefined,
|
removalUrl: undefined,
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -150,7 +150,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "accuratebackground",
|
id: "accuratebackground",
|
||||||
name: "Accurate Background",
|
name: "Accurate Background",
|
||||||
domain: "accuratebackground.com",
|
domain: "accuratebackground.com",
|
||||||
category: "background_check",
|
category: BrokerCategory.BACKGROUND_CHECK,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://www.accuratebackground.com/optout",
|
removalUrl: "https://www.accuratebackground.com/optout",
|
||||||
requiresAccount: true,
|
requiresAccount: true,
|
||||||
@@ -162,7 +162,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "instantcheckmate",
|
id: "instantcheckmate",
|
||||||
name: "Instant Checkmate",
|
name: "Instant Checkmate",
|
||||||
domain: "instantcheckmate.com",
|
domain: "instantcheckmate.com",
|
||||||
category: "background_check",
|
category: BrokerCategory.BACKGROUND_CHECK,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://www.instantcheckmate.com/opt-out",
|
removalUrl: "https://www.instantcheckmate.com/opt-out",
|
||||||
requiresAccount: true,
|
requiresAccount: true,
|
||||||
@@ -174,7 +174,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "pthree",
|
id: "pthree",
|
||||||
name: "P3 (People Finders)",
|
name: "P3 (People Finders)",
|
||||||
domain: "pthree.com",
|
domain: "pthree.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://www.pthree.com/opt-out",
|
removalUrl: "https://www.pthree.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -186,7 +186,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "sortedbee",
|
id: "sortedbee",
|
||||||
name: "Sorted Bee",
|
name: "Sorted Bee",
|
||||||
domain: "sortedbee.com",
|
domain: "sortedbee.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://www.sortedbee.com/opt-out",
|
removalUrl: "https://www.sortedbee.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -198,7 +198,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "ussearch",
|
id: "ussearch",
|
||||||
name: "US Search",
|
name: "US Search",
|
||||||
domain: "ussearch.com",
|
domain: "ussearch.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.AUTOMATED,
|
removalMethod: RemovalMethod.AUTOMATED,
|
||||||
removalUrl: "https://www.ussearch.com/opt-out",
|
removalUrl: "https://www.ussearch.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -210,7 +210,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "tellme",
|
id: "tellme",
|
||||||
name: "Tell me Online Info",
|
name: "Tell me Online Info",
|
||||||
domain: "tellmeonlineinfo.com",
|
domain: "tellmeonlineinfo.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.MANUAL_FORM,
|
removalMethod: RemovalMethod.MANUAL_FORM,
|
||||||
removalUrl: "https://tellmeonlineinfo.com/opt-out",
|
removalUrl: "https://tellmeonlineinfo.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -222,7 +222,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "synpeople",
|
id: "synpeople",
|
||||||
name: "Synpeople",
|
name: "Synpeople",
|
||||||
domain: "synpeople.com",
|
domain: "synpeople.com",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.AUTOMATED,
|
removalMethod: RemovalMethod.AUTOMATED,
|
||||||
removalUrl: "https://www.synpeople.com/opt-out",
|
removalUrl: "https://www.synpeople.com/opt-out",
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
@@ -234,7 +234,7 @@ export const BROKER_REGISTRY: BrokerEntry[] = [
|
|||||||
id: "atomdata",
|
id: "atomdata",
|
||||||
name: "Atom Data",
|
name: "Atom Data",
|
||||||
domain: "atomdata.xyz",
|
domain: "atomdata.xyz",
|
||||||
category: "people_search",
|
category: BrokerCategory.PEOPLE_SEARCH,
|
||||||
removalMethod: RemovalMethod.EMAIL,
|
removalMethod: RemovalMethod.EMAIL,
|
||||||
removalUrl: undefined,
|
removalUrl: undefined,
|
||||||
requiresAccount: false,
|
requiresAccount: false,
|
||||||
|
|||||||
Reference in New Issue
Block a user