You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							3.8 KiB
						
					
					
				TimeSafari Deep Linking Documentation
Type System Overview
The deep linking system uses a multi-layered type safety approach:
- 
Runtime Validation (Zod Schemas) - Validates URL structure
- Enforces parameter requirements
- Sanitizes input data
- Provides detailed validation errors
- Generates TypeScript types automatically
 
- 
TypeScript Types - Generated from Zod schemas using z.infer
- Ensures compile-time type safety
- Provides IDE autocompletion
- Catches type errors during development
- Maintains single source of truth for types
 
- Generated from Zod schemas using 
- 
Router Integration - Type-safe parameter passing
- Route-specific parameter validation
- Query parameter type checking
- Automatic type inference for route parameters
 
Type System Implementation
Zod Schema to TypeScript Type Generation
// Define the schema
const claimSchema = z.object({
  id: z.string(),
  view: z.enum(["details", "certificate", "raw"]).optional()
});
// TypeScript type is automatically generated
type ClaimParams = z.infer<typeof claimSchema>;
// Equivalent to:
// type ClaimParams = {
//   id: string;
//   view?: "details" | "certificate" | "raw";
// }
Type Safety Layers
- 
Schema Definition // src/interfaces/deepLinks.ts export const deepLinkSchemas = { claim: z.object({ id: z.string(), view: z.enum(["details", "certificate", "raw"]).optional() }), // Other route schemas... };
- 
Type Generation // Types are automatically generated from schemas export type DeepLinkParams = { [K in keyof typeof deepLinkSchemas]: z.infer<(typeof deepLinkSchemas)[K]>; };
- 
Runtime Validation // In DeepLinkHandler const result = deepLinkSchemas.claim.safeParse(params); if (!result.success) { // Handle validation errors console.error(result.error); }
Error Handling Types
export interface DeepLinkError extends Error {
  code: string;
  details?: unknown;
}
// Usage in error handling
try {
  await handler.handleDeepLink(url);
} catch (error) {
  if (error instanceof DeepLinkError) {
    // Type-safe error handling
    console.error(error.code, error.message);
  }
}
Implementation Files
- src/interfaces/deepLinks.ts: Type definitions and validation schemas
- src/services/deepLinks.ts: Deep link processing service
- src/main.capacitor.ts: Capacitor integration
- src/views/DeepLinkRedirectView.vue: Page to handle links to both mobile and web
Type Safety Examples
// Parameter type safety
type ClaimParams = DeepLinkParams["claim"];
// TypeScript knows this has:
// - id: string
// - view?: "details" | "certificate" | "raw"
// Runtime validation
const result = deepLinkSchemas.claim.safeParse({
id: "123",
view: "details"
});
// Validates at runtime with detailed error messages
Supported URL Schemes
All deep links follow the format: timesafari://<route>/<param>?<query>
Claim Routes
- 
timesafari://claim/:id- Query params:
- view: "details" | "certificate" | "raw"
 
 
- Query params:
- 
timesafari://claim-cert/:id
- 
timesafari://claim-add-raw/:id- Query params:
- claim: JSON string of claim data
- claimJwtId: JWT ID for claim
 
 
- Query params:
Contact Routes
- timesafari://contact-edit/:did
- timesafari://contact-import/:jwt- Query params:
- contacts: JSON array of contacts
 
 
- Query params:
Project Routes
- timesafari://project/:id- Query params:
- view: "details" | "edit"
 
 
- Query params:
Invite Routes
- timesafari://invite-one-accept/:jwt- Query params:
- type: "one" | "many"
 
 
- Query params:
Gift Routes
- timesafari://confirm-gift/:id- Query params:
- action: "confirm" | "details"
 
 
- Query params:
Offer Routes
- timesafari://offer-details/:id- Query params:
- view: "details"
 
 
- Query params: