{"version":3,"sources":["../../src/client/auth.ts","../../src/client/srp.ts","../../src/client/apple-session.ts","../../src/client/request.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"],"names":["choice","phone","code","createHash","detail","id"],"mappings":"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","file":"index.mjs","sourcesContent":["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","/**\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 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"]}