mlld
Version:
mlld: llm scripting language
1 lines • 60.2 kB
Source Map (JSON)
{"version":3,"sources":["../core/registry/auth/GitHubAuthService.ts","../core/resolvers/GitHubResolver.ts"],"names":["GitHubAuthService","config","serviceName","accountName","fallbackTokenPath","clientId","octokitModule","keytarModule","process","env","MLLD_GITHUB_CLIENT_ID","fallbackStorage","join","homedir","getInstance","instance","getKeytarModule","undefined","getOctokitModule","getOctokit","token","getStoredToken","MlldError","code","severity","ErrorSeverity","Fatal","Octokit","auth","log","debug","info","warn","console","error","isAuthenticated","octokit","users","getAuthenticated","getGitHubUser","data","authenticate","existingUser","success","user","deviceFlow","initiateDeviceFlow","verification_uri","user_code","verification_uri_complete","result","pollForToken","login","errorMessage","Error","message","String","logout","keytar","deletePassword","unlink","getPassword","authData","readFile","parsed","JSON","parse","storeToken","storedInKeychain","setPassword","mkdir","dirname","recursive","stored_at","Date","toISOString","service","writeFile","stringify","mode","response","fetch","method","headers","body","client_id","scope","ok","text","json","cause","startTime","now","expirationTime","expires_in","interval","sleep","device_code","grant_type","access_token","error_description","ms","Promise","resolve","setTimeout","GitHubResolver","name","description","type","capabilities","io","read","write","list","contexts","import","path","output","supportedContentTypes","defaultContentType","priority","cache","strategy","ttl","duration","Map","defaultCacheTimeout","authService","canResolve","ref","repository","MlldResolutionError","reference","owner","repo","split","buildPath","cacheKey","branch","cached","getCached","cacheTimeout","contentType","detectContentType","content","metadata","source","timestamp","taint","author","mx","getAuthToken","etag","fetchFromGitHub","set","mimeType","getMimeType","err","status","localPath","getLocalPath","localExists","existsSync","prefix","logger","details","hasLocal","originalError","resolveBranch","url","githubFetch","items","Array","isArray","map","item","size","lastModified","sha","validateConfig","errors","push","cfg","includes","basePath","useRawApi","checkAccess","operation","authToken","GITHUB_TOKEN","parts","replace","modulePath","filter","p","length","key","timeout","get","maxAge","delete","statusText","Buffer","from","toString","defaultBranch","default_branch","ext","pop","toLowerCase","mimeTypes","filePath","endsWith","hasModuleExports","ast","some","node","kind","cwd"],"mappings":"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","file":"chunk-YUPK4GL5.mjs","sourcesContent":["/**\n * GitHub Authentication Service for mlld CLI\n * Implements OAuth Device Flow with secure token storage\n */\n\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { MlldError, ErrorSeverity } from '@core/errors';\n\nexport interface AuthConfig {\n clientId?: string;\n serviceName?: string;\n accountName?: string;\n fallbackStorage?: boolean;\n}\n\nexport interface GitHubUser {\n login: string;\n id: number;\n name: string | null;\n email: string | null;\n avatar_url: string;\n type: string;\n}\n\nexport interface DeviceFlowResult {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete?: string;\n expires_in: number;\n interval: number;\n}\n\nexport interface AuthResult {\n success: boolean;\n user?: GitHubUser;\n token?: string;\n error?: string;\n}\n\nexport class GitHubAuthService {\n private static instance: GitHubAuthService | null = null;\n private config: AuthConfig;\n private serviceName: string;\n private accountName: string;\n private fallbackTokenPath: string;\n private clientId: string;\n private octokitModule: any;\n private keytarModule: any = undefined;\n\n constructor(config: AuthConfig = {}) {\n this.config = {\n clientId: process.env.MLLD_GITHUB_CLIENT_ID || 'Ov23liFeqioeJmD9xZOP',\n serviceName: 'mlld-cli',\n accountName: 'github-token',\n fallbackStorage: true,\n ...config\n };\n \n this.clientId = this.config.clientId!;\n this.serviceName = this.config.serviceName!;\n this.accountName = this.config.accountName!;\n this.fallbackTokenPath = path.join(os.homedir(), '.mlld', 'auth.json');\n }\n\n /**\n * Get singleton instance of GitHubAuthService\n */\n static getInstance(config?: AuthConfig): GitHubAuthService {\n if (!GitHubAuthService.instance) {\n GitHubAuthService.instance = new GitHubAuthService(config);\n }\n return GitHubAuthService.instance;\n }\n\n /**\n * Dynamically load keytar module (optional dependency)\n */\n private async getKeytarModule() {\n if (this.keytarModule === undefined) {\n try {\n this.keytarModule = await import('keytar');\n } catch {\n this.keytarModule = null;\n }\n }\n return this.keytarModule;\n }\n\n /**\n * Dynamically load Octokit module\n */\n private async getOctokitModule() {\n if (!this.octokitModule) {\n this.octokitModule = await import('@octokit/rest');\n }\n return this.octokitModule;\n }\n\n /**\n * Get authenticated Octokit instance\n */\n async getOctokit(): Promise<any> {\n const token = await this.getStoredToken();\n if (!token) {\n throw new MlldError('Not authenticated. Please run: mlld auth login', {\n code: 'AUTH_NOT_AUTHENTICATED',\n severity: ErrorSeverity.Fatal\n });\n }\n const { Octokit } = await this.getOctokitModule();\n return new Octokit({ \n auth: token,\n log: {\n debug: () => {},\n info: () => {},\n warn: console.warn,\n error: console.error\n }\n });\n }\n\n /**\n * Check if user is currently authenticated\n */\n async isAuthenticated(): Promise<boolean> {\n try {\n const token = await this.getStoredToken();\n if (!token) return false;\n\n // Validate token with GitHub API\n const { Octokit } = await this.getOctokitModule();\n const octokit = new Octokit({ \n auth: token,\n log: {\n debug: () => {},\n info: () => {},\n warn: console.warn,\n error: console.error\n }\n });\n await octokit.users.getAuthenticated();\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Get current authenticated GitHub user\n */\n async getGitHubUser(): Promise<GitHubUser | null> {\n try {\n const octokit = await this.getOctokit();\n const { data } = await octokit.users.getAuthenticated();\n return data;\n } catch {\n return null;\n }\n }\n\n /**\n * Perform authentication using OAuth Device Flow\n */\n async authenticate(): Promise<AuthResult> {\n try {\n // Check if already authenticated\n const existingUser = await this.getGitHubUser();\n if (existingUser) {\n return {\n success: true,\n user: existingUser,\n token: await this.getStoredToken()\n };\n }\n\n // Start device flow\n console.log('🔐 Starting GitHub authentication...\\n');\n console.log('📄 By publishing to the mlld registry, you agree to license your');\n console.log(' modules under the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication.');\n console.log(' Learn more: https://creativecommons.org/public-domain/cc0/\\n');\n \n const deviceFlow = await this.initiateDeviceFlow();\n \n console.log(`Please visit: ${deviceFlow.verification_uri}`);\n console.log(`And enter code: ${deviceFlow.user_code}\\n`);\n if (deviceFlow.verification_uri_complete) {\n console.log('Or open the direct link:');\n console.log(`${deviceFlow.verification_uri_complete}\\n`);\n }\n console.log('Waiting for authentication...');\n\n // Poll for token\n const result = await this.pollForToken(deviceFlow);\n \n if (result.success) {\n console.log(`✅ Successfully authenticated as ${result.user!.login}`);\n return result;\n } else {\n console.error(`❌ Authentication failed: ${result.error}`);\n return result;\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n error: `Authentication failed: ${errorMessage}`\n };\n }\n }\n\n /**\n * Logout - remove stored credentials\n */\n async logout(): Promise<void> {\n try {\n // Remove from keychain\n const keytar = await this.getKeytarModule();\n if (keytar) {\n try {\n await keytar.deletePassword(this.serviceName, this.accountName);\n } catch {\n // Keychain removal failed, continue to fallback\n }\n }\n\n // Remove fallback file\n if (this.config.fallbackStorage) {\n try {\n await fs.unlink(this.fallbackTokenPath);\n } catch {\n // File doesn't exist or can't be removed\n }\n }\n\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new MlldError(`Logout failed: ${errorMessage}`, {\n code: 'AUTH_LOGOUT_FAILED',\n severity: ErrorSeverity.Fatal\n });\n }\n }\n\n /**\n * Get stored authentication token\n */\n async getStoredToken(): Promise<string | null> {\n // Try keychain first\n const keytar = await this.getKeytarModule();\n if (keytar) {\n try {\n const token = await keytar.getPassword(this.serviceName, this.accountName);\n if (token) return token;\n } catch {\n // Keychain access failed, try fallback\n }\n }\n\n // Try fallback storage\n if (this.config.fallbackStorage) {\n try {\n const authData = await fs.readFile(this.fallbackTokenPath, 'utf8');\n const parsed = JSON.parse(authData);\n return parsed.token || null;\n } catch {\n // Fallback file doesn't exist or is invalid\n }\n }\n\n return null;\n }\n\n /**\n * Store authentication token securely\n */\n private async storeToken(token: string): Promise<void> {\n let storedInKeychain = false;\n\n // Try to store in keychain\n const keytar = await this.getKeytarModule();\n if (keytar) {\n try {\n await keytar.setPassword(this.serviceName, this.accountName, token);\n storedInKeychain = true;\n } catch (error) {\n console.warn('⚠️ Could not store token in system keychain, using fallback storage');\n }\n } else {\n console.warn('⚠️ Keytar not available, using fallback storage');\n }\n\n // Store in fallback if keychain failed or if fallback is enabled\n if (!storedInKeychain && this.config.fallbackStorage) {\n try {\n // Ensure directory exists\n await fs.mkdir(path.dirname(this.fallbackTokenPath), { recursive: true });\n \n // Store token with metadata\n const authData = {\n token,\n stored_at: new Date().toISOString(),\n service: this.serviceName,\n };\n \n await fs.writeFile(\n this.fallbackTokenPath, \n JSON.stringify(authData, null, 2),\n { mode: 0o600 } // Readable only by owner\n );\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new MlldError(`Failed to store authentication token: ${errorMessage}`, {\n code: 'AUTH_TOKEN_STORAGE_FAILED',\n severity: ErrorSeverity.Fatal\n });\n }\n }\n }\n\n\n /**\n * Initiate GitHub OAuth Device Flow\n */\n private async initiateDeviceFlow(): Promise<DeviceFlowResult> {\n try {\n const response = await fetch('https://github.com/login/device/code', {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n client_id: this.clientId,\n scope: 'gist public_repo',\n }),\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new MlldError(`Failed to initiate device flow: ${error}`, {\n code: 'AUTH_DEVICE_FLOW_FAILED',\n severity: ErrorSeverity.Fatal\n });\n }\n\n return await response.json();\n } catch (error) {\n if (error instanceof MlldError) {\n throw error;\n }\n throw new MlldError(`Failed to initiate device flow: ${error instanceof Error ? error.message : String(error)}`, {\n code: 'AUTH_DEVICE_FLOW_ERROR',\n severity: ErrorSeverity.Fatal,\n cause: error\n });\n }\n }\n\n /**\n * Poll for authentication token\n */\n private async pollForToken(deviceFlow: DeviceFlowResult): Promise<AuthResult> {\n const startTime = Date.now();\n const expirationTime = startTime + (deviceFlow.expires_in * 1000);\n let interval = deviceFlow.interval * 1000; // Convert to milliseconds\n\n while (Date.now() < expirationTime) {\n await this.sleep(interval);\n\n try {\n const response = await fetch('https://github.com/login/oauth/access_token', {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n client_id: this.clientId,\n device_code: deviceFlow.device_code,\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n }),\n });\n\n const data = await response.json();\n \n if (data.access_token) {\n // Store the token\n await this.storeToken(data.access_token);\n \n // Get user info\n const { Octokit } = await this.getOctokitModule();\n const octokit = new Octokit({ \n auth: data.access_token,\n log: {\n debug: () => {},\n info: () => {},\n warn: console.warn,\n error: console.error\n }\n });\n const { data: user } = await octokit.users.getAuthenticated();\n \n return {\n success: true,\n user,\n token: data.access_token,\n };\n } else if (data.error === 'authorization_pending') {\n // Continue polling\n continue;\n } else if (data.error === 'slow_down') {\n // Increase polling interval\n interval += 5000;\n continue;\n } else if (data.error === 'access_denied') {\n return {\n success: false,\n error: 'Authentication was denied by user',\n };\n } else if (data.error === 'expired_token') {\n return {\n success: false,\n error: 'Authentication code expired. Please try again.',\n };\n } else {\n return {\n success: false,\n error: data.error_description || data.error || 'Unknown error',\n };\n }\n } catch (error) {\n // Network error - continue polling unless we're close to expiration\n if (Date.now() + interval >= expirationTime) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n error: `Network error during authentication: ${errorMessage}`,\n };\n }\n // Otherwise continue polling\n }\n }\n\n return {\n success: false,\n error: 'Authentication timed out. Please try again.',\n };\n }\n\n /**\n * Utility function to sleep for a given number of milliseconds\n */\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n}","import { \n Resolver, \n ResolverContent, \n ResolverType,\n ContentInfo,\n ResolverCapabilities\n} from '@core/resolvers/types';\nimport { MlldResolutionError } from '@core/errors';\nimport { GitHubAuthService } from '@core/registry/auth/GitHubAuthService';\nimport { logger } from '@core/utils/logger';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n// GitHub API response types\ninterface GitHubContentItem {\n name: string;\n path: string;\n sha: string;\n size?: number;\n url: string;\n html_url: string;\n git_url: string;\n download_url?: string;\n type: 'file' | 'dir' | 'symlink' | 'submodule';\n content?: string;\n encoding?: string;\n}\n\ninterface GitHubRepoInfo {\n default_branch: string;\n name: string;\n full_name: string;\n private: boolean;\n owner: {\n login: string;\n type: string;\n };\n}\n\n/**\n * Configuration for GitHubResolver\n */\nexport interface GitHubResolverConfig {\n /**\n * GitHub personal access token for authentication\n * @deprecated Use 'mlld auth login' to store tokens securely instead\n */\n token?: string;\n\n /**\n * Repository owner and name (e.g., \"mlld-lang/mlld\")\n */\n repository: string;\n\n /**\n * Branch or tag to use (defaults to main/master)\n */\n branch?: string;\n\n /**\n * Base path within the repository\n */\n basePath?: string;\n\n /**\n * Whether to use raw content API (faster but limited to 1MB files)\n */\n useRawApi?: boolean;\n\n /**\n * Cache timeout in milliseconds\n */\n cacheTimeout?: number;\n\n /**\n * The prefix used to reference this resolver (e.g., \"@private/\")\n * Used for helpful error messages\n */\n prefix?: string;\n\n /**\n * Resolution context (import, path, variable)\n */\n context?: string;\n}\n\n/**\n * GitHub Resolver - provides access to GitHub repository contents\n * Supports both public and private repositories (with token)\n */\nexport class GitHubResolver implements Resolver {\n name = 'GITHUB';\n description = 'Resolves modules from GitHub repositories';\n type: ResolverType = 'input';\n\n constructor() {\n this.authService = GitHubAuthService.getInstance();\n }\n \n capabilities: ResolverCapabilities = {\n io: { read: true, write: false, list: true },\n contexts: { import: true, path: true, output: false },\n supportedContentTypes: ['module', 'data', 'text'],\n defaultContentType: 'text',\n priority: 20, // Same as other file resolvers\n cache: { \n strategy: 'persistent',\n ttl: { duration: 300 } // 5 minutes\n }\n };\n\n private readonly cache: Map<string, { content: string; timestamp: number; etag?: string }> = new Map();\n private readonly defaultCacheTimeout = 300000; // 5 minutes\n private authService: GitHubAuthService;\n\n /**\n * Check if this resolver can handle the reference\n */\n canResolve(ref: string, config?: GitHubResolverConfig): boolean {\n // We can handle any reference if we have a valid repository config\n return !!config?.repository;\n }\n\n /**\n * Resolve a reference to GitHub content\n */\n async resolve(ref: string, config?: GitHubResolverConfig): Promise<ResolverContent> {\n if (!config?.repository) {\n throw new MlldResolutionError(\n 'GitHubResolver requires repository in configuration',\n { reference: ref }\n );\n }\n\n // Parse repository owner and name\n const [owner, repo] = config.repository.split('/');\n if (!owner || !repo) {\n throw new MlldResolutionError(\n 'Invalid repository format. Expected \"owner/repo\"',\n { reference: ref, repository: config.repository }\n );\n }\n\n // Build the path within the repository\n const path = this.buildPath(ref, config);\n \n // Check cache first\n const cacheKey = `${config.repository}:${config.branch || 'default'}:${path}`;\n const cached = this.getCached(cacheKey, config.cacheTimeout);\n if (cached) {\n const contentType = await this.detectContentType(path, cached.content);\n const metadata = {\n source: `github://${config.repository}/${path}`,\n timestamp: new Date(),\n taint: [],\n author: owner\n };\n return {\n content: cached.content,\n contentType,\n mx: metadata,\n metadata\n };\n }\n\n try {\n // Get authentication token\n const token = await this.getAuthToken(config);\n \n // Fetch from GitHub\n const { content, etag } = await this.fetchFromGitHub(owner, repo, path, config, cached?.etag, token);\n \n // Update cache\n this.cache.set(cacheKey, {\n content,\n timestamp: Date.now(),\n etag\n });\n\n const contentType = await this.detectContentType(path, content);\n const metadata = {\n source: `github://${config.repository}/${path}`,\n timestamp: new Date(),\n taint: [],\n author: owner,\n mimeType: this.getMimeType(path)\n };\n return {\n content,\n contentType,\n mx: metadata,\n metadata\n };\n } catch (error) {\n const err = error as { status?: number; message?: string };\n if (err.status === 404) {\n // Check if the file exists locally\n const localPath = this.getLocalPath(ref, config);\n const localExists = localPath && fs.existsSync(localPath);\n \n if (localExists) {\n // Extract the prefix from the original reference\n const prefix = config.prefix || '@private/';\n \n logger.debug(`GitHubResolver: Module ${ref} not found in repo, but local version exists at ${localPath}`);\n \n throw new MlldResolutionError(\n `Module '${prefix}${ref}' not found in repository ${config.repository}.\\n` +\n `However, a local version exists at: ${localPath}\\n\\n` +\n `To test locally before publishing:\\n` +\n ` @import { something } from @local/${ref}\\n\\n` +\n `Ready to publish? Run:\\n` +\n ` mlld publish ${localPath}`,\n { \n code: 'MODULE_NOT_FOUND_BUT_LOCAL_EXISTS',\n details: { \n reference: ref, \n repository: config.repository, \n path, \n hasLocal: true, \n localPath \n }\n }\n );\n } else {\n throw new MlldResolutionError(\n `File not found in repository: ${path}`,\n { \n code: 'FILE_NOT_FOUND', \n details: { reference: ref, repository: config.repository, path } \n }\n );\n }\n }\n if (err.status === 401 || err.status === 403) {\n throw new MlldResolutionError(\n `GitHub authentication required. Run 'mlld auth login' to authenticate`,\n { reference: ref, repository: config.repository, path }\n );\n }\n throw new MlldResolutionError(\n `Failed to fetch from GitHub: ${err.message || 'Unknown error'}`,\n { \n reference: ref, \n repository: config.repository,\n path,\n originalError: error\n }\n );\n }\n }\n\n /**\n * List files in a GitHub directory\n */\n async list(prefix: string, config?: GitHubResolverConfig): Promise<ContentInfo[]> {\n if (!config?.repository) {\n return [];\n }\n\n const [owner, repo] = config.repository.split('/');\n if (!owner || !repo) {\n return [];\n }\n\n const path = this.buildPath(prefix, config);\n const token = await this.getAuthToken(config);\n const branch = await this.resolveBranch(owner, repo, config, token);\n\n try {\n const url = `https://api.github.com/repos/${owner}/${repo}/contents/${path}?ref=${branch}`;\n const response = await this.githubFetch(url, token);\n \n if (!response.ok) {\n return [];\n }\n\n const items = await response.json() as GitHubContentItem[];\n if (!Array.isArray(items)) {\n return [];\n }\n\n return items.map(item => ({\n path: `${prefix}/${item.name}`,\n type: item.type === 'dir' ? 'directory' : 'file' as const,\n size: item.size,\n lastModified: new Date(item.sha) // Using SHA as a proxy for last modified\n }));\n } catch {\n return [];\n }\n }\n\n /**\n * Validate configuration\n */\n validateConfig(config: unknown): string[] {\n const errors: string[] = [];\n \n // Type guard for config\n if (!config || typeof config !== 'object') {\n errors.push('config must be an object');\n return errors;\n }\n \n const cfg = config as Record<string, unknown>;\n\n if (!cfg.repository) {\n errors.push('repository is required');\n } else if (typeof cfg.repository !== 'string') {\n errors.push('repository must be a string');\n } else if (!cfg.repository.includes('/')) {\n errors.push('repository must be in format \"owner/repo\"');\n }\n\n if (cfg.token !== undefined && typeof cfg.token !== 'string') {\n errors.push('token must be a string');\n }\n\n if (cfg.branch !== undefined && typeof cfg.branch !== 'string') {\n errors.push('branch must be a string');\n }\n\n if (cfg.basePath !== undefined && typeof cfg.basePath !== 'string') {\n errors.push('basePath must be a string');\n }\n\n if (cfg.useRawApi !== undefined && typeof cfg.useRawApi !== 'boolean') {\n errors.push('useRawApi must be a boolean');\n }\n\n if (cfg.cacheTimeout !== undefined) {\n if (typeof cfg.cacheTimeout !== 'number' || cfg.cacheTimeout < 0) {\n errors.push('cacheTimeout must be a non-negative number');\n }\n }\n\n return errors;\n }\n\n /**\n * Check access - depends on whether repository is public/private\n */\n async checkAccess(ref: string, operation: 'read' | 'write', config?: GitHubResolverConfig): Promise<boolean> {\n if (operation === 'write') {\n return false; // GitHub resolver is read-only\n }\n\n if (!config?.repository) {\n return false;\n }\n\n // Get authentication token from auth service or config\n const token = await this.getAuthToken(config);\n \n // For private repos, we need a token\n if (token) {\n return true;\n }\n\n // For public repos, check if accessible\n const [owner, repo] = config.repository.split('/');\n try {\n const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`);\n return response.ok;\n } catch {\n return false;\n }\n }\n\n /**\n * Get authentication token from auth service or config fallback\n */\n private async getAuthToken(config?: GitHubResolverConfig): Promise<string | null> {\n try {\n // First try to get token from auth service\n const authToken = await this.authService.getStoredToken();\n if (authToken) {\n return authToken;\n }\n } catch {\n // Auth service failed, continue to fallback\n }\n\n // Fall back to config token (deprecated)\n if (config?.token) {\n return config.token;\n }\n\n // Fall back to environment variable\n if (process.env.GITHUB_TOKEN) {\n return process.env.GITHUB_TOKEN;\n }\n\n return null;\n }\n\n /**\n * Build the full path within the repository\n */\n private buildPath(ref: string, config: GitHubResolverConfig): string {\n const parts: string[] = [];\n \n if (config.basePath) {\n parts.push(config.basePath.replace(/^\\/|\\/$/g, ''));\n }\n \n if (ref) {\n let modulePath = ref.replace(/^\\/|\\/$/g, '');\n \n // Auto-append .mld.md extension if no extension is provided\n if (modulePath && !modulePath.includes('.')) {\n modulePath += '.mld.md';\n }\n \n parts.push(modulePath);\n }\n \n return parts.filter(p => p.length > 0).join('/');\n }\n\n /**\n * Get cached content if available\n */\n private getCached(\n key: string, \n timeout?: number\n ): { content: string; etag?: string } | null {\n const cached = this.cache.get(key);\n if (!cached) return null;\n\n const maxAge = timeout || this.defaultCacheTimeout;\n if (Date.now() - cached.timestamp > maxAge) {\n this.cache.delete(key);\n return null;\n }\n\n return { content: cached.content, etag: cached.etag };\n }\n\n /**\n * Fetch content from GitHub\n */\n private async fetchFromGitHub(\n owner: string,\n repo: string,\n path: string,\n config: GitHubResolverConfig,\n etag?: string,\n token?: string | null\n ): Promise<{ content: string; etag?: string }> {\n const branch = await this.resolveBranch(owner, repo, config, token);\n\n // Use raw API for better performance if enabled\n if (config.useRawApi !== false) {\n const url = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/${path}`;\n const headers: HeadersInit = {};\n \n if (token) {\n headers['Authorization'] = `token ${token}`;\n }\n \n if (etag) {\n headers['If-None-Match'] = etag;\n }\n\n const response = await fetch(url, { headers });\n \n if (response.status === 304) {\n // Not modified, use cache\n const cached = this.cache.get(`${config.repository}:${branch}:${path}`);\n if (cached) {\n return { content: cached.content, etag: cached.etag };\n }\n }\n\n if (!response.ok) {\n const error = new Error(`GitHub API error: ${response.statusText}`) as Error & { status: number };\n error.status = response.status;\n throw error;\n }\n\n return {\n content: await response.text(),\n etag: response.headers.get('etag') || undefined\n };\n }\n\n // Fall back to contents API\n const url = `https://api.github.com/repos/${owner}/${repo}/contents/${path}?ref=${branch}`;\n const response = await this.githubFetch(url, token, etag);\n\n if (response.status === 304) {\n // Not modified, use cache\n const cached = this.cache.get(`${config.repository}:${branch}:${path}`);\n if (cached) {\n return { content: cached.content, etag: cached.etag };\n }\n }\n\n if (!response.ok) {\n const error = new Error(`GitHub API error: ${response.statusText}`) as Error & { status: number };\n error.status = response.status;\n throw error;\n }\n\n const data = await response.json() as GitHubContentItem;\n \n if (data.type !== 'file') {\n throw new Error(`Path is not a file: ${path}`);\n }\n \n if (!data.content) {\n throw new Error(`No content found for file: ${path}`);\n }\n\n // Decode base64 content\n const content = Buffer.from(data.content, 'base64').toString('utf8');\n \n return {\n content,\n etag: response.headers.get('etag') || undefined\n };\n }\n\n /**\n * Resolve the branch to use\n */\n private async resolveBranch(\n owner: string,\n repo: string,\n config: GitHubResolverConfig,\n token?: string | null\n ): Promise<string> {\n if (config.branch) {\n return config.branch;\n }\n\n // Get default branch from repo info\n const cacheKey = `${owner}/${repo}:default-branch`;\n const cached = this.cache.get(cacheKey);\n \n if (cached && Date.now() - cached.timestamp < 86400000) { // 24 hours\n return cached.content;\n }\n\n try {\n const response = await this.githubFetch(\n `https://api.github.com/repos/${owner}/${repo}`,\n token\n );\n \n if (response.ok) {\n const data = await response.json() as GitHubRepoInfo;\n const defaultBranch = data.default_branch || 'main';\n \n this.cache.set(cacheKey, {\n content: defaultBranch,\n timestamp: Date.now()\n });\n \n return defaultBranch;\n }\n } catch {\n // Fall through to default\n }\n\n return 'main';\n }\n\n /**\n * Make a GitHub API request with proper headers\n */\n private async githubFetch(\n url: string,\n token?: string,\n etag?: string\n ): Promise<Response> {\n const headers: HeadersInit = {\n 'Accept': 'application/vnd.github.v3+json',\n 'User-Agent': 'mlld-resolver'\n };\n\n if (token) {\n headers['Authorization'] = `token ${token}`;\n }\n\n if (etag) {\n headers['If-None-Match'] = etag;\n }\n\n return fetch(url, { headers });\n }\n\n /**\n * Get MIME type based on file extension\n */\n private getMimeType(path: string): string {\n const ext = path.split('.').pop()?.toLowerCase();\n const mimeTypes: Record<string, string> = {\n 'mld': 'text/x-mlld',\n 'mlld': 'text/x-mlld',\n 'md': 'text/markdown',\n 'txt': 'text/plain',\n 'json': 'application/json',\n 'yaml': 'text/yaml',\n 'yml': 'text/yaml',\n 'js': 'text/javascript',\n 'ts': 'text/typescript',\n 'py': 'text/x-python',\n 'sh': 'text/x-shellscript'\n };\n\n return mimeTypes[ext || ''] || 'text/plain';\n }\n\n /**\n * Detect content type based on file extension and content\n */\n private async detectContentType(filePath: string, content: string): Promise<'module' | 'data' | 'text'> {\n // Check file extension\n if (filePath.endsWith('.mld') || filePath.endsWith('.mld.md') ||\n filePath.endsWith('.mlld') || filePath.endsWith('.mlld.md')) {\n return 'module';\n }\n if (filePath.endsWith('.json')) {\n return 'data';\n }\n \n // Try to detect mlld module content\n try {\n const { parse } = await import('@grammar/parser');\n const result = await parse(content);\n if (result.success && this.hasModuleExports(result.ast)) {\n return 'module';\n }\n } catch {\n // Not valid mlld\n }\n \n // Try JSON\n try {\n JSON.parse(content);\n return 'data';\n } catch {\n // Not JSON\n }\n \n return 'text';\n }\n \n /**\n * Check if AST has module exports\n */\n private hasModuleExports(ast: any): boolean {\n // Check if there are any directive nodes (not just text/newlines)\n if (!ast || !Array.isArray(ast)) return false;\n \n return ast.some(node => \n node && node.type === 'Directive' && \n ['var', 'exe', 'path'].includes(node.kind)\n );\n }\n\n /**\n * Get the local path where this module might exist\n */\n private getLocalPath(ref: string, config: GitHubResolverConfig): string | null {\n if (!config.basePath) return null;\n \n // Build the same path that would be used in the repository\n const modulePath = this.buildPath(ref, config);\n \n // Check relative to current working directory\n return path.join(process.cwd(), modulePath);\n }\n}\n"]}