|
|
@ -115,7 +115,7 @@ export class DeepLinkHandler { |
|
|
|
|
|
|
|
const [path, queryString] = parts[1].split("?"); |
|
|
|
const [routePath, ...pathParams] = path.split("/"); |
|
|
|
// logger.log(
|
|
|
|
// logger.info(
|
|
|
|
// "[DeepLink] Debug:",
|
|
|
|
// "Route Path:",
|
|
|
|
// routePath,
|
|
|
@ -150,37 +150,6 @@ export class DeepLinkHandler { |
|
|
|
return { path: routePath, params, query }; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Processes incoming deep links and routes them appropriately. |
|
|
|
* Handles validation, error handling, and routing to the correct view. |
|
|
|
* |
|
|
|
* @param url - The deep link URL to process |
|
|
|
* @throws {DeepLinkError} If URL processing fails |
|
|
|
*/ |
|
|
|
async handleDeepLink(url: string): Promise<void> { |
|
|
|
try { |
|
|
|
logConsoleAndDb("[DeepLink] Processing URL: " + url, false); |
|
|
|
const { path, params, query } = this.parseDeepLink(url); |
|
|
|
// Ensure params is always a Record<string,string> by converting undefined to empty string
|
|
|
|
const sanitizedParams = Object.fromEntries( |
|
|
|
Object.entries(params).map(([key, value]) => [key, value ?? ""]), |
|
|
|
); |
|
|
|
await this.validateAndRoute(path, sanitizedParams, query); |
|
|
|
} catch (error) { |
|
|
|
const deepLinkError = error as DeepLinkError; |
|
|
|
logConsoleAndDb( |
|
|
|
`[DeepLink] Error (${deepLinkError.code}): ${deepLinkError.message}`, |
|
|
|
true, |
|
|
|
); |
|
|
|
|
|
|
|
throw { |
|
|
|
code: deepLinkError.code || "UNKNOWN_ERROR", |
|
|
|
message: deepLinkError.message, |
|
|
|
details: deepLinkError.details, |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Routes the deep link to appropriate view with validated parameters. |
|
|
|
* Validates route and parameters using Zod schemas before routing. |
|
|
@ -256,4 +225,35 @@ export class DeepLinkHandler { |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Processes incoming deep links and routes them appropriately. |
|
|
|
* Handles validation, error handling, and routing to the correct view. |
|
|
|
* |
|
|
|
* @param url - The deep link URL to process |
|
|
|
* @throws {DeepLinkError} If URL processing fails |
|
|
|
*/ |
|
|
|
async handleDeepLink(url: string): Promise<void> { |
|
|
|
try { |
|
|
|
logConsoleAndDb("[DeepLink] Processing URL: " + url, false); |
|
|
|
const { path, params, query } = this.parseDeepLink(url); |
|
|
|
// Ensure params is always a Record<string,string> by converting undefined to empty string
|
|
|
|
const sanitizedParams = Object.fromEntries( |
|
|
|
Object.entries(params).map(([key, value]) => [key, value ?? ""]), |
|
|
|
); |
|
|
|
await this.validateAndRoute(path, sanitizedParams, query); |
|
|
|
} catch (error) { |
|
|
|
const deepLinkError = error as DeepLinkError; |
|
|
|
logConsoleAndDb( |
|
|
|
`[DeepLink] Error (${deepLinkError.code}): ${deepLinkError.message}`, |
|
|
|
true, |
|
|
|
); |
|
|
|
|
|
|
|
throw { |
|
|
|
code: deepLinkError.code || "UNKNOWN_ERROR", |
|
|
|
message: deepLinkError.message, |
|
|
|
details: deepLinkError.details, |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|