f1a46c79f2
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.
156 lines
3.5 KiB
TypeScript
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 {}
|