forked from jsnbuchanan/crowd-funder-for-time-pwa
- Remove hard-coded PROD_SHARE_DOMAIN from src/constants/app.ts - Update all sharing functionality to use environment-specific APP_SERVER - Rewrite domain configuration documentation to reflect unified approach - Simplify domain management with single APP_SERVER constant - Update README.md examples to use APP_SERVER for all URL generation This change eliminates the complexity of separate constants for different URL types and provides consistent environment-specific configuration for all functionality including sharing.
221 lines
5.5 KiB
Markdown
221 lines
5.5 KiB
Markdown
# Domain Configuration System
|
|
|
|
**Author**: Matthew Raymer
|
|
**Date**: 2025-01-27
|
|
**Status**: ✅ **UPDATED** - Simplified to use APP_SERVER for all functionality
|
|
|
|
## Overview
|
|
|
|
TimeSafari uses a centralized domain configuration system to ensure consistent
|
|
URL generation across all environments. This system provides a single point of
|
|
control for domain changes and uses environment-specific configuration for all
|
|
functionality including sharing.
|
|
|
|
## Problem Solved
|
|
|
|
### Issue: Inconsistent Domain Usage
|
|
|
|
Previously, the system used separate constants for different types of URLs:
|
|
|
|
- **Internal Operations**: Used `APP_SERVER` (environment-specific)
|
|
- **Sharing**: Used separate constants (removed)
|
|
|
|
This created complexity and confusion about when to use which constant.
|
|
|
|
### Solution: Unified Domain Configuration
|
|
|
|
All functionality now uses the `APP_SERVER` constant, which provides
|
|
environment-specific URLs that can be configured per environment.
|
|
|
|
## Implementation
|
|
|
|
### Core Configuration
|
|
|
|
The domain configuration is centralized in `src/constants/app.ts`:
|
|
|
|
```typescript
|
|
export enum AppString {
|
|
// ... other constants ...
|
|
PROD_PUSH_SERVER = "https://timesafari.app",
|
|
// ... other constants ...
|
|
}
|
|
|
|
// Environment-specific server URL for all functionality
|
|
export const APP_SERVER =
|
|
import.meta.env.VITE_APP_SERVER || "https://timesafari.app";
|
|
```
|
|
|
|
### Usage Pattern
|
|
|
|
All components that generate URLs follow this pattern:
|
|
|
|
```typescript
|
|
import { APP_SERVER } from "@/constants/app";
|
|
|
|
// In component class
|
|
APP_SERVER = APP_SERVER;
|
|
|
|
// In methods
|
|
const deepLink = `${APP_SERVER}/deep-link/claim/${claimId}`;
|
|
```
|
|
|
|
### Components Updated
|
|
|
|
The following components and services use `APP_SERVER`:
|
|
|
|
#### Views
|
|
- `ClaimView.vue` - Claim and certificate links
|
|
- `ProjectViewView.vue` - Project copy links
|
|
- `ConfirmGiftView.vue` - Confirm gift deep links
|
|
- `UserProfileView.vue` - Profile copy links
|
|
- `InviteOneView.vue` - Invite link generation
|
|
- `ContactsView.vue` - Contact import links
|
|
- `OnboardMeetingSetupView.vue` - Meeting members links
|
|
|
|
#### Components
|
|
- `HiddenDidDialog.vue` - Hidden DID dialog links
|
|
|
|
#### Services
|
|
- `endorserServer.ts` - Contact import confirm links
|
|
|
|
## Configuration Management
|
|
|
|
### Environment-Specific Configuration
|
|
|
|
The system uses environment variables to configure domains:
|
|
|
|
```bash
|
|
# Development
|
|
VITE_APP_SERVER=http://localhost:8080
|
|
|
|
# Test
|
|
VITE_APP_SERVER=https://test.timesafari.app
|
|
|
|
# Production
|
|
VITE_APP_SERVER=https://timesafari.app
|
|
```
|
|
|
|
### Changing the Domain
|
|
|
|
To change the domain for all functionality:
|
|
|
|
1. **Update environment variables** for the target environment:
|
|
```bash
|
|
VITE_APP_SERVER=https://your-new-domain.com
|
|
```
|
|
|
|
2. **Rebuild the application** for all platforms:
|
|
```bash
|
|
npm run build:web
|
|
npm run build:capacitor
|
|
npm run build:electron
|
|
```
|
|
|
|
## Benefits
|
|
|
|
### ✅ Simplified Configuration
|
|
|
|
- Single constant for all URL generation
|
|
- No confusion about which constant to use
|
|
- Consistent behavior across all functionality
|
|
|
|
### ✅ Environment Flexibility
|
|
|
|
- Easy to configure different domains per environment
|
|
- Support for development, test, and production environments
|
|
- Environment-specific sharing URLs when needed
|
|
|
|
### ✅ Maintainability
|
|
|
|
- Single source of truth for domain configuration
|
|
- Easy to change domain across entire application
|
|
- Clear pattern for implementing new URL functionality
|
|
|
|
### ✅ Developer Experience
|
|
|
|
- Simple, consistent pattern for URL generation
|
|
- Clear documentation and examples
|
|
- Type-safe configuration with TypeScript
|
|
|
|
## Testing
|
|
|
|
### Manual Testing
|
|
|
|
1. **Development Environment**:
|
|
```bash
|
|
npm run dev
|
|
# Navigate to any page with copy link buttons
|
|
# Verify links use configured domain
|
|
```
|
|
|
|
2. **Production Build**:
|
|
```bash
|
|
npm run build:web
|
|
# Deploy and test sharing functionality
|
|
# Verify all links work correctly
|
|
```
|
|
|
|
### Automated Testing
|
|
|
|
The implementation includes comprehensive linting to ensure:
|
|
|
|
- All components properly import `APP_SERVER`
|
|
- No hardcoded URLs in functionality
|
|
- Consistent usage patterns across the codebase
|
|
|
|
## Implementation Pattern
|
|
|
|
### Current Approach
|
|
|
|
```typescript
|
|
// ✅ Single constant for all functionality
|
|
import { APP_SERVER } from "@/constants/app";
|
|
const shareLink = `${APP_SERVER}/deep-link/claim/123`;
|
|
const apiUrl = `${APP_SERVER}/api/claim/123`;
|
|
```
|
|
|
|
## Future Enhancements
|
|
|
|
### Potential Improvements
|
|
|
|
1. **Environment-Specific Sharing Domains**:
|
|
```typescript
|
|
export const getShareDomain = () => {
|
|
if (import.meta.env.PROD) {
|
|
return AppString.PROD_PUSH_SERVER;
|
|
}
|
|
return AppString.TEST1_PUSH_SERVER; // Use test domain for dev sharing
|
|
};
|
|
```
|
|
|
|
2. **Dynamic Domain Detection**:
|
|
```typescript
|
|
export const SHARE_DOMAIN =
|
|
import.meta.env.VITE_SHARE_DOMAIN || AppString.PROD_PUSH_SERVER;
|
|
```
|
|
|
|
3. **Platform-Specific Domains**:
|
|
|
|
```typescript
|
|
export const getPlatformShareDomain = () => {
|
|
const platform = process.env.VITE_PLATFORM;
|
|
switch (platform) {
|
|
case 'web': return AppString.PROD_PUSH_SERVER;
|
|
case 'capacitor': return AppString.PROD_PUSH_SERVER;
|
|
case 'electron': return AppString.PROD_PUSH_SERVER;
|
|
default: return AppString.PROD_PUSH_SERVER;
|
|
}
|
|
};
|
|
```
|
|
|
|
## Related Documentation
|
|
|
|
- [Build Systems Overview](build-systems-overview.md) - Environment configuration
|
|
- [Constants and Configuration](src/constants/app.ts) - Core constants
|
|
- [Migration Guide](doc/migration-to-wa-sqlite.md) - Database migration context
|
|
|
|
---
|
|
|
|
**Last Updated**: 2025-01-27
|
|
**Version**: 2.0
|
|
**Maintainer**: Matthew Raymer |