|  |  | @ -70,6 +70,31 @@ export class DeepLinkHandler { | 
			
		
	
		
			
				
					|  |  |  |     this.router = router; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   /** | 
			
		
	
		
			
				
					|  |  |  |    * Maps deep link routes to their corresponding Vue router names and optional parameter keys. | 
			
		
	
		
			
				
					|  |  |  |    * | 
			
		
	
		
			
				
					|  |  |  |    * The paramKey is used to extract the parameter from the route path, | 
			
		
	
		
			
				
					|  |  |  |    * because "router.replace" expects the right parameter name for the route. | 
			
		
	
		
			
				
					|  |  |  |    * The default is "id". | 
			
		
	
		
			
				
					|  |  |  |    */ | 
			
		
	
		
			
				
					|  |  |  |   private readonly ROUTE_MAP: Record< | 
			
		
	
		
			
				
					|  |  |  |     string, | 
			
		
	
		
			
				
					|  |  |  |     { name: string; paramKey?: string } | 
			
		
	
		
			
				
					|  |  |  |   > = { | 
			
		
	
		
			
				
					|  |  |  |     "user-profile": { name: "user-profile" }, | 
			
		
	
		
			
				
					|  |  |  |     "project-details": { name: "project-details" }, | 
			
		
	
		
			
				
					|  |  |  |     "onboard-meeting-setup": { name: "onboard-meeting-setup" }, | 
			
		
	
		
			
				
					|  |  |  |     "invite-one-accept": { name: "invite-one-accept" }, | 
			
		
	
		
			
				
					|  |  |  |     "contact-import": { name: "contact-import" }, | 
			
		
	
		
			
				
					|  |  |  |     "confirm-gift": { name: "confirm-gift" }, | 
			
		
	
		
			
				
					|  |  |  |     claim: { name: "claim" }, | 
			
		
	
		
			
				
					|  |  |  |     "claim-cert": { name: "claim-cert" }, | 
			
		
	
		
			
				
					|  |  |  |     "claim-add-raw": { name: "claim-add-raw" }, | 
			
		
	
		
			
				
					|  |  |  |     "contact-edit": { name: "contact-edit", paramKey: "did" }, | 
			
		
	
		
			
				
					|  |  |  |     contacts: { name: "contacts" }, | 
			
		
	
		
			
				
					|  |  |  |     did: { name: "did", paramKey: "did" }, | 
			
		
	
		
			
				
					|  |  |  |   }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   /** | 
			
		
	
		
			
				
					|  |  |  |    * Parses deep link URL into path, params and query components. | 
			
		
	
		
			
				
					|  |  |  |    * Validates URL structure using Zod schemas. | 
			
		
	
	
		
			
				
					|  |  | @ -101,11 +126,15 @@ export class DeepLinkHandler { | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     return { | 
			
		
	
		
			
				
					|  |  |  |       path: routePath, | 
			
		
	
		
			
				
					|  |  |  |       params: param ? { id: param } : {}, | 
			
		
	
		
			
				
					|  |  |  |       query, | 
			
		
	
		
			
				
					|  |  |  |     }; | 
			
		
	
		
			
				
					|  |  |  |     const params: Record<string, string> = {}; | 
			
		
	
		
			
				
					|  |  |  |     if (param) { | 
			
		
	
		
			
				
					|  |  |  |       if (this.ROUTE_MAP[routePath].paramKey) { | 
			
		
	
		
			
				
					|  |  |  |         params[this.ROUTE_MAP[routePath].paramKey] = param; | 
			
		
	
		
			
				
					|  |  |  |       } else { | 
			
		
	
		
			
				
					|  |  |  |         params["id"] = param; | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |     return { path: routePath, params, query }; | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   /** | 
			
		
	
	
		
			
				
					|  |  | @ -153,28 +182,13 @@ export class DeepLinkHandler { | 
			
		
	
		
			
				
					|  |  |  |     params: Record<string, string>, | 
			
		
	
		
			
				
					|  |  |  |     query: Record<string, string>, | 
			
		
	
		
			
				
					|  |  |  |   ): Promise<void> { | 
			
		
	
		
			
				
					|  |  |  |     const routeMap: Record<string, string> = { | 
			
		
	
		
			
				
					|  |  |  |       "user-profile": "user-profile", | 
			
		
	
		
			
				
					|  |  |  |       "project-details": "project-details", | 
			
		
	
		
			
				
					|  |  |  |       "onboard-meeting-setup": "onboard-meeting-setup", | 
			
		
	
		
			
				
					|  |  |  |       "invite-one-accept": "invite-one-accept", | 
			
		
	
		
			
				
					|  |  |  |       "contact-import": "contact-import", | 
			
		
	
		
			
				
					|  |  |  |       "confirm-gift": "confirm-gift", | 
			
		
	
		
			
				
					|  |  |  |       claim: "claim", | 
			
		
	
		
			
				
					|  |  |  |       "claim-cert": "claim-cert", | 
			
		
	
		
			
				
					|  |  |  |       "claim-add-raw": "claim-add-raw", | 
			
		
	
		
			
				
					|  |  |  |       "contact-edit": "contact-edit", | 
			
		
	
		
			
				
					|  |  |  |       contacts: "contacts", | 
			
		
	
		
			
				
					|  |  |  |       did: "did", | 
			
		
	
		
			
				
					|  |  |  |     }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     // First try to validate the route path
 | 
			
		
	
		
			
				
					|  |  |  |     let routeName: string; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     try { | 
			
		
	
		
			
				
					|  |  |  |       // Validate route exists
 | 
			
		
	
		
			
				
					|  |  |  |       const validRoute = routeSchema.parse(path) as DeepLinkRoute; | 
			
		
	
		
			
				
					|  |  |  |       routeName = routeMap[validRoute]; | 
			
		
	
		
			
				
					|  |  |  |       routeName = this.ROUTE_MAP[validRoute].name; | 
			
		
	
		
			
				
					|  |  |  |     } catch (error) { | 
			
		
	
		
			
				
					|  |  |  |       // Log the invalid route attempt
 | 
			
		
	
		
			
				
					|  |  |  |       logConsoleAndDb(`[DeepLink] Invalid route path: ${path}`, true); | 
			
		
	
	
		
			
				
					|  |  | 
 |