{"version":3,"sources":["../../src/xcode/platform.ts","../../src/xcode/upload.ts","../../src/deliver/metadata.ts","../../src/deliver/index.ts"],"names":["mkdtemp","join","tmpdir","writeFile","spawn","unlink","readFile","stat","readdir","existsSync","uploadWithAltool","extname","createHash"],"mappings":"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","file":"index.cjs","sourcesContent":["export function requireMacOS(feature: string): void {\n  if (process.platform !== \"darwin\") {\n    throw new Error(\n      `${feature} requires macOS. This operation uses Xcode command-line tools ` +\n      `which are not available on ${process.platform}.`\n    );\n  }\n}\n\nexport function isMacOS(): boolean {\n  return process.platform === \"darwin\";\n}\n","import { spawn } from \"node:child_process\";\nimport { writeFile, unlink, mkdtemp } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { requireMacOS } from \"./platform.js\";\n\nexport async function uploadWithAltool(options: {\n  filePath: string;\n  apiKeyId: string;\n  apiIssuerId: string;\n  apiPrivateKey?: string;\n  apiKeyPath?: string;\n  platform?: string;\n  onOutput?: (chunk: string) => void;\n}): Promise<{ success: boolean; output: string }> {\n  requireMacOS(\"altool upload\");\n\n  // Write temp .p8 if private key content provided\n  let keyDir: string | undefined;\n  if (options.apiPrivateKey && !options.apiKeyPath) {\n    keyDir = await mkdtemp(join(tmpdir(), \"fastnode-altool-\"));\n    const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n    await writeFile(keyPath, options.apiPrivateKey);\n  }\n\n  const args = [\n    \"altool\",\n    \"--upload-app\",\n    \"-f\", options.filePath,\n    \"-t\", options.platform ?? \"ios\",\n    \"--apiKey\", options.apiKeyId,\n    \"--apiIssuer\", options.apiIssuerId,\n  ];\n\n  const env = { ...process.env };\n  if (keyDir) {\n    env.API_PRIVATE_KEYS_DIR = keyDir;\n  }\n\n  return new Promise<{ success: boolean; output: string }>((resolve) => {\n    const child = spawn(\"xcrun\", args, {\n      env,\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n\n    let output = \"\";\n\n    child.stdout.on(\"data\", (data: Buffer) => {\n      const chunk = data.toString();\n      output += chunk;\n      options.onOutput?.(chunk);\n    });\n\n    child.stderr.on(\"data\", (data: Buffer) => {\n      const chunk = data.toString();\n      output += chunk;\n      options.onOutput?.(chunk);\n    });\n\n    child.on(\"close\", async (code) => {\n      if (keyDir) {\n        const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n        await unlink(keyPath).catch(() => {});\n      }\n      resolve({ success: code === 0, output });\n    });\n  });\n}\n","import { readFile, readdir, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface LocalizedMetadata {\n  locale: string;\n  description?: string;\n  keywords?: string;\n  releaseNotes?: string;\n  supportUrl?: string;\n  marketingUrl?: string;\n  promotionalText?: string;\n  name?: string;\n  subtitle?: string;\n  privacyUrl?: string;\n}\n\n/**\n * Review information submitted to App Store Connect for App Review.\n * Mirrors Fastlane deliver's `review_first_name`, `review_last_name`,\n * etc. (upload_metadata.rb lines 45-51), mapping to ASC's\n * `appStoreReviewDetails` attribute names.\n */\nexport interface ReviewInformation {\n  firstName?: string;\n  lastName?: string;\n  phoneNumber?: string;\n  emailAddress?: string;\n  demoUser?: string;\n  demoPassword?: string;\n  notes?: string;\n}\n\nexport interface MetadataSet {\n  localizations: LocalizedMetadata[];\n  copyright?: string;\n  /** Typed review information extracted from `review_information/`. */\n  reviewInformation?: ReviewInformation;\n  /** Raw review information map, including any unrecognised filenames. */\n  reviewInfo?: Record<string, string>;\n}\n\n/**\n * Map from a `metadata/review_information/` filename (without `.txt`) to\n * its `ReviewInformation` field. Supports both the modern ASC-aligned\n * names and Fastlane's legacy `review_*` names.\n */\nconst REVIEW_FILENAME_TO_FIELD: Record<string, keyof ReviewInformation> = {\n  // Modern (ASC-aligned) filenames\n  first_name: \"firstName\",\n  last_name: \"lastName\",\n  phone_number: \"phoneNumber\",\n  email_address: \"emailAddress\",\n  demo_user: \"demoUser\",\n  demo_password: \"demoPassword\",\n  notes: \"notes\",\n  // Legacy Fastlane filenames\n  review_first_name: \"firstName\",\n  review_last_name: \"lastName\",\n  review_phone_number: \"phoneNumber\",\n  review_email: \"emailAddress\",\n  review_demo_user: \"demoUser\",\n  review_demo_password: \"demoPassword\",\n  review_notes: \"notes\",\n};\n\nconst LOCALE_FILES: Record<string, string> = {\n  \"description.txt\": \"description\",\n  \"keywords.txt\": \"keywords\",\n  \"release_notes.txt\": \"releaseNotes\",\n  \"support_url.txt\": \"supportUrl\",\n  \"marketing_url.txt\": \"marketingUrl\",\n  \"promotional_text.txt\": \"promotionalText\",\n  \"name.txt\": \"name\",\n  \"subtitle.txt\": \"subtitle\",\n  \"privacy_url.txt\": \"privacyUrl\",\n};\n\nexport async function loadMetadata(metadataPath: string): Promise<MetadataSet> {\n  const localizations: LocalizedMetadata[] = [];\n  let copyright: string | undefined;\n  let reviewInfo: Record<string, string> | undefined;\n  let reviewInformation: ReviewInformation | undefined;\n\n  // Read copyright\n  try {\n    copyright = (await readFile(join(metadataPath, \"copyright.txt\"), \"utf-8\")).trim();\n  } catch {\n    // Optional\n  }\n\n  // Read review info\n  const reviewDir = join(metadataPath, \"review_information\");\n  try {\n    const reviewStat = await stat(reviewDir);\n    if (reviewStat.isDirectory()) {\n      reviewInfo = {};\n      reviewInformation = {};\n      const files = await readdir(reviewDir);\n      for (const file of files) {\n        if (!file.endsWith(\".txt\")) continue;\n        const key = file.replace(\".txt\", \"\");\n        const content = (await readFile(join(reviewDir, file), \"utf-8\")).trim();\n        reviewInfo[key] = content;\n        const field = REVIEW_FILENAME_TO_FIELD[key];\n        if (field && content) reviewInformation[field] = content;\n      }\n    }\n  } catch {\n    // Optional\n  }\n\n  // Read locale directories\n  const entries = await readdir(metadataPath, { withFileTypes: true });\n  for (const entry of entries) {\n    if (!entry.isDirectory()) continue;\n    if (entry.name === \"review_information\" || entry.name === \"trade_representative_contact_information\") continue;\n\n    const locale = entry.name;\n    const localeDir = join(metadataPath, locale);\n    const localization: LocalizedMetadata = { locale };\n\n    for (const [filename, key] of Object.entries(LOCALE_FILES)) {\n      try {\n        const content = (await readFile(join(localeDir, filename), \"utf-8\")).trim();\n        if (content) {\n          (localization as any)[key] = content;\n        }\n      } catch {\n        // File doesn't exist — optional\n      }\n    }\n\n    localizations.push(localization);\n  }\n\n  return { localizations, copyright, reviewInfo, reviewInformation };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, readdir, stat } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Platform, ReleaseType } from \"../types/index.js\";\nimport { loadMetadata } from \"./metadata.js\";\n\nexport { loadMetadata } from \"./metadata.js\";\nexport type { LocalizedMetadata, MetadataSet } from \"./metadata.js\";\n\nexport interface DeliverOptions {\n  client: AppStoreConnectClient;\n  bundleIdentifier: string;\n  appVersion?: string;\n  platform?: Platform;\n  ipaPath?: string;\n  pkgPath?: string;\n  metadataPath?: string;\n  screenshotsPath?: string;\n  submitForReview?: boolean;\n  automaticRelease?: boolean;\n  releaseType?: ReleaseType;\n  skipBinaryUpload?: boolean;\n  skipMetadata?: boolean;\n  skipScreenshots?: boolean;\n  force?: boolean;\n  apiKeyId?: string;\n  apiIssuerId?: string;\n  apiPrivateKey?: string;\n  copyright?: string;\n  onOutput?: (chunk: string) => void;\n}\n\nexport interface DeliverResult {\n  appId: string;\n  versionId: string;\n  submitted: boolean;\n}\n\nexport async function uploadToAppStore(options: DeliverOptions): Promise<DeliverResult> {\n  const platform = options.platform ?? \"IOS\";\n\n  // Find app\n  const app = await options.client.apps.findByBundleId(options.bundleIdentifier);\n  if (!app) throw new Error(`App not found: ${options.bundleIdentifier}`);\n\n  // Find or create version\n  const versions = await options.client.appStoreVersions.listForApp(app.id, {\n    filter: { platform },\n  });\n\n  let version = versions.find(\n    (v) =>\n      v.attributes.appStoreState === \"PREPARE_FOR_SUBMISSION\" ||\n      v.attributes.appStoreState === \"DEVELOPER_REJECTED\"\n  );\n\n  if (!version && options.appVersion) {\n    version = await options.client.appStoreVersions.create({\n      appId: app.id,\n      versionString: options.appVersion,\n      platform,\n      releaseType: options.releaseType,\n    });\n  }\n\n  if (!version) {\n    throw new Error(\"No editable app store version found. Pass appVersion to create one.\");\n  }\n\n  // Upload metadata\n  if (!options.skipMetadata && options.metadataPath && existsSync(options.metadataPath)) {\n    await uploadMetadata({\n      client: options.client,\n      appId: app.id,\n      versionId: version.id,\n      metadataPath: options.metadataPath,\n    });\n  }\n\n  // Set copyright\n  if (options.copyright) {\n    await options.client.appStoreVersions.update(version.id, {\n      copyright: options.copyright,\n    });\n  }\n\n  // Upload screenshots\n  if (!options.skipScreenshots && options.screenshotsPath && existsSync(options.screenshotsPath)) {\n    await uploadScreenshots({\n      client: options.client,\n      versionId: version.id,\n      screenshotsPath: options.screenshotsPath,\n    });\n  }\n\n  // Upload binary\n  if (!options.skipBinaryUpload) {\n    const binaryPath = options.ipaPath ?? options.pkgPath;\n    if (binaryPath && options.apiKeyId && options.apiIssuerId) {\n      const { uploadWithAltool } = await import(\"../xcode/upload.js\");\n      await uploadWithAltool({\n        filePath: binaryPath,\n        apiKeyId: options.apiKeyId,\n        apiIssuerId: options.apiIssuerId,\n        apiPrivateKey: options.apiPrivateKey,\n        onOutput: options.onOutput,\n      });\n    }\n  }\n\n  // Submit for review\n  let submitted = false;\n  if (options.submitForReview) {\n    await submitForReview({\n      client: options.client,\n      appId: app.id,\n      versionId: version.id,\n    });\n    submitted = true;\n  }\n\n  return { appId: app.id, versionId: version.id, submitted };\n}\n\nexport async function submitForReview(options: {\n  client: AppStoreConnectClient;\n  appId: string;\n  versionId: string;\n}): Promise<void> {\n  await options.client.reviewSubmissions.submitVersion(options.versionId);\n}\n\nexport async function uploadMetadata(options: {\n  client: AppStoreConnectClient;\n  appId: string;\n  versionId: string;\n  metadataPath: string;\n}): Promise<void> {\n  const metadata = await loadMetadata(options.metadataPath);\n\n  // Get existing localizations\n  const existingLocs = await options.client.appStoreVersions.getLocalizations(options.versionId);\n\n  for (const loc of metadata.localizations) {\n    const existing = existingLocs.find((e) => e.attributes.locale === loc.locale);\n    const attrs: Record<string, string | undefined> = {};\n    if (loc.description) attrs.description = loc.description;\n    if (loc.keywords) attrs.keywords = loc.keywords;\n    if (loc.releaseNotes) attrs.whatsNew = loc.releaseNotes;\n    if (loc.supportUrl) attrs.supportUrl = loc.supportUrl;\n    if (loc.marketingUrl) attrs.marketingUrl = loc.marketingUrl;\n    if (loc.promotionalText) attrs.promotionalText = loc.promotionalText;\n\n    if (existing) {\n      await options.client.appStoreVersions.updateLocalization(existing.id, attrs);\n    } else {\n      await options.client.appStoreVersions.createLocalization({\n        versionId: options.versionId,\n        locale: loc.locale,\n        ...attrs,\n      });\n    }\n  }\n\n  // Update copyright\n  if (metadata.copyright) {\n    await options.client.appStoreVersions.update(options.versionId, {\n      copyright: metadata.copyright,\n    });\n  }\n}\n\nexport async function uploadScreenshots(options: {\n  client: AppStoreConnectClient;\n  versionId: string;\n  screenshotsPath: string;\n}): Promise<void> {\n  const localizations = await options.client.appStoreVersions.getLocalizations(options.versionId);\n\n  for (const loc of localizations) {\n    const localeDir = join(options.screenshotsPath, loc.attributes.locale);\n    if (!existsSync(localeDir)) continue;\n\n    const sets = await options.client.appScreenshots.listSetsForLocalization(loc.id);\n    const files = (await readdir(localeDir)).filter((f) =>\n      [\".png\", \".jpg\", \".jpeg\"].includes(extname(f).toLowerCase())\n    );\n\n    for (const file of files) {\n      const filePath = join(localeDir, file);\n      const fileData = await readFile(filePath);\n      const checksum = createHash(\"md5\").update(fileData).digest(\"hex\");\n\n      // Determine display type from filename convention\n      const displayType = detectDisplayType(file);\n      if (!displayType) continue;\n\n      // Find or create screenshot set\n      let set = sets.find((s) => s.attributes.screenshotDisplayType === displayType);\n      if (!set) {\n        set = await options.client.appScreenshots.createSet({\n          localizationId: loc.id,\n          screenshotDisplayType: displayType,\n        });\n      }\n\n      // Reserve, upload, commit\n      const reserved = await options.client.appScreenshots.reserveScreenshot({\n        setId: set.id,\n        fileName: file,\n        fileSize: fileData.length,\n      });\n\n      // Upload chunks\n      const ops = reserved.attributes.uploadOperations;\n      if (ops) {\n        for (const op of ops) {\n          const chunk = fileData.subarray(op.offset, op.offset + op.length);\n          const headers: Record<string, string> = {};\n          for (const h of op.requestHeaders) {\n            headers[h.name] = h.value;\n          }\n          await fetch(op.url, { method: op.method, headers, body: chunk });\n        }\n      }\n\n      await options.client.appScreenshots.commitScreenshot(reserved.id, {\n        sourceFileChecksum: checksum,\n        uploaded: true,\n      });\n    }\n  }\n}\n\nfunction detectDisplayType(filename: string): string | null {\n  const lower = filename.toLowerCase();\n  if (lower.includes(\"6.7\") || lower.includes(\"iphone_67\")) return \"APP_IPHONE_67\";\n  if (lower.includes(\"6.5\") || lower.includes(\"iphone_65\")) return \"APP_IPHONE_65\";\n  if (lower.includes(\"5.5\") || lower.includes(\"iphone_55\")) return \"APP_IPHONE_55\";\n  if (lower.includes(\"ipad_pro_3gen\") || lower.includes(\"12.9\")) return \"APP_IPAD_PRO_3GEN_129\";\n  if (lower.includes(\"ipad_pro\") || lower.includes(\"ipad\")) return \"APP_IPAD_PRO_129\";\n  return null;\n}\n"]}