WellNuo/types/index.ts
Sergei 06802c237b Improve subscription flow, Stripe integration & auth context
- Refactor subscription page with simplified UI flow
- Update Stripe routes and config for price handling
- Improve AuthContext with better profile management
- Fix equipment status and beneficiary screens
- Update voice screen and profile pages
- Simplify purchase flow
2026-01-08 21:35:24 -08:00

179 lines
4.2 KiB
TypeScript

// User & Auth Types
// User & Auth Types
export interface User {
user_id: number | string;
email?: string;
firstName?: string | null;
lastName?: string | null;
phone?: string | null;
max_role: number | string;
privileges: string | string[];
}
export interface AuthResponse {
access_token: string;
privileges: string;
user_id: number;
max_role: number;
status: string;
}
export interface LoginCredentials {
username: string;
password: string;
}
// Subscription status for beneficiary
export interface BeneficiarySubscription {
status: 'active' | 'trialing' | 'expired' | 'none' | 'expiring_soon' | 'past_due' | 'canceled';
startDate?: string; // ISO date
endDate?: string; // ISO date (currentPeriodEnd from Stripe)
planType?: 'monthly' | 'annual';
price?: number;
cancelAtPeriodEnd?: boolean; // Will cancel at end of billing period
}
// Device/Sensor connected to beneficiary
export interface BeneficiaryDevice {
id: string;
type: 'motion' | 'door' | 'temperature' | 'bed' | 'other';
name: string;
location?: string;
status: 'online' | 'offline';
lastSeen?: string;
}
// Equipment/Kit delivery status
export type EquipmentStatus =
| 'none' // No equipment ordered
| 'ordered' // Kit ordered, waiting to ship
| 'shipped' // Kit shipped, in transit
| 'delivered' // Kit delivered, ready to activate
| 'active' // Equipment activated and working
| 'demo'; // Demo mode (DEMO-00000)
// Beneficiary Types (elderly people being monitored)
export interface Beneficiary {
id: number;
name: string;
avatar?: string;
device_id?: string;
status: 'online' | 'offline';
relationship?: string;
last_activity?: string;
sensor_data?: SensorData;
// Extended data from dashboard_single API
address?: string;
timezone?: string;
wellness_score?: number;
wellness_descriptor?: string;
last_location?: string;
temperature?: number;
units?: string;
sleep_hours?: number;
bedroom_temperature?: number;
before_last_location?: string;
last_detected_time?: string;
// Subscription & Devices
subscription?: BeneficiarySubscription;
devices?: BeneficiaryDevice[];
hasDevices?: boolean;
// Equipment status
equipmentStatus?: EquipmentStatus;
trackingNumber?: string; // Shipping tracking number
isDemo?: boolean; // Demo mode flag
// Invitations for sharing access
invitations?: {
id: string;
email: string;
role: string;
label?: string;
status: string;
created_at: string;
}[];
}
// Dashboard API response
export interface DashboardSingleResponse {
result_list: BeneficiaryDashboardData[];
status: string;
}
export interface BeneficiaryDashboardData {
user_id: number;
name: string;
address: string;
time_zone: string;
picture: string;
deployment_id: string;
wellness_score_percent: number;
wellness_descriptor: string;
wellness_descriptor_color: string;
last_location: string;
last_detected_time: string;
before_last_location: string;
temperature: number;
bedroom_temperature: number;
sleep_hours: number;
units: string;
location_list: string[];
}
export interface SensorData {
motion_detected?: boolean;
last_motion?: string;
door_status?: 'open' | 'closed';
temperature?: number;
humidity?: number;
last_updated?: string;
}
// Chat Types
export interface Message {
id: string;
role: 'user' | 'assistant';
content: string;
timestamp: Date;
}
export interface ChatResponse {
ok: boolean;
response: {
Command: string;
body: string;
language: string;
};
status: string;
}
// Notification Settings
export interface NotificationSettings {
// Alert types
emergencyAlerts: boolean;
activityAlerts: boolean;
lowBattery: boolean;
dailySummary: boolean;
weeklySummary: boolean;
// Delivery methods
pushEnabled: boolean;
emailEnabled: boolean;
smsEnabled: boolean;
// Quiet hours
quietHours: boolean;
quietStart: string; // "HH:MM" format
quietEnd: string; // "HH:MM" format
}
// API Types
export interface ApiError {
message: string;
code?: string;
status?: number;
}
export interface ApiResponse<T> {
data?: T;
error?: ApiError;
ok: boolean;
}