Public Access
1
0
Files
leads4less/shared/types.ts
T
pguerrerox f1a46c79f2 feat: add billing plan foundations and refresh LocaleScope pricing
Introduce a shared pricing and entitlement model so plan metadata can drive public pricing and future subscription enforcement. Rebrand the product to LocaleScope and align the UI copy around market intelligence and business research workflows.
2026-05-13 03:50:29 +00:00

156 lines
3.5 KiB
TypeScript

import type { BillingInterval, PlanCode } from './billing/plans.js';
export type JobStatus = 'pending' | 'running' | 'completed' | 'failed' | 'stopped';
export interface AppUser {
id: string;
email: string;
displayName: string;
avatarUrl?: string | null;
createdAt: string;
updatedAt: string;
}
export interface SessionUser extends AppUser {
sessionId: string;
}
export type WorkspaceType = 'personal' | 'company';
export type WorkspaceRole = 'owner' | 'admin' | 'member';
export interface AccountWorkspace {
id: string;
name: string;
workspaceType: WorkspaceType;
role: WorkspaceRole;
memberCount: number;
}
export interface AccountSummary {
totalSearchJobs: number;
totalDeepResearchBatches: number;
totalBusinesses: number;
}
export type AccountBillingStatus = 'not_configured' | 'inactive' | 'active' | 'past_due' | 'canceled';
export interface AccountBillingState {
status: AccountBillingStatus;
planCode: PlanCode | null;
billingInterval: BillingInterval | null;
message: string;
}
export interface AccountTeamPlaceholder {
canManageMembers: boolean;
message: string;
}
export interface AccountPageData {
profile: AppUser;
workspace: AccountWorkspace;
summary: AccountSummary;
billing: AccountBillingState;
team: AccountTeamPlaceholder;
}
export interface UpdateAccountProfileRequest {
displayName?: string;
avatarUrl?: string | null;
workspaceName?: string;
}
export interface GeoJsonGeometry {
type: 'Polygon' | 'MultiPolygon';
coordinates: unknown;
}
export interface GeoJsonFeature<TProperties = Record<string, unknown>> {
type: 'Feature';
geometry: GeoJsonGeometry;
properties: TProperties;
}
export interface GeoJsonFeatureCollection<TProperties = Record<string, unknown>> {
type: 'FeatureCollection';
features: Array<GeoJsonFeature<TProperties>>;
}
export interface PostalAreaPreview {
id: string;
countryCode: string;
postalCode: string;
normalizedPostalCode: string;
displayName: string;
propagationRing: number;
centroidLat: number | null;
centroidLng: number | null;
}
export interface DeepResearchOverlayProperties {
postalAreaId: string;
countryCode: string;
postalCode: string;
displayName: string;
propagationRing: number;
}
export interface DeepResearchPreviewRequest {
lat: number;
lng: number;
propagation: number;
businessType: string;
keywords?: string;
}
export interface DeepResearchPreview {
baseArea: PostalAreaPreview;
areas: PostalAreaPreview[];
overlay: GeoJsonFeatureCollection<DeepResearchOverlayProperties>;
propagation: number;
countryCode: string;
totalAreas: number;
estimatedChildJobs: number;
businessType: string;
keywords?: string;
}
export interface DeepResearchChildJobSummary {
id: string;
name: string;
postalCode?: string;
status: JobStatus;
totalResults: number;
createdAt: string;
completedAt?: string;
}
export interface DeepResearchBatchSummary {
id: string;
userId: string;
pinLat: number;
pinLng: number;
basePostalCode?: string;
countryCode?: string;
propagation: number;
businessType: string;
keywords?: string;
status: JobStatus;
totalPostalAreas: number;
totalResults: number;
childJobCount: number;
completedJobCount: number;
failedJobCount: number;
startedAt?: string;
completedAt?: string;
createdAt: string;
updatedAt: string;
}
export interface DeepResearchBatchDetail extends DeepResearchBatchSummary {
childJobs: DeepResearchChildJobSummary[];
jobIds: string[];
}
export interface CreateDeepResearchBatchRequest extends DeepResearchPreviewRequest {}