{"version":3,"sources":["../src/sanitize.ts","../src/service.ts"],"sourcesContent":["// Sanitize text to prevent HTML/markdown injection from untrusted sources.\n// Escapes HTML special characters: & < > \" '\nexport function sanitizeHtml(text: string): string {\n  return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;');\n}\n\n// Sanitize text for safe markdown/MDX embedding: escape HTML special chars and markdown link syntax\nexport function sanitizeMarkdownText(text: string): string {\n  return sanitizeHtml(text).replace(/[[\\]()]/g, (char) => `\\\\${char}`);\n}\n\n// Sanitize URL for safe markdown link embedding: only allow http/https protocols\nexport function sanitizeUrl(url: string): string {\n  try {\n    const parsed = new URL(url);\n    if (parsed.protocol === 'http:' || parsed.protocol === 'https:') {\n      return url.replace(/[()]/g, (char) => encodeURIComponent(char));\n    }\n    return '';\n  } catch {\n    return '';\n  }\n}\n\n// Sanitize IDs to prevent path traversal from untrusted sources\nexport function sanitizeId(id: string): string {\n  return id.replace(/[^a-zA-Z0-9-_]/g, '-');\n}\n","import { CompassConfig } from './compass';\nimport { Service, Badge, ResolvedDependency, MarkdownTemplateFn, StructuredLink } from './types';\nimport { sanitizeHtml, sanitizeMarkdownText, sanitizeUrl } from './sanitize';\n\nenum UrlTypeToIcon {\n  CHAT_CHANNEL = '💬',\n  DOCUMENT = '📖',\n  DASHBOARD = '👀',\n  ON_CALL = '📲',\n  PROJECT = '🚀',\n  REPOSITORY = '🏡',\n  OTHER_LINK = '⭐',\n}\n\nconst UrlTypeToCategory: Record<string, string> = {\n  CHAT_CHANNEL: 'Chat Channel',\n  DOCUMENT: 'Document',\n  DASHBOARD: 'Dashboard',\n  ON_CALL: 'On-Call',\n  PROJECT: 'Project',\n  REPOSITORY: 'Repository',\n  OTHER_LINK: 'Other',\n};\n\nconst lifecycleColors: Record<string, { backgroundColor: string; textColor: string }> = {\n  Active: { backgroundColor: '#22c55e', textColor: '#fff' },\n  'Pre-release': { backgroundColor: '#f59e0b', textColor: '#fff' },\n  Deprecated: { backgroundColor: '#ef4444', textColor: '#fff' },\n};\n\nconst tierColors: Record<number, { backgroundColor: string; textColor: string }> = {\n  1: { backgroundColor: '#3b82f6', textColor: '#fff' },\n  2: { backgroundColor: '#6366f1', textColor: '#fff' },\n  3: { backgroundColor: '#8b5cf6', textColor: '#fff' },\n  4: { backgroundColor: '#a78bfa', textColor: '#fff' },\n};\n\nconst typeIdToIcon: Record<string, string> = {\n  APPLICATION: 'app-window',\n  SERVICE: 'server',\n  CAPABILITY: 'puzzle',\n  CLOUD_RESOURCE: 'cloud',\n  DATA_PIPELINE: 'workflow',\n  LIBRARY: 'library',\n  MACHINE_LEARNING_MODEL: 'brain',\n  OTHER: 'box',\n  UI_ELEMENT: 'layout',\n  WEBSITE: 'globe',\n};\n\nconst LINK_CATEGORIES: Array<{ label: string; types: string[] }> = [\n  { label: 'Development', types: ['REPOSITORY', 'PROJECT'] },\n  { label: 'Operations', types: ['DASHBOARD', 'ON_CALL', 'CHAT_CHANNEL'] },\n  { label: 'Documentation', types: ['DOCUMENT'] },\n  { label: 'Other', types: ['OTHER_LINK'] },\n];\n\nfunction buildBadges(config: CompassConfig): Badge[] {\n  const badges: Badge[] = [];\n\n  if (config.typeId) {\n    badges.push({\n      content: config.typeId,\n      backgroundColor: '#6366f1',\n      textColor: '#fff',\n    });\n  }\n\n  if (config.fields?.lifecycle) {\n    const colors = lifecycleColors[config.fields.lifecycle] || { backgroundColor: '#6b7280', textColor: '#fff' };\n    badges.push({\n      content: config.fields.lifecycle,\n      ...colors,\n    });\n  }\n\n  if (config.fields?.tier) {\n    const colors = tierColors[config.fields.tier] || { backgroundColor: '#6b7280', textColor: '#fff' };\n    badges.push({\n      content: `Tier ${config.fields.tier}`,\n      ...colors,\n    });\n  }\n\n  if (config.labels) {\n    for (const label of config.labels) {\n      badges.push({\n        content: label,\n        backgroundColor: '#e5e7eb',\n        textColor: '#374151',\n      });\n    }\n  }\n\n  return badges;\n}\n\nexport function buildStructuredLinks(\n  config: CompassConfig,\n  compassComponentUrl?: string,\n  compassTeamUrl?: string\n): StructuredLink[] {\n  const links: StructuredLink[] = [];\n\n  const safeComponentUrl = compassComponentUrl ? sanitizeUrl(compassComponentUrl) : '';\n  if (safeComponentUrl) {\n    links.push({ url: safeComponentUrl, title: 'Compass Component', type: 'Compass', icon: '🧭', rawType: 'COMPASS_COMPONENT' });\n  }\n\n  const safeTeamUrl = compassTeamUrl ? sanitizeUrl(compassTeamUrl) : '';\n  if (safeTeamUrl) {\n    links.push({ url: safeTeamUrl, title: 'Compass Team', type: 'Compass', icon: '🪂', rawType: 'COMPASS_TEAM' });\n  }\n\n  for (const link of config.links ?? []) {\n    const safeUrl = sanitizeUrl(link.url);\n    if (!safeUrl) continue;\n    const title = sanitizeHtml(link.name || new URL(safeUrl).hostname);\n    links.push({\n      url: safeUrl,\n      title,\n      type: UrlTypeToCategory[link.type] ?? 'Other',\n      icon: UrlTypeToIcon[link.type] ?? '🔗',\n      rawType: link.type,\n    });\n  }\n\n  return links;\n}\n\nfunction toTitleCase(text: string): string {\n  return text\n    .split(' ')\n    .map((word) => (word.length > 0 ? word[0].toUpperCase() + word.slice(1).toLowerCase() : ''))\n    .join(' ');\n}\n\nfunction buildCustomFieldsTable(config: CompassConfig): string {\n  if (!config.customFields || config.customFields.length === 0) return '';\n\n  const rows = config.customFields.map((field) => {\n    const safeName = sanitizeMarkdownText(toTitleCase(field.name)).replace(/\\\\/g, '\\\\\\\\').replace(/\\|/g, '\\\\|');\n    // js-yaml parses unquoted true/false as native booleans\n    const isBoolean = field.type === 'boolean' || typeof (field.value as unknown) === 'boolean';\n    const safeValue = isBoolean\n      ? (field.value as unknown) === true || field.value === 'true'\n        ? '✅'\n        : '❌'\n      : sanitizeMarkdownText(String(field.value)).replace(/\\\\/g, '\\\\\\\\').replace(/\\|/g, '\\\\|');\n    return `| ${safeName} | ${safeValue} |`;\n  });\n\n  return `## Custom Fields\n\n| Field Name | Value |\n|---|---|\n${rows.join('\\n')}`;\n}\n\nfunction getRepositoryUrl(config: CompassConfig): string | undefined {\n  return config.links?.find((link) => link.type === 'REPOSITORY')?.url;\n}\n\n// Extract team UUID from Compass ownerId ARN (e.g., ari:cloud:teams::team/UUID -> UUID)\nexport function extractTeamId(ownerId: string): string | undefined {\n  const parts = ownerId.split('/');\n  const teamId = parts[parts.length - 1];\n  return teamId || undefined;\n}\n\nfunction getOwners(config: CompassConfig): string[] {\n  if (!config.ownerId) return [];\n  const teamId = extractTeamId(config.ownerId);\n  return teamId ? [teamId] : [];\n}\n\nexport const defaultMarkdown = (\n  config: CompassConfig,\n  structuredLinks: StructuredLink[],\n  dependencies?: ResolvedDependency[]\n) => {\n  // Bucket structured links by type label\n  const compassLines: string[] = [];\n  const buckets = new Map<string, string[]>(LINK_CATEGORIES.map((c) => [c.label, []]));\n\n  for (const link of structuredLinks) {\n    // Title is already HTML-sanitized by buildStructuredLinks; only escape markdown brackets\n    const safeName = link.title.replace(/[[\\]()]/g, (char) => `\\\\${char}`);\n    const bullet = `* ${link.icon} [${safeName}](${link.url})`;\n\n    if (link.type === 'Compass') {\n      compassLines.push(bullet);\n    } else {\n      const category = LINK_CATEGORIES.find((c) => c.types.includes(link.rawType));\n      const bucketKey = category?.label ?? 'Other';\n      buckets.get(bucketKey)?.push(bullet);\n    }\n  }\n\n  // Build subsection blocks. \"Compass\" is always first.\n  const subsections: string[] = [];\n\n  if (compassLines.length > 0) {\n    subsections.push(`### Compass\\n\\n${compassLines.join('\\n')}`);\n  }\n\n  for (const { label } of LINK_CATEGORIES) {\n    const lines = buckets.get(label);\n    if (lines && lines.length > 0) {\n      subsections.push(`### ${label}\\n\\n${lines.join('\\n')}`);\n    }\n  }\n\n  const linksBlock = subsections.length > 0 ? subsections.join('\\n\\n') : '';\n\n  const customFieldsSection = buildCustomFieldsTable(config);\n\n  const dependencyLines =\n    dependencies && dependencies.length > 0\n      ? dependencies.map((dep) => `* [${sanitizeMarkdownText(dep.name)}](../../${dep.id}/)`).join('\\n')\n      : 'No known dependencies.';\n\n  return `\n\n## Links\n\n${linksBlock}\n${customFieldsSection ? '\\n' + customFieldsSection + '\\n' : ''}\n## Dependencies\n\n${dependencyLines}\n\n## Architecture diagram\n\n<NodeGraph />\n\n`;\n};\n\nconst getComponentUrl = (compassUrl: string, config: CompassConfig) => {\n  const parts = config?.id?.split('/');\n  let componentId = '/components';\n  if (parts) {\n    componentId = `/component/${parts[parts.length - 1]}`;\n  }\n  return `${compassUrl}${componentId}`;\n};\n\nconst getTeamUrl = (compassUrl: string, config: CompassConfig) => {\n  const parts = config?.ownerId?.split('/');\n  if (parts) {\n    return `${compassUrl}/people/team/${parts[parts.length - 1]}`;\n  }\n};\n\ntype SpecType = 'openapi' | 'asyncapi';\n\nfunction isRemoteUrl(path: string): boolean {\n  return path.startsWith('http://') || path.startsWith('https://');\n}\n\nfunction sanitizeLocalPath(path: string): string | null {\n  // Reject absolute paths and path traversal sequences\n  if (path.startsWith('/') || /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/.test(path)) return null;\n  return path;\n}\n\nfunction getSpecifications(config: CompassConfig): Array<{ type: SpecType; path: string; name?: string }> {\n  if (!config.links) return [];\n  const specs: Array<{ type: SpecType; path: string; name?: string }> = [];\n  for (const link of config.links) {\n    if (!link.name) continue;\n    // Skip remote URLs — EventCatalog expects local file paths for specifications.\n    // Remote links are already rendered in the markdown body.\n    if (isRemoteUrl(link.url)) continue;\n    const safePath = sanitizeLocalPath(link.url);\n    if (!safePath) continue;\n    const nameLower = link.name.toLowerCase();\n    if (nameLower.includes('openapi') || nameLower.includes('swagger')) {\n      specs.push({ type: 'openapi', path: safePath, name: link.name });\n    } else if (nameLower.includes('asyncapi')) {\n      specs.push({ type: 'asyncapi', path: safePath, name: link.name });\n    }\n  }\n  return specs;\n}\n\nexport function loadService(\n  config: CompassConfig,\n  compassUrl: string,\n  serviceVersion: string = '0.0.0',\n  serviceId: string = config.name,\n  dependencies?: ResolvedDependency[],\n  customMarkdownTemplate?: MarkdownTemplateFn,\n  badges: boolean = true\n): Service {\n  const componentUrl = getComponentUrl(compassUrl, config);\n  const teamUrl = getTeamUrl(compassUrl, config);\n  const structuredLinks = buildStructuredLinks(config, componentUrl, teamUrl);\n\n  const markdown = customMarkdownTemplate\n    ? customMarkdownTemplate(config, dependencies || [], structuredLinks)\n    : defaultMarkdown(config, structuredLinks, dependencies);\n  const serviceBadges = badges ? buildBadges(config) : [];\n  const repositoryUrl = getRepositoryUrl(config);\n  const owners = getOwners(config);\n  const specifications = getSpecifications(config);\n\n  const service: Service = {\n    id: serviceId,\n    name: config.name,\n    version: serviceVersion,\n    summary: config.description || '',\n    markdown,\n  };\n\n  if (serviceBadges.length > 0) {\n    service.badges = serviceBadges;\n  }\n\n  if (repositoryUrl) {\n    service.repository = { url: repositoryUrl };\n  }\n\n  if (owners.length > 0) {\n    service.owners = owners;\n  }\n\n  if (specifications.length > 0) {\n    service.specifications = specifications;\n  }\n\n  if (structuredLinks.length > 0) {\n    service.attachments = structuredLinks.map((link) => ({\n      url: link.url,\n      title: link.title,\n      type: link.type,\n      icon: link.icon,\n    }));\n  }\n\n  if (dependencies && dependencies.length > 0) {\n    service.sends = dependencies.map((dep) => ({ id: dep.id }));\n  }\n\n  if (config.typeId) {\n    const icon = typeIdToIcon[config.typeId];\n    if (icon) {\n      service.styles = { icon };\n    }\n  }\n\n  return service;\n}\n"],"mappings":"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","names":["UrlTypeToIcon"]}