| // Shared shape for the public device-pairing join shortcode. | |
| export const DEVICE_PAIRING_JOIN_CODE_BYTES = 16; | |
| const DEVICE_PAIRING_JOIN_CODE_RE = /^[A-Za-z0-9_-]{22}$/u; | |
| export function isDevicePairingJoinCode(value: string): boolean { | |
| return DEVICE_PAIRING_JOIN_CODE_RE.test(value); | |
| } | |
| export function parseDevicePairingJoinRequestPath(pathname: string): string | null { | |
| // Public endpoints may include an advertised context path. The final /j namespace | |
| // is the stable route contract; preserving only root /j would mint unusable URLs. | |
| // Terminal /j first: a context path may itself contain a /j/ segment | |
| // (e.g. /proxy/j/app/j), and shortcodes never contain slashes. | |
| if (pathname.endsWith("/j")) { | |
| return ""; | |
| } | |
| const markerIndex = pathname.lastIndexOf("/j/"); | |
| return markerIndex >= 0 ? pathname.slice(markerIndex + 3) : null; | |
| } | |