init claude-code
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import { randomUUID, type UUID } from 'crypto'
|
||||
import { validateUuid } from './uuid.js'
|
||||
|
||||
export type ParsedSessionUrl = {
|
||||
sessionId: UUID
|
||||
ingressUrl: string | null
|
||||
isUrl: boolean
|
||||
jsonlFile: string | null
|
||||
isJsonlFile: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a session resume identifier which can be either:
|
||||
* - A URL containing session ID (e.g., https://api.example.com/v1/session_ingress/session/550e8400-e29b-41d4-a716-446655440000)
|
||||
* - A plain session ID (UUID)
|
||||
*
|
||||
* @param resumeIdentifier - The URL or session ID to parse
|
||||
* @returns Parsed session information or null if invalid
|
||||
*/
|
||||
export function parseSessionIdentifier(
|
||||
resumeIdentifier: string,
|
||||
): ParsedSessionUrl | null {
|
||||
// Check for JSONL file path before URL parsing, since Windows absolute
|
||||
// paths (e.g., C:\path\file.jsonl) are parsed as valid URLs with C: as protocol
|
||||
if (resumeIdentifier.toLowerCase().endsWith('.jsonl')) {
|
||||
return {
|
||||
sessionId: randomUUID() as UUID,
|
||||
ingressUrl: null,
|
||||
isUrl: false,
|
||||
jsonlFile: resumeIdentifier,
|
||||
isJsonlFile: true,
|
||||
}
|
||||
}
|
||||
|
||||
// Check if it's a plain UUID
|
||||
if (validateUuid(resumeIdentifier)) {
|
||||
return {
|
||||
sessionId: resumeIdentifier as UUID,
|
||||
ingressUrl: null,
|
||||
isUrl: false,
|
||||
jsonlFile: null,
|
||||
isJsonlFile: false,
|
||||
}
|
||||
}
|
||||
|
||||
// Check if it's a URL
|
||||
try {
|
||||
const url = new URL(resumeIdentifier)
|
||||
|
||||
// Use the entire URL as the ingress URL
|
||||
// Always generate a random session ID
|
||||
return {
|
||||
sessionId: randomUUID() as UUID,
|
||||
ingressUrl: url.href,
|
||||
isUrl: true,
|
||||
jsonlFile: null,
|
||||
isJsonlFile: false,
|
||||
}
|
||||
} catch {
|
||||
// Not a valid URL
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
Reference in New Issue
Block a user