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 schemassrc/services/deepLinks.ts: Deep link processing servicesrc/main.capacitor.ts: Capacitor integrationsrc/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 dataclaimJwtId: JWT ID for claim
 
 - Query params:
 
Contact Routes
timesafari://contact-edit/:didtimesafari://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: