{"version":3,"sources":["../../src/cert/csr.ts","../../src/cert/cert.ts","../../src/sigh/index.ts","../../src/match/storage/git.ts","../../src/match/storage/s3.ts","../../src/match/storage/local.ts","../../src/match/storage/index.ts","../../src/match/encryption.ts","../../src/match/index.ts","../../src/pem/index.ts","../../src/actions/built-in/signing.ts","../../src/xcode/platform.ts","../../src/gym/detect.ts","../../src/gym/export-options.ts","../../src/gym/index.ts","../../src/actions/built-in/building.ts","../../src/client/srp.ts","../../src/client/apple-session.ts","../../src/client/request.ts","../../src/pilot/upload-altool.ts","../../src/pilot/transporter-install.ts","../../src/pilot/upload-transporter.ts","../../src/pilot/classify.ts","../../src/pilot/index.ts","../../src/deliver/metadata.ts","../../src/xcode/upload.ts","../../src/deliver/index.ts","../../src/produce/index.ts","../../src/actions/built-in/distribution.ts","../../src/scan/command.ts","../../src/scan/retry.ts","../../src/scan/index.ts","../../src/snapshot/simulator.ts","../../src/snapshot/index.ts","../../src/trainer/index.ts","../../src/precheck/rules.ts","../../src/precheck/index.ts","../../src/client/auth.ts","../../src/resources/certificates.ts","../../src/resources/profiles.ts","../../src/resources/bundle-ids.ts","../../src/resources/devices.ts","../../src/resources/apps.ts","../../src/resources/builds.ts","../../src/resources/beta-groups.ts","../../src/resources/capabilities.ts","../../src/resources/app-store-versions.ts","../../src/resources/app-screenshots.ts","../../src/resources/review-submissions.ts","../../src/resources/app-info.ts","../../src/resources/app-info-localizations.ts","../../src/resources/app-store-review-details.ts","../../src/resources/beta-testers.ts","../../src/resources/beta-app-review-submissions.ts","../../src/resources/beta-app-review-details.ts","../../src/resources/beta-invitations.ts","../../src/resources/beta-licenses.ts","../../src/resources/app-previews.ts","../../src/resources/app-preview-sets.ts","../../src/resources/app-prices.ts","../../src/resources/territories.ts","../../src/resources/age-rating-declarations.ts","../../src/resources/app-categories.ts","../../src/resources/app-encryption-declarations.ts","../../src/resources/idfa-declarations.ts","../../src/resources/pre-release-versions.ts","../../src/resources/review-submission-items.ts","../../src/resources/users.ts","../../src/resources/user-invitations.ts","../../src/resources/in-app-purchases.ts","../../src/resources/game-center-detail.ts","../../src/resources/xcode-metrics.ts","../../src/client/portal.ts","../../src/client/iris.ts","../../src/client/index.ts","../../src/frameit/devices.ts","../../src/frameit/index.ts","../../src/actions/built-in/testing.ts","../../src/xcode/project.ts","../../src/actions/built-in/versioning.ts","../../src/actions/built-in/git.ts","../../src/actions/built-in/notifications.ts","../../src/actions/built-in/plist.ts","../../src/actions/built-in/utilities.ts","../../src/actions/index.ts"],"names":["webcrypto","x509","cert","content","result","mkdir","join","writeFile","tmpdir","unlink","promisify","execFile","homedir","mkdtempSync","writeFileSync","chmodSync","execFileSync","rmSync","mkdirSync","GitStorage","S3Storage","LocalStorage","randomBytes","pbkdf2Sync","createCipheriv","createDecipheriv","createHash","extname","readdir","readFile","existsSync","createCertificate","createProfile","execSync","syncSigningAssets","createPushCertificate","spawn","resolve","basename","plist","randomUUID","stat","rm","buildApp","choice","phone","code","createInterface","detail","mkdtemp","build","sleep","emojiRegex","uploadWithAltool","uploadToAppStore","createApp","runXcodebuild","execFileAsync","setInterfaceStyle","readdirSync","copyFileSync","action","readFileSync","plist2","importPKCS8","SignJWT","id","init_devices","runTests","captureScreenshots","parseTestResults","validateMetadata","AppStoreConnectClient","frameScreenshots","readBuildSettings","setBuildNumber","setVersionNumber","git_exports","init_git","plist3","updateSigningSettings"],"mappings":"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","file":"index.cjs","sourcesContent":["import * as x509 from \"@peculiar/x509\";\nimport { webcrypto, generateKeyPairSync } from \"node:crypto\";\nimport { execSync } from \"node:child_process\";\nimport { writeFileSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\n\n// Register the Node.js crypto provider.\nx509.cryptoProvider.set(webcrypto as unknown as Parameters<typeof x509.cryptoProvider.set>[0]);\n\nfunction toPem(header: string, der: Buffer): string {\n  const b64 = der.toString(\"base64\");\n  const lines: string[] = [];\n  for (let i = 0; i < b64.length; i += 64) lines.push(b64.slice(i, i + 64));\n  return `-----BEGIN ${header}-----\\n${lines.join(\"\\n\")}\\n-----END ${header}-----`;\n}\n\n/**\n * Generate EC P-256 CSR — used by App Store Connect API (JWT auth).\n */\nexport async function generateCSR(): Promise<{ csr: string; privateKey: string }> {\n  const algorithm = { name: \"ECDSA\", namedCurve: \"P-256\" } as const;\n  const keyPair = await webcrypto.subtle.generateKey(algorithm, true, [\"sign\", \"verify\"]);\n\n  const csr = await x509.Pkcs10CertificateRequestGenerator.create({\n    name: \"CN=PEM\",\n    keys: keyPair,\n    signingAlgorithm: { name: \"ECDSA\", hash: \"SHA-256\" },\n  });\n\n  const pkcs8 = await webcrypto.subtle.exportKey(\"pkcs8\", keyPair.privateKey);\n  return {\n    csr: csr.toString(\"pem\"),\n    privateKey: toPem(\"PRIVATE KEY\", Buffer.from(pkcs8)),\n  };\n}\n\n/**\n * Generate RSA 2048 CSR — required by Apple Developer Portal (session auth).\n * Matches Fastlane's create_certificate_signing_request which uses RSA 2048.\n */\nexport function generateRSACSR(): { csr: string; privateKey: string } {\n  const { privateKey, publicKey } = generateKeyPairSync(\"rsa\", {\n    modulusLength: 2048,\n    privateKeyEncoding: { type: \"pkcs8\", format: \"pem\" },\n    publicKeyEncoding: { type: \"spki\", format: \"pem\" },\n  });\n\n  // Generate CSR using openssl (Node crypto doesn't have native CSR generation for RSA)\n  const keyPath = join(tmpdir(), `fastnode-rsa-${Date.now()}.pem`);\n  const csrPath = join(tmpdir(), `fastnode-rsa-${Date.now()}.csr`);\n\n  try {\n    writeFileSync(keyPath, privateKey);\n    execSync(`openssl req -new -key \"${keyPath}\" -out \"${csrPath}\" -subj \"/CN=PEM\" 2>/dev/null`);\n    const csr = readFileSync(csrPath, \"utf-8\");\n    return { csr, privateKey };\n  } finally {\n    try { unlinkSync(keyPath); } catch {}\n    try { unlinkSync(csrPath); } catch {}\n  }\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { writeFile, mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Certificate, CertificateType } from \"../types/index.js\";\nimport { generateCSR } from \"./csr.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface CertOptions {\n  client: AppStoreConnectClient;\n  type?: CertificateType;\n  development?: boolean;\n  force?: boolean;\n  outputDir?: string;\n  keychainPath?: string;\n  keychainPassword?: string;\n  platform?: \"ios\" | \"macos\";\n}\n\nexport interface CertResult {\n  certificate: Certificate;\n  privateKey: string;\n  certificateContent: Buffer;\n  certPath?: string;\n  p12Path?: string;\n}\n\nfunction resolveCertificateTypes(options: CertOptions): CertificateType[] {\n  if (options.type) return [options.type];\n\n  const platform = options.platform ?? \"ios\";\n  if (options.development) {\n    return platform === \"macos\" ? [\"MAC_APP_DEVELOPMENT\"] : [\"IOS_DEVELOPMENT\"];\n  }\n  return platform === \"macos\"\n    ? [\"MAC_APP_DISTRIBUTION\"]\n    : [\"IOS_DISTRIBUTION\"];\n}\n\nexport async function findValidCertificates(\n  options: Omit<CertOptions, \"force\">\n): Promise<Certificate[]> {\n  const types = resolveCertificateTypes(options as CertOptions);\n  const certs = await options.client.certificates.list({\n    filter: { certificateType: types },\n    limit: 200,\n  });\n\n  const now = new Date();\n  return certs.filter(\n    (c) => new Date(c.attributes.expirationDate) > now\n  );\n}\n\nexport async function createCertificate(\n  options: CertOptions\n): Promise<CertResult> {\n  // Check for existing valid certs unless force\n  if (!options.force) {\n    const existing = await findValidCertificates(options);\n    if (existing.length > 0) {\n      const cert = existing[0];\n      const content = Buffer.from(cert.attributes.certificateContent, \"base64\");\n      const result: CertResult = {\n        certificate: cert,\n        privateKey: \"\",\n        certificateContent: content,\n      };\n\n      if (options.outputDir) {\n        await mkdir(options.outputDir, { recursive: true });\n        const certPath = join(options.outputDir, `${cert.id}.cer`);\n        await writeFile(certPath, content);\n        result.certPath = certPath;\n      }\n\n      return result;\n    }\n  }\n\n  // Generate CSR and create new certificate\n  const types = resolveCertificateTypes(options);\n  const { csr, privateKey } = await generateCSR();\n\n  const cert = await options.client.certificates.create({\n    certificateType: types[0],\n    csrContent: csr,\n  });\n\n  const content = Buffer.from(cert.attributes.certificateContent, \"base64\");\n\n  const result: CertResult = {\n    certificate: cert,\n    privateKey,\n    certificateContent: content,\n  };\n\n  // Write files if outputDir provided\n  if (options.outputDir) {\n    await mkdir(options.outputDir, { recursive: true });\n\n    const certPath = join(options.outputDir, `${cert.id}.cer`);\n    await writeFile(certPath, content);\n    result.certPath = certPath;\n\n    const keyPath = join(options.outputDir, `${cert.id}.p12`);\n    await writeFile(keyPath, privateKey);\n    result.p12Path = keyPath;\n  }\n\n  // Import to keychain if on macOS\n  if (options.keychainPath && process.platform === \"darwin\") {\n    await importToKeychain(\n      content,\n      options.keychainPath,\n      options.keychainPassword\n    );\n  }\n\n  return result;\n}\n\nexport async function revokeCertificate(\n  client: AppStoreConnectClient,\n  id: string\n): Promise<void> {\n  await client.certificates.revoke(id);\n}\n\nexport async function downloadCertificate(\n  client: AppStoreConnectClient,\n  id: string\n): Promise<Buffer> {\n  const cert = await client.certificates.get(id);\n  return Buffer.from(cert.attributes.certificateContent, \"base64\");\n}\n\nexport async function revokeExpiredCertificates(\n  options: CertOptions\n): Promise<number> {\n  const types = resolveCertificateTypes(options);\n  const certs = await options.client.certificates.list({\n    filter: { certificateType: types },\n  });\n\n  const now = new Date();\n  let count = 0;\n  for (const cert of certs) {\n    if (new Date(cert.attributes.expirationDate) <= now) {\n      try {\n        await options.client.certificates.revoke(cert.id);\n        count++;\n      } catch {\n        // Ignore revocation failures for already-revoked certs\n      }\n    }\n  }\n  return count;\n}\n\nasync function importToKeychain(\n  certData: Buffer,\n  keychainPath: string,\n  keychainPassword?: string\n): Promise<void> {\n  const { tmpdir } = await import(\"node:os\");\n  const tempCertPath = join(tmpdir(), `fastnode-cert-${Date.now()}.cer`);\n  await writeFile(tempCertPath, certData);\n\n  try {\n    const args = [\n      \"import\",\n      tempCertPath,\n      \"-k\",\n      keychainPath,\n      \"-T\",\n      \"/usr/bin/codesign\",\n      \"-T\",\n      \"/usr/bin/security\",\n    ];\n\n    await execFileAsync(\"security\", args);\n\n    // Set partition list if keychain password provided\n    if (keychainPassword) {\n      await execFileAsync(\"security\", [\n        \"set-key-partition-list\",\n        \"-S\",\n        \"apple-tool:,apple:,codesign:\",\n        \"-s\",\n        \"-k\",\n        keychainPassword,\n        keychainPath,\n      ]);\n    }\n  } finally {\n    const { unlink } = await import(\"node:fs/promises\");\n    await unlink(tempCertPath).catch(() => {});\n  }\n}\n","import { writeFile, mkdir, copyFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Profile, ProfileType, CertificateType, Platform } from \"../types/index.js\";\n\nexport interface SighOptions {\n  client: AppStoreConnectClient;\n  bundleIdentifier: string;\n  profileType?: ProfileType;\n  profileName?: string;\n  certificateIds?: string[];\n  deviceIds?: string[];\n  force?: boolean;\n  outputDir?: string;\n  platform?: \"ios\" | \"macos\" | \"tvos\" | \"catalyst\";\n  development?: boolean;\n  adhoc?: boolean;\n  inHouse?: boolean;\n  readonly?: boolean;\n  skipInstall?: boolean;\n  skipCertificateVerification?: boolean;\n  includeAllCertificates?: boolean;\n}\n\nexport interface SighResult {\n  profile: Profile;\n  profileContent: Buffer;\n  uuid: string;\n  name: string;\n  filePath?: string;\n}\n\nfunction resolveProfileType(options: SighOptions): ProfileType {\n  if (options.profileType) return options.profileType;\n\n  const platform = options.platform ?? \"ios\";\n  const isDev = options.development ?? false;\n  const isAdhoc = options.adhoc ?? false;\n  const isInHouse = options.inHouse ?? false;\n\n  switch (platform) {\n    case \"macos\":\n      if (isDev) return \"MAC_APP_DEVELOPMENT\";\n      if (isInHouse) return \"MAC_APP_INHOUSE\";\n      return \"MAC_APP_STORE\";\n    case \"tvos\":\n      if (isDev) return \"TVOS_APP_DEVELOPMENT\";\n      if (isAdhoc) return \"TVOS_APP_ADHOC\";\n      if (isInHouse) return \"TVOS_APP_INHOUSE\";\n      return \"TVOS_APP_STORE\";\n    case \"catalyst\":\n      if (isDev) return \"MAC_CATALYST_APP_DEVELOPMENT\";\n      if (isInHouse) return \"MAC_CATALYST_APP_INHOUSE\";\n      return \"MAC_CATALYST_APP_STORE\";\n    default:\n      if (isDev) return \"IOS_APP_DEVELOPMENT\";\n      if (isAdhoc) return \"IOS_APP_ADHOC\";\n      if (isInHouse) return \"IOS_APP_INHOUSE\";\n      return \"IOS_APP_STORE\";\n  }\n}\n\nfunction certificateTypesForProfile(\n  profileType: ProfileType\n): CertificateType[] {\n  switch (profileType) {\n    case \"IOS_APP_DEVELOPMENT\":\n    case \"TVOS_APP_DEVELOPMENT\":\n    case \"MAC_CATALYST_APP_DEVELOPMENT\":\n      return [\"IOS_DEVELOPMENT\"];\n    case \"MAC_APP_DEVELOPMENT\":\n      return [\"MAC_APP_DEVELOPMENT\"];\n    case \"IOS_APP_STORE\":\n    case \"IOS_APP_ADHOC\":\n    case \"TVOS_APP_STORE\":\n    case \"TVOS_APP_ADHOC\":\n    case \"MAC_CATALYST_APP_STORE\":\n      return [\"IOS_DISTRIBUTION\"];\n    case \"IOS_APP_INHOUSE\":\n    case \"TVOS_APP_INHOUSE\":\n    case \"MAC_CATALYST_APP_INHOUSE\":\n      return [\"IOS_DISTRIBUTION\"];\n    case \"MAC_APP_STORE\":\n    case \"MAC_APP_INHOUSE\":\n      return [\"MAC_APP_DISTRIBUTION\"];\n    case \"MAC_APP_DIRECT\":\n      return [\"DEVELOPER_ID_APPLICATION\"];\n    default:\n      return [\"IOS_DISTRIBUTION\"];\n  }\n}\n\nfunction needsDevices(profileType: ProfileType): boolean {\n  return (\n    profileType.includes(\"DEVELOPMENT\") || profileType.includes(\"ADHOC\")\n  );\n}\n\nfunction profileExtension(profileType: ProfileType): string {\n  return profileType.startsWith(\"MAC_\") && !profileType.includes(\"CATALYST\")\n    ? \".provisionprofile\"\n    : \".mobileprovision\";\n}\n\nexport async function findMatchingProfile(\n  options: Omit<SighOptions, \"force\">\n): Promise<Profile | null> {\n  const profileType = resolveProfileType(options as SighOptions);\n  const profiles = await options.client.profiles.list({\n    filter: { profileType },\n    include: \"bundleId\",\n    limit: 200,\n  });\n\n  const now = new Date();\n  for (const profile of profiles) {\n    // Check bundle ID match\n    const bundleIdRel = profile.relationships?.bundleId?.data;\n    if (bundleIdRel) {\n      const bundleId = await options.client.bundleIds.get(bundleIdRel.id);\n      if (bundleId.attributes.identifier !== options.bundleIdentifier) continue;\n    }\n\n    // Check state and expiration\n    if (profile.attributes.profileState !== \"ACTIVE\") continue;\n    if (new Date(profile.attributes.expirationDate) <= now) continue;\n\n    // Check name if specified\n    if (\n      options.profileName &&\n      profile.attributes.name !== options.profileName\n    ) {\n      continue;\n    }\n\n    return profile;\n  }\n\n  return null;\n}\n\nexport async function createProfile(\n  options: SighOptions\n): Promise<SighResult> {\n  const profileType = resolveProfileType(options);\n\n  // If force, delete existing first\n  if (options.force) {\n    const existing = await findMatchingProfile(options);\n    if (existing) {\n      await options.client.profiles.delete(existing.id);\n    }\n  } else {\n    // Check for existing\n    const existing = await findMatchingProfile(options);\n    if (existing) {\n      return downloadAndReturn(options, existing);\n    }\n  }\n\n  // Find or verify bundle ID\n  let bundleId = await options.client.bundleIds.find(options.bundleIdentifier);\n  if (!bundleId) {\n    throw new Error(\n      `Bundle ID '${options.bundleIdentifier}' not found. Register it first with produce.registerBundleId().`\n    );\n  }\n\n  // Get certificates\n  const certTypes = certificateTypesForProfile(profileType);\n  let certificateIds = options.certificateIds;\n  if (!certificateIds || certificateIds.length === 0) {\n    const certs = await options.client.certificates.list({\n      filter: { certificateType: certTypes },\n    });\n    const now = new Date();\n    const validCerts = certs.filter(\n      (c) => new Date(c.attributes.expirationDate) > now\n    );\n    if (validCerts.length === 0) {\n      throw new Error(\n        `No valid certificates found of type ${certTypes.join(\", \")}. Create one first with cert.createCertificate().`\n      );\n    }\n    certificateIds = options.includeAllCertificates\n      ? validCerts.map((c) => c.id)\n      : [validCerts[0].id];\n  }\n\n  // Get devices if needed\n  let deviceIds = options.deviceIds;\n  if (needsDevices(profileType) && (!deviceIds || deviceIds.length === 0)) {\n    const platform: Platform =\n      options.platform === \"macos\"\n        ? \"MAC_OS\"\n        : options.platform === \"tvos\"\n          ? \"TVOS\"\n          : \"IOS\";\n    const devices = await options.client.devices.list({\n      filter: { platform, status: \"ENABLED\" },\n    });\n    deviceIds = devices.map((d) => d.id);\n  }\n\n  // Generate profile name\n  const profileName =\n    options.profileName ??\n    `${profileType} ${options.bundleIdentifier} ${Date.now()}`;\n\n  // Create profile\n  const profile = await options.client.profiles.create({\n    name: profileName,\n    profileType,\n    bundleIdId: bundleId.id,\n    certificateIds,\n    deviceIds,\n  });\n\n  return downloadAndReturn(options, profile);\n}\n\nasync function downloadAndReturn(\n  options: SighOptions,\n  profile: Profile\n): Promise<SighResult> {\n  const content = Buffer.from(profile.attributes.profileContent, \"base64\");\n  const profileType = resolveProfileType(options);\n  const ext = profileExtension(profileType);\n\n  const result: SighResult = {\n    profile,\n    profileContent: content,\n    uuid: profile.attributes.uuid,\n    name: profile.attributes.name,\n  };\n\n  if (options.outputDir) {\n    await mkdir(options.outputDir, { recursive: true });\n    const filename = `${profileType}_${options.bundleIdentifier}${ext}`;\n    const filePath = join(options.outputDir, filename);\n    await writeFile(filePath, content);\n    result.filePath = filePath;\n  }\n\n  // Install on macOS\n  if (!options.skipInstall && process.platform === \"darwin\") {\n    await installProfile(content, profile.attributes.uuid);\n  }\n\n  return result;\n}\n\nexport async function downloadProfile(\n  client: AppStoreConnectClient,\n  id: string\n): Promise<Buffer> {\n  const profile = await client.profiles.get(id);\n  return Buffer.from(profile.attributes.profileContent, \"base64\");\n}\n\n/**\n * Install a provisioning profile to both the legacy MobileDevice directory\n * (Xcode ≤ 15) and the new Xcode 16+ location. Xcode 16 moved the default\n * profiles directory to `~/Library/Developer/Xcode/UserData/Provisioning\n * Profiles/`; writing to both keeps old and new Xcodes happy without needing\n * to detect the installed Xcode version.\n *\n * Returns the legacy path as the primary install location.\n */\nexport async function installProfile(\n  profileContent: Buffer,\n  uuid: string\n): Promise<string> {\n  const legacyDir = join(\n    homedir(),\n    \"Library\",\n    \"MobileDevice\",\n    \"Provisioning Profiles\"\n  );\n  const xcode16Dir = join(\n    homedir(),\n    \"Library\",\n    \"Developer\",\n    \"Xcode\",\n    \"UserData\",\n    \"Provisioning Profiles\"\n  );\n  const filename = `${uuid}.mobileprovision`;\n\n  await mkdir(legacyDir, { recursive: true });\n  const legacyPath = join(legacyDir, filename);\n  await writeFile(legacyPath, profileContent);\n\n  // Also install into the Xcode 16+ location. Non-fatal if it fails\n  // (e.g. sandboxed environments).\n  try {\n    await mkdir(xcode16Dir, { recursive: true });\n    await writeFile(join(xcode16Dir, filename), profileContent);\n  } catch {\n    // Ignore — legacy path install is the authoritative one.\n  }\n\n  return legacyPath;\n}\n","import { execFileSync } from \"node:child_process\";\nimport { mkdtempSync, rmSync, writeFileSync, chmodSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class GitStorage implements StorageBackend {\n  workingDirectory: string;\n  private gitUrl: string;\n  private branch: string;\n  private privateKeyPath?: string;\n  private privateKeyContent?: string;\n  private basicAuth?: { user: string; pass: string };\n  private bearerToken?: string;\n  private userName?: string;\n  private userEmail?: string;\n  private shallowClone: boolean;\n  /** Temp path written from `gitPrivateKeyContent`. Cleaned up on `cleanup`. */\n  private tempKeyPath?: string;\n\n  constructor(params: StorageParams) {\n    this.gitUrl = params.gitUrl ?? \"\";\n    this.branch = params.gitBranch ?? \"master\";\n    this.privateKeyPath = params.gitPrivateKey;\n    this.privateKeyContent = params.gitPrivateKeyContent;\n    this.basicAuth = params.gitBasicAuth;\n    this.bearerToken = params.gitBearerToken;\n    this.userName = params.gitUserName;\n    this.userEmail = params.gitUserEmail;\n    this.shallowClone = params.shallowClone ?? true;\n    this.workingDirectory = \"\";\n  }\n\n  async download(): Promise<string> {\n    this.workingDirectory = mkdtempSync(join(tmpdir(), \"fastnode-match-\"));\n\n    // Materialise inline private key content to a temp file with 0600 perms.\n    if (this.privateKeyContent && !this.privateKeyPath) {\n      this.tempKeyPath = join(\n        mkdtempSync(join(tmpdir(), \"fastnode-match-key-\")),\n        \"id_rsa\"\n      );\n      writeFileSync(this.tempKeyPath, this.privateKeyContent);\n      chmodSync(this.tempKeyPath, 0o600);\n    }\n\n    const env = this.buildEnv();\n    const extraArgs = this.buildHttpAuthArgs();\n    const cloneBase = [\"-c\", \"http.extraheader=\", ...extraArgs]; // placeholder removed below\n    // Rebuild cleanly: only include extraArgs (each is a pair of -c flag)\n    const configArgs = extraArgs.flatMap((entry) => [\"-c\", entry]);\n\n    const baseArgs = this.shallowClone ? [\"--depth\", \"1\"] : [];\n    const branchArgs = [\"-b\", this.branch, \"--single-branch\"];\n\n    try {\n      execFileSync(\n        \"git\",\n        [\n          ...configArgs,\n          \"clone\",\n          ...baseArgs,\n          ...branchArgs,\n          this.gitUrl,\n          this.workingDirectory,\n        ],\n        { env, stdio: \"pipe\" }\n      );\n    } catch {\n      // Branch may not exist — clone without branch and create it\n      execFileSync(\n        \"git\",\n        [\n          ...configArgs,\n          \"clone\",\n          ...baseArgs,\n          this.gitUrl,\n          this.workingDirectory,\n        ],\n        { env, stdio: \"pipe\" }\n      );\n      try {\n        execFileSync(\"git\", [\"checkout\", this.branch], {\n          cwd: this.workingDirectory,\n          env,\n          stdio: \"pipe\",\n        });\n      } catch {\n        execFileSync(\"git\", [\"checkout\", \"--orphan\", this.branch], {\n          cwd: this.workingDirectory,\n          env,\n          stdio: \"pipe\",\n        });\n      }\n    }\n\n    // Set commit author locally when provided (don't touch global config).\n    if (this.userName) {\n      execFileSync(\"git\", [\"config\", \"user.name\", this.userName], {\n        cwd: this.workingDirectory,\n        env,\n        stdio: \"pipe\",\n      });\n    }\n    if (this.userEmail) {\n      execFileSync(\"git\", [\"config\", \"user.email\", this.userEmail], {\n        cwd: this.workingDirectory,\n        env,\n        stdio: \"pipe\",\n      });\n    }\n\n    return this.workingDirectory;\n  }\n\n  async saveChanges(files: string[], message: string): Promise<void> {\n    const env = this.buildEnv();\n    const extraArgs = this.buildHttpAuthArgs();\n    const configArgs = extraArgs.flatMap((entry) => [\"-c\", entry]);\n    const opts = {\n      cwd: this.workingDirectory,\n      env,\n      stdio: \"pipe\" as const,\n    };\n\n    for (const file of files) {\n      execFileSync(\"git\", [\"add\", file], opts);\n    }\n\n    try {\n      execFileSync(\"git\", [\"commit\", \"-m\", message], opts);\n      execFileSync(\n        \"git\",\n        [...configArgs, \"push\", \"origin\", this.branch],\n        opts\n      );\n    } catch {\n      // Nothing to commit or push failed\n    }\n  }\n\n  async cleanup(): Promise<void> {\n    if (this.workingDirectory) {\n      rmSync(this.workingDirectory, { recursive: true, force: true });\n    }\n    if (this.tempKeyPath) {\n      rmSync(this.tempKeyPath, { force: true });\n      rmSync(join(this.tempKeyPath, \"..\"), { recursive: true, force: true });\n    }\n  }\n\n  private buildHttpAuthArgs(): string[] {\n    // Returns an array of `http.extraheader=...` values (for use with -c).\n    // Mirrors Fastlane's match `GitStorage#setup_auth` which uses\n    // `http.extraheader` to inject Basic/Bearer credentials.\n    const args: string[] = [];\n    if (this.basicAuth) {\n      const encoded = Buffer.from(\n        `${this.basicAuth.user}:${this.basicAuth.pass}`\n      ).toString(\"base64\");\n      args.push(`http.extraheader=Authorization: Basic ${encoded}`);\n    } else if (this.bearerToken) {\n      args.push(`http.extraheader=Authorization: Bearer ${this.bearerToken}`);\n    }\n    return args;\n  }\n\n  private buildEnv(): NodeJS.ProcessEnv {\n    const env: NodeJS.ProcessEnv = {\n      ...process.env,\n      GIT_TERMINAL_PROMPT: \"0\",\n    };\n    const keyPath = this.privateKeyPath ?? this.tempKeyPath;\n    if (keyPath) {\n      env.GIT_SSH_COMMAND = `ssh -i ${keyPath} -o StrictHostKeyChecking=no -o IdentitiesOnly=yes`;\n    }\n    return env;\n  }\n}\n","import { execFileSync } from \"node:child_process\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class S3Storage implements StorageBackend {\n  workingDirectory: string;\n  private bucket: string;\n  private region: string;\n  private prefix: string;\n\n  constructor(params: StorageParams) {\n    this.bucket = params.s3Bucket ?? \"\";\n    this.region = params.s3Region ?? \"us-east-1\";\n    this.prefix = params.s3ObjectPrefix ?? \"\";\n    this.workingDirectory = \"\";\n  }\n\n  async download(): Promise<string> {\n    this.workingDirectory = mkdtempSync(join(tmpdir(), \"fastnode-match-s3-\"));\n    const s3Path = this.prefix ? `s3://${this.bucket}/${this.prefix}` : `s3://${this.bucket}`;\n\n    execFileSync(\"aws\", [\"s3\", \"sync\", s3Path, this.workingDirectory, \"--region\", this.region], { stdio: \"pipe\" });\n\n    return this.workingDirectory;\n  }\n\n  async saveChanges(files: string[], _message: string): Promise<void> {\n    const s3Path = this.prefix ? `s3://${this.bucket}/${this.prefix}` : `s3://${this.bucket}`;\n\n    for (const file of files) {\n      const relativePath = file.replace(this.workingDirectory + \"/\", \"\");\n      execFileSync(\n        \"aws\",\n        [\"s3\", \"cp\", file, `${s3Path}/${relativePath}`, \"--region\", this.region],\n        { stdio: \"pipe\" }\n      );\n    }\n  }\n\n  async cleanup(): Promise<void> {\n    if (this.workingDirectory) {\n      rmSync(this.workingDirectory, { recursive: true, force: true });\n    }\n  }\n}\n","import { mkdirSync } from \"node:fs\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class LocalStorage implements StorageBackend {\n  workingDirectory: string;\n\n  constructor(params: StorageParams) {\n    this.workingDirectory = params.localPath ?? \"\";\n  }\n\n  async download(): Promise<string> {\n    mkdirSync(this.workingDirectory, { recursive: true });\n    return this.workingDirectory;\n  }\n\n  async saveChanges(_files: string[], _message: string): Promise<void> {\n    // Files are already on disk — nothing to push\n  }\n\n  async cleanup(): Promise<void> {\n    // Don't delete local storage\n  }\n}\n","export interface StorageBackend {\n  workingDirectory: string;\n  download(): Promise<string>;\n  saveChanges(files: string[], message: string): Promise<void>;\n  cleanup(): Promise<void>;\n}\n\nexport type StorageMode = \"git\" | \"s3\" | \"local\";\n\nexport interface StorageParams {\n  mode: StorageMode;\n  gitUrl?: string;\n  gitBranch?: string;\n  /** Path to an SSH private key file. */\n  gitPrivateKey?: string;\n  /**\n   * Raw SSH private key content (alternative to `gitPrivateKey`). Written\n   * to a temp file with `0600` perms before `git clone`.\n   */\n  gitPrivateKeyContent?: string;\n  /** HTTP Basic auth credentials. */\n  gitBasicAuth?: { user: string; pass: string };\n  /** HTTP Bearer token for authorization. */\n  gitBearerToken?: string;\n  /** Override the commit author name. */\n  gitUserName?: string;\n  /** Override the commit author email. */\n  gitUserEmail?: string;\n  /** Disable the default `--depth 1` shallow clone. */\n  shallowClone?: boolean;\n  s3Bucket?: string;\n  s3Region?: string;\n  s3ObjectPrefix?: string;\n  localPath?: string;\n  teamId?: string;\n}\n\nexport async function createStorage(params: StorageParams): Promise<StorageBackend> {\n  switch (params.mode) {\n    case \"git\": {\n      const { GitStorage } = await import(\"./git.js\");\n      return new GitStorage(params);\n    }\n    case \"s3\": {\n      const { S3Storage } = await import(\"./s3.js\");\n      return new S3Storage(params);\n    }\n    case \"local\": {\n      const { LocalStorage } = await import(\"./local.js\");\n      return new LocalStorage(params);\n    }\n    default:\n      throw new Error(`Unknown storage mode: ${params.mode}`);\n  }\n}\n","import { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes, createHash } from \"node:crypto\";\nimport { readFile, writeFile, readdir, stat } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\n\nconst V2_PREFIX = \"match_encrypted_v2__\";\nconst V1_PREFIX = \"Salted__\";\nconst PBKDF2_ITERATIONS = 10_000;\nconst PBKDF2_HASH = \"sha256\";\nconst PBKDF2_KEY_LEN = 32 + 12 + 24; // key(32) + iv(12) + authData(24) = 68\n\nconst ENCRYPTABLE_EXTENSIONS = [\".cer\", \".p12\", \".mobileprovision\", \".provisionprofile\", \".pkey\", \".pem\"];\n\n// ── V2: AES-256-GCM with PBKDF2 ───────────────────────────────────────────\n\nexport function encryptV2(data: Buffer, password: string): Buffer {\n  const salt = randomBytes(8);\n  const derived = pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, PBKDF2_KEY_LEN, PBKDF2_HASH);\n  const key = derived.subarray(0, 32);\n  const iv = derived.subarray(32, 44);\n  const authData = derived.subarray(44, 68);\n\n  const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n  cipher.setAAD(authData);\n  const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);\n  const authTag = cipher.getAuthTag(); // 16 bytes\n\n  // Format: prefix + salt(8) + authTag(16) + ciphertext\n  const prefix = Buffer.from(V2_PREFIX, \"utf-8\");\n  const result = Buffer.concat([prefix, salt, authTag, encrypted]);\n  return Buffer.from(result.toString(\"base64\"));\n}\n\nexport function decryptV2(data: Buffer, password: string): Buffer {\n  const raw = Buffer.from(data.toString(\"utf-8\"), \"base64\");\n  const prefixLen = Buffer.from(V2_PREFIX, \"utf-8\").length;\n\n  const salt = raw.subarray(prefixLen, prefixLen + 8);\n  const authTag = raw.subarray(prefixLen + 8, prefixLen + 24);\n  const ciphertext = raw.subarray(prefixLen + 24);\n\n  const derived = pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, PBKDF2_KEY_LEN, PBKDF2_HASH);\n  const key = derived.subarray(0, 32);\n  const iv = derived.subarray(32, 44);\n  const authData = derived.subarray(44, 68);\n\n  const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n  decipher.setAAD(authData);\n  decipher.setAuthTag(authTag);\n  return Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n}\n\n// ── V1: AES-256-CBC (legacy, decrypt only) ─────────────────────────────────\n\nfunction evpBytesToKey(\n  password: string,\n  salt: Buffer,\n  keyLen: number,\n  ivLen: number,\n  hashAlg: string\n): { key: Buffer; iv: Buffer } {\n  const target = keyLen + ivLen;\n  const result: Buffer[] = [];\n  let total = 0;\n  let prev = Buffer.alloc(0);\n\n  while (total < target) {\n    const input = Buffer.concat([prev, Buffer.from(password, \"utf-8\"), salt]);\n    prev = createHash(hashAlg).update(input).digest();\n    result.push(prev);\n    total += prev.length;\n  }\n\n  const derived = Buffer.concat(result);\n  return {\n    key: derived.subarray(0, keyLen),\n    iv: derived.subarray(keyLen, keyLen + ivLen),\n  };\n}\n\nexport function decryptV1(data: Buffer, password: string): Buffer {\n  const raw = Buffer.from(data.toString(\"utf-8\"), \"base64\");\n  const saltHeader = raw.subarray(0, 8).toString(\"utf-8\");\n\n  if (saltHeader !== V1_PREFIX) {\n    throw new Error(\"Invalid V1 encrypted data: missing Salted__ header\");\n  }\n\n  const salt = raw.subarray(8, 16);\n  const ciphertext = raw.subarray(16);\n\n  // Try MD5 first (original OpenSSL default), then SHA256\n  for (const hashAlg of [\"md5\", \"sha256\"]) {\n    try {\n      const { key, iv } = evpBytesToKey(password, salt, 32, 16, hashAlg);\n      const decipher = createDecipheriv(\"aes-256-cbc\", key, iv);\n      return Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n    } catch {\n      continue;\n    }\n  }\n\n  throw new Error(\"Failed to decrypt V1 data with both MD5 and SHA256\");\n}\n\n// ── Auto-detect and decrypt ────────────────────────────────────────────────\n\nexport function decrypt(data: Buffer, password: string): Buffer {\n  const str = data.toString(\"utf-8\");\n  const decoded = Buffer.from(str, \"base64\").toString(\"utf-8\");\n\n  if (decoded.startsWith(V2_PREFIX)) {\n    return decryptV2(data, password);\n  }\n  if (decoded.startsWith(V1_PREFIX)) {\n    return decryptV1(data, password);\n  }\n  // Try V2 first, then V1\n  try {\n    return decryptV2(data, password);\n  } catch {\n    return decryptV1(data, password);\n  }\n}\n\nexport function encrypt(data: Buffer, password: string): Buffer {\n  return encryptV2(data, password);\n}\n\n// ── File-level operations ──────────────────────────────────────────────────\n\nfunction isEncryptable(filePath: string): boolean {\n  return ENCRYPTABLE_EXTENSIONS.includes(extname(filePath).toLowerCase());\n}\n\nexport async function decryptFiles(dir: string, password: string): Promise<void> {\n  const entries = await readdir(dir, { withFileTypes: true });\n  for (const entry of entries) {\n    const fullPath = join(dir, entry.name);\n    if (entry.isDirectory()) {\n      await decryptFiles(fullPath, password);\n    } else if (isEncryptable(fullPath)) {\n      const data = await readFile(fullPath);\n      try {\n        const decrypted = decrypt(data, password);\n        await writeFile(fullPath, decrypted);\n      } catch {\n        // File may not be encrypted, skip\n      }\n    }\n  }\n}\n\nexport async function encryptFiles(dir: string, password: string): Promise<void> {\n  const entries = await readdir(dir, { withFileTypes: true });\n  for (const entry of entries) {\n    const fullPath = join(dir, entry.name);\n    if (entry.isDirectory()) {\n      await encryptFiles(fullPath, password);\n    } else if (isEncryptable(fullPath)) {\n      const data = await readFile(fullPath);\n      const encrypted = encrypt(data, password);\n      await writeFile(fullPath, encrypted);\n    }\n  }\n}\n","import { join, extname } from \"node:path\";\nimport { readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { CertificateType, ProfileType } from \"../types/index.js\";\nimport type { CertResult } from \"../cert/cert.js\";\nimport type { SighResult } from \"../sigh/index.js\";\nimport { createStorage, type StorageMode } from \"./storage/index.js\";\nimport { decryptFiles, encryptFiles } from \"./encryption.js\";\nexport { encrypt, decrypt, encryptV2, decryptV2, decryptV1, encryptFiles, decryptFiles } from \"./encryption.js\";\n\nexport interface MatchOptions {\n  client: AppStoreConnectClient;\n  type: \"development\" | \"appstore\" | \"adhoc\" | \"enterprise\";\n  appIdentifiers: string[];\n  storageMode: StorageMode;\n  gitUrl?: string;\n  gitBranch?: string;\n  /** Path to an SSH private key file. */\n  gitPrivateKey?: string;\n  /** Raw SSH private key content (alternative to `gitPrivateKey`). */\n  gitPrivateKeyContent?: string;\n  /** HTTP Basic auth credentials for the git remote. */\n  gitBasicAuth?: { user: string; pass: string };\n  /** HTTP Bearer token for the git remote. */\n  gitBearerToken?: string;\n  /** Override the commit author name. */\n  gitUserName?: string;\n  /** Override the commit author email. */\n  gitUserEmail?: string;\n  /** Disable the default `--depth 1` shallow clone. */\n  shallowClone?: boolean;\n  s3Bucket?: string;\n  s3Region?: string;\n  localPath?: string;\n  password?: string;\n  readonly?: boolean;\n  force?: boolean;\n  keychainName?: string;\n  keychainPassword?: string;\n  teamId?: string;\n  platform?: \"ios\" | \"macos\" | \"tvos\" | \"catalyst\";\n}\n\nexport interface MatchResult {\n  certificates: CertResult[];\n  profiles: SighResult[];\n}\n\nfunction profileTypeForMatch(\n  type: MatchOptions[\"type\"],\n  platform: MatchOptions[\"platform\"]\n): ProfileType {\n  const p = platform ?? \"ios\";\n  switch (type) {\n    case \"development\":\n      if (p === \"macos\") return \"MAC_APP_DEVELOPMENT\";\n      if (p === \"tvos\") return \"TVOS_APP_DEVELOPMENT\";\n      if (p === \"catalyst\") return \"MAC_CATALYST_APP_DEVELOPMENT\";\n      return \"IOS_APP_DEVELOPMENT\";\n    case \"adhoc\":\n      if (p === \"tvos\") return \"TVOS_APP_ADHOC\";\n      return \"IOS_APP_ADHOC\";\n    case \"enterprise\":\n      if (p === \"macos\") return \"MAC_APP_INHOUSE\";\n      if (p === \"tvos\") return \"TVOS_APP_INHOUSE\";\n      if (p === \"catalyst\") return \"MAC_CATALYST_APP_INHOUSE\";\n      return \"IOS_APP_INHOUSE\";\n    default:\n      if (p === \"macos\") return \"MAC_APP_STORE\";\n      if (p === \"tvos\") return \"TVOS_APP_STORE\";\n      if (p === \"catalyst\") return \"MAC_CATALYST_APP_STORE\";\n      return \"IOS_APP_STORE\";\n  }\n}\n\nfunction certTypeForMatch(\n  type: MatchOptions[\"type\"],\n  platform: MatchOptions[\"platform\"]\n): CertificateType {\n  const p = platform ?? \"ios\";\n  if (type === \"development\") {\n    return p === \"macos\" ? \"MAC_APP_DEVELOPMENT\" : \"IOS_DEVELOPMENT\";\n  }\n  return p === \"macos\" ? \"MAC_APP_DISTRIBUTION\" : \"IOS_DISTRIBUTION\";\n}\n\nfunction certSubdir(type: MatchOptions[\"type\"]): string {\n  return type === \"development\" ? \"development\" : \"distribution\";\n}\n\nfunction profileSubdir(type: MatchOptions[\"type\"]): string {\n  switch (type) {\n    case \"development\": return \"development\";\n    case \"adhoc\": return \"adhoc\";\n    case \"enterprise\": return \"enterprise\";\n    default: return \"appstore\";\n  }\n}\n\nexport async function syncSigningAssets(\n  options: MatchOptions\n): Promise<MatchResult> {\n  const password = options.password ?? process.env.MATCH_PASSWORD ?? \"\";\n  if (!password) {\n    throw new Error(\"Match password is required. Set MATCH_PASSWORD or pass password option.\");\n  }\n\n  // Initialize storage\n  const storage = await createStorage({\n    mode: options.storageMode,\n    gitUrl: options.gitUrl,\n    gitBranch: options.gitBranch,\n    gitPrivateKey: options.gitPrivateKey,\n    gitPrivateKeyContent: options.gitPrivateKeyContent,\n    gitBasicAuth: options.gitBasicAuth,\n    gitBearerToken: options.gitBearerToken,\n    gitUserName: options.gitUserName,\n    gitUserEmail: options.gitUserEmail,\n    shallowClone: options.shallowClone,\n    s3Bucket: options.s3Bucket,\n    s3Region: options.s3Region,\n    localPath: options.localPath,\n    teamId: options.teamId,\n  });\n\n  const workDir = await storage.download();\n\n  // Decrypt files\n  await decryptFiles(workDir, password);\n\n  const certificates: CertResult[] = [];\n  const profiles: SighResult[] = [];\n  const filesToCommit: string[] = [];\n\n  const certDir = join(workDir, \"certs\", certSubdir(options.type));\n  const profileDir = join(workDir, \"profiles\", profileSubdir(options.type));\n\n  for (const appId of options.appIdentifiers) {\n    // Check for existing certificate\n    let certResult: CertResult | null = null;\n    const certFiles = existsSync(certDir) ? await findFilesWithExt(certDir, \".cer\") : [];\n\n    if (certFiles.length > 0 && !options.force) {\n      // Use existing cert from storage\n      const certContent = await readFile(certFiles[0]);\n      certResult = {\n        certificate: null as any, // Stored cert doesn't have full API object\n        privateKey: \"\",\n        certificateContent: certContent,\n        certPath: certFiles[0],\n      };\n    } else if (!options.readonly) {\n      // Generate new cert\n      const { createCertificate } = await import(\"../cert/cert.js\");\n      certResult = await createCertificate({\n        client: options.client,\n        type: certTypeForMatch(options.type, options.platform),\n        outputDir: certDir,\n        keychainPath: options.keychainName,\n        keychainPassword: options.keychainPassword,\n      });\n      if (certResult.certPath) filesToCommit.push(certResult.certPath);\n      if (certResult.p12Path) filesToCommit.push(certResult.p12Path);\n    }\n\n    if (certResult) certificates.push(certResult);\n\n    // Check for existing profile\n    const profileFiles = existsSync(profileDir) ? await findFilesWithExt(profileDir, \".mobileprovision\") : [];\n    const matchingProfile = profileFiles.find((f) => f.includes(appId));\n\n    if (matchingProfile && !options.force) {\n      const profileContent = await readFile(matchingProfile);\n      profiles.push({\n        profile: null as any,\n        profileContent,\n        uuid: \"\",\n        name: \"\",\n        filePath: matchingProfile,\n      });\n    } else if (!options.readonly) {\n      // Generate new profile\n      const { createProfile } = await import(\"../sigh/index.js\");\n      const profileType = profileTypeForMatch(options.type, options.platform);\n      const sighResult = await createProfile({\n        client: options.client,\n        bundleIdentifier: appId,\n        profileType,\n        outputDir: profileDir,\n        skipInstall: false,\n      });\n      if (sighResult.filePath) filesToCommit.push(sighResult.filePath);\n      profiles.push(sighResult);\n    }\n  }\n\n  // Encrypt and save changes\n  if (filesToCommit.length > 0 && !options.readonly) {\n    await encryptFiles(workDir, password);\n    // Mirror Fastlane's match commit message: `[fastlane-match] Updated\n    // {type} and profile for {appId}` — adapted for fastnode and multiple\n    // app identifiers.\n    const appList = options.appIdentifiers.join(\", \");\n    const message = `[fastlane-match] Updated ${options.type} and profile for ${appList}`;\n    await storage.saveChanges(filesToCommit, message);\n  }\n\n  await storage.cleanup();\n\n  return { certificates, profiles };\n}\n\nasync function findFilesWithExt(dir: string, ext: string): Promise<string[]> {\n  const entries = await readdir(dir, { withFileTypes: true });\n  const results: string[] = [];\n  for (const entry of entries) {\n    const fullPath = join(dir, entry.name);\n    if (!entry.isDirectory() && extname(entry.name) === ext) {\n      results.push(fullPath);\n    }\n  }\n  return results;\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { writeFile, mkdir, unlink } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { CertificateType } from \"../types/index.js\";\nimport { generateCSR } from \"../cert/csr.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport type PushCertKind =\n  | \"development\"\n  | \"production\"\n  | \"website\"\n  | \"voip\"\n  | \"passbook\";\n\nexport interface PemOptions {\n  client: AppStoreConnectClient;\n  bundleIdentifier: string;\n  development?: boolean;\n  websitePush?: boolean;\n  /** Voice-over-IP push cert (Portal type code `E5D663CMZW`). */\n  voipPush?: boolean;\n  /** Passbook/Wallet cert (Portal type code `Y3B2F3TYSI`). */\n  passbook?: boolean;\n  outputDir?: string;\n  p12Password?: string;\n  activeDaysLimit?: number;\n  force?: boolean;\n  platform?: \"ios\" | \"macos\";\n  generateP12?: boolean;\n  savePrivateKey?: boolean;\n}\n\nexport interface PemResult {\n  pemPath: string;\n  p12Path?: string;\n  keyPath?: string;\n  expiresAt: Date;\n}\n\n/**\n * Resolve the push certificate descriptor for the given options. Returns:\n * - `kind`: semantic certificate family (used in filename prefix)\n * - `portalTypeCode`: Apple Developer Portal type code (matches Fastlane's\n *   `Spaceship::Portal::Certificate` codes in certificate.rb)\n * - `ascCertificateType`: best-fit ASC `CertificateType` for the ASC API\n *   fallback path (note: push certs are really a Portal concept; the ASC\n *   cert types here only approximate the platform distinction).\n */\nexport function getPushCertificateType(options: {\n  development?: boolean;\n  websitePush?: boolean;\n  voipPush?: boolean;\n  passbook?: boolean;\n  platform?: \"ios\" | \"macos\";\n}): {\n  kind: PushCertKind;\n  portalTypeCode: string;\n  ascCertificateType: CertificateType;\n} {\n  if (options.passbook) {\n    return {\n      kind: \"passbook\",\n      portalTypeCode: \"Y3B2F3TYSI\",\n      ascCertificateType: \"IOS_DISTRIBUTION\",\n    };\n  }\n  if (options.voipPush) {\n    return {\n      kind: \"voip\",\n      portalTypeCode: \"E5D663CMZW\",\n      ascCertificateType: \"IOS_DISTRIBUTION\",\n    };\n  }\n  if (options.websitePush) {\n    return {\n      kind: \"website\",\n      portalTypeCode: \"3T2ZP62QW8\",\n      ascCertificateType: \"IOS_DISTRIBUTION\",\n    };\n  }\n  const platform = options.platform ?? \"ios\";\n  if (platform === \"macos\") {\n    return options.development\n      ? {\n          kind: \"development\",\n          portalTypeCode: \"HQ4KP3I34R\", // MacDevelopmentPush\n          ascCertificateType: \"MAC_APP_DEVELOPMENT\",\n        }\n      : {\n          kind: \"production\",\n          portalTypeCode: \"CDZ7EMXIZ1\", // MacProductionPush\n          ascCertificateType: \"MAC_APP_DISTRIBUTION\",\n        };\n  }\n  return options.development\n    ? {\n        kind: \"development\",\n        portalTypeCode: \"JKG5JZ54H7\", // DevelopmentPush\n        ascCertificateType: \"IOS_DEVELOPMENT\",\n      }\n    : {\n        kind: \"production\",\n        portalTypeCode: \"UPV3DW712I\", // ProductionPush\n        ascCertificateType: \"IOS_DISTRIBUTION\",\n      };\n}\n\nexport async function createPushCertificate(\n  options: PemOptions\n): Promise<PemResult> {\n  const outputDir = options.outputDir ?? process.cwd();\n  await mkdir(outputDir, { recursive: true });\n\n  const descriptor = getPushCertificateType(options);\n  const platform = options.platform ?? \"ios\";\n  const activeDaysLimit = options.activeDaysLimit ?? 30;\n  const generateP12 = options.generateP12 !== false;\n  const savePrivateKey = options.savePrivateKey !== false;\n  // Mirror Fastlane pem's filename convention (manager.rb line 68):\n  // `{type}_{app_identifier}_{platform}`.\n  const filenameBase = `${descriptor.kind}_${options.bundleIdentifier}_${platform}`;\n\n  // Check for existing valid push certs\n  if (!options.force) {\n    const existing = await options.client.certificates.list({\n      filter: { certificateType: descriptor.ascCertificateType },\n    });\n\n    const now = new Date();\n    const validCert = existing.find((c) => {\n      const expires = new Date(c.attributes.expirationDate);\n      const daysLeft = (expires.getTime() - now.getTime()) / (1000 * 60 * 60 * 24);\n      return daysLeft > activeDaysLimit && c.attributes.displayName?.includes(options.bundleIdentifier);\n    });\n\n    if (validCert) {\n      // Cert exists and is still valid — but we can't re-download the private key\n      // Just return info about the existing cert\n      return {\n        pemPath: join(outputDir, `${filenameBase}.pem`),\n        expiresAt: new Date(validCert.attributes.expirationDate),\n      };\n    }\n  }\n\n  // Generate new CSR and create cert\n  const { csr, privateKey } = await generateCSR();\n\n  const cert = await options.client.certificates.create({\n    certificateType: descriptor.ascCertificateType,\n    csrContent: csr,\n  });\n\n  const certDer = Buffer.from(cert.attributes.certificateContent, \"base64\");\n\n  // Convert DER cert to PEM\n  const certPem =\n    \"-----BEGIN CERTIFICATE-----\\n\" +\n    certDer.toString(\"base64\").match(/.{1,64}/g)!.join(\"\\n\") +\n    \"\\n-----END CERTIFICATE-----\";\n\n  // Write combined PEM (cert + key)\n  const pemPath = join(outputDir, `${filenameBase}.pem`);\n  await writeFile(pemPath, certPem + \"\\n\" + privateKey);\n\n  const result: PemResult = {\n    pemPath,\n    expiresAt: new Date(cert.attributes.expirationDate),\n  };\n\n  // Save private key\n  if (savePrivateKey) {\n    const keyPath = join(outputDir, `${filenameBase}.pkey`);\n    await writeFile(keyPath, privateKey);\n    result.keyPath = keyPath;\n  }\n\n  // Generate PKCS#12\n  if (generateP12) {\n    const p12Path = join(outputDir, `${filenameBase}.p12`);\n    const p12Password = options.p12Password ?? \"\";\n    try {\n      const { execSync } = await import(\"node:child_process\");\n      // Write private key to temp file\n      const keyTmpPath = join(outputDir, `${filenameBase}.tmp.key`);\n      await writeFile(keyTmpPath, privateKey);\n      execSync(\n        `openssl pkcs12 -export -inkey \"${keyTmpPath}\" -in \"${pemPath}\" -out \"${p12Path}\" -passout \"pass:${p12Password}\"`,\n        { stdio: \"pipe\" }\n      );\n      await unlink(keyTmpPath).catch(() => {});\n      result.p12Path = p12Path;\n    } catch {\n      // openssl may not be available — p12 generation is optional\n    }\n  }\n\n  return result;\n}\n\nexport async function renewPushCertificate(\n  options: PemOptions\n): Promise<PemResult> {\n  return createPushCertificate({ ...options, force: true });\n}\n\nexport async function checkExpiration(options: {\n  client: AppStoreConnectClient;\n  bundleIdentifier: string;\n  development?: boolean;\n  activeDaysLimit?: number;\n}): Promise<{ valid: boolean; daysLeft: number; expiresAt: Date | null }> {\n  const certType: CertificateType = options.development ? \"IOS_DEVELOPMENT\" : \"IOS_DISTRIBUTION\";\n  const certs = await options.client.certificates.list({\n    filter: { certificateType: certType },\n  });\n\n  const now = new Date();\n  const limit = options.activeDaysLimit ?? 30;\n\n  for (const cert of certs) {\n    if (cert.attributes.displayName?.includes(options.bundleIdentifier)) {\n      const expires = new Date(cert.attributes.expirationDate);\n      const daysLeft = (expires.getTime() - now.getTime()) / (1000 * 60 * 60 * 24);\n      return { valid: daysLeft > limit, daysLeft: Math.floor(daysLeft), expiresAt: expires };\n    }\n  }\n\n  return { valid: false, daysLeft: 0, expiresAt: null };\n}\n","import { registerAction } from \"../index.js\";\nimport type { AppStoreConnectClient } from \"../../client/index.js\";\nimport type { CertificateType, ProfileType } from \"../../types/index.js\";\n\nregisterAction({\n  name: \"cert\",\n  aliases: [\"get_certificates\", \"create_certificate\"],\n  description: \"Create or fetch code signing certificates\",\n  async run(params, ctx) {\n    const { createCertificate } = await import(\"../../cert/cert.js\");\n    const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n    if (!client) throw new Error(\"cert: client is required (pass as param or set in context)\");\n    const result = await createCertificate({\n      client,\n      type: params.type as CertificateType | undefined,\n      development: params.development as boolean | undefined,\n      force: params.force as boolean | undefined,\n      outputDir: params.output_path as string | undefined,\n      keychainPath: params.keychain_path as string | undefined,\n      keychainPassword: params.keychain_password as string | undefined,\n      platform: params.platform as \"ios\" | \"macos\" | undefined,\n    });\n    ctx.set(\"CER_CERTIFICATE_ID\", result.certificate.id);\n    ctx.set(\"CER_FILE_PATH\", result.certPath);\n    return result;\n  },\n});\n\nregisterAction({\n  name: \"sigh\",\n  aliases: [\"get_provisioning_profile\", \"get_profiles\"],\n  description: \"Create or fetch provisioning profiles\",\n  async run(params, ctx) {\n    const { createProfile } = await import(\"../../sigh/index.js\");\n    const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n    if (!client) throw new Error(\"sigh: client is required\");\n    const result = await createProfile({\n      client,\n      bundleIdentifier: (params.app_identifier ?? params.bundle_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n      profileType: params.profile_type as ProfileType | undefined,\n      profileName: params.provisioning_name as string | undefined,\n      force: params.force as boolean | undefined,\n      outputDir: params.output_path as string | undefined,\n      platform: params.platform as any,\n      development: params.development as boolean | undefined,\n      adhoc: params.adhoc as boolean | undefined,\n    });\n    ctx.set(\"SIGH_PROFILE_PATH\", result.filePath);\n    ctx.set(\"SIGH_PROFILE_TYPE\", result.profile.attributes.profileType);\n    ctx.set(\"SIGH_UUID\", result.uuid);\n    ctx.set(\"SIGH_NAME\", result.name);\n    return result;\n  },\n});\n\nregisterAction({\n  name: \"match\",\n  aliases: [\"sync_code_signing\"],\n  description: \"Sync certificates and profiles using match\",\n  async run(params, ctx) {\n    const { syncSigningAssets } = await import(\"../../match/index.js\");\n    const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n    if (!client) throw new Error(\"match: client is required\");\n    return syncSigningAssets({\n      client,\n      type: (params.type ?? \"appstore\") as any,\n      appIdentifiers: (params.app_identifier ? [params.app_identifier] : params.app_identifiers ?? []) as string[],\n      storageMode: (params.storage_mode ?? \"git\") as any,\n      gitUrl: params.git_url as string | undefined,\n      gitBranch: params.git_branch as string | undefined,\n      password: params.password as string | undefined,\n      readonly: params.readonly as boolean | undefined,\n      force: params.force as boolean | undefined,\n      platform: params.platform as any,\n    });\n  },\n});\n\nregisterAction({\n  name: \"pem\",\n  aliases: [\"get_push_certificate\"],\n  description: \"Create push notification certificates\",\n  async run(params, ctx) {\n    const { createPushCertificate } = await import(\"../../pem/index.js\");\n    const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n    if (!client) throw new Error(\"pem: client is required\");\n    return createPushCertificate({\n      client,\n      bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n      development: params.development as boolean | undefined,\n      outputDir: params.output_path as string | undefined,\n      p12Password: params.p12_password as string | undefined,\n      force: params.force as boolean | undefined,\n    });\n  },\n});\n","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 { readdir } from \"node:fs/promises\";\nimport { join, resolve, basename } from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface DetectedValues {\n  workspace: string | null;\n  project: string | null;\n  scheme: string;\n  configuration: string;\n  schemes: string[];\n  configurations: string[];\n  targets: string[];\n}\n\nexport interface XcodeBuildListOutput {\n  project?: {\n    name: string;\n    schemes: string[];\n    configurations: string[];\n    targets: string[];\n  };\n  workspace?: {\n    name: string;\n    schemes: string[];\n  };\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\n/**\n * Find the first file in `dir` matching the given extension.\n */\nasync function findFirst(dir: string, ext: string): Promise<string | null> {\n  const entries = await readdir(dir, { withFileTypes: true });\n  for (const entry of entries) {\n    if (entry.name.endsWith(ext) && !entry.name.startsWith(\".\")) {\n      return join(dir, entry.name);\n    }\n  }\n  return null;\n}\n\n/**\n * Run `xcodebuild -list -json` and return parsed JSON.\n */\nasync function xcodebuildList(args: string[]): Promise<XcodeBuildListOutput> {\n  return new Promise<XcodeBuildListOutput>((res, rej) => {\n    const proc = spawn(\"xcodebuild\", [\"-list\", \"-json\", ...args], {\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n    const chunks: Buffer[] = [];\n    const errChunks: Buffer[] = [];\n    proc.stdout.on(\"data\", (d: Buffer) => chunks.push(d));\n    proc.stderr.on(\"data\", (d: Buffer) => errChunks.push(d));\n    proc.on(\"error\", rej);\n    proc.on(\"close\", (code) => {\n      if (code !== 0) {\n        const stderr = Buffer.concat(errChunks).toString(\"utf-8\").trim();\n        rej(new Error(\"xcodebuild -list failed (exit \" + code + \"):\\n\" + stderr));\n        return;\n      }\n      const raw = Buffer.concat(chunks).toString(\"utf-8\").trim();\n      try {\n        res(JSON.parse(raw) as XcodeBuildListOutput);\n      } catch {\n        rej(new Error(\"Failed to parse xcodebuild -list JSON:\\n\" + raw));\n      }\n    });\n  });\n}\n\n// ── Public API ─────────────────────────────────────────────────────────────\n\n/**\n * Auto-detect the Xcode workspace/project, scheme, and configuration.\n *\n * Workspace/project resolution:\n *  1. Explicit option\n *  2. First `.xcworkspace` in searchDir\n *  3. First `.xcodeproj` in searchDir\n *\n * Scheme resolution:\n *  1. Explicit option\n *  2. Sole scheme -> auto-select\n *  3. Scheme matching workspace/project name\n *  4. Error\n */\nexport async function detectValues(options: {\n  workspace?: string;\n  project?: string;\n  scheme?: string;\n  configuration?: string;\n  searchDir?: string;\n}): Promise<DetectedValues> {\n  const searchDir = resolve(options.searchDir ?? process.cwd());\n\n  // ── Resolve workspace / project ───────────────────────────────────────\n\n  let workspace = options.workspace ?? null;\n  let project = options.project ?? null;\n\n  if (!workspace && !project) {\n    workspace = await findFirst(searchDir, \".xcworkspace\");\n  }\n  if (!workspace && !project) {\n    project = await findFirst(searchDir, \".xcodeproj\");\n  }\n  if (!workspace && !project) {\n    throw new Error(\n      \"Could not find .xcworkspace or .xcodeproj in \" + searchDir +\n        \". Pass workspace or project explicitly.\",\n    );\n  }\n\n  // ── Run xcodebuild -list ──────────────────────────────────────────────\n\n  const listArgs: string[] = [];\n  if (workspace) listArgs.push(\"-workspace\", workspace);\n  else if (project) listArgs.push(\"-project\", project);\n\n  const listOutput = await xcodebuildList(listArgs);\n\n  const schemes: string[] =\n    listOutput.workspace?.schemes ?? listOutput.project?.schemes ?? [];\n  const configurations: string[] =\n    listOutput.project?.configurations ?? [];\n  const targets: string[] = listOutput.project?.targets ?? [];\n\n  // ── Resolve scheme ────────────────────────────────────────────────────\n\n  let scheme = options.scheme ?? null;\n\n  if (!scheme) {\n    if (schemes.length === 1) {\n      scheme = schemes[0];\n    } else if (schemes.length > 1) {\n      const refName =\n        (workspace ? basename(workspace, \".xcworkspace\") : null) ??\n        (project ? basename(project, \".xcodeproj\") : null);\n      if (refName) {\n        const m = schemes.find((s) => s === refName);\n        if (m) scheme = m;\n      }\n      if (!scheme) {\n        throw new Error(\n          \"Multiple schemes found: \" + schemes.join(\", \") +\n            \". Pass scheme explicitly.\",\n        );\n      }\n    } else {\n      throw new Error(\n        \"No schemes found in the Xcode project. Make sure the scheme is shared.\",\n      );\n    }\n  }\n\n  const configuration = options.configuration ?? \"Release\";\n\n  return {\n    workspace,\n    project,\n    scheme,\n    configuration,\n    schemes,\n    configurations,\n    targets,\n  };\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport plist from \"plist\";\nimport type { ExportMethod } from \"../types/index.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ExportOptionsPlistConfig {\n  /** The export method: app-store, ad-hoc, development, enterprise, etc. */\n  exportMethod: ExportMethod;\n  /** Apple Developer team ID */\n  teamId?: string;\n  /**\n   * Map of bundle identifier to provisioning profile name.\n   * e.g. { \"com.example.app\": \"MyApp Distribution\" }\n   */\n  provisioningProfiles?: Record<string, string>;\n  /** Whether to include bitcode (deprecated in Xcode 14+, defaults to false) */\n  includeBitcode?: boolean;\n  /** Whether to include symbols in the export (defaults to true) */\n  includeSymbols?: boolean;\n  /** Code signing identity, e.g. \"Apple Distribution: Company (TEAM_ID)\" */\n  signingCertificate?: string;\n  /** Signing style: \"manual\" or \"automatic\" */\n  signingStyle?: \"manual\" | \"automatic\";\n  /** Destination for export: \"export\" or \"upload\" */\n  destination?: \"export\" | \"upload\";\n  /** Whether to generate an app thinning report */\n  thinning?: string;\n  /** Catalyst platform: \"macos\" or \"ios\" */\n  catalystPlatform?: string;\n  /** Additional arbitrary keys to merge into the plist */\n  additionalOptions?: Record<string, unknown>;\n}\n\n// ── Signing Style Inference ────────────────────────────────────────────────\n\nfunction inferSigningStyle(\n  config: ExportOptionsPlistConfig,\n): \"manual\" | \"automatic\" {\n  if (config.signingStyle) return config.signingStyle;\n  // If provisioning profiles are specified, use manual signing\n  if (\n    config.provisioningProfiles &&\n    Object.keys(config.provisioningProfiles).length > 0\n  ) {\n    return \"manual\";\n  }\n  return \"automatic\";\n}\n\n// ── Public API ─────────────────────────────────────────────────────────────\n\n/**\n * Build the exportOptions plist dictionary. Returns a plain object that can be\n * serialized to XML plist via the `plist` package.\n */\nexport function buildExportOptions(\n  config: ExportOptionsPlistConfig,\n): Record<string, unknown> {\n  const opts: Record<string, unknown> = {\n    method: config.exportMethod,\n  };\n\n  const signingStyle = inferSigningStyle(config);\n  opts.signingStyle = signingStyle;\n\n  if (config.teamId) {\n    opts.teamID = config.teamId;\n  }\n\n  if (signingStyle === \"manual\" && config.provisioningProfiles) {\n    opts.provisioningProfiles = config.provisioningProfiles;\n  }\n\n  if (config.signingCertificate) {\n    opts.signingCertificate = config.signingCertificate;\n  }\n\n  // Bitcode (default false for modern Xcode)\n  opts.uploadBitcode = config.includeBitcode ?? false;\n  opts.compileBitcode = config.includeBitcode ?? false;\n\n  // Symbols (default true)\n  opts.uploadSymbols = config.includeSymbols ?? true;\n\n  if (config.destination) {\n    opts.destination = config.destination;\n  }\n\n  if (config.thinning) {\n    opts.thinning = config.thinning;\n  }\n\n  if (config.catalystPlatform) {\n    // Apple expects \"macos\" or \"ios\"\n    opts.distributionBundleIdentifier = undefined;\n  }\n\n  // Merge additional options last so they can override anything\n  if (config.additionalOptions) {\n    Object.assign(opts, config.additionalOptions);\n  }\n\n  return opts;\n}\n\n/**\n * Generate an exportOptions plist XML string from the given config.\n */\nexport function generateExportOptionsPlistXml(\n  config: ExportOptionsPlistConfig,\n): string {\n  const opts = buildExportOptions(config);\n  return plist.build(opts as plist.PlistObject);\n}\n\n/**\n * Write an exportOptions.plist file to disk and return its path.\n *\n * @param dir   - Directory to write the file into\n * @param config - Export options configuration\n * @returns The absolute path to the written plist file\n */\nexport async function writeExportOptionsPlist(\n  dir: string,\n  config: ExportOptionsPlistConfig,\n): Promise<string> {\n  const xml = generateExportOptionsPlistXml(config);\n  const plistPath = join(dir, \"exportOptions.plist\");\n  await writeFile(plistPath, xml, \"utf-8\");\n  return plistPath;\n}\n","import { spawn } from \"node:child_process\";\nimport { mkdir, readdir, rm, stat } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport { detectValues } from \"./detect.js\";\nimport { writeExportOptionsPlist } from \"./export-options.js\";\nimport type { ExportMethod } from \"../types/index.js\";\n\n// ── Re-exports ─────────────────────────────────────────────────────────────\n\nexport { detectValues } from \"./detect.js\";\nexport type { DetectedValues, XcodeBuildListOutput } from \"./detect.js\";\nexport {\n  buildExportOptions,\n  generateExportOptionsPlistXml,\n  writeExportOptionsPlist,\n} from \"./export-options.js\";\nexport type { ExportOptionsPlistConfig } from \"./export-options.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface GymOptions {\n  scheme: string;\n  workspace?: string;\n  project?: string;\n  configuration?: string;\n  exportMethod: ExportMethod;\n  teamId?: string;\n  provisioningProfiles?: Record<string, string>;\n  codeSignIdentity?: string;\n  outputDirectory?: string;\n  outputName?: string;\n  clean?: boolean;\n  archivePath?: string;\n  derivedDataPath?: string;\n  xcargs?: string;\n  buildPath?: string;\n  includeBitcode?: boolean;\n  includeSymbols?: boolean;\n  exportOptions?: Record<string, unknown>;\n  sdk?: string;\n  destination?: string;\n  catalystPlatform?: string;\n  disableXcpretty?: boolean;\n  onOutput?: (chunk: string) => void;\n}\n\nexport interface GymResult {\n  success: boolean;\n  exitCode: number;\n  ipaPath: string | null;\n  pkgPath: string | null;\n  dsymPath: string | null;\n  archivePath: string;\n  output: string;\n}\n\n// ── Internal helpers ───────────────────────────────────────────────────────\n\n/**\n * Spawn xcodebuild with the given args, streaming stdout/stderr to the\n * optional `onOutput` callback and collecting full output.\n */\nfunction runXcodebuild(\n  args: string[],\n  onOutput?: (chunk: string) => void,\n): Promise<{ exitCode: number; output: string }> {\n  return new Promise((res, rej) => {\n    const proc = spawn(\"xcodebuild\", args, {\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n\n    const chunks: string[] = [];\n\n    const handleData = (data: Buffer) => {\n      const text = data.toString(\"utf-8\");\n      chunks.push(text);\n      if (onOutput) onOutput(text);\n    };\n\n    proc.stdout.on(\"data\", handleData);\n    proc.stderr.on(\"data\", handleData);\n    proc.on(\"error\", rej);\n    proc.on(\"close\", (code) => {\n      res({ exitCode: code ?? 1, output: chunks.join(\"\") });\n    });\n  });\n}\n\n/**\n * Recursively find the first file matching `ext` inside `dir`.\n */\nasync function findFileWithExtension(\n  dir: string,\n  ext: string,\n): Promise<string | null> {\n  let entries;\n  try {\n    entries = await readdir(dir, { withFileTypes: true });\n  } catch {\n    return null;\n  }\n  for (const entry of entries) {\n    const full = join(dir, entry.name);\n    if (entry.name.endsWith(ext) && !entry.isDirectory()) {\n      return full;\n    }\n    if (entry.isDirectory()) {\n      const found = await findFileWithExtension(full, ext);\n      if (found) return found;\n    }\n  }\n  return null;\n}\n\n/**\n * Compress a directory to a .tar.gz file and return its path.\n */\nasync function compressDsyms(\n  dsymDir: string,\n  outputPath: string,\n): Promise<string> {\n  return new Promise((res, rej) => {\n    const proc = spawn(\"tar\", [\"-czf\", outputPath, \"-C\", dsymDir, \".\"], {\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n    proc.on(\"error\", rej);\n    proc.on(\"close\", (code) => {\n      if (code !== 0) rej(new Error(\"tar failed with exit code \" + code));\n      else res(outputPath);\n    });\n  });\n}\n\n// ── Main entry point ───────────────────────────────────────────────────────\n\n/**\n * Build an iOS/macOS app using xcodebuild archive + exportArchive.\n * This is the TypeScript equivalent of Fastlane's `gym` (alias `build_app`).\n *\n * Steps:\n *  1. requireMacOS(\"gym\")\n *  2. Detect values (workspace/project/scheme/config)\n *  3. Clean if requested\n *  4. Archive via `xcodebuild archive`\n *  5. Generate exportOptionsPlist\n *  6. Export via `xcodebuild -exportArchive`\n *  7. Find IPA/PKG, compress dSYMs\n *  8. Return GymResult\n */\nexport async function buildApp(options: GymOptions): Promise<GymResult> {\n  requireMacOS(\"gym\");\n\n  // ── 1. Detect values ──────────────────────────────────────────────────\n\n  const detected = await detectValues({\n    workspace: options.workspace,\n    project: options.project,\n    scheme: options.scheme,\n    configuration: options.configuration,\n  });\n\n  const { workspace, project, scheme, configuration } = detected;\n\n  // ── 2. Prepare paths ─────────────────────────────────────────────────\n\n  const outputDir = resolve(\n    options.outputDirectory ?? join(process.cwd(), \"output\"),\n  );\n  await mkdir(outputDir, { recursive: true });\n\n  const archiveName = options.outputName ?? scheme;\n  const archivePath =\n    options.archivePath ?? join(outputDir, archiveName + \".xcarchive\");\n  const exportPath = join(outputDir, \"export\");\n  await mkdir(exportPath, { recursive: true });\n\n  // Temp directory for the export options plist\n  const tmpDir = join(tmpdir(), \"fastnode-gym-\" + randomUUID());\n  await mkdir(tmpDir, { recursive: true });\n\n  const fullOutput: string[] = [];\n  const onOutput = (chunk: string) => {\n    fullOutput.push(chunk);\n    if (options.onOutput) options.onOutput(chunk);\n  };\n\n  try {\n    // ── 3. Clean if requested ─────────────────────────────────────────\n\n    if (options.clean) {\n      const cleanArgs = [\"clean\"];\n      if (workspace) cleanArgs.push(\"-workspace\", workspace);\n      else if (project) cleanArgs.push(\"-project\", project);\n      cleanArgs.push(\"-scheme\", scheme, \"-configuration\", configuration);\n      if (options.xcargs) cleanArgs.push(...options.xcargs.split(/\\s+/));\n\n      const cleanResult = await runXcodebuild(cleanArgs, onOutput);\n      if (cleanResult.exitCode !== 0) {\n        return {\n          success: false,\n          exitCode: cleanResult.exitCode,\n          ipaPath: null,\n          pkgPath: null,\n          dsymPath: null,\n          archivePath,\n          output: fullOutput.join(\"\"),\n        };\n      }\n    }\n\n    // ── 4. Archive ────────────────────────────────────────────────────\n\n    const archiveArgs: string[] = [\"archive\"];\n\n    if (workspace) archiveArgs.push(\"-workspace\", workspace);\n    else if (project) archiveArgs.push(\"-project\", project);\n\n    archiveArgs.push(\"-scheme\", scheme);\n    archiveArgs.push(\"-archivePath\", archivePath);\n    archiveArgs.push(\"-configuration\", configuration);\n\n    if (options.sdk) {\n      archiveArgs.push(\"-sdk\", options.sdk);\n    }\n    if (options.destination) {\n      archiveArgs.push(\"-destination\", options.destination);\n    }\n    if (options.derivedDataPath) {\n      archiveArgs.push(\"-derivedDataPath\", options.derivedDataPath);\n    }\n    if (options.xcargs) {\n      archiveArgs.push(...options.xcargs.split(/\\s+/));\n    }\n\n    const archiveResult = await runXcodebuild(archiveArgs, onOutput);\n    if (archiveResult.exitCode !== 0) {\n      return {\n        success: false,\n        exitCode: archiveResult.exitCode,\n        ipaPath: null,\n        pkgPath: null,\n        dsymPath: null,\n        archivePath,\n        output: fullOutput.join(\"\"),\n      };\n    }\n\n    // ── 5. Generate exportOptionsPlist ────────────────────────────────\n\n    const exportOptionsPlistPath = await writeExportOptionsPlist(tmpDir, {\n      exportMethod: options.exportMethod,\n      teamId: options.teamId,\n      provisioningProfiles: options.provisioningProfiles,\n      signingCertificate: options.codeSignIdentity,\n      includeBitcode: options.includeBitcode,\n      includeSymbols: options.includeSymbols,\n      additionalOptions: options.exportOptions,\n    });\n\n    // ── 6. Export archive ─────────────────────────────────────────────\n\n    const exportArgs: string[] = [\n      \"-exportArchive\",\n      \"-archivePath\",\n      archivePath,\n      \"-exportOptionsPlist\",\n      exportOptionsPlistPath,\n      \"-exportPath\",\n      exportPath,\n    ];\n\n    if (options.xcargs) {\n      exportArgs.push(...options.xcargs.split(/\\s+/));\n    }\n\n    const exportResult = await runXcodebuild(exportArgs, onOutput);\n    if (exportResult.exitCode !== 0) {\n      return {\n        success: false,\n        exitCode: exportResult.exitCode,\n        ipaPath: null,\n        pkgPath: null,\n        dsymPath: null,\n        archivePath,\n        output: fullOutput.join(\"\"),\n      };\n    }\n\n    // ── 7. Find outputs ───────────────────────────────────────────────\n\n    // Find IPA\n    let ipaPath = await findFileWithExtension(exportPath, \".ipa\");\n\n    // Find PKG (macOS installer)\n    let pkgPath = await findFileWithExtension(exportPath, \".pkg\");\n\n    // Compress dSYMs\n    let dsymPath: string | null = null;\n    const dsymsDir = join(archivePath, \"dSYMs\");\n    try {\n      const dsymStat = await stat(dsymsDir);\n      if (dsymStat.isDirectory()) {\n        const dsymEntries = await readdir(dsymsDir);\n        if (dsymEntries.length > 0) {\n          dsymPath = join(outputDir, archiveName + \".app.dSYM.zip\");\n          await compressDsyms(dsymsDir, dsymPath);\n        }\n      }\n    } catch {\n      // No dSYMs directory — that's OK\n    }\n\n    return {\n      success: true,\n      exitCode: 0,\n      ipaPath,\n      pkgPath,\n      dsymPath,\n      archivePath,\n      output: fullOutput.join(\"\"),\n    };\n  } finally {\n    // Clean up temp directory\n    await rm(tmpDir, { recursive: true, force: true }).catch(() => {});\n  }\n}\n","import { registerAction } from \"../index.js\";\nimport type { ExportMethod } from \"../../types/index.js\";\n\nregisterAction({\n  name: \"build_app\",\n  aliases: [\"gym\", \"build_ios_app\", \"build_mac_app\"],\n  description: \"Build the iOS/macOS app using xcodebuild\",\n  async run(params, ctx) {\n    const { buildApp } = await import(\"../../gym/index.js\");\n    const result = await buildApp({\n      scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string,\n      workspace: params.workspace as string | undefined,\n      project: params.project as string | undefined,\n      configuration: params.configuration as string | undefined,\n      exportMethod: (params.export_method ?? \"app-store\") as ExportMethod,\n      teamId: params.team_id as string | undefined,\n      provisioningProfiles: params.export_options && typeof params.export_options === \"object\"\n        ? (params.export_options as Record<string, unknown>).provisioningProfiles as Record<string, string> | undefined\n        : undefined,\n      codeSignIdentity: params.codesigning_identity as string | undefined,\n      outputDirectory: params.output_directory as string | undefined,\n      outputName: params.output_name as string | undefined,\n      clean: params.clean as boolean | undefined,\n      xcargs: params.xcargs as string | undefined,\n      sdk: params.sdk as string | undefined,\n      destination: params.destination as string | undefined,\n      includeBitcode: params.include_bitcode as boolean | undefined,\n      includeSymbols: params.include_symbols as boolean | undefined,\n      onOutput: params.on_output as ((chunk: string) => void) | undefined,\n    });\n    ctx.set(\"IPA_OUTPUT_PATH\", result.ipaPath);\n    ctx.set(\"PKG_OUTPUT_PATH\", result.pkgPath);\n    ctx.set(\"DSYM_OUTPUT_PATH\", result.dsymPath);\n    ctx.set(\"XCODEBUILD_ARCHIVE\", result.archivePath);\n    return result;\n  },\n});\n\nregisterAction({\n  name: \"clean_build_artifacts\",\n  description: \"Remove build artifacts (IPA, dSYM, etc.)\",\n  async run(params, ctx) {\n    const { rm } = await import(\"node:fs/promises\");\n    const paths = [\n      ctx.get<string>(\"IPA_OUTPUT_PATH\"),\n      ctx.get<string>(\"PKG_OUTPUT_PATH\"),\n      ctx.get<string>(\"DSYM_OUTPUT_PATH\"),\n    ].filter(Boolean) as string[];\n    for (const p of paths) {\n      await rm(p, { force: true }).catch(() => {});\n    }\n    return { cleaned: paths };\n  },\n});\n","/**\n * SRP (Secure Remote Password) implementation\n * 1:1 port of the fastlane-sirp Ruby gem\n * Used for Apple ID authentication\n */\n\nimport { createHash, randomBytes, pbkdf2Sync } from \"node:crypto\";\n\n// ── RFC 5054 SRP Group Parameters ──────────────────────────────────────────\n\n// Copied exactly from fastlane-sirp parameters.rb (2048-bit group)\nconst N_2048 = BigInt(\n  \"0x\" +\n  \"AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050\" +\n  \"A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50\" +\n  \"E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B8\" +\n  \"55F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773B\" +\n  \"CA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748\" +\n  \"544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6\" +\n  \"AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB\" +\n  \"694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73\"\n);\nconst g_2048 = 2n;\n\n// ── Utility Functions ──────────────────────────────────────────────────────\n\nfunction numToHex(num: bigint): string {\n  let hex = num.toString(16);\n  if (hex.length % 2 !== 0) hex = \"0\" + hex;\n  return hex.toLowerCase();\n}\n\nfunction hexToBytes(hex: string): Buffer {\n  return Buffer.from(hex, \"hex\");\n}\n\nfunction shaHex(h: string, algorithm: string): string {\n  return createHash(algorithm).update(hexToBytes(h)).digest(\"hex\");\n}\n\nfunction shaStr(s: string, algorithm: string): string {\n  return createHash(algorithm).update(s).digest(\"hex\");\n}\n\nfunction modExp(base: bigint, exp: bigint, mod: bigint): bigint {\n  if (mod === 1n) return 0n;\n  let result = 1n;\n  base = base % mod;\n  while (exp > 0n) {\n    if (exp % 2n === 1n) {\n      result = (result * base) % mod;\n    }\n    exp = exp / 2n;\n    base = (base * base) % mod;\n  }\n  return result;\n}\n\nfunction H(algorithm: string, n: bigint, ...args: (bigint | string | undefined)[]): bigint {\n  const nHex = numToHex(n);\n  // Must match Ruby: nlen = 2 * ((('%x' % [n]).length * 4 + 7) >> 3)\n  // Use floor division (>>3), NOT ceiling\n  const nlen = 2 * (((nHex.length * 4 + 7) >> 3));\n\n  let hashin = \"\";\n  for (const s of args) {\n    if (s === undefined) continue;\n    const shex = typeof s === \"string\" ? s : numToHex(s);\n    if (shex.length > nlen) {\n      throw new Error(\"Bit width does not match - client uses different prime\");\n    }\n    hashin += \"0\".repeat(nlen - shex.length) + shex;\n  }\n\n  const hashed = shaHex(hashin, algorithm);\n  return BigInt(\"0x\" + hashed) % n;\n}\n\n// ── SRP Client ─────────────────────────────────────────────────────────────\n\nexport class SRPClient {\n  private N: bigint;\n  private g: bigint;\n  private hashAlg: string;\n  private k: bigint;\n  private a: bigint;\n  A: string;\n  private S: string | null = null;\n  private K: string | null = null;\n  M: string | null = null;\n  H_AMK: string | null = null;\n\n  constructor(group: number = 2048) {\n    if (group !== 2048) throw new Error(\"Only 2048-bit group is supported\");\n    this.N = N_2048;\n    this.g = g_2048;\n    this.hashAlg = \"sha256\";\n    this.k = H(this.hashAlg, this.N, this.N, this.g);\n    // Generate random 'a'\n    this.a = BigInt(\"0x\" + randomBytes(256).toString(\"hex\"));\n    // Compute A = g^a mod N\n    this.A = numToHex(modExp(this.g, this.a, this.N));\n  }\n\n  startAuthentication(): string {\n    return this.A;\n  }\n\n  processChallenge(\n    username: string,\n    password: string, // hex-encoded encrypted password\n    xsalt: string,    // hex\n    xbb: string,      // hex\n    isPasswordEncrypted: boolean = false\n  ): string | false {\n    const bb = BigInt(\"0x\" + xbb);\n\n    // SRP-6a safety check\n    if (bb % this.N === 0n) return false;\n\n    let x: bigint;\n    if (isPasswordEncrypted) {\n      x = this.calcXHex(password, xsalt);\n    } else {\n      x = this.calcX(username, password, xsalt);\n    }\n\n    const u = H(this.hashAlg, this.N, this.A, xbb);\n    if (u === 0n) return false;\n\n    // S = (B - k * g^x) ^ (a + u*x) mod N\n    const gx = modExp(this.g, x, this.N);\n    let base = (bb - this.k * gx) % this.N;\n    if (base < 0n) base += this.N;\n    const exp = this.a + x * u;\n    this.S = numToHex(modExp(base, exp, this.N));\n    this.K = shaHex(this.S, this.hashAlg);\n\n    // M = H(H(N) xor H(g), H(I), s, A, B, K)\n    const hxor = H(this.hashAlg, this.N, this.N) ^ H(this.hashAlg, this.N, this.g);\n    const buf =\n      numToHex(hxor) +\n      shaStr(username, this.hashAlg) +\n      xsalt +\n      this.A +\n      xbb +\n      this.K;\n    const bytes = hexToBytes(buf);\n    this.M = createHash(this.hashAlg).update(bytes).digest(\"hex\");\n\n    // H_AMK = H(A, M, K)\n    const amkBytes = hexToBytes(this.A + this.M + this.K);\n    this.H_AMK = numToHex(\n      BigInt(\"0x\" + createHash(this.hashAlg).update(amkBytes).digest(\"hex\"))\n    );\n\n    return this.M;\n  }\n\n  private calcX(username: string, password: string, xsalt: string): bigint {\n    const spad = xsalt.length % 2 !== 0 ? \"0\" : \"\";\n    const inner = shaStr(`${username}:${password}`, this.hashAlg);\n    return BigInt(\"0x\" + shaHex(spad + xsalt + inner, this.hashAlg));\n  }\n\n  private calcXHex(xpassword: string, xsalt: string): bigint {\n    // calc_x_hex: sha_hex(xsalt + sha_hex(\":\" hex + xpassword), hash)\n    const colonHex = \":\".charCodeAt(0).toString(16);\n    const inner = shaHex(colonHex + xpassword, this.hashAlg);\n    return BigInt(\"0x\" + shaHex(xsalt + inner, this.hashAlg));\n  }\n}\n\n// ── Apple PBKDF2 password derivation ───────────────────────────────────────\n\nexport function applePbkdf2(\n  password: string,\n  salt: Buffer,\n  iterations: number,\n  keyLength: number,\n  protocol: string\n): Buffer {\n  if (![\"s2k\", \"s2k_fo\"].includes(protocol)) {\n    throw new Error(`Unsupported protocol '${protocol}' for pbkdf2`);\n  }\n\n  // First hash the password with SHA-256\n  let passwordBytes: Buffer | string = createHash(\"sha256\").update(password).digest();\n\n  if (protocol === \"s2k_fo\") {\n    // Legacy: convert to hex string\n    passwordBytes = passwordBytes.toString(\"hex\");\n  }\n\n  return pbkdf2Sync(passwordBytes, salt, iterations, keyLength, \"sha256\");\n}\n","/**\n * Apple ID Session Authentication\n * 1:1 port of Fastlane Spaceship client.rb + two_step_or_factor_client.rb\n *\n * Two flows:\n *\n *   loginWithAppleId({ email, password, onPrompt })\n *     - blocking, CLI-style. onPrompt is awaited to collect 2FA codes.\n *\n *   beginLogin({ email, password }) → { kind: \"logged_in\" | \"needs_2fa\", ... }\n *     submitTwoFactorCode({ pending, code, source, ... }) → AppleSession\n *     requestSmsCode({ pending, phoneId, mode })\n *     - HTTP-resumable. Used by the App Release wizard, where the 2FA\n *       challenge is rendered in a browser modal and the code arrives in\n *       a separate request.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { createInterface } from \"node:readline\";\nimport { SRPClient, applePbkdf2 } from \"./srp.js\";\n\nconst AUTH_BASE = \"https://idmsa.apple.com/appleauth/auth\";\nconst OLYMPUS_SESSION = \"https://appstoreconnect.apple.com/olympus/v1/session\";\nconst WIDGET_KEY_URL = \"https://appstoreconnect.apple.com/olympus/v1/app/config?hostname=itunesconnect.apple.com\";\n\nexport interface AppleSessionConfig {\n  email: string;\n  password: string;\n  onLog?: (msg: string) => void;\n  onPrompt?: (msg: string) => Promise<string>;\n}\n\nexport interface ContractMessage {\n  id: string;\n  group: string;\n  subject: string;\n  message: string;\n}\n\nexport interface AppleSession {\n  cookies: Record<string, string>;\n  sessionId: string;\n  scnt: string;\n  serviceKey: string;\n  userEmail: string;\n  teamId?: string;\n  pendingAgreements: ContractMessage[];\n}\n\n/**\n * State held between beginLogin() and submitTwoFactorCode() — captures\n * everything needed to resume an in-progress 2FA flow across HTTP requests.\n * Stored server-side keyed by an opaque session id; never sent to the\n * browser (the browser only sees the opaque id).\n */\nexport interface PendingLogin {\n  cookies: Record<string, string>;\n  sessionId: string;\n  scnt: string;\n  serviceKey: string;\n  userEmail: string;\n}\n\n/**\n * Description of the 2FA challenge presented to the user.\n *\n * Modern 2FA accounts (the default for everyone) have `kind: \"device\"` —\n * Apple pushes the 6-digit code to all the user's trusted Apple devices\n * (iPhone, Mac, etc.) and the user types it into our wizard. The legacy\n * `trustedDevices` field is empty in this case; that field only ever\n * populates for old \"two-step verification\" accounts which are\n * essentially extinct.\n *\n * `kind: \"phone_only\"` is reserved for accounts that have no real Apple\n * devices (Apple's `noTrustedDevices === true` flag) — those accounts\n * must use SMS to a trusted phone number.\n *\n * Either way, the user can opt to receive the code via SMS instead by\n * picking from `trustedPhoneNumbers` and calling requestSmsCode().\n */\nexport interface TwoFactorChallenge {\n  kind: \"device\" | \"phone_only\";\n  codeLength: number;\n  trustedPhoneNumbers: { id: number; numberWithDialCode: string; pushMode?: string }[];\n}\n\nexport type BeginLoginResult =\n  | { kind: \"logged_in\"; session: AppleSession }\n  | { kind: \"needs_2fa\"; pending: PendingLogin; challenge: TwoFactorChallenge };\n\n/** Thrown when an Apple Developer Program agreement needs to be accepted */\nexport class ProgramLicenseAgreementError extends Error {\n  constructor(message: string, public agreements: ContractMessage[]) {\n    super(message);\n    this.name = \"ProgramLicenseAgreementError\";\n  }\n}\n\n/**\n * Check a portal API response for agreement/license errors.\n * Throws ProgramLicenseAgreementError if detected.\n * Call this after any portal API call. Mirrors Spaceship::Client#handle_itc_response.\n */\nexport function checkPortalResponse(body: any, session?: AppleSession): void {\n  if (!body || typeof body !== \"object\") return;\n\n  // Result code 4100 = membership not eligible (often due to pending agreement)\n  if (body.resultCode === 4100) {\n    const userMsg = body.userString ?? \"The selected team does not have an eligible program membership.\";\n    const agreements = session?.pendingAgreements ?? [];\n    if (agreements.length > 0) {\n      throw new ProgramLicenseAgreementError(\n        `${userMsg}\\n\\n⚠ Pending agreement: ${agreements[0].subject}\\n` +\n        `${agreements[0].message.replace(/<[^>]+>/g, \"\")}\\n\\n` +\n        `Please accept the agreement at https://developer.apple.com/account before continuing.`,\n        agreements\n      );\n    }\n    throw new Error(userMsg);\n  }\n\n  // Explicit license agreement mention\n  if ((body.userString ?? \"\").includes(\"Program License Agreement\")) {\n    throw new ProgramLicenseAgreementError(\n      `${body.userString} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n      session?.pendingAgreements ?? []\n    );\n  }\n\n  // Generic error with result code\n  if (body.resultCode && body.resultCode !== 0) {\n    const msg = body.userString || body.resultString || `Portal API error (code ${body.resultCode})`;\n    throw new Error(msg);\n  }\n}\n\n// ── Main Login (mirrors Spaceship::Client#send_shared_login_request) ───────\n\n/**\n * Step 1 of HTTP-resumable login: do the SIRP exchange and detect whether\n * 2FA is required. Returns either a fully-established session (no 2FA) or\n * a pending state + a description of the 2FA challenge.\n */\nexport async function beginLogin(config: {\n  email: string;\n  password: string;\n  onLog?: (msg: string) => void;\n}): Promise<BeginLoginResult> {\n  const log = config.onLog ?? (() => {});\n\n  log(\"Fetching Apple service key...\");\n  const serviceKey = await fetchServiceKey();\n\n  const initRes = await fetch(`${AUTH_BASE}/signin?widgetKey=${serviceKey}`, {\n    headers: { \"User-Agent\": \"Spaceship 2.225.0\" },\n  });\n  const initCookies = parseCookies(initRes.headers);\n\n  const hcBits = initRes.headers.get(\"X-Apple-HC-Bits\");\n  const hcChallenge = initRes.headers.get(\"X-Apple-HC-Challenge\");\n  let hashcash: string | undefined;\n  if (hcBits && hcChallenge) {\n    log(\"Computing hashcash...\");\n    hashcash = computeHashcash(parseInt(hcBits, 10), hcChallenge);\n  }\n\n  const cookieStr = Object.entries(initCookies)\n    .map(([k, v]) => k.startsWith(\"DES\") ? `${k}=\"${v}\"` : `${k}=${v}`)\n    .join(\"; \");\n\n  log(\"Starting SIRP Apple ID login...\");\n  const response = await doSirp(config.email, config.password, serviceKey, cookieStr, hashcash);\n\n  const baseState = {\n    cookies: { ...initCookies, ...response.cookies },\n    sessionId: response.sessionId,\n    scnt: response.scnt,\n    serviceKey,\n    userEmail: config.email,\n  };\n\n  if (response.status === 403) {\n    throw new Error(`Invalid username and password combination. Used '${config.email}' as the username.`);\n  }\n  if (response.status === 412) {\n    throw new Error(\"Need to acknowledge Apple's Apple ID and Privacy statement. Please manually log into https://appleid.apple.com.\");\n  }\n\n  if (response.status === 200) {\n    log(\"Login successful (no 2FA).\");\n    const session: AppleSession = { ...baseState, pendingAgreements: [] };\n    await finalizeSession(session, log);\n    return { kind: \"logged_in\", session };\n  }\n\n  if (response.status === 409) {\n    log(\"2FA required, fetching challenge...\");\n    const challenge = await fetchTwoFactorChallenge(baseState);\n    return { kind: \"needs_2fa\", pending: baseState, challenge };\n  }\n\n  throw new Error(`Unexpected login response (${response.status}): ${JSON.stringify(response.body).slice(0, 500)}`);\n}\n\n/** Fetch the 2FA challenge (trusted phones + whether the user has Apple devices). */\nasync function fetchTwoFactorChallenge(pending: PendingLogin): Promise<TwoFactorChallenge> {\n  const r = await fetch(`${AUTH_BASE}`, { headers: buildAuthHeadersFromPending(pending) });\n  const body = await r.json() as any;\n\n  const trustedPhoneNumbers = (body.trustedPhoneNumbers ?? []).map((p: any) => ({\n    id: p.id, numberWithDialCode: p.numberWithDialCode, pushMode: p.pushMode,\n  }));\n  // Apple sets `noTrustedDevices: true` when the user has no real Apple\n  // devices to push the code to and must rely on SMS. Anything else means\n  // we should default to \"enter the code from your device\".\n  const phoneOnly = body.noTrustedDevices === true;\n  const codeLength = body.securityCode?.length ?? 6;\n\n  return {\n    kind: phoneOnly ? \"phone_only\" : \"device\",\n    codeLength,\n    trustedPhoneNumbers,\n  };\n}\n\n/**\n * Ask Apple to send an SMS / voice code to the chosen trusted phone.\n * Used by the wizard's \"Send code via text instead\" affordance.\n */\nexport async function requestSmsCode(input: {\n  pending: PendingLogin;\n  phoneId: number;\n  mode?: \"sms\" | \"voice\";\n}): Promise<void> {\n  await fetch(`${AUTH_BASE}/verify/phone`, {\n    method: \"PUT\",\n    headers: { ...buildAuthHeadersFromPending(input.pending), \"Content-Type\": \"application/json\" },\n    body: JSON.stringify({ phoneNumber: { id: input.phoneId }, mode: input.mode ?? \"sms\" }),\n  });\n}\n\n/**\n * Step 2 of HTTP-resumable login: submit the 2FA code the user typed.\n * Returns a fully-established AppleSession on success.\n *\n *   source = \"device\" → 4-digit code from a trusted Apple device\n *   source = \"phone\"  → 6-digit code from SMS / push to trusted phone\n */\nexport async function submitTwoFactorCode(input: {\n  pending: PendingLogin;\n  code: string;\n  source: \"device\" | \"phone\";\n  phoneId?: number;\n  mode?: \"sms\" | \"voice\";\n  onLog?: (msg: string) => void;\n}): Promise<AppleSession> {\n  const log = input.onLog ?? (() => {});\n\n  let path: string;\n  let body: string;\n  if (input.source === \"device\") {\n    path = `${AUTH_BASE}/verify/trusteddevice/securitycode`;\n    body = JSON.stringify({ securityCode: { code: input.code } });\n  } else {\n    if (input.phoneId == null) throw new Error(\"phoneId is required when source='phone'\");\n    path = `${AUTH_BASE}/verify/phone/securitycode`;\n    body = JSON.stringify({\n      securityCode: { code: input.code },\n      phoneNumber: { id: input.phoneId },\n      mode: input.mode ?? \"sms\",\n    });\n  }\n\n  log(\"Submitting 2FA code...\");\n  const verifyRes = await fetch(path, {\n    method: \"POST\",\n    headers: { ...buildAuthHeadersFromPending(input.pending), \"Content-Type\": \"application/json\" },\n    body,\n  });\n  if (!verifyRes.ok) {\n    const err = await verifyRes.json().catch(() => ({})) as any;\n    const msgs = (err?.service_errors ?? err?.serviceErrors ?? []).map((e: any) => e.message).filter(Boolean);\n    throw new Error(msgs.join(\"; \") || `Verification failed (${verifyRes.status})`);\n  }\n\n  const session: AppleSession = {\n    ...input.pending,\n    cookies: { ...input.pending.cookies, ...parseCookies(verifyRes.headers) },\n    pendingAgreements: [],\n  };\n  await trustSession(session);\n  await finalizeSession(session, log);\n  return session;\n}\n\n/** Fetch olympus session and pending agreements — the post-2FA finishing work. */\nasync function finalizeSession(session: AppleSession, log: (msg: string) => void): Promise<void> {\n  await fetchOlympusSession(session);\n  const agreements = await fetchContractMessages(session);\n  if (agreements.length > 0) {\n    for (const msg of agreements) {\n      log(`⚠ ${msg.subject}: ${msg.message.replace(/<[^>]+>/g, \"\")}`);\n    }\n  }\n  session.pendingAgreements = agreements;\n  log(`Logged in as ${session.userEmail}`);\n}\n\n/**\n * Backward-compatible CLI-style login. Internally uses beginLogin +\n * submitTwoFactorCode but routes 2FA through the synchronous onPrompt\n * callback so existing scripts (test-login.ts, test-full-workflow.ts)\n * keep working.\n */\nexport async function loginWithAppleId(config: AppleSessionConfig): Promise<AppleSession> {\n  const log = config.onLog ?? console.log;\n  const promptFn = config.onPrompt ?? defaultPrompt;\n\n  const result = await beginLogin({ email: config.email, password: config.password, onLog: log });\n  if (result.kind === \"logged_in\") return result.session;\n\n  const { pending, challenge } = result;\n  const phones = challenge.trustedPhoneNumbers;\n\n  if (challenge.kind === \"device\") {\n    log(\"Two-factor Authentication (6 digit code) is enabled for this account\");\n    log(\"(Input 'sms' to escape this prompt and select a trusted phone number to send the code as a text message)\");\n    const input = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n    if (input.toLowerCase() === \"sms\") {\n      log(\"Please select a trusted phone number:\");\n      for (let i = 0; i < phones.length; i++) log(`  ${i + 1}. ${phones[i].numberWithDialCode}`);\n      const choice = await promptFn(\"Enter number: \");\n      const phone = phones[Math.max(0, parseInt(choice, 10) - 1)] ?? phones[0];\n      await requestSmsCode({ pending, phoneId: phone.id, mode: phone.pushMode as any });\n      log(`Code sent to ${phone.numberWithDialCode}`);\n      const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n      return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n    }\n    return submitTwoFactorCode({ pending, code: input, source: \"device\", onLog: log });\n  }\n\n  // phone_only — account has no trusted Apple devices, must use SMS\n  log(\"Two-factor Authentication (6 digit code) is enabled for this account\");\n  if (phones.length === 1) {\n    const phone = phones[0];\n    log(`Code automatically sent to ${phone.numberWithDialCode}`);\n    const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n    return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n  }\n  log(\"Please select a trusted phone number:\");\n  for (let i = 0; i < phones.length; i++) log(`  ${i + 1}. ${phones[i].numberWithDialCode}`);\n  const choice = await promptFn(\"Enter number: \");\n  const phone = phones[Math.max(0, parseInt(choice, 10) - 1)] ?? phones[0];\n  await requestSmsCode({ pending, phoneId: phone.id, mode: phone.pushMode as any });\n  log(`Code sent to ${phone.numberWithDialCode}`);\n  const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n  return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n}\n\nfunction buildAuthHeadersFromPending(pending: PendingLogin): Record<string, string> {\n  const h: Record<string, string> = { \"X-Apple-Widget-Key\": pending.serviceKey, Accept: \"application/json\" };\n  if (pending.sessionId) h[\"X-Apple-Id-Session-Id\"] = pending.sessionId;\n  if (pending.scnt) h[\"scnt\"] = pending.scnt;\n  const c = Object.entries(pending.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n  if (c) h[\"Cookie\"] = c;\n  return h;\n}\n\n// ── SIRP Auth (1:1 port of Spaceship::Client#do_sirp) ──────────────────────\n\nasync function doSirp(\n  user: string, password: string, serviceKey: string, cookieStr: string, hashcash?: string\n): Promise<{ status: number; body: any; cookies: Record<string, string>; sessionId: string; scnt: string }> {\n  const client = new SRPClient(2048);\n  const A = client.startAuthentication();\n  const aBase64 = Buffer.from(A, \"hex\").toString(\"base64\");\n\n  const baseHeaders: Record<string, string> = {\n    \"Content-Type\": \"application/json\",\n    \"X-Requested-With\": \"XMLHttpRequest\",\n    \"X-Apple-Widget-Key\": serviceKey,\n    Accept: \"application/json, text/javascript\",\n  };\n  if (cookieStr) baseHeaders[\"Cookie\"] = cookieStr;\n\n  // Step 1: signin/init\n  const initRes = await fetch(`${AUTH_BASE}/signin/init`, {\n    method: \"POST\",\n    headers: baseHeaders,\n    body: JSON.stringify({ a: aBase64, accountName: user, protocols: [\"s2k\", \"s2k_fo\"] }),\n    redirect: \"manual\",\n  });\n  const initBody = await initRes.json() as any;\n  if (initBody.serviceErrors) throw new Error(`Apple auth error: ${JSON.stringify(initBody.serviceErrors)}`);\n\n  const { iteration: iterations, salt: saltB64, b: bB64, c, protocol } = initBody;\n  const salt = Buffer.from(saltB64, \"base64\");\n  const b = Buffer.from(bB64, \"base64\");\n\n  // Derive password (mirrors Spaceship::Client#pbkdf2)\n  const encryptedPassword = applePbkdf2(password, salt, iterations, 32, protocol);\n\n  // Process SRP challenge\n  const m1 = client.processChallenge(user, encryptedPassword.toString(\"hex\"), salt.toString(\"hex\"), b.toString(\"hex\"), true);\n  if (m1 === false) throw new Error(\"Error processing SIRP challenge\");\n  const m2 = client.H_AMK;\n\n  // Step 2: signin/complete\n  const completeHeaders = { ...baseHeaders };\n  if (hashcash) completeHeaders[\"X-Apple-HC\"] = hashcash;\n\n  const completeRes = await fetch(`${AUTH_BASE}/signin/complete?isRememberMeEnabled=false`, {\n    method: \"POST\",\n    headers: completeHeaders,\n    body: JSON.stringify({\n      accountName: user,\n      c,\n      m1: Buffer.from(m1, \"hex\").toString(\"base64\"),\n      m2: m2 ? Buffer.from(m2, \"hex\").toString(\"base64\") : \"\",\n      rememberMe: false,\n    }),\n    redirect: \"manual\",\n  });\n\n  let body: any;\n  try { body = await completeRes.json(); } catch { body = \"\"; }\n\n  return {\n    status: completeRes.status,\n    body,\n    cookies: parseCookies(completeRes.headers),\n    sessionId: completeRes.headers.get(\"x-apple-id-session-id\") ?? \"\",\n    scnt: completeRes.headers.get(\"scnt\") ?? \"\",\n  };\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nasync function trustSession(session: AppleSession): Promise<void> {\n  const r = await fetch(`${AUTH_BASE}/2sv/trust`, { headers: buildAuthHeaders(session) });\n  Object.assign(session.cookies, parseCookies(r.headers));\n}\n\nasync function fetchOlympusSession(session: AppleSession): Promise<void> {\n  const cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n  const res = await fetch(OLYMPUS_SESSION, { headers: { Cookie: cookieStr, Accept: \"application/json\" } });\n  if (res.ok) {\n    const body = await res.json() as any;\n    if (body?.user?.emailAddress) session.userEmail = body.user.emailAddress;\n    if (body?.provider?.providerId) session.teamId = String(body.provider.providerId);\n  }\n}\n\n// ── Contract Messages (mirrors fetch_program_license_agreement_messages) ────\n\nasync function fetchContractMessages(session: AppleSession): Promise<ContractMessage[]> {\n  const cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n  try {\n    const res = await fetch(\"https://appstoreconnect.apple.com/olympus/v1/contractMessages\", {\n      headers: { Cookie: cookieStr, Accept: \"application/json\" },\n    });\n    if (!res.ok) return [];\n    const body = await res.json() as any[];\n    return (body ?? []).map((m: any) => ({\n      id: m.id ?? \"\",\n      group: m.group ?? \"\",\n      subject: m.subject ?? \"\",\n      message: m.message ?? \"\",\n    }));\n  } catch {\n    return [];\n  }\n}\n\nasync function fetchServiceKey(): Promise<string> {\n  const res = await fetch(WIDGET_KEY_URL);\n  const body = await res.json() as any;\n  if (!body?.authServiceKey) throw new Error(\"Could not fetch Apple service key\");\n  return body.authServiceKey as string;\n}\n\nfunction buildAuthHeaders(session: AppleSession): Record<string, string> {\n  const h: Record<string, string> = { \"X-Apple-Widget-Key\": session.serviceKey, Accept: \"application/json\" };\n  if (session.sessionId) h[\"X-Apple-Id-Session-Id\"] = session.sessionId;\n  if (session.scnt) h[\"scnt\"] = session.scnt;\n  const c = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n  if (c) h[\"Cookie\"] = c;\n  return h;\n}\n\nfunction parseCookies(headers: Headers): Record<string, string> {\n  const cookies: Record<string, string> = {};\n  for (const raw of headers.getSetCookie?.() ?? []) {\n    const m = raw.match(/^([^=]+)=([^;]*)/);\n    if (m) cookies[m[1]] = m[2];\n  }\n  return cookies;\n}\n\nfunction computeHashcash(bits: number, challenge: string): string {\n  const date = new Date().toISOString().replace(/[-:T]/g, \"\").slice(0, 12);\n  let counter = 0;\n  while (true) {\n    const stamp = `1:${bits}:${date}:${challenge}::${counter.toString(36)}:`;\n    const hash = createHash(\"sha1\").update(stamp).digest();\n    let zeroBits = 0;\n    for (const byte of hash) {\n      if (byte === 0) { zeroBits += 8; } else { zeroBits += Math.clz32(byte) - 24; break; }\n      if (zeroBits >= bits) break;\n    }\n    if (zeroBits >= bits) return stamp;\n    counter++;\n  }\n}\n\nasync function defaultPrompt(message: string): Promise<string> {\n  const rl = createInterface({ input: process.stdin, output: process.stdout });\n  return new Promise((r) => { rl.question(message, (a) => { rl.close(); r(a.trim()); }); });\n}\n","import type { TokenManager } from \"./auth.js\";\nimport { ProgramLicenseAgreementError } from \"./apple-session.js\";\nimport type {\n  JsonApiErrorResponse,\n  JsonApiListResponse,\n  JsonApiResponse,\n  ListParams,\n  RequestOptions,\n} from \"./types.js\";\n\nconst PRODUCTION_BASE = \"https://api.appstoreconnect.apple.com\";\nconst ENTERPRISE_BASE = \"https://api.enterprise.developer.apple.com\";\n\nconst MAX_RETRIES = 5;\nconst INITIAL_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 60_000;\n/** Fastlane's TooManyRequestsError gives up after 3600s cumulative backoff. */\nconst MAX_RATE_LIMIT_BACKOFF_MS = 3_600_000;\n\nexport class AppStoreConnectError extends Error {\n  constructor(\n    message: string,\n    public status: number,\n    public errors: JsonApiErrorResponse[\"errors\"] = []\n  ) {\n    super(message);\n    this.name = \"AppStoreConnectError\";\n  }\n}\n\nexport class RateLimitError extends AppStoreConnectError {\n  constructor(public retryAfter: number) {\n    super(`Rate limited. Retry after ${retryAfter}s`, 429);\n    this.name = \"RateLimitError\";\n  }\n}\n\nexport class RequestClient {\n  private baseUrl: string;\n  private tokenManager: TokenManager;\n\n  constructor(tokenManager: TokenManager, enterprise = false) {\n    this.tokenManager = tokenManager;\n    this.baseUrl = enterprise ? ENTERPRISE_BASE : PRODUCTION_BASE;\n  }\n\n  async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n    const { method = \"GET\", body, params, headers: extraHeaders } = options;\n\n    let url = `${this.baseUrl}${path}`;\n    if (params) {\n      const searchParams = new URLSearchParams();\n      for (const [key, value] of Object.entries(params)) {\n        if (value === undefined) continue;\n        if (Array.isArray(value)) {\n          searchParams.set(key, value.join(\",\"));\n        } else {\n          searchParams.set(key, String(value));\n        }\n      }\n      const qs = searchParams.toString();\n      if (qs) url += `?${qs}`;\n    }\n\n    let lastError: Error | null = null;\n    // Soft-cumulative backoff for 429 that doubles on each hit, mirroring\n    // Fastlane's Spaceship::ConnectAPI::APIClient#with_asc_retry 429 handler:\n    // `Kernel.sleep(backoff); backoff *= 2`, giving up past 3600s.\n    let rateLimitBackoffMs = INITIAL_BACKOFF_MS;\n\n    for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n      const token = await this.tokenManager.getToken();\n\n      const headers: Record<string, string> = {\n        Authorization: `Bearer ${token}`,\n        \"Content-Type\": \"application/json\",\n        ...extraHeaders,\n      };\n\n      const res = await fetch(url, {\n        method,\n        headers,\n        body: body ? JSON.stringify(body) : undefined,\n      });\n\n      if (res.ok) {\n        if (res.status === 204) return undefined as T;\n        return (await res.json()) as T;\n      }\n\n      // Handle 401 — refresh token and retry once\n      if (res.status === 401 && attempt === 0) {\n        this.tokenManager.invalidate();\n        continue;\n      }\n\n      // Handle 429 — rate limit. Prefer server's Retry-After header when\n      // provided, otherwise fall back to Fastlane's doubling backoff.\n      if (res.status === 429) {\n        if (rateLimitBackoffMs > MAX_RATE_LIMIT_BACKOFF_MS) {\n          throw new RateLimitError(Math.floor(rateLimitBackoffMs / 1000));\n        }\n        const retryAfterHeader = res.headers.get(\"Retry-After\");\n        const sleepMs = retryAfterHeader\n          ? parseInt(retryAfterHeader, 10) * 1000\n          : rateLimitBackoffMs;\n        await sleep(sleepMs);\n        rateLimitBackoffMs *= 2;\n        continue;\n      }\n\n      // Parse error body early so we can inspect it for 403/502 special cases.\n      const errorBody = await res.json().catch(() => null);\n      const errors = (errorBody as JsonApiErrorResponse)?.errors || [];\n\n      // Handle 403 — detect missing/expired program license agreement.\n      // Mirrors api_client.rb's ProgramLicenseAgreementUpdated branch.\n      if (res.status === 403) {\n        const firstCode = errors[0]?.code;\n        if (firstCode === \"FORBIDDEN.REQUIRED_AGREEMENTS_MISSING_OR_EXPIRED\") {\n          const detail =\n            errors.map((e) => e.detail || e.title).join(\"; \") ||\n            \"Required agreements are missing or expired.\";\n          throw new ProgramLicenseAgreementError(\n            `${detail} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n            []\n          );\n        }\n      }\n\n      // Handle 502 — special-case \"Could not process this request\" retry.\n      // Mirrors api_client.rb's BadGatewayError branch (issue fastlane#19264).\n      if (res.status === 502 && attempt < MAX_RETRIES) {\n        const bodyText = errorBody ? JSON.stringify(errorBody) : \"\";\n        if (bodyText.includes(\"Could not process this request\")) {\n          const backoff = Math.min(\n            INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n            MAX_BACKOFF_MS\n          );\n          await sleep(backoff + Math.random() * 500);\n          continue;\n        }\n      }\n\n      // Handle 5xx — retry with exponential backoff\n      if (res.status >= 500 && attempt < MAX_RETRIES) {\n        const backoff = Math.min(\n          INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n          MAX_BACKOFF_MS\n        );\n        await sleep(backoff + Math.random() * 500);\n        continue;\n      }\n\n      const detail = errors.map((e) => e.detail || e.title).join(\"; \") || `HTTP ${res.status}`;\n\n      lastError = new AppStoreConnectError(detail, res.status, errors);\n      break;\n    }\n\n    throw lastError || new Error(\"Request failed after retries\");\n  }\n\n  async get<T>(path: string, params?: Record<string, string | string[] | number | undefined>): Promise<T> {\n    return this.request<T>(path, { method: \"GET\", params });\n  }\n\n  async post<T>(path: string, body: unknown): Promise<T> {\n    return this.request<T>(path, { method: \"POST\", body });\n  }\n\n  async patch<T>(path: string, body: unknown): Promise<T> {\n    return this.request<T>(path, { method: \"PATCH\", body });\n  }\n\n  async delete(path: string): Promise<void> {\n    await this.request(path, { method: \"DELETE\" });\n  }\n\n  // Build query params from ListParams\n  buildListParams(params: ListParams): Record<string, string | undefined> {\n    const result: Record<string, string | undefined> = {};\n\n    if (params.filter) {\n      for (const [key, value] of Object.entries(params.filter)) {\n        result[`filter[${key}]`] = Array.isArray(value) ? value.join(\",\") : value;\n      }\n    }\n\n    if (params.include) {\n      result[\"include\"] = params.include;\n    }\n\n    if (params.fields) {\n      for (const [key, value] of Object.entries(params.fields)) {\n        result[`fields[${key}]`] = value;\n      }\n    }\n\n    if (params.limit !== undefined) {\n      result[\"limit\"] = String(params.limit);\n    }\n\n    if (params.sort) {\n      result[\"sort\"] = params.sort;\n    }\n\n    if (params.cursor) {\n      // ASC uses page[after] for cursor pagination\n      result[\"page[after]\"] = params.cursor;\n    }\n\n    return result;\n  }\n\n  async list<T>(path: string, params: ListParams = {}): Promise<JsonApiListResponse<T>> {\n    const queryParams = this.buildListParams(params);\n    return this.get<JsonApiListResponse<T>>(path, queryParams);\n  }\n\n  async *paginate<T>(path: string, params: ListParams = {}): AsyncGenerator<T, void, undefined> {\n    let cursor: string | undefined = params.cursor;\n\n    while (true) {\n      const response = await this.list<T>(path, { ...params, cursor });\n\n      for (const item of response.data) {\n        yield item;\n      }\n\n      // Check for next page\n      const nextLink = response.links?.next;\n      if (!nextLink) break;\n\n      // Extract cursor from next link\n      const nextUrl = new URL(nextLink);\n      cursor = nextUrl.searchParams.get(\"page[after]\") || undefined;\n      if (!cursor) break;\n    }\n  }\n\n  async all<T>(path: string, params: ListParams = {}): Promise<T[]> {\n    const results: T[] = [];\n    for await (const item of this.paginate<T>(path, params)) {\n      results.push(item);\n    }\n    return results;\n  }\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { writeFile, unlink, mkdtemp, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { PilotUploadOptions, UploadResult } from \"./types.js\";\n\n/**\n * Upload a build to TestFlight via Apple's `altool` (macOS only).\n *\n * altool ships with Xcode command-line tools. It provides richer error\n * output than iTMSTransporter but is only available on macOS.\n */\nexport async function uploadWithAltool(\n  options: PilotUploadOptions\n): Promise<UploadResult> {\n  if (!existsSync(options.ipaPath)) {\n    throw new Error(`File not found: ${options.ipaPath}`);\n  }\n\n  const platform = options.platform ?? \"ios\";\n  const timeout = options.timeout ?? 1_800_000; // 30 min\n\n  // Write temp .p8 key file — altool reads from API_PRIVATE_KEYS_DIR\n  const keyDir = await mkdtemp(join(tmpdir(), \"fastnode-altool-\"));\n  const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n  await writeFile(keyPath, options.apiPrivateKey);\n\n  return new Promise<UploadResult>((resolve) => {\n    const args = [\n      \"altool\",\n      \"--upload-app\",\n      \"-f\",\n      options.ipaPath,\n      \"-t\",\n      platform,\n      \"--apiKey\",\n      options.apiKeyId,\n      \"--apiIssuer\",\n      options.apiIssuerId,\n    ];\n\n    const child = spawn(\"xcrun\", args, {\n      env: { ...process.env, API_PRIVATE_KEYS_DIR: keyDir },\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n\n    let output = \"\";\n    const timer = setTimeout(() => {\n      child.kill(\"SIGTERM\");\n    }, timeout);\n\n    const onData = (data: Buffer) => {\n      const chunk = data.toString();\n      output += chunk;\n      options.onOutput?.(chunk);\n    };\n\n    child.stdout.on(\"data\", onData);\n    child.stderr.on(\"data\", onData);\n\n    child.on(\"close\", async (code) => {\n      clearTimeout(timer);\n      await unlink(keyPath).catch(() => {});\n      await rm(keyDir, { recursive: true, force: true }).catch(() => {});\n      resolve({ success: code === 0, output, backend: \"altool\" });\n    });\n  });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\n\n/**\n * Locate the iTMSTransporter binary on this host.\n *\n * Apple ships iTMSTransporter as a Java-based tool bundled with Xcode\n * on macOS, and as a standalone Linux distribution used by media\n * publishers for CI. Either works for uploading IPAs — same protocol,\n * same ASC API key format.\n *\n * Resolution order:\n *   1. ITMSTRANSPORTER_BIN env var (pinning for prod deployments)\n *   2. Well-known system paths for the host OS\n *   3. Throw with a clear install hint\n *\n * We deliberately do NOT auto-download Transporter. Apple's download\n * URL is not versioned and the license/redistribution story is fuzzy.\n * Prod hosts should install it once via apt/brew/manual, then pin via\n * env var so CI is reproducible.\n */\nexport async function resolveTransporter(): Promise<string> {\n  // 1. Env override — the canonical path for prod\n  const override = process.env.ITMSTRANSPORTER_BIN;\n  if (override) {\n    if (!existsSync(override)) {\n      throw new Error(\n        `ITMSTRANSPORTER_BIN is set to \"${override}\" but that path does not exist.`\n      );\n    }\n    return override;\n  }\n\n  // 2. Well-known system paths, in preferred order per OS\n  const candidates =\n    process.platform === \"darwin\"\n      ? [\n          // Xcode 15+: Transporter.app bundled with Xcode\n          \"/Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/Versions/A/itms/bin/iTMSTransporter\",\n          // Standalone Transporter.app from the Mac App Store\n          \"/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter\",\n        ]\n      : [\n          \"/usr/local/itms/bin/iTMSTransporter\",\n          \"/opt/itms/bin/iTMSTransporter\",\n          \"/usr/local/bin/iTMSTransporter\",\n        ];\n\n  for (const path of candidates) {\n    if (existsSync(path)) return path;\n  }\n\n  throw new Error(\n    [\n      \"iTMSTransporter not found.\",\n      \"\",\n      \"Install options:\",\n      process.platform === \"darwin\"\n        ? \"  - Install Xcode (includes Transporter)\"\n        : \"  - Download Apple's standalone iTMSTransporter package for Linux\",\n      \"  - Or set ITMSTRANSPORTER_BIN to the absolute path of the binary\",\n      \"\",\n      `Searched: ${candidates.join(\", \")}`,\n    ].join(\"\\n\")\n  );\n}\n\n/**\n * Verify that Java is available on PATH. iTMSTransporter is a Java\n * application and won't run without a JRE.\n */\nexport async function verifyJava(): Promise<{ version: string }> {\n  return new Promise((resolve, reject) => {\n    const child = spawn(\"java\", [\"-version\"], { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n    let stderr = \"\";\n    child.stderr.on(\"data\", (d: Buffer) => {\n      stderr += d.toString();\n    });\n    child.on(\"error\", (err) => {\n      reject(\n        new Error(\n          `java not found on PATH (${err.message}). Install Java 17 LTS and ensure it is on PATH.`\n        )\n      );\n    });\n    child.on(\"close\", (code) => {\n      if (code !== 0) {\n        reject(new Error(`java -version exited ${code}: ${stderr}`));\n        return;\n      }\n      // Output format: `openjdk version \"17.0.8\" 2023-07-18 ...`\n      const match = stderr.match(/version \"([^\"]+)\"/);\n      resolve({ version: match?.[1] ?? \"unknown\" });\n    });\n  });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { writeFile, mkdtemp, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { PilotUploadOptions, UploadResult } from \"./types.js\";\nimport { resolveTransporter, verifyJava } from \"./transporter-install.js\";\n\n/**\n * Upload a build to TestFlight via Apple's iTMSTransporter (Java).\n *\n * This path works on Linux (and macOS) and does NOT require Xcode.\n * It is the primary upload path for the ship worker LXC.\n *\n * iTMSTransporter reads the ASC API private key from a directory\n * named by API_PRIVATE_KEYS_DIR, looking for the file `AuthKey_<keyId>.p8`.\n */\nexport async function uploadWithTransporter(\n  options: PilotUploadOptions\n): Promise<UploadResult> {\n  if (!existsSync(options.ipaPath)) {\n    throw new Error(`File not found: ${options.ipaPath}`);\n  }\n\n  // Fail fast if Java is missing — avoids a cryptic exec error deep inside\n  // Transporter. This is cheap (~20ms) and only runs once per upload.\n  await verifyJava();\n\n  const transporterBin = await resolveTransporter();\n\n  const platform = options.platform ?? \"ios\";\n  const timeout = options.timeout ?? 1_800_000; // 30 min\n\n  // Write temp .p8 key file\n  const keyDir = await mkdtemp(join(tmpdir(), \"fastnode-itms-\"));\n  const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n  await writeFile(keyPath, options.apiPrivateKey);\n\n  return new Promise<UploadResult>((resolve) => {\n    const args = [\n      \"-m\", \"upload\",\n      \"-assetFile\", options.ipaPath,\n      \"-apiKey\", options.apiKeyId,\n      \"-apiIssuer\", options.apiIssuerId,\n      // WONoPause prevents the JVM from waiting on stdin in non-TTY\n      // environments (CI, LaunchAgent) where it would hang forever.\n      \"-WONoPause\", \"true\",\n    ];\n\n    // Transporter distinguishes iOS vs macOS/tvOS via a -bundleType flag\n    // on some code paths. For standard IPAs the protocol is platform-aware\n    // via the asset itself, so we only pass the hint when it's non-default.\n    if (platform !== \"ios\") {\n      args.push(\"-bundleType\", platform);\n    }\n\n    const child = spawn(transporterBin, args, {\n      env: {\n        ...process.env,\n        API_PRIVATE_KEYS_DIR: keyDir,\n      },\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n\n    let output = \"\";\n    const timer = setTimeout(() => {\n      child.kill(\"SIGTERM\");\n    }, timeout);\n\n    const onData = (data: Buffer) => {\n      const chunk = data.toString();\n      output += chunk;\n      options.onOutput?.(chunk);\n    };\n\n    child.stdout.on(\"data\", onData);\n    child.stderr.on(\"data\", onData);\n\n    child.on(\"close\", async (code) => {\n      clearTimeout(timer);\n      await rm(keyDir, { recursive: true, force: true }).catch(() => {});\n      resolve({ success: code === 0, output, backend: \"transporter\" });\n    });\n\n    child.on(\"error\", async (err) => {\n      clearTimeout(timer);\n      await rm(keyDir, { recursive: true, force: true }).catch(() => {});\n      resolve({\n        success: false,\n        output: output + `\\nProcess error: ${err.message}`,\n        backend: \"transporter\",\n      });\n    });\n  });\n}\n","/**\n * Classify upload failures into transient vs. permanent buckets.\n *\n * Apple's App Store Connect / iTMSTransporter backend is flaky:\n * the finalize step (\"CHANGE UPLOAD STATE TO COMPLETE\") periodically\n * returns 500, and the Java transporter surfaces various connection\n * errors during long uploads. These are all safe to retry — the IPA\n * is deterministic and Apple deduplicates on build number.\n *\n * Non-transient errors (invalid binary, duplicate build number, auth\n * failure) should NOT be retried — they will never succeed without\n * the caller taking some action.\n */\n\nexport type TransientUploadError =\n  | \"apple_5xx\"\n  | \"finalize_failed\"\n  | \"network_timeout\"\n  | \"connection_reset\"\n  | \"transporter_jvm_error\";\n\ninterface ClassifierRule {\n  pattern: RegExp;\n  kind: TransientUploadError;\n}\n\nconst RULES: ClassifierRule[] = [\n  // Apple's finalize-upload call returning 5xx — the most common transient\n  // failure we see in practice. Example:\n  //   \"CHANGE UPLOAD STATE TO COMPLETE (UPLOADING ASSET DESCRIPTION):\n  //    received status code 500; internal server error.\"\n  { pattern: /CHANGE UPLOAD STATE TO COMPLETE/i, kind: \"finalize_failed\" },\n\n  // Generic 5xx from ASC backend services\n  { pattern: /status code 5\\d\\d/i, kind: \"apple_5xx\" },\n  { pattern: /internal server error/i, kind: \"apple_5xx\" },\n  { pattern: /Service Unavailable/i, kind: \"apple_5xx\" },\n  { pattern: /Bad Gateway/i, kind: \"apple_5xx\" },\n\n  // Network-level interruptions during the upload body transfer\n  { pattern: /Connection reset/i, kind: \"connection_reset\" },\n  { pattern: /SocketException/i, kind: \"connection_reset\" },\n  { pattern: /Broken pipe/i, kind: \"connection_reset\" },\n\n  // Timeouts — distinct from resets because the other side may have\n  // actually processed the request, so dedupe logic may matter.\n  { pattern: /Read timed out/i, kind: \"network_timeout\" },\n  { pattern: /SocketTimeoutException/i, kind: \"network_timeout\" },\n  { pattern: /Operation timed out/i, kind: \"network_timeout\" },\n\n  // JVM-internal errors from iTMSTransporter (OOM, thread interruption, etc.)\n  { pattern: /java\\.lang\\.OutOfMemoryError/i, kind: \"transporter_jvm_error\" },\n  { pattern: /EOFException/i, kind: \"transporter_jvm_error\" },\n];\n\n/**\n * Returns the transient-error kind if the output matches any known\n * retry-worthy pattern, or `null` if the error is non-transient.\n */\nexport function classifyUploadError(output: string): TransientUploadError | null {\n  for (const { pattern, kind } of RULES) {\n    if (pattern.test(output)) return kind;\n  }\n  return null;\n}\n\n/**\n * Convenience: `true` if the upload should be retried.\n */\nexport function isTransientUploadError(output: string): boolean {\n  return classifyUploadError(output) !== null;\n}\n","import emojiRegex from \"emoji-regex\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport { AppStoreConnectError } from \"../client/request.js\";\nimport type { Build } from \"../types/index.js\";\nimport type {\n  PilotUploadOptions,\n  UploadBackend,\n  UploadResult,\n} from \"./types.js\";\nimport { uploadWithAltool } from \"./upload-altool.js\";\nimport { uploadWithTransporter } from \"./upload-transporter.js\";\n\nexport type { PilotUploadOptions, UploadBackend, UploadResult } from \"./types.js\";\nexport { uploadWithAltool } from \"./upload-altool.js\";\nexport { uploadWithTransporter } from \"./upload-transporter.js\";\nexport {\n  classifyUploadError,\n  isTransientUploadError,\n} from \"./classify.js\";\nexport type { TransientUploadError } from \"./classify.js\";\nexport { resolveTransporter, verifyJava } from \"./transporter-install.js\";\n\nexport interface PilotDistributeOptions {\n  client: AppStoreConnectClient;\n  buildId: string;\n  groupNames?: string[];\n  changelog?: string;\n  locale?: string;\n  expirePreviousBuilds?: boolean;\n  submitForReview?: boolean;\n}\n\n// ── Upload ─────────────────────────────────────────────────────────────────\n\n/**\n * Upload a build to TestFlight.\n *\n * Selects the upload backend based on the host OS:\n *   - macOS → altool (ships with Xcode CLI)\n *   - Linux → iTMSTransporter (standalone Java tool from Apple)\n *\n * Pass `backend` to force a specific path, e.g. for testing the\n * Linux path on a mac dev machine.\n */\nexport async function uploadToTestFlight(\n  options: PilotUploadOptions\n): Promise<UploadResult> {\n  const backend = selectBackend(options.backend ?? \"auto\");\n  if (backend === \"altool\") {\n    return uploadWithAltool(options);\n  }\n  return uploadWithTransporter(options);\n}\n\nfunction selectBackend(pref: UploadBackend | \"auto\"): UploadBackend {\n  if (pref !== \"auto\") return pref;\n  return process.platform === \"darwin\" ? \"altool\" : \"transporter\";\n}\n\n// ── Wait for Processing ────────────────────────────────────────────────────\n\nexport async function waitForProcessing(\n  client: AppStoreConnectClient,\n  params: {\n    bundleId: string;\n    buildNumber: string;\n    appVersion: string;\n    timeout?: number;\n    pollInterval?: number;\n  }\n): Promise<Build> {\n  const timeout = params.timeout ?? 1_800_000; // 30 min\n  const pollInterval = params.pollInterval ?? 30_000; // 30s\n  const deadline = Date.now() + timeout;\n\n  // Find app\n  const app = await client.apps.findByBundleId(params.bundleId);\n  if (!app) throw new Error(`App not found for bundle ID: ${params.bundleId}`);\n\n  while (Date.now() < deadline) {\n    const builds = await client.builds.list({\n      filter: {\n        app: app.id,\n        version: params.buildNumber,\n        \"preReleaseVersion.version\": params.appVersion,\n      },\n      limit: 1,\n    });\n\n    if (builds.length > 0) {\n      const build = builds[0];\n      const state = build.attributes.processingState;\n\n      if (state === \"VALID\") return build;\n      if (state === \"FAILED\" || state === \"INVALID\") {\n        throw new Error(`Build processing ${state}: ${params.buildNumber}`);\n      }\n    }\n\n    await sleep(pollInterval);\n  }\n\n  throw new Error(\n    `Timeout waiting for build ${params.buildNumber} after ${timeout / 1000}s`\n  );\n}\n\n// ── Distribute ─────────────────────────────────────────────────────────────\n\nexport async function distributeToGroups(\n  options: PilotDistributeOptions\n): Promise<string[]> {\n  const groupNames = options.groupNames ?? [];\n  if (groupNames.length === 0) return [];\n\n  // Get the build's app\n  const build = await options.client.builds.get(options.buildId, {\n    include: \"app\",\n  });\n  const appId =\n    build.relationships?.app?.data?.id;\n  if (!appId) throw new Error(\"Could not determine app for build\");\n\n  // Set changelog if provided\n  if (options.changelog) {\n    await setChangelog({\n      client: options.client,\n      buildId: options.buildId,\n      changelog: options.changelog,\n      locale: options.locale,\n    });\n  }\n\n  // Expire previous builds if requested\n  if (options.expirePreviousBuilds) {\n    const allBuilds = await options.client.builds.list({\n      filter: { app: appId, expired: \"false\" },\n      limit: 50,\n    });\n    for (const b of allBuilds) {\n      if (b.id !== options.buildId) {\n        await options.client.builds.expireBuild(b.id).catch(() => {});\n      }\n    }\n  }\n\n  // Find and add to groups\n  const allGroups = await options.client.betaGroups.listForApp(appId);\n  const matched: string[] = [];\n\n  for (const name of groupNames) {\n    const group = allGroups.find((g) => g.attributes.name === name);\n    if (!group) continue;\n\n    try {\n      await options.client.betaGroups.addBuilds(group.id, [options.buildId]);\n      matched.push(name);\n    } catch (err) {\n      // 409 = already added, that's fine\n      if (err instanceof AppStoreConnectError && err.status === 409) {\n        matched.push(name);\n      }\n    }\n  }\n\n  // Submit for beta review if requested\n  if (options.submitForReview) {\n    try {\n      await options.client.builds.submitForBetaReview(options.buildId);\n    } catch {\n      // May already be submitted\n    }\n  }\n\n  return matched;\n}\n\n// ── Changelog ──────────────────────────────────────────────────────────────\n\nexport async function setChangelog(options: {\n  client: AppStoreConnectClient;\n  buildId: string;\n  changelog: string;\n  locale?: string;\n}): Promise<void> {\n  const locale = options.locale ?? \"en-US\";\n  const sanitized = sanitizeChangelog(options.changelog);\n\n  const localizations = await options.client.builds.getLocalizations(\n    options.buildId\n  );\n  const existing = localizations.find(\n    (l) => l.attributes.locale === locale\n  );\n\n  if (existing) {\n    await options.client.builds.updateLocalization(existing.id, {\n      whatsNew: sanitized,\n    });\n  } else {\n    await options.client.builds.createLocalization({\n      buildId: options.buildId,\n      locale,\n      whatsNew: sanitized,\n    });\n  }\n}\n\n// ── Expire ─────────────────────────────────────────────────────────────────\n\nexport async function expireBuild(\n  client: AppStoreConnectClient,\n  buildId: string\n): Promise<void> {\n  await client.builds.expireBuild(buildId);\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction sanitizeChangelog(text: string): string {\n  // Strip RGI-standard emojis using the `emoji-regex` package — same\n  // approach as Fastlane's pilot (gem `emoji_regex`), which tracks the\n  // Unicode \"Recommended for General Interchange\" spec so new emoji\n  // sequences are covered without hand-maintaining ranges.\n  let sanitized = text.replace(emojiRegex(), \"\");\n\n  // Strip < characters (not allowed by Apple)\n  sanitized = sanitized.replace(/</g, \"\");\n\n  // Truncate to 4000 bytes\n  const encoder = new TextEncoder();\n  const encoded = encoder.encode(sanitized);\n  if (encoded.length > 4000) {\n    const decoder = new TextDecoder();\n    sanitized = decoder.decode(encoded.slice(0, 3997)) + \"...\";\n  }\n\n  return sanitized;\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\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 { 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 { 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","import type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { BundleId, App, BundleIdPlatform, CapabilityType } from \"../types/index.js\";\nimport type { CapabilitySettingInput } from \"../types/capability.js\";\n\nexport interface ProduceOptions {\n  client: AppStoreConnectClient;\n  bundleIdentifier: string;\n  appName: string;\n  platform?: BundleIdPlatform;\n  sku?: string;\n  primaryLocale?: string;\n  companyName?: string;\n  enableServices?: CapabilityType[];\n}\n\n/**\n * Map from Fastlane's `produce` service name → App Store Connect\n * `capabilityType`. Ported 1:1 from `produce/lib/produce/service.rb`'s\n * `valid_services_for` list and `update` method, covering every service\n * that Fastlane supports.\n */\nexport const SERVICE_NAME_TO_CAPABILITY: Record<string, CapabilityType> = {\n  access_wifi: \"ACCESS_WIFI_INFORMATION\",\n  app_attest: \"APP_ATTEST\",\n  // Fastlane uses singular `app_group` — see service.rb line 59 & 105.\n  app_group: \"APP_GROUPS\",\n  apple_pay: \"APPLE_PAY\",\n  associated_domains: \"ASSOCIATED_DOMAINS\",\n  auto_fill_credential: \"AUTOFILL_CREDENTIAL_PROVIDER\",\n  car_play_audio_app: \"CARPLAY_PLAYABLE_CONTENT\",\n  car_play_messaging_app: \"CARPLAY_MESSAGING\",\n  car_play_navigation_app: \"CARPLAY_NAVIGATION\",\n  car_play_voip_calling_app: \"CARPLAY_VOIP\",\n  class_kit: \"CLASSKIT\",\n  declared_age_range: \"DECLARED_AGE_RANGE\",\n  icloud: \"ICLOUD\",\n  critical_alerts: \"CRITICAL_ALERTS\",\n  custom_network_protocol: \"NETWORK_CUSTOM_PROTOCOL\",\n  data_protection: \"DATA_PROTECTION\",\n  extended_virtual_address_space: \"EXTENDED_VIRTUAL_ADDRESSING\",\n  file_provider_testing_mode: \"FILEPROVIDER_TESTINGMODE\",\n  family_controls: \"FAMILY_CONTROLS\",\n  fonts: \"FONT_INSTALLATION\",\n  game_center: \"GAME_CENTER\",\n  health_kit: \"HEALTHKIT\",\n  hls_interstitial_preview: \"HLS_INTERSTITIAL_PREVIEW\",\n  home_kit: \"HOMEKIT\",\n  hotspot: \"HOT_SPOT\",\n  hotspot_helper: \"HOTSPOT_HELPER_MANAGED\",\n  in_app_purchase: \"IN_APP_PURCHASE\",\n  inter_app_audio: \"INTER_APP_AUDIO\",\n  low_latency_hls: \"COREMEDIA_HLS_LOW_LATENCY\",\n  managed_associated_domains: \"MDM_MANAGED_ASSOCIATED_DOMAINS\",\n  maps: \"MAPS\",\n  multipath: \"MULTIPATH\",\n  network_extension: \"NETWORK_EXTENSIONS\",\n  nfc_tag_reading: \"NFC_TAG_READING\",\n  personal_vpn: \"PERSONAL_VPN\",\n  push_notification: \"PUSH_NOTIFICATIONS\",\n  sign_in_with_apple: \"APPLE_ID_AUTH\",\n  siri_kit: \"SIRIKIT\",\n  system_extension: \"SYSTEM_EXTENSION_INSTALL\",\n  user_management: \"USER_MANAGEMENT\",\n  wallet: \"WALLET\",\n  wireless_accessory: \"WIRELESS_ACCESSORY_CONFIGURATION\",\n  driver_kit: \"DRIVERKIT\",\n  driver_kit_endpoint_security: \"DRIVERKIT_ENDPOINT_SECURITY\",\n  driver_kit_family_hid_device: \"DRIVERKIT_HID_DEVICE\",\n  driver_kit_family_networking: \"DRIVERKIT_NETWORKING\",\n  driver_kit_family_serial: \"DRIVERKIT_SERIAL\",\n  driver_kit_hid_event_service: \"DRIVERKIT_HID_EVENT_SERVICE\",\n  driver_kit_transport_hid: \"DRIVERKIT_HID\",\n  multitasking_camera_access: \"IPAD_CAMERA_MULTITASKING\",\n  sf_universal_link_api: \"SFUNIVERSALLINK_API\",\n  vp9_decoder: \"VP9_DECODER\",\n  music_kit: \"MUSIC_KIT\",\n  shazam_kit: \"SHAZAM_KIT\",\n  communication_notifications: \"USERNOTIFICATIONS_COMMUNICATION\",\n  group_activities: \"GROUP_ACTIVITIES\",\n  health_kit_estimate_recalibration: \"HEALTHKIT_RECALIBRATE_ESTIMATES\",\n  time_sensitive_notifications: \"USERNOTIFICATIONS_TIMESENSITIVE\",\n};\n\n/**\n * Build the `settings` payload for a capability whose service value is\n * more than a plain boolean. Mirrors Fastlane's\n * `Produce::Service#build_settings_for` applied per-service.\n *\n * Returns `undefined` when the service doesn't carry settings or the\n * value is just `true`/`false`.\n */\nexport function buildCapabilitySettings(\n  serviceName: string,\n  value: string | boolean\n): CapabilitySettingInput[] | undefined {\n  if (value === true || value === false) return undefined;\n\n  const wrap = (\n    key: string,\n    optionKey: string\n  ): CapabilitySettingInput[] => [{ key, options: [{ key: optionKey }] }];\n\n  switch (serviceName) {\n    case \"data_protection\":\n      switch (value) {\n        case \"complete\":\n          return wrap(\"DATA_PROTECTION_PERMISSION_LEVEL\", \"COMPLETE_PROTECTION\");\n        case \"unlessopen\":\n          return wrap(\"DATA_PROTECTION_PERMISSION_LEVEL\", \"PROTECTED_UNLESS_OPEN\");\n        case \"untilfirstauth\":\n          return wrap(\n            \"DATA_PROTECTION_PERMISSION_LEVEL\",\n            \"PROTECTED_UNTIL_FIRST_USER_AUTH\"\n          );\n        default:\n          throw new Error(\n            `Unknown value for data_protection: '${value}'. Valid values: 'complete', 'unlessopen', 'untilfirstauth'`\n          );\n      }\n    case \"icloud\":\n      switch (value) {\n        case \"xcode6_compatible\":\n          return wrap(\"ICLOUD_VERSION\", \"XCODE_6\");\n        case \"xcode5_compatible\":\n          return wrap(\"ICLOUD_VERSION\", \"XCODE_5\");\n        default:\n          throw new Error(\n            `Unknown value for icloud: '${value}'. Valid values: 'xcode6_compatible', 'xcode5_compatible'`\n          );\n      }\n    case \"game_center\":\n      switch (value) {\n        case \"mac\":\n          return wrap(\"GAME_CENTER_SETTING\", \"GAME_CENTER_MAC\");\n        case \"ios\":\n          return wrap(\"GAME_CENTER_SETTING\", \"GAME_CENTER_IOS\");\n        default:\n          throw new Error(\n            `Unknown value for game_center: '${value}'. Valid values: 'ios', 'mac'`\n          );\n      }\n    case \"sign_in_with_apple\":\n      return wrap(\"APPLE_ID_AUTH_APP_CONSENT\", \"PRIMARY_APP_CONSENT\");\n    default:\n      return undefined;\n  }\n}\n\nexport async function registerBundleId(options: {\n  client: AppStoreConnectClient;\n  identifier: string;\n  name: string;\n  platform?: BundleIdPlatform;\n}): Promise<BundleId> {\n  // Check if already exists (idempotent)\n  const existing = await options.client.bundleIds.find(options.identifier);\n  if (existing) return existing;\n\n  return options.client.bundleIds.create({\n    identifier: options.identifier,\n    name: options.name,\n    platform: options.platform ?? \"IOS\",\n  });\n}\n\nexport async function addCapability(options: {\n  client: AppStoreConnectClient;\n  bundleIdId: string;\n  capabilityType: CapabilityType;\n  settings?: CapabilitySettingInput[];\n}): Promise<void> {\n  await options.client.capabilities.enable({\n    bundleIdId: options.bundleIdId,\n    capabilityType: options.capabilityType,\n    settings: options.settings,\n  });\n}\n\nexport async function removeCapability(options: {\n  client: AppStoreConnectClient;\n  capabilityId: string;\n}): Promise<void> {\n  await options.client.capabilities.disable(options.capabilityId);\n}\n\nexport async function listCapabilities(options: {\n  client: AppStoreConnectClient;\n  bundleIdId: string;\n}) {\n  return options.client.capabilities.listForBundleId(options.bundleIdId);\n}\n\nexport async function enableServices(options: {\n  client: AppStoreConnectClient;\n  bundleIdId: string;\n  /**\n   * Service names (Fastlane style, e.g. `data_protection`, `icloud`).\n   * Pass either a plain list of names or a record of name → value, where\n   * the value either is `true` or one of the per-service variants handled\n   * by `buildCapabilitySettings`.\n   */\n  services: string[] | Record<string, string | boolean>;\n}): Promise<void> {\n  const entries: Array<[string, string | boolean]> = Array.isArray(\n    options.services\n  )\n    ? options.services.map((s) => [s, true])\n    : Object.entries(options.services);\n\n  for (const [service, value] of entries) {\n    if (value === false) continue;\n    const capType = SERVICE_NAME_TO_CAPABILITY[service];\n    if (!capType) continue;\n    const settings = buildCapabilitySettings(service, value);\n    await addCapability({\n      client: options.client,\n      bundleIdId: options.bundleIdId,\n      capabilityType: capType,\n      settings,\n    });\n  }\n}\n\nexport async function createApp(options: ProduceOptions): Promise<App> {\n  // Check if app already exists\n  const existing = await options.client.apps.findByBundleId(options.bundleIdentifier);\n  if (existing) return existing;\n\n  // Register bundle ID\n  const bundleId = await registerBundleId({\n    client: options.client,\n    identifier: options.bundleIdentifier,\n    name: options.appName,\n    platform: options.platform,\n  });\n\n  // Enable services\n  if (options.enableServices) {\n    for (const service of options.enableServices) {\n      await addCapability({\n        client: options.client,\n        bundleIdId: bundleId.id,\n        capabilityType: service,\n      });\n    }\n  }\n\n  // Create app on App Store Connect\n  return options.client.apps.create({\n    bundleIdentifier: options.bundleIdentifier,\n    bundleIdId: bundleId.id,\n    appName: options.appName,\n    sku: options.sku ?? `${options.bundleIdentifier}.${Date.now()}`,\n    primaryLocale: options.primaryLocale,\n  });\n}\n","import { registerAction } from \"../index.js\";\nimport type { AppStoreConnectClient } from \"../../client/index.js\";\n\nregisterAction({\n  name: \"upload_to_testflight\",\n  aliases: [\"pilot\", \"testflight\"],\n  description: \"Upload a build to TestFlight\",\n  async run(params, ctx) {\n    const pilot = await import(\"../../pilot/index.js\");\n\n    // Upload if IPA provided\n    const ipaPath = (params.ipa ?? ctx.get(\"IPA_OUTPUT_PATH\")) as string | undefined;\n    if (ipaPath && params.api_key_id) {\n      const uploadResult = await pilot.uploadToTestFlight({\n        ipaPath,\n        apiKeyId: params.api_key_id as string,\n        apiIssuerId: params.api_issuer_id as string,\n        apiPrivateKey: params.api_private_key as string,\n        onOutput: params.on_output as ((chunk: string) => void) | undefined,\n      });\n      if (!uploadResult.success) {\n        throw new Error(`Upload failed: ${uploadResult.output.slice(-500)}`);\n      }\n    }\n\n    // Wait for processing\n    const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n    if (client && params.bundle_id && params.build_number) {\n      const build = await pilot.waitForProcessing(client, {\n        bundleId: params.bundle_id as string,\n        buildNumber: String(params.build_number),\n        appVersion: (params.app_version ?? \"1.0\") as string,\n      });\n      ctx.set(\"PILOT_BUILD_ID\", build.id);\n\n      // Distribute\n      const groups = (params.groups ?? params.beta_groups) as string[] | undefined;\n      if (groups && groups.length > 0) {\n        await pilot.distributeToGroups({\n          client,\n          buildId: build.id,\n          groupNames: groups,\n          changelog: params.changelog as string | undefined,\n        });\n      }\n\n      // Changelog\n      if (params.changelog && !groups) {\n        await pilot.setChangelog({\n          client,\n          buildId: build.id,\n          changelog: params.changelog as string,\n          locale: params.locale as string | undefined,\n        });\n      }\n\n      return build;\n    }\n\n    return { uploaded: true };\n  },\n});\n\nregisterAction({\n  name: \"upload_to_app_store\",\n  aliases: [\"deliver\", \"appstore\"],\n  description: \"Upload metadata and binary to App Store Connect\",\n  async run(params, ctx) {\n    const { uploadToAppStore } = await import(\"../../deliver/index.js\");\n    const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n    if (!client) throw new Error(\"deliver: client is required\");\n    return uploadToAppStore({\n      client,\n      bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n      appVersion: params.app_version as string | undefined,\n      ipaPath: (params.ipa ?? ctx.get(\"IPA_OUTPUT_PATH\")) as string | undefined,\n      metadataPath: params.metadata_path as string | undefined,\n      screenshotsPath: params.screenshots_path as string | undefined,\n      submitForReview: params.submit_for_review as boolean | undefined,\n      skipBinaryUpload: params.skip_binary_upload as boolean | undefined,\n      skipMetadata: params.skip_metadata as boolean | undefined,\n      skipScreenshots: params.skip_screenshots as boolean | undefined,\n      force: params.force as boolean | undefined,\n      apiKeyId: params.api_key_id as string | undefined,\n      apiIssuerId: params.api_issuer_id as string | undefined,\n      apiPrivateKey: params.api_private_key as string | undefined,\n      onOutput: params.on_output as ((chunk: string) => void) | undefined,\n    });\n  },\n});\n\nregisterAction({\n  name: \"produce\",\n  aliases: [\"create_app_online\"],\n  description: \"Register a new app on Apple Developer Portal and App Store Connect\",\n  async run(params, ctx) {\n    const { createApp } = await import(\"../../produce/index.js\");\n    const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n    if (!client) throw new Error(\"produce: client is required\");\n    return createApp({\n      client,\n      bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n      appName: (params.app_name ?? params.name) as string,\n      sku: params.sku as string | undefined,\n      primaryLocale: params.primary_locale as string | undefined,\n    });\n  },\n});\n","export interface TestCommandOptions {\n  scheme?: string;\n  workspace?: string;\n  project?: string;\n  destination?: string;\n  devices?: string[];\n  testPlan?: string;\n  onlyTesting?: string[];\n  skipTesting?: string[];\n  configuration?: string;\n  derivedDataPath?: string;\n  resultBundlePath?: string;\n  codeCoverage?: boolean;\n  xcargs?: string;\n  clean?: boolean;\n  // ── Parallel testing (Fastlane scan parity) ──────────────────────────────\n  /** Enable `-parallel-testing-enabled YES`. */\n  parallelTesting?: boolean;\n  /** Sets `-parallel-testing-worker-count`. */\n  concurrentWorkers?: number;\n  /** Sets `-maximum-concurrent-test-simulator-destinations`. */\n  maxConcurrentSimulators?: number;\n  /** Explicitly disable concurrent destinations (`-disable-concurrent-destination-testing`). */\n  disableConcurrentTesting?: boolean;\n  // ── Sanitizers ───────────────────────────────────────────────────────────\n  addressSanitizer?: boolean;\n  threadSanitizer?: boolean;\n  undefinedBehaviorSanitizer?: boolean;\n}\n\nexport function buildTestCommand(options: TestCommandOptions): string[] {\n  const args: string[] = [];\n\n  if (options.clean) args.push(\"clean\");\n  args.push(\"test\");\n\n  if (options.workspace) args.push(\"-workspace\", options.workspace);\n  else if (options.project) args.push(\"-project\", options.project);\n\n  if (options.scheme) args.push(\"-scheme\", options.scheme);\n\n  // Destination\n  if (options.destination) {\n    args.push(\"-destination\", options.destination);\n  } else if (options.devices && options.devices.length > 0) {\n    for (const device of options.devices) {\n      args.push(\"-destination\", `platform=iOS Simulator,name=${device}`);\n    }\n  }\n\n  if (options.testPlan) args.push(\"-testPlan\", options.testPlan);\n  if (options.configuration) args.push(\"-configuration\", options.configuration);\n  if (options.derivedDataPath) args.push(\"-derivedDataPath\", options.derivedDataPath);\n  if (options.resultBundlePath) args.push(\"-resultBundlePath\", options.resultBundlePath);\n\n  if (options.codeCoverage) args.push(\"-enableCodeCoverage\", \"YES\");\n\n  if (options.onlyTesting) {\n    for (const test of options.onlyTesting) {\n      args.push(\"-only-testing:\" + test);\n    }\n  }\n  if (options.skipTesting) {\n    for (const test of options.skipTesting) {\n      args.push(\"-skip-testing:\" + test);\n    }\n  }\n\n  // Parallel testing flags (xcodebuild native, not xcargs)\n  if (options.parallelTesting !== undefined) {\n    args.push(\"-parallel-testing-enabled\", options.parallelTesting ? \"YES\" : \"NO\");\n  }\n  if (options.concurrentWorkers !== undefined) {\n    args.push(\"-parallel-testing-worker-count\", String(options.concurrentWorkers));\n  }\n  if (options.maxConcurrentSimulators !== undefined) {\n    args.push(\n      \"-maximum-concurrent-test-simulator-destinations\",\n      String(options.maxConcurrentSimulators)\n    );\n  }\n  if (options.disableConcurrentTesting) {\n    args.push(\"-disable-concurrent-destination-testing\");\n  }\n\n  // Runtime sanitizers\n  if (options.addressSanitizer !== undefined) {\n    args.push(\"-enableAddressSanitizer\", options.addressSanitizer ? \"YES\" : \"NO\");\n  }\n  if (options.threadSanitizer !== undefined) {\n    args.push(\"-enableThreadSanitizer\", options.threadSanitizer ? \"YES\" : \"NO\");\n  }\n  if (options.undefinedBehaviorSanitizer !== undefined) {\n    args.push(\n      \"-enableUndefinedBehaviorSanitizer\",\n      options.undefinedBehaviorSanitizer ? \"YES\" : \"NO\"\n    );\n  }\n\n  if (options.xcargs) args.push(...options.xcargs.split(/\\s+/));\n\n  return args;\n}\n","export interface FailedTest {\n  target: string;\n  suite: string;\n  testCase: string;\n  onlyTestingArg: string;\n}\n\nexport function parseFailedTests(output: string): FailedTest[] {\n  const results: FailedTest[] = [];\n  // Strip ANSI color codes\n  const clean = output.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n\n  // Look for \"Failing tests:\" section\n  const failingMatch = clean.match(/Failing tests:\\s*\\n([\\s\\S]*?)(?:\\n\\n|\\n\\*\\*|$)/);\n  if (!failingMatch) return results;\n\n  const lines = failingMatch[1].split(\"\\n\");\n  for (const line of lines) {\n    const trimmed = line.trim();\n    if (!trimmed || trimmed.startsWith(\"*\")) continue;\n\n    // Format: -[TestSuite testMethod] or TestTarget.TestSuite/testMethod\n    const bracketMatch = trimmed.match(/-\\[(\\w+)\\s+(\\w+)\\]/);\n    if (bracketMatch) {\n      results.push({\n        target: \"\",\n        suite: bracketMatch[1],\n        testCase: bracketMatch[2],\n        onlyTestingArg: `${bracketMatch[1]}/${bracketMatch[2]}`,\n      });\n      continue;\n    }\n\n    const slashMatch = trimmed.match(/^(\\w+)\\.(\\w+)\\/(\\w+)$/);\n    if (slashMatch) {\n      results.push({\n        target: slashMatch[1],\n        suite: slashMatch[2],\n        testCase: slashMatch[3],\n        onlyTestingArg: `${slashMatch[1]}/${slashMatch[2]}/${slashMatch[3]}`,\n      });\n    }\n  }\n\n  return results;\n}\n","import { spawn } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { mkdirSync, existsSync } from \"node:fs\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport { buildTestCommand } from \"./command.js\";\nimport { parseFailedTests } from \"./retry.js\";\n\nexport type { FailedTest } from \"./retry.js\";\nexport { buildTestCommand } from \"./command.js\";\nexport { parseFailedTests } from \"./retry.js\";\n\nexport interface ScanOptions {\n  scheme?: string;\n  workspace?: string;\n  project?: string;\n  devices?: string[];\n  testPlan?: string;\n  onlyTesting?: string[];\n  skipTesting?: string[];\n  configuration?: string;\n  outputDirectory?: string;\n  clean?: boolean;\n  codeCoverage?: boolean;\n  derivedDataPath?: string;\n  resultBundlePath?: string;\n  maxRetries?: number;\n  xcargs?: string;\n  onOutput?: (chunk: string) => void;\n}\n\nexport interface TestResult {\n  success: boolean;\n  totalTests: number;\n  failures: number;\n  skipped: number;\n  retries: number;\n  duration: number;\n  reportPaths: string[];\n  output: string;\n}\n\nexport async function runTests(options: ScanOptions): Promise<TestResult> {\n  requireMacOS(\"scan\");\n\n  const outputDir = options.outputDirectory ?? join(process.cwd(), \"test_output\");\n  mkdirSync(outputDir, { recursive: true });\n\n  const resultBundlePath = options.resultBundlePath ?? join(outputDir, \"result.xcresult\");\n  const maxRetries = options.maxRetries ?? 0;\n  let retryCount = 0;\n  let lastOutput = \"\";\n  let currentOnlyTesting = options.onlyTesting;\n\n  const startTime = Date.now();\n\n  for (let attempt = 0; attempt <= maxRetries; attempt++) {\n    const args = buildTestCommand({\n      ...options,\n      resultBundlePath: attempt === 0 ? resultBundlePath : `${resultBundlePath}-retry-${attempt}`,\n      onlyTesting: currentOnlyTesting,\n    });\n\n    const result = await runXcodebuild(args, options.onOutput);\n    lastOutput = result.output;\n\n    if (result.exitCode === 0) {\n      // Tests passed\n      break;\n    }\n\n    if (attempt < maxRetries) {\n      // Parse failures for retry\n      const failed = parseFailedTests(result.output);\n      if (failed.length === 0) break; // No parseable failures\n\n      currentOnlyTesting = failed.map((f) => f.onlyTestingArg);\n      retryCount++;\n    }\n  }\n\n  // Parse test counts from output\n  const counts = parseTestCounts(lastOutput);\n  const duration = (Date.now() - startTime) / 1000;\n\n  return {\n    success: counts.failures === 0,\n    totalTests: counts.total,\n    failures: counts.failures,\n    skipped: counts.skipped,\n    retries: retryCount,\n    duration,\n    reportPaths: existsSync(resultBundlePath) ? [resultBundlePath] : [],\n    output: lastOutput,\n  };\n}\n\nfunction runXcodebuild(\n  args: string[],\n  onOutput?: (chunk: string) => void\n): Promise<{ exitCode: number; output: string }> {\n  return new Promise((resolve) => {\n    const child = spawn(\"xcodebuild\", args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n    let output = \"\";\n\n    child.stdout.on(\"data\", (data: Buffer) => {\n      const chunk = data.toString();\n      output += chunk;\n      onOutput?.(chunk);\n    });\n    child.stderr.on(\"data\", (data: Buffer) => {\n      const chunk = data.toString();\n      output += chunk;\n      onOutput?.(chunk);\n    });\n    child.on(\"close\", (code) => resolve({ exitCode: code ?? 1, output }));\n  });\n}\n\nfunction parseTestCounts(output: string): { total: number; failures: number; skipped: number } {\n  // Match: \"Executed N tests, with M failures (X unexpected) in Y (Z) seconds\"\n  const match = output.match(/Executed (\\d+) tests?, with (\\d+) failures?/);\n  if (match) {\n    return {\n      total: parseInt(match[1], 10),\n      failures: parseInt(match[2], 10),\n      skipped: 0,\n    };\n  }\n  return { total: 0, failures: 0, skipped: 0 };\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SimDevice {\n  udid: string;\n  name: string;\n  state: \"Booted\" | \"Shutdown\" | \"Shutting Down\" | \"Creating\";\n  isAvailable: boolean;\n  runtime: string;\n  deviceTypeIdentifier: string;\n}\n\ninterface SimctlDevicesJson {\n  devices: Record<\n    string,\n    Array<{\n      udid: string;\n      name: string;\n      state: string;\n      isAvailable: boolean;\n      deviceTypeIdentifier: string;\n    }>\n  >;\n}\n\n// ── Simulator Listing & Lookup ─────────────────────────────────────────────\n\nexport async function listSimulators(): Promise<SimDevice[]> {\n  requireMacOS(\"Simulator management\");\n  const { stdout } = await execFileAsync(\"xcrun\", [\"simctl\", \"list\", \"devices\", \"-j\"]);\n  const parsed: SimctlDevicesJson = JSON.parse(stdout);\n  const devices: SimDevice[] = [];\n  for (const [runtimeId, runtimeDevices] of Object.entries(parsed.devices)) {\n    for (const dev of runtimeDevices) {\n      devices.push({\n        udid: dev.udid,\n        name: dev.name,\n        state: dev.state as SimDevice[\"state\"],\n        isAvailable: dev.isAvailable,\n        runtime: runtimeId,\n        deviceTypeIdentifier: dev.deviceTypeIdentifier,\n      });\n    }\n  }\n  return devices;\n}\n\nexport async function findDevice(\n  deviceName: string,\n  runtimeFilter?: string,\n): Promise<SimDevice | null> {\n  const devices = await listSimulators();\n  const candidates = devices.filter((d) => {\n    if (!d.isAvailable) return false;\n    if (d.name !== deviceName) return false;\n    if (runtimeFilter && !d.runtime.includes(runtimeFilter)) return false;\n    return true;\n  });\n  if (candidates.length === 0) return null;\n  const booted = candidates.find((d) => d.state === \"Booted\");\n  return booted ?? candidates[0];\n}\n\n// ── Boot / Shutdown / Erase ────────────────────────────────────────────────\n\nexport async function bootSimulator(udid: string): Promise<void> {\n  requireMacOS(\"Simulator management\");\n  const devices = await listSimulators();\n  const device = devices.find((d) => d.udid === udid);\n  if (device?.state === \"Booted\") return;\n  await execFileAsync(\"xcrun\", [\"simctl\", \"boot\", udid]);\n  const deadline = Date.now() + 30_000;\n  while (Date.now() < deadline) {\n    const refreshed = await listSimulators();\n    const current = refreshed.find((d) => d.udid === udid);\n    if (current?.state === \"Booted\") return;\n    await new Promise((r) => setTimeout(r, 1000));\n  }\n}\n\nexport async function shutdownAll(): Promise<void> {\n  requireMacOS(\"Simulator management\");\n  await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", \"all\"]);\n}\n\nexport async function eraseSimulator(udid: string): Promise<void> {\n  requireMacOS(\"Simulator management\");\n  const devices = await listSimulators();\n  const device = devices.find((d) => d.udid === udid);\n  if (device?.state === \"Booted\") {\n    await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", udid]);\n  }\n  await execFileAsync(\"xcrun\", [\"simctl\", \"erase\", udid]);\n}\n\n// ── Locale / Language ──────────────────────────────────────────────────────\n\nexport async function localizeSimulator(\n  udid: string,\n  language: string,\n  locale?: string,\n): Promise<void> {\n  requireMacOS(\"Simulator management\");\n  const deviceDataPath = getDeviceDataPath(udid);\n  const prefsDir = join(deviceDataPath, \"data\", \"Library\", \"Preferences\");\n  const prefsFile = join(prefsDir, \".GlobalPreferences.plist\");\n  if (!existsSync(prefsDir)) {\n    mkdirSync(prefsDir, { recursive: true });\n  }\n  const effectiveLocale = locale ?? language.replace(\"-\", \"_\");\n  const plistXml = [\n    '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n    '<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">',\n    '<plist version=\"1.0\">',\n    \"<dict>\",\n    \"  <key>AppleLanguages</key>\",\n    \"  <array>\",\n    \"    <string>\" + escapeXml(language) + \"</string>\",\n    \"  </array>\",\n    \"  <key>AppleLocale</key>\",\n    \"  <string>\" + escapeXml(effectiveLocale) + \"</string>\",\n    \"  <key>AppleKeyboards</key>\",\n    \"  <array>\",\n    \"    <string>\" + escapeXml(effectiveLocale) + \"@sw=QWERTY;hw=Automatic</string>\",\n    \"  </array>\",\n    \"  <key>AppleKeyboardsExpanded</key>\",\n    \"  <integer>1</integer>\",\n    \"</dict>\",\n    \"</plist>\",\n  ].join(\"\\n\");\n  writeFileSync(prefsFile, plistXml, \"utf-8\");\n  try {\n    await execFileAsync(\"plutil\", [\"-convert\", \"binary1\", prefsFile]);\n  } catch {\n    // XML plist is still readable\n  }\n}\n\n// ── UI Customization ───────────────────────────────────────────────────────\n\nexport async function setInterfaceStyle(\n  udid: string,\n  style: \"light\" | \"dark\",\n): Promise<void> {\n  requireMacOS(\"Simulator management\");\n  const appearance = style === \"dark\" ? \"dark\" : \"light\";\n  await execFileAsync(\"xcrun\", [\"simctl\", \"ui\", udid, \"appearance\", appearance]);\n}\n\nexport async function overrideStatusBar(\n  udid: string,\n  options?: {\n    time?: string;\n    batteryLevel?: number;\n    batteryState?: \"charged\" | \"charging\" | \"discharging\";\n    wifiMode?: \"active\" | \"searching\" | \"failed\";\n    cellularMode?: \"active\" | \"searching\" | \"failed\" | \"notSupported\";\n    dataNetwork?: \"wifi\" | \"3g\" | \"4g\" | \"lte\" | \"lte-a\" | \"lte+\" | \"5g\" | \"5g+\" | \"5g-uwb\";\n  },\n): Promise<void> {\n  requireMacOS(\"Simulator management\");\n  const args = [\n    \"simctl\", \"status_bar\", udid, \"override\",\n    \"--time\", options?.time ?? \"9:41\",\n    \"--batteryLevel\", String(options?.batteryLevel ?? 100),\n    \"--batteryState\", options?.batteryState ?? \"charged\",\n    \"--wifiMode\", options?.wifiMode ?? \"active\",\n    \"--wifiBars\", \"3\",\n    \"--cellularMode\", options?.cellularMode ?? \"active\",\n    \"--cellularBars\", \"4\",\n  ];\n  if (options?.dataNetwork) {\n    args.push(\"--dataNetwork\", options.dataNetwork);\n  }\n  await execFileAsync(\"xcrun\", args);\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction getDeviceDataPath(udid: string): string {\n  const home = process.env.HOME ?? process.env.USERPROFILE ?? \"/tmp\";\n  return join(home, \"Library\", \"Developer\", \"CoreSimulator\", \"Devices\", udid);\n}\n\nfunction escapeXml(str: string): string {\n  return str\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n","import { execFile, spawn } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, mkdirSync, readdirSync, copyFileSync } from \"node:fs\";\nimport { join, basename, extname } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport {\n  findDevice,\n  bootSimulator,\n  shutdownAll,\n  localizeSimulator,\n  overrideStatusBar,\n  eraseSimulator,\n} from \"./simulator.js\";\nimport type { SimDevice } from \"./simulator.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Re-export simulator utilities ──────────────────────────────────────────\n\nexport {\n  listSimulators,\n  findDevice,\n  bootSimulator,\n  shutdownAll,\n  eraseSimulator,\n  localizeSimulator,\n  setInterfaceStyle,\n  overrideStatusBar,\n} from \"./simulator.js\";\n\nexport type { SimDevice } from \"./simulator.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SnapshotOptions {\n  scheme?: string;\n  workspace?: string;\n  project?: string;\n  devices: string[];\n  languages: string[];\n  outputDirectory?: string;\n  clearPreviousScreenshots?: boolean;\n  launchArguments?: string[];\n  concurrent?: boolean;\n  numberOfRetries?: number;\n  darkMode?: boolean;\n  overrideStatusBar?: boolean;\n  eraseSimulatorBeforeRun?: boolean;\n  derivedDataPath?: string;\n  testPlan?: string;\n  configuration?: string;\n  xcargs?: string;\n  onOutput?: (chunk: string) => void;\n}\n\nexport interface ScreenshotResult {\n  success: boolean;\n  screenshots: Record<string, Record<string, string[]>>;\n  failedDevices: string[];\n}\n\n// ── Main Entry Point ───────────────────────────────────────────────────────\n\n/**\n * Capture screenshots across a device x language matrix.\n *\n * Mirrors Fastlane snapshot's runner:\n *  1. Validate macOS\n *  2. Build device x language matrix\n *  3. For each combination: boot sim, set locale, run xcodebuild test, collect screenshots\n *  4. Return aggregated ScreenshotResult\n */\nexport async function captureScreenshots(\n  options: SnapshotOptions,\n): Promise<ScreenshotResult> {\n  requireMacOS(\"Screenshot capture\");\n\n  // Validate required options\n  if (!options.scheme && !options.workspace && !options.project) {\n    throw new Error(\n      \"At least one of scheme, workspace, or project must be specified\",\n    );\n  }\n  if (options.devices.length === 0) {\n    throw new Error(\"At least one device must be specified\");\n  }\n  if (options.languages.length === 0) {\n    throw new Error(\"At least one language must be specified\");\n  }\n\n  const outputDir = options.outputDirectory ?? join(process.cwd(), \"screenshots\");\n  const retries = options.numberOfRetries ?? 1;\n\n  // Clear previous screenshots if requested\n  if (options.clearPreviousScreenshots && existsSync(outputDir)) {\n    const { rm } = await import(\"node:fs/promises\");\n    await rm(outputDir, { recursive: true, force: true });\n  }\n\n  mkdirSync(outputDir, { recursive: true });\n\n  const screenshots: Record<string, Record<string, string[]>> = {};\n  const failedDevices: string[] = [];\n\n  // Build the device x language matrix\n  const matrix = buildMatrix(options.devices, options.languages);\n\n  if (options.concurrent) {\n    // Run all combinations in parallel\n    const results = await Promise.allSettled(\n      matrix.map((entry) =>\n        runSingleCombination(entry, options, outputDir, retries),\n      ),\n    );\n\n    for (let i = 0; i < results.length; i++) {\n      const result = results[i];\n      const entry = matrix[i];\n      if (result.status === \"fulfilled\") {\n        mergeScreenshots(screenshots, result.value);\n      } else {\n        const key = entry.device + \" / \" + entry.language;\n        failedDevices.push(key);\n      }\n    }\n  } else {\n    // Run sequentially\n    for (const entry of matrix) {\n      try {\n        const result = await runSingleCombination(\n          entry,\n          options,\n          outputDir,\n          retries,\n        );\n        mergeScreenshots(screenshots, result);\n      } catch {\n        const key = entry.device + \" / \" + entry.language;\n        failedDevices.push(key);\n      }\n    }\n  }\n\n  return {\n    success: failedDevices.length === 0,\n    screenshots,\n    failedDevices,\n  };\n}\n\n// ── Internal: Matrix Construction ──────────────────────────────────────────\n\ninterface MatrixEntry {\n  device: string;\n  language: string;\n}\n\nfunction buildMatrix(devices: string[], languages: string[]): MatrixEntry[] {\n  const entries: MatrixEntry[] = [];\n  for (const device of devices) {\n    for (const language of languages) {\n      entries.push({ device, language });\n    }\n  }\n  return entries;\n}\n\n// ── Internal: Single Combination Runner ────────────────────────────────────\n\nasync function runSingleCombination(\n  entry: MatrixEntry,\n  options: SnapshotOptions,\n  outputDir: string,\n  retries: number,\n): Promise<Record<string, Record<string, string[]>>> {\n  const { device: deviceName, language } = entry;\n\n  // Find the simulator device\n  const simDevice = await findDevice(deviceName);\n  if (!simDevice) {\n    throw new Error(\"Simulator device not found: \" + deviceName);\n  }\n\n  let lastError: Error | null = null;\n\n  for (let attempt = 0; attempt < retries; attempt++) {\n    try {\n      return await runOnSimulator(simDevice, language, options, outputDir);\n    } catch (err) {\n      lastError = err instanceof Error ? err : new Error(String(err));\n      options.onOutput?.(\n        \"Attempt \" + (attempt + 1) + \" failed for \" + deviceName + \" / \" + language + \": \" + lastError.message + \"\\n\",\n      );\n    }\n  }\n\n  throw lastError ?? new Error(\"All retries exhausted\");\n}\n\nasync function runOnSimulator(\n  simDevice: SimDevice,\n  language: string,\n  options: SnapshotOptions,\n  outputDir: string,\n): Promise<Record<string, Record<string, string[]>>> {\n  const udid = simDevice.udid;\n  const deviceName = simDevice.name;\n\n  // Erase simulator if requested\n  if (options.eraseSimulatorBeforeRun) {\n    await eraseSimulator(udid);\n  }\n\n  // Shut down, localize, then boot\n  try {\n    await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", udid]);\n  } catch {\n    // May already be shutdown\n  }\n\n  await localizeSimulator(udid, language);\n  await bootSimulator(udid);\n\n  // Override status bar for clean screenshots\n  if (options.overrideStatusBar !== false) {\n    try {\n      await overrideStatusBar(udid);\n    } catch {\n      // Status bar override may fail on older simulators\n    }\n  }\n\n  // Set dark mode if requested\n  if (options.darkMode) {\n    try {\n      const { setInterfaceStyle } = await import(\"./simulator.js\");\n      await setInterfaceStyle(udid, \"dark\");\n    } catch {\n      // Dark mode may not be available\n    }\n  }\n\n  // Determine the derived data path (used to find screenshots)\n  const derivedDataPath =\n    options.derivedDataPath ??\n    join(outputDir, \".derived-data\", deviceName + \"-\" + language);\n  mkdirSync(derivedDataPath, { recursive: true });\n\n  // Run xcodebuild test\n  const exitCode = await runXcodebuildTest(\n    udid,\n    derivedDataPath,\n    options,\n  );\n\n  if (exitCode !== 0 && exitCode !== 65) {\n    // Exit code 65 = test failures but screenshots may still exist\n    throw new Error(\n      \"xcodebuild test failed with exit code \" + exitCode,\n    );\n  }\n\n  // Collect screenshots from derived data and the simulator's data dir\n  const deviceOutputDir = join(outputDir, deviceName, language);\n  mkdirSync(deviceOutputDir, { recursive: true });\n\n  const collectedPaths = collectScreenshots(derivedDataPath, deviceOutputDir);\n\n  // Also collect from the simulator's screenshot directory\n  const simScreenshotDir = getSimulatorScreenshotDir(udid);\n  if (existsSync(simScreenshotDir)) {\n    const simPaths = collectScreenshots(simScreenshotDir, deviceOutputDir);\n    collectedPaths.push(...simPaths);\n  }\n\n  const result: Record<string, Record<string, string[]>> = {};\n  if (!result[deviceName]) result[deviceName] = {};\n  result[deviceName][language] = collectedPaths;\n\n  return result;\n}\n\n// ── Internal: xcodebuild test ──────────────────────────────────────────────\n\nfunction runXcodebuildTest(\n  udid: string,\n  derivedDataPath: string,\n  options: SnapshotOptions,\n): Promise<number> {\n  return new Promise((resolve) => {\n    const args = buildXcodebuildArgs(udid, derivedDataPath, options);\n\n    const proc = spawn(\"xcodebuild\", args, {\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n\n    let output = \"\";\n\n    proc.stdout.on(\"data\", (chunk: Buffer) => {\n      const text = chunk.toString();\n      output += text;\n      options.onOutput?.(text);\n    });\n\n    proc.stderr.on(\"data\", (chunk: Buffer) => {\n      const text = chunk.toString();\n      output += text;\n      options.onOutput?.(text);\n    });\n\n    proc.on(\"close\", (code) => {\n      resolve(code ?? 1);\n    });\n\n    proc.on(\"error\", () => {\n      resolve(1);\n    });\n  });\n}\n\nfunction buildXcodebuildArgs(\n  udid: string,\n  derivedDataPath: string,\n  options: SnapshotOptions,\n): string[] {\n  const args: string[] = [];\n\n  if (options.workspace) {\n    args.push(\"-workspace\", options.workspace);\n  } else if (options.project) {\n    args.push(\"-project\", options.project);\n  }\n\n  if (options.scheme) {\n    args.push(\"-scheme\", options.scheme);\n  }\n\n  if (options.configuration) {\n    args.push(\"-configuration\", options.configuration);\n  }\n\n  args.push(\n    \"-destination\",\n    \"platform=iOS Simulator,id=\" + udid,\n    \"-derivedDataPath\",\n    derivedDataPath,\n    \"test\",\n  );\n\n  if (options.testPlan) {\n    args.push(\"-testPlan\", options.testPlan);\n  }\n\n  // Append launch arguments as build settings\n  if (options.launchArguments && options.launchArguments.length > 0) {\n    const launchArgsStr = options.launchArguments\n      .map((a) => \"'\" + a + \"'\")\n      .join(\" \");\n    args.push(\"SNAPSHOT_LAUNCH_ARGUMENTS=\" + launchArgsStr);\n  }\n\n  if (options.xcargs) {\n    // Split xcargs by spaces (simple split, doesn't handle quoted strings)\n    args.push(...options.xcargs.split(/\\s+/).filter(Boolean));\n  }\n\n  return args;\n}\n\n// ── Internal: Screenshot Collection ────────────────────────────────────────\n\nfunction collectScreenshots(\n  sourceDir: string,\n  destDir: string,\n): string[] {\n  const collected: string[] = [];\n\n  if (!existsSync(sourceDir)) return collected;\n\n  const screenshotExtensions = new Set([\".png\", \".jpg\", \".jpeg\"]);\n\n  function walk(dir: string): void {\n    let entries: string[];\n    try {\n      entries = readdirSync(dir, { withFileTypes: true }).map((e) => {\n        if (e.isDirectory()) {\n          walk(join(dir, e.name));\n          return \"\";\n        }\n        return e.name;\n      }).filter(Boolean);\n    } catch {\n      return;\n    }\n\n    for (const name of entries) {\n      const ext = extname(name).toLowerCase();\n      if (screenshotExtensions.has(ext)) {\n        const srcPath = join(dir, name);\n        const destPath = join(destDir, basename(name));\n        try {\n          copyFileSync(srcPath, destPath);\n          collected.push(destPath);\n        } catch {\n          // Skip files we can't copy\n        }\n      }\n    }\n  }\n\n  walk(sourceDir);\n  return collected;\n}\n\nfunction getSimulatorScreenshotDir(udid: string): string {\n  const home = process.env.HOME ?? process.env.USERPROFILE ?? \"/tmp\";\n  return join(\n    home,\n    \"Library\",\n    \"Developer\",\n    \"CoreSimulator\",\n    \"Devices\",\n    udid,\n    \"data\",\n    \"tmp\",\n    \"Screenshots\",\n  );\n}\n\n// ── Internal: Merge screenshot results ─────────────────────────────────────\n\nfunction mergeScreenshots(\n  target: Record<string, Record<string, string[]>>,\n  source: Record<string, Record<string, string[]>>,\n): void {\n  for (const [device, languages] of Object.entries(source)) {\n    if (!target[device]) target[device] = {};\n    for (const [lang, paths] of Object.entries(languages)) {\n      if (!target[device][lang]) target[device][lang] = [];\n      target[device][lang].push(...paths);\n    }\n  }\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, readFileSync, writeFileSync, readdirSync } from \"node:fs\";\nimport { join, extname, basename } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport * as plist from \"plist\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface TrainerOptions {\n  path?: string;\n  outputDirectory?: string;\n  outputFilename?: string;\n  failBuildOnError?: boolean;\n  xcpretty?: boolean;\n}\n\nexport interface JUnitResult {\n  success: boolean;\n  totalTests: number;\n  failures: number;\n  skipped: number;\n  /** Total number of retried test attempts across all suites. */\n  retries: number;\n  numberOfRetries: number;\n  /** Count of unique tests after collapsing retries. */\n  numberOfTestsExcludingRetries: number;\n  /** Count of unique failing tests after collapsing retries (last attempt wins). */\n  numberOfFailuresExcludingRetries: number;\n  junitPath: string;\n  testSuites: TestSuite[];\n}\n\nexport interface TestSuite {\n  name: string;\n  tests: number;\n  failures: number;\n  time: number;\n  testCases: TestCase[];\n}\n\nexport interface TestCase {\n  name: string;\n  className: string;\n  time: number;\n  failure: string | null;\n}\n\n// ── xcresulttool JSON shapes ───────────────────────────────────────────────\n\ninterface XCResultValue {\n  _value?: string;\n  _values?: XCResultValue[];\n  _type?: { _name?: string };\n}\n\ninterface XCResultActionRecord {\n  actionResult?: {\n    testsRef?: { id?: XCResultValue };\n  };\n}\n\ninterface XCResultActionsInvocation {\n  actions?: {\n    _values?: XCResultActionRecord[];\n  };\n}\n\ninterface XCResultTestNode {\n  name?: XCResultValue;\n  identifier?: XCResultValue;\n  duration?: XCResultValue;\n  testStatus?: XCResultValue;\n  subtests?: { _values?: XCResultTestNode[] };\n  summaries?: {\n    _values?: Array<{\n      failureSummaries?: {\n        _values?: Array<{\n          message?: XCResultValue;\n          fileName?: XCResultValue;\n          lineNumber?: XCResultValue;\n        }>;\n      };\n    }>;\n  };\n}\n\ninterface XCResultTestPlan {\n  subtests?: { _values?: XCResultTestNode[] };\n  name?: XCResultValue;\n}\n\n// ── plist test results shape ───────────────────────────────────────────────\n\ninterface PlistTestSuite {\n  TestName?: string;\n  TestIdentifier?: string;\n  Duration?: number;\n  TestStatus?: string;\n  Subtests?: PlistTestSuite[];\n  FailureSummaries?: Array<{\n    Message?: string;\n    FileName?: string;\n    LineNumber?: number;\n  }>;\n}\n\n// ── Main Entry Point ───────────────────────────────────────────────────────\n\n/**\n * Parse test results from either .xcresult bundles or .plist files,\n * generate JUnit XML, and return structured results.\n *\n * Mirrors Fastlane trainer's test_parser.rb logic.\n */\nexport async function parseTestResults(\n  options: TrainerOptions,\n): Promise<JUnitResult> {\n  const inputPath = options.path ?? findTestResults();\n  const outputDir = options.outputDirectory ?? process.cwd();\n  const outputFilename = options.outputFilename ?? \"report.junit\";\n  const junitPath = join(outputDir, outputFilename);\n\n  if (!existsSync(inputPath)) {\n    throw new Error(\"Test results not found at: \" + inputPath);\n  }\n\n  let testSuites: TestSuite[];\n\n  if (inputPath.endsWith(\".xcresult\")) {\n    requireMacOS(\"xcresult parsing\");\n    testSuites = await parseXCResult(inputPath);\n  } else if (inputPath.endsWith(\".plist\")) {\n    testSuites = parsePlistResults(inputPath);\n  } else {\n    // Try to detect: if it's a directory, it might be an xcresult bundle\n    const stat = await import(\"node:fs\").then((fs) =>\n      fs.statSync(inputPath),\n    );\n    if (stat.isDirectory()) {\n      requireMacOS(\"xcresult parsing\");\n      testSuites = await parseXCResult(inputPath);\n    } else {\n      // Attempt plist parsing as fallback\n      testSuites = parsePlistResults(inputPath);\n    }\n  }\n\n  // Compute aggregated stats\n  let totalTests = 0;\n  let failures = 0;\n  let skipped = 0;\n\n  for (const suite of testSuites) {\n    totalTests += suite.tests;\n    failures += suite.failures;\n    for (const tc of suite.testCases) {\n      if (tc.time === 0 && tc.failure === null) {\n        // Heuristic: zero-duration passing tests are often skipped\n      }\n    }\n  }\n\n  // Count skipped tests (tests with name containing \"skipped\" or with specific markers)\n  for (const suite of testSuites) {\n    for (const tc of suite.testCases) {\n      if (tc.failure === \"skipped\" || tc.failure === \"disabled\") {\n        skipped++;\n      }\n    }\n  }\n\n  // Retry detection: xcresult emits one TestCase per attempt of the same\n  // (className, name). The final attempt wins for pass/fail. Count the\n  // retry attempts that preceded it and compute retry-adjusted totals.\n  const { numberOfRetries, numberOfTestsExcludingRetries, numberOfFailuresExcludingRetries } =\n    computeRetryStats(testSuites);\n\n  // Generate JUnit XML\n  const junitXml = generateJUnitXml(testSuites);\n  writeFileSync(junitPath, junitXml, \"utf-8\");\n\n  const success = numberOfFailuresExcludingRetries === 0;\n\n  if (!success && options.failBuildOnError) {\n    throw new Error(\n      \"Tests failed: \" + numberOfFailuresExcludingRetries + \" failure(s) out of \" +\n        numberOfTestsExcludingRetries + \" test(s)\",\n    );\n  }\n\n  return {\n    success,\n    totalTests,\n    failures,\n    skipped,\n    retries: numberOfRetries,\n    numberOfRetries,\n    numberOfTestsExcludingRetries,\n    numberOfFailuresExcludingRetries,\n    junitPath,\n    testSuites,\n  };\n}\n\nfunction computeRetryStats(testSuites: TestSuite[]): {\n  numberOfRetries: number;\n  numberOfTestsExcludingRetries: number;\n  numberOfFailuresExcludingRetries: number;\n} {\n  let numberOfRetries = 0;\n  let uniqueTests = 0;\n  let uniqueFailures = 0;\n\n  for (const suite of testSuites) {\n    const attemptsByKey = new Map<string, TestCase[]>();\n    for (const tc of suite.testCases) {\n      const key = `${tc.className}::${tc.name}`;\n      const arr = attemptsByKey.get(key) ?? [];\n      arr.push(tc);\n      attemptsByKey.set(key, arr);\n    }\n    for (const attempts of attemptsByKey.values()) {\n      uniqueTests++;\n      numberOfRetries += Math.max(0, attempts.length - 1);\n      const last = attempts[attempts.length - 1];\n      // Only real failures count — not \"skipped\" markers.\n      if (last.failure !== null && last.failure !== \"skipped\" && last.failure !== \"disabled\") {\n        uniqueFailures++;\n      }\n    }\n  }\n\n  return {\n    numberOfRetries,\n    numberOfTestsExcludingRetries: uniqueTests,\n    numberOfFailuresExcludingRetries: uniqueFailures,\n  };\n}\n\n// ── xcresult Parsing ───────────────────────────────────────────────────────\n\nasync function parseXCResult(xcresultPath: string): Promise<TestSuite[]> {\n  // Step 1: Get the top-level invocation record\n  const rootJson = await xcresulttoolGet(xcresultPath);\n  const root = JSON.parse(rootJson) as XCResultActionsInvocation;\n\n  const actions = root.actions?._values ?? [];\n  const testSuites: TestSuite[] = [];\n\n  for (const action of actions) {\n    const testsRefId = action.actionResult?.testsRef?.id?._value;\n    if (!testsRefId) continue;\n\n    // Step 2: Get the test plan run summaries using the ref id\n    const testsJson = await xcresulttoolGet(xcresultPath, testsRefId);\n    const testsRoot = JSON.parse(testsJson) as XCResultTestPlan;\n\n    // Step 3: Walk the test tree to extract suites and cases\n    const topNodes = testsRoot.subtests?._values ?? [];\n    for (const node of topNodes) {\n      extractTestSuites(node, testSuites);\n    }\n  }\n\n  return testSuites;\n}\n\nfunction extractTestSuites(\n  node: XCResultTestNode,\n  suites: TestSuite[],\n  parentName?: string,\n): void {\n  const name = node.name?._value ?? node.identifier?._value ?? \"Unknown\";\n  const subtests = node.subtests?._values;\n\n  if (subtests && subtests.length > 0) {\n    // Check if children are leaf test cases or more groups\n    const hasLeafTests = subtests.some(\n      (s) => !s.subtests || !s.subtests._values || s.subtests._values.length === 0,\n    );\n\n    if (hasLeafTests) {\n      // This node is a test suite containing test cases\n      const testCases: TestCase[] = [];\n\n      for (const sub of subtests) {\n        if (sub.subtests?._values && sub.subtests._values.length > 0) {\n          // Nested group -- recurse\n          extractTestSuites(sub, suites, name);\n        } else {\n          // Leaf test case\n          testCases.push(extractTestCase(sub, name));\n        }\n      }\n\n      if (testCases.length > 0) {\n        const failureCount = testCases.filter((tc) => tc.failure !== null && tc.failure !== \"skipped\").length;\n        const totalTime = testCases.reduce((acc, tc) => acc + tc.time, 0);\n\n        suites.push({\n          name: parentName ? parentName + \".\" + name : name,\n          tests: testCases.length,\n          failures: failureCount,\n          time: totalTime,\n          testCases,\n        });\n      }\n    } else {\n      // All children are groups -- recurse deeper\n      for (const sub of subtests) {\n        extractTestSuites(sub, suites, name);\n      }\n    }\n  }\n}\n\nfunction extractTestCase(\n  node: XCResultTestNode,\n  className: string,\n): TestCase {\n  const name = node.name?._value ?? node.identifier?._value ?? \"Unknown\";\n  const duration = node.duration?._value ? parseFloat(node.duration._value) : 0;\n  const status = node.testStatus?._value ?? \"\";\n\n  let failure: string | null = null;\n\n  if (status === \"Failure\") {\n    // Extract failure message from summaries\n    const summaries = node.summaries?._values ?? [];\n    const failureMessages: string[] = [];\n\n    for (const summary of summaries) {\n      const failureSummaries = summary.failureSummaries?._values ?? [];\n      for (const fs of failureSummaries) {\n        const msg = fs.message?._value ?? \"Test failed\";\n        const file = fs.fileName?._value ?? \"\";\n        const line = fs.lineNumber?._value ?? \"\";\n        if (file) {\n          failureMessages.push(msg + \" (\" + file + \":\" + line + \")\");\n        } else {\n          failureMessages.push(msg);\n        }\n      }\n    }\n\n    failure = failureMessages.length > 0\n      ? failureMessages.join(\"\\n\")\n      : \"Test failed\";\n  } else if (status === \"Skipped\") {\n    failure = \"skipped\";\n  }\n\n  return { name, className, time: duration, failure };\n}\n\nasync function xcresulttoolGet(\n  xcresultPath: string,\n  id?: string,\n): Promise<string> {\n  const args = [\n    \"xcresulttool\",\n    \"get\",\n    \"--format\",\n    \"json\",\n    \"--path\",\n    xcresultPath,\n  ];\n\n  if (id) {\n    args.push(\"--id\", id);\n  }\n\n  const { stdout } = await execFileAsync(\"xcrun\", args, {\n    maxBuffer: 50 * 1024 * 1024, // 50MB buffer for large results\n  });\n\n  return stdout;\n}\n\n// ── Plist Parsing ──────────────────────────────────────────────────────────\n\nfunction parsePlistResults(plistPath: string): TestSuite[] {\n  const raw = readFileSync(plistPath, \"utf-8\");\n  const parsed = plist.parse(raw);\n\n  // The plist can be either a single test suite dict or an array\n  const suites: TestSuite[] = [];\n\n  if (Array.isArray(parsed)) {\n    for (const entry of parsed) {\n      extractPlistSuites(entry as PlistTestSuite, suites);\n    }\n  } else {\n    extractPlistSuites(parsed as PlistTestSuite, suites);\n  }\n\n  return suites;\n}\n\nfunction extractPlistSuites(\n  node: PlistTestSuite,\n  suites: TestSuite[],\n  parentName?: string,\n): void {\n  const name =\n    node.TestName ?? node.TestIdentifier ?? \"Unknown\";\n  const subtests = node.Subtests;\n\n  if (subtests && subtests.length > 0) {\n    const hasLeafTests = subtests.some(\n      (s) => !s.Subtests || s.Subtests.length === 0,\n    );\n\n    if (hasLeafTests) {\n      const testCases: TestCase[] = [];\n\n      for (const sub of subtests) {\n        if (sub.Subtests && sub.Subtests.length > 0) {\n          extractPlistSuites(sub, suites, name);\n        } else {\n          testCases.push(extractPlistTestCase(sub, name));\n        }\n      }\n\n      if (testCases.length > 0) {\n        const failureCount = testCases.filter(\n          (tc) => tc.failure !== null && tc.failure !== \"skipped\",\n        ).length;\n        const totalTime = testCases.reduce((acc, tc) => acc + tc.time, 0);\n\n        suites.push({\n          name: parentName ? parentName + \".\" + name : name,\n          tests: testCases.length,\n          failures: failureCount,\n          time: totalTime,\n          testCases,\n        });\n      }\n    } else {\n      for (const sub of subtests) {\n        extractPlistSuites(sub, suites, name);\n      }\n    }\n  }\n}\n\nfunction extractPlistTestCase(\n  node: PlistTestSuite,\n  className: string,\n): TestCase {\n  const name =\n    node.TestName ?? node.TestIdentifier ?? \"Unknown\";\n  const duration = node.Duration ?? 0;\n  const status = node.TestStatus ?? \"\";\n\n  let failure: string | null = null;\n\n  if (status === \"Failure\") {\n    const summaries = node.FailureSummaries ?? [];\n    const messages = summaries.map((s) => {\n      const msg = s.Message ?? \"Test failed\";\n      const file = s.FileName ?? \"\";\n      const line = s.LineNumber ?? \"\";\n      return file ? msg + \" (\" + file + \":\" + line + \")\" : msg;\n    });\n    failure = messages.length > 0 ? messages.join(\"\\n\") : \"Test failed\";\n  } else if (status === \"Skipped\") {\n    failure = \"skipped\";\n  }\n\n  return { name, className, time: duration, failure };\n}\n\n// ── JUnit XML Generation ───────────────────────────────────────────────────\n\n/**\n * Generate a JUnit XML string from test suites.\n * Mirrors Fastlane trainer's junit_generator.rb output format.\n */\nexport function generateJUnitXml(testSuites: TestSuite[]): string {\n  const totalTests = testSuites.reduce((acc, s) => acc + s.tests, 0);\n  const totalFailures = testSuites.reduce((acc, s) => acc + s.failures, 0);\n  const totalTime = testSuites.reduce((acc, s) => acc + s.time, 0);\n\n  const lines: string[] = [];\n  lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\"?>');\n  lines.push(\n    '<testsuites tests=\"' + totalTests +\n    '\" failures=\"' + totalFailures +\n    '\" time=\"' + totalTime.toFixed(3) + '\">',\n  );\n\n  for (const suite of testSuites) {\n    lines.push(\n      '  <testsuite name=\"' + escapeXmlAttr(suite.name) +\n      '\" tests=\"' + suite.tests +\n      '\" failures=\"' + suite.failures +\n      '\" time=\"' + suite.time.toFixed(3) + '\">',\n    );\n\n    for (const tc of suite.testCases) {\n      if (tc.failure === \"skipped\") {\n        lines.push(\n          '    <testcase classname=\"' + escapeXmlAttr(tc.className) +\n          '\" name=\"' + escapeXmlAttr(tc.name) +\n          '\" time=\"' + tc.time.toFixed(3) + '\">',\n        );\n        lines.push(\"      <skipped/>\");\n        lines.push(\"    </testcase>\");\n      } else if (tc.failure !== null) {\n        lines.push(\n          '    <testcase classname=\"' + escapeXmlAttr(tc.className) +\n          '\" name=\"' + escapeXmlAttr(tc.name) +\n          '\" time=\"' + tc.time.toFixed(3) + '\">',\n        );\n        lines.push(\n          '      <failure message=\"' + escapeXmlAttr(tc.failure) + '\">',\n        );\n        lines.push(\"        \" + escapeXmlContent(tc.failure));\n        lines.push(\"      </failure>\");\n        lines.push(\"    </testcase>\");\n      } else {\n        lines.push(\n          '    <testcase classname=\"' + escapeXmlAttr(tc.className) +\n          '\" name=\"' + escapeXmlAttr(tc.name) +\n          '\" time=\"' + tc.time.toFixed(3) + '\"/>',\n        );\n      }\n    }\n\n    lines.push(\"  </testsuite>\");\n  }\n\n  lines.push(\"</testsuites>\");\n\n  return lines.join(\"\\n\") + \"\\n\";\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\n/**\n * Auto-detect test results path. Searches common locations.\n */\nfunction findTestResults(): string {\n  const cwd = process.cwd();\n\n  // Check for xcresult in common derived data locations\n  const derivedDataPath = join(\n    process.env.HOME ?? \"/tmp\",\n    \"Library\",\n    \"Developer\",\n    \"Xcode\",\n    \"DerivedData\",\n  );\n\n  if (existsSync(derivedDataPath)) {\n    try {\n      const projects = readdirSync(derivedDataPath);\n      for (const project of projects) {\n        const logsDir = join(\n          derivedDataPath,\n          project,\n          \"Logs\",\n          \"Test\",\n        );\n        if (!existsSync(logsDir)) continue;\n\n        const entries = readdirSync(logsDir);\n        const xcresults = entries\n          .filter((e) => e.endsWith(\".xcresult\"))\n          .map((e) => ({\n            name: e,\n            path: join(logsDir, e),\n          }));\n\n        if (xcresults.length > 0) {\n          // Return the most recently modified one\n          return xcresults[xcresults.length - 1].path;\n        }\n      }\n    } catch {\n      // Ignore errors scanning derived data\n    }\n  }\n\n  // Check for plist in current directory\n  const plistFiles = safeReaddir(cwd).filter(\n    (f) => f.endsWith(\".plist\") && f.includes(\"Test\"),\n  );\n  if (plistFiles.length > 0) {\n    return join(cwd, plistFiles[0]);\n  }\n\n  throw new Error(\n    \"Could not auto-detect test results. Please specify the path option.\",\n  );\n}\n\nfunction safeReaddir(dir: string): string[] {\n  try {\n    return readdirSync(dir);\n  } catch {\n    return [];\n  }\n}\n\nfunction escapeXmlAttr(str: string): string {\n  return str\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n\nfunction escapeXmlContent(str: string): string {\n  return str\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\");\n}\n","export interface RuleResult {\n  passed: boolean;\n  message: string;\n}\n\n/**\n * Rule metadata attached as properties of each rule function. Mirrors\n * Fastlane precheck's `Rule` class attributes (rule.rb, line ~5+).\n *\n * `supportedFields` lists metadata field names this rule applies to. A\n * `null` value means the rule applies to every field (Fastlane's default\n * `supported_fields_symbol_set` return of `nil`).\n */\nexport interface RuleMetadata {\n  key: string;\n  envName: string;\n  friendlyName: string;\n  description: string;\n  supportedFields: readonly string[] | null;\n}\n\nexport type Rule = ((text: string) => RuleResult) & { metadata: RuleMetadata };\n\nfunction defineRule(\n  metadata: RuleMetadata,\n  fn: (text: string) => RuleResult\n): Rule {\n  const rule = fn as Rule;\n  rule.metadata = metadata;\n  return rule;\n}\n\nfunction createWordMatchRule(\n  metadata: RuleMetadata,\n  words: string[]\n): Rule {\n  const lower = words.map((w) => w.toLowerCase());\n  return defineRule(metadata, (text: string): RuleResult => {\n    const textLower = text.toLowerCase();\n    for (const word of lower) {\n      if (textLower.includes(word)) {\n        return {\n          passed: false,\n          message: `${metadata.friendlyName}: found \"${word}\"`,\n        };\n      }\n    }\n    return { passed: true, message: \"\" };\n  });\n}\n\nexport const negativeAppleSentiment = createWordMatchRule(\n  {\n    key: \"negative_apple_sentiment\",\n    envName: \"RULE_NEGATIVE_APPLE_SENTIMENT\",\n    friendlyName: \"No negative sentiment about Apple\",\n    description: \"using text that could be negative sentiment about Apple\",\n    supportedFields: null,\n  },\n  [\"suck\", \"bug\", \"broken\", \"crash\", \"hate\", \"terrible\", \"horrible\", \"worst\", \"awful\"]\n);\n\nexport const placeholderText = createWordMatchRule(\n  {\n    key: \"placeholder_words\",\n    envName: \"RULE_PLACEHOLDER_WORDS\",\n    friendlyName: \"No placeholder words\",\n    description: \"using placeholder text\",\n    supportedFields: null,\n  },\n  [\n    \"lorem ipsum\",\n    \"placeholder\",\n    \"todo\",\n    \"tbd\",\n    \"coming soon\",\n    \"insert\",\n    \"your text here\",\n  ]\n);\n\nexport const otherPlatforms = createWordMatchRule(\n  {\n    key: \"other_platforms\",\n    envName: \"RULE_OTHER_PLATFORMS\",\n    friendlyName: \"No references to other platforms\",\n    description: \"mentioning other platforms\",\n    supportedFields: null,\n  },\n  [\"android\", \"google play\", \"samsung\", \"windows phone\", \"blackberry\", \"kindle\"]\n);\n\nexport const futureFunctionality = createWordMatchRule(\n  {\n    key: \"future_functionality\",\n    envName: \"RULE_FUTURE_FUNCTIONALITY\",\n    friendlyName: \"No references to future functionality\",\n    description: \"referencing future functionality\",\n    supportedFields: null,\n  },\n  [\n    \"will be available\",\n    \"coming soon\",\n    \"in a future update\",\n    \"planned for\",\n    \"we plan to\",\n    \"will include\",\n    \"will support\",\n  ]\n);\n\nexport const testWords = createWordMatchRule(\n  {\n    key: \"test_words\",\n    envName: \"RULE_TEST_WORDS\",\n    friendlyName: \"No references to test or demo\",\n    description: \"using test or demo words\",\n    supportedFields: null,\n  },\n  [\"test\", \"demo\", \"beta version\", \"debug\"]\n);\n\nexport const curseWords: Rule = defineRule(\n  {\n    key: \"curse_words\",\n    envName: \"RULE_CURSE_WORDS\",\n    friendlyName: \"No curse words\",\n    description: \"using curse words\",\n    supportedFields: null,\n  },\n  (text: string): RuleResult => {\n    // Simplified curse word detection\n    const cursePatterns = [\n      /\\bf+u+c+k+/i,\n      /\\bs+h+i+t+/i,\n      /\\ba+s+s+h+o+l+e+/i,\n      /\\bb+i+t+c+h+/i,\n      /\\bd+a+m+n+/i,\n      /\\bh+e+l+l+\\b/i,\n      /\\bc+r+a+p+/i,\n      /\\bd+i+c+k+/i,\n      /\\bp+i+s+s+/i,\n    ];\n    for (const pattern of cursePatterns) {\n      if (pattern.test(text)) {\n        return {\n          passed: false,\n          message: \"Curse words: inappropriate language detected\",\n        };\n      }\n    }\n    return { passed: true, message: \"\" };\n  }\n);\n\nexport const unreachableUrls: Rule = defineRule(\n  {\n    key: \"unreachable_urls\",\n    envName: \"RULE_UNREACHABLE_URLS\",\n    friendlyName: \"No unreachable URLs\",\n    description: \"using URLs that cannot be reached\",\n    supportedFields: [\"supportUrl\", \"marketingUrl\", \"privacyUrl\"],\n  },\n  (text: string): RuleResult => {\n    // This is meant to check URLs — skip if not a URL\n    if (!text.startsWith(\"http://\") && !text.startsWith(\"https://\")) {\n      return { passed: true, message: \"\" };\n    }\n    // URL reachability check would be async — this is a sync placeholder\n    return { passed: true, message: \"\" };\n  }\n);\n\nexport const copyrightDate: Rule = defineRule(\n  {\n    key: \"copyright_date\",\n    envName: \"RULE_COPYRIGHT_DATE\",\n    friendlyName: \"No out-of-date copyright\",\n    description: \"using a copyright date that is not this year\",\n    supportedFields: [\"copyright\"],\n  },\n  (text: string): RuleResult => {\n    const currentYear = new Date().getFullYear();\n    const yearMatch = text.match(/©?\\s*(\\d{4})/);\n    if (yearMatch) {\n      const year = parseInt(yearMatch[1], 10);\n      if (year < currentYear - 1) {\n        return {\n          passed: false,\n          message: `Copyright date: year ${year} may be outdated (current: ${currentYear})`,\n        };\n      }\n    }\n    return { passed: true, message: \"\" };\n  }\n);\n\nexport const noPriceInTitle: Rule = defineRule(\n  {\n    key: \"no_price_in_title\",\n    envName: \"RULE_NO_PRICE_IN_TITLE\",\n    friendlyName: \"No price in title\",\n    description: \"mentioning price in the app title\",\n    supportedFields: [\"name\", \"subtitle\"],\n  },\n  (text: string): RuleResult => {\n    if (/\\$\\d+|\\d+\\.\\d{2}|free|€\\d+|£\\d+/i.test(text)) {\n      return { passed: false, message: \"No price in title: price reference found\" };\n    }\n    return { passed: true, message: \"\" };\n  }\n);\n\n/**\n * `freeStuffIap`: flag IAP descriptions that mention \"free\", matching\n * Fastlane's `FreeStuffIAPRule` (free_stuff_iap_rule.rb).\n */\nexport const freeStuffIap = createWordMatchRule(\n  {\n    key: \"free_stuff_in_iap\",\n    envName: \"RULE_FREE_STUFF_IN_IAP\",\n    friendlyName: \"No words indicating your IAP is free\",\n    description: \"using text indicating that your IAP is free\",\n    supportedFields: [\"in_app_purchase\"],\n  },\n  [\"free\"]\n);\n\nexport function customText(words: string[]): Rule {\n  return createWordMatchRule(\n    {\n      key: \"custom_text\",\n      envName: \"RULE_CUSTOM_TEXT\",\n      friendlyName: \"No custom text\",\n      description: \"using custom disallowed text\",\n      supportedFields: null,\n    },\n    words\n  );\n}\n\nexport const ALL_RULES: Record<string, Rule> = {\n  negativeAppleSentiment,\n  placeholderText,\n  otherPlatforms,\n  futureFunctionality,\n  testWords,\n  curseWords,\n  unreachableUrls,\n  copyrightDate,\n  noPriceInTitle,\n  freeStuffIap,\n};\n","import type { AppStoreConnectClient } from \"../client/index.js\";\nimport { ALL_RULES, type Rule, type RuleResult } from \"./rules.js\";\n\nexport { ALL_RULES } from \"./rules.js\";\nexport type { Rule, RuleResult } from \"./rules.js\";\n\nexport interface PrecheckOptions {\n  client: AppStoreConnectClient;\n  bundleIdentifier: string;\n  includeInAppPurchases?: boolean;\n  rules?: PrecheckRule[];\n}\n\nexport interface PrecheckRule {\n  name: string;\n  level: \"error\" | \"warning\";\n}\n\nexport interface ValidationResult {\n  passed: boolean;\n  errors: ValidationIssue[];\n  warnings: ValidationIssue[];\n}\n\nexport interface ValidationIssue {\n  rule: string;\n  message: string;\n  field?: string;\n  locale?: string;\n}\n\nexport async function validateMetadata(\n  options: PrecheckOptions\n): Promise<ValidationResult> {\n  const errors: ValidationIssue[] = [];\n  const warnings: ValidationIssue[] = [];\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  // Get latest version\n  const versions = await options.client.appStoreVersions.listForApp(app.id, {\n    filter: { platform: \"IOS\" },\n  });\n\n  if (versions.length === 0) {\n    throw new Error(\"No app store version found\");\n  }\n\n  const version = versions[0];\n  const localizations = await options.client.appStoreVersions.getLocalizations(version.id);\n\n  // Determine which rules to run\n  const ruleConfig = options.rules ?? Object.keys(ALL_RULES).map((name) => ({\n    name,\n    level: \"error\" as const,\n  }));\n\n  // Run rules against each localization\n  for (const loc of localizations) {\n    const locale = loc.attributes.locale;\n    const fields: Record<string, string | null> = {\n      description: loc.attributes.description,\n      keywords: loc.attributes.keywords,\n      whatsNew: loc.attributes.whatsNew,\n      supportUrl: loc.attributes.supportUrl,\n      marketingUrl: loc.attributes.marketingUrl,\n      promotionalText: loc.attributes.promotionalText,\n    };\n\n    for (const [field, value] of Object.entries(fields)) {\n      if (!value) continue;\n\n      for (const ruleConfig_ of ruleConfig) {\n        const rule = ALL_RULES[ruleConfig_.name];\n        if (!rule) continue;\n\n        // Respect the rule's supportedFields list (nil/null = applies to all).\n        // Mirrors Fastlane precheck's `Rule#item_field_supported?`.\n        const supported = rule.metadata?.supportedFields;\n        if (supported && !supported.includes(field)) continue;\n\n        const result = rule(value);\n        if (!result.passed) {\n          const issue: ValidationIssue = {\n            rule: ruleConfig_.name,\n            message: result.message,\n            field,\n            locale,\n          };\n          if (ruleConfig_.level === \"error\") {\n            errors.push(issue);\n          } else {\n            warnings.push(issue);\n          }\n        }\n      }\n    }\n  }\n\n  // Check copyright on the version — only run copyright-supporting rules.\n  if (version.attributes.copyright) {\n    for (const ruleConfig_ of ruleConfig) {\n      const rule = ALL_RULES[ruleConfig_.name];\n      if (!rule) continue;\n      const supported = rule.metadata?.supportedFields;\n      if (supported && !supported.includes(\"copyright\")) continue;\n      const result = rule(version.attributes.copyright);\n      if (!result.passed) {\n        const issue: ValidationIssue = {\n          rule: ruleConfig_.name,\n          message: result.message,\n          field: \"copyright\",\n        };\n        if (ruleConfig_.level === \"error\") errors.push(issue);\n        else warnings.push(issue);\n      }\n    }\n  }\n\n  return {\n    passed: errors.length === 0,\n    errors,\n    warnings,\n  };\n}\n","import { SignJWT, importPKCS8 } from \"jose\";\n\nexport interface TokenConfig {\n  keyId: string;\n  /** Issuer ID. When absent, the key is treated as an individual key (sub='user'). */\n  issuerId?: string;\n  privateKey: string;\n  enterprise?: boolean;\n  duration?: number;\n}\n\nconst MAX_TOKEN_DURATION = 1200;\nconst DEFAULT_TOKEN_DURATION = 500;\n\nexport class TokenManager {\n  private config: TokenConfig;\n  private currentToken: string | null = null;\n  private expiresAt = 0;\n\n  constructor(config: TokenConfig) {\n    this.config = config;\n  }\n\n  async getToken(): Promise<string> {\n    const now = Math.floor(Date.now() / 1000);\n    if (this.currentToken && now < this.expiresAt - 30) {\n      return this.currentToken;\n    }\n    return this.refresh();\n  }\n\n  async refresh(): Promise<string> {\n    const duration = Math.min(\n      this.config.duration ?? DEFAULT_TOKEN_DURATION,\n      MAX_TOKEN_DURATION\n    );\n    const audience = this.config.enterprise\n      ? \"apple-developer-enterprise-v1\"\n      : \"appstoreconnect-v1\";\n\n    const key = await importPKCS8(this.config.privateKey, \"ES256\");\n    const now = Math.floor(Date.now() / 1000);\n\n    // Mirror Fastlane's Spaceship::ConnectAPI::Token#refresh! behavior:\n    // when issuerId is provided → set `iss`; otherwise treat as individual key\n    // and set `sub: 'user'`.\n    // https://developer.apple.com/documentation/appstoreconnectapi/generating_tokens_for_api_requests#4313913\n    let jwt = new SignJWT(this.config.issuerId ? {} : { sub: \"user\" })\n      .setProtectedHeader({\n        alg: \"ES256\",\n        kid: this.config.keyId,\n        typ: \"JWT\",\n      })\n      .setIssuedAt(now - 60)\n      .setExpirationTime(now + duration)\n      .setAudience(audience);\n\n    if (this.config.issuerId) {\n      jwt = jwt.setIssuer(this.config.issuerId);\n    }\n\n    this.currentToken = await jwt.sign(key);\n\n    this.expiresAt = now + duration;\n    return this.currentToken;\n  }\n\n  invalidate(): void {\n    this.currentToken = null;\n    this.expiresAt = 0;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { CertificateType } from \"../types/enums.js\";\n\nexport class CertificatesResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      certificateType?: CertificateType | CertificateType[];\n      serialNumber?: string;\n      displayName?: string;\n      id?: string | string[];\n    };\n    fields?: string[];\n    limit?: number;\n    sort?: string;\n  }): Promise<Certificate[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    if (params?.fields) {\n      listParams.fields = { certificates: params.fields.join(\",\") };\n    }\n    return this.http.all<Certificate>(\"/v1/certificates\", listParams);\n  }\n\n  async get(id: string): Promise<Certificate> {\n    const response = await this.http.get<JsonApiResponse<Certificate>>(\n      `/v1/certificates/${id}`\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    certificateType: CertificateType;\n    csrContent: string;\n  }): Promise<Certificate> {\n    const response = await this.http.post<JsonApiResponse<Certificate>>(\n      \"/v1/certificates\",\n      {\n        data: {\n          type: \"certificates\",\n          attributes: {\n            certificateType: params.certificateType,\n            csrContent: params.csrContent,\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async revoke(id: string): Promise<void> {\n    await this.http.delete(`/v1/certificates/${id}`);\n  }\n\n  async *paginate(params?: {\n    filter?: {\n      certificateType?: CertificateType | CertificateType[];\n    };\n    limit?: number;\n  }): AsyncGenerator<Certificate> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      limit: params?.limit ?? 200,\n    };\n    yield* this.http.paginate<Certificate>(\"/v1/certificates\", listParams);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Profile } from \"../types/profile.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { ProfileType, ProfileState } from \"../types/enums.js\";\n\nexport class ProfilesResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      profileType?: ProfileType | ProfileType[];\n      profileState?: ProfileState;\n      name?: string;\n      id?: string | string[];\n    };\n    include?: string;\n    fields?: { profiles?: string[]; certificates?: string[]; devices?: string[]; bundleIds?: string[] };\n    limit?: number;\n    sort?: string;\n  }): Promise<Profile[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    if (params?.fields) {\n      listParams.fields = {};\n      for (const [key, value] of Object.entries(params.fields)) {\n        if (value) listParams.fields[key] = value.join(\",\");\n      }\n    }\n    return this.http.all<Profile>(\"/v1/profiles\", listParams);\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<Profile> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<Profile>>(\n      `/v1/profiles/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    name: string;\n    profileType: ProfileType;\n    bundleIdId: string;\n    certificateIds: string[];\n    deviceIds?: string[];\n  }): Promise<Profile> {\n    const relationships: Record<string, unknown> = {\n      bundleId: {\n        data: { type: \"bundleIds\", id: params.bundleIdId },\n      },\n      certificates: {\n        data: params.certificateIds.map((id) => ({\n          type: \"certificates\",\n          id,\n        })),\n      },\n    };\n\n    if (params.deviceIds && params.deviceIds.length > 0) {\n      relationships.devices = {\n        data: params.deviceIds.map((id) => ({\n          type: \"devices\",\n          id,\n        })),\n      };\n    }\n\n    const response = await this.http.post<JsonApiResponse<Profile>>(\n      \"/v1/profiles\",\n      {\n        data: {\n          type: \"profiles\",\n          attributes: {\n            name: params.name,\n            profileType: params.profileType,\n          },\n          relationships,\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/profiles/${id}`);\n  }\n\n  async getCertificates(profileId: string): Promise<Certificate[]> {\n    return this.http.all<Certificate>(\n      `/v1/profiles/${profileId}/certificates`\n    );\n  }\n\n  async getDevices(profileId: string): Promise<Device[]> {\n    return this.http.all<Device>(`/v1/profiles/${profileId}/devices`);\n  }\n\n  async getBundleId(profileId: string): Promise<BundleId> {\n    const response = await this.http.get<JsonApiResponse<BundleId>>(\n      `/v1/profiles/${profileId}/bundleId`\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { BundleIdCapability } from \"../types/capability.js\";\nimport type { BundleIdPlatform } from \"../types/enums.js\";\n\nexport class BundleIdsResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      identifier?: string;\n      name?: string;\n      platform?: BundleIdPlatform;\n      seedId?: string;\n      id?: string | string[];\n    };\n    include?: string;\n    fields?: { bundleIds?: string[]; bundleIdCapabilities?: string[] };\n    limit?: number;\n    sort?: string;\n  }): Promise<BundleId[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    if (params?.fields) {\n      listParams.fields = {};\n      for (const [key, value] of Object.entries(params.fields)) {\n        if (value) listParams.fields[key] = value.join(\",\");\n      }\n    }\n    return this.http.all<BundleId>(\"/v1/bundleIds\", listParams);\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<BundleId> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<BundleId>>(\n      `/v1/bundleIds/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    identifier: string;\n    name: string;\n    platform: BundleIdPlatform;\n    seedId?: string;\n  }): Promise<BundleId> {\n    const attributes: Record<string, unknown> = {\n      identifier: params.identifier,\n      name: params.name,\n      platform: params.platform,\n    };\n    if (params.seedId) attributes.seedId = params.seedId;\n\n    const response = await this.http.post<JsonApiResponse<BundleId>>(\n      \"/v1/bundleIds\",\n      {\n        data: {\n          type: \"bundleIds\",\n          attributes,\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async find(identifier: string): Promise<BundleId | null> {\n    const results = await this.list({\n      filter: { identifier },\n      limit: 1,\n    });\n    return results[0] ?? null;\n  }\n\n  async getCapabilities(bundleIdId: string): Promise<BundleIdCapability[]> {\n    return this.http.all<BundleIdCapability>(\n      `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n    );\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { DeviceStatus, Platform } from \"../types/enums.js\";\n\nexport class DevicesResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      name?: string;\n      platform?: Platform | Platform[];\n      status?: DeviceStatus;\n      udid?: string;\n      id?: string | string[];\n    };\n    fields?: string[];\n    limit?: number;\n    sort?: string;\n  }): Promise<Device[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    if (params?.fields) {\n      listParams.fields = { devices: params.fields.join(\",\") };\n    }\n    return this.http.all<Device>(\"/v1/devices\", listParams);\n  }\n\n  async get(id: string): Promise<Device> {\n    const response = await this.http.get<JsonApiResponse<Device>>(\n      `/v1/devices/${id}`\n    );\n    return response.data;\n  }\n\n  async register(params: {\n    name: string;\n    platform: Platform;\n    udid: string;\n  }): Promise<Device> {\n    const response = await this.http.post<JsonApiResponse<Device>>(\n      \"/v1/devices\",\n      {\n        data: {\n          type: \"devices\",\n          attributes: {\n            name: params.name,\n            platform: params.platform,\n            udid: params.udid,\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    params: { name?: string; status?: DeviceStatus }\n  ): Promise<Device> {\n    const response = await this.http.patch<JsonApiResponse<Device>>(\n      `/v1/devices/${id}`,\n      {\n        data: {\n          type: \"devices\",\n          id,\n          attributes: params,\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async findByUdid(udid: string): Promise<Device | null> {\n    const results = await this.list({ filter: { udid }, limit: 1 });\n    return results[0] ?? null;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { App } from \"../types/app.js\";\n\nexport class AppsResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      bundleId?: string;\n      name?: string;\n      sku?: string;\n      id?: string | string[];\n    };\n    include?: string;\n    fields?: { apps?: string[] };\n    limit?: number;\n    sort?: string;\n  }): Promise<App[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    if (params?.fields) {\n      listParams.fields = {};\n      for (const [key, value] of Object.entries(params.fields)) {\n        if (value) listParams.fields[key] = value.join(\",\");\n      }\n    }\n    return this.http.all<App>(\"/v1/apps\", listParams);\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<App> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<App>>(\n      `/v1/apps/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n\n  async findByBundleId(bundleId: string): Promise<App | null> {\n    const results = await this.list({\n      filter: { bundleId },\n      limit: 1,\n    });\n    return results[0] ?? null;\n  }\n\n  /**\n   * Create an App Store Connect **app record** (the thing that shows up\n   * under \"My Apps\" and that TestFlight / App Store uploads require).\n   *\n   * This is distinct from registering an App ID in the Developer Portal —\n   * you need BOTH. The Developer Portal App ID unlocks provisioning\n   * profiles and entitlements; the App Store Connect app record unlocks\n   * uploads. `upload_to_testflight` fails with \"Couldn't find app\n   * 'com.foo.bar' on the account…\" when this record is missing.\n   *\n   * `bundleIdId` is the REST API primary key of the bundle id resource\n   * (not the identifier string) — fetch it via `bundleIds.find(identifier)`\n   * or from the response of `bundleIds.create()`.\n   *\n   * `sku` is an arbitrary unique string Apple uses to identify the app in\n   * their internal records. If you don't have a meaningful one, pass the\n   * bundle identifier itself or append a timestamp for uniqueness.\n   */\n  async create(params: {\n    bundleIdentifier: string;\n    bundleIdId: string;\n    appName: string;\n    sku: string;\n    primaryLocale?: string;\n  }): Promise<App> {\n    const response = await this.http.post<JsonApiResponse<App>>(\"/v1/apps\", {\n      data: {\n        type: \"apps\",\n        attributes: {\n          bundleId: params.bundleIdentifier,\n          name: params.appName,\n          sku: params.sku,\n          primaryLocale: params.primaryLocale ?? \"en-US\",\n        },\n        relationships: {\n          bundleId: {\n            data: { type: \"bundleIds\", id: params.bundleIdId },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type {\n  Build,\n  BetaBuildLocalization,\n  BuildBetaDetail,\n  PreReleaseVersion,\n} from \"../types/build.js\";\n\nexport class BuildsResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      app?: string;\n      version?: string;\n      processingState?: string;\n      \"preReleaseVersion.version\"?: string;\n      expired?: string;\n      id?: string | string[];\n    };\n    include?: string;\n    fields?: { builds?: string[] };\n    limit?: number;\n    sort?: string;\n  }): Promise<Build[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    if (params?.fields) {\n      listParams.fields = {};\n      for (const [key, value] of Object.entries(params.fields)) {\n        if (value) listParams.fields[key] = value.join(\",\");\n      }\n    }\n    return this.http.all<Build>(\"/v1/builds\", listParams);\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<Build> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<Build>>(\n      `/v1/builds/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n\n  async getBetaDetail(buildId: string): Promise<BuildBetaDetail> {\n    const response = await this.http.get<JsonApiResponse<BuildBetaDetail>>(\n      `/v1/builds/${buildId}/buildBetaDetail`\n    );\n    return response.data;\n  }\n\n  async getLocalizations(buildId: string): Promise<BetaBuildLocalization[]> {\n    return this.http.all<BetaBuildLocalization>(\n      `/v1/builds/${buildId}/betaBuildLocalizations`\n    );\n  }\n\n  async createLocalization(params: {\n    buildId: string;\n    locale: string;\n    whatsNew: string;\n  }): Promise<BetaBuildLocalization> {\n    const response = await this.http.post<\n      JsonApiResponse<BetaBuildLocalization>\n    >(\"/v1/betaBuildLocalizations\", {\n      data: {\n        type: \"betaBuildLocalizations\",\n        attributes: {\n          locale: params.locale,\n          whatsNew: params.whatsNew,\n        },\n        relationships: {\n          build: {\n            data: { type: \"builds\", id: params.buildId },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async updateLocalization(\n    localizationId: string,\n    params: { whatsNew: string }\n  ): Promise<BetaBuildLocalization> {\n    const response = await this.http.patch<\n      JsonApiResponse<BetaBuildLocalization>\n    >(`/v1/betaBuildLocalizations/${localizationId}`, {\n      data: {\n        type: \"betaBuildLocalizations\",\n        id: localizationId,\n        attributes: {\n          whatsNew: params.whatsNew,\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async getPreReleaseVersion(buildId: string): Promise<PreReleaseVersion | null> {\n    try {\n      const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n        `/v1/builds/${buildId}/preReleaseVersion`\n      );\n      return response.data;\n    } catch {\n      return null;\n    }\n  }\n\n  async submitForBetaReview(buildId: string): Promise<void> {\n    await this.http.post(\"/v1/betaAppReviewSubmissions\", {\n      data: {\n        type: \"betaAppReviewSubmissions\",\n        relationships: {\n          build: {\n            data: { type: \"builds\", id: buildId },\n          },\n        },\n      },\n    });\n  }\n\n  async expireBuild(buildId: string): Promise<void> {\n    await this.http.patch(`/v1/builds/${buildId}`, {\n      data: {\n        type: \"builds\",\n        id: buildId,\n        attributes: {\n          expired: true,\n        },\n      },\n    });\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BetaGroup } from \"../types/build.js\";\n\nexport class BetaGroupsResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      app?: string;\n      name?: string;\n      isInternalGroup?: string;\n      id?: string | string[];\n    };\n    fields?: string[];\n    limit?: number;\n    sort?: string;\n  }): Promise<BetaGroup[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    if (params?.fields) {\n      listParams.fields = { betaGroups: params.fields.join(\",\") };\n    }\n    return this.http.all<BetaGroup>(\"/v1/betaGroups\", listParams);\n  }\n\n  async get(id: string): Promise<BetaGroup> {\n    const response = await this.http.get<JsonApiResponse<BetaGroup>>(\n      `/v1/betaGroups/${id}`\n    );\n    return response.data;\n  }\n\n  async listForApp(appId: string): Promise<BetaGroup[]> {\n    return this.http.all<BetaGroup>(`/v1/apps/${appId}/betaGroups`);\n  }\n\n  async addBuilds(groupId: string, buildIds: string[]): Promise<void> {\n    await this.http.post(`/v1/betaGroups/${groupId}/relationships/builds`, {\n      data: buildIds.map((id) => ({ type: \"builds\", id })),\n    });\n  }\n\n  async removeBuilds(groupId: string, buildIds: string[]): Promise<void> {\n    await this.http.request(\n      `/v1/betaGroups/${groupId}/relationships/builds`,\n      {\n        method: \"DELETE\",\n        body: {\n          data: buildIds.map((id) => ({ type: \"builds\", id })),\n        },\n      }\n    );\n  }\n\n  async findByName(appId: string, name: string): Promise<BetaGroup | null> {\n    const groups = await this.listForApp(appId);\n    return groups.find((g) => g.attributes.name === name) ?? null;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\nimport type {\n  BundleIdCapability,\n  CapabilitySettingInput,\n} from \"../types/capability.js\";\nimport type { CapabilityType } from \"../types/enums.js\";\n\nexport class CapabilitiesResource {\n  constructor(private http: RequestClient) {}\n\n  async listForBundleId(bundleIdId: string): Promise<BundleIdCapability[]> {\n    return this.http.all<BundleIdCapability>(\n      `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n    );\n  }\n\n  async enable(params: {\n    bundleIdId: string;\n    capabilityType: CapabilityType;\n    settings?: CapabilitySettingInput[];\n  }): Promise<BundleIdCapability> {\n    const attributes: Record<string, unknown> = {\n      capabilityType: params.capabilityType,\n    };\n    if (params.settings) {\n      attributes.settings = params.settings;\n    }\n\n    const response = await this.http.post<\n      JsonApiResponse<BundleIdCapability>\n    >(\"/v1/bundleIdCapabilities\", {\n      data: {\n        type: \"bundleIdCapabilities\",\n        attributes,\n        relationships: {\n          bundleId: {\n            data: { type: \"bundleIds\", id: params.bundleIdId },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async update(\n    capabilityId: string,\n    params: {\n      capabilityType: CapabilityType;\n      settings?: CapabilitySettingInput[];\n    }\n  ): Promise<BundleIdCapability> {\n    const attributes: Record<string, unknown> = {\n      capabilityType: params.capabilityType,\n    };\n    if (params.settings) {\n      attributes.settings = params.settings;\n    }\n\n    const response = await this.http.patch<\n      JsonApiResponse<BundleIdCapability>\n    >(`/v1/bundleIdCapabilities/${capabilityId}`, {\n      data: {\n        type: \"bundleIdCapabilities\",\n        id: capabilityId,\n        attributes,\n      },\n    });\n    return response.data;\n  }\n\n  async disable(capabilityId: string): Promise<void> {\n    await this.http.delete(`/v1/bundleIdCapabilities/${capabilityId}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { AppStoreVersionState, Platform, ReleaseType } from \"../types/enums.js\";\n\nexport interface AppStoreVersion {\n  id: string;\n  type: \"appStoreVersions\";\n  attributes: {\n    platform: Platform;\n    versionString: string;\n    appStoreState: AppStoreVersionState;\n    copyright: string | null;\n    releaseType: ReleaseType | null;\n    earliestReleaseDate: string | null;\n    downloadable: boolean;\n    createdDate: string;\n  };\n  relationships?: {\n    app?: { data: { type: \"apps\"; id: string } };\n    build?: { data: { type: \"builds\"; id: string } | null };\n    appStoreVersionLocalizations?: {\n      data: Array<{ type: \"appStoreVersionLocalizations\"; id: string }>;\n    };\n  };\n}\n\nexport interface AppStoreVersionLocalization {\n  id: string;\n  type: \"appStoreVersionLocalizations\";\n  attributes: {\n    description: string | null;\n    locale: string;\n    keywords: string | null;\n    marketingUrl: string | null;\n    promotionalText: string | null;\n    supportUrl: string | null;\n    whatsNew: string | null;\n  };\n}\n\nexport class AppStoreVersionsResource {\n  constructor(private http: RequestClient) {}\n\n  async listForApp(\n    appId: string,\n    params?: {\n      filter?: { appStoreState?: AppStoreVersionState | AppStoreVersionState[]; platform?: Platform };\n      include?: string;\n      limit?: number;\n    }\n  ): Promise<AppStoreVersion[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n    };\n    return this.http.all<AppStoreVersion>(\n      `/v1/apps/${appId}/appStoreVersions`,\n      listParams\n    );\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<AppStoreVersion> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<AppStoreVersion>>(\n      `/v1/appStoreVersions/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    appId: string;\n    versionString: string;\n    platform: Platform;\n    releaseType?: ReleaseType;\n    earliestReleaseDate?: string;\n    copyright?: string;\n  }): Promise<AppStoreVersion> {\n    const attributes: Record<string, unknown> = {\n      versionString: params.versionString,\n      platform: params.platform,\n    };\n    if (params.releaseType) attributes.releaseType = params.releaseType;\n    if (params.earliestReleaseDate) attributes.earliestReleaseDate = params.earliestReleaseDate;\n    if (params.copyright) attributes.copyright = params.copyright;\n\n    const response = await this.http.post<JsonApiResponse<AppStoreVersion>>(\n      \"/v1/appStoreVersions\",\n      {\n        data: {\n          type: \"appStoreVersions\",\n          attributes,\n          relationships: {\n            app: {\n              data: { type: \"apps\", id: params.appId },\n            },\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    params: {\n      versionString?: string;\n      copyright?: string;\n      releaseType?: ReleaseType;\n      earliestReleaseDate?: string | null;\n    }\n  ): Promise<AppStoreVersion> {\n    const response = await this.http.patch<JsonApiResponse<AppStoreVersion>>(\n      `/v1/appStoreVersions/${id}`,\n      {\n        data: {\n          type: \"appStoreVersions\",\n          id,\n          attributes: params,\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async setBuild(versionId: string, buildId: string): Promise<void> {\n    await this.http.patch(`/v1/appStoreVersions/${versionId}/relationships/build`, {\n      data: { type: \"builds\", id: buildId },\n    });\n  }\n\n  async getLocalizations(versionId: string): Promise<AppStoreVersionLocalization[]> {\n    return this.http.all<AppStoreVersionLocalization>(\n      `/v1/appStoreVersions/${versionId}/appStoreVersionLocalizations`\n    );\n  }\n\n  async createLocalization(params: {\n    versionId: string;\n    locale: string;\n    description?: string;\n    keywords?: string;\n    marketingUrl?: string;\n    promotionalText?: string;\n    supportUrl?: string;\n    whatsNew?: string;\n  }): Promise<AppStoreVersionLocalization> {\n    const { versionId, ...attributes } = params;\n    const response = await this.http.post<\n      JsonApiResponse<AppStoreVersionLocalization>\n    >(\"/v1/appStoreVersionLocalizations\", {\n      data: {\n        type: \"appStoreVersionLocalizations\",\n        attributes,\n        relationships: {\n          appStoreVersion: {\n            data: { type: \"appStoreVersions\", id: versionId },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async updateLocalization(\n    localizationId: string,\n    params: {\n      description?: string;\n      keywords?: string;\n      marketingUrl?: string;\n      promotionalText?: string;\n      supportUrl?: string;\n      whatsNew?: string;\n    }\n  ): Promise<AppStoreVersionLocalization> {\n    const response = await this.http.patch<\n      JsonApiResponse<AppStoreVersionLocalization>\n    >(`/v1/appStoreVersionLocalizations/${localizationId}`, {\n      data: {\n        type: \"appStoreVersionLocalizations\",\n        id: localizationId,\n        attributes: params,\n      },\n    });\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppScreenshotSet {\n  id: string;\n  type: \"appScreenshotSets\";\n  attributes: {\n    screenshotDisplayType: string;\n  };\n}\n\nexport interface AppScreenshot {\n  id: string;\n  type: \"appScreenshots\";\n  attributes: {\n    fileSize: number;\n    fileName: string;\n    sourceFileChecksum: string | null;\n    imageAsset: {\n      templateUrl: string;\n      width: number;\n      height: number;\n    } | null;\n    assetToken: string | null;\n    assetType: string | null;\n    uploadOperations: UploadOperation[] | null;\n    assetDeliveryState: {\n      state: string;\n      errors: unknown[];\n    } | null;\n  };\n}\n\nexport interface UploadOperation {\n  method: string;\n  url: string;\n  length: number;\n  offset: number;\n  requestHeaders: Array<{ name: string; value: string }>;\n}\n\nexport class AppScreenshotsResource {\n  constructor(private http: RequestClient) {}\n\n  async listSetsForLocalization(\n    localizationId: string\n  ): Promise<AppScreenshotSet[]> {\n    return this.http.all<AppScreenshotSet>(\n      `/v1/appStoreVersionLocalizations/${localizationId}/appScreenshotSets`\n    );\n  }\n\n  async createSet(params: {\n    localizationId: string;\n    screenshotDisplayType: string;\n  }): Promise<AppScreenshotSet> {\n    const response = await this.http.post<\n      JsonApiResponse<AppScreenshotSet>\n    >(\"/v1/appScreenshotSets\", {\n      data: {\n        type: \"appScreenshotSets\",\n        attributes: {\n          screenshotDisplayType: params.screenshotDisplayType,\n        },\n        relationships: {\n          appStoreVersionLocalization: {\n            data: {\n              type: \"appStoreVersionLocalizations\",\n              id: params.localizationId,\n            },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async listScreenshots(setId: string): Promise<AppScreenshot[]> {\n    return this.http.all<AppScreenshot>(\n      `/v1/appScreenshotSets/${setId}/appScreenshots`\n    );\n  }\n\n  async reserveScreenshot(params: {\n    setId: string;\n    fileName: string;\n    fileSize: number;\n  }): Promise<AppScreenshot> {\n    const response = await this.http.post<\n      JsonApiResponse<AppScreenshot>\n    >(\"/v1/appScreenshots\", {\n      data: {\n        type: \"appScreenshots\",\n        attributes: {\n          fileName: params.fileName,\n          fileSize: params.fileSize,\n        },\n        relationships: {\n          appScreenshotSet: {\n            data: { type: \"appScreenshotSets\", id: params.setId },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async commitScreenshot(\n    screenshotId: string,\n    params: { sourceFileChecksum: string; uploaded: boolean }\n  ): Promise<AppScreenshot> {\n    const response = await this.http.patch<\n      JsonApiResponse<AppScreenshot>\n    >(`/v1/appScreenshots/${screenshotId}`, {\n      data: {\n        type: \"appScreenshots\",\n        id: screenshotId,\n        attributes: {\n          sourceFileChecksum: params.sourceFileChecksum,\n          uploaded: params.uploaded,\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async deleteScreenshot(screenshotId: string): Promise<void> {\n    await this.http.delete(`/v1/appScreenshots/${screenshotId}`);\n  }\n\n  async deleteSet(setId: string): Promise<void> {\n    await this.http.delete(`/v1/appScreenshotSets/${setId}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface ReviewSubmission {\n  id: string;\n  type: \"reviewSubmissions\";\n  attributes: {\n    state: string;\n    submittedDate: string | null;\n    platform: string;\n  };\n}\n\nexport interface AppStoreVersionSubmission {\n  id: string;\n  type: \"appStoreVersionSubmissions\";\n}\n\nexport class ReviewSubmissionsResource {\n  constructor(private http: RequestClient) {}\n\n  async submitVersion(versionId: string): Promise<AppStoreVersionSubmission> {\n    const response = await this.http.post<\n      JsonApiResponse<AppStoreVersionSubmission>\n    >(\"/v1/appStoreVersionSubmissions\", {\n      data: {\n        type: \"appStoreVersionSubmissions\",\n        relationships: {\n          appStoreVersion: {\n            data: { type: \"appStoreVersions\", id: versionId },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async createReviewSubmission(params: {\n    appId: string;\n    platform: string;\n  }): Promise<ReviewSubmission> {\n    const response = await this.http.post<\n      JsonApiResponse<ReviewSubmission>\n    >(\"/v1/reviewSubmissions\", {\n      data: {\n        type: \"reviewSubmissions\",\n        attributes: {\n          platform: params.platform,\n        },\n        relationships: {\n          app: {\n            data: { type: \"apps\", id: params.appId },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async confirmReviewSubmission(submissionId: string): Promise<ReviewSubmission> {\n    const response = await this.http.patch<\n      JsonApiResponse<ReviewSubmission>\n    >(`/v1/reviewSubmissions/${submissionId}`, {\n      data: {\n        type: \"reviewSubmissions\",\n        id: submissionId,\n        attributes: {\n          submitted: true,\n        },\n      },\n    });\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\n/**\n * App Info is the metadata container that holds an app's categories, age\n * ratings, and localisations for a single submission cycle. Ported from\n * `spaceship/connect_api/models/app_info.rb`.\n */\nexport interface AppInfoAttributes {\n  appStoreState?: string | null;\n  state?: string | null;\n  appStoreAgeRating?: string | null;\n  brazilAgeRating?: string | null;\n  kidsAgeBand?: string | null;\n}\n\nexport type AppInfo = JsonApiResource<\"appInfos\", AppInfoAttributes>;\n\nexport class AppInfosResource {\n  constructor(private http: RequestClient) {}\n\n  async listForApp(appId: string, params?: {\n    include?: string;\n    limit?: number;\n  }): Promise<AppInfo[]> {\n    const listParams: ListParams = {\n      limit: params?.limit ?? 200,\n      include: params?.include,\n    };\n    return this.http.all<AppInfo>(`/v1/apps/${appId}/appInfos`, listParams);\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<AppInfo> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<AppInfo>>(\n      `/v1/appInfos/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    relationships?: Record<string, { type: string; id: string } | null>\n  ): Promise<AppInfo> {\n    const response = await this.http.patch<JsonApiResponse<AppInfo>>(\n      `/v1/appInfos/${id}`,\n      {\n        data: {\n          type: \"appInfos\",\n          id,\n          ...(relationships\n            ? {\n                relationships: Object.fromEntries(\n                  Object.entries(relationships).map(([k, v]) => [k, { data: v }])\n                ),\n              }\n            : {}),\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/appInfos/${id}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppInfoLocalizationAttributes {\n  locale: string;\n  name?: string | null;\n  subtitle?: string | null;\n  privacyPolicyUrl?: string | null;\n  privacyChoicesUrl?: string | null;\n  privacyPolicyText?: string | null;\n}\n\nexport type AppInfoLocalization = JsonApiResource<\n  \"appInfoLocalizations\",\n  AppInfoLocalizationAttributes\n>;\n\nexport class AppInfoLocalizationsResource {\n  constructor(private http: RequestClient) {}\n\n  async listForAppInfo(appInfoId: string, params?: {\n    limit?: number;\n  }): Promise<AppInfoLocalization[]> {\n    const listParams: ListParams = {\n      limit: params?.limit ?? 200,\n    };\n    return this.http.all<AppInfoLocalization>(\n      `/v1/appInfos/${appInfoId}/appInfoLocalizations`,\n      listParams\n    );\n  }\n\n  async get(id: string): Promise<AppInfoLocalization> {\n    const response = await this.http.get<JsonApiResponse<AppInfoLocalization>>(\n      `/v1/appInfoLocalizations/${id}`\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    appInfoId: string;\n    attributes: AppInfoLocalizationAttributes;\n  }): Promise<AppInfoLocalization> {\n    const response = await this.http.post<JsonApiResponse<AppInfoLocalization>>(\n      \"/v1/appInfoLocalizations\",\n      {\n        data: {\n          type: \"appInfoLocalizations\",\n          attributes: params.attributes,\n          relationships: {\n            appInfo: { data: { type: \"appInfos\", id: params.appInfoId } },\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: Partial<AppInfoLocalizationAttributes>\n  ): Promise<AppInfoLocalization> {\n    const response = await this.http.patch<JsonApiResponse<AppInfoLocalization>>(\n      `/v1/appInfoLocalizations/${id}`,\n      { data: { type: \"appInfoLocalizations\", id, attributes } }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/appInfoLocalizations/${id}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppStoreReviewDetailAttributes {\n  contactFirstName?: string | null;\n  contactLastName?: string | null;\n  contactPhone?: string | null;\n  contactEmail?: string | null;\n  demoAccountName?: string | null;\n  demoAccountPassword?: string | null;\n  demoAccountRequired?: boolean | null;\n  notes?: string | null;\n}\n\nexport type AppStoreReviewDetail = JsonApiResource<\n  \"appStoreReviewDetails\",\n  AppStoreReviewDetailAttributes\n>;\n\nexport class AppStoreReviewDetailsResource {\n  constructor(private http: RequestClient) {}\n\n  async getForAppStoreVersion(\n    appStoreVersionId: string\n  ): Promise<AppStoreReviewDetail> {\n    const response = await this.http.get<\n      JsonApiResponse<AppStoreReviewDetail>\n    >(`/v1/appStoreVersions/${appStoreVersionId}/appStoreReviewDetail`);\n    return response.data;\n  }\n\n  async get(id: string): Promise<AppStoreReviewDetail> {\n    const response = await this.http.get<\n      JsonApiResponse<AppStoreReviewDetail>\n    >(`/v1/appStoreReviewDetails/${id}`);\n    return response.data;\n  }\n\n  async create(params: {\n    appStoreVersionId: string;\n    attributes: AppStoreReviewDetailAttributes;\n  }): Promise<AppStoreReviewDetail> {\n    const response = await this.http.post<\n      JsonApiResponse<AppStoreReviewDetail>\n    >(\"/v1/appStoreReviewDetails\", {\n      data: {\n        type: \"appStoreReviewDetails\",\n        attributes: params.attributes,\n        relationships: {\n          appStoreVersion: {\n            data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n          },\n        },\n      },\n    });\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: Partial<AppStoreReviewDetailAttributes>\n  ): Promise<AppStoreReviewDetail> {\n    const response = await this.http.patch<\n      JsonApiResponse<AppStoreReviewDetail>\n    >(`/v1/appStoreReviewDetails/${id}`, {\n      data: { type: \"appStoreReviewDetails\", id, attributes },\n    });\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaTesterAttributes {\n  firstName?: string | null;\n  lastName?: string | null;\n  email: string;\n  inviteType?: \"EMAIL\" | \"PUBLIC_LINK\" | null;\n  state?: string | null;\n}\n\nexport type BetaTester = JsonApiResource<\"betaTesters\", BetaTesterAttributes>;\n\nexport class BetaTestersResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      email?: string;\n      firstName?: string;\n      lastName?: string;\n      inviteType?: string;\n      apps?: string | string[];\n      betaGroups?: string | string[];\n    };\n    include?: string;\n    limit?: number;\n    sort?: string;\n  }): Promise<BetaTester[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    return this.http.all<BetaTester>(\"/v1/betaTesters\", listParams);\n  }\n\n  async get(id: string): Promise<BetaTester> {\n    const response = await this.http.get<JsonApiResponse<BetaTester>>(\n      `/v1/betaTesters/${id}`\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    email: string;\n    firstName?: string;\n    lastName?: string;\n    betaGroupIds?: string[];\n    appIds?: string[];\n  }): Promise<BetaTester> {\n    const attributes: BetaTesterAttributes = {\n      email: params.email,\n      firstName: params.firstName,\n      lastName: params.lastName,\n    };\n    const relationships: Record<string, { data: Array<{ type: string; id: string }> }> = {};\n    if (params.betaGroupIds?.length) {\n      relationships.betaGroups = {\n        data: params.betaGroupIds.map((id) => ({ type: \"betaGroups\", id })),\n      };\n    }\n    if (params.appIds?.length) {\n      relationships.apps = {\n        data: params.appIds.map((id) => ({ type: \"apps\", id })),\n      };\n    }\n    const response = await this.http.post<JsonApiResponse<BetaTester>>(\n      \"/v1/betaTesters\",\n      {\n        data: {\n          type: \"betaTesters\",\n          attributes,\n          ...(Object.keys(relationships).length ? { relationships } : {}),\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/betaTesters/${id}`);\n  }\n\n  async findByEmail(email: string): Promise<BetaTester | null> {\n    const results = await this.list({ filter: { email }, limit: 1 });\n    return results[0] ?? null;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaAppReviewSubmissionAttributes {\n  betaReviewState?: string | null;\n  submittedDate?: string | null;\n}\n\nexport type BetaAppReviewSubmission = JsonApiResource<\n  \"betaAppReviewSubmissions\",\n  BetaAppReviewSubmissionAttributes\n>;\n\nexport class BetaAppReviewSubmissionsResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: { build?: string | string[]; betaReviewState?: string };\n    limit?: number;\n  }): Promise<BetaAppReviewSubmission[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      limit: params?.limit ?? 200,\n    };\n    return this.http.all<BetaAppReviewSubmission>(\n      \"/v1/betaAppReviewSubmissions\",\n      listParams\n    );\n  }\n\n  async get(id: string): Promise<BetaAppReviewSubmission> {\n    const response = await this.http.get<JsonApiResponse<BetaAppReviewSubmission>>(\n      `/v1/betaAppReviewSubmissions/${id}`\n    );\n    return response.data;\n  }\n\n  async create(buildId: string): Promise<BetaAppReviewSubmission> {\n    const response = await this.http.post<JsonApiResponse<BetaAppReviewSubmission>>(\n      \"/v1/betaAppReviewSubmissions\",\n      {\n        data: {\n          type: \"betaAppReviewSubmissions\",\n          relationships: {\n            build: { data: { type: \"builds\", id: buildId } },\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface BetaAppReviewDetailAttributes {\n  contactFirstName?: string | null;\n  contactLastName?: string | null;\n  contactPhone?: string | null;\n  contactEmail?: string | null;\n  demoAccountName?: string | null;\n  demoAccountPassword?: string | null;\n  demoAccountRequired?: boolean | null;\n  notes?: string | null;\n}\n\nexport type BetaAppReviewDetail = JsonApiResource<\n  \"betaAppReviewDetails\",\n  BetaAppReviewDetailAttributes\n>;\n\nexport class BetaAppReviewDetailsResource {\n  constructor(private http: RequestClient) {}\n\n  async getForApp(appId: string): Promise<BetaAppReviewDetail> {\n    const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n      `/v1/apps/${appId}/betaAppReviewDetail`\n    );\n    return response.data;\n  }\n\n  async get(id: string): Promise<BetaAppReviewDetail> {\n    const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n      `/v1/betaAppReviewDetails/${id}`\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: Partial<BetaAppReviewDetailAttributes>\n  ): Promise<BetaAppReviewDetail> {\n    const response = await this.http.patch<JsonApiResponse<BetaAppReviewDetail>>(\n      `/v1/betaAppReviewDetails/${id}`,\n      { data: { type: \"betaAppReviewDetails\", id, attributes } }\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport type InvitationType = \"EMAIL\" | \"PUBLIC_LINK\";\n\nexport interface BetaTesterInvitationAttributes {\n  // Write-only resource: no stored attributes, just a creation side-effect.\n  [key: string]: unknown;\n}\n\nexport type BetaTesterInvitation = JsonApiResource<\n  \"betaTesterInvitations\",\n  BetaTesterInvitationAttributes\n>;\n\nexport class BetaInvitationsResource {\n  constructor(private http: RequestClient) {}\n\n  /** Send a TestFlight invitation email for an existing tester + app. */\n  async send(params: {\n    appId: string;\n    betaTesterId: string;\n  }): Promise<BetaTesterInvitation> {\n    const response = await this.http.post<JsonApiResponse<BetaTesterInvitation>>(\n      \"/v1/betaTesterInvitations\",\n      {\n        data: {\n          type: \"betaTesterInvitations\",\n          relationships: {\n            app: { data: { type: \"apps\", id: params.appId } },\n            betaTester: { data: { type: \"betaTesters\", id: params.betaTesterId } },\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaLicenseAgreementAttributes {\n  agreementText?: string | null;\n}\n\nexport type BetaLicenseAgreement = JsonApiResource<\n  \"betaLicenseAgreements\",\n  BetaLicenseAgreementAttributes\n>;\n\nexport class BetaLicensesResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: { limit?: number }): Promise<BetaLicenseAgreement[]> {\n    const listParams: ListParams = {\n      limit: params?.limit ?? 200,\n    };\n    return this.http.all<BetaLicenseAgreement>(\n      \"/v1/betaLicenseAgreements\",\n      listParams\n    );\n  }\n\n  async get(id: string): Promise<BetaLicenseAgreement> {\n    const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n      `/v1/betaLicenseAgreements/${id}`\n    );\n    return response.data;\n  }\n\n  async getForApp(appId: string): Promise<BetaLicenseAgreement> {\n    const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n      `/v1/apps/${appId}/betaLicenseAgreement`\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: Partial<BetaLicenseAgreementAttributes>\n  ): Promise<BetaLicenseAgreement> {\n    const response = await this.http.patch<\n      JsonApiResponse<BetaLicenseAgreement>\n    >(`/v1/betaLicenseAgreements/${id}`, {\n      data: { type: \"betaLicenseAgreements\", id, attributes },\n    });\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppPreviewAttributes {\n  fileSize?: number | null;\n  fileName?: string | null;\n  sourceFileChecksum?: string | null;\n  previewFrameTimeCode?: string | null;\n  mimeType?: string | null;\n  videoUrl?: string | null;\n  previewImage?: { templateUrl?: string; width?: number; height?: number } | null;\n  uploadOperations?: unknown[] | null;\n  assetDeliveryState?: { state?: string } | null;\n  uploaded?: boolean | null;\n}\n\nexport type AppPreview = JsonApiResource<\"appPreviews\", AppPreviewAttributes>;\n\nexport class AppPreviewsResource {\n  constructor(private http: RequestClient) {}\n\n  async get(id: string): Promise<AppPreview> {\n    const response = await this.http.get<JsonApiResponse<AppPreview>>(\n      `/v1/appPreviews/${id}`\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    appPreviewSetId: string;\n    fileSize: number;\n    fileName: string;\n    previewFrameTimeCode?: string;\n    mimeType?: string;\n  }): Promise<AppPreview> {\n    const { appPreviewSetId, ...rest } = params;\n    const response = await this.http.post<JsonApiResponse<AppPreview>>(\n      \"/v1/appPreviews\",\n      {\n        data: {\n          type: \"appPreviews\",\n          attributes: rest,\n          relationships: {\n            appPreviewSet: {\n              data: { type: \"appPreviewSets\", id: appPreviewSetId },\n            },\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: { uploaded?: boolean; sourceFileChecksum?: string; previewFrameTimeCode?: string }\n  ): Promise<AppPreview> {\n    const response = await this.http.patch<JsonApiResponse<AppPreview>>(\n      `/v1/appPreviews/${id}`,\n      { data: { type: \"appPreviews\", id, attributes } }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/appPreviews/${id}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPreviewSetAttributes {\n  previewType?: string | null;\n}\n\nexport type AppPreviewSet = JsonApiResource<\n  \"appPreviewSets\",\n  AppPreviewSetAttributes\n>;\n\nexport class AppPreviewSetsResource {\n  constructor(private http: RequestClient) {}\n\n  async listForLocalization(\n    localizationId: string,\n    params?: { limit?: number; include?: string }\n  ): Promise<AppPreviewSet[]> {\n    const listParams: ListParams = {\n      limit: params?.limit ?? 200,\n      include: params?.include,\n    };\n    return this.http.all<AppPreviewSet>(\n      `/v1/appStoreVersionLocalizations/${localizationId}/appPreviewSets`,\n      listParams\n    );\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<AppPreviewSet> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<AppPreviewSet>>(\n      `/v1/appPreviewSets/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    appStoreVersionLocalizationId: string;\n    previewType: string;\n  }): Promise<AppPreviewSet> {\n    const response = await this.http.post<JsonApiResponse<AppPreviewSet>>(\n      \"/v1/appPreviewSets\",\n      {\n        data: {\n          type: \"appPreviewSets\",\n          attributes: { previewType: params.previewType },\n          relationships: {\n            appStoreVersionLocalization: {\n              data: {\n                type: \"appStoreVersionLocalizations\",\n                id: params.appStoreVersionLocalizationId,\n              },\n            },\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/appPreviewSets/${id}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPriceAttributes {\n  startDate?: string | null;\n}\n\nexport type AppPrice = JsonApiResource<\"appPrices\", AppPriceAttributes>;\n\nexport class AppPricesResource {\n  constructor(private http: RequestClient) {}\n\n  async listForApp(appId: string, params?: {\n    include?: string;\n    limit?: number;\n  }): Promise<AppPrice[]> {\n    const listParams: ListParams = {\n      limit: params?.limit ?? 200,\n      include: params?.include,\n    };\n    return this.http.all<AppPrice>(`/v1/apps/${appId}/prices`, listParams);\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<AppPrice> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<AppPrice>>(\n      `/v1/appPrices/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface TerritoryAttributes {\n  currency?: string | null;\n}\n\nexport type Territory = JsonApiResource<\"territories\", TerritoryAttributes>;\n\nexport class TerritoriesResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: { limit?: number }): Promise<Territory[]> {\n    const listParams: ListParams = {\n      limit: params?.limit ?? 200,\n    };\n    return this.http.all<Territory>(\"/v1/territories\", listParams);\n  }\n\n  async get(id: string): Promise<Territory> {\n    const response = await this.http.get<JsonApiResponse<Territory>>(\n      `/v1/territories/${id}`\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AgeRatingDeclarationAttributes {\n  alcoholTobaccoOrDrugUseOrReferences?: string | null;\n  contests?: string | null;\n  gamblingSimulated?: string | null;\n  medicalOrTreatmentInformation?: string | null;\n  profanityOrCrudeHumor?: string | null;\n  sexualContentGraphicAndNudity?: string | null;\n  sexualContentOrNudity?: string | null;\n  horrorOrFearThemes?: string | null;\n  matureOrSuggestiveThemes?: string | null;\n  unrestrictedWebAccess?: boolean | null;\n  gamblingAndContests?: boolean | null;\n  gambling?: string | null;\n  violenceCartoonOrFantasy?: string | null;\n  violenceRealistic?: string | null;\n  violenceRealisticProlongedGraphicOrSadistic?: string | null;\n  kidsAgeBand?: string | null;\n  seventeenPlus?: boolean | null;\n}\n\nexport type AgeRatingDeclaration = JsonApiResource<\n  \"ageRatingDeclarations\",\n  AgeRatingDeclarationAttributes\n>;\n\nexport class AgeRatingDeclarationsResource {\n  constructor(private http: RequestClient) {}\n\n  async get(id: string): Promise<AgeRatingDeclaration> {\n    const response = await this.http.get<JsonApiResponse<AgeRatingDeclaration>>(\n      `/v1/ageRatingDeclarations/${id}`\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: Partial<AgeRatingDeclarationAttributes>\n  ): Promise<AgeRatingDeclaration> {\n    const response = await this.http.patch<\n      JsonApiResponse<AgeRatingDeclaration>\n    >(`/v1/ageRatingDeclarations/${id}`, {\n      data: { type: \"ageRatingDeclarations\", id, attributes },\n    });\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppCategoryAttributes {\n  platforms?: string[] | null;\n}\n\nexport type AppCategory = JsonApiResource<\"appCategories\", AppCategoryAttributes>;\n\nexport class AppCategoriesResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: { platforms?: string };\n    include?: string;\n    limit?: number;\n  }): Promise<AppCategory[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n    };\n    return this.http.all<AppCategory>(\"/v1/appCategories\", listParams);\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<AppCategory> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<AppCategory>>(\n      `/v1/appCategories/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppEncryptionDeclarationAttributes {\n  appEncryptionDeclarationState?: string | null;\n  createdDate?: string | null;\n  codeValue?: string | null;\n  usesEncryption?: boolean | null;\n  exempt?: boolean | null;\n  containsProprietaryCryptography?: boolean | null;\n  containsThirdPartyCryptography?: boolean | null;\n  availableOnFrenchStore?: boolean | null;\n  platform?: string | null;\n  uploadedDate?: string | null;\n  documentUrl?: string | null;\n  documentName?: string | null;\n  documentType?: string | null;\n}\n\nexport type AppEncryptionDeclaration = JsonApiResource<\n  \"appEncryptionDeclarations\",\n  AppEncryptionDeclarationAttributes\n>;\n\nexport class AppEncryptionDeclarationsResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: { app?: string; platform?: string };\n    limit?: number;\n  }): Promise<AppEncryptionDeclaration[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      limit: params?.limit ?? 200,\n    };\n    return this.http.all<AppEncryptionDeclaration>(\n      \"/v1/appEncryptionDeclarations\",\n      listParams\n    );\n  }\n\n  async get(id: string): Promise<AppEncryptionDeclaration> {\n    const response = await this.http.get<\n      JsonApiResponse<AppEncryptionDeclaration>\n    >(`/v1/appEncryptionDeclarations/${id}`);\n    return response.data;\n  }\n\n  async assignToBuild(params: {\n    declarationId: string;\n    buildIds: string[];\n  }): Promise<void> {\n    await this.http.post(\n      `/v1/appEncryptionDeclarations/${params.declarationId}/relationships/builds`,\n      { data: params.buildIds.map((id) => ({ type: \"builds\", id })) }\n    );\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface IdfaDeclarationAttributes {\n  honorsLimitedAdTracking?: boolean | null;\n  servesAds?: boolean | null;\n  attributesActionWithPreviousAd?: boolean | null;\n  attributesAppInstallationToPreviousAd?: boolean | null;\n}\n\nexport type IdfaDeclaration = JsonApiResource<\n  \"idfaDeclarations\",\n  IdfaDeclarationAttributes\n>;\n\nexport class IdfaDeclarationsResource {\n  constructor(private http: RequestClient) {}\n\n  async getForAppStoreVersion(\n    appStoreVersionId: string\n  ): Promise<IdfaDeclaration> {\n    const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n      `/v1/appStoreVersions/${appStoreVersionId}/idfaDeclaration`\n    );\n    return response.data;\n  }\n\n  async get(id: string): Promise<IdfaDeclaration> {\n    const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n      `/v1/idfaDeclarations/${id}`\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    appStoreVersionId: string;\n    attributes: IdfaDeclarationAttributes;\n  }): Promise<IdfaDeclaration> {\n    const response = await this.http.post<JsonApiResponse<IdfaDeclaration>>(\n      \"/v1/idfaDeclarations\",\n      {\n        data: {\n          type: \"idfaDeclarations\",\n          attributes: params.attributes,\n          relationships: {\n            appStoreVersion: {\n              data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n            },\n          },\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: Partial<IdfaDeclarationAttributes>\n  ): Promise<IdfaDeclaration> {\n    const response = await this.http.patch<JsonApiResponse<IdfaDeclaration>>(\n      `/v1/idfaDeclarations/${id}`,\n      { data: { type: \"idfaDeclarations\", id, attributes } }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/idfaDeclarations/${id}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface PreReleaseVersionAttributes {\n  version?: string | null;\n  platform?: string | null;\n}\n\nexport type PreReleaseVersion = JsonApiResource<\n  \"preReleaseVersions\",\n  PreReleaseVersionAttributes\n>;\n\nexport class PreReleaseVersionsResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: {\n      app?: string;\n      version?: string;\n      platform?: string;\n      \"builds.expired\"?: string;\n      \"builds.processingState\"?: string;\n      \"builds.version\"?: string;\n    };\n    include?: string;\n    limit?: number;\n    sort?: string;\n  }): Promise<PreReleaseVersion[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    return this.http.all<PreReleaseVersion>(\n      \"/v1/preReleaseVersions\",\n      listParams\n    );\n  }\n\n  async get(\n    id: string,\n    params?: { include?: string }\n  ): Promise<PreReleaseVersion> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n      `/v1/preReleaseVersions/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n\n  async findByVersion(params: {\n    appId: string;\n    version: string;\n    platform?: string;\n  }): Promise<PreReleaseVersion | null> {\n    const filter: Record<string, string> = {\n      app: params.appId,\n      version: params.version,\n    };\n    if (params.platform) filter.platform = params.platform;\n    const results = await this.list({ filter, limit: 1 });\n    return results[0] ?? null;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface ReviewSubmissionItemAttributes {\n  state?: string | null;\n  removed?: boolean | null;\n  ready?: boolean | null;\n}\n\nexport type ReviewSubmissionItem = JsonApiResource<\n  \"reviewSubmissionItems\",\n  ReviewSubmissionItemAttributes\n>;\n\nexport class ReviewSubmissionItemsResource {\n  constructor(private http: RequestClient) {}\n\n  async listForSubmission(\n    reviewSubmissionId: string,\n    params?: { include?: string; limit?: number }\n  ): Promise<ReviewSubmissionItem[]> {\n    const listParams: ListParams = {\n      include: params?.include,\n      limit: params?.limit ?? 200,\n    };\n    return this.http.all<ReviewSubmissionItem>(\n      `/v1/reviewSubmissions/${reviewSubmissionId}/items`,\n      listParams\n    );\n  }\n\n  async get(id: string): Promise<ReviewSubmissionItem> {\n    const response = await this.http.get<JsonApiResponse<ReviewSubmissionItem>>(\n      `/v1/reviewSubmissionItems/${id}`\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    reviewSubmissionId: string;\n    appStoreVersionId?: string;\n    appCustomProductPageVersionId?: string;\n    appStoreVersionExperimentId?: string;\n  }): Promise<ReviewSubmissionItem> {\n    const relationships: Record<string, { data: { type: string; id: string } }> = {\n      reviewSubmission: {\n        data: { type: \"reviewSubmissions\", id: params.reviewSubmissionId },\n      },\n    };\n    if (params.appStoreVersionId) {\n      relationships.appStoreVersion = {\n        data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n      };\n    }\n    if (params.appCustomProductPageVersionId) {\n      relationships.appCustomProductPageVersion = {\n        data: {\n          type: \"appCustomProductPageVersions\",\n          id: params.appCustomProductPageVersionId,\n        },\n      };\n    }\n    if (params.appStoreVersionExperimentId) {\n      relationships.appStoreVersionExperiment = {\n        data: {\n          type: \"appStoreVersionExperiments\",\n          id: params.appStoreVersionExperimentId,\n        },\n      };\n    }\n    const response = await this.http.post<JsonApiResponse<ReviewSubmissionItem>>(\n      \"/v1/reviewSubmissionItems\",\n      {\n        data: {\n          type: \"reviewSubmissionItems\",\n          relationships,\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: { removed?: boolean }\n  ): Promise<ReviewSubmissionItem> {\n    const response = await this.http.patch<JsonApiResponse<ReviewSubmissionItem>>(\n      `/v1/reviewSubmissionItems/${id}`,\n      { data: { type: \"reviewSubmissionItems\", id, attributes } }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/reviewSubmissionItems/${id}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface UserAttributes {\n  username?: string | null;\n  firstName?: string | null;\n  lastName?: string | null;\n  roles?: string[] | null;\n  allAppsVisible?: boolean | null;\n  provisioningAllowed?: boolean | null;\n}\n\nexport type User = JsonApiResource<\"users\", UserAttributes>;\n\nexport class UsersResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: { username?: string; roles?: string | string[] };\n    include?: string;\n    limit?: number;\n    sort?: string;\n  }): Promise<User[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    return this.http.all<User>(\"/v1/users\", listParams);\n  }\n\n  async get(id: string): Promise<User> {\n    const response = await this.http.get<JsonApiResponse<User>>(`/v1/users/${id}`);\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: Partial<UserAttributes>,\n    visibleAppIds?: string[]\n  ): Promise<User> {\n    const relationships = visibleAppIds\n      ? {\n          visibleApps: {\n            data: visibleAppIds.map((id) => ({ type: \"apps\", id })),\n          },\n        }\n      : undefined;\n    const response = await this.http.patch<JsonApiResponse<User>>(\n      `/v1/users/${id}`,\n      {\n        data: {\n          type: \"users\",\n          id,\n          attributes,\n          ...(relationships ? { relationships } : {}),\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/users/${id}`);\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface UserInvitationAttributes {\n  email: string;\n  firstName?: string | null;\n  lastName?: string | null;\n  expirationDate?: string | null;\n  roles?: string[] | null;\n  allAppsVisible?: boolean | null;\n  provisioningAllowed?: boolean | null;\n}\n\nexport type UserInvitation = JsonApiResource<\n  \"userInvitations\",\n  UserInvitationAttributes\n>;\n\nexport class UserInvitationsResource {\n  constructor(private http: RequestClient) {}\n\n  async list(params?: {\n    filter?: { email?: string; roles?: string | string[] };\n    include?: string;\n    limit?: number;\n    sort?: string;\n  }): Promise<UserInvitation[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    return this.http.all<UserInvitation>(\"/v1/userInvitations\", listParams);\n  }\n\n  async get(id: string): Promise<UserInvitation> {\n    const response = await this.http.get<JsonApiResponse<UserInvitation>>(\n      `/v1/userInvitations/${id}`\n    );\n    return response.data;\n  }\n\n  async create(params: {\n    attributes: UserInvitationAttributes;\n    visibleAppIds?: string[];\n  }): Promise<UserInvitation> {\n    const relationships = params.visibleAppIds\n      ? {\n          visibleApps: {\n            data: params.visibleAppIds.map((id) => ({ type: \"apps\", id })),\n          },\n        }\n      : undefined;\n    const response = await this.http.post<JsonApiResponse<UserInvitation>>(\n      \"/v1/userInvitations\",\n      {\n        data: {\n          type: \"userInvitations\",\n          attributes: params.attributes,\n          ...(relationships ? { relationships } : {}),\n        },\n      }\n    );\n    return response.data;\n  }\n\n  async delete(id: string): Promise<void> {\n    await this.http.delete(`/v1/userInvitations/${id}`);\n  }\n\n  async findByEmail(email: string): Promise<UserInvitation | null> {\n    const results = await this.list({ filter: { email }, limit: 1 });\n    return results[0] ?? null;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface InAppPurchaseAttributes {\n  name?: string | null;\n  productId?: string | null;\n  inAppPurchaseType?: string | null;\n  state?: string | null;\n  reviewNote?: string | null;\n  familySharable?: boolean | null;\n}\n\nexport type InAppPurchase = JsonApiResource<\n  \"inAppPurchases\" | \"inAppPurchasesV2\",\n  InAppPurchaseAttributes\n>;\n\nexport class InAppPurchasesResource {\n  constructor(private http: RequestClient) {}\n\n  async listForApp(appId: string, params?: {\n    filter?: { state?: string; inAppPurchaseType?: string };\n    include?: string;\n    limit?: number;\n    sort?: string;\n  }): Promise<InAppPurchase[]> {\n    const listParams: ListParams = {\n      filter: params?.filter as Record<string, string | string[]>,\n      include: params?.include,\n      limit: params?.limit ?? 200,\n      sort: params?.sort,\n    };\n    return this.http.all<InAppPurchase>(\n      `/v2/apps/${appId}/inAppPurchasesV2`,\n      listParams\n    );\n  }\n\n  async get(id: string, params?: { include?: string }): Promise<InAppPurchase> {\n    const queryParams: Record<string, string | undefined> = {};\n    if (params?.include) queryParams[\"include\"] = params.include;\n    const response = await this.http.get<JsonApiResponse<InAppPurchase>>(\n      `/v2/inAppPurchases/${id}`,\n      queryParams\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface GameCenterDetailAttributes {\n  arcadeEnabled?: boolean | null;\n  challengeEnabled?: boolean | null;\n}\n\nexport type GameCenterDetail = JsonApiResource<\n  \"gameCenterDetails\",\n  GameCenterDetailAttributes\n>;\n\nexport class GameCenterDetailResource {\n  constructor(private http: RequestClient) {}\n\n  async getForApp(appId: string): Promise<GameCenterDetail> {\n    const response = await this.http.get<JsonApiResponse<GameCenterDetail>>(\n      `/v1/apps/${appId}/gameCenterDetail`\n    );\n    return response.data;\n  }\n\n  async get(id: string): Promise<GameCenterDetail> {\n    const response = await this.http.get<JsonApiResponse<GameCenterDetail>>(\n      `/v1/gameCenterDetails/${id}`\n    );\n    return response.data;\n  }\n\n  async update(\n    id: string,\n    attributes: Partial<GameCenterDetailAttributes>\n  ): Promise<GameCenterDetail> {\n    const response = await this.http.patch<JsonApiResponse<GameCenterDetail>>(\n      `/v1/gameCenterDetails/${id}`,\n      { data: { type: \"gameCenterDetails\", id, attributes } }\n    );\n    return response.data;\n  }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\n/**\n * TestFlight / Xcode build metrics. Exposes perf & crash stats per build.\n * Wraps `/v1/builds/{id}/perfPowerMetrics` and\n * `/v1/builds/{id}/diagnosticSignatures`.\n */\nexport interface PerfPowerMetricAttributes {\n  metricCategory?: string | null;\n  platform?: string | null;\n  datasets?: unknown[] | null;\n}\n\nexport type PerfPowerMetric = JsonApiResource<\n  \"perfPowerMetrics\",\n  PerfPowerMetricAttributes\n>;\n\nexport interface DiagnosticSignatureAttributes {\n  signature?: string | null;\n  weight?: number | null;\n  diagnosticType?: string | null;\n}\n\nexport type DiagnosticSignature = JsonApiResource<\n  \"diagnosticSignatures\",\n  DiagnosticSignatureAttributes\n>;\n\nexport class XcodeMetricsResource {\n  constructor(private http: RequestClient) {}\n\n  async getPerfPowerMetrics(buildId: string): Promise<PerfPowerMetric[]> {\n    const response = await this.http.get<{ data: PerfPowerMetric[] }>(\n      `/v1/builds/${buildId}/perfPowerMetrics`\n    );\n    return response.data;\n  }\n\n  async getDiagnosticSignatures(buildId: string): Promise<DiagnosticSignature[]> {\n    const response = await this.http.get<{ data: DiagnosticSignature[] }>(\n      `/v1/builds/${buildId}/diagnosticSignatures`\n    );\n    return response.data;\n  }\n\n  async getPerfPowerMetric(id: string): Promise<PerfPowerMetric> {\n    const response = await this.http.get<JsonApiResponse<PerfPowerMetric>>(\n      `/v1/perfPowerMetrics/${id}`\n    );\n    return response.data;\n  }\n\n  async getDiagnosticSignature(id: string): Promise<DiagnosticSignature> {\n    const response = await this.http.get<JsonApiResponse<DiagnosticSignature>>(\n      `/v1/diagnosticSignatures/${id}`\n    );\n    return response.data;\n  }\n}\n","/**\n * Apple Developer Portal Client\n * 1:1 port of Fastlane Spaceship PortalClient\n *\n * Uses session cookies (from loginWithAppleId) to talk to\n * developer.apple.com/services-account/QH65B2/\n *\n * This is the web portal API — separate from the ASC REST API (JWT).\n * Fastlane uses this for: certs, profiles, devices, bundle IDs, app groups, etc.\n */\n\nimport type { AppleSession } from \"./apple-session.js\";\nimport { checkPortalResponse } from \"./apple-session.js\";\n\nconst PORTAL_BASE = \"https://developer.apple.com/services-account/QH65B2\";\n\n/**\n * Pick a key name that doesn't collide with any existing key in the\n * team. Apple rejects duplicate names with \"Another key with same name\n * exists\" (resultCode 35). On collision we append \" - 1\", \" - 2\", …\n * until we find a free slot.\n *\n * Note: Apple's auth key name validator is stricter than the profile\n * name validator — it rejects parentheses (resultCode 29106 \"Invalid\n * Auth Key name\") so the suffix is \" - N\" not \" (N)\".\n */\nfunction pickUniqueKeyName(base: string, taken: Set<string>): string {\n  if (!taken.has(base)) return base;\n  let n = 1;\n  while (taken.has(`${base} - ${n}`)) n++;\n  return `${base} - ${n}`;\n}\n\nexport class PortalClient {\n  private session: AppleSession;\n  private teamId: string;\n  private csrf = \"\";\n  private csrfTs = \"\";\n  private cookieStr: string;\n\n  constructor(session: AppleSession, teamId: string) {\n    this.session = session;\n    this.teamId = teamId;\n    this.cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n  }\n\n  /** Initialize CSRF tokens — must be called before mutations */\n  async init(): Promise<void> {\n    await this.post(\"account/listTeams.action\", {});\n  }\n\n  /**\n   * JSON POST — different content type than the standard form-encoded\n   * `post()`. Used by the App Store Connect API key endpoints\n   * (`account/auth/key/v2/create`), which Spaceship discovered take a\n   * JSON body even though every other portal mutation is form-encoded.\n   *\n   * Like the form-encoded `post()`, this also runs the response through\n   * `checkPortalResponse` — Apple returns HTTP 200 even for errors and\n   * encodes the error in `resultCode`/`userString` fields, so a raw\n   * status check would silently miss real failures.\n   */\n  private async postJson(path: string, body: unknown): Promise<{ status: number; body: any; rawText: string }> {\n    const headers: Record<string, string> = {\n      Cookie: this.cookieStr,\n      \"Content-Type\": \"application/json\",\n      Accept: \"application/json\",\n    };\n    if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n    console.log(`[portal] POST(json) ${path}`);\n    const res = await fetch(`${PORTAL_BASE}/${path}`, {\n      method: \"POST\",\n      headers,\n      body: JSON.stringify(body),\n    });\n\n    if (res.headers.get(\"csrf\")) { this.csrf = res.headers.get(\"csrf\")!; this.csrfTs = res.headers.get(\"csrf_ts\") ?? \"\"; }\n    for (const raw of res.headers.getSetCookie?.() ?? []) {\n      const m = raw.match(/^([^=]+)=([^;]*)/);\n      if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n    }\n\n    const text = await res.text();\n    let data: any = null;\n    try { data = text ? JSON.parse(text) : null; } catch {}\n    console.log(`[portal] POST(json) ${path} → ${res.status} ${text.slice(0, 400)}`);\n    // Apple's portal returns HTTP 200 with resultCode != 0 for failures;\n    // checkPortalResponse throws on those.\n    checkPortalResponse(data, this.session);\n    return { status: res.status, body: data, rawText: text };\n  }\n\n  /**\n   * GET helper for the portal endpoints that take query parameters\n   * (currently just `account/auth/key/download`). Returns the raw text\n   * since download endpoints can return PEMs or JSON depending on Apple's\n   * mood — caller decides how to parse.\n   */\n  private async getRaw(path: string, params: Record<string, string> = {}): Promise<{ status: number; rawText: string; contentType: string }> {\n    const url = new URL(`${PORTAL_BASE}/${path}`);\n    for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);\n    const headers: Record<string, string> = {\n      Cookie: this.cookieStr,\n      Accept: \"application/json, text/plain, application/x-pem-file, */*\",\n    };\n    if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n    console.log(`[portal] GET ${url.pathname}${url.search}`);\n    const res = await fetch(url.toString(), { headers });\n    for (const raw of res.headers.getSetCookie?.() ?? []) {\n      const m = raw.match(/^([^=]+)=([^;]*)/);\n      if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n    }\n    const text = await res.text();\n    const contentType = res.headers.get(\"content-type\") ?? \"\";\n    console.log(`[portal] GET ${url.pathname} → ${res.status} ${contentType} ${text.length}b`);\n    return { status: res.status, rawText: text, contentType };\n  }\n\n  // ── App Store Connect API Keys (.p8) ────────────────────────────────────\n\n  /**\n   * Create an App Store Connect API key via the developer portal's\n   * `account/auth/key/v2/create` endpoint. Reverse-engineered from the\n   * _current_ @expo/apple-utils npm package (v2.1.21), which is what\n   * EAS CLI uses to manage Apple credentials in production.\n   *\n   * This differs from older published reverse-engineering guides:\n   *   • URL uses the `/v2/create` suffix (Apple kept it)\n   *   • Field is `serviceConfigurations`, shape is an object keyed by\n   *     service id (NOT `serviceConfigurationsRequests: [...]` array)\n   *   • Body REQUIRES `scope: \"team\"`\n   *   • Needs a scope-specific CSRF warmup via the `keys` endpoint\n   *     before the create call (EAS's `ensureCSRFAsync(\"keys\", …)`)\n   *\n   * For an App Store Connect API key (PUBLIC_API, used by altool for\n   * TestFlight uploads), `serviceConfigurations` is an empty object `{}`.\n   * For an APNs auth key, it's `{ \"U27F4V844T\": [] }`. For MusicKit:\n   * `{ \"6A7HVUVQ3M\": [musicId] }`, etc.\n   *\n   * Apple's name validator rejects parentheses, brackets, and most\n   * punctuation — sanitize to alphanumeric + space + dash + underscore\n   * + period and collapse whitespace.\n   */\n  async createApiKey(\n    rawName: string,\n    serviceConfigurations: Record<string, unknown[]> = {}\n  ): Promise<{ keyId: string; raw: any }> {\n    // Sanitize: drop forbidden chars, leave headroom for a \"(N)\" suffix\n    // since Apple caps key names at 50 chars and we may need to dedupe.\n    const baseName = rawName\n      .replace(/[^A-Za-z0-9 _\\-.]/g, \" \")\n      .replace(/\\s+/g, \" \")\n      .trim()\n      .slice(0, 45);\n    if (!baseName) throw new Error(\"createApiKey: name is empty after sanitization\");\n\n    // EAS-style CSRF warmup AND name-collision discovery in one trip:\n    // listApiKeys refreshes the scoped CSRF for the \"keys\" area\n    // (per-section tokens, the listTeams CSRF isn't valid here) and\n    // hands us back the existing key names so we can dodge Apple's\n    // duplicate-name rejection (\"Another key with same name exists\").\n    let existingNames = new Set<string>();\n    try {\n      const list = await this.listApiKeys();\n      existingNames = new Set(\n        (list.keys ?? []).map((k: any) => String(k.keyName ?? \"\").trim())\n      );\n    } catch {\n      // Non-fatal — the create call will surface CSRF / collision\n      // errors if the warmup mattered and failed.\n    }\n\n    const name = pickUniqueKeyName(baseName, existingNames);\n\n    // EAS's portalRequestAsync auto-injects teamId into every body.\n    // Apple rejects the create call without it with resultCode 35.\n    const body = {\n      teamId: this.teamId,\n      name,\n      serviceConfigurations,\n      scope: \"team\",\n    };\n    const result = await this.postJson(\"account/auth/key/v2/create\", body);\n    // checkPortalResponse inside postJson already throws on resultCode != 0,\n    // so any error like \"Invalid Auth Key name\" surfaces as an exception\n    // before reaching this point.\n    const created = result.body?.keys?.[0] ?? result.body?.key ?? result.body?.data ?? result.body;\n    const keyId =\n      created?.keyId ??\n      created?.id ??\n      created?.kid ??\n      created?.attributes?.kid;\n    if (!keyId) {\n      throw new Error(`createApiKey: no key id in response. Body: ${result.rawText.slice(0, 400)}`);\n    }\n    return { keyId, raw: created };\n  }\n\n  /**\n   * Fetch a single API key by id via `account/auth/key/get`. Reverse-\n   * engineered from Spaceship's `get_key`. Returns the raw key record so\n   * the caller can extract whatever fields it needs (e.g. issuerId).\n   *\n   * Form-encoded POST — same shape as every other PortalClient mutation\n   * except the JSON `create` endpoint.\n   */\n  async getApiKey(keyId: string): Promise<any> {\n    const data = await this.post(\"account/auth/key/get\", {\n      teamId: this.teamId,\n      keyId,\n    });\n    return data?.keys?.[0] ?? data?.key ?? data?.data ?? data;\n  }\n\n  /**\n   * Revoke an existing key. Form-encoded POST per Spaceship's\n   * `revoke_key!`. Used for cleaning up orphan keys created during\n   * failed wizard runs.\n   */\n  async revokeApiKey(keyId: string): Promise<void> {\n    await this.post(\"account/auth/key/revoke\", {\n      teamId: this.teamId,\n      keyId,\n    });\n  }\n\n  // ── APNs Authentication Keys (.p8) ──────────────────────────────────────\n\n  /** Apple's hardcoded service id for APNs auth keys (from Spaceship). */\n  static readonly APNS_SERVICE_ID = \"U27F4V844T\";\n\n  /**\n   * Create an APNs Authentication Key (.p8) via the developer portal.\n   *\n   * Apple requires BOTH `serviceConfigurations` (the map) AND\n   * `serviceConfigurationsRequests` (the array of full config objects)\n   * in the v2/create body. Just sending the map alone results in\n   * \"No value was provided for the parameter 'serviceConfigurations'\".\n   *\n   * The exact body comes from @expo/apple-utils v2.1.21 — both fields\n   * are produced by separate functions (`d` for the map, `h` for the\n   * array) and merged into the create payload.\n   *\n   * Apple also rejects duplicate key names (\"Another key with same\n   * name exists\") — we dedupe by listing existing keys first and\n   * appending \" (N)\" until we find a free slot, mirroring the\n   * provisioning profile dedup.\n   */\n  async createApnsAuthKey(rawName: string): Promise<{ keyId: string; pem: string; raw: any }> {\n    const baseName = rawName\n      .replace(/[^A-Za-z0-9 _\\-.]/g, \" \")\n      .replace(/\\s+/g, \" \")\n      .trim()\n      .slice(0, 45); // headroom for a \" (N)\" suffix\n    if (!baseName) throw new Error(\"createApnsAuthKey: name is empty after sanitization\");\n\n    // CSRF warmup + name-collision discovery in one trip\n    let existingNames = new Set<string>();\n    try {\n      const list = await this.listApiKeys();\n      existingNames = new Set(\n        (list.keys ?? []).map((k: any) => String(k.keyName ?? \"\").trim())\n      );\n    } catch { /* ignore */ }\n\n    const name = pickUniqueKeyName(baseName, existingNames);\n\n    const body = {\n      teamId: this.teamId,\n      name,\n      serviceConfigurations: {\n        [PortalClient.APNS_SERVICE_ID]: [],\n      },\n      serviceConfigurationsRequests: [\n        {\n          isNew: true,\n          serviceId: PortalClient.APNS_SERVICE_ID,\n          identifiers: {},\n          environment: \"all\",\n          scope: \"team\",\n        },\n      ],\n      scope: \"team\",\n    };\n    const result = await this.postJson(\"account/auth/key/v2/create\", body);\n    const created = result.body?.keys?.[0];\n    if (!created?.keyId) {\n      throw new Error(`createApnsAuthKey: no key id in response. Body: ${result.rawText.slice(0, 400)}`);\n    }\n    // Download the .p8 — Apple only allows this once\n    const pem = await this.downloadApiKey(created.keyId);\n    return { keyId: created.keyId, pem, raw: created };\n  }\n\n  /**\n   * Find existing APNs auth keys in the team. Used by the wizard to\n   * detect \"you already have one\" cases and offer to reuse rather than\n   * proliferate keys.\n   */\n  async listApnsAuthKeys(): Promise<{ keyId: string; keyName: string; canDownload: boolean }[]> {\n    const list = await this.listApiKeys();\n    return (list.keys ?? [])\n      .filter((k: any) =>\n        (k.services ?? []).some((s: any) => s.id === PortalClient.APNS_SERVICE_ID || /apns/i.test(s.name ?? \"\"))\n      )\n      .map((k: any) => ({\n        keyId: k.keyId,\n        keyName: k.keyName,\n        canDownload: Boolean(k.canDownload),\n      }));\n  }\n\n  /**\n   * Download an existing App Store Connect API key as PEM. Spaceship's\n   * `download_key` endpoint — GET with teamId + keyId in query string.\n   * Returns the raw .p8 PEM text. Apple shows the .p8 exactly once\n   * (after creation), so call this immediately after createApiKey.\n   */\n  async downloadApiKey(keyId: string): Promise<string> {\n    const { status, rawText, contentType } = await this.getRaw(\"account/auth/key/download\", {\n      teamId: this.teamId,\n      keyId,\n    });\n    if (status !== 200) {\n      throw new Error(`downloadApiKey failed (${status}): ${rawText.slice(0, 200)}`);\n    }\n    // Plain PEM text response\n    if (rawText.includes(\"BEGIN PRIVATE KEY\")) return rawText;\n    // JSON wrapper variants\n    if (contentType.includes(\"json\")) {\n      try {\n        const parsed = JSON.parse(rawText);\n        const candidates = [\n          parsed?.privateKey,\n          parsed?.key?.privateKey,\n          parsed?.keys?.[0]?.privateKey,\n          parsed?.data?.attributes?.privateKey,\n          parsed?.value,\n        ];\n        for (const c of candidates) {\n          if (typeof c === \"string\" && c.includes(\"BEGIN PRIVATE KEY\")) return c;\n        }\n      } catch { /* fall through */ }\n    }\n    throw new Error(`downloadApiKey returned no PEM. Content-Type=${contentType} body=${rawText.slice(0, 300)}`);\n  }\n\n  /**\n   * List existing API keys via the portal. Used to discover the team's\n   * issuer id — every key in the team shares the same issuer id, and\n   * altool needs it alongside the key id and .p8 file.\n   *\n   * Form-encoded POST (NOT JSON), with pagination params, per Spaceship's\n   * `list_keys` method. JSON returned 415 from this endpoint.\n   */\n  async listApiKeys(): Promise<{ keys: any[]; issuerId?: string }> {\n    const data = await this.post(\"account/auth/key/list\", {\n      teamId: this.teamId,\n      pageNumber: \"1\",\n      pageSize: \"500\",\n      sort: \"name=asc\",\n    });\n    const keys = data?.keys ?? [];\n    // Issuer id may live on the response root, in a metadata bag, or on\n    // each key — try all known paths.\n    const issuerId =\n      data?.issuerId ??\n      data?.issuer ??\n      data?.team?.issuerId ??\n      keys[0]?.issuerId ??\n      keys[0]?.issuer;\n    return { keys, issuerId };\n  }\n\n  private async post(path: string, params: Record<string, string | string[]>): Promise<any> {\n    // Build form body using URLSearchParams (proper encoding)\n    const body = new URLSearchParams();\n    for (const [k, v] of Object.entries(params)) {\n      if (Array.isArray(v)) { for (const item of v) body.append(k, item); }\n      else body.set(k, v);\n    }\n    const bodyStr = body.toString();\n\n    const headers: Record<string, string> = {\n      Cookie: this.cookieStr,\n      \"Content-Type\": \"application/x-www-form-urlencoded\",\n      Accept: \"application/json\",\n    };\n    if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n    if (process.env.FASTNODE_DEBUG) console.log(`[portal] POST ${path} body=${bodyStr.slice(0, 200)}`);\n    const res = await fetch(`${PORTAL_BASE}/${path}`, { method: \"POST\", headers, body: bodyStr });\n\n    // Update CSRF\n    if (res.headers.get(\"csrf\")) { this.csrf = res.headers.get(\"csrf\")!; this.csrfTs = res.headers.get(\"csrf_ts\") ?? \"\"; }\n    for (const raw of res.headers.getSetCookie?.() ?? []) {\n      const m = raw.match(/^([^=]+)=([^;]*)/);\n      if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n    }\n\n    const text = await res.text();\n    let data: any;\n    try { data = JSON.parse(text); } catch { throw new Error(`Portal returned non-JSON: ${text.slice(0, 200)}`); }\n    checkPortalResponse(data, this.session);\n    return data;\n  }\n\n  // ── Teams ──────────────────────────────────────────────────────────────\n\n  async listTeams(): Promise<any[]> {\n    const data = await this.post(\"account/listTeams.action\", {});\n    return data.teams ?? [];\n  }\n\n  // ── App IDs / Bundle IDs ───────────────────────────────────────────────\n\n  async listAppIds(): Promise<any[]> {\n    const data = await this.post(\"account/ios/identifiers/listAppIds.action\", {\n      teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\",\n    });\n    return data.appIds ?? [];\n  }\n\n  async createAppId(params: { identifier: string; name: string; enablePush?: boolean; enableIAP?: boolean }): Promise<any> {\n    const reqParams: Record<string, string> = {\n      teamId: this.teamId, type: \"explicit\", identifier: params.identifier, name: params.name,\n    };\n    if (params.enablePush) reqParams.push = \"on\";\n    if (params.enableIAP !== false) reqParams.inAppPurchase = \"on\";\n    const data = await this.post(\"account/ios/identifiers/addAppId.action\", reqParams);\n    return data.appId;\n  }\n\n  async deleteAppId(appIdId: string): Promise<void> {\n    await this.post(\"account/ios/identifiers/deleteAppId.action\", { teamId: this.teamId, appIdId });\n  }\n\n  /**\n   * Toggle a capability (a.k.a. \"service\") on a bundle ID. Mirrors\n   * Spaceship::Portal's `update_service` — the legacy portal endpoint\n   * still works and is the only session-cookie-authenticated way to flip\n   * capabilities like Push Notifications and Sign in with Apple from\n   * outside the Apple Developer web UI.\n   *\n   * Common service codes (from Spaceship portal/portal_client.rb):\n   *   push          → push notifications\n   *   APG3427HIY    → Sign in with Apple\n   *   IAD53UNK2F    → in-app purchase\n   *   homeKit       → HomeKit\n   *   healthKit     → HealthKit\n   *\n   * @param featureType  Apple's internal capability key (string code or short name)\n   * @param enabled      true → turn on, false → turn off\n   */\n  async setBundleCapability(params: {\n    appIdId: string;\n    featureType: string;\n    enabled: boolean;\n  }): Promise<void> {\n    await this.post(\"account/ios/identifiers/updateAppService.action\", {\n      teamId: this.teamId,\n      displayId: params.appIdId,\n      featureType: params.featureType,\n      featureValue: params.enabled ? \"on\" : \"off\",\n    });\n  }\n\n  // ── Certificates ───────────────────────────────────────────────────────\n\n  async listCertificates(types?: string[]): Promise<any[]> {\n    // Default to all known iOS cert type codes plus Fastlane's list of\n    // legacy type codes (OLDER_IOS_CERTIFICATE_TYPES). The portal may still\n    // return these older codes for pre-existing certs and Fastlane's\n    // `Certificate.all` includes them — see certificate.rb line 278.\n    const iosTypes = types ?? [\n      PortalClient.CERT_TYPES.IOS_DEVELOPMENT,\n      PortalClient.CERT_TYPES.IOS_DISTRIBUTION,\n      ...PortalClient.OLDER_IOS_CERTIFICATE_TYPES,\n    ];\n    const data = await this.post(\"account/ios/certificate/listCertRequests.action\", {\n      teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\",\n      sort: \"certRequestStatusCode=asc\", types: iosTypes.join(\",\"),\n    });\n    return data.certRequests ?? [];\n  }\n\n  async listPushCertificates(): Promise<any[]> {\n    // iOS-only push cert type codes, deduplicated. The endpoint\n    // `account/ios/certificate/listCertRequests.action` rejects any code\n    // that isn't an iOS code (so Mac push types, even if listed in\n    // CERT_TYPES, must be excluded) and rejects duplicates in the comma\n    // list. We also include the legacy push cert codes from before\n    // Apple's 2017 cert restructuring — they still occasionally appear\n    // for older bundles.\n    //\n    // The modern unified \"Apple Push Services\" cert (one cert for both\n    // prod + sandbox) reuses IOS_PRODUCTION_PUSH (UPV3DW712I), so the\n    // first two codes catch every modern case.\n    const types = Array.from(\n      new Set([\n        PortalClient.CERT_TYPES.IOS_PRODUCTION_PUSH,\n        PortalClient.CERT_TYPES.IOS_DEVELOPMENT_PUSH,\n        // Legacy push codes from OLDER_IOS_CERTIFICATE_TYPES\n        \"3BQKVH9I2X\",\n        \"BKLRAVXMGM\",\n      ])\n    );\n    const data = await this.post(\"account/ios/certificate/listCertRequests.action\", {\n      teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\",\n      sort: \"certRequestStatusCode=asc\",\n      types: types.join(\",\"),\n    });\n    return data.certRequests ?? [];\n  }\n\n  async createCertificate(params: { type: string; csrContent: string; appIdId?: string }): Promise<any> {\n    const reqParams: Record<string, string> = {\n      teamId: this.teamId, type: params.type, csrContent: params.csrContent,\n    };\n    if (params.appIdId) reqParams.appIdId = params.appIdId;\n    const data = await this.post(\"account/ios/certificate/submitCertificateRequest.action\", reqParams);\n    return data.certRequest;\n  }\n\n  async downloadCertificate(certId: string, type: string): Promise<Buffer> {\n    const headers: Record<string, string> = { Cookie: this.cookieStr, Accept: \"application/json\" };\n    const res = await fetch(\n      `${PORTAL_BASE}/account/ios/certificate/downloadCertificateContent.action?teamId=${this.teamId}&certificateId=${certId}&type=${type}`,\n      { headers }\n    );\n    return Buffer.from(await res.arrayBuffer());\n  }\n\n  async revokeCertificate(certId: string, type: string): Promise<void> {\n    await this.post(\"account/ios/certificate/revokeCertificate.action\", {\n      teamId: this.teamId, certificateId: certId, type,\n    });\n  }\n\n  // ── Devices ────────────────────────────────────────────────────────────\n\n  async listDevices(): Promise<any[]> {\n    const data = await this.post(\"account/ios/device/listDevices.action\", {\n      teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\", includeRemovedDevices: \"false\",\n    });\n    return data.devices ?? [];\n  }\n\n  async registerDevice(params: { name: string; udid: string; deviceClass?: string }): Promise<any> {\n    const data = await this.post(\"account/ios/device/addDevices.action\", {\n      teamId: this.teamId, deviceNames: params.name, deviceNumbers: params.udid,\n      register: \"single\", deviceClasses: params.deviceClass ?? \"iphone\",\n    });\n    return (data.devices ?? [])[0];\n  }\n\n  // ── Provisioning Profiles ──────────────────────────────────────────────\n\n  async listProfiles(): Promise<any[]> {\n    const data = await this.post(\"account/ios/profile/listProvisioningProfiles.action\", {\n      teamId: this.teamId, includeInactiveProfiles: \"true\",\n      pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\",\n    });\n    return data.provisioningProfiles ?? [];\n  }\n\n  async createProfile(params: {\n    appIdId: string;\n    name: string;\n    distributionType: string; // \"limited\" (dev), \"store\" (appstore), \"adhoc\"\n    certificateIds: string[];\n    deviceIds?: string[];\n  }): Promise<any> {\n    const reqParams: Record<string, string | string[]> = {\n      teamId: this.teamId,\n      appIdId: params.appIdId,\n      distributionType: params.distributionType,\n      provisioningProfileName: params.name,\n      certificateIds: params.certificateIds,\n    };\n    if (params.deviceIds?.length) reqParams.deviceIds = params.deviceIds;\n    const data = await this.post(\"account/ios/profile/createProvisioningProfile.action\", reqParams);\n    return data.provisioningProfile;\n  }\n\n  async deleteProfile(profileId: string): Promise<void> {\n    await this.post(\"account/ios/profile/deleteProvisioningProfile.action\", {\n      teamId: this.teamId, provisioningProfileId: profileId,\n    });\n  }\n\n  async downloadProfile(profileId: string): Promise<Buffer> {\n    const headers: Record<string, string> = { Cookie: this.cookieStr };\n    const res = await fetch(\n      `${PORTAL_BASE}/account/ios/profile/downloadProfileContent?teamId=${this.teamId}&provisioningProfileId=${profileId}`,\n      { headers }\n    );\n    return Buffer.from(await res.arrayBuffer());\n  }\n\n  // ── Certificate Type Constants (matching Fastlane) ─────────────────────\n\n  /**\n   * Apple certificate type codes — copied 1:1 from Fastlane's\n   * spaceship/portal/certificate.rb IOS_CERTIFICATE_TYPE_IDS / MAC_CERTIFICATE_TYPE_IDS\n   */\n  static CERT_TYPES = {\n    // iOS\n    IOS_DEVELOPMENT: \"5QPB9NHCEI\",\n    IOS_DISTRIBUTION: \"R58UK2EWSO\",        // App Store Production\n    IOS_IN_HOUSE: \"9RQEK7MSXA\",\n    IOS_DEVELOPMENT_PUSH: \"JKG5JZ54H7\",\n    IOS_PRODUCTION_PUSH: \"UPV3DW712I\",\n    APPLE_PUSH_PRODUCTION: \"UPV3DW712I\",   // alias\n    APPLE_PUSH_SANDBOX: \"JKG5JZ54H7\",      // alias\n    PASSBOOK: \"Y3B2F3TYSI\",\n    WEBSITE_PUSH: \"3T2ZP62QW8\",\n    VOIP_PUSH: \"E5D663CMZW\",\n    APPLE_PAY: \"4APLUP237T\",\n    APPLE_PAY_MERCHANT_IDENTITY: \"MD8Q2VRT6A\",\n    // Universal (Apple Development/Distribution)\n    APPLE_DEVELOPMENT: \"83Q87W3TGH\",\n    APPLE_DISTRIBUTION: \"WXV89964HE\",\n    // Mac\n    MAC_DEVELOPMENT: \"749Y1QAGU7\",\n    MAC_APP_DISTRIBUTION: \"HXZEUKP0FP\",\n    MAC_INSTALLER_DISTRIBUTION: \"2PQI8IDXNH\",\n    MAC_PRODUCTION_PUSH: \"CDZ7EMXIZ1\",\n    MAC_DEVELOPMENT_PUSH: \"HQ4KP3I34R\",\n    DEVELOPER_ID_APPLICATION: \"DIVN2GW3XT\",\n    DEVELOPER_ID_INSTALLER: \"OYVN2GW35E\",\n  } as const;\n\n  /**\n   * Legacy iOS certificate type codes that can still appear in the portal\n   * responses. Port of Fastlane's Spaceship::Portal::Certificate\n   * OLDER_IOS_CERTIFICATE_TYPES list (certificate.rb lines 180-189).\n   */\n  static OLDER_IOS_CERTIFICATE_TYPES: readonly string[] = [\n    \"3BQKVH9I2X\", // old ProductionPush\n    \"BKLRAVXMGM\", // old DevelopmentPush\n    // Also sent by the browser, but not sure what they represent:\n    \"T44PTHVNID\",\n    \"DZQUP8189Y\",\n    \"FGQUP4785Z\",\n    \"S5WE21TULA\",\n    \"FUOY7LWJET\",\n  ] as const;\n}\n","/**\n * App Store Connect \"iris\" admin API client.\n *\n * The iris API lives at `https://appstoreconnect.apple.com/iris/v1/*` and\n * is what App Store Connect's own web UI uses for everything that doesn't\n * fit the public REST API (which requires JWT). Authentication is via the\n * Olympus session cookies we already obtain after SIRP + 2FA login.\n *\n * Notable iris endpoints (reverse-engineered from the App Store Connect\n * web app — Apple does not publish this API, so the shapes below are best\n * effort and may need iteration):\n *\n *   POST /iris/v1/apiKeys\n *     Body: { data: { type: \"apiKeys\", attributes: {\n *       nickname, allAppsVisible, roles: [\"DEVELOPER\" | \"APP_MANAGER\" | ...]\n *     }}}\n *     Response: { data: { id, attributes: { nickname, kid, privateKey?, ... }}}\n *\n *     `kid` is the key ID used in JWT auth (e.g. \"2X9R4HXF34\"). The\n *     `privateKey` field, when present, contains the PEM-encoded .p8\n *     content. Apple shows this exactly ONCE at creation time — if we\n *     don't capture it, the key is bricked and must be revoked.\n *\n *   GET  /iris/v1/apiKeys\n *     List existing keys. Used to find the issuer id.\n *\n * Roles the wizard uses: \"APP_MANAGER\" is the minimum needed for\n * TestFlight uploads via altool. Higher roles work too.\n *\n * Failure modes:\n *   • 403 → user lacks Account Holder / Admin role → fall back to manual\n *   • 4xx with `error.detail` → surface the message to the user\n *   • 200 but no `privateKey` in response → endpoint shape changed,\n *     surface so we can iterate\n */\n\nimport type { AppleSession } from \"./apple-session.js\";\n\nconst IRIS_BASE = \"https://appstoreconnect.apple.com/iris/v1\";\n\nexport type ApiKeyRole =\n  | \"ADMIN\"\n  | \"FINANCE\"\n  | \"ACCESS_TO_REPORTS\"\n  | \"APP_MANAGER\"\n  | \"DEVELOPER\"\n  | \"MARKETING\"\n  | \"SALES\"\n  | \"CUSTOMER_SUPPORT\";\n\nexport interface IrisApiKey {\n  id: string;\n  /** Key ID used for JWT auth (the short alphanumeric string) */\n  kid: string;\n  nickname: string;\n  /** PEM-encoded .p8 private key — only present in create response, ONCE */\n  privateKey?: string;\n  /** Issuer id (UUID) — needed by altool/iTMSTransporter alongside the key id */\n  issuerId?: string;\n  roles: ApiKeyRole[];\n  allAppsVisible: boolean;\n}\n\nexport class IrisClient {\n  private cookieStr: string;\n\n  constructor(private session: AppleSession) {\n    this.cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n  }\n\n  private buildHeaders(): Record<string, string> {\n    return {\n      Cookie: this.cookieStr,\n      Accept: \"application/vnd.api+json, application/json, text/plain, */*\",\n      \"Content-Type\": \"application/vnd.api+json\",\n      \"X-Requested-With\": \"XMLHttpRequest\",\n      // Mimic the App Store Connect web UI's user agent\n      \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15\",\n    };\n  }\n\n  /**\n   * Issue a request and absorb any new cookies (Apple rotates session\n   * cookies on a lot of iris calls).\n   */\n  private async request(\n    method: \"GET\" | \"POST\" | \"DELETE\",\n    path: string,\n    body?: unknown\n  ): Promise<{ status: number; body: any; rawText: string }> {\n    const headers = this.buildHeaders();\n    if (process.env.FASTNODE_DEBUG) {\n      console.log(`[iris] ${method} ${path}${body ? ` body=${JSON.stringify(body).slice(0, 200)}` : \"\"}`);\n    }\n    const res = await fetch(`${IRIS_BASE}${path}`, {\n      method,\n      headers,\n      body: body ? JSON.stringify(body) : undefined,\n    });\n\n    // Absorb new cookies\n    for (const raw of res.headers.getSetCookie?.() ?? []) {\n      const m = raw.match(/^([^=]+)=([^;]*)/);\n      if (m) {\n        this.session.cookies[m[1]] = m[2];\n      }\n    }\n    this.cookieStr = Object.entries(this.session.cookies)\n      .map(([k, v]) => `${k}=${v}`)\n      .join(\"; \");\n\n    const text = await res.text();\n    let parsed: any = null;\n    try {\n      parsed = text ? JSON.parse(text) : null;\n    } catch {\n      // not JSON\n    }\n    if (process.env.FASTNODE_DEBUG) {\n      console.log(`[iris] → ${res.status} ${text.slice(0, 300)}`);\n    }\n    return { status: res.status, body: parsed, rawText: text };\n  }\n\n  /**\n   * List existing API keys. Used both as a sanity check (the user has\n   * permission) and to discover the team's issuer id (which is the same\n   * for every key in the team and is needed by altool).\n   *\n   * Important: Apple's iris endpoint rejects most query parameters with\n   * `PARAMETER_ERROR.INVALID`. Call with no params and let the API return\n   * its default page.\n   */\n  async listApiKeys(): Promise<{ keys: IrisApiKey[]; issuerId?: string }> {\n    const { status, body, rawText } = await this.request(\"GET\", \"/apiKeys\");\n    if (status === 403) {\n      throw new IrisAuthError(\n        \"You don't have permission to manage App Store Connect API keys (this requires the Account Holder or Admin role).\"\n      );\n    }\n    if (status >= 400 || !body) {\n      throw new Error(`iris listApiKeys failed (${status}): ${rawText.slice(0, 200)}`);\n    }\n\n    const issuerId = body?.meta?.issuerId ?? body?.data?.[0]?.attributes?.issuerId;\n    const keys: IrisApiKey[] = (body.data ?? []).map((d: any) => ({\n      id: d.id,\n      kid: d.attributes?.kid ?? d.id,\n      nickname: d.attributes?.nickname ?? \"\",\n      issuerId: d.attributes?.issuerId ?? issuerId,\n      roles: d.attributes?.roles ?? [],\n      allAppsVisible: d.attributes?.allAppsVisible ?? true,\n    }));\n    return { keys, issuerId };\n  }\n\n  /**\n   * Create a new API key. Apple returns the .p8 PEM exactly once in the\n   * create response — capture it immediately or the key is dead weight.\n   *\n   * `keyType` is required by Apple's iris API:\n   *   • PUBLIC_API     — the standard team-wide API key (what TestFlight uploads need)\n   *   • MARKETING_API  — for App Analytics access only\n   */\n  async createApiKey(input: {\n    nickname: string;\n    roles?: ApiKeyRole[];\n    allAppsVisible?: boolean;\n    keyType?: \"PUBLIC_API\" | \"MARKETING_API\";\n  }): Promise<IrisApiKey> {\n    const requestBody = {\n      data: {\n        type: \"apiKeys\",\n        attributes: {\n          nickname: input.nickname,\n          roles: input.roles ?? [\"APP_MANAGER\"],\n          allAppsVisible: input.allAppsVisible ?? true,\n          keyType: input.keyType ?? \"PUBLIC_API\",\n        },\n      },\n    };\n\n    // Always log this — it's the trickiest call in the whole orchestrator\n    // and we need full visibility while the iris API is being shaken out.\n    console.log(\"[iris] createApiKey request:\", JSON.stringify(requestBody));\n    const { status, body, rawText } = await this.request(\"POST\", \"/apiKeys\", requestBody);\n    console.log(`[iris] createApiKey response: ${status} ${rawText.slice(0, 800)}`);\n\n    if (status === 403) {\n      throw new IrisAuthError(\n        \"You don't have permission to create App Store Connect API keys (this requires the Account Holder or Admin role).\"\n      );\n    }\n    if (status >= 400 || !body) {\n      const msg =\n        body?.errors?.[0]?.detail ??\n        body?.errors?.[0]?.title ??\n        rawText.slice(0, 300) ??\n        `iris createApiKey failed (${status})`;\n      throw new Error(msg);\n    }\n\n    const data = body.data ?? body;\n    if (!data?.id) {\n      throw new Error(`iris createApiKey returned no key id. Raw response: ${rawText.slice(0, 400)}`);\n    }\n\n    const key: IrisApiKey = {\n      id: data.id,\n      kid: data.attributes?.kid ?? data.id,\n      nickname: data.attributes?.nickname ?? input.nickname,\n      privateKey: data.attributes?.privateKey,\n      issuerId: data.attributes?.issuerId,\n      roles: data.attributes?.roles ?? input.roles ?? [\"APP_MANAGER\"],\n      allAppsVisible: data.attributes?.allAppsVisible ?? true,\n    };\n    return key;\n  }\n\n  /**\n   * Fetch the .p8 PEM AND the team's issuer id for a previously-created\n   * ASC API key. Both come back in a single request via:\n   *\n   *   GET /iris/v1/apiKeys/{id}?fields[apiKeys]=privateKey&include=provider\n   *\n   * Sparse fieldset requesting ONLY `privateKey` is the magic that makes\n   * Apple actually include the (base64-encoded) PEM in the response —\n   * the default view returns `privateKey: null`. The `include=provider`\n   * pulls the team's contentProvider record into `included[]`, and its\n   * `id` field IS the issuer id altool needs (a UUID like\n   * `cfadaf94-44ca-4c2c-8fa6-ecc28d3c7d0d`).\n   *\n   * Reverse-engineered from @expo/apple-utils v2.1.21 (the package that\n   * powers EAS CLI), specifically the `ApiKey.downloadAsync` method\n   * combined with `ApiKey.infoAsync` reading `provider?.id`.\n   *\n   * Returns `{ pem, issuerId }`, or `null` if Apple won't return the\n   * private key (typically because the key was already downloaded once).\n   */\n  async fetchApiKeyPrivateKey(keyId: string): Promise<{ pem: string; issuerId?: string } | null> {\n    try {\n      const url = `${IRIS_BASE}/apiKeys/${keyId}?fields%5BapiKeys%5D=privateKey&include=provider`;\n      const res = await fetch(url, {\n        headers: {\n          ...this.buildHeaders(),\n          Accept: \"application/vnd.api+json, application/json, text/plain, */*\",\n        },\n      });\n      const text = await res.text();\n      console.log(`[iris] fetchApiKeyPrivateKey → ${res.status} (${text.length} bytes)`);\n      if (res.status !== 200) {\n        console.log(`[iris]   err: ${text.slice(0, 300)}`);\n        return null;\n      }\n      const body = JSON.parse(text);\n      const encoded = body?.data?.attributes?.privateKey;\n      if (typeof encoded !== \"string\" || encoded.length === 0) {\n        console.log(`[iris]   no privateKey in response`);\n        return null;\n      }\n      const pem = Buffer.from(encoded, \"base64\").toString(\"utf-8\");\n      if (!pem.includes(\"BEGIN PRIVATE KEY\")) {\n        console.log(`[iris]   decoded body didn't contain PEM marker`);\n        return null;\n      }\n      // Issuer id is the contentProvider in the included array\n      const provider = (body?.included ?? []).find((i: any) => i.type === \"contentProviders\");\n      const issuerId = provider?.id;\n      console.log(`[iris] ✓ PEM ${pem.length} bytes, issuerId=${issuerId ?? \"(missing)\"}`);\n      return { pem, issuerId };\n    } catch (err) {\n      console.log(`[iris] fetchApiKeyPrivateKey error: ${(err as Error).message}`);\n      return null;\n    }\n  }\n\n  /**\n   * @deprecated Kept as a fallback probe for debugging. The real path\n   * is the sparse fieldset above — everything in this brute-force list\n   * returned 404 during testing. Left here so we can re-verify if Apple\n   * changes anything.\n   */\n  async fetchApiKeyPrivateKeyBruteForce(keyId: string): Promise<string | null> {\n    type Attempt =\n      | { kind: \"GET\"; path: string; accept?: string }\n      | { kind: \"POST\"; path: string; body?: unknown }\n      | { kind: \"ABSOLUTE\"; url: string };\n\n    const attempts: Attempt[] = [\n      // Sparse fieldsets — JSON-API spec lets us request specific attributes.\n      // Apple may exclude privateKey by default and return it only when asked.\n      { kind: \"GET\", path: `/apiKeys/${keyId}?fields[apiKeys]=privateKey,kid,issuerId,nickname,roles` },\n      { kind: \"GET\", path: `/apiKeys/${keyId}?include=privateKey` },\n      { kind: \"GET\", path: `/apiKeys/${keyId}?fields[apiKeys]=privateKey` },\n      // Custom Accept headers — maybe Apple negotiates content type\n      { kind: \"GET\", path: `/apiKeys/${keyId}`, accept: \"application/x-pem-file\" },\n      { kind: \"GET\", path: `/apiKeys/${keyId}`, accept: \"application/octet-stream\" },\n      { kind: \"GET\", path: `/apiKeys/${keyId}/p8`, accept: \"application/x-pem-file\" },\n      // POST variants — Apple sometimes uses POST to mint a download token\n      { kind: \"POST\", path: `/apiKeys/${keyId}/secrets`, body: {} },\n      { kind: \"POST\", path: `/apiKeys/${keyId}/regenerate`, body: {} },\n      { kind: \"POST\", path: `/apiKeys/${keyId}/p8`, body: {} },\n      // Bare GET (last) — confirms canonical fields, in case my parser missed any\n      { kind: \"GET\", path: `/apiKeys/${keyId}` },\n      // Different host — the legacy developer.apple.com user-and-access namespace\n      { kind: \"ABSOLUTE\", url: `https://appstoreconnect.apple.com/api/v1/apiKeys/${keyId}/p8` },\n      { kind: \"ABSOLUTE\", url: `https://appstoreconnect.apple.com/access/api/keys/${keyId}/download` },\n    ];\n\n    for (const attempt of attempts) {\n      try {\n        let result: { status: number; body: any; rawText: string };\n        if (attempt.kind === \"GET\") {\n          // Custom request that allows overriding Accept header.\n          result = await this.requestWithHeaders(\"GET\", attempt.path, undefined, {\n            ...(attempt.accept ? { Accept: attempt.accept } : {}),\n          });\n          console.log(`[iris] fetchApiKeyPrivateKey GET ${attempt.path}${attempt.accept ? ` accept=${attempt.accept}` : \"\"} → ${result.status} (${result.rawText.length} bytes)`);\n        } else if (attempt.kind === \"POST\") {\n          result = await this.request(\"POST\", attempt.path, attempt.body);\n          console.log(`[iris] fetchApiKeyPrivateKey POST ${attempt.path} → ${result.status} (${result.rawText.length} bytes)`);\n        } else {\n          result = await this.requestAbsolute(\"GET\", attempt.url);\n          console.log(`[iris] fetchApiKeyPrivateKey GET ${attempt.url} → ${result.status} (${result.rawText.length} bytes)`);\n        }\n\n        // For 200 responses, log the full body so we can see what Apple is returning.\n        if (result.status === 200) {\n          console.log(`[iris]   body: ${result.rawText.slice(0, 1500)}`);\n        }\n        if (result.status !== 200) continue;\n\n        // Plain PEM body\n        if (result.rawText && result.rawText.includes(\"BEGIN PRIVATE KEY\")) {\n          console.log(`[iris] ✓ found PEM (plain text response)`);\n          return result.rawText;\n        }\n        // JSON wrapper that might contain the PEM under various attribute names\n        if (result.body) {\n          const candidates = [\n            result.body?.data?.attributes?.privateKey,\n            result.body?.data?.attributes?.p8,\n            result.body?.data?.attributes?.privateKeyContent,\n            result.body?.data?.attributes?.kpem,\n            result.body?.data?.attributes?.secret,\n            result.body?.data?.attributes?.keyContent,\n            result.body?.privateKey,\n            result.body?.p8,\n            result.body?.value,\n            result.body?.secret,\n          ];\n          for (const c of candidates) {\n            if (typeof c === \"string\" && c.includes(\"BEGIN PRIVATE KEY\")) {\n              console.log(`[iris] ✓ found PEM in JSON response`);\n              return c;\n            }\n          }\n        }\n      } catch (err) {\n        console.log(`[iris] fetchApiKeyPrivateKey attempt failed: ${(err as Error).message}`);\n      }\n    }\n    console.log(`[iris] fetchApiKeyPrivateKey: no working download path for key ${keyId}`);\n    return null;\n  }\n\n  /** Internal: like request() but lets us override headers. */\n  private async requestWithHeaders(\n    method: \"GET\" | \"POST\" | \"DELETE\",\n    path: string,\n    body?: unknown,\n    extraHeaders: Record<string, string> = {}\n  ): Promise<{ status: number; body: any; rawText: string }> {\n    const headers = { ...this.buildHeaders(), ...extraHeaders };\n    const res = await fetch(`${IRIS_BASE}${path}`, {\n      method,\n      headers,\n      body: body ? JSON.stringify(body) : undefined,\n    });\n    for (const raw of res.headers.getSetCookie?.() ?? []) {\n      const m = raw.match(/^([^=]+)=([^;]*)/);\n      if (m) this.session.cookies[m[1]] = m[2];\n    }\n    this.cookieStr = Object.entries(this.session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n    const text = await res.text();\n    let parsed: any = null;\n    try { parsed = text ? JSON.parse(text) : null; } catch {}\n    return { status: res.status, body: parsed, rawText: text };\n  }\n\n  /** Internal: fetch an absolute URL with the session cookies. */\n  private async requestAbsolute(\n    method: \"GET\" | \"POST\" | \"DELETE\",\n    url: string\n  ): Promise<{ status: number; body: any; rawText: string }> {\n    const headers = this.buildHeaders();\n    const res = await fetch(url, { method, headers });\n    const text = await res.text();\n    let parsed: any = null;\n    try { parsed = text ? JSON.parse(text) : null; } catch {}\n    return { status: res.status, body: parsed, rawText: text };\n  }\n\n  async deleteApiKey(keyId: string): Promise<void> {\n    await this.request(\"DELETE\", `/apiKeys/${keyId}`);\n  }\n}\n\n/** Thrown when the user doesn't have permission to use the iris admin API. */\nexport class IrisAuthError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"IrisAuthError\";\n  }\n}\n","import { TokenManager } from \"./auth.js\";\nimport { RequestClient } from \"./request.js\";\nimport type { AppStoreConnectConfig, ListParams, RequestOptions } from \"./types.js\";\nimport { CertificatesResource } from \"../resources/certificates.js\";\nimport { ProfilesResource } from \"../resources/profiles.js\";\nimport { BundleIdsResource } from \"../resources/bundle-ids.js\";\nimport { DevicesResource } from \"../resources/devices.js\";\nimport { AppsResource } from \"../resources/apps.js\";\nimport { BuildsResource } from \"../resources/builds.js\";\nimport { BetaGroupsResource } from \"../resources/beta-groups.js\";\nimport { CapabilitiesResource } from \"../resources/capabilities.js\";\nimport { AppStoreVersionsResource } from \"../resources/app-store-versions.js\";\nimport { AppScreenshotsResource } from \"../resources/app-screenshots.js\";\nimport { ReviewSubmissionsResource } from \"../resources/review-submissions.js\";\nimport { AppInfosResource } from \"../resources/app-info.js\";\nimport { AppInfoLocalizationsResource } from \"../resources/app-info-localizations.js\";\nimport { AppStoreReviewDetailsResource } from \"../resources/app-store-review-details.js\";\nimport { BetaTestersResource } from \"../resources/beta-testers.js\";\nimport { BetaAppReviewSubmissionsResource } from \"../resources/beta-app-review-submissions.js\";\nimport { BetaAppReviewDetailsResource } from \"../resources/beta-app-review-details.js\";\nimport { BetaInvitationsResource } from \"../resources/beta-invitations.js\";\nimport { BetaLicensesResource } from \"../resources/beta-licenses.js\";\nimport { AppPreviewsResource } from \"../resources/app-previews.js\";\nimport { AppPreviewSetsResource } from \"../resources/app-preview-sets.js\";\nimport { AppPricesResource } from \"../resources/app-prices.js\";\nimport { TerritoriesResource } from \"../resources/territories.js\";\nimport { AgeRatingDeclarationsResource } from \"../resources/age-rating-declarations.js\";\nimport { AppCategoriesResource } from \"../resources/app-categories.js\";\nimport { AppEncryptionDeclarationsResource } from \"../resources/app-encryption-declarations.js\";\nimport { IdfaDeclarationsResource } from \"../resources/idfa-declarations.js\";\nimport { PreReleaseVersionsResource } from \"../resources/pre-release-versions.js\";\nimport { ReviewSubmissionItemsResource } from \"../resources/review-submission-items.js\";\nimport { UsersResource } from \"../resources/users.js\";\nimport { UserInvitationsResource } from \"../resources/user-invitations.js\";\nimport { InAppPurchasesResource } from \"../resources/in-app-purchases.js\";\nimport { GameCenterDetailResource } from \"../resources/game-center-detail.js\";\nimport { XcodeMetricsResource } from \"../resources/xcode-metrics.js\";\n\nexport type { AppStoreConnectConfig, ListParams, RequestOptions };\nexport { TokenManager } from \"./auth.js\";\nexport type { TokenConfig } from \"./auth.js\";\nexport { RequestClient, AppStoreConnectError, RateLimitError } from \"./request.js\";\nexport type * from \"./types.js\";\nexport {\n  loginWithAppleId,\n  beginLogin,\n  submitTwoFactorCode,\n  requestSmsCode,\n  checkPortalResponse,\n  ProgramLicenseAgreementError,\n} from \"./apple-session.js\";\nexport type {\n  AppleSessionConfig,\n  AppleSession,\n  ContractMessage,\n  PendingLogin,\n  TwoFactorChallenge,\n  BeginLoginResult,\n} from \"./apple-session.js\";\nexport { PortalClient } from \"./portal.js\";\nexport { IrisClient, IrisAuthError } from \"./iris.js\";\nexport type { IrisApiKey, ApiKeyRole } from \"./iris.js\";\n\nexport class AppStoreConnectClient {\n  readonly http: RequestClient;\n\n  readonly certificates: CertificatesResource;\n  readonly profiles: ProfilesResource;\n  readonly bundleIds: BundleIdsResource;\n  readonly devices: DevicesResource;\n  readonly apps: AppsResource;\n  readonly builds: BuildsResource;\n  readonly betaGroups: BetaGroupsResource;\n  readonly capabilities: CapabilitiesResource;\n  readonly appStoreVersions: AppStoreVersionsResource;\n  readonly appScreenshots: AppScreenshotsResource;\n  readonly reviewSubmissions: ReviewSubmissionsResource;\n  readonly appInfos: AppInfosResource;\n  readonly appInfoLocalizations: AppInfoLocalizationsResource;\n  readonly appStoreReviewDetails: AppStoreReviewDetailsResource;\n  readonly betaTesters: BetaTestersResource;\n  readonly betaAppReviewSubmissions: BetaAppReviewSubmissionsResource;\n  readonly betaAppReviewDetails: BetaAppReviewDetailsResource;\n  readonly betaInvitations: BetaInvitationsResource;\n  readonly betaLicenses: BetaLicensesResource;\n  readonly appPreviews: AppPreviewsResource;\n  readonly appPreviewSets: AppPreviewSetsResource;\n  readonly appPrices: AppPricesResource;\n  readonly territories: TerritoriesResource;\n  readonly ageRatingDeclarations: AgeRatingDeclarationsResource;\n  readonly appCategories: AppCategoriesResource;\n  readonly appEncryptionDeclarations: AppEncryptionDeclarationsResource;\n  readonly idfaDeclarations: IdfaDeclarationsResource;\n  readonly preReleaseVersions: PreReleaseVersionsResource;\n  readonly reviewSubmissionItems: ReviewSubmissionItemsResource;\n  readonly users: UsersResource;\n  readonly userInvitations: UserInvitationsResource;\n  readonly inAppPurchases: InAppPurchasesResource;\n  readonly gameCenterDetail: GameCenterDetailResource;\n  readonly xcodeMetrics: XcodeMetricsResource;\n\n  constructor(config: AppStoreConnectConfig) {\n    const tokenManager = new TokenManager({\n      keyId: config.keyId,\n      issuerId: config.issuerId,\n      privateKey: config.privateKey,\n      enterprise: config.enterprise,\n      duration: config.tokenDuration,\n    });\n    this.http = new RequestClient(tokenManager, config.enterprise);\n\n    this.certificates = new CertificatesResource(this.http);\n    this.profiles = new ProfilesResource(this.http);\n    this.bundleIds = new BundleIdsResource(this.http);\n    this.devices = new DevicesResource(this.http);\n    this.apps = new AppsResource(this.http);\n    this.builds = new BuildsResource(this.http);\n    this.betaGroups = new BetaGroupsResource(this.http);\n    this.capabilities = new CapabilitiesResource(this.http);\n    this.appStoreVersions = new AppStoreVersionsResource(this.http);\n    this.appScreenshots = new AppScreenshotsResource(this.http);\n    this.reviewSubmissions = new ReviewSubmissionsResource(this.http);\n    this.appInfos = new AppInfosResource(this.http);\n    this.appInfoLocalizations = new AppInfoLocalizationsResource(this.http);\n    this.appStoreReviewDetails = new AppStoreReviewDetailsResource(this.http);\n    this.betaTesters = new BetaTestersResource(this.http);\n    this.betaAppReviewSubmissions = new BetaAppReviewSubmissionsResource(this.http);\n    this.betaAppReviewDetails = new BetaAppReviewDetailsResource(this.http);\n    this.betaInvitations = new BetaInvitationsResource(this.http);\n    this.betaLicenses = new BetaLicensesResource(this.http);\n    this.appPreviews = new AppPreviewsResource(this.http);\n    this.appPreviewSets = new AppPreviewSetsResource(this.http);\n    this.appPrices = new AppPricesResource(this.http);\n    this.territories = new TerritoriesResource(this.http);\n    this.ageRatingDeclarations = new AgeRatingDeclarationsResource(this.http);\n    this.appCategories = new AppCategoriesResource(this.http);\n    this.appEncryptionDeclarations = new AppEncryptionDeclarationsResource(this.http);\n    this.idfaDeclarations = new IdfaDeclarationsResource(this.http);\n    this.preReleaseVersions = new PreReleaseVersionsResource(this.http);\n    this.reviewSubmissionItems = new ReviewSubmissionItemsResource(this.http);\n    this.users = new UsersResource(this.http);\n    this.userInvitations = new UserInvitationsResource(this.http);\n    this.inAppPurchases = new InAppPurchasesResource(this.http);\n    this.gameCenterDetail = new GameCenterDetailResource(this.http);\n    this.xcodeMetrics = new XcodeMetricsResource(this.http);\n  }\n\n  async request<T>(path: string, options?: RequestOptions): Promise<T> {\n    return this.http.request<T>(path, options);\n  }\n}\n","/**\n * Device frame definitions ported from Fastlane's `frameit/device_types.rb`.\n *\n * Each device mirrors Fastlane's `Device.new(id, name, priority, resolutions,\n * ppi, color, platform)` declaration. Frame canvas dimensions and screen\n * offsets are computed from the primary screen resolution, because Fastlane\n * resolves those at runtime from the downloaded `offsets.json` in its frames\n * repository — which is not bundled here.\n *\n * For modern edge-to-edge devices (post-2017 iPhones, Pixel 3+, recent Samsung),\n * the frame adds a small 4–7% horizontal bezel. For bezeled devices, padding\n * roughly follows the real chassis (~10% X, ~18% Y). These estimates mean\n * `frameScreenshots` still composites sensibly, but they are not pixel-perfect\n * reproductions of the real frame PNGs.\n *\n * Device names follow Fastlane's `formatted_name_without_apple`: the \"Apple \"\n * prefix is stripped, as are parenthesised suffixes (e.g. \"(3rd generation)\").\n */\n\nexport interface DeviceFrame {\n  /** Fastlane device id (slug). Used for filename detection. */\n  id: string;\n  /** Human-readable device name (matches Fastlane's `formatted_name_without_apple`). */\n  name: string;\n  /** Priority (from Fastlane). Higher wins when multiple devices match. */\n  priority: number;\n  /** Frame canvas dimensions (computed). */\n  width: number;\n  height: number;\n  /** Primary screen resolution used for detection and compositing. */\n  screenWidth: number;\n  screenHeight: number;\n  /** All supported screen resolutions [width, height] for detection. */\n  screenResolutions: Array<[number, number]>;\n  /** Screen-within-frame offset in pixels. */\n  screenOffsetX: number;\n  screenOffsetY: number;\n  platform: \"ios\" | \"android\" | \"mac\";\n  /** Optional PPI from Fastlane. */\n  ppi?: number;\n  /** Default color from Fastlane. */\n  color?: string;\n}\n\ninterface ComputeInput {\n  id: string;\n  name: string;\n  priority: number;\n  resolutions: Array<[number, number]>;\n  ppi?: number;\n  color?: string;\n  platform: \"ios\" | \"android\" | \"mac\";\n  style: \"edge\" | \"bezel\" | \"tablet\" | \"mac\";\n}\n\nfunction buildFrame(d: ComputeInput): DeviceFrame {\n  // Pick the portrait resolution (smaller = width)\n  const [res] = d.resolutions;\n  const [a, b] = res;\n  const screenWidth = Math.min(a, b);\n  const screenHeight = Math.max(a, b);\n\n  let width: number;\n  let height: number;\n  let offsetX: number;\n  let offsetY: number;\n\n  switch (d.style) {\n    case \"edge\": {\n      // Modern edge-to-edge: ~4% X bezel each side, minimal Y bezel\n      const padX = Math.round(screenWidth * 0.04);\n      const padY = Math.round(screenHeight * 0.005);\n      width = screenWidth + padX * 2;\n      height = screenHeight + padY * 2;\n      offsetX = padX;\n      offsetY = padY;\n      break;\n    }\n    case \"bezel\": {\n      // Older bezeled phones: ~5% X, ~9% Y each side\n      const padX = Math.round(screenWidth * 0.05);\n      const padY = Math.round(screenHeight * 0.09);\n      width = screenWidth + padX * 2;\n      height = screenHeight + padY * 2;\n      offsetX = padX;\n      offsetY = padY;\n      break;\n    }\n    case \"tablet\": {\n      const padX = Math.round(screenWidth * 0.05);\n      const padY = Math.round(screenHeight * 0.05);\n      width = screenWidth + padX * 2;\n      height = screenHeight + padY * 2;\n      offsetX = padX;\n      offsetY = padY;\n      break;\n    }\n    case \"mac\": {\n      const padX = Math.round(screenWidth * 0.08);\n      const padY = Math.round(screenHeight * 0.12);\n      width = screenWidth + padX * 2;\n      height = screenHeight + padY * 2;\n      offsetX = padX;\n      offsetY = padY;\n      break;\n    }\n  }\n\n  return {\n    id: d.id,\n    name: d.name,\n    priority: d.priority,\n    width,\n    height,\n    screenWidth,\n    screenHeight,\n    screenResolutions: d.resolutions,\n    screenOffsetX: offsetX,\n    screenOffsetY: offsetY,\n    platform: d.platform,\n    ppi: d.ppi,\n    color: d.color,\n  };\n}\n\n/**\n * All devices from Fastlane's `frameit/device_types.rb` (66 entries) plus\n * iPhone 15/16 models that Apple released after Fastlane's last update, and\n * a couple of Samsung Galaxy S21 entries carried over from fastnode's\n * pre-port list. Ordered descending by priority so `detectDevice*` picks the\n * newest/highest priority device when multiple match.\n */\nexport const DEVICE_FRAMES: DeviceFrame[] = [\n  // ── iPhones 15/16 (post-Fastlane) ──\n  buildFrame({ id: \"iphone16-pro-max\", name: \"iPhone 16 Pro Max\", priority: 14, resolutions: [[1320, 2868], [2868, 1320]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-16-pro\", name: \"iPhone 16 Pro\", priority: 14, resolutions: [[1206, 2622], [2622, 1206]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-16-plus\", name: \"iPhone 16 Plus\", priority: 14, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-16\", name: \"iPhone 16\", priority: 14, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone15-pro-max\", name: \"iPhone 15 Pro Max\", priority: 13, resolutions: [[1290, 2796], [2796, 1290]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-15-pro\", name: \"iPhone 15 Pro\", priority: 13, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-15-plus\", name: \"iPhone 15 Plus\", priority: 13, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-15\", name: \"iPhone 15\", priority: 13, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n\n  // ── iPhones (Fastlane Platform::IOS) ──\n  buildFrame({ id: \"iphone14-pro-max\", name: \"iPhone 14 Pro Max\", priority: 12, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-14-pro\", name: \"iPhone 14 Pro\", priority: 12, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-14-plus\", name: \"iPhone 14 Plus\", priority: 12, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-14\", name: \"iPhone 14\", priority: 12, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone13-pro-max\", name: \"iPhone 13 Pro Max\", priority: 11, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-13-pro\", name: \"iPhone 13 Pro\", priority: 11, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-13\", name: \"iPhone 13\", priority: 11, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-13-mini\", name: \"iPhone 13 Mini\", priority: 11, resolutions: [[1080, 2340], [2340, 1080]], ppi: 476, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone12-pro-max\", name: \"iPhone 12 Pro Max\", priority: 10, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-12-pro\", name: \"iPhone 12 Pro\", priority: 10, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-12\", name: \"iPhone 12\", priority: 10, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-12-mini\", name: \"iPhone 12 Mini\", priority: 10, resolutions: [[1125, 2436], [2436, 1125]], ppi: 476, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone11-pro-max\", name: \"iPhone 11 Pro Max\", priority: 9, resolutions: [[1242, 2688], [2688, 1242]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-11-pro\", name: \"iPhone 11 Pro\", priority: 9, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-11\", name: \"iPhone 11\", priority: 9, resolutions: [[828, 1792], [1792, 828]], ppi: 326, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-XS-Max\", name: \"iPhone XS Max\", priority: 8, resolutions: [[1242, 2688], [2688, 1242]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-XR\", name: \"iPhone XR\", priority: 8, resolutions: [[828, 1792], [1792, 828]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-XS\", name: \"iPhone XS\", priority: 8, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-X\", name: \"iPhone X\", priority: 7, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n  buildFrame({ id: \"iphone-8\", name: \"iPhone 8\", priority: 6, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-8-plus\", name: \"iPhone 8 Plus\", priority: 6, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-7\", name: \"iPhone 7\", priority: 5, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Matte Black\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-7-plus\", name: \"iPhone 7 Plus\", priority: 5, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Matte Black\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-6s\", name: \"iPhone 6s\", priority: 4, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-6s-plus\", name: \"iPhone 6s Plus\", priority: 4, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-se\", name: \"iPhone SE\", priority: 3, resolutions: [[640, 1096], [640, 1136], [1136, 600], [1136, 640]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-5s\", name: \"iPhone 5s\", priority: 2, resolutions: [[640, 1096], [640, 1136], [1136, 600], [1136, 640]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n  buildFrame({ id: \"iphone-5c\", name: \"iPhone 5c\", priority: 2, resolutions: [[640, 1136], [1136, 640]], ppi: 326, color: \"White\", platform: \"ios\", style: \"bezel\" }),\n\n  // ── iPads ──\n  buildFrame({ id: \"ipadPro11\", name: \"iPad Pro 11-inch\", priority: 1, resolutions: [[1668, 2388], [2388, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipadPro129\", name: \"iPad Pro 12.9-inch 4th generation\", priority: 5, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipadPro129-3gen\", name: \"iPad Pro 12.9-inch 3rd generation\", priority: 4, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-pro\", name: \"iPad Pro\", priority: 3, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad105\", name: \"iPad Pro 10.5-inch\", priority: 1, resolutions: [[1668, 2224], [2224, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-10-2\", name: \"iPad 10.2\", priority: 1, resolutions: [[1620, 2160], [2160, 1620]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-air-2\", name: \"iPad Air 2\", priority: 1, resolutions: [[1536, 2048], [2048, 1536]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-air-2019\", name: \"iPad Air 2019\", priority: 2, resolutions: [[1668, 2224], [2224, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-mini-4\", name: \"iPad Mini 4\", priority: 2, resolutions: [[1536, 2048], [2048, 1536]], ppi: 324, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n  buildFrame({ id: \"ipad-mini-2019\", name: \"iPad Mini 2019\", priority: 3, resolutions: [[1536, 2048], [2048, 1536]], ppi: 324, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n\n  // ── Mac ──\n  buildFrame({ id: \"mac\", name: \"MacBook\", priority: 0, resolutions: [[1280, 800], [1440, 900], [2560, 1600], [2880, 1800]], color: \"Space Gray\", platform: \"mac\", style: \"mac\" }),\n\n  // ── Google Pixel (Android) ──\n  buildFrame({ id: \"google-pixel-5\", name: \"Google Pixel 5\", priority: 10, resolutions: [[1080, 2340], [2340, 1080]], ppi: 432, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"google-pixel-4-xl\", name: \"Google Pixel 4 XL\", priority: 9, resolutions: [[1440, 3040], [3040, 1440]], ppi: 537, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"google-pixel-4\", name: \"Google Pixel 4\", priority: 9, resolutions: [[1080, 2280], [2280, 1080]], ppi: 444, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"google-pixel-3-xl\", name: \"Google Pixel 3 XL\", priority: 7, resolutions: [[1440, 2960], [2960, 1440]], ppi: 523, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"google-pixel-3\", name: \"Google Pixel 3\", priority: 7, resolutions: [[1080, 2160], [2160, 1080]], ppi: 443, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n\n  // ── HTC / Huawei / Motorola (Android, bezeled) ──\n  buildFrame({ id: \"htc-one-a9\", name: \"HTC One A9\", priority: 6, resolutions: [[1080, 1920], [1920, 1080]], ppi: 441, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"htc-one-m8\", name: \"HTC One M8\", priority: 3, resolutions: [[1080, 1920], [1920, 1080]], ppi: 441, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"huawei-p8\", name: \"Huawei P8\", priority: 5, resolutions: [[1080, 1920], [1920, 1080]], ppi: 424, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"motorola-moto-e\", name: \"Motorola Moto E\", priority: 3, resolutions: [[540, 960], [960, 540]], ppi: 245, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"motorola-moto-g\", name: \"Motorola Moto G\", priority: 4, resolutions: [[1080, 1920], [1920, 1080]], ppi: 401, platform: \"android\", style: \"bezel\" }),\n\n  // ── Nexus (Android, bezeled) ──\n  buildFrame({ id: \"nexus-4\", name: \"Nexus 4\", priority: 7, resolutions: [[768, 1280], [1820, 768]], ppi: 318, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"nexus-5x\", name: \"Nexus 5X\", priority: 7, resolutions: [[1080, 1920], [1920, 1080]], ppi: 423, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"nexus-6p\", name: \"Nexus 6P\", priority: 7, resolutions: [[1440, 2560], [2560, 1440]], ppi: 518, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"nexus-9\", name: \"Nexus 9\", priority: 7, resolutions: [[1536, 2048], [2048, 1536]], ppi: 281, platform: \"android\", style: \"tablet\" }),\n\n  // ── Samsung Galaxy (Android) ──\n  buildFrame({ id: \"samsung-galaxy-s21\", name: \"Samsung Galaxy S21\", priority: 9, resolutions: [[1080, 2400], [2400, 1080]], ppi: 421, color: \"Phantom Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-note-10-plus\", name: \"Samsung Galaxy Note 10+\", priority: 7, resolutions: [[1440, 3040], [3040, 1440]], ppi: 498, color: \"Aura Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-note-10\", name: \"Samsung Galaxy Note 10\", priority: 6, resolutions: [[1080, 2280], [2280, 1080]], ppi: 401, color: \"Aura Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-note-5\", name: \"Samsung Galaxy Note 5\", priority: 5, resolutions: [[1440, 2560], [2560, 1440]], ppi: 518, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-s10-plus\", name: \"Samsung Galaxy S10+\", priority: 8, resolutions: [[1440, 3040], [3040, 1440]], ppi: 522, color: \"Prism Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-s10\", name: \"Samsung Galaxy S10\", priority: 7, resolutions: [[1440, 3040], [3040, 1440]], ppi: 550, color: \"Prism Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-s9\", name: \"Samsung Galaxy S9\", priority: 6, resolutions: [[1440, 2960], [2960, 1440]], ppi: 570, color: \"Midnight Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-s8\", name: \"Samsung Galaxy S8\", priority: 5, resolutions: [[1440, 2960], [2960, 1440]], ppi: 570, color: \"Midnight Black\", platform: \"android\", style: \"edge\" }),\n  buildFrame({ id: \"samsung-galaxy-s7\", name: \"Samsung Galaxy S7\", priority: 4, resolutions: [[1440, 2560], [2560, 1440]], ppi: 577, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-s5\", name: \"Samsung Galaxy S5\", priority: 3, resolutions: [[1080, 1920], [1920, 1080]], ppi: 432, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-s3\", name: \"Samsung Galaxy S3\", priority: 3, resolutions: [[720, 1280], [1280, 720]], ppi: 306, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-s-duos\", name: \"Samsung Galaxy S Duos\", priority: 3, resolutions: [[480, 800], [800, 480]], ppi: 233, platform: \"android\", style: \"bezel\" }),\n  buildFrame({ id: \"samsung-galaxy-grand-prime\", name: \"Samsung Galaxy Grand Prime\", priority: 5, resolutions: [[540, 960], [960, 540]], ppi: 220, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n\n  // ── Xiaomi ──\n  buildFrame({ id: \"xiaomi-mi-mix-alpha\", name: \"Xiaomi Mi Mix Alpha\", priority: 1, resolutions: [[2088, 2250], [2250, 2088]], ppi: 388, platform: \"android\", style: \"edge\" }),\n];\n\n/**\n * Match a device by screenshot pixel dimensions. Returns the highest-priority\n * device whose resolution list contains `(width, height)` in either orientation.\n */\nexport function detectDeviceFromDimensions(\n  width: number,\n  height: number\n): DeviceFrame | null {\n  let best: DeviceFrame | null = null;\n  for (const device of DEVICE_FRAMES) {\n    for (const [w, h] of device.screenResolutions) {\n      if (w === width && h === height) {\n        if (!best || device.priority > best.priority) best = device;\n        break;\n      }\n    }\n  }\n  return best;\n}\n\n/**\n * Match a device by filename substring. Mirrors Fastlane's\n * `Device.detect_device`: a device matches if the filename contains either\n * the formatted name or the slug id. Token separators `-`, `_`, and spaces\n * are treated as equivalent, and `.` inside numeric suffixes (e.g. `12.9`)\n * is optional. Returns the highest-priority match.\n */\nexport function detectDeviceFromFilename(filename: string): DeviceFrame | null {\n  const lower = filename.toLowerCase();\n  let best: DeviceFrame | null = null;\n\n  const matchesToken = (candidate: string): boolean => {\n    const pattern = candidate\n      .toLowerCase()\n      .replace(/[()]/g, \"\")\n      .replace(/[.+^$*?|{}\\\\[\\]]/g, \"\\\\$&\")\n      .replace(/\\\\\\./g, \"\\\\.?\")\n      .replace(/[-_\\s]+/g, \"[-_ ]?\");\n    return new RegExp(pattern).test(lower);\n  };\n\n  for (const device of DEVICE_FRAMES) {\n    if (matchesToken(device.name) || matchesToken(device.id)) {\n      if (!best || device.priority > best.priority) best = device;\n    }\n  }\n  return best;\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { join, extname, basename } from \"node:path\";\nimport { detectDeviceFromDimensions, detectDeviceFromFilename, type DeviceFrame } from \"./devices.js\";\n\nexport { DEVICE_FRAMES, detectDeviceFromDimensions, detectDeviceFromFilename } from \"./devices.js\";\nexport type { DeviceFrame } from \"./devices.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface FrameitOptions {\n  screenshotsPath: string;\n  outputPath?: string;\n  forceDeviceType?: string;\n  useDeviceOuterShadow?: boolean;\n  whiteBackground?: boolean;\n}\n\nexport async function frameScreenshots(options: FrameitOptions): Promise<void> {\n  const inputDir = options.screenshotsPath;\n  const outputDir = options.outputPath ?? inputDir;\n\n  const entries = await readdir(inputDir);\n  const imageFiles = entries.filter((f) =>\n    [\".png\", \".jpg\", \".jpeg\"].includes(extname(f).toLowerCase()) &&\n    !f.includes(\"_framed\")\n  );\n\n  for (const file of imageFiles) {\n    const filePath = join(inputDir, file);\n    const fileStat = await stat(filePath);\n    if (!fileStat.isFile()) continue;\n\n    // Detect device from filename or dimensions\n    let device = detectDeviceFromFilename(file);\n    if (!device) {\n      const dims = await getImageDimensions(filePath);\n      if (dims) {\n        device = detectDeviceFromDimensions(dims.width, dims.height);\n      }\n    }\n\n    if (!device) continue;\n\n    // Frame the screenshot using ImageMagick\n    const outputFile = join(\n      outputDir,\n      basename(file, extname(file)) + \"_framed.png\"\n    );\n\n    try {\n      await compositeScreenshot(filePath, device, outputFile, options);\n    } catch {\n      // ImageMagick may not be installed — skip gracefully\n    }\n  }\n}\n\nasync function getImageDimensions(\n  filePath: string\n): Promise<{ width: number; height: number } | null> {\n  try {\n    const { stdout } = await execFileAsync(\"identify\", [\"-format\", \"%wx%h\", filePath]);\n    const [w, h] = stdout.trim().split(\"x\").map(Number);\n    if (w && h) return { width: w, height: h };\n  } catch {\n    // ImageMagick not available\n  }\n  return null;\n}\n\nasync function compositeScreenshot(\n  screenshotPath: string,\n  device: DeviceFrame,\n  outputPath: string,\n  options: FrameitOptions\n): Promise<void> {\n  // Create a canvas of the device frame size, composite the screenshot at the offset\n  const bgColor = options.whiteBackground ? \"white\" : \"none\";\n\n  const args = [\n    \"-size\", `${device.width}x${device.height}`,\n    `xc:${bgColor}`,\n    screenshotPath,\n    \"-geometry\", `${device.screenWidth}x${device.screenHeight}+${device.screenOffsetX}+${device.screenOffsetY}`,\n    \"-composite\",\n    outputPath,\n  ];\n\n  await execFileAsync(\"convert\", args);\n}\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n  name: \"run_tests\",\n  aliases: [\"scan\"],\n  description: \"Run unit and UI tests using xcodebuild\",\n  async run(params, ctx) {\n    const { runTests } = await import(\"../../scan/index.js\");\n    const result = await runTests({\n      scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string | undefined,\n      workspace: params.workspace as string | undefined,\n      project: params.project as string | undefined,\n      devices: params.devices as string[] | undefined,\n      testPlan: params.test_plan as string | undefined,\n      onlyTesting: params.only_testing as string[] | undefined,\n      skipTesting: params.skip_testing as string[] | undefined,\n      configuration: params.configuration as string | undefined,\n      outputDirectory: params.output_directory as string | undefined,\n      clean: params.clean as boolean | undefined,\n      codeCoverage: params.code_coverage as boolean | undefined,\n      maxRetries: params.number_of_retries as number | undefined,\n      xcargs: params.xcargs as string | undefined,\n      onOutput: params.on_output as ((chunk: string) => void) | undefined,\n    });\n    ctx.set(\"SCAN_GENERATED_REPORT\", result.reportPaths[0]);\n    return result;\n  },\n});\n\nregisterAction({\n  name: \"capture_ios_screenshots\",\n  aliases: [\"snapshot\", \"capture_screenshots\"],\n  description: \"Capture screenshots using iOS simulators\",\n  async run(params, ctx) {\n    const { captureScreenshots } = await import(\"../../snapshot/index.js\");\n    return captureScreenshots({\n      scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string | undefined,\n      workspace: params.workspace as string | undefined,\n      project: params.project as string | undefined,\n      devices: (params.devices ?? []) as string[],\n      languages: (params.languages ?? [\"en-US\"]) as string[],\n      outputDirectory: params.output_directory as string | undefined,\n      clearPreviousScreenshots: params.clear_previous_screenshots as boolean | undefined,\n      concurrent: params.concurrent as boolean | undefined,\n      numberOfRetries: params.number_of_retries as number | undefined,\n      onOutput: params.on_output as ((chunk: string) => void) | undefined,\n    });\n  },\n});\n\nregisterAction({\n  name: \"trainer\",\n  aliases: [\"parse_test_results\"],\n  description: \"Parse test results and generate JUnit XML\",\n  async run(params) {\n    const { parseTestResults } = await import(\"../../trainer/index.js\");\n    return parseTestResults({\n      path: params.path as string | undefined,\n      outputDirectory: params.output_directory as string | undefined,\n      outputFilename: params.output_filename as string | undefined,\n      failBuildOnError: params.fail_build as boolean | undefined,\n    });\n  },\n});\n\nregisterAction({\n  name: \"precheck\",\n  aliases: [\"check_app_store_metadata\"],\n  description: \"Validate app metadata against App Store review guidelines\",\n  async run(params, ctx) {\n    const { validateMetadata } = await import(\"../../precheck/index.js\");\n    const { AppStoreConnectClient } = await import(\"../../client/index.js\");\n    const client = params.client as InstanceType<typeof AppStoreConnectClient> ?? ctx.get(\"client\");\n    if (!client) throw new Error(\"precheck: client is required\");\n    return validateMetadata({\n      client: client as any,\n      bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n    });\n  },\n});\n\nregisterAction({\n  name: \"frame_screenshots\",\n  aliases: [\"frameit\"],\n  description: \"Frame screenshots with device bezels\",\n  async run(params) {\n    const { frameScreenshots } = await import(\"../../frameit/index.js\");\n    return frameScreenshots({\n      screenshotsPath: params.path as string,\n      outputPath: params.output_path as string | undefined,\n      whiteBackground: params.white as boolean | undefined,\n    });\n  },\n});\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { requireMacOS } from \"./platform.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport async function updateSigningSettings(options: {\n  projectPath: string;\n  teamId: string;\n  bundleIdentifier: string;\n  codeSignIdentity: string;\n  targets?: string[];\n  profileName?: string;\n  profileUuid?: string;\n  automaticSigning?: boolean;\n}): Promise<void> {\n  const pbxprojPath = `${options.projectPath}/project.pbxproj`;\n  let content = await readFile(pbxprojPath, \"utf-8\");\n\n  const style = options.automaticSigning ? \"Automatic\" : \"Manual\";\n\n  // Replace build settings across the file\n  content = replaceBuildSetting(content, \"CODE_SIGN_STYLE\", style);\n  content = replaceBuildSetting(content, \"DEVELOPMENT_TEAM\", options.teamId);\n  content = replaceBuildSetting(content, \"CODE_SIGN_IDENTITY\", options.codeSignIdentity);\n\n  if (options.profileName) {\n    content = replaceBuildSetting(content, \"PROVISIONING_PROFILE_SPECIFIER\", options.profileName);\n  }\n  if (options.profileUuid) {\n    content = replaceBuildSetting(content, \"PROVISIONING_PROFILE\", options.profileUuid);\n  }\n\n  await writeFile(pbxprojPath, content);\n}\n\nexport async function setBuildNumber(\n  projectPath: string,\n  buildNumber: string\n): Promise<void> {\n  const pbxprojPath = `${projectPath}/project.pbxproj`;\n  let content = await readFile(pbxprojPath, \"utf-8\");\n  content = replaceBuildSetting(content, \"CURRENT_PROJECT_VERSION\", buildNumber);\n  await writeFile(pbxprojPath, content);\n}\n\nexport async function setVersionNumber(\n  projectPath: string,\n  version: string\n): Promise<void> {\n  const pbxprojPath = `${projectPath}/project.pbxproj`;\n  let content = await readFile(pbxprojPath, \"utf-8\");\n  content = replaceBuildSetting(content, \"MARKETING_VERSION\", version);\n  await writeFile(pbxprojPath, content);\n}\n\nexport async function readBuildSettings(options: {\n  projectPath?: string;\n  workspacePath?: string;\n  scheme: string;\n  configuration?: string;\n}): Promise<Record<string, string>> {\n  requireMacOS(\"readBuildSettings\");\n\n  const args = [\"-showBuildSettings\"];\n  if (options.workspacePath) args.push(\"-workspace\", options.workspacePath);\n  else if (options.projectPath) args.push(\"-project\", options.projectPath);\n  args.push(\"-scheme\", options.scheme);\n  if (options.configuration) args.push(\"-configuration\", options.configuration);\n\n  const { stdout } = await execFileAsync(\"xcodebuild\", args);\n  const settings: Record<string, string> = {};\n\n  for (const line of stdout.split(\"\\n\")) {\n    const match = line.match(/^\\s+(\\w+)\\s*=\\s*(.*)$/);\n    if (match) {\n      settings[match[1]] = match[2].trim();\n    }\n  }\n\n  return settings;\n}\n\nfunction replaceBuildSetting(content: string, key: string, value: string): string {\n  // Match: KEY = \"value\"; or KEY = value;\n  // Use negative lookbehind to avoid partial matches (e.g., PROVISIONING_PROFILE vs _SPECIFIER)\n  const regex = new RegExp(`(?<![A-Z_])(${key})\\\\s*=\\\\s*(\"[^\"]*\"|[^;]*);`, \"g\");\n  // Quote value if it contains non-alphanumeric chars or if the original was quoted\n  const needsQuotes = /[^A-Za-z0-9]/.test(value) || /\\s/.test(value);\n  const quoted = needsQuotes ? `\"${value}\"` : value;\n  return content.replace(regex, `$1 = ${quoted};`);\n}\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n  name: \"increment_build_number\",\n  description: \"Increment the build number in Xcode project\",\n  async run(params, ctx) {\n    const { readBuildSettings, setBuildNumber } = await import(\"../../xcode/project.js\");\n    const projectPath = (params.xcodeproj ?? params.project_path) as string;\n\n    let buildNumber: string;\n    if (params.build_number) {\n      buildNumber = String(params.build_number);\n    } else {\n      // Read current and increment\n      const settings = await readBuildSettings({\n        projectPath,\n        scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n      });\n      const current = parseInt(settings.CURRENT_PROJECT_VERSION ?? \"0\", 10);\n      buildNumber = String(current + 1);\n    }\n\n    await setBuildNumber(projectPath, buildNumber);\n    ctx.set(\"BUILD_NUMBER\", buildNumber);\n    return buildNumber;\n  },\n});\n\nregisterAction({\n  name: \"increment_version_number\",\n  description: \"Increment the version number in Xcode project\",\n  async run(params, ctx) {\n    const { setVersionNumber, readBuildSettings } = await import(\"../../xcode/project.js\");\n    const projectPath = (params.xcodeproj ?? params.project_path) as string;\n\n    let version: string;\n    if (params.version_number) {\n      version = String(params.version_number);\n    } else {\n      const settings = await readBuildSettings({\n        projectPath,\n        scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n      });\n      const current = settings.MARKETING_VERSION ?? \"1.0.0\";\n      const parts = current.split(\".\").map(Number);\n      const bump = (params.bump_type ?? \"patch\") as string;\n      if (bump === \"major\") { parts[0]++; parts[1] = 0; parts[2] = 0; }\n      else if (bump === \"minor\") { parts[1] = (parts[1] ?? 0) + 1; parts[2] = 0; }\n      else { parts[2] = (parts[2] ?? 0) + 1; }\n      version = parts.join(\".\");\n    }\n\n    await setVersionNumber(projectPath, version);\n    ctx.set(\"VERSION_NUMBER\", version);\n    return version;\n  },\n});\n\nregisterAction({\n  name: \"get_build_number\",\n  description: \"Get the current build number from Xcode project\",\n  async run(params, ctx) {\n    const { readBuildSettings } = await import(\"../../xcode/project.js\");\n    const settings = await readBuildSettings({\n      projectPath: (params.xcodeproj ?? params.project_path) as string | undefined,\n      workspacePath: params.workspace as string | undefined,\n      scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n    });\n    return settings.CURRENT_PROJECT_VERSION ?? \"1\";\n  },\n});\n\nregisterAction({\n  name: \"get_version_number\",\n  description: \"Get the current version number from Xcode project\",\n  async run(params, ctx) {\n    const { readBuildSettings } = await import(\"../../xcode/project.js\");\n    const settings = await readBuildSettings({\n      projectPath: (params.xcodeproj ?? params.project_path) as string | undefined,\n      workspacePath: params.workspace as string | undefined,\n      scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n    });\n    return settings.MARKETING_VERSION ?? \"1.0.0\";\n  },\n});\n","import { registerAction } from \"../index.js\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nregisterAction({\n  name: \"add_git_tag\",\n  aliases: [\"git_tag\"],\n  description: \"Add a git tag to the current commit\",\n  async run(params) {\n    const tag = params.tag as string;\n    const message = params.message as string | undefined;\n    const force = params.force as boolean | undefined;\n\n    const args = [\"tag\"];\n    if (message) args.push(\"-a\", tag, \"-m\", message);\n    else args.push(tag);\n    if (force) args.push(\"-f\");\n\n    await execFileAsync(\"git\", args);\n\n    if (params.push !== false) {\n      await execFileAsync(\"git\", [\"push\", \"origin\", tag, ...(force ? [\"-f\"] : [])]);\n    }\n\n    return tag;\n  },\n});\n\nregisterAction({\n  name: \"commit_version_bump\",\n  aliases: [\"git_commit\"],\n  description: \"Commit version bump changes to git\",\n  async run(params) {\n    const message = (params.message ?? \"Version Bump\") as string;\n    const files = (params.include ?? [\".\"]) as string[];\n\n    for (const file of files) {\n      await execFileAsync(\"git\", [\"add\", file]);\n    }\n    await execFileAsync(\"git\", [\"commit\", \"-m\", message]);\n    return { committed: true, message };\n  },\n});\n\nregisterAction({\n  name: \"push_to_git_remote\",\n  aliases: [\"git_push\"],\n  description: \"Push changes to the git remote\",\n  async run(params) {\n    const remote = (params.remote ?? \"origin\") as string;\n    const branch = params.branch as string | undefined;\n    const force = params.force as boolean | undefined;\n\n    const args = [\"push\", remote];\n    if (branch) args.push(branch);\n    if (force) args.push(\"-f\");\n\n    await execFileAsync(\"git\", args);\n    return { pushed: true };\n  },\n});\n\nregisterAction({\n  name: \"git_pull\",\n  description: \"Pull from the git remote\",\n  async run(params) {\n    const remote = (params.remote ?? \"origin\") as string;\n    const branch = params.branch as string | undefined;\n    const args = [\"pull\", remote];\n    if (branch) args.push(branch);\n    await execFileAsync(\"git\", args);\n    return { pulled: true };\n  },\n});\n\nregisterAction({\n  name: \"changelog_from_git_commits\",\n  description: \"Generate a changelog from git commits\",\n  async run(params) {\n    const between = params.between as [string, string] | undefined;\n    const pretty = (params.pretty ?? \"%B\") as string;\n    const args = [\"log\", `--pretty=format:${pretty}`];\n    if (between) args.push(`${between[0]}...${between[1]}`);\n    else if (params.commits_count) args.push(`-${params.commits_count}`);\n    else args.push(\"-10\");\n\n    const { stdout } = await execFileAsync(\"git\", args);\n    return stdout.trim();\n  },\n});\n\nregisterAction({\n  name: \"last_git_commit\",\n  description: \"Get information about the last git commit\",\n  async run() {\n    const { stdout: hash } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%H\"]);\n    const { stdout: message } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%B\"]);\n    const { stdout: author } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%an\"]);\n    return {\n      commit_hash: hash.trim(),\n      message: message.trim(),\n      author_name: author.trim(),\n    };\n  },\n});\n\nregisterAction({\n  name: \"ensure_git_status_clean\",\n  description: \"Ensure the git repository has no uncommitted changes\",\n  async run() {\n    const { stdout } = await execFileAsync(\"git\", [\"status\", \"--porcelain\"]);\n    if (stdout.trim().length > 0) {\n      throw new Error(\"Git repository has uncommitted changes:\\n\" + stdout);\n    }\n    return { clean: true };\n  },\n});\n\nregisterAction({\n  name: \"git_branch\",\n  description: \"Get the current git branch name\",\n  async run() {\n    const { stdout } = await execFileAsync(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]);\n    return stdout.trim();\n  },\n});\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n  name: \"slack\",\n  description: \"Send a message to Slack\",\n  async run(params) {\n    const webhookUrl = (params.slack_url ?? params.webhook_url ?? process.env.SLACK_URL) as string;\n    if (!webhookUrl) throw new Error(\"slack: webhook_url or SLACK_URL env var required\");\n\n    const payload: Record<string, unknown> = {};\n    if (params.message) payload.text = params.message;\n    if (params.channel) payload.channel = params.channel;\n    if (params.username) payload.username = params.username;\n    if (params.icon_url) payload.icon_url = params.icon_url;\n\n    if (params.payload || params.attachment_properties) {\n      payload.attachments = [\n        {\n          fallback: params.message,\n          color: (params.success === false) ? \"danger\" : \"good\",\n          fields: Object.entries(params.payload ?? params.attachment_properties ?? {}).map(\n            ([title, value]) => ({ title, value: String(value), short: String(value).length < 40 })\n          ),\n        },\n      ];\n    }\n\n    const res = await fetch(webhookUrl, {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify(payload),\n    });\n\n    if (!res.ok) throw new Error(`Slack webhook failed: ${res.status}`);\n    return { sent: true };\n  },\n});\n\nregisterAction({\n  name: \"notification\",\n  description: \"Display a macOS notification\",\n  async run(params) {\n    if (process.platform !== \"darwin\") return;\n    const title = (params.title ?? \"fastnode\") as string;\n    const message = (params.message ?? params.subtitle ?? \"\") as string;\n    const { execFile } = await import(\"node:child_process\");\n    const { promisify } = await import(\"node:util\");\n    const exec = promisify(execFile);\n    const script = `display notification \"${message}\" with title \"${title}\"`;\n    await exec(\"osascript\", [\"-e\", script]).catch(() => {});\n    return { notified: true };\n  },\n});\n","import { registerAction } from \"../index.js\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport * as plist from \"plist\";\n\nregisterAction({\n  name: \"get_info_plist_value\",\n  description: \"Get a value from an Info.plist file\",\n  async run(params) {\n    const path = params.plist_path as string;\n    const key = params.key as string;\n    const content = await readFile(path, \"utf-8\");\n    const parsed = plist.parse(content) as Record<string, unknown>;\n    return parsed[key];\n  },\n});\n\nregisterAction({\n  name: \"set_info_plist_value\",\n  description: \"Set a value in an Info.plist file\",\n  async run(params) {\n    const path = params.plist_path as string;\n    const key = params.key as string;\n    const value = params.value;\n    const content = await readFile(path, \"utf-8\");\n    const parsed = plist.parse(content) as Record<string, unknown>;\n    parsed[key] = value;\n    await writeFile(path, plist.build(parsed as any));\n    return value;\n  },\n});\n\nregisterAction({\n  name: \"update_plist\",\n  description: \"Update multiple values in a plist file\",\n  async run(params) {\n    const path = params.plist_path as string;\n    const block = params.block as Record<string, unknown> | undefined;\n    const content = await readFile(path, \"utf-8\");\n    const parsed = plist.parse(content) as Record<string, unknown>;\n    if (block) Object.assign(parsed, block);\n    await writeFile(path, plist.build(parsed as any));\n    return parsed;\n  },\n});\n","import { registerAction } from \"../index.js\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nregisterAction({\n  name: \"sh\",\n  aliases: [\"shell\"],\n  description: \"Execute a shell command\",\n  async run(params) {\n    const command = params.command as string;\n    const { exec } = await import(\"node:child_process\");\n    return new Promise<string>((resolve, reject) => {\n      exec(command, { maxBuffer: 50 * 1024 * 1024 }, (err, stdout, stderr) => {\n        if (err && params.error_callback) return resolve(stderr);\n        if (err) return reject(err);\n        resolve(stdout);\n      });\n    });\n  },\n});\n\nregisterAction({\n  name: \"puts\",\n  aliases: [\"say\", \"echo\"],\n  description: \"Print a message to stdout\",\n  async run(params) {\n    const message = (params.message ?? params[\"\"]) as string;\n    console.log(message);\n    return message;\n  },\n});\n\nregisterAction({\n  name: \"prompt\",\n  description: \"Ask the user for input\",\n  async run(params) {\n    const text = (params.text ?? \"Enter a value:\") as string;\n    const { createInterface } = await import(\"node:readline\");\n    const rl = createInterface({ input: process.stdin, output: process.stdout });\n    return new Promise<string>((resolve) => {\n      rl.question(text + \" \", (answer) => {\n        rl.close();\n        resolve(answer);\n      });\n    });\n  },\n});\n\nregisterAction({\n  name: \"lane_context\",\n  description: \"Access the current lane context\",\n  async run(_params, ctx) {\n    return ctx.toRecord();\n  },\n});\n\nregisterAction({\n  name: \"is_ci\",\n  aliases: [\"is_ci?\"],\n  description: \"Check if running in a CI environment\",\n  async run() {\n    return !!(\n      process.env.CI ||\n      process.env.CONTINUOUS_INTEGRATION ||\n      process.env.GITHUB_ACTIONS ||\n      process.env.CIRCLECI ||\n      process.env.TRAVIS ||\n      process.env.JENKINS_URL ||\n      process.env.BITRISE_IO ||\n      process.env.BUILDKITE\n    );\n  },\n});\n\nregisterAction({\n  name: \"number_of_commits\",\n  description: \"Get the total number of commits in the repo\",\n  async run() {\n    const { stdout } = await execFileAsync(\"git\", [\"rev-list\", \"--count\", \"HEAD\"]);\n    return parseInt(stdout.trim(), 10);\n  },\n});\n\nregisterAction({\n  name: \"ensure_env_vars\",\n  description: \"Ensure required environment variables are set\",\n  async run(params) {\n    const vars = (params.env_vars ?? []) as string[];\n    const missing = vars.filter((v) => !process.env[v]);\n    if (missing.length > 0) {\n      throw new Error(`Missing environment variables: ${missing.join(\", \")}`);\n    }\n    return { all_set: true };\n  },\n});\n\nregisterAction({\n  name: \"update_code_signing_settings\",\n  description: \"Update code signing settings in an Xcode project\",\n  async run(params, ctx) {\n    const { updateSigningSettings } = await import(\"../../xcode/project.js\");\n    await updateSigningSettings({\n      projectPath: params.path as string,\n      teamId: (params.team_id ?? ctx.get(\"TEAM_ID\")) as string,\n      bundleIdentifier: (params.bundle_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n      codeSignIdentity: (params.code_sign_identity ?? \"Apple Distribution\") as string,\n      profileName: params.profile_name as string | undefined,\n      profileUuid: params.profile_uuid as string | undefined,\n      automaticSigning: (params.use_automatic_signing ?? false) as boolean,\n    });\n    return { updated: true };\n  },\n});\n","import type { LaneContext } from \"../lane/context.js\";\n\nexport interface ActionDefinition {\n  name: string;\n  aliases?: string[];\n  description: string;\n  run(params: Record<string, unknown>, context: LaneContext): Promise<unknown>;\n}\n\nconst actionRegistry = new Map<string, ActionDefinition>();\n\nexport function registerAction(definition: ActionDefinition): void {\n  actionRegistry.set(definition.name, definition);\n  if (definition.aliases) {\n    for (const alias of definition.aliases) {\n      actionRegistry.set(alias, definition);\n    }\n  }\n}\n\nexport function getAction(name: string): ActionDefinition | undefined {\n  return actionRegistry.get(name);\n}\n\nexport function listActions(): ActionDefinition[] {\n  const seen = new Set<ActionDefinition>();\n  const result: ActionDefinition[] = [];\n  for (const def of actionRegistry.values()) {\n    if (!seen.has(def)) {\n      seen.add(def);\n      result.push(def);\n    }\n  }\n  return result;\n}\n\n// Auto-register all built-in actions on first import\nlet _registered = false;\nexport async function ensureActionsRegistered(): Promise<void> {\n  if (_registered) return;\n  _registered = true;\n  await import(\"./built-in/signing.js\");\n  await import(\"./built-in/building.js\");\n  await import(\"./built-in/distribution.js\");\n  await import(\"./built-in/testing.js\");\n  await import(\"./built-in/versioning.js\");\n  await import(\"./built-in/git.js\");\n  await import(\"./built-in/notifications.js\");\n  await import(\"./built-in/plist.js\");\n  await import(\"./built-in/utilities.js\");\n}\n\nexport const action = new Proxy(\n  {} as Record<string, (params?: Record<string, unknown>) => Promise<unknown>>,\n  {\n    get(_target, prop: string) {\n      return async (params: Record<string, unknown> = {}) => {\n        const def = actionRegistry.get(prop);\n        if (!def) {\n          throw new Error(`Unknown action: ${prop}. Run 'fastnode actions' to see available actions.`);\n        }\n        // Context will be injected by the lane runner\n        const context = (globalThis as any).__fastnodeLaneContext as LaneContext | undefined;\n        if (!context) {\n          throw new Error(`Action '${prop}' must be called within a lane context.`);\n        }\n        return def.run(params, context);\n      };\n    },\n  }\n);\n"]}