@sitepong/fastnode 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -1
- package/dist/actions/index.cjs +848 -54
- package/dist/actions/index.cjs.map +1 -1
- package/dist/actions/index.mjs +849 -55
- package/dist/actions/index.mjs.map +1 -1
- package/dist/apple-session-jUzBrql5.d.cts +122 -0
- package/dist/apple-session-jUzBrql5.d.ts +122 -0
- package/dist/cert/index.cjs +782 -736
- package/dist/cert/index.cjs.map +1 -1
- package/dist/cert/index.d.cts +5 -4
- package/dist/cert/index.d.ts +5 -4
- package/dist/cert/index.mjs +782 -737
- package/dist/cert/index.mjs.map +1 -1
- package/dist/{cert-Ddl7FpFT.d.ts → cert-RvXmdMke.d.ts} +2 -2
- package/dist/{cert-FehieKeb.d.cts → cert-eOoxGMN1.d.cts} +2 -2
- package/dist/cli/index.cjs +1321 -60
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +3 -2
- package/dist/cli/index.d.ts +3 -2
- package/dist/cli/index.mjs +1322 -61
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/index.cjs +443 -31
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +3 -2
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.mjs +443 -31
- package/dist/client/index.mjs.map +1 -1
- package/dist/deliver/index.cjs +334 -13
- package/dist/deliver/index.cjs.map +1 -1
- package/dist/deliver/index.d.cts +4 -3
- package/dist/deliver/index.d.ts +4 -3
- package/dist/deliver/index.mjs +330 -15
- package/dist/deliver/index.mjs.map +1 -1
- package/dist/{enums-B609j2rb.d.cts → enums-yXNVh3UI.d.cts} +8 -1
- package/dist/{enums-B609j2rb.d.ts → enums-yXNVh3UI.d.ts} +8 -1
- package/dist/gradle/index.cjs +222 -0
- package/dist/gradle/index.cjs.map +1 -0
- package/dist/gradle/index.d.cts +1 -0
- package/dist/gradle/index.d.ts +1 -0
- package/dist/gradle/index.mjs +217 -0
- package/dist/gradle/index.mjs.map +1 -0
- package/dist/gym/index.d.cts +2 -2
- package/dist/gym/index.d.ts +2 -2
- package/dist/index-8djTPW8O.d.ts +104 -0
- package/dist/{index-DrUpRXRG.d.cts → index-B6-MJpO4.d.cts} +1 -1
- package/dist/{index-D13sn8DO.d.cts → index-BE7bwNff.d.cts} +1 -1
- package/dist/index-BGhV0gS-.d.ts +65 -0
- package/dist/index-BaNcf7jt.d.cts +201 -0
- package/dist/{index-DZoPGCbE.d.ts → index-BvyZ4uiw.d.ts} +3 -3
- package/dist/{index-B8FOfxOw.d.ts → index-C01Rkrir.d.ts} +2 -2
- package/dist/{index-YcKz4aRS.d.ts → index-C9mHBJED.d.ts} +1 -1
- package/dist/{index-BICa8odo.d.cts → index-CAEiXVWd.d.ts} +9 -1
- package/dist/index-CBf0-NUQ.d.ts +201 -0
- package/dist/index-CXJlvmB4.d.cts +63 -0
- package/dist/index-CXJlvmB4.d.ts +63 -0
- package/dist/{index-CNHf7I4v.d.cts → index-D1GHEM3c.d.ts} +32 -3
- package/dist/index-DFstwgGK.d.cts +65 -0
- package/dist/{index-Bk1Gd-qE.d.cts → index-DGkgRnZp.d.cts} +2 -2
- package/dist/{index-CplRWSUc.d.ts → index-DLJso7Vs.d.cts} +32 -3
- package/dist/{index-BZWmOTWE.d.cts → index-DWOLZNlz.d.cts} +2 -2
- package/dist/{index-OelCoOth.d.cts → index-DfkIz7i0.d.cts} +18 -4
- package/dist/{index-CtPyeMLH.d.ts → index-DjC_gmnL.d.ts} +18 -4
- package/dist/index-DnHQ2uT2.d.cts +104 -0
- package/dist/{index-CCtYhPN9.d.ts → index-DrmS802s.d.cts} +331 -130
- package/dist/index-Dv-Mek07.d.cts +84 -0
- package/dist/index-Dv-Mek07.d.ts +84 -0
- package/dist/{index-oVyLLIEK.d.cts → index-icIH5e5V.d.cts} +3 -3
- package/dist/{index-DI1ZHr-3.d.ts → index-laE3_wm9.d.cts} +9 -1
- package/dist/{index-BKUapQP2.d.cts → index-lsuS2R1T.d.ts} +331 -130
- package/dist/{index-DImN9PWc.d.ts → index-mEEB7An6.d.ts} +1 -1
- package/dist/{index-DFni8oZt.d.ts → index-rTZOdMRE.d.ts} +2 -2
- package/dist/index.cjs +3342 -959
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +237 -14
- package/dist/index.d.ts +237 -14
- package/dist/index.mjs +3335 -963
- package/dist/index.mjs.map +1 -1
- package/dist/lane/index.cjs +848 -54
- package/dist/lane/index.cjs.map +1 -1
- package/dist/lane/index.mjs +849 -55
- package/dist/lane/index.mjs.map +1 -1
- package/dist/match/index.d.cts +6 -5
- package/dist/match/index.d.ts +6 -5
- package/dist/pem/index.d.cts +4 -3
- package/dist/pem/index.d.ts +4 -3
- package/dist/pilot/index.cjs +8 -4
- package/dist/pilot/index.cjs.map +1 -1
- package/dist/pilot/index.d.cts +4 -3
- package/dist/pilot/index.d.ts +4 -3
- package/dist/pilot/index.mjs +10 -6
- package/dist/pilot/index.mjs.map +1 -1
- package/dist/playstore/index.cjs +207 -0
- package/dist/playstore/index.cjs.map +1 -0
- package/dist/playstore/index.d.cts +1 -0
- package/dist/playstore/index.d.ts +1 -0
- package/dist/playstore/index.mjs +203 -0
- package/dist/playstore/index.mjs.map +1 -0
- package/dist/precheck/index.d.cts +4 -3
- package/dist/precheck/index.d.ts +4 -3
- package/dist/privacy/index.cjs +207 -0
- package/dist/privacy/index.cjs.map +1 -0
- package/dist/privacy/index.d.cts +2 -0
- package/dist/privacy/index.d.ts +2 -0
- package/dist/privacy/index.mjs +195 -0
- package/dist/privacy/index.mjs.map +1 -0
- package/dist/produce/index.cjs +32 -0
- package/dist/produce/index.cjs.map +1 -1
- package/dist/produce/index.d.cts +4 -3
- package/dist/produce/index.d.ts +4 -3
- package/dist/produce/index.mjs +32 -1
- package/dist/produce/index.mjs.map +1 -1
- package/dist/review/index.cjs +141 -0
- package/dist/review/index.cjs.map +1 -0
- package/dist/review/index.d.cts +2 -0
- package/dist/review/index.d.ts +2 -0
- package/dist/review/index.mjs +137 -0
- package/dist/review/index.mjs.map +1 -0
- package/dist/sigh/index.d.cts +4 -3
- package/dist/sigh/index.d.ts +4 -3
- package/dist/xcode/index.cjs +1 -1
- package/dist/xcode/index.cjs.map +1 -1
- package/dist/xcode/index.mjs +1 -1
- package/dist/xcode/index.mjs.map +1 -1
- package/package.json +27 -1
- package/dist/index-B9QeTpQK.d.cts +0 -99
- package/dist/index-xykpq6Lz.d.ts +0 -99
package/dist/lane/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cert/csr.ts","../../src/cert/cert.ts","../../src/sigh/index.ts","../../src/match/storage/git.ts","../../src/match/storage/s3.ts","../../src/match/storage/local.ts","../../src/match/storage/index.ts","../../src/match/encryption.ts","../../src/match/index.ts","../../src/pem/index.ts","../../src/actions/built-in/signing.ts","../../src/xcode/platform.ts","../../src/gym/detect.ts","../../src/gym/export-options.ts","../../src/gym/index.ts","../../src/actions/built-in/building.ts","../../src/client/srp.ts","../../src/client/apple-session.ts","../../src/client/request.ts","../../src/pilot/upload-altool.ts","../../src/pilot/transporter-install.ts","../../src/pilot/upload-transporter.ts","../../src/pilot/classify.ts","../../src/pilot/index.ts","../../src/deliver/metadata.ts","../../src/xcode/upload.ts","../../src/deliver/index.ts","../../src/produce/index.ts","../../src/actions/built-in/distribution.ts","../../src/scan/command.ts","../../src/scan/retry.ts","../../src/scan/index.ts","../../src/snapshot/simulator.ts","../../src/snapshot/index.ts","../../src/trainer/index.ts","../../src/precheck/rules.ts","../../src/precheck/index.ts","../../src/client/auth.ts","../../src/resources/certificates.ts","../../src/resources/profiles.ts","../../src/resources/bundle-ids.ts","../../src/resources/devices.ts","../../src/resources/apps.ts","../../src/resources/builds.ts","../../src/resources/beta-groups.ts","../../src/resources/capabilities.ts","../../src/resources/app-store-versions.ts","../../src/resources/app-screenshots.ts","../../src/resources/review-submissions.ts","../../src/resources/app-info.ts","../../src/resources/app-info-localizations.ts","../../src/resources/app-store-review-details.ts","../../src/resources/beta-testers.ts","../../src/resources/beta-app-review-submissions.ts","../../src/resources/beta-app-review-details.ts","../../src/resources/beta-invitations.ts","../../src/resources/beta-licenses.ts","../../src/resources/app-previews.ts","../../src/resources/app-preview-sets.ts","../../src/resources/app-prices.ts","../../src/resources/territories.ts","../../src/resources/age-rating-declarations.ts","../../src/resources/app-categories.ts","../../src/resources/app-encryption-declarations.ts","../../src/resources/idfa-declarations.ts","../../src/resources/pre-release-versions.ts","../../src/resources/review-submission-items.ts","../../src/resources/users.ts","../../src/resources/user-invitations.ts","../../src/resources/in-app-purchases.ts","../../src/resources/game-center-detail.ts","../../src/resources/xcode-metrics.ts","../../src/client/portal.ts","../../src/client/iris.ts","../../src/client/index.ts","../../src/frameit/devices.ts","../../src/frameit/index.ts","../../src/actions/built-in/testing.ts","../../src/xcode/project.ts","../../src/actions/built-in/versioning.ts","../../src/actions/built-in/git.ts","../../src/actions/built-in/notifications.ts","../../src/actions/built-in/plist.ts","../../src/actions/built-in/utilities.ts","../../src/actions/index.ts","../../src/lane/context.ts","../../src/lane/runner.ts","../../src/lane/fastfile.ts","../../src/lane/index.ts"],"names":["cert","content","result","join","tmpdir","unlink","mkdir","writeFile","writeFileSync","mkdtempSync","execFileSync","rmSync","GitStorage","S3Storage","LocalStorage","readFile","createCertificate","createProfile","readdir","extname","execSync","promisify","execFile","syncSigningAssets","createPushCertificate","plist","spawn","resolve","stat","buildApp","rm","createHash","pbkdf2Sync","randomBytes","choice","phone","code","detail","existsSync","mkdtemp","build","sleep","uploadWithAltool","uploadToAppStore","createApp","mkdirSync","runXcodebuild","execFileAsync","setInterfaceStyle","basename","action","readFileSync","plist2","readdirSync","id","init_devices","runTests","captureScreenshots","parseTestResults","validateMetadata","AppStoreConnectClient","frameScreenshots","readBuildSettings","setBuildNumber","setVersionNumber","git_exports","init_git","createInterface","updateSigningSettings","lanes","hooks"],"mappings":"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","file":"index.mjs","sourcesContent":["import * as x509 from \"@peculiar/x509\";\nimport { webcrypto, generateKeyPairSync } from \"node:crypto\";\nimport { execSync } from \"node:child_process\";\nimport { writeFileSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\n\n// Register the Node.js crypto provider.\nx509.cryptoProvider.set(webcrypto as unknown as Parameters<typeof x509.cryptoProvider.set>[0]);\n\nfunction toPem(header: string, der: Buffer): string {\n const b64 = der.toString(\"base64\");\n const lines: string[] = [];\n for (let i = 0; i < b64.length; i += 64) lines.push(b64.slice(i, i + 64));\n return `-----BEGIN ${header}-----\\n${lines.join(\"\\n\")}\\n-----END ${header}-----`;\n}\n\n/**\n * Generate EC P-256 CSR — used by App Store Connect API (JWT auth).\n */\nexport async function generateCSR(): Promise<{ csr: string; privateKey: string }> {\n const algorithm = { name: \"ECDSA\", namedCurve: \"P-256\" } as const;\n const keyPair = await webcrypto.subtle.generateKey(algorithm, true, [\"sign\", \"verify\"]);\n\n const csr = await x509.Pkcs10CertificateRequestGenerator.create({\n name: \"CN=PEM\",\n keys: keyPair,\n signingAlgorithm: { name: \"ECDSA\", hash: \"SHA-256\" },\n });\n\n const pkcs8 = await webcrypto.subtle.exportKey(\"pkcs8\", keyPair.privateKey);\n return {\n csr: csr.toString(\"pem\"),\n privateKey: toPem(\"PRIVATE KEY\", Buffer.from(pkcs8)),\n };\n}\n\n/**\n * Generate RSA 2048 CSR — required by Apple Developer Portal (session auth).\n * Matches Fastlane's create_certificate_signing_request which uses RSA 2048.\n */\nexport function generateRSACSR(): { csr: string; privateKey: string } {\n const { privateKey, publicKey } = generateKeyPairSync(\"rsa\", {\n modulusLength: 2048,\n privateKeyEncoding: { type: \"pkcs8\", format: \"pem\" },\n publicKeyEncoding: { type: \"spki\", format: \"pem\" },\n });\n\n // Generate CSR using openssl (Node crypto doesn't have native CSR generation for RSA)\n const keyPath = join(tmpdir(), `fastnode-rsa-${Date.now()}.pem`);\n const csrPath = join(tmpdir(), `fastnode-rsa-${Date.now()}.csr`);\n\n try {\n writeFileSync(keyPath, privateKey);\n execSync(`openssl req -new -key \"${keyPath}\" -out \"${csrPath}\" -subj \"/CN=PEM\" 2>/dev/null`);\n const csr = readFileSync(csrPath, \"utf-8\");\n return { csr, privateKey };\n } finally {\n try { unlinkSync(keyPath); } catch {}\n try { unlinkSync(csrPath); } catch {}\n }\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { writeFile, mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Certificate, CertificateType } from \"../types/index.js\";\nimport { generateCSR } from \"./csr.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface CertOptions {\n client: AppStoreConnectClient;\n type?: CertificateType;\n development?: boolean;\n force?: boolean;\n outputDir?: string;\n keychainPath?: string;\n keychainPassword?: string;\n platform?: \"ios\" | \"macos\";\n}\n\nexport interface CertResult {\n certificate: Certificate;\n privateKey: string;\n certificateContent: Buffer;\n certPath?: string;\n p12Path?: string;\n}\n\nfunction resolveCertificateTypes(options: CertOptions): CertificateType[] {\n if (options.type) return [options.type];\n\n const platform = options.platform ?? \"ios\";\n if (options.development) {\n return platform === \"macos\" ? [\"MAC_APP_DEVELOPMENT\"] : [\"IOS_DEVELOPMENT\"];\n }\n return platform === \"macos\"\n ? [\"MAC_APP_DISTRIBUTION\"]\n : [\"IOS_DISTRIBUTION\"];\n}\n\nexport async function findValidCertificates(\n options: Omit<CertOptions, \"force\">\n): Promise<Certificate[]> {\n const types = resolveCertificateTypes(options as CertOptions);\n const certs = await options.client.certificates.list({\n filter: { certificateType: types },\n limit: 200,\n });\n\n const now = new Date();\n return certs.filter(\n (c) => new Date(c.attributes.expirationDate) > now\n );\n}\n\nexport async function createCertificate(\n options: CertOptions\n): Promise<CertResult> {\n // Check for existing valid certs unless force\n if (!options.force) {\n const existing = await findValidCertificates(options);\n if (existing.length > 0) {\n const cert = existing[0];\n const content = Buffer.from(cert.attributes.certificateContent, \"base64\");\n const result: CertResult = {\n certificate: cert,\n privateKey: \"\",\n certificateContent: content,\n };\n\n if (options.outputDir) {\n await mkdir(options.outputDir, { recursive: true });\n const certPath = join(options.outputDir, `${cert.id}.cer`);\n await writeFile(certPath, content);\n result.certPath = certPath;\n }\n\n return result;\n }\n }\n\n // Generate CSR and create new certificate\n const types = resolveCertificateTypes(options);\n const { csr, privateKey } = await generateCSR();\n\n const cert = await options.client.certificates.create({\n certificateType: types[0],\n csrContent: csr,\n });\n\n const content = Buffer.from(cert.attributes.certificateContent, \"base64\");\n\n const result: CertResult = {\n certificate: cert,\n privateKey,\n certificateContent: content,\n };\n\n // Write files if outputDir provided\n if (options.outputDir) {\n await mkdir(options.outputDir, { recursive: true });\n\n const certPath = join(options.outputDir, `${cert.id}.cer`);\n await writeFile(certPath, content);\n result.certPath = certPath;\n\n const keyPath = join(options.outputDir, `${cert.id}.p12`);\n await writeFile(keyPath, privateKey);\n result.p12Path = keyPath;\n }\n\n // Import to keychain if on macOS\n if (options.keychainPath && process.platform === \"darwin\") {\n await importToKeychain(\n content,\n options.keychainPath,\n options.keychainPassword\n );\n }\n\n return result;\n}\n\nexport async function revokeCertificate(\n client: AppStoreConnectClient,\n id: string\n): Promise<void> {\n await client.certificates.revoke(id);\n}\n\nexport async function downloadCertificate(\n client: AppStoreConnectClient,\n id: string\n): Promise<Buffer> {\n const cert = await client.certificates.get(id);\n return Buffer.from(cert.attributes.certificateContent, \"base64\");\n}\n\nexport async function revokeExpiredCertificates(\n options: CertOptions\n): Promise<number> {\n const types = resolveCertificateTypes(options);\n const certs = await options.client.certificates.list({\n filter: { certificateType: types },\n });\n\n const now = new Date();\n let count = 0;\n for (const cert of certs) {\n if (new Date(cert.attributes.expirationDate) <= now) {\n try {\n await options.client.certificates.revoke(cert.id);\n count++;\n } catch {\n // Ignore revocation failures for already-revoked certs\n }\n }\n }\n return count;\n}\n\nasync function importToKeychain(\n certData: Buffer,\n keychainPath: string,\n keychainPassword?: string\n): Promise<void> {\n const { tmpdir } = await import(\"node:os\");\n const tempCertPath = join(tmpdir(), `fastnode-cert-${Date.now()}.cer`);\n await writeFile(tempCertPath, certData);\n\n try {\n const args = [\n \"import\",\n tempCertPath,\n \"-k\",\n keychainPath,\n \"-T\",\n \"/usr/bin/codesign\",\n \"-T\",\n \"/usr/bin/security\",\n ];\n\n await execFileAsync(\"security\", args);\n\n // Set partition list if keychain password provided\n if (keychainPassword) {\n await execFileAsync(\"security\", [\n \"set-key-partition-list\",\n \"-S\",\n \"apple-tool:,apple:,codesign:\",\n \"-s\",\n \"-k\",\n keychainPassword,\n keychainPath,\n ]);\n }\n } finally {\n const { unlink } = await import(\"node:fs/promises\");\n await unlink(tempCertPath).catch(() => {});\n }\n}\n","import { writeFile, mkdir, copyFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Profile, ProfileType, CertificateType, Platform } from \"../types/index.js\";\n\nexport interface SighOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n profileType?: ProfileType;\n profileName?: string;\n certificateIds?: string[];\n deviceIds?: string[];\n force?: boolean;\n outputDir?: string;\n platform?: \"ios\" | \"macos\" | \"tvos\" | \"catalyst\";\n development?: boolean;\n adhoc?: boolean;\n inHouse?: boolean;\n readonly?: boolean;\n skipInstall?: boolean;\n skipCertificateVerification?: boolean;\n includeAllCertificates?: boolean;\n}\n\nexport interface SighResult {\n profile: Profile;\n profileContent: Buffer;\n uuid: string;\n name: string;\n filePath?: string;\n}\n\nfunction resolveProfileType(options: SighOptions): ProfileType {\n if (options.profileType) return options.profileType;\n\n const platform = options.platform ?? \"ios\";\n const isDev = options.development ?? false;\n const isAdhoc = options.adhoc ?? false;\n const isInHouse = options.inHouse ?? false;\n\n switch (platform) {\n case \"macos\":\n if (isDev) return \"MAC_APP_DEVELOPMENT\";\n if (isInHouse) return \"MAC_APP_INHOUSE\";\n return \"MAC_APP_STORE\";\n case \"tvos\":\n if (isDev) return \"TVOS_APP_DEVELOPMENT\";\n if (isAdhoc) return \"TVOS_APP_ADHOC\";\n if (isInHouse) return \"TVOS_APP_INHOUSE\";\n return \"TVOS_APP_STORE\";\n case \"catalyst\":\n if (isDev) return \"MAC_CATALYST_APP_DEVELOPMENT\";\n if (isInHouse) return \"MAC_CATALYST_APP_INHOUSE\";\n return \"MAC_CATALYST_APP_STORE\";\n default:\n if (isDev) return \"IOS_APP_DEVELOPMENT\";\n if (isAdhoc) return \"IOS_APP_ADHOC\";\n if (isInHouse) return \"IOS_APP_INHOUSE\";\n return \"IOS_APP_STORE\";\n }\n}\n\nfunction certificateTypesForProfile(\n profileType: ProfileType\n): CertificateType[] {\n switch (profileType) {\n case \"IOS_APP_DEVELOPMENT\":\n case \"TVOS_APP_DEVELOPMENT\":\n case \"MAC_CATALYST_APP_DEVELOPMENT\":\n return [\"IOS_DEVELOPMENT\"];\n case \"MAC_APP_DEVELOPMENT\":\n return [\"MAC_APP_DEVELOPMENT\"];\n case \"IOS_APP_STORE\":\n case \"IOS_APP_ADHOC\":\n case \"TVOS_APP_STORE\":\n case \"TVOS_APP_ADHOC\":\n case \"MAC_CATALYST_APP_STORE\":\n return [\"IOS_DISTRIBUTION\"];\n case \"IOS_APP_INHOUSE\":\n case \"TVOS_APP_INHOUSE\":\n case \"MAC_CATALYST_APP_INHOUSE\":\n return [\"IOS_DISTRIBUTION\"];\n case \"MAC_APP_STORE\":\n case \"MAC_APP_INHOUSE\":\n return [\"MAC_APP_DISTRIBUTION\"];\n case \"MAC_APP_DIRECT\":\n return [\"DEVELOPER_ID_APPLICATION\"];\n default:\n return [\"IOS_DISTRIBUTION\"];\n }\n}\n\nfunction needsDevices(profileType: ProfileType): boolean {\n return (\n profileType.includes(\"DEVELOPMENT\") || profileType.includes(\"ADHOC\")\n );\n}\n\nfunction profileExtension(profileType: ProfileType): string {\n return profileType.startsWith(\"MAC_\") && !profileType.includes(\"CATALYST\")\n ? \".provisionprofile\"\n : \".mobileprovision\";\n}\n\nexport async function findMatchingProfile(\n options: Omit<SighOptions, \"force\">\n): Promise<Profile | null> {\n const profileType = resolveProfileType(options as SighOptions);\n const profiles = await options.client.profiles.list({\n filter: { profileType },\n include: \"bundleId\",\n limit: 200,\n });\n\n const now = new Date();\n for (const profile of profiles) {\n // Check bundle ID match\n const bundleIdRel = profile.relationships?.bundleId?.data;\n if (bundleIdRel) {\n const bundleId = await options.client.bundleIds.get(bundleIdRel.id);\n if (bundleId.attributes.identifier !== options.bundleIdentifier) continue;\n }\n\n // Check state and expiration\n if (profile.attributes.profileState !== \"ACTIVE\") continue;\n if (new Date(profile.attributes.expirationDate) <= now) continue;\n\n // Check name if specified\n if (\n options.profileName &&\n profile.attributes.name !== options.profileName\n ) {\n continue;\n }\n\n return profile;\n }\n\n return null;\n}\n\nexport async function createProfile(\n options: SighOptions\n): Promise<SighResult> {\n const profileType = resolveProfileType(options);\n\n // If force, delete existing first\n if (options.force) {\n const existing = await findMatchingProfile(options);\n if (existing) {\n await options.client.profiles.delete(existing.id);\n }\n } else {\n // Check for existing\n const existing = await findMatchingProfile(options);\n if (existing) {\n return downloadAndReturn(options, existing);\n }\n }\n\n // Find or verify bundle ID\n let bundleId = await options.client.bundleIds.find(options.bundleIdentifier);\n if (!bundleId) {\n throw new Error(\n `Bundle ID '${options.bundleIdentifier}' not found. Register it first with produce.registerBundleId().`\n );\n }\n\n // Get certificates\n const certTypes = certificateTypesForProfile(profileType);\n let certificateIds = options.certificateIds;\n if (!certificateIds || certificateIds.length === 0) {\n const certs = await options.client.certificates.list({\n filter: { certificateType: certTypes },\n });\n const now = new Date();\n const validCerts = certs.filter(\n (c) => new Date(c.attributes.expirationDate) > now\n );\n if (validCerts.length === 0) {\n throw new Error(\n `No valid certificates found of type ${certTypes.join(\", \")}. Create one first with cert.createCertificate().`\n );\n }\n certificateIds = options.includeAllCertificates\n ? validCerts.map((c) => c.id)\n : [validCerts[0].id];\n }\n\n // Get devices if needed\n let deviceIds = options.deviceIds;\n if (needsDevices(profileType) && (!deviceIds || deviceIds.length === 0)) {\n const platform: Platform =\n options.platform === \"macos\"\n ? \"MAC_OS\"\n : options.platform === \"tvos\"\n ? \"TVOS\"\n : \"IOS\";\n const devices = await options.client.devices.list({\n filter: { platform, status: \"ENABLED\" },\n });\n deviceIds = devices.map((d) => d.id);\n }\n\n // Generate profile name\n const profileName =\n options.profileName ??\n `${profileType} ${options.bundleIdentifier} ${Date.now()}`;\n\n // Create profile\n const profile = await options.client.profiles.create({\n name: profileName,\n profileType,\n bundleIdId: bundleId.id,\n certificateIds,\n deviceIds,\n });\n\n return downloadAndReturn(options, profile);\n}\n\nasync function downloadAndReturn(\n options: SighOptions,\n profile: Profile\n): Promise<SighResult> {\n const content = Buffer.from(profile.attributes.profileContent, \"base64\");\n const profileType = resolveProfileType(options);\n const ext = profileExtension(profileType);\n\n const result: SighResult = {\n profile,\n profileContent: content,\n uuid: profile.attributes.uuid,\n name: profile.attributes.name,\n };\n\n if (options.outputDir) {\n await mkdir(options.outputDir, { recursive: true });\n const filename = `${profileType}_${options.bundleIdentifier}${ext}`;\n const filePath = join(options.outputDir, filename);\n await writeFile(filePath, content);\n result.filePath = filePath;\n }\n\n // Install on macOS\n if (!options.skipInstall && process.platform === \"darwin\") {\n await installProfile(content, profile.attributes.uuid);\n }\n\n return result;\n}\n\nexport async function downloadProfile(\n client: AppStoreConnectClient,\n id: string\n): Promise<Buffer> {\n const profile = await client.profiles.get(id);\n return Buffer.from(profile.attributes.profileContent, \"base64\");\n}\n\n/**\n * Install a provisioning profile to both the legacy MobileDevice directory\n * (Xcode ≤ 15) and the new Xcode 16+ location. Xcode 16 moved the default\n * profiles directory to `~/Library/Developer/Xcode/UserData/Provisioning\n * Profiles/`; writing to both keeps old and new Xcodes happy without needing\n * to detect the installed Xcode version.\n *\n * Returns the legacy path as the primary install location.\n */\nexport async function installProfile(\n profileContent: Buffer,\n uuid: string\n): Promise<string> {\n const legacyDir = join(\n homedir(),\n \"Library\",\n \"MobileDevice\",\n \"Provisioning Profiles\"\n );\n const xcode16Dir = join(\n homedir(),\n \"Library\",\n \"Developer\",\n \"Xcode\",\n \"UserData\",\n \"Provisioning Profiles\"\n );\n const filename = `${uuid}.mobileprovision`;\n\n await mkdir(legacyDir, { recursive: true });\n const legacyPath = join(legacyDir, filename);\n await writeFile(legacyPath, profileContent);\n\n // Also install into the Xcode 16+ location. Non-fatal if it fails\n // (e.g. sandboxed environments).\n try {\n await mkdir(xcode16Dir, { recursive: true });\n await writeFile(join(xcode16Dir, filename), profileContent);\n } catch {\n // Ignore — legacy path install is the authoritative one.\n }\n\n return legacyPath;\n}\n","import { execFileSync } from \"node:child_process\";\nimport { mkdtempSync, rmSync, writeFileSync, chmodSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class GitStorage implements StorageBackend {\n workingDirectory: string;\n private gitUrl: string;\n private branch: string;\n private privateKeyPath?: string;\n private privateKeyContent?: string;\n private basicAuth?: { user: string; pass: string };\n private bearerToken?: string;\n private userName?: string;\n private userEmail?: string;\n private shallowClone: boolean;\n /** Temp path written from `gitPrivateKeyContent`. Cleaned up on `cleanup`. */\n private tempKeyPath?: string;\n\n constructor(params: StorageParams) {\n this.gitUrl = params.gitUrl ?? \"\";\n this.branch = params.gitBranch ?? \"master\";\n this.privateKeyPath = params.gitPrivateKey;\n this.privateKeyContent = params.gitPrivateKeyContent;\n this.basicAuth = params.gitBasicAuth;\n this.bearerToken = params.gitBearerToken;\n this.userName = params.gitUserName;\n this.userEmail = params.gitUserEmail;\n this.shallowClone = params.shallowClone ?? true;\n this.workingDirectory = \"\";\n }\n\n async download(): Promise<string> {\n this.workingDirectory = mkdtempSync(join(tmpdir(), \"fastnode-match-\"));\n\n // Materialise inline private key content to a temp file with 0600 perms.\n if (this.privateKeyContent && !this.privateKeyPath) {\n this.tempKeyPath = join(\n mkdtempSync(join(tmpdir(), \"fastnode-match-key-\")),\n \"id_rsa\"\n );\n writeFileSync(this.tempKeyPath, this.privateKeyContent);\n chmodSync(this.tempKeyPath, 0o600);\n }\n\n const env = this.buildEnv();\n const extraArgs = this.buildHttpAuthArgs();\n const cloneBase = [\"-c\", \"http.extraheader=\", ...extraArgs]; // placeholder removed below\n // Rebuild cleanly: only include extraArgs (each is a pair of -c flag)\n const configArgs = extraArgs.flatMap((entry) => [\"-c\", entry]);\n\n const baseArgs = this.shallowClone ? [\"--depth\", \"1\"] : [];\n const branchArgs = [\"-b\", this.branch, \"--single-branch\"];\n\n try {\n execFileSync(\n \"git\",\n [\n ...configArgs,\n \"clone\",\n ...baseArgs,\n ...branchArgs,\n this.gitUrl,\n this.workingDirectory,\n ],\n { env, stdio: \"pipe\" }\n );\n } catch {\n // Branch may not exist — clone without branch and create it\n execFileSync(\n \"git\",\n [\n ...configArgs,\n \"clone\",\n ...baseArgs,\n this.gitUrl,\n this.workingDirectory,\n ],\n { env, stdio: \"pipe\" }\n );\n try {\n execFileSync(\"git\", [\"checkout\", this.branch], {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\",\n });\n } catch {\n execFileSync(\"git\", [\"checkout\", \"--orphan\", this.branch], {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\",\n });\n }\n }\n\n // Set commit author locally when provided (don't touch global config).\n if (this.userName) {\n execFileSync(\"git\", [\"config\", \"user.name\", this.userName], {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\",\n });\n }\n if (this.userEmail) {\n execFileSync(\"git\", [\"config\", \"user.email\", this.userEmail], {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\",\n });\n }\n\n return this.workingDirectory;\n }\n\n async saveChanges(files: string[], message: string): Promise<void> {\n const env = this.buildEnv();\n const extraArgs = this.buildHttpAuthArgs();\n const configArgs = extraArgs.flatMap((entry) => [\"-c\", entry]);\n const opts = {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\" as const,\n };\n\n for (const file of files) {\n execFileSync(\"git\", [\"add\", file], opts);\n }\n\n try {\n execFileSync(\"git\", [\"commit\", \"-m\", message], opts);\n execFileSync(\n \"git\",\n [...configArgs, \"push\", \"origin\", this.branch],\n opts\n );\n } catch {\n // Nothing to commit or push failed\n }\n }\n\n async cleanup(): Promise<void> {\n if (this.workingDirectory) {\n rmSync(this.workingDirectory, { recursive: true, force: true });\n }\n if (this.tempKeyPath) {\n rmSync(this.tempKeyPath, { force: true });\n rmSync(join(this.tempKeyPath, \"..\"), { recursive: true, force: true });\n }\n }\n\n private buildHttpAuthArgs(): string[] {\n // Returns an array of `http.extraheader=...` values (for use with -c).\n // Mirrors Fastlane's match `GitStorage#setup_auth` which uses\n // `http.extraheader` to inject Basic/Bearer credentials.\n const args: string[] = [];\n if (this.basicAuth) {\n const encoded = Buffer.from(\n `${this.basicAuth.user}:${this.basicAuth.pass}`\n ).toString(\"base64\");\n args.push(`http.extraheader=Authorization: Basic ${encoded}`);\n } else if (this.bearerToken) {\n args.push(`http.extraheader=Authorization: Bearer ${this.bearerToken}`);\n }\n return args;\n }\n\n private buildEnv(): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n GIT_TERMINAL_PROMPT: \"0\",\n };\n const keyPath = this.privateKeyPath ?? this.tempKeyPath;\n if (keyPath) {\n env.GIT_SSH_COMMAND = `ssh -i ${keyPath} -o StrictHostKeyChecking=no -o IdentitiesOnly=yes`;\n }\n return env;\n }\n}\n","import { execFileSync } from \"node:child_process\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class S3Storage implements StorageBackend {\n workingDirectory: string;\n private bucket: string;\n private region: string;\n private prefix: string;\n\n constructor(params: StorageParams) {\n this.bucket = params.s3Bucket ?? \"\";\n this.region = params.s3Region ?? \"us-east-1\";\n this.prefix = params.s3ObjectPrefix ?? \"\";\n this.workingDirectory = \"\";\n }\n\n async download(): Promise<string> {\n this.workingDirectory = mkdtempSync(join(tmpdir(), \"fastnode-match-s3-\"));\n const s3Path = this.prefix ? `s3://${this.bucket}/${this.prefix}` : `s3://${this.bucket}`;\n\n execFileSync(\"aws\", [\"s3\", \"sync\", s3Path, this.workingDirectory, \"--region\", this.region], { stdio: \"pipe\" });\n\n return this.workingDirectory;\n }\n\n async saveChanges(files: string[], _message: string): Promise<void> {\n const s3Path = this.prefix ? `s3://${this.bucket}/${this.prefix}` : `s3://${this.bucket}`;\n\n for (const file of files) {\n const relativePath = file.replace(this.workingDirectory + \"/\", \"\");\n execFileSync(\n \"aws\",\n [\"s3\", \"cp\", file, `${s3Path}/${relativePath}`, \"--region\", this.region],\n { stdio: \"pipe\" }\n );\n }\n }\n\n async cleanup(): Promise<void> {\n if (this.workingDirectory) {\n rmSync(this.workingDirectory, { recursive: true, force: true });\n }\n }\n}\n","import { mkdirSync } from \"node:fs\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class LocalStorage implements StorageBackend {\n workingDirectory: string;\n\n constructor(params: StorageParams) {\n this.workingDirectory = params.localPath ?? \"\";\n }\n\n async download(): Promise<string> {\n mkdirSync(this.workingDirectory, { recursive: true });\n return this.workingDirectory;\n }\n\n async saveChanges(_files: string[], _message: string): Promise<void> {\n // Files are already on disk — nothing to push\n }\n\n async cleanup(): Promise<void> {\n // Don't delete local storage\n }\n}\n","export interface StorageBackend {\n workingDirectory: string;\n download(): Promise<string>;\n saveChanges(files: string[], message: string): Promise<void>;\n cleanup(): Promise<void>;\n}\n\nexport type StorageMode = \"git\" | \"s3\" | \"local\";\n\nexport interface StorageParams {\n mode: StorageMode;\n gitUrl?: string;\n gitBranch?: string;\n /** Path to an SSH private key file. */\n gitPrivateKey?: string;\n /**\n * Raw SSH private key content (alternative to `gitPrivateKey`). Written\n * to a temp file with `0600` perms before `git clone`.\n */\n gitPrivateKeyContent?: string;\n /** HTTP Basic auth credentials. */\n gitBasicAuth?: { user: string; pass: string };\n /** HTTP Bearer token for authorization. */\n gitBearerToken?: string;\n /** Override the commit author name. */\n gitUserName?: string;\n /** Override the commit author email. */\n gitUserEmail?: string;\n /** Disable the default `--depth 1` shallow clone. */\n shallowClone?: boolean;\n s3Bucket?: string;\n s3Region?: string;\n s3ObjectPrefix?: string;\n localPath?: string;\n teamId?: string;\n}\n\nexport async function createStorage(params: StorageParams): Promise<StorageBackend> {\n switch (params.mode) {\n case \"git\": {\n const { GitStorage } = await import(\"./git.js\");\n return new GitStorage(params);\n }\n case \"s3\": {\n const { S3Storage } = await import(\"./s3.js\");\n return new S3Storage(params);\n }\n case \"local\": {\n const { LocalStorage } = await import(\"./local.js\");\n return new LocalStorage(params);\n }\n default:\n throw new Error(`Unknown storage mode: ${params.mode}`);\n }\n}\n","import { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes, createHash } from \"node:crypto\";\nimport { readFile, writeFile, readdir, stat } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\n\nconst V2_PREFIX = \"match_encrypted_v2__\";\nconst V1_PREFIX = \"Salted__\";\nconst PBKDF2_ITERATIONS = 10_000;\nconst PBKDF2_HASH = \"sha256\";\nconst PBKDF2_KEY_LEN = 32 + 12 + 24; // key(32) + iv(12) + authData(24) = 68\n\nconst ENCRYPTABLE_EXTENSIONS = [\".cer\", \".p12\", \".mobileprovision\", \".provisionprofile\", \".pkey\", \".pem\"];\n\n// ── V2: AES-256-GCM with PBKDF2 ───────────────────────────────────────────\n\nexport function encryptV2(data: Buffer, password: string): Buffer {\n const salt = randomBytes(8);\n const derived = pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, PBKDF2_KEY_LEN, PBKDF2_HASH);\n const key = derived.subarray(0, 32);\n const iv = derived.subarray(32, 44);\n const authData = derived.subarray(44, 68);\n\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n cipher.setAAD(authData);\n const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);\n const authTag = cipher.getAuthTag(); // 16 bytes\n\n // Format: prefix + salt(8) + authTag(16) + ciphertext\n const prefix = Buffer.from(V2_PREFIX, \"utf-8\");\n const result = Buffer.concat([prefix, salt, authTag, encrypted]);\n return Buffer.from(result.toString(\"base64\"));\n}\n\nexport function decryptV2(data: Buffer, password: string): Buffer {\n const raw = Buffer.from(data.toString(\"utf-8\"), \"base64\");\n const prefixLen = Buffer.from(V2_PREFIX, \"utf-8\").length;\n\n const salt = raw.subarray(prefixLen, prefixLen + 8);\n const authTag = raw.subarray(prefixLen + 8, prefixLen + 24);\n const ciphertext = raw.subarray(prefixLen + 24);\n\n const derived = pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, PBKDF2_KEY_LEN, PBKDF2_HASH);\n const key = derived.subarray(0, 32);\n const iv = derived.subarray(32, 44);\n const authData = derived.subarray(44, 68);\n\n const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAAD(authData);\n decipher.setAuthTag(authTag);\n return Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n}\n\n// ── V1: AES-256-CBC (legacy, decrypt only) ─────────────────────────────────\n\nfunction evpBytesToKey(\n password: string,\n salt: Buffer,\n keyLen: number,\n ivLen: number,\n hashAlg: string\n): { key: Buffer; iv: Buffer } {\n const target = keyLen + ivLen;\n const result: Buffer[] = [];\n let total = 0;\n let prev = Buffer.alloc(0);\n\n while (total < target) {\n const input = Buffer.concat([prev, Buffer.from(password, \"utf-8\"), salt]);\n prev = createHash(hashAlg).update(input).digest();\n result.push(prev);\n total += prev.length;\n }\n\n const derived = Buffer.concat(result);\n return {\n key: derived.subarray(0, keyLen),\n iv: derived.subarray(keyLen, keyLen + ivLen),\n };\n}\n\nexport function decryptV1(data: Buffer, password: string): Buffer {\n const raw = Buffer.from(data.toString(\"utf-8\"), \"base64\");\n const saltHeader = raw.subarray(0, 8).toString(\"utf-8\");\n\n if (saltHeader !== V1_PREFIX) {\n throw new Error(\"Invalid V1 encrypted data: missing Salted__ header\");\n }\n\n const salt = raw.subarray(8, 16);\n const ciphertext = raw.subarray(16);\n\n // Try MD5 first (original OpenSSL default), then SHA256\n for (const hashAlg of [\"md5\", \"sha256\"]) {\n try {\n const { key, iv } = evpBytesToKey(password, salt, 32, 16, hashAlg);\n const decipher = createDecipheriv(\"aes-256-cbc\", key, iv);\n return Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n } catch {\n continue;\n }\n }\n\n throw new Error(\"Failed to decrypt V1 data with both MD5 and SHA256\");\n}\n\n// ── Auto-detect and decrypt ────────────────────────────────────────────────\n\nexport function decrypt(data: Buffer, password: string): Buffer {\n const str = data.toString(\"utf-8\");\n const decoded = Buffer.from(str, \"base64\").toString(\"utf-8\");\n\n if (decoded.startsWith(V2_PREFIX)) {\n return decryptV2(data, password);\n }\n if (decoded.startsWith(V1_PREFIX)) {\n return decryptV1(data, password);\n }\n // Try V2 first, then V1\n try {\n return decryptV2(data, password);\n } catch {\n return decryptV1(data, password);\n }\n}\n\nexport function encrypt(data: Buffer, password: string): Buffer {\n return encryptV2(data, password);\n}\n\n// ── File-level operations ──────────────────────────────────────────────────\n\nfunction isEncryptable(filePath: string): boolean {\n return ENCRYPTABLE_EXTENSIONS.includes(extname(filePath).toLowerCase());\n}\n\nexport async function decryptFiles(dir: string, password: string): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n await decryptFiles(fullPath, password);\n } else if (isEncryptable(fullPath)) {\n const data = await readFile(fullPath);\n try {\n const decrypted = decrypt(data, password);\n await writeFile(fullPath, decrypted);\n } catch {\n // File may not be encrypted, skip\n }\n }\n }\n}\n\nexport async function encryptFiles(dir: string, password: string): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n await encryptFiles(fullPath, password);\n } else if (isEncryptable(fullPath)) {\n const data = await readFile(fullPath);\n const encrypted = encrypt(data, password);\n await writeFile(fullPath, encrypted);\n }\n }\n}\n","import { join, extname } from \"node:path\";\nimport { readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { CertificateType, ProfileType } from \"../types/index.js\";\nimport type { CertResult } from \"../cert/cert.js\";\nimport type { SighResult } from \"../sigh/index.js\";\nimport { createStorage, type StorageMode } from \"./storage/index.js\";\nimport { decryptFiles, encryptFiles } from \"./encryption.js\";\nexport { encrypt, decrypt, encryptV2, decryptV2, decryptV1, encryptFiles, decryptFiles } from \"./encryption.js\";\n\nexport interface MatchOptions {\n client: AppStoreConnectClient;\n type: \"development\" | \"appstore\" | \"adhoc\" | \"enterprise\";\n appIdentifiers: string[];\n storageMode: StorageMode;\n gitUrl?: string;\n gitBranch?: string;\n /** Path to an SSH private key file. */\n gitPrivateKey?: string;\n /** Raw SSH private key content (alternative to `gitPrivateKey`). */\n gitPrivateKeyContent?: string;\n /** HTTP Basic auth credentials for the git remote. */\n gitBasicAuth?: { user: string; pass: string };\n /** HTTP Bearer token for the git remote. */\n gitBearerToken?: string;\n /** Override the commit author name. */\n gitUserName?: string;\n /** Override the commit author email. */\n gitUserEmail?: string;\n /** Disable the default `--depth 1` shallow clone. */\n shallowClone?: boolean;\n s3Bucket?: string;\n s3Region?: string;\n localPath?: string;\n password?: string;\n readonly?: boolean;\n force?: boolean;\n keychainName?: string;\n keychainPassword?: string;\n teamId?: string;\n platform?: \"ios\" | \"macos\" | \"tvos\" | \"catalyst\";\n}\n\nexport interface MatchResult {\n certificates: CertResult[];\n profiles: SighResult[];\n}\n\nfunction profileTypeForMatch(\n type: MatchOptions[\"type\"],\n platform: MatchOptions[\"platform\"]\n): ProfileType {\n const p = platform ?? \"ios\";\n switch (type) {\n case \"development\":\n if (p === \"macos\") return \"MAC_APP_DEVELOPMENT\";\n if (p === \"tvos\") return \"TVOS_APP_DEVELOPMENT\";\n if (p === \"catalyst\") return \"MAC_CATALYST_APP_DEVELOPMENT\";\n return \"IOS_APP_DEVELOPMENT\";\n case \"adhoc\":\n if (p === \"tvos\") return \"TVOS_APP_ADHOC\";\n return \"IOS_APP_ADHOC\";\n case \"enterprise\":\n if (p === \"macos\") return \"MAC_APP_INHOUSE\";\n if (p === \"tvos\") return \"TVOS_APP_INHOUSE\";\n if (p === \"catalyst\") return \"MAC_CATALYST_APP_INHOUSE\";\n return \"IOS_APP_INHOUSE\";\n default:\n if (p === \"macos\") return \"MAC_APP_STORE\";\n if (p === \"tvos\") return \"TVOS_APP_STORE\";\n if (p === \"catalyst\") return \"MAC_CATALYST_APP_STORE\";\n return \"IOS_APP_STORE\";\n }\n}\n\nfunction certTypeForMatch(\n type: MatchOptions[\"type\"],\n platform: MatchOptions[\"platform\"]\n): CertificateType {\n const p = platform ?? \"ios\";\n if (type === \"development\") {\n return p === \"macos\" ? \"MAC_APP_DEVELOPMENT\" : \"IOS_DEVELOPMENT\";\n }\n return p === \"macos\" ? \"MAC_APP_DISTRIBUTION\" : \"IOS_DISTRIBUTION\";\n}\n\nfunction certSubdir(type: MatchOptions[\"type\"]): string {\n return type === \"development\" ? \"development\" : \"distribution\";\n}\n\nfunction profileSubdir(type: MatchOptions[\"type\"]): string {\n switch (type) {\n case \"development\": return \"development\";\n case \"adhoc\": return \"adhoc\";\n case \"enterprise\": return \"enterprise\";\n default: return \"appstore\";\n }\n}\n\nexport async function syncSigningAssets(\n options: MatchOptions\n): Promise<MatchResult> {\n const password = options.password ?? process.env.MATCH_PASSWORD ?? \"\";\n if (!password) {\n throw new Error(\"Match password is required. Set MATCH_PASSWORD or pass password option.\");\n }\n\n // Initialize storage\n const storage = await createStorage({\n mode: options.storageMode,\n gitUrl: options.gitUrl,\n gitBranch: options.gitBranch,\n gitPrivateKey: options.gitPrivateKey,\n gitPrivateKeyContent: options.gitPrivateKeyContent,\n gitBasicAuth: options.gitBasicAuth,\n gitBearerToken: options.gitBearerToken,\n gitUserName: options.gitUserName,\n gitUserEmail: options.gitUserEmail,\n shallowClone: options.shallowClone,\n s3Bucket: options.s3Bucket,\n s3Region: options.s3Region,\n localPath: options.localPath,\n teamId: options.teamId,\n });\n\n const workDir = await storage.download();\n\n // Decrypt files\n await decryptFiles(workDir, password);\n\n const certificates: CertResult[] = [];\n const profiles: SighResult[] = [];\n const filesToCommit: string[] = [];\n\n const certDir = join(workDir, \"certs\", certSubdir(options.type));\n const profileDir = join(workDir, \"profiles\", profileSubdir(options.type));\n\n for (const appId of options.appIdentifiers) {\n // Check for existing certificate\n let certResult: CertResult | null = null;\n const certFiles = existsSync(certDir) ? await findFilesWithExt(certDir, \".cer\") : [];\n\n if (certFiles.length > 0 && !options.force) {\n // Use existing cert from storage\n const certContent = await readFile(certFiles[0]);\n certResult = {\n certificate: null as any, // Stored cert doesn't have full API object\n privateKey: \"\",\n certificateContent: certContent,\n certPath: certFiles[0],\n };\n } else if (!options.readonly) {\n // Generate new cert\n const { createCertificate } = await import(\"../cert/cert.js\");\n certResult = await createCertificate({\n client: options.client,\n type: certTypeForMatch(options.type, options.platform),\n outputDir: certDir,\n keychainPath: options.keychainName,\n keychainPassword: options.keychainPassword,\n });\n if (certResult.certPath) filesToCommit.push(certResult.certPath);\n if (certResult.p12Path) filesToCommit.push(certResult.p12Path);\n }\n\n if (certResult) certificates.push(certResult);\n\n // Check for existing profile\n const profileFiles = existsSync(profileDir) ? await findFilesWithExt(profileDir, \".mobileprovision\") : [];\n const matchingProfile = profileFiles.find((f) => f.includes(appId));\n\n if (matchingProfile && !options.force) {\n const profileContent = await readFile(matchingProfile);\n profiles.push({\n profile: null as any,\n profileContent,\n uuid: \"\",\n name: \"\",\n filePath: matchingProfile,\n });\n } else if (!options.readonly) {\n // Generate new profile\n const { createProfile } = await import(\"../sigh/index.js\");\n const profileType = profileTypeForMatch(options.type, options.platform);\n const sighResult = await createProfile({\n client: options.client,\n bundleIdentifier: appId,\n profileType,\n outputDir: profileDir,\n skipInstall: false,\n });\n if (sighResult.filePath) filesToCommit.push(sighResult.filePath);\n profiles.push(sighResult);\n }\n }\n\n // Encrypt and save changes\n if (filesToCommit.length > 0 && !options.readonly) {\n await encryptFiles(workDir, password);\n // Mirror Fastlane's match commit message: `[fastlane-match] Updated\n // {type} and profile for {appId}` — adapted for fastnode and multiple\n // app identifiers.\n const appList = options.appIdentifiers.join(\", \");\n const message = `[fastlane-match] Updated ${options.type} and profile for ${appList}`;\n await storage.saveChanges(filesToCommit, message);\n }\n\n await storage.cleanup();\n\n return { certificates, profiles };\n}\n\nasync function findFilesWithExt(dir: string, ext: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true });\n const results: string[] = [];\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (!entry.isDirectory() && extname(entry.name) === ext) {\n results.push(fullPath);\n }\n }\n return results;\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { writeFile, mkdir, unlink } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { CertificateType } from \"../types/index.js\";\nimport { generateCSR } from \"../cert/csr.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport type PushCertKind =\n | \"development\"\n | \"production\"\n | \"website\"\n | \"voip\"\n | \"passbook\";\n\nexport interface PemOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n development?: boolean;\n websitePush?: boolean;\n /** Voice-over-IP push cert (Portal type code `E5D663CMZW`). */\n voipPush?: boolean;\n /** Passbook/Wallet cert (Portal type code `Y3B2F3TYSI`). */\n passbook?: boolean;\n outputDir?: string;\n p12Password?: string;\n activeDaysLimit?: number;\n force?: boolean;\n platform?: \"ios\" | \"macos\";\n generateP12?: boolean;\n savePrivateKey?: boolean;\n}\n\nexport interface PemResult {\n pemPath: string;\n p12Path?: string;\n keyPath?: string;\n expiresAt: Date;\n}\n\n/**\n * Resolve the push certificate descriptor for the given options. Returns:\n * - `kind`: semantic certificate family (used in filename prefix)\n * - `portalTypeCode`: Apple Developer Portal type code (matches Fastlane's\n * `Spaceship::Portal::Certificate` codes in certificate.rb)\n * - `ascCertificateType`: best-fit ASC `CertificateType` for the ASC API\n * fallback path (note: push certs are really a Portal concept; the ASC\n * cert types here only approximate the platform distinction).\n */\nexport function getPushCertificateType(options: {\n development?: boolean;\n websitePush?: boolean;\n voipPush?: boolean;\n passbook?: boolean;\n platform?: \"ios\" | \"macos\";\n}): {\n kind: PushCertKind;\n portalTypeCode: string;\n ascCertificateType: CertificateType;\n} {\n if (options.passbook) {\n return {\n kind: \"passbook\",\n portalTypeCode: \"Y3B2F3TYSI\",\n ascCertificateType: \"IOS_DISTRIBUTION\",\n };\n }\n if (options.voipPush) {\n return {\n kind: \"voip\",\n portalTypeCode: \"E5D663CMZW\",\n ascCertificateType: \"IOS_DISTRIBUTION\",\n };\n }\n if (options.websitePush) {\n return {\n kind: \"website\",\n portalTypeCode: \"3T2ZP62QW8\",\n ascCertificateType: \"IOS_DISTRIBUTION\",\n };\n }\n const platform = options.platform ?? \"ios\";\n if (platform === \"macos\") {\n return options.development\n ? {\n kind: \"development\",\n portalTypeCode: \"HQ4KP3I34R\", // MacDevelopmentPush\n ascCertificateType: \"MAC_APP_DEVELOPMENT\",\n }\n : {\n kind: \"production\",\n portalTypeCode: \"CDZ7EMXIZ1\", // MacProductionPush\n ascCertificateType: \"MAC_APP_DISTRIBUTION\",\n };\n }\n return options.development\n ? {\n kind: \"development\",\n portalTypeCode: \"JKG5JZ54H7\", // DevelopmentPush\n ascCertificateType: \"IOS_DEVELOPMENT\",\n }\n : {\n kind: \"production\",\n portalTypeCode: \"UPV3DW712I\", // ProductionPush\n ascCertificateType: \"IOS_DISTRIBUTION\",\n };\n}\n\nexport async function createPushCertificate(\n options: PemOptions\n): Promise<PemResult> {\n const outputDir = options.outputDir ?? process.cwd();\n await mkdir(outputDir, { recursive: true });\n\n const descriptor = getPushCertificateType(options);\n const platform = options.platform ?? \"ios\";\n const activeDaysLimit = options.activeDaysLimit ?? 30;\n const generateP12 = options.generateP12 !== false;\n const savePrivateKey = options.savePrivateKey !== false;\n // Mirror Fastlane pem's filename convention (manager.rb line 68):\n // `{type}_{app_identifier}_{platform}`.\n const filenameBase = `${descriptor.kind}_${options.bundleIdentifier}_${platform}`;\n\n // Check for existing valid push certs\n if (!options.force) {\n const existing = await options.client.certificates.list({\n filter: { certificateType: descriptor.ascCertificateType },\n });\n\n const now = new Date();\n const validCert = existing.find((c) => {\n const expires = new Date(c.attributes.expirationDate);\n const daysLeft = (expires.getTime() - now.getTime()) / (1000 * 60 * 60 * 24);\n return daysLeft > activeDaysLimit && c.attributes.displayName?.includes(options.bundleIdentifier);\n });\n\n if (validCert) {\n // Cert exists and is still valid — but we can't re-download the private key\n // Just return info about the existing cert\n return {\n pemPath: join(outputDir, `${filenameBase}.pem`),\n expiresAt: new Date(validCert.attributes.expirationDate),\n };\n }\n }\n\n // Generate new CSR and create cert\n const { csr, privateKey } = await generateCSR();\n\n const cert = await options.client.certificates.create({\n certificateType: descriptor.ascCertificateType,\n csrContent: csr,\n });\n\n const certDer = Buffer.from(cert.attributes.certificateContent, \"base64\");\n\n // Convert DER cert to PEM\n const certPem =\n \"-----BEGIN CERTIFICATE-----\\n\" +\n certDer.toString(\"base64\").match(/.{1,64}/g)!.join(\"\\n\") +\n \"\\n-----END CERTIFICATE-----\";\n\n // Write combined PEM (cert + key)\n const pemPath = join(outputDir, `${filenameBase}.pem`);\n await writeFile(pemPath, certPem + \"\\n\" + privateKey);\n\n const result: PemResult = {\n pemPath,\n expiresAt: new Date(cert.attributes.expirationDate),\n };\n\n // Save private key\n if (savePrivateKey) {\n const keyPath = join(outputDir, `${filenameBase}.pkey`);\n await writeFile(keyPath, privateKey);\n result.keyPath = keyPath;\n }\n\n // Generate PKCS#12\n if (generateP12) {\n const p12Path = join(outputDir, `${filenameBase}.p12`);\n const p12Password = options.p12Password ?? \"\";\n try {\n const { execSync } = await import(\"node:child_process\");\n // Write private key to temp file\n const keyTmpPath = join(outputDir, `${filenameBase}.tmp.key`);\n await writeFile(keyTmpPath, privateKey);\n execSync(\n `openssl pkcs12 -export -inkey \"${keyTmpPath}\" -in \"${pemPath}\" -out \"${p12Path}\" -passout \"pass:${p12Password}\"`,\n { stdio: \"pipe\" }\n );\n await unlink(keyTmpPath).catch(() => {});\n result.p12Path = p12Path;\n } catch {\n // openssl may not be available — p12 generation is optional\n }\n }\n\n return result;\n}\n\nexport async function renewPushCertificate(\n options: PemOptions\n): Promise<PemResult> {\n return createPushCertificate({ ...options, force: true });\n}\n\nexport async function checkExpiration(options: {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n development?: boolean;\n activeDaysLimit?: number;\n}): Promise<{ valid: boolean; daysLeft: number; expiresAt: Date | null }> {\n const certType: CertificateType = options.development ? \"IOS_DEVELOPMENT\" : \"IOS_DISTRIBUTION\";\n const certs = await options.client.certificates.list({\n filter: { certificateType: certType },\n });\n\n const now = new Date();\n const limit = options.activeDaysLimit ?? 30;\n\n for (const cert of certs) {\n if (cert.attributes.displayName?.includes(options.bundleIdentifier)) {\n const expires = new Date(cert.attributes.expirationDate);\n const daysLeft = (expires.getTime() - now.getTime()) / (1000 * 60 * 60 * 24);\n return { valid: daysLeft > limit, daysLeft: Math.floor(daysLeft), expiresAt: expires };\n }\n }\n\n return { valid: false, daysLeft: 0, expiresAt: null };\n}\n","import { registerAction } from \"../index.js\";\nimport type { AppStoreConnectClient } from \"../../client/index.js\";\nimport type { CertificateType, ProfileType } from \"../../types/index.js\";\n\nregisterAction({\n name: \"cert\",\n aliases: [\"get_certificates\", \"create_certificate\"],\n description: \"Create or fetch code signing certificates\",\n async run(params, ctx) {\n const { createCertificate } = await import(\"../../cert/cert.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"cert: client is required (pass as param or set in context)\");\n const result = await createCertificate({\n client,\n type: params.type as CertificateType | undefined,\n development: params.development as boolean | undefined,\n force: params.force as boolean | undefined,\n outputDir: params.output_path as string | undefined,\n keychainPath: params.keychain_path as string | undefined,\n keychainPassword: params.keychain_password as string | undefined,\n platform: params.platform as \"ios\" | \"macos\" | undefined,\n });\n ctx.set(\"CER_CERTIFICATE_ID\", result.certificate.id);\n ctx.set(\"CER_FILE_PATH\", result.certPath);\n return result;\n },\n});\n\nregisterAction({\n name: \"sigh\",\n aliases: [\"get_provisioning_profile\", \"get_profiles\"],\n description: \"Create or fetch provisioning profiles\",\n async run(params, ctx) {\n const { createProfile } = await import(\"../../sigh/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"sigh: client is required\");\n const result = await createProfile({\n client,\n bundleIdentifier: (params.app_identifier ?? params.bundle_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n profileType: params.profile_type as ProfileType | undefined,\n profileName: params.provisioning_name as string | undefined,\n force: params.force as boolean | undefined,\n outputDir: params.output_path as string | undefined,\n platform: params.platform as any,\n development: params.development as boolean | undefined,\n adhoc: params.adhoc as boolean | undefined,\n });\n ctx.set(\"SIGH_PROFILE_PATH\", result.filePath);\n ctx.set(\"SIGH_PROFILE_TYPE\", result.profile.attributes.profileType);\n ctx.set(\"SIGH_UUID\", result.uuid);\n ctx.set(\"SIGH_NAME\", result.name);\n return result;\n },\n});\n\nregisterAction({\n name: \"match\",\n aliases: [\"sync_code_signing\"],\n description: \"Sync certificates and profiles using match\",\n async run(params, ctx) {\n const { syncSigningAssets } = await import(\"../../match/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"match: client is required\");\n return syncSigningAssets({\n client,\n type: (params.type ?? \"appstore\") as any,\n appIdentifiers: (params.app_identifier ? [params.app_identifier] : params.app_identifiers ?? []) as string[],\n storageMode: (params.storage_mode ?? \"git\") as any,\n gitUrl: params.git_url as string | undefined,\n gitBranch: params.git_branch as string | undefined,\n password: params.password as string | undefined,\n readonly: params.readonly as boolean | undefined,\n force: params.force as boolean | undefined,\n platform: params.platform as any,\n });\n },\n});\n\nregisterAction({\n name: \"pem\",\n aliases: [\"get_push_certificate\"],\n description: \"Create push notification certificates\",\n async run(params, ctx) {\n const { createPushCertificate } = await import(\"../../pem/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"pem: client is required\");\n return createPushCertificate({\n client,\n bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n development: params.development as boolean | undefined,\n outputDir: params.output_path as string | undefined,\n p12Password: params.p12_password as string | undefined,\n force: params.force as boolean | undefined,\n });\n },\n});\n","export function requireMacOS(feature: string): void {\n if (process.platform !== \"darwin\") {\n throw new Error(\n `${feature} requires macOS. This operation uses Xcode command-line tools ` +\n `which are not available on ${process.platform}.`\n );\n }\n}\n\nexport function isMacOS(): boolean {\n return process.platform === \"darwin\";\n}\n","import { readdir } from \"node:fs/promises\";\nimport { join, resolve, basename } from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface DetectedValues {\n workspace: string | null;\n project: string | null;\n scheme: string;\n configuration: string;\n schemes: string[];\n configurations: string[];\n targets: string[];\n}\n\nexport interface XcodeBuildListOutput {\n project?: {\n name: string;\n schemes: string[];\n configurations: string[];\n targets: string[];\n };\n workspace?: {\n name: string;\n schemes: string[];\n };\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\n/**\n * Find the first file in `dir` matching the given extension.\n */\nasync function findFirst(dir: string, ext: string): Promise<string | null> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name.endsWith(ext) && !entry.name.startsWith(\".\")) {\n return join(dir, entry.name);\n }\n }\n return null;\n}\n\n/**\n * Run `xcodebuild -list -json` and return parsed JSON.\n */\nasync function xcodebuildList(args: string[]): Promise<XcodeBuildListOutput> {\n return new Promise<XcodeBuildListOutput>((res, rej) => {\n const proc = spawn(\"xcodebuild\", [\"-list\", \"-json\", ...args], {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const chunks: Buffer[] = [];\n const errChunks: Buffer[] = [];\n proc.stdout.on(\"data\", (d: Buffer) => chunks.push(d));\n proc.stderr.on(\"data\", (d: Buffer) => errChunks.push(d));\n proc.on(\"error\", rej);\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n const stderr = Buffer.concat(errChunks).toString(\"utf-8\").trim();\n rej(new Error(\"xcodebuild -list failed (exit \" + code + \"):\\n\" + stderr));\n return;\n }\n const raw = Buffer.concat(chunks).toString(\"utf-8\").trim();\n try {\n res(JSON.parse(raw) as XcodeBuildListOutput);\n } catch {\n rej(new Error(\"Failed to parse xcodebuild -list JSON:\\n\" + raw));\n }\n });\n });\n}\n\n// ── Public API ─────────────────────────────────────────────────────────────\n\n/**\n * Auto-detect the Xcode workspace/project, scheme, and configuration.\n *\n * Workspace/project resolution:\n * 1. Explicit option\n * 2. First `.xcworkspace` in searchDir\n * 3. First `.xcodeproj` in searchDir\n *\n * Scheme resolution:\n * 1. Explicit option\n * 2. Sole scheme -> auto-select\n * 3. Scheme matching workspace/project name\n * 4. Error\n */\nexport async function detectValues(options: {\n workspace?: string;\n project?: string;\n scheme?: string;\n configuration?: string;\n searchDir?: string;\n}): Promise<DetectedValues> {\n const searchDir = resolve(options.searchDir ?? process.cwd());\n\n // ── Resolve workspace / project ───────────────────────────────────────\n\n let workspace = options.workspace ?? null;\n let project = options.project ?? null;\n\n if (!workspace && !project) {\n workspace = await findFirst(searchDir, \".xcworkspace\");\n }\n if (!workspace && !project) {\n project = await findFirst(searchDir, \".xcodeproj\");\n }\n if (!workspace && !project) {\n throw new Error(\n \"Could not find .xcworkspace or .xcodeproj in \" + searchDir +\n \". Pass workspace or project explicitly.\",\n );\n }\n\n // ── Run xcodebuild -list ──────────────────────────────────────────────\n\n const listArgs: string[] = [];\n if (workspace) listArgs.push(\"-workspace\", workspace);\n else if (project) listArgs.push(\"-project\", project);\n\n const listOutput = await xcodebuildList(listArgs);\n\n const schemes: string[] =\n listOutput.workspace?.schemes ?? listOutput.project?.schemes ?? [];\n const configurations: string[] =\n listOutput.project?.configurations ?? [];\n const targets: string[] = listOutput.project?.targets ?? [];\n\n // ── Resolve scheme ────────────────────────────────────────────────────\n\n let scheme = options.scheme ?? null;\n\n if (!scheme) {\n if (schemes.length === 1) {\n scheme = schemes[0];\n } else if (schemes.length > 1) {\n const refName =\n (workspace ? basename(workspace, \".xcworkspace\") : null) ??\n (project ? basename(project, \".xcodeproj\") : null);\n if (refName) {\n const m = schemes.find((s) => s === refName);\n if (m) scheme = m;\n }\n if (!scheme) {\n throw new Error(\n \"Multiple schemes found: \" + schemes.join(\", \") +\n \". Pass scheme explicitly.\",\n );\n }\n } else {\n throw new Error(\n \"No schemes found in the Xcode project. Make sure the scheme is shared.\",\n );\n }\n }\n\n const configuration = options.configuration ?? \"Release\";\n\n return {\n workspace,\n project,\n scheme,\n configuration,\n schemes,\n configurations,\n targets,\n };\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport plist from \"plist\";\nimport type { ExportMethod } from \"../types/index.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ExportOptionsPlistConfig {\n /** The export method: app-store, ad-hoc, development, enterprise, etc. */\n exportMethod: ExportMethod;\n /** Apple Developer team ID */\n teamId?: string;\n /**\n * Map of bundle identifier to provisioning profile name.\n * e.g. { \"com.example.app\": \"MyApp Distribution\" }\n */\n provisioningProfiles?: Record<string, string>;\n /** Whether to include bitcode (deprecated in Xcode 14+, defaults to false) */\n includeBitcode?: boolean;\n /** Whether to include symbols in the export (defaults to true) */\n includeSymbols?: boolean;\n /** Code signing identity, e.g. \"Apple Distribution: Company (TEAM_ID)\" */\n signingCertificate?: string;\n /** Signing style: \"manual\" or \"automatic\" */\n signingStyle?: \"manual\" | \"automatic\";\n /** Destination for export: \"export\" or \"upload\" */\n destination?: \"export\" | \"upload\";\n /** Whether to generate an app thinning report */\n thinning?: string;\n /** Catalyst platform: \"macos\" or \"ios\" */\n catalystPlatform?: string;\n /** Additional arbitrary keys to merge into the plist */\n additionalOptions?: Record<string, unknown>;\n}\n\n// ── Signing Style Inference ────────────────────────────────────────────────\n\nfunction inferSigningStyle(\n config: ExportOptionsPlistConfig,\n): \"manual\" | \"automatic\" {\n if (config.signingStyle) return config.signingStyle;\n // If provisioning profiles are specified, use manual signing\n if (\n config.provisioningProfiles &&\n Object.keys(config.provisioningProfiles).length > 0\n ) {\n return \"manual\";\n }\n return \"automatic\";\n}\n\n// ── Public API ─────────────────────────────────────────────────────────────\n\n/**\n * Build the exportOptions plist dictionary. Returns a plain object that can be\n * serialized to XML plist via the `plist` package.\n */\nexport function buildExportOptions(\n config: ExportOptionsPlistConfig,\n): Record<string, unknown> {\n const opts: Record<string, unknown> = {\n method: config.exportMethod,\n };\n\n const signingStyle = inferSigningStyle(config);\n opts.signingStyle = signingStyle;\n\n if (config.teamId) {\n opts.teamID = config.teamId;\n }\n\n if (signingStyle === \"manual\" && config.provisioningProfiles) {\n opts.provisioningProfiles = config.provisioningProfiles;\n }\n\n if (config.signingCertificate) {\n opts.signingCertificate = config.signingCertificate;\n }\n\n // Bitcode (default false for modern Xcode)\n opts.uploadBitcode = config.includeBitcode ?? false;\n opts.compileBitcode = config.includeBitcode ?? false;\n\n // Symbols (default true)\n opts.uploadSymbols = config.includeSymbols ?? true;\n\n if (config.destination) {\n opts.destination = config.destination;\n }\n\n if (config.thinning) {\n opts.thinning = config.thinning;\n }\n\n if (config.catalystPlatform) {\n // Apple expects \"macos\" or \"ios\"\n opts.distributionBundleIdentifier = undefined;\n }\n\n // Merge additional options last so they can override anything\n if (config.additionalOptions) {\n Object.assign(opts, config.additionalOptions);\n }\n\n return opts;\n}\n\n/**\n * Generate an exportOptions plist XML string from the given config.\n */\nexport function generateExportOptionsPlistXml(\n config: ExportOptionsPlistConfig,\n): string {\n const opts = buildExportOptions(config);\n return plist.build(opts as plist.PlistObject);\n}\n\n/**\n * Write an exportOptions.plist file to disk and return its path.\n *\n * @param dir - Directory to write the file into\n * @param config - Export options configuration\n * @returns The absolute path to the written plist file\n */\nexport async function writeExportOptionsPlist(\n dir: string,\n config: ExportOptionsPlistConfig,\n): Promise<string> {\n const xml = generateExportOptionsPlistXml(config);\n const plistPath = join(dir, \"exportOptions.plist\");\n await writeFile(plistPath, xml, \"utf-8\");\n return plistPath;\n}\n","import { spawn } from \"node:child_process\";\nimport { mkdir, readdir, rm, stat } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport { detectValues } from \"./detect.js\";\nimport { writeExportOptionsPlist } from \"./export-options.js\";\nimport type { ExportMethod } from \"../types/index.js\";\n\n// ── Re-exports ─────────────────────────────────────────────────────────────\n\nexport { detectValues } from \"./detect.js\";\nexport type { DetectedValues, XcodeBuildListOutput } from \"./detect.js\";\nexport {\n buildExportOptions,\n generateExportOptionsPlistXml,\n writeExportOptionsPlist,\n} from \"./export-options.js\";\nexport type { ExportOptionsPlistConfig } from \"./export-options.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface GymOptions {\n scheme: string;\n workspace?: string;\n project?: string;\n configuration?: string;\n exportMethod: ExportMethod;\n teamId?: string;\n provisioningProfiles?: Record<string, string>;\n codeSignIdentity?: string;\n outputDirectory?: string;\n outputName?: string;\n clean?: boolean;\n archivePath?: string;\n derivedDataPath?: string;\n xcargs?: string;\n buildPath?: string;\n includeBitcode?: boolean;\n includeSymbols?: boolean;\n exportOptions?: Record<string, unknown>;\n sdk?: string;\n destination?: string;\n catalystPlatform?: string;\n disableXcpretty?: boolean;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface GymResult {\n success: boolean;\n exitCode: number;\n ipaPath: string | null;\n pkgPath: string | null;\n dsymPath: string | null;\n archivePath: string;\n output: string;\n}\n\n// ── Internal helpers ───────────────────────────────────────────────────────\n\n/**\n * Spawn xcodebuild with the given args, streaming stdout/stderr to the\n * optional `onOutput` callback and collecting full output.\n */\nfunction runXcodebuild(\n args: string[],\n onOutput?: (chunk: string) => void,\n): Promise<{ exitCode: number; output: string }> {\n return new Promise((res, rej) => {\n const proc = spawn(\"xcodebuild\", args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const chunks: string[] = [];\n\n const handleData = (data: Buffer) => {\n const text = data.toString(\"utf-8\");\n chunks.push(text);\n if (onOutput) onOutput(text);\n };\n\n proc.stdout.on(\"data\", handleData);\n proc.stderr.on(\"data\", handleData);\n proc.on(\"error\", rej);\n proc.on(\"close\", (code) => {\n res({ exitCode: code ?? 1, output: chunks.join(\"\") });\n });\n });\n}\n\n/**\n * Recursively find the first file matching `ext` inside `dir`.\n */\nasync function findFileWithExtension(\n dir: string,\n ext: string,\n): Promise<string | null> {\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return null;\n }\n for (const entry of entries) {\n const full = join(dir, entry.name);\n if (entry.name.endsWith(ext) && !entry.isDirectory()) {\n return full;\n }\n if (entry.isDirectory()) {\n const found = await findFileWithExtension(full, ext);\n if (found) return found;\n }\n }\n return null;\n}\n\n/**\n * Compress a directory to a .tar.gz file and return its path.\n */\nasync function compressDsyms(\n dsymDir: string,\n outputPath: string,\n): Promise<string> {\n return new Promise((res, rej) => {\n const proc = spawn(\"tar\", [\"-czf\", outputPath, \"-C\", dsymDir, \".\"], {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n proc.on(\"error\", rej);\n proc.on(\"close\", (code) => {\n if (code !== 0) rej(new Error(\"tar failed with exit code \" + code));\n else res(outputPath);\n });\n });\n}\n\n// ── Main entry point ───────────────────────────────────────────────────────\n\n/**\n * Build an iOS/macOS app using xcodebuild archive + exportArchive.\n * This is the TypeScript equivalent of Fastlane's `gym` (alias `build_app`).\n *\n * Steps:\n * 1. requireMacOS(\"gym\")\n * 2. Detect values (workspace/project/scheme/config)\n * 3. Clean if requested\n * 4. Archive via `xcodebuild archive`\n * 5. Generate exportOptionsPlist\n * 6. Export via `xcodebuild -exportArchive`\n * 7. Find IPA/PKG, compress dSYMs\n * 8. Return GymResult\n */\nexport async function buildApp(options: GymOptions): Promise<GymResult> {\n requireMacOS(\"gym\");\n\n // ── 1. Detect values ──────────────────────────────────────────────────\n\n const detected = await detectValues({\n workspace: options.workspace,\n project: options.project,\n scheme: options.scheme,\n configuration: options.configuration,\n });\n\n const { workspace, project, scheme, configuration } = detected;\n\n // ── 2. Prepare paths ─────────────────────────────────────────────────\n\n const outputDir = resolve(\n options.outputDirectory ?? join(process.cwd(), \"output\"),\n );\n await mkdir(outputDir, { recursive: true });\n\n const archiveName = options.outputName ?? scheme;\n const archivePath =\n options.archivePath ?? join(outputDir, archiveName + \".xcarchive\");\n const exportPath = join(outputDir, \"export\");\n await mkdir(exportPath, { recursive: true });\n\n // Temp directory for the export options plist\n const tmpDir = join(tmpdir(), \"fastnode-gym-\" + randomUUID());\n await mkdir(tmpDir, { recursive: true });\n\n const fullOutput: string[] = [];\n const onOutput = (chunk: string) => {\n fullOutput.push(chunk);\n if (options.onOutput) options.onOutput(chunk);\n };\n\n try {\n // ── 3. Clean if requested ─────────────────────────────────────────\n\n if (options.clean) {\n const cleanArgs = [\"clean\"];\n if (workspace) cleanArgs.push(\"-workspace\", workspace);\n else if (project) cleanArgs.push(\"-project\", project);\n cleanArgs.push(\"-scheme\", scheme, \"-configuration\", configuration);\n if (options.xcargs) cleanArgs.push(...options.xcargs.split(/\\s+/));\n\n const cleanResult = await runXcodebuild(cleanArgs, onOutput);\n if (cleanResult.exitCode !== 0) {\n return {\n success: false,\n exitCode: cleanResult.exitCode,\n ipaPath: null,\n pkgPath: null,\n dsymPath: null,\n archivePath,\n output: fullOutput.join(\"\"),\n };\n }\n }\n\n // ── 4. Archive ────────────────────────────────────────────────────\n\n const archiveArgs: string[] = [\"archive\"];\n\n if (workspace) archiveArgs.push(\"-workspace\", workspace);\n else if (project) archiveArgs.push(\"-project\", project);\n\n archiveArgs.push(\"-scheme\", scheme);\n archiveArgs.push(\"-archivePath\", archivePath);\n archiveArgs.push(\"-configuration\", configuration);\n\n if (options.sdk) {\n archiveArgs.push(\"-sdk\", options.sdk);\n }\n if (options.destination) {\n archiveArgs.push(\"-destination\", options.destination);\n }\n if (options.derivedDataPath) {\n archiveArgs.push(\"-derivedDataPath\", options.derivedDataPath);\n }\n if (options.xcargs) {\n archiveArgs.push(...options.xcargs.split(/\\s+/));\n }\n\n const archiveResult = await runXcodebuild(archiveArgs, onOutput);\n if (archiveResult.exitCode !== 0) {\n return {\n success: false,\n exitCode: archiveResult.exitCode,\n ipaPath: null,\n pkgPath: null,\n dsymPath: null,\n archivePath,\n output: fullOutput.join(\"\"),\n };\n }\n\n // ── 5. Generate exportOptionsPlist ────────────────────────────────\n\n const exportOptionsPlistPath = await writeExportOptionsPlist(tmpDir, {\n exportMethod: options.exportMethod,\n teamId: options.teamId,\n provisioningProfiles: options.provisioningProfiles,\n signingCertificate: options.codeSignIdentity,\n includeBitcode: options.includeBitcode,\n includeSymbols: options.includeSymbols,\n additionalOptions: options.exportOptions,\n });\n\n // ── 6. Export archive ─────────────────────────────────────────────\n\n const exportArgs: string[] = [\n \"-exportArchive\",\n \"-archivePath\",\n archivePath,\n \"-exportOptionsPlist\",\n exportOptionsPlistPath,\n \"-exportPath\",\n exportPath,\n ];\n\n if (options.xcargs) {\n exportArgs.push(...options.xcargs.split(/\\s+/));\n }\n\n const exportResult = await runXcodebuild(exportArgs, onOutput);\n if (exportResult.exitCode !== 0) {\n return {\n success: false,\n exitCode: exportResult.exitCode,\n ipaPath: null,\n pkgPath: null,\n dsymPath: null,\n archivePath,\n output: fullOutput.join(\"\"),\n };\n }\n\n // ── 7. Find outputs ───────────────────────────────────────────────\n\n // Find IPA\n let ipaPath = await findFileWithExtension(exportPath, \".ipa\");\n\n // Find PKG (macOS installer)\n let pkgPath = await findFileWithExtension(exportPath, \".pkg\");\n\n // Compress dSYMs\n let dsymPath: string | null = null;\n const dsymsDir = join(archivePath, \"dSYMs\");\n try {\n const dsymStat = await stat(dsymsDir);\n if (dsymStat.isDirectory()) {\n const dsymEntries = await readdir(dsymsDir);\n if (dsymEntries.length > 0) {\n dsymPath = join(outputDir, archiveName + \".app.dSYM.zip\");\n await compressDsyms(dsymsDir, dsymPath);\n }\n }\n } catch {\n // No dSYMs directory — that's OK\n }\n\n return {\n success: true,\n exitCode: 0,\n ipaPath,\n pkgPath,\n dsymPath,\n archivePath,\n output: fullOutput.join(\"\"),\n };\n } finally {\n // Clean up temp directory\n await rm(tmpDir, { recursive: true, force: true }).catch(() => {});\n }\n}\n","import { registerAction } from \"../index.js\";\nimport type { ExportMethod } from \"../../types/index.js\";\n\nregisterAction({\n name: \"build_app\",\n aliases: [\"gym\", \"build_ios_app\", \"build_mac_app\"],\n description: \"Build the iOS/macOS app using xcodebuild\",\n async run(params, ctx) {\n const { buildApp } = await import(\"../../gym/index.js\");\n const result = await buildApp({\n scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string,\n workspace: params.workspace as string | undefined,\n project: params.project as string | undefined,\n configuration: params.configuration as string | undefined,\n exportMethod: (params.export_method ?? \"app-store\") as ExportMethod,\n teamId: params.team_id as string | undefined,\n provisioningProfiles: params.export_options && typeof params.export_options === \"object\"\n ? (params.export_options as Record<string, unknown>).provisioningProfiles as Record<string, string> | undefined\n : undefined,\n codeSignIdentity: params.codesigning_identity as string | undefined,\n outputDirectory: params.output_directory as string | undefined,\n outputName: params.output_name as string | undefined,\n clean: params.clean as boolean | undefined,\n xcargs: params.xcargs as string | undefined,\n sdk: params.sdk as string | undefined,\n destination: params.destination as string | undefined,\n includeBitcode: params.include_bitcode as boolean | undefined,\n includeSymbols: params.include_symbols as boolean | undefined,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n ctx.set(\"IPA_OUTPUT_PATH\", result.ipaPath);\n ctx.set(\"PKG_OUTPUT_PATH\", result.pkgPath);\n ctx.set(\"DSYM_OUTPUT_PATH\", result.dsymPath);\n ctx.set(\"XCODEBUILD_ARCHIVE\", result.archivePath);\n return result;\n },\n});\n\nregisterAction({\n name: \"clean_build_artifacts\",\n description: \"Remove build artifacts (IPA, dSYM, etc.)\",\n async run(params, ctx) {\n const { rm } = await import(\"node:fs/promises\");\n const paths = [\n ctx.get<string>(\"IPA_OUTPUT_PATH\"),\n ctx.get<string>(\"PKG_OUTPUT_PATH\"),\n ctx.get<string>(\"DSYM_OUTPUT_PATH\"),\n ].filter(Boolean) as string[];\n for (const p of paths) {\n await rm(p, { force: true }).catch(() => {});\n }\n return { cleaned: paths };\n },\n});\n","/**\n * SRP (Secure Remote Password) implementation\n * 1:1 port of the fastlane-sirp Ruby gem\n * Used for Apple ID authentication\n */\n\nimport { createHash, randomBytes, pbkdf2Sync } from \"node:crypto\";\n\n// ── RFC 5054 SRP Group Parameters ──────────────────────────────────────────\n\n// Copied exactly from fastlane-sirp parameters.rb (2048-bit group)\nconst N_2048 = BigInt(\n \"0x\" +\n \"AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050\" +\n \"A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50\" +\n \"E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B8\" +\n \"55F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773B\" +\n \"CA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748\" +\n \"544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6\" +\n \"AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB\" +\n \"694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73\"\n);\nconst g_2048 = 2n;\n\n// ── Utility Functions ──────────────────────────────────────────────────────\n\nfunction numToHex(num: bigint): string {\n let hex = num.toString(16);\n if (hex.length % 2 !== 0) hex = \"0\" + hex;\n return hex.toLowerCase();\n}\n\nfunction hexToBytes(hex: string): Buffer {\n return Buffer.from(hex, \"hex\");\n}\n\nfunction shaHex(h: string, algorithm: string): string {\n return createHash(algorithm).update(hexToBytes(h)).digest(\"hex\");\n}\n\nfunction shaStr(s: string, algorithm: string): string {\n return createHash(algorithm).update(s).digest(\"hex\");\n}\n\nfunction modExp(base: bigint, exp: bigint, mod: bigint): bigint {\n if (mod === 1n) return 0n;\n let result = 1n;\n base = base % mod;\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod;\n }\n exp = exp / 2n;\n base = (base * base) % mod;\n }\n return result;\n}\n\nfunction H(algorithm: string, n: bigint, ...args: (bigint | string | undefined)[]): bigint {\n const nHex = numToHex(n);\n // Must match Ruby: nlen = 2 * ((('%x' % [n]).length * 4 + 7) >> 3)\n // Use floor division (>>3), NOT ceiling\n const nlen = 2 * (((nHex.length * 4 + 7) >> 3));\n\n let hashin = \"\";\n for (const s of args) {\n if (s === undefined) continue;\n const shex = typeof s === \"string\" ? s : numToHex(s);\n if (shex.length > nlen) {\n throw new Error(\"Bit width does not match - client uses different prime\");\n }\n hashin += \"0\".repeat(nlen - shex.length) + shex;\n }\n\n const hashed = shaHex(hashin, algorithm);\n return BigInt(\"0x\" + hashed) % n;\n}\n\n// ── SRP Client ─────────────────────────────────────────────────────────────\n\nexport class SRPClient {\n private N: bigint;\n private g: bigint;\n private hashAlg: string;\n private k: bigint;\n private a: bigint;\n A: string;\n private S: string | null = null;\n private K: string | null = null;\n M: string | null = null;\n H_AMK: string | null = null;\n\n constructor(group: number = 2048) {\n if (group !== 2048) throw new Error(\"Only 2048-bit group is supported\");\n this.N = N_2048;\n this.g = g_2048;\n this.hashAlg = \"sha256\";\n this.k = H(this.hashAlg, this.N, this.N, this.g);\n // Generate random 'a'\n this.a = BigInt(\"0x\" + randomBytes(256).toString(\"hex\"));\n // Compute A = g^a mod N\n this.A = numToHex(modExp(this.g, this.a, this.N));\n }\n\n startAuthentication(): string {\n return this.A;\n }\n\n processChallenge(\n username: string,\n password: string, // hex-encoded encrypted password\n xsalt: string, // hex\n xbb: string, // hex\n isPasswordEncrypted: boolean = false\n ): string | false {\n const bb = BigInt(\"0x\" + xbb);\n\n // SRP-6a safety check\n if (bb % this.N === 0n) return false;\n\n let x: bigint;\n if (isPasswordEncrypted) {\n x = this.calcXHex(password, xsalt);\n } else {\n x = this.calcX(username, password, xsalt);\n }\n\n const u = H(this.hashAlg, this.N, this.A, xbb);\n if (u === 0n) return false;\n\n // S = (B - k * g^x) ^ (a + u*x) mod N\n const gx = modExp(this.g, x, this.N);\n let base = (bb - this.k * gx) % this.N;\n if (base < 0n) base += this.N;\n const exp = this.a + x * u;\n this.S = numToHex(modExp(base, exp, this.N));\n this.K = shaHex(this.S, this.hashAlg);\n\n // M = H(H(N) xor H(g), H(I), s, A, B, K)\n const hxor = H(this.hashAlg, this.N, this.N) ^ H(this.hashAlg, this.N, this.g);\n const buf =\n numToHex(hxor) +\n shaStr(username, this.hashAlg) +\n xsalt +\n this.A +\n xbb +\n this.K;\n const bytes = hexToBytes(buf);\n this.M = createHash(this.hashAlg).update(bytes).digest(\"hex\");\n\n // H_AMK = H(A, M, K)\n const amkBytes = hexToBytes(this.A + this.M + this.K);\n this.H_AMK = numToHex(\n BigInt(\"0x\" + createHash(this.hashAlg).update(amkBytes).digest(\"hex\"))\n );\n\n return this.M;\n }\n\n private calcX(username: string, password: string, xsalt: string): bigint {\n const spad = xsalt.length % 2 !== 0 ? \"0\" : \"\";\n const inner = shaStr(`${username}:${password}`, this.hashAlg);\n return BigInt(\"0x\" + shaHex(spad + xsalt + inner, this.hashAlg));\n }\n\n private calcXHex(xpassword: string, xsalt: string): bigint {\n // calc_x_hex: sha_hex(xsalt + sha_hex(\":\" hex + xpassword), hash)\n const colonHex = \":\".charCodeAt(0).toString(16);\n const inner = shaHex(colonHex + xpassword, this.hashAlg);\n return BigInt(\"0x\" + shaHex(xsalt + inner, this.hashAlg));\n }\n}\n\n// ── Apple PBKDF2 password derivation ───────────────────────────────────────\n\nexport function applePbkdf2(\n password: string,\n salt: Buffer,\n iterations: number,\n keyLength: number,\n protocol: string\n): Buffer {\n if (![\"s2k\", \"s2k_fo\"].includes(protocol)) {\n throw new Error(`Unsupported protocol '${protocol}' for pbkdf2`);\n }\n\n // First hash the password with SHA-256\n let passwordBytes: Buffer | string = createHash(\"sha256\").update(password).digest();\n\n if (protocol === \"s2k_fo\") {\n // Legacy: convert to hex string\n passwordBytes = passwordBytes.toString(\"hex\");\n }\n\n return pbkdf2Sync(passwordBytes, salt, iterations, keyLength, \"sha256\");\n}\n","/**\n * Apple ID Session Authentication\n * 1:1 port of Fastlane Spaceship client.rb + two_step_or_factor_client.rb\n *\n * Two flows:\n *\n * loginWithAppleId({ email, password, onPrompt })\n * - blocking, CLI-style. onPrompt is awaited to collect 2FA codes.\n *\n * beginLogin({ email, password }) → { kind: \"logged_in\" | \"needs_2fa\", ... }\n * submitTwoFactorCode({ pending, code, source, ... }) → AppleSession\n * requestSmsCode({ pending, phoneId, mode })\n * - HTTP-resumable. Used by the App Release wizard, where the 2FA\n * challenge is rendered in a browser modal and the code arrives in\n * a separate request.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { createInterface } from \"node:readline\";\nimport { SRPClient, applePbkdf2 } from \"./srp.js\";\n\nconst AUTH_BASE = \"https://idmsa.apple.com/appleauth/auth\";\nconst OLYMPUS_SESSION = \"https://appstoreconnect.apple.com/olympus/v1/session\";\nconst WIDGET_KEY_URL = \"https://appstoreconnect.apple.com/olympus/v1/app/config?hostname=itunesconnect.apple.com\";\n\nexport interface AppleSessionConfig {\n email: string;\n password: string;\n onLog?: (msg: string) => void;\n onPrompt?: (msg: string) => Promise<string>;\n}\n\nexport interface ContractMessage {\n id: string;\n group: string;\n subject: string;\n message: string;\n}\n\nexport interface AppleSession {\n cookies: Record<string, string>;\n sessionId: string;\n scnt: string;\n serviceKey: string;\n userEmail: string;\n teamId?: string;\n pendingAgreements: ContractMessage[];\n}\n\n/**\n * State held between beginLogin() and submitTwoFactorCode() — captures\n * everything needed to resume an in-progress 2FA flow across HTTP requests.\n * Stored server-side keyed by an opaque session id; never sent to the\n * browser (the browser only sees the opaque id).\n */\nexport interface PendingLogin {\n cookies: Record<string, string>;\n sessionId: string;\n scnt: string;\n serviceKey: string;\n userEmail: string;\n}\n\n/**\n * Description of the 2FA challenge presented to the user.\n *\n * Modern 2FA accounts (the default for everyone) have `kind: \"device\"` —\n * Apple pushes the 6-digit code to all the user's trusted Apple devices\n * (iPhone, Mac, etc.) and the user types it into our wizard. The legacy\n * `trustedDevices` field is empty in this case; that field only ever\n * populates for old \"two-step verification\" accounts which are\n * essentially extinct.\n *\n * `kind: \"phone_only\"` is reserved for accounts that have no real Apple\n * devices (Apple's `noTrustedDevices === true` flag) — those accounts\n * must use SMS to a trusted phone number.\n *\n * Either way, the user can opt to receive the code via SMS instead by\n * picking from `trustedPhoneNumbers` and calling requestSmsCode().\n */\nexport interface TwoFactorChallenge {\n kind: \"device\" | \"phone_only\";\n codeLength: number;\n trustedPhoneNumbers: { id: number; numberWithDialCode: string; pushMode?: string }[];\n}\n\nexport type BeginLoginResult =\n | { kind: \"logged_in\"; session: AppleSession }\n | { kind: \"needs_2fa\"; pending: PendingLogin; challenge: TwoFactorChallenge };\n\n/** Thrown when an Apple Developer Program agreement needs to be accepted */\nexport class ProgramLicenseAgreementError extends Error {\n constructor(message: string, public agreements: ContractMessage[]) {\n super(message);\n this.name = \"ProgramLicenseAgreementError\";\n }\n}\n\n/**\n * Check a portal API response for agreement/license errors.\n * Throws ProgramLicenseAgreementError if detected.\n * Call this after any portal API call. Mirrors Spaceship::Client#handle_itc_response.\n */\nexport function checkPortalResponse(body: any, session?: AppleSession): void {\n if (!body || typeof body !== \"object\") return;\n\n // Result code 4100 = membership not eligible (often due to pending agreement)\n if (body.resultCode === 4100) {\n const userMsg = body.userString ?? \"The selected team does not have an eligible program membership.\";\n const agreements = session?.pendingAgreements ?? [];\n if (agreements.length > 0) {\n throw new ProgramLicenseAgreementError(\n `${userMsg}\\n\\n⚠ Pending agreement: ${agreements[0].subject}\\n` +\n `${agreements[0].message.replace(/<[^>]+>/g, \"\")}\\n\\n` +\n `Please accept the agreement at https://developer.apple.com/account before continuing.`,\n agreements\n );\n }\n throw new Error(userMsg);\n }\n\n // Explicit license agreement mention\n if ((body.userString ?? \"\").includes(\"Program License Agreement\")) {\n throw new ProgramLicenseAgreementError(\n `${body.userString} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n session?.pendingAgreements ?? []\n );\n }\n\n // Generic error with result code\n if (body.resultCode && body.resultCode !== 0) {\n const msg = body.userString || body.resultString || `Portal API error (code ${body.resultCode})`;\n throw new Error(msg);\n }\n}\n\n// ── Main Login (mirrors Spaceship::Client#send_shared_login_request) ───────\n\n/**\n * Step 1 of HTTP-resumable login: do the SIRP exchange and detect whether\n * 2FA is required. Returns either a fully-established session (no 2FA) or\n * a pending state + a description of the 2FA challenge.\n */\nexport async function beginLogin(config: {\n email: string;\n password: string;\n onLog?: (msg: string) => void;\n}): Promise<BeginLoginResult> {\n const log = config.onLog ?? (() => {});\n\n log(\"Fetching Apple service key...\");\n const serviceKey = await fetchServiceKey();\n\n const initRes = await fetch(`${AUTH_BASE}/signin?widgetKey=${serviceKey}`, {\n headers: { \"User-Agent\": \"Spaceship 2.225.0\" },\n });\n const initCookies = parseCookies(initRes.headers);\n\n const hcBits = initRes.headers.get(\"X-Apple-HC-Bits\");\n const hcChallenge = initRes.headers.get(\"X-Apple-HC-Challenge\");\n let hashcash: string | undefined;\n if (hcBits && hcChallenge) {\n log(\"Computing hashcash...\");\n hashcash = computeHashcash(parseInt(hcBits, 10), hcChallenge);\n }\n\n const cookieStr = Object.entries(initCookies)\n .map(([k, v]) => k.startsWith(\"DES\") ? `${k}=\"${v}\"` : `${k}=${v}`)\n .join(\"; \");\n\n log(\"Starting SIRP Apple ID login...\");\n const response = await doSirp(config.email, config.password, serviceKey, cookieStr, hashcash);\n\n const baseState = {\n cookies: { ...initCookies, ...response.cookies },\n sessionId: response.sessionId,\n scnt: response.scnt,\n serviceKey,\n userEmail: config.email,\n };\n\n if (response.status === 403) {\n throw new Error(`Invalid username and password combination. Used '${config.email}' as the username.`);\n }\n if (response.status === 412) {\n throw new Error(\"Need to acknowledge Apple's Apple ID and Privacy statement. Please manually log into https://appleid.apple.com.\");\n }\n\n if (response.status === 200) {\n log(\"Login successful (no 2FA).\");\n const session: AppleSession = { ...baseState, pendingAgreements: [] };\n await finalizeSession(session, log);\n return { kind: \"logged_in\", session };\n }\n\n if (response.status === 409) {\n log(\"2FA required, fetching challenge...\");\n const challenge = await fetchTwoFactorChallenge(baseState);\n return { kind: \"needs_2fa\", pending: baseState, challenge };\n }\n\n throw new Error(`Unexpected login response (${response.status}): ${JSON.stringify(response.body).slice(0, 500)}`);\n}\n\n/** Fetch the 2FA challenge (trusted phones + whether the user has Apple devices). */\nasync function fetchTwoFactorChallenge(pending: PendingLogin): Promise<TwoFactorChallenge> {\n const r = await fetch(`${AUTH_BASE}`, { headers: buildAuthHeadersFromPending(pending) });\n const body = await r.json() as any;\n\n const trustedPhoneNumbers = (body.trustedPhoneNumbers ?? []).map((p: any) => ({\n id: p.id, numberWithDialCode: p.numberWithDialCode, pushMode: p.pushMode,\n }));\n // Apple sets `noTrustedDevices: true` when the user has no real Apple\n // devices to push the code to and must rely on SMS. Anything else means\n // we should default to \"enter the code from your device\".\n const phoneOnly = body.noTrustedDevices === true;\n const codeLength = body.securityCode?.length ?? 6;\n\n return {\n kind: phoneOnly ? \"phone_only\" : \"device\",\n codeLength,\n trustedPhoneNumbers,\n };\n}\n\n/**\n * Ask Apple to send an SMS / voice code to the chosen trusted phone.\n * Used by the wizard's \"Send code via text instead\" affordance.\n */\nexport async function requestSmsCode(input: {\n pending: PendingLogin;\n phoneId: number;\n mode?: \"sms\" | \"voice\";\n}): Promise<void> {\n await fetch(`${AUTH_BASE}/verify/phone`, {\n method: \"PUT\",\n headers: { ...buildAuthHeadersFromPending(input.pending), \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ phoneNumber: { id: input.phoneId }, mode: input.mode ?? \"sms\" }),\n });\n}\n\n/**\n * Step 2 of HTTP-resumable login: submit the 2FA code the user typed.\n * Returns a fully-established AppleSession on success.\n *\n * source = \"device\" → 4-digit code from a trusted Apple device\n * source = \"phone\" → 6-digit code from SMS / push to trusted phone\n */\nexport async function submitTwoFactorCode(input: {\n pending: PendingLogin;\n code: string;\n source: \"device\" | \"phone\";\n phoneId?: number;\n mode?: \"sms\" | \"voice\";\n onLog?: (msg: string) => void;\n}): Promise<AppleSession> {\n const log = input.onLog ?? (() => {});\n\n let path: string;\n let body: string;\n if (input.source === \"device\") {\n path = `${AUTH_BASE}/verify/trusteddevice/securitycode`;\n body = JSON.stringify({ securityCode: { code: input.code } });\n } else {\n if (input.phoneId == null) throw new Error(\"phoneId is required when source='phone'\");\n path = `${AUTH_BASE}/verify/phone/securitycode`;\n body = JSON.stringify({\n securityCode: { code: input.code },\n phoneNumber: { id: input.phoneId },\n mode: input.mode ?? \"sms\",\n });\n }\n\n log(\"Submitting 2FA code...\");\n const verifyRes = await fetch(path, {\n method: \"POST\",\n headers: { ...buildAuthHeadersFromPending(input.pending), \"Content-Type\": \"application/json\" },\n body,\n });\n if (!verifyRes.ok) {\n const err = await verifyRes.json().catch(() => ({})) as any;\n const msgs = (err?.service_errors ?? err?.serviceErrors ?? []).map((e: any) => e.message).filter(Boolean);\n throw new Error(msgs.join(\"; \") || `Verification failed (${verifyRes.status})`);\n }\n\n const session: AppleSession = {\n ...input.pending,\n cookies: { ...input.pending.cookies, ...parseCookies(verifyRes.headers) },\n pendingAgreements: [],\n };\n await trustSession(session);\n await finalizeSession(session, log);\n return session;\n}\n\n/** Fetch olympus session and pending agreements — the post-2FA finishing work. */\nasync function finalizeSession(session: AppleSession, log: (msg: string) => void): Promise<void> {\n await fetchOlympusSession(session);\n const agreements = await fetchContractMessages(session);\n if (agreements.length > 0) {\n for (const msg of agreements) {\n log(`⚠ ${msg.subject}: ${msg.message.replace(/<[^>]+>/g, \"\")}`);\n }\n }\n session.pendingAgreements = agreements;\n log(`Logged in as ${session.userEmail}`);\n}\n\n/**\n * Backward-compatible CLI-style login. Internally uses beginLogin +\n * submitTwoFactorCode but routes 2FA through the synchronous onPrompt\n * callback so existing scripts (test-login.ts, test-full-workflow.ts)\n * keep working.\n */\nexport async function loginWithAppleId(config: AppleSessionConfig): Promise<AppleSession> {\n const log = config.onLog ?? console.log;\n const promptFn = config.onPrompt ?? defaultPrompt;\n\n const result = await beginLogin({ email: config.email, password: config.password, onLog: log });\n if (result.kind === \"logged_in\") return result.session;\n\n const { pending, challenge } = result;\n const phones = challenge.trustedPhoneNumbers;\n\n if (challenge.kind === \"device\") {\n log(\"Two-factor Authentication (6 digit code) is enabled for this account\");\n log(\"(Input 'sms' to escape this prompt and select a trusted phone number to send the code as a text message)\");\n const input = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n if (input.toLowerCase() === \"sms\") {\n log(\"Please select a trusted phone number:\");\n for (let i = 0; i < phones.length; i++) log(` ${i + 1}. ${phones[i].numberWithDialCode}`);\n const choice = await promptFn(\"Enter number: \");\n const phone = phones[Math.max(0, parseInt(choice, 10) - 1)] ?? phones[0];\n await requestSmsCode({ pending, phoneId: phone.id, mode: phone.pushMode as any });\n log(`Code sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n }\n return submitTwoFactorCode({ pending, code: input, source: \"device\", onLog: log });\n }\n\n // phone_only — account has no trusted Apple devices, must use SMS\n log(\"Two-factor Authentication (6 digit code) is enabled for this account\");\n if (phones.length === 1) {\n const phone = phones[0];\n log(`Code automatically sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n }\n log(\"Please select a trusted phone number:\");\n for (let i = 0; i < phones.length; i++) log(` ${i + 1}. ${phones[i].numberWithDialCode}`);\n const choice = await promptFn(\"Enter number: \");\n const phone = phones[Math.max(0, parseInt(choice, 10) - 1)] ?? phones[0];\n await requestSmsCode({ pending, phoneId: phone.id, mode: phone.pushMode as any });\n log(`Code sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n}\n\nfunction buildAuthHeadersFromPending(pending: PendingLogin): Record<string, string> {\n const h: Record<string, string> = { \"X-Apple-Widget-Key\": pending.serviceKey, Accept: \"application/json\" };\n if (pending.sessionId) h[\"X-Apple-Id-Session-Id\"] = pending.sessionId;\n if (pending.scnt) h[\"scnt\"] = pending.scnt;\n const c = Object.entries(pending.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n if (c) h[\"Cookie\"] = c;\n return h;\n}\n\n// ── SIRP Auth (1:1 port of Spaceship::Client#do_sirp) ──────────────────────\n\nasync function doSirp(\n user: string, password: string, serviceKey: string, cookieStr: string, hashcash?: string\n): Promise<{ status: number; body: any; cookies: Record<string, string>; sessionId: string; scnt: string }> {\n const client = new SRPClient(2048);\n const A = client.startAuthentication();\n const aBase64 = Buffer.from(A, \"hex\").toString(\"base64\");\n\n const baseHeaders: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"X-Apple-Widget-Key\": serviceKey,\n Accept: \"application/json, text/javascript\",\n };\n if (cookieStr) baseHeaders[\"Cookie\"] = cookieStr;\n\n // Step 1: signin/init\n const initRes = await fetch(`${AUTH_BASE}/signin/init`, {\n method: \"POST\",\n headers: baseHeaders,\n body: JSON.stringify({ a: aBase64, accountName: user, protocols: [\"s2k\", \"s2k_fo\"] }),\n redirect: \"manual\",\n });\n const initBody = await initRes.json() as any;\n if (initBody.serviceErrors) throw new Error(`Apple auth error: ${JSON.stringify(initBody.serviceErrors)}`);\n\n const { iteration: iterations, salt: saltB64, b: bB64, c, protocol } = initBody;\n const salt = Buffer.from(saltB64, \"base64\");\n const b = Buffer.from(bB64, \"base64\");\n\n // Derive password (mirrors Spaceship::Client#pbkdf2)\n const encryptedPassword = applePbkdf2(password, salt, iterations, 32, protocol);\n\n // Process SRP challenge\n const m1 = client.processChallenge(user, encryptedPassword.toString(\"hex\"), salt.toString(\"hex\"), b.toString(\"hex\"), true);\n if (m1 === false) throw new Error(\"Error processing SIRP challenge\");\n const m2 = client.H_AMK;\n\n // Step 2: signin/complete\n const completeHeaders = { ...baseHeaders };\n if (hashcash) completeHeaders[\"X-Apple-HC\"] = hashcash;\n\n const completeRes = await fetch(`${AUTH_BASE}/signin/complete?isRememberMeEnabled=false`, {\n method: \"POST\",\n headers: completeHeaders,\n body: JSON.stringify({\n accountName: user,\n c,\n m1: Buffer.from(m1, \"hex\").toString(\"base64\"),\n m2: m2 ? Buffer.from(m2, \"hex\").toString(\"base64\") : \"\",\n rememberMe: false,\n }),\n redirect: \"manual\",\n });\n\n let body: any;\n try { body = await completeRes.json(); } catch { body = \"\"; }\n\n return {\n status: completeRes.status,\n body,\n cookies: parseCookies(completeRes.headers),\n sessionId: completeRes.headers.get(\"x-apple-id-session-id\") ?? \"\",\n scnt: completeRes.headers.get(\"scnt\") ?? \"\",\n };\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nasync function trustSession(session: AppleSession): Promise<void> {\n const r = await fetch(`${AUTH_BASE}/2sv/trust`, { headers: buildAuthHeaders(session) });\n Object.assign(session.cookies, parseCookies(r.headers));\n}\n\nasync function fetchOlympusSession(session: AppleSession): Promise<void> {\n const cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n const res = await fetch(OLYMPUS_SESSION, { headers: { Cookie: cookieStr, Accept: \"application/json\" } });\n if (res.ok) {\n const body = await res.json() as any;\n if (body?.user?.emailAddress) session.userEmail = body.user.emailAddress;\n if (body?.provider?.providerId) session.teamId = String(body.provider.providerId);\n }\n}\n\n// ── Contract Messages (mirrors fetch_program_license_agreement_messages) ────\n\nasync function fetchContractMessages(session: AppleSession): Promise<ContractMessage[]> {\n const cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n try {\n const res = await fetch(\"https://appstoreconnect.apple.com/olympus/v1/contractMessages\", {\n headers: { Cookie: cookieStr, Accept: \"application/json\" },\n });\n if (!res.ok) return [];\n const body = await res.json() as any[];\n return (body ?? []).map((m: any) => ({\n id: m.id ?? \"\",\n group: m.group ?? \"\",\n subject: m.subject ?? \"\",\n message: m.message ?? \"\",\n }));\n } catch {\n return [];\n }\n}\n\nasync function fetchServiceKey(): Promise<string> {\n const res = await fetch(WIDGET_KEY_URL);\n const body = await res.json() as any;\n if (!body?.authServiceKey) throw new Error(\"Could not fetch Apple service key\");\n return body.authServiceKey as string;\n}\n\nfunction buildAuthHeaders(session: AppleSession): Record<string, string> {\n const h: Record<string, string> = { \"X-Apple-Widget-Key\": session.serviceKey, Accept: \"application/json\" };\n if (session.sessionId) h[\"X-Apple-Id-Session-Id\"] = session.sessionId;\n if (session.scnt) h[\"scnt\"] = session.scnt;\n const c = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n if (c) h[\"Cookie\"] = c;\n return h;\n}\n\nfunction parseCookies(headers: Headers): Record<string, string> {\n const cookies: Record<string, string> = {};\n for (const raw of headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) cookies[m[1]] = m[2];\n }\n return cookies;\n}\n\nfunction computeHashcash(bits: number, challenge: string): string {\n const date = new Date().toISOString().replace(/[-:T]/g, \"\").slice(0, 12);\n let counter = 0;\n while (true) {\n const stamp = `1:${bits}:${date}:${challenge}::${counter.toString(36)}:`;\n const hash = createHash(\"sha1\").update(stamp).digest();\n let zeroBits = 0;\n for (const byte of hash) {\n if (byte === 0) { zeroBits += 8; } else { zeroBits += Math.clz32(byte) - 24; break; }\n if (zeroBits >= bits) break;\n }\n if (zeroBits >= bits) return stamp;\n counter++;\n }\n}\n\nasync function defaultPrompt(message: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((r) => { rl.question(message, (a) => { rl.close(); r(a.trim()); }); });\n}\n","import type { TokenManager } from \"./auth.js\";\nimport { ProgramLicenseAgreementError } from \"./apple-session.js\";\nimport type {\n JsonApiErrorResponse,\n JsonApiListResponse,\n JsonApiResponse,\n ListParams,\n RequestOptions,\n} from \"./types.js\";\n\nconst PRODUCTION_BASE = \"https://api.appstoreconnect.apple.com\";\nconst ENTERPRISE_BASE = \"https://api.enterprise.developer.apple.com\";\n\nconst MAX_RETRIES = 5;\nconst INITIAL_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 60_000;\n/** Fastlane's TooManyRequestsError gives up after 3600s cumulative backoff. */\nconst MAX_RATE_LIMIT_BACKOFF_MS = 3_600_000;\n\nexport class AppStoreConnectError extends Error {\n constructor(\n message: string,\n public status: number,\n public errors: JsonApiErrorResponse[\"errors\"] = []\n ) {\n super(message);\n this.name = \"AppStoreConnectError\";\n }\n}\n\nexport class RateLimitError extends AppStoreConnectError {\n constructor(public retryAfter: number) {\n super(`Rate limited. Retry after ${retryAfter}s`, 429);\n this.name = \"RateLimitError\";\n }\n}\n\nexport class RequestClient {\n private baseUrl: string;\n private tokenManager: TokenManager;\n\n constructor(tokenManager: TokenManager, enterprise = false) {\n this.tokenManager = tokenManager;\n this.baseUrl = enterprise ? ENTERPRISE_BASE : PRODUCTION_BASE;\n }\n\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = \"GET\", body, params, headers: extraHeaders } = options;\n\n let url = `${this.baseUrl}${path}`;\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n searchParams.set(key, value.join(\",\"));\n } else {\n searchParams.set(key, String(value));\n }\n }\n const qs = searchParams.toString();\n if (qs) url += `?${qs}`;\n }\n\n let lastError: Error | null = null;\n // Soft-cumulative backoff for 429 that doubles on each hit, mirroring\n // Fastlane's Spaceship::ConnectAPI::APIClient#with_asc_retry 429 handler:\n // `Kernel.sleep(backoff); backoff *= 2`, giving up past 3600s.\n let rateLimitBackoffMs = INITIAL_BACKOFF_MS;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n const token = await this.tokenManager.getToken();\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n ...extraHeaders,\n };\n\n const res = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (res.ok) {\n if (res.status === 204) return undefined as T;\n return (await res.json()) as T;\n }\n\n // Handle 401 — refresh token and retry once\n if (res.status === 401 && attempt === 0) {\n this.tokenManager.invalidate();\n continue;\n }\n\n // Handle 429 — rate limit. Prefer server's Retry-After header when\n // provided, otherwise fall back to Fastlane's doubling backoff.\n if (res.status === 429) {\n if (rateLimitBackoffMs > MAX_RATE_LIMIT_BACKOFF_MS) {\n throw new RateLimitError(Math.floor(rateLimitBackoffMs / 1000));\n }\n const retryAfterHeader = res.headers.get(\"Retry-After\");\n const sleepMs = retryAfterHeader\n ? parseInt(retryAfterHeader, 10) * 1000\n : rateLimitBackoffMs;\n await sleep(sleepMs);\n rateLimitBackoffMs *= 2;\n continue;\n }\n\n // Parse error body early so we can inspect it for 403/502 special cases.\n const errorBody = await res.json().catch(() => null);\n const errors = (errorBody as JsonApiErrorResponse)?.errors || [];\n\n // Handle 403 — detect missing/expired program license agreement.\n // Mirrors api_client.rb's ProgramLicenseAgreementUpdated branch.\n if (res.status === 403) {\n const firstCode = errors[0]?.code;\n if (firstCode === \"FORBIDDEN.REQUIRED_AGREEMENTS_MISSING_OR_EXPIRED\") {\n const detail =\n errors.map((e) => e.detail || e.title).join(\"; \") ||\n \"Required agreements are missing or expired.\";\n throw new ProgramLicenseAgreementError(\n `${detail} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n []\n );\n }\n }\n\n // Handle 502 — special-case \"Could not process this request\" retry.\n // Mirrors api_client.rb's BadGatewayError branch (issue fastlane#19264).\n if (res.status === 502 && attempt < MAX_RETRIES) {\n const bodyText = errorBody ? JSON.stringify(errorBody) : \"\";\n if (bodyText.includes(\"Could not process this request\")) {\n const backoff = Math.min(\n INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n MAX_BACKOFF_MS\n );\n await sleep(backoff + Math.random() * 500);\n continue;\n }\n }\n\n // Handle 5xx — retry with exponential backoff\n if (res.status >= 500 && attempt < MAX_RETRIES) {\n const backoff = Math.min(\n INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n MAX_BACKOFF_MS\n );\n await sleep(backoff + Math.random() * 500);\n continue;\n }\n\n const detail = errors.map((e) => e.detail || e.title).join(\"; \") || `HTTP ${res.status}`;\n\n lastError = new AppStoreConnectError(detail, res.status, errors);\n break;\n }\n\n throw lastError || new Error(\"Request failed after retries\");\n }\n\n async get<T>(path: string, params?: Record<string, string | string[] | number | undefined>): Promise<T> {\n return this.request<T>(path, { method: \"GET\", params });\n }\n\n async post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body });\n }\n\n async patch<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"PATCH\", body });\n }\n\n async delete(path: string): Promise<void> {\n await this.request(path, { method: \"DELETE\" });\n }\n\n // Build query params from ListParams\n buildListParams(params: ListParams): Record<string, string | undefined> {\n const result: Record<string, string | undefined> = {};\n\n if (params.filter) {\n for (const [key, value] of Object.entries(params.filter)) {\n result[`filter[${key}]`] = Array.isArray(value) ? value.join(\",\") : value;\n }\n }\n\n if (params.include) {\n result[\"include\"] = params.include;\n }\n\n if (params.fields) {\n for (const [key, value] of Object.entries(params.fields)) {\n result[`fields[${key}]`] = value;\n }\n }\n\n if (params.limit !== undefined) {\n result[\"limit\"] = String(params.limit);\n }\n\n if (params.sort) {\n result[\"sort\"] = params.sort;\n }\n\n if (params.cursor) {\n // ASC uses page[after] for cursor pagination\n result[\"page[after]\"] = params.cursor;\n }\n\n return result;\n }\n\n async list<T>(path: string, params: ListParams = {}): Promise<JsonApiListResponse<T>> {\n const queryParams = this.buildListParams(params);\n return this.get<JsonApiListResponse<T>>(path, queryParams);\n }\n\n async *paginate<T>(path: string, params: ListParams = {}): AsyncGenerator<T, void, undefined> {\n let cursor: string | undefined = params.cursor;\n\n while (true) {\n const response = await this.list<T>(path, { ...params, cursor });\n\n for (const item of response.data) {\n yield item;\n }\n\n // Check for next page\n const nextLink = response.links?.next;\n if (!nextLink) break;\n\n // Extract cursor from next link\n const nextUrl = new URL(nextLink);\n cursor = nextUrl.searchParams.get(\"page[after]\") || undefined;\n if (!cursor) break;\n }\n }\n\n async all<T>(path: string, params: ListParams = {}): Promise<T[]> {\n const results: T[] = [];\n for await (const item of this.paginate<T>(path, params)) {\n results.push(item);\n }\n return results;\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { writeFile, unlink, mkdtemp, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { PilotUploadOptions, UploadResult } from \"./types.js\";\n\n/**\n * Upload a build to TestFlight via Apple's `altool` (macOS only).\n *\n * altool ships with Xcode command-line tools. It provides richer error\n * output than iTMSTransporter but is only available on macOS.\n */\nexport async function uploadWithAltool(\n options: PilotUploadOptions\n): Promise<UploadResult> {\n if (!existsSync(options.ipaPath)) {\n throw new Error(`File not found: ${options.ipaPath}`);\n }\n\n const platform = options.platform ?? \"ios\";\n const timeout = options.timeout ?? 1_800_000; // 30 min\n\n // Write temp .p8 key file — altool reads from API_PRIVATE_KEYS_DIR\n const keyDir = await mkdtemp(join(tmpdir(), \"fastnode-altool-\"));\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await writeFile(keyPath, options.apiPrivateKey);\n\n return new Promise<UploadResult>((resolve) => {\n const args = [\n \"altool\",\n \"--upload-app\",\n \"-f\",\n options.ipaPath,\n \"-t\",\n platform,\n \"--apiKey\",\n options.apiKeyId,\n \"--apiIssuer\",\n options.apiIssuerId,\n ];\n\n const child = spawn(\"xcrun\", args, {\n env: { ...process.env, API_PRIVATE_KEYS_DIR: keyDir },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n }, timeout);\n\n const onData = (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n };\n\n child.stdout.on(\"data\", onData);\n child.stderr.on(\"data\", onData);\n\n child.on(\"close\", async (code) => {\n clearTimeout(timer);\n await unlink(keyPath).catch(() => {});\n await rm(keyDir, { recursive: true, force: true }).catch(() => {});\n resolve({ success: code === 0, output, backend: \"altool\" });\n });\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\n\n/**\n * Locate the iTMSTransporter binary on this host.\n *\n * Apple ships iTMSTransporter as a Java-based tool bundled with Xcode\n * on macOS, and as a standalone Linux distribution used by media\n * publishers for CI. Either works for uploading IPAs — same protocol,\n * same ASC API key format.\n *\n * Resolution order:\n * 1. ITMSTRANSPORTER_BIN env var (pinning for prod deployments)\n * 2. Well-known system paths for the host OS\n * 3. Throw with a clear install hint\n *\n * We deliberately do NOT auto-download Transporter. Apple's download\n * URL is not versioned and the license/redistribution story is fuzzy.\n * Prod hosts should install it once via apt/brew/manual, then pin via\n * env var so CI is reproducible.\n */\nexport async function resolveTransporter(): Promise<string> {\n // 1. Env override — the canonical path for prod\n const override = process.env.ITMSTRANSPORTER_BIN;\n if (override) {\n if (!existsSync(override)) {\n throw new Error(\n `ITMSTRANSPORTER_BIN is set to \"${override}\" but that path does not exist.`\n );\n }\n return override;\n }\n\n // 2. Well-known system paths, in preferred order per OS\n const candidates =\n process.platform === \"darwin\"\n ? [\n // Xcode 15+: Transporter.app bundled with Xcode\n \"/Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/Versions/A/itms/bin/iTMSTransporter\",\n // Standalone Transporter.app from the Mac App Store\n \"/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter\",\n ]\n : [\n \"/usr/local/itms/bin/iTMSTransporter\",\n \"/opt/itms/bin/iTMSTransporter\",\n \"/usr/local/bin/iTMSTransporter\",\n ];\n\n for (const path of candidates) {\n if (existsSync(path)) return path;\n }\n\n throw new Error(\n [\n \"iTMSTransporter not found.\",\n \"\",\n \"Install options:\",\n process.platform === \"darwin\"\n ? \" - Install Xcode (includes Transporter)\"\n : \" - Download Apple's standalone iTMSTransporter package for Linux\",\n \" - Or set ITMSTRANSPORTER_BIN to the absolute path of the binary\",\n \"\",\n `Searched: ${candidates.join(\", \")}`,\n ].join(\"\\n\")\n );\n}\n\n/**\n * Verify that Java is available on PATH. iTMSTransporter is a Java\n * application and won't run without a JRE.\n */\nexport async function verifyJava(): Promise<{ version: string }> {\n return new Promise((resolve, reject) => {\n const child = spawn(\"java\", [\"-version\"], { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n let stderr = \"\";\n child.stderr.on(\"data\", (d: Buffer) => {\n stderr += d.toString();\n });\n child.on(\"error\", (err) => {\n reject(\n new Error(\n `java not found on PATH (${err.message}). Install Java 17 LTS and ensure it is on PATH.`\n )\n );\n });\n child.on(\"close\", (code) => {\n if (code !== 0) {\n reject(new Error(`java -version exited ${code}: ${stderr}`));\n return;\n }\n // Output format: `openjdk version \"17.0.8\" 2023-07-18 ...`\n const match = stderr.match(/version \"([^\"]+)\"/);\n resolve({ version: match?.[1] ?? \"unknown\" });\n });\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { writeFile, mkdtemp, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { PilotUploadOptions, UploadResult } from \"./types.js\";\nimport { resolveTransporter, verifyJava } from \"./transporter-install.js\";\n\n/**\n * Upload a build to TestFlight via Apple's iTMSTransporter (Java).\n *\n * This path works on Linux (and macOS) and does NOT require Xcode.\n * It is the primary upload path for the ship worker LXC.\n *\n * iTMSTransporter reads the ASC API private key from a directory\n * named by API_PRIVATE_KEYS_DIR, looking for the file `AuthKey_<keyId>.p8`.\n */\nexport async function uploadWithTransporter(\n options: PilotUploadOptions\n): Promise<UploadResult> {\n if (!existsSync(options.ipaPath)) {\n throw new Error(`File not found: ${options.ipaPath}`);\n }\n\n // Fail fast if Java is missing — avoids a cryptic exec error deep inside\n // Transporter. This is cheap (~20ms) and only runs once per upload.\n await verifyJava();\n\n const transporterBin = await resolveTransporter();\n\n const platform = options.platform ?? \"ios\";\n const timeout = options.timeout ?? 1_800_000; // 30 min\n\n // Write temp .p8 key file\n const keyDir = await mkdtemp(join(tmpdir(), \"fastnode-itms-\"));\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await writeFile(keyPath, options.apiPrivateKey);\n\n return new Promise<UploadResult>((resolve) => {\n const args = [\n \"-m\", \"upload\",\n \"-assetFile\", options.ipaPath,\n \"-apiKey\", options.apiKeyId,\n \"-apiIssuer\", options.apiIssuerId,\n // WONoPause prevents the JVM from waiting on stdin in non-TTY\n // environments (CI, LaunchAgent) where it would hang forever.\n \"-WONoPause\", \"true\",\n ];\n\n // Transporter distinguishes iOS vs macOS/tvOS via a -bundleType flag\n // on some code paths. For standard IPAs the protocol is platform-aware\n // via the asset itself, so we only pass the hint when it's non-default.\n if (platform !== \"ios\") {\n args.push(\"-bundleType\", platform);\n }\n\n const child = spawn(transporterBin, args, {\n env: {\n ...process.env,\n API_PRIVATE_KEYS_DIR: keyDir,\n },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n }, timeout);\n\n const onData = (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n };\n\n child.stdout.on(\"data\", onData);\n child.stderr.on(\"data\", onData);\n\n child.on(\"close\", async (code) => {\n clearTimeout(timer);\n await rm(keyDir, { recursive: true, force: true }).catch(() => {});\n resolve({ success: code === 0, output, backend: \"transporter\" });\n });\n\n child.on(\"error\", async (err) => {\n clearTimeout(timer);\n await rm(keyDir, { recursive: true, force: true }).catch(() => {});\n resolve({\n success: false,\n output: output + `\\nProcess error: ${err.message}`,\n backend: \"transporter\",\n });\n });\n });\n}\n","/**\n * Classify upload failures into transient vs. permanent buckets.\n *\n * Apple's App Store Connect / iTMSTransporter backend is flaky:\n * the finalize step (\"CHANGE UPLOAD STATE TO COMPLETE\") periodically\n * returns 500, and the Java transporter surfaces various connection\n * errors during long uploads. These are all safe to retry — the IPA\n * is deterministic and Apple deduplicates on build number.\n *\n * Non-transient errors (invalid binary, duplicate build number, auth\n * failure) should NOT be retried — they will never succeed without\n * the caller taking some action.\n */\n\nexport type TransientUploadError =\n | \"apple_5xx\"\n | \"finalize_failed\"\n | \"network_timeout\"\n | \"connection_reset\"\n | \"transporter_jvm_error\";\n\ninterface ClassifierRule {\n pattern: RegExp;\n kind: TransientUploadError;\n}\n\nconst RULES: ClassifierRule[] = [\n // Apple's finalize-upload call returning 5xx — the most common transient\n // failure we see in practice. Example:\n // \"CHANGE UPLOAD STATE TO COMPLETE (UPLOADING ASSET DESCRIPTION):\n // received status code 500; internal server error.\"\n { pattern: /CHANGE UPLOAD STATE TO COMPLETE/i, kind: \"finalize_failed\" },\n\n // Generic 5xx from ASC backend services\n { pattern: /status code 5\\d\\d/i, kind: \"apple_5xx\" },\n { pattern: /internal server error/i, kind: \"apple_5xx\" },\n { pattern: /Service Unavailable/i, kind: \"apple_5xx\" },\n { pattern: /Bad Gateway/i, kind: \"apple_5xx\" },\n\n // Network-level interruptions during the upload body transfer\n { pattern: /Connection reset/i, kind: \"connection_reset\" },\n { pattern: /SocketException/i, kind: \"connection_reset\" },\n { pattern: /Broken pipe/i, kind: \"connection_reset\" },\n\n // Timeouts — distinct from resets because the other side may have\n // actually processed the request, so dedupe logic may matter.\n { pattern: /Read timed out/i, kind: \"network_timeout\" },\n { pattern: /SocketTimeoutException/i, kind: \"network_timeout\" },\n { pattern: /Operation timed out/i, kind: \"network_timeout\" },\n\n // JVM-internal errors from iTMSTransporter (OOM, thread interruption, etc.)\n { pattern: /java\\.lang\\.OutOfMemoryError/i, kind: \"transporter_jvm_error\" },\n { pattern: /EOFException/i, kind: \"transporter_jvm_error\" },\n];\n\n/**\n * Returns the transient-error kind if the output matches any known\n * retry-worthy pattern, or `null` if the error is non-transient.\n */\nexport function classifyUploadError(output: string): TransientUploadError | null {\n for (const { pattern, kind } of RULES) {\n if (pattern.test(output)) return kind;\n }\n return null;\n}\n\n/**\n * Convenience: `true` if the upload should be retried.\n */\nexport function isTransientUploadError(output: string): boolean {\n return classifyUploadError(output) !== null;\n}\n","import emojiRegex from \"emoji-regex\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport { AppStoreConnectError } from \"../client/request.js\";\nimport type { Build } from \"../types/index.js\";\nimport type {\n PilotUploadOptions,\n UploadBackend,\n UploadResult,\n} from \"./types.js\";\nimport { uploadWithAltool } from \"./upload-altool.js\";\nimport { uploadWithTransporter } from \"./upload-transporter.js\";\n\nexport type { PilotUploadOptions, UploadBackend, UploadResult } from \"./types.js\";\nexport { uploadWithAltool } from \"./upload-altool.js\";\nexport { uploadWithTransporter } from \"./upload-transporter.js\";\nexport {\n classifyUploadError,\n isTransientUploadError,\n} from \"./classify.js\";\nexport type { TransientUploadError } from \"./classify.js\";\nexport { resolveTransporter, verifyJava } from \"./transporter-install.js\";\n\nexport interface PilotDistributeOptions {\n client: AppStoreConnectClient;\n buildId: string;\n groupNames?: string[];\n changelog?: string;\n locale?: string;\n expirePreviousBuilds?: boolean;\n submitForReview?: boolean;\n}\n\n// ── Upload ─────────────────────────────────────────────────────────────────\n\n/**\n * Upload a build to TestFlight.\n *\n * Selects the upload backend based on the host OS:\n * - macOS → altool (ships with Xcode CLI)\n * - Linux → iTMSTransporter (standalone Java tool from Apple)\n *\n * Pass `backend` to force a specific path, e.g. for testing the\n * Linux path on a mac dev machine.\n */\nexport async function uploadToTestFlight(\n options: PilotUploadOptions\n): Promise<UploadResult> {\n const backend = selectBackend(options.backend ?? \"auto\");\n if (backend === \"altool\") {\n return uploadWithAltool(options);\n }\n return uploadWithTransporter(options);\n}\n\nfunction selectBackend(pref: UploadBackend | \"auto\"): UploadBackend {\n if (pref !== \"auto\") return pref;\n return process.platform === \"darwin\" ? \"altool\" : \"transporter\";\n}\n\n// ── Wait for Processing ────────────────────────────────────────────────────\n\nexport async function waitForProcessing(\n client: AppStoreConnectClient,\n params: {\n bundleId: string;\n buildNumber: string;\n appVersion: string;\n timeout?: number;\n pollInterval?: number;\n }\n): Promise<Build> {\n const timeout = params.timeout ?? 1_800_000; // 30 min\n const pollInterval = params.pollInterval ?? 30_000; // 30s\n const deadline = Date.now() + timeout;\n\n // Find app\n const app = await client.apps.findByBundleId(params.bundleId);\n if (!app) throw new Error(`App not found for bundle ID: ${params.bundleId}`);\n\n while (Date.now() < deadline) {\n const builds = await client.builds.list({\n filter: {\n app: app.id,\n version: params.buildNumber,\n \"preReleaseVersion.version\": params.appVersion,\n },\n limit: 1,\n });\n\n if (builds.length > 0) {\n const build = builds[0];\n const state = build.attributes.processingState;\n\n if (state === \"VALID\") return build;\n if (state === \"FAILED\" || state === \"INVALID\") {\n throw new Error(`Build processing ${state}: ${params.buildNumber}`);\n }\n }\n\n await sleep(pollInterval);\n }\n\n throw new Error(\n `Timeout waiting for build ${params.buildNumber} after ${timeout / 1000}s`\n );\n}\n\n// ── Distribute ─────────────────────────────────────────────────────────────\n\nexport async function distributeToGroups(\n options: PilotDistributeOptions\n): Promise<string[]> {\n const groupNames = options.groupNames ?? [];\n if (groupNames.length === 0) return [];\n\n // Get the build's app\n const build = await options.client.builds.get(options.buildId, {\n include: \"app\",\n });\n const appId =\n build.relationships?.app?.data?.id;\n if (!appId) throw new Error(\"Could not determine app for build\");\n\n // Set changelog if provided\n if (options.changelog) {\n await setChangelog({\n client: options.client,\n buildId: options.buildId,\n changelog: options.changelog,\n locale: options.locale,\n });\n }\n\n // Expire previous builds if requested\n if (options.expirePreviousBuilds) {\n const allBuilds = await options.client.builds.list({\n filter: { app: appId, expired: \"false\" },\n limit: 50,\n });\n for (const b of allBuilds) {\n if (b.id !== options.buildId) {\n await options.client.builds.expireBuild(b.id).catch(() => {});\n }\n }\n }\n\n // Find and add to groups\n const allGroups = await options.client.betaGroups.listForApp(appId);\n const matched: string[] = [];\n\n for (const name of groupNames) {\n const group = allGroups.find((g) => g.attributes.name === name);\n if (!group) continue;\n\n try {\n await options.client.betaGroups.addBuilds(group.id, [options.buildId]);\n matched.push(name);\n } catch (err) {\n // 409 = already added, that's fine\n if (err instanceof AppStoreConnectError && err.status === 409) {\n matched.push(name);\n }\n }\n }\n\n // Submit for beta review if requested\n if (options.submitForReview) {\n try {\n await options.client.builds.submitForBetaReview(options.buildId);\n } catch {\n // May already be submitted\n }\n }\n\n return matched;\n}\n\n// ── Changelog ──────────────────────────────────────────────────────────────\n\nexport async function setChangelog(options: {\n client: AppStoreConnectClient;\n buildId: string;\n changelog: string;\n locale?: string;\n}): Promise<void> {\n const locale = options.locale ?? \"en-US\";\n const sanitized = sanitizeChangelog(options.changelog);\n\n const localizations = await options.client.builds.getLocalizations(\n options.buildId\n );\n const existing = localizations.find(\n (l) => l.attributes.locale === locale\n );\n\n if (existing) {\n await options.client.builds.updateLocalization(existing.id, {\n whatsNew: sanitized,\n });\n } else {\n await options.client.builds.createLocalization({\n buildId: options.buildId,\n locale,\n whatsNew: sanitized,\n });\n }\n}\n\n// ── Expire ─────────────────────────────────────────────────────────────────\n\nexport async function expireBuild(\n client: AppStoreConnectClient,\n buildId: string\n): Promise<void> {\n await client.builds.expireBuild(buildId);\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction sanitizeChangelog(text: string): string {\n // Strip RGI-standard emojis using the `emoji-regex` package — same\n // approach as Fastlane's pilot (gem `emoji_regex`), which tracks the\n // Unicode \"Recommended for General Interchange\" spec so new emoji\n // sequences are covered without hand-maintaining ranges.\n let sanitized = text.replace(emojiRegex(), \"\");\n\n // Strip < characters (not allowed by Apple)\n sanitized = sanitized.replace(/</g, \"\");\n\n // Truncate to 4000 bytes\n const encoder = new TextEncoder();\n const encoded = encoder.encode(sanitized);\n if (encoded.length > 4000) {\n const decoder = new TextDecoder();\n sanitized = decoder.decode(encoded.slice(0, 3997)) + \"...\";\n }\n\n return sanitized;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { readFile, readdir, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface LocalizedMetadata {\n locale: string;\n description?: string;\n keywords?: string;\n releaseNotes?: string;\n supportUrl?: string;\n marketingUrl?: string;\n promotionalText?: string;\n name?: string;\n subtitle?: string;\n privacyUrl?: string;\n}\n\n/**\n * Review information submitted to App Store Connect for App Review.\n * Mirrors Fastlane deliver's `review_first_name`, `review_last_name`,\n * etc. (upload_metadata.rb lines 45-51), mapping to ASC's\n * `appStoreReviewDetails` attribute names.\n */\nexport interface ReviewInformation {\n firstName?: string;\n lastName?: string;\n phoneNumber?: string;\n emailAddress?: string;\n demoUser?: string;\n demoPassword?: string;\n notes?: string;\n}\n\nexport interface MetadataSet {\n localizations: LocalizedMetadata[];\n copyright?: string;\n /** Typed review information extracted from `review_information/`. */\n reviewInformation?: ReviewInformation;\n /** Raw review information map, including any unrecognised filenames. */\n reviewInfo?: Record<string, string>;\n}\n\n/**\n * Map from a `metadata/review_information/` filename (without `.txt`) to\n * its `ReviewInformation` field. Supports both the modern ASC-aligned\n * names and Fastlane's legacy `review_*` names.\n */\nconst REVIEW_FILENAME_TO_FIELD: Record<string, keyof ReviewInformation> = {\n // Modern (ASC-aligned) filenames\n first_name: \"firstName\",\n last_name: \"lastName\",\n phone_number: \"phoneNumber\",\n email_address: \"emailAddress\",\n demo_user: \"demoUser\",\n demo_password: \"demoPassword\",\n notes: \"notes\",\n // Legacy Fastlane filenames\n review_first_name: \"firstName\",\n review_last_name: \"lastName\",\n review_phone_number: \"phoneNumber\",\n review_email: \"emailAddress\",\n review_demo_user: \"demoUser\",\n review_demo_password: \"demoPassword\",\n review_notes: \"notes\",\n};\n\nconst LOCALE_FILES: Record<string, string> = {\n \"description.txt\": \"description\",\n \"keywords.txt\": \"keywords\",\n \"release_notes.txt\": \"releaseNotes\",\n \"support_url.txt\": \"supportUrl\",\n \"marketing_url.txt\": \"marketingUrl\",\n \"promotional_text.txt\": \"promotionalText\",\n \"name.txt\": \"name\",\n \"subtitle.txt\": \"subtitle\",\n \"privacy_url.txt\": \"privacyUrl\",\n};\n\nexport async function loadMetadata(metadataPath: string): Promise<MetadataSet> {\n const localizations: LocalizedMetadata[] = [];\n let copyright: string | undefined;\n let reviewInfo: Record<string, string> | undefined;\n let reviewInformation: ReviewInformation | undefined;\n\n // Read copyright\n try {\n copyright = (await readFile(join(metadataPath, \"copyright.txt\"), \"utf-8\")).trim();\n } catch {\n // Optional\n }\n\n // Read review info\n const reviewDir = join(metadataPath, \"review_information\");\n try {\n const reviewStat = await stat(reviewDir);\n if (reviewStat.isDirectory()) {\n reviewInfo = {};\n reviewInformation = {};\n const files = await readdir(reviewDir);\n for (const file of files) {\n if (!file.endsWith(\".txt\")) continue;\n const key = file.replace(\".txt\", \"\");\n const content = (await readFile(join(reviewDir, file), \"utf-8\")).trim();\n reviewInfo[key] = content;\n const field = REVIEW_FILENAME_TO_FIELD[key];\n if (field && content) reviewInformation[field] = content;\n }\n }\n } catch {\n // Optional\n }\n\n // Read locale directories\n const entries = await readdir(metadataPath, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (entry.name === \"review_information\" || entry.name === \"trade_representative_contact_information\") continue;\n\n const locale = entry.name;\n const localeDir = join(metadataPath, locale);\n const localization: LocalizedMetadata = { locale };\n\n for (const [filename, key] of Object.entries(LOCALE_FILES)) {\n try {\n const content = (await readFile(join(localeDir, filename), \"utf-8\")).trim();\n if (content) {\n (localization as any)[key] = content;\n }\n } catch {\n // File doesn't exist — optional\n }\n }\n\n localizations.push(localization);\n }\n\n return { localizations, copyright, reviewInfo, reviewInformation };\n}\n","import { spawn } from \"node:child_process\";\nimport { writeFile, unlink, mkdtemp } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { requireMacOS } from \"./platform.js\";\n\nexport async function uploadWithAltool(options: {\n filePath: string;\n apiKeyId: string;\n apiIssuerId: string;\n apiPrivateKey?: string;\n apiKeyPath?: string;\n platform?: string;\n onOutput?: (chunk: string) => void;\n}): Promise<{ success: boolean; output: string }> {\n requireMacOS(\"altool upload\");\n\n // Write temp .p8 if private key content provided\n let keyDir: string | undefined;\n if (options.apiPrivateKey && !options.apiKeyPath) {\n keyDir = await mkdtemp(join(tmpdir(), \"fastnode-altool-\"));\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await writeFile(keyPath, options.apiPrivateKey);\n }\n\n const args = [\n \"altool\",\n \"--upload-app\",\n \"-f\", options.filePath,\n \"-t\", options.platform ?? \"ios\",\n \"--apiKey\", options.apiKeyId,\n \"--apiIssuer\", options.apiIssuerId,\n ];\n\n const env = { ...process.env };\n if (keyDir) {\n env.API_PRIVATE_KEYS_DIR = keyDir;\n }\n\n return new Promise<{ success: boolean; output: string }>((resolve) => {\n const child = spawn(\"xcrun\", args, {\n env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n\n child.stdout.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n });\n\n child.stderr.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n });\n\n child.on(\"close\", async (code) => {\n if (keyDir) {\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await unlink(keyPath).catch(() => {});\n }\n resolve({ success: code === 0, output });\n });\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, readdir, stat } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Platform, ReleaseType } from \"../types/index.js\";\nimport { loadMetadata } from \"./metadata.js\";\n\nexport { loadMetadata } from \"./metadata.js\";\nexport type { LocalizedMetadata, MetadataSet } from \"./metadata.js\";\n\nexport interface DeliverOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n appVersion?: string;\n platform?: Platform;\n ipaPath?: string;\n pkgPath?: string;\n metadataPath?: string;\n screenshotsPath?: string;\n submitForReview?: boolean;\n automaticRelease?: boolean;\n releaseType?: ReleaseType;\n skipBinaryUpload?: boolean;\n skipMetadata?: boolean;\n skipScreenshots?: boolean;\n force?: boolean;\n apiKeyId?: string;\n apiIssuerId?: string;\n apiPrivateKey?: string;\n copyright?: string;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface DeliverResult {\n appId: string;\n versionId: string;\n submitted: boolean;\n}\n\nexport async function uploadToAppStore(options: DeliverOptions): Promise<DeliverResult> {\n const platform = options.platform ?? \"IOS\";\n\n // Find app\n const app = await options.client.apps.findByBundleId(options.bundleIdentifier);\n if (!app) throw new Error(`App not found: ${options.bundleIdentifier}`);\n\n // Find or create version\n const versions = await options.client.appStoreVersions.listForApp(app.id, {\n filter: { platform },\n });\n\n let version = versions.find(\n (v) =>\n v.attributes.appStoreState === \"PREPARE_FOR_SUBMISSION\" ||\n v.attributes.appStoreState === \"DEVELOPER_REJECTED\"\n );\n\n if (!version && options.appVersion) {\n version = await options.client.appStoreVersions.create({\n appId: app.id,\n versionString: options.appVersion,\n platform,\n releaseType: options.releaseType,\n });\n }\n\n if (!version) {\n throw new Error(\"No editable app store version found. Pass appVersion to create one.\");\n }\n\n // Upload metadata\n if (!options.skipMetadata && options.metadataPath && existsSync(options.metadataPath)) {\n await uploadMetadata({\n client: options.client,\n appId: app.id,\n versionId: version.id,\n metadataPath: options.metadataPath,\n });\n }\n\n // Set copyright\n if (options.copyright) {\n await options.client.appStoreVersions.update(version.id, {\n copyright: options.copyright,\n });\n }\n\n // Upload screenshots\n if (!options.skipScreenshots && options.screenshotsPath && existsSync(options.screenshotsPath)) {\n await uploadScreenshots({\n client: options.client,\n versionId: version.id,\n screenshotsPath: options.screenshotsPath,\n });\n }\n\n // Upload binary\n if (!options.skipBinaryUpload) {\n const binaryPath = options.ipaPath ?? options.pkgPath;\n if (binaryPath && options.apiKeyId && options.apiIssuerId) {\n const { uploadWithAltool } = await import(\"../xcode/upload.js\");\n await uploadWithAltool({\n filePath: binaryPath,\n apiKeyId: options.apiKeyId,\n apiIssuerId: options.apiIssuerId,\n apiPrivateKey: options.apiPrivateKey,\n onOutput: options.onOutput,\n });\n }\n }\n\n // Submit for review\n let submitted = false;\n if (options.submitForReview) {\n await submitForReview({\n client: options.client,\n appId: app.id,\n versionId: version.id,\n });\n submitted = true;\n }\n\n return { appId: app.id, versionId: version.id, submitted };\n}\n\nexport async function submitForReview(options: {\n client: AppStoreConnectClient;\n appId: string;\n versionId: string;\n}): Promise<void> {\n await options.client.reviewSubmissions.submitVersion(options.versionId);\n}\n\nexport async function uploadMetadata(options: {\n client: AppStoreConnectClient;\n appId: string;\n versionId: string;\n metadataPath: string;\n}): Promise<void> {\n const metadata = await loadMetadata(options.metadataPath);\n\n // Get existing localizations\n const existingLocs = await options.client.appStoreVersions.getLocalizations(options.versionId);\n\n for (const loc of metadata.localizations) {\n const existing = existingLocs.find((e) => e.attributes.locale === loc.locale);\n const attrs: Record<string, string | undefined> = {};\n if (loc.description) attrs.description = loc.description;\n if (loc.keywords) attrs.keywords = loc.keywords;\n if (loc.releaseNotes) attrs.whatsNew = loc.releaseNotes;\n if (loc.supportUrl) attrs.supportUrl = loc.supportUrl;\n if (loc.marketingUrl) attrs.marketingUrl = loc.marketingUrl;\n if (loc.promotionalText) attrs.promotionalText = loc.promotionalText;\n\n if (existing) {\n await options.client.appStoreVersions.updateLocalization(existing.id, attrs);\n } else {\n await options.client.appStoreVersions.createLocalization({\n versionId: options.versionId,\n locale: loc.locale,\n ...attrs,\n });\n }\n }\n\n // Update copyright\n if (metadata.copyright) {\n await options.client.appStoreVersions.update(options.versionId, {\n copyright: metadata.copyright,\n });\n }\n}\n\nexport async function uploadScreenshots(options: {\n client: AppStoreConnectClient;\n versionId: string;\n screenshotsPath: string;\n}): Promise<void> {\n const localizations = await options.client.appStoreVersions.getLocalizations(options.versionId);\n\n for (const loc of localizations) {\n const localeDir = join(options.screenshotsPath, loc.attributes.locale);\n if (!existsSync(localeDir)) continue;\n\n const sets = await options.client.appScreenshots.listSetsForLocalization(loc.id);\n const files = (await readdir(localeDir)).filter((f) =>\n [\".png\", \".jpg\", \".jpeg\"].includes(extname(f).toLowerCase())\n );\n\n for (const file of files) {\n const filePath = join(localeDir, file);\n const fileData = await readFile(filePath);\n const checksum = createHash(\"md5\").update(fileData).digest(\"hex\");\n\n // Determine display type from filename convention\n const displayType = detectDisplayType(file);\n if (!displayType) continue;\n\n // Find or create screenshot set\n let set = sets.find((s) => s.attributes.screenshotDisplayType === displayType);\n if (!set) {\n set = await options.client.appScreenshots.createSet({\n localizationId: loc.id,\n screenshotDisplayType: displayType,\n });\n }\n\n // Reserve, upload, commit\n const reserved = await options.client.appScreenshots.reserveScreenshot({\n setId: set.id,\n fileName: file,\n fileSize: fileData.length,\n });\n\n // Upload chunks\n const ops = reserved.attributes.uploadOperations;\n if (ops) {\n for (const op of ops) {\n const chunk = fileData.subarray(op.offset, op.offset + op.length);\n const headers: Record<string, string> = {};\n for (const h of op.requestHeaders) {\n headers[h.name] = h.value;\n }\n await fetch(op.url, { method: op.method, headers, body: chunk });\n }\n }\n\n await options.client.appScreenshots.commitScreenshot(reserved.id, {\n sourceFileChecksum: checksum,\n uploaded: true,\n });\n }\n }\n}\n\nfunction detectDisplayType(filename: string): string | null {\n const lower = filename.toLowerCase();\n if (lower.includes(\"6.7\") || lower.includes(\"iphone_67\")) return \"APP_IPHONE_67\";\n if (lower.includes(\"6.5\") || lower.includes(\"iphone_65\")) return \"APP_IPHONE_65\";\n if (lower.includes(\"5.5\") || lower.includes(\"iphone_55\")) return \"APP_IPHONE_55\";\n if (lower.includes(\"ipad_pro_3gen\") || lower.includes(\"12.9\")) return \"APP_IPAD_PRO_3GEN_129\";\n if (lower.includes(\"ipad_pro\") || lower.includes(\"ipad\")) return \"APP_IPAD_PRO_129\";\n return null;\n}\n","import type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { BundleId, App, BundleIdPlatform, CapabilityType } from \"../types/index.js\";\nimport type { CapabilitySettingInput } from \"../types/capability.js\";\n\nexport interface ProduceOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n appName: string;\n platform?: BundleIdPlatform;\n sku?: string;\n primaryLocale?: string;\n companyName?: string;\n enableServices?: CapabilityType[];\n}\n\n/**\n * Map from Fastlane's `produce` service name → App Store Connect\n * `capabilityType`. Ported 1:1 from `produce/lib/produce/service.rb`'s\n * `valid_services_for` list and `update` method, covering every service\n * that Fastlane supports.\n */\nexport const SERVICE_NAME_TO_CAPABILITY: Record<string, CapabilityType> = {\n access_wifi: \"ACCESS_WIFI_INFORMATION\",\n app_attest: \"APP_ATTEST\",\n // Fastlane uses singular `app_group` — see service.rb line 59 & 105.\n app_group: \"APP_GROUPS\",\n apple_pay: \"APPLE_PAY\",\n associated_domains: \"ASSOCIATED_DOMAINS\",\n auto_fill_credential: \"AUTOFILL_CREDENTIAL_PROVIDER\",\n car_play_audio_app: \"CARPLAY_PLAYABLE_CONTENT\",\n car_play_messaging_app: \"CARPLAY_MESSAGING\",\n car_play_navigation_app: \"CARPLAY_NAVIGATION\",\n car_play_voip_calling_app: \"CARPLAY_VOIP\",\n class_kit: \"CLASSKIT\",\n declared_age_range: \"DECLARED_AGE_RANGE\",\n icloud: \"ICLOUD\",\n critical_alerts: \"CRITICAL_ALERTS\",\n custom_network_protocol: \"NETWORK_CUSTOM_PROTOCOL\",\n data_protection: \"DATA_PROTECTION\",\n extended_virtual_address_space: \"EXTENDED_VIRTUAL_ADDRESSING\",\n file_provider_testing_mode: \"FILEPROVIDER_TESTINGMODE\",\n family_controls: \"FAMILY_CONTROLS\",\n fonts: \"FONT_INSTALLATION\",\n game_center: \"GAME_CENTER\",\n health_kit: \"HEALTHKIT\",\n hls_interstitial_preview: \"HLS_INTERSTITIAL_PREVIEW\",\n home_kit: \"HOMEKIT\",\n hotspot: \"HOT_SPOT\",\n hotspot_helper: \"HOTSPOT_HELPER_MANAGED\",\n in_app_purchase: \"IN_APP_PURCHASE\",\n inter_app_audio: \"INTER_APP_AUDIO\",\n low_latency_hls: \"COREMEDIA_HLS_LOW_LATENCY\",\n managed_associated_domains: \"MDM_MANAGED_ASSOCIATED_DOMAINS\",\n maps: \"MAPS\",\n multipath: \"MULTIPATH\",\n network_extension: \"NETWORK_EXTENSIONS\",\n nfc_tag_reading: \"NFC_TAG_READING\",\n personal_vpn: \"PERSONAL_VPN\",\n push_notification: \"PUSH_NOTIFICATIONS\",\n sign_in_with_apple: \"APPLE_ID_AUTH\",\n siri_kit: \"SIRIKIT\",\n system_extension: \"SYSTEM_EXTENSION_INSTALL\",\n user_management: \"USER_MANAGEMENT\",\n wallet: \"WALLET\",\n wireless_accessory: \"WIRELESS_ACCESSORY_CONFIGURATION\",\n driver_kit: \"DRIVERKIT\",\n driver_kit_endpoint_security: \"DRIVERKIT_ENDPOINT_SECURITY\",\n driver_kit_family_hid_device: \"DRIVERKIT_HID_DEVICE\",\n driver_kit_family_networking: \"DRIVERKIT_NETWORKING\",\n driver_kit_family_serial: \"DRIVERKIT_SERIAL\",\n driver_kit_hid_event_service: \"DRIVERKIT_HID_EVENT_SERVICE\",\n driver_kit_transport_hid: \"DRIVERKIT_HID\",\n multitasking_camera_access: \"IPAD_CAMERA_MULTITASKING\",\n sf_universal_link_api: \"SFUNIVERSALLINK_API\",\n vp9_decoder: \"VP9_DECODER\",\n music_kit: \"MUSIC_KIT\",\n shazam_kit: \"SHAZAM_KIT\",\n communication_notifications: \"USERNOTIFICATIONS_COMMUNICATION\",\n group_activities: \"GROUP_ACTIVITIES\",\n health_kit_estimate_recalibration: \"HEALTHKIT_RECALIBRATE_ESTIMATES\",\n time_sensitive_notifications: \"USERNOTIFICATIONS_TIMESENSITIVE\",\n};\n\n/**\n * Build the `settings` payload for a capability whose service value is\n * more than a plain boolean. Mirrors Fastlane's\n * `Produce::Service#build_settings_for` applied per-service.\n *\n * Returns `undefined` when the service doesn't carry settings or the\n * value is just `true`/`false`.\n */\nexport function buildCapabilitySettings(\n serviceName: string,\n value: string | boolean\n): CapabilitySettingInput[] | undefined {\n if (value === true || value === false) return undefined;\n\n const wrap = (\n key: string,\n optionKey: string\n ): CapabilitySettingInput[] => [{ key, options: [{ key: optionKey }] }];\n\n switch (serviceName) {\n case \"data_protection\":\n switch (value) {\n case \"complete\":\n return wrap(\"DATA_PROTECTION_PERMISSION_LEVEL\", \"COMPLETE_PROTECTION\");\n case \"unlessopen\":\n return wrap(\"DATA_PROTECTION_PERMISSION_LEVEL\", \"PROTECTED_UNLESS_OPEN\");\n case \"untilfirstauth\":\n return wrap(\n \"DATA_PROTECTION_PERMISSION_LEVEL\",\n \"PROTECTED_UNTIL_FIRST_USER_AUTH\"\n );\n default:\n throw new Error(\n `Unknown value for data_protection: '${value}'. Valid values: 'complete', 'unlessopen', 'untilfirstauth'`\n );\n }\n case \"icloud\":\n switch (value) {\n case \"xcode6_compatible\":\n return wrap(\"ICLOUD_VERSION\", \"XCODE_6\");\n case \"xcode5_compatible\":\n return wrap(\"ICLOUD_VERSION\", \"XCODE_5\");\n default:\n throw new Error(\n `Unknown value for icloud: '${value}'. Valid values: 'xcode6_compatible', 'xcode5_compatible'`\n );\n }\n case \"game_center\":\n switch (value) {\n case \"mac\":\n return wrap(\"GAME_CENTER_SETTING\", \"GAME_CENTER_MAC\");\n case \"ios\":\n return wrap(\"GAME_CENTER_SETTING\", \"GAME_CENTER_IOS\");\n default:\n throw new Error(\n `Unknown value for game_center: '${value}'. Valid values: 'ios', 'mac'`\n );\n }\n case \"sign_in_with_apple\":\n return wrap(\"APPLE_ID_AUTH_APP_CONSENT\", \"PRIMARY_APP_CONSENT\");\n default:\n return undefined;\n }\n}\n\nexport async function registerBundleId(options: {\n client: AppStoreConnectClient;\n identifier: string;\n name: string;\n platform?: BundleIdPlatform;\n}): Promise<BundleId> {\n // Check if already exists (idempotent)\n const existing = await options.client.bundleIds.find(options.identifier);\n if (existing) return existing;\n\n return options.client.bundleIds.create({\n identifier: options.identifier,\n name: options.name,\n platform: options.platform ?? \"IOS\",\n });\n}\n\nexport async function addCapability(options: {\n client: AppStoreConnectClient;\n bundleIdId: string;\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n}): Promise<void> {\n await options.client.capabilities.enable({\n bundleIdId: options.bundleIdId,\n capabilityType: options.capabilityType,\n settings: options.settings,\n });\n}\n\nexport async function removeCapability(options: {\n client: AppStoreConnectClient;\n capabilityId: string;\n}): Promise<void> {\n await options.client.capabilities.disable(options.capabilityId);\n}\n\nexport async function listCapabilities(options: {\n client: AppStoreConnectClient;\n bundleIdId: string;\n}) {\n return options.client.capabilities.listForBundleId(options.bundleIdId);\n}\n\nexport async function enableServices(options: {\n client: AppStoreConnectClient;\n bundleIdId: string;\n /**\n * Service names (Fastlane style, e.g. `data_protection`, `icloud`).\n * Pass either a plain list of names or a record of name → value, where\n * the value either is `true` or one of the per-service variants handled\n * by `buildCapabilitySettings`.\n */\n services: string[] | Record<string, string | boolean>;\n}): Promise<void> {\n const entries: Array<[string, string | boolean]> = Array.isArray(\n options.services\n )\n ? options.services.map((s) => [s, true])\n : Object.entries(options.services);\n\n for (const [service, value] of entries) {\n if (value === false) continue;\n const capType = SERVICE_NAME_TO_CAPABILITY[service];\n if (!capType) continue;\n const settings = buildCapabilitySettings(service, value);\n await addCapability({\n client: options.client,\n bundleIdId: options.bundleIdId,\n capabilityType: capType,\n settings,\n });\n }\n}\n\nexport async function createApp(options: ProduceOptions): Promise<App> {\n // Check if app already exists\n const existing = await options.client.apps.findByBundleId(options.bundleIdentifier);\n if (existing) return existing;\n\n // Register bundle ID\n const bundleId = await registerBundleId({\n client: options.client,\n identifier: options.bundleIdentifier,\n name: options.appName,\n platform: options.platform,\n });\n\n // Enable services\n if (options.enableServices) {\n for (const service of options.enableServices) {\n await addCapability({\n client: options.client,\n bundleIdId: bundleId.id,\n capabilityType: service,\n });\n }\n }\n\n // Create app on App Store Connect\n return options.client.apps.create({\n bundleIdentifier: options.bundleIdentifier,\n bundleIdId: bundleId.id,\n appName: options.appName,\n sku: options.sku ?? `${options.bundleIdentifier}.${Date.now()}`,\n primaryLocale: options.primaryLocale,\n });\n}\n","import { registerAction } from \"../index.js\";\nimport type { AppStoreConnectClient } from \"../../client/index.js\";\n\nregisterAction({\n name: \"upload_to_testflight\",\n aliases: [\"pilot\", \"testflight\"],\n description: \"Upload a build to TestFlight\",\n async run(params, ctx) {\n const pilot = await import(\"../../pilot/index.js\");\n\n // Upload if IPA provided\n const ipaPath = (params.ipa ?? ctx.get(\"IPA_OUTPUT_PATH\")) as string | undefined;\n if (ipaPath && params.api_key_id) {\n const uploadResult = await pilot.uploadToTestFlight({\n ipaPath,\n apiKeyId: params.api_key_id as string,\n apiIssuerId: params.api_issuer_id as string,\n apiPrivateKey: params.api_private_key as string,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n if (!uploadResult.success) {\n throw new Error(`Upload failed: ${uploadResult.output.slice(-500)}`);\n }\n }\n\n // Wait for processing\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (client && params.bundle_id && params.build_number) {\n const build = await pilot.waitForProcessing(client, {\n bundleId: params.bundle_id as string,\n buildNumber: String(params.build_number),\n appVersion: (params.app_version ?? \"1.0\") as string,\n });\n ctx.set(\"PILOT_BUILD_ID\", build.id);\n\n // Distribute\n const groups = (params.groups ?? params.beta_groups) as string[] | undefined;\n if (groups && groups.length > 0) {\n await pilot.distributeToGroups({\n client,\n buildId: build.id,\n groupNames: groups,\n changelog: params.changelog as string | undefined,\n });\n }\n\n // Changelog\n if (params.changelog && !groups) {\n await pilot.setChangelog({\n client,\n buildId: build.id,\n changelog: params.changelog as string,\n locale: params.locale as string | undefined,\n });\n }\n\n return build;\n }\n\n return { uploaded: true };\n },\n});\n\nregisterAction({\n name: \"upload_to_app_store\",\n aliases: [\"deliver\", \"appstore\"],\n description: \"Upload metadata and binary to App Store Connect\",\n async run(params, ctx) {\n const { uploadToAppStore } = await import(\"../../deliver/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"deliver: client is required\");\n return uploadToAppStore({\n client,\n bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n appVersion: params.app_version as string | undefined,\n ipaPath: (params.ipa ?? ctx.get(\"IPA_OUTPUT_PATH\")) as string | undefined,\n metadataPath: params.metadata_path as string | undefined,\n screenshotsPath: params.screenshots_path as string | undefined,\n submitForReview: params.submit_for_review as boolean | undefined,\n skipBinaryUpload: params.skip_binary_upload as boolean | undefined,\n skipMetadata: params.skip_metadata as boolean | undefined,\n skipScreenshots: params.skip_screenshots as boolean | undefined,\n force: params.force as boolean | undefined,\n apiKeyId: params.api_key_id as string | undefined,\n apiIssuerId: params.api_issuer_id as string | undefined,\n apiPrivateKey: params.api_private_key as string | undefined,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n },\n});\n\nregisterAction({\n name: \"produce\",\n aliases: [\"create_app_online\"],\n description: \"Register a new app on Apple Developer Portal and App Store Connect\",\n async run(params, ctx) {\n const { createApp } = await import(\"../../produce/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"produce: client is required\");\n return createApp({\n client,\n bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n appName: (params.app_name ?? params.name) as string,\n sku: params.sku as string | undefined,\n primaryLocale: params.primary_locale as string | undefined,\n });\n },\n});\n","export interface TestCommandOptions {\n scheme?: string;\n workspace?: string;\n project?: string;\n destination?: string;\n devices?: string[];\n testPlan?: string;\n onlyTesting?: string[];\n skipTesting?: string[];\n configuration?: string;\n derivedDataPath?: string;\n resultBundlePath?: string;\n codeCoverage?: boolean;\n xcargs?: string;\n clean?: boolean;\n // ── Parallel testing (Fastlane scan parity) ──────────────────────────────\n /** Enable `-parallel-testing-enabled YES`. */\n parallelTesting?: boolean;\n /** Sets `-parallel-testing-worker-count`. */\n concurrentWorkers?: number;\n /** Sets `-maximum-concurrent-test-simulator-destinations`. */\n maxConcurrentSimulators?: number;\n /** Explicitly disable concurrent destinations (`-disable-concurrent-destination-testing`). */\n disableConcurrentTesting?: boolean;\n // ── Sanitizers ───────────────────────────────────────────────────────────\n addressSanitizer?: boolean;\n threadSanitizer?: boolean;\n undefinedBehaviorSanitizer?: boolean;\n}\n\nexport function buildTestCommand(options: TestCommandOptions): string[] {\n const args: string[] = [];\n\n if (options.clean) args.push(\"clean\");\n args.push(\"test\");\n\n if (options.workspace) args.push(\"-workspace\", options.workspace);\n else if (options.project) args.push(\"-project\", options.project);\n\n if (options.scheme) args.push(\"-scheme\", options.scheme);\n\n // Destination\n if (options.destination) {\n args.push(\"-destination\", options.destination);\n } else if (options.devices && options.devices.length > 0) {\n for (const device of options.devices) {\n args.push(\"-destination\", `platform=iOS Simulator,name=${device}`);\n }\n }\n\n if (options.testPlan) args.push(\"-testPlan\", options.testPlan);\n if (options.configuration) args.push(\"-configuration\", options.configuration);\n if (options.derivedDataPath) args.push(\"-derivedDataPath\", options.derivedDataPath);\n if (options.resultBundlePath) args.push(\"-resultBundlePath\", options.resultBundlePath);\n\n if (options.codeCoverage) args.push(\"-enableCodeCoverage\", \"YES\");\n\n if (options.onlyTesting) {\n for (const test of options.onlyTesting) {\n args.push(\"-only-testing:\" + test);\n }\n }\n if (options.skipTesting) {\n for (const test of options.skipTesting) {\n args.push(\"-skip-testing:\" + test);\n }\n }\n\n // Parallel testing flags (xcodebuild native, not xcargs)\n if (options.parallelTesting !== undefined) {\n args.push(\"-parallel-testing-enabled\", options.parallelTesting ? \"YES\" : \"NO\");\n }\n if (options.concurrentWorkers !== undefined) {\n args.push(\"-parallel-testing-worker-count\", String(options.concurrentWorkers));\n }\n if (options.maxConcurrentSimulators !== undefined) {\n args.push(\n \"-maximum-concurrent-test-simulator-destinations\",\n String(options.maxConcurrentSimulators)\n );\n }\n if (options.disableConcurrentTesting) {\n args.push(\"-disable-concurrent-destination-testing\");\n }\n\n // Runtime sanitizers\n if (options.addressSanitizer !== undefined) {\n args.push(\"-enableAddressSanitizer\", options.addressSanitizer ? \"YES\" : \"NO\");\n }\n if (options.threadSanitizer !== undefined) {\n args.push(\"-enableThreadSanitizer\", options.threadSanitizer ? \"YES\" : \"NO\");\n }\n if (options.undefinedBehaviorSanitizer !== undefined) {\n args.push(\n \"-enableUndefinedBehaviorSanitizer\",\n options.undefinedBehaviorSanitizer ? \"YES\" : \"NO\"\n );\n }\n\n if (options.xcargs) args.push(...options.xcargs.split(/\\s+/));\n\n return args;\n}\n","export interface FailedTest {\n target: string;\n suite: string;\n testCase: string;\n onlyTestingArg: string;\n}\n\nexport function parseFailedTests(output: string): FailedTest[] {\n const results: FailedTest[] = [];\n // Strip ANSI color codes\n const clean = output.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n\n // Look for \"Failing tests:\" section\n const failingMatch = clean.match(/Failing tests:\\s*\\n([\\s\\S]*?)(?:\\n\\n|\\n\\*\\*|$)/);\n if (!failingMatch) return results;\n\n const lines = failingMatch[1].split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"*\")) continue;\n\n // Format: -[TestSuite testMethod] or TestTarget.TestSuite/testMethod\n const bracketMatch = trimmed.match(/-\\[(\\w+)\\s+(\\w+)\\]/);\n if (bracketMatch) {\n results.push({\n target: \"\",\n suite: bracketMatch[1],\n testCase: bracketMatch[2],\n onlyTestingArg: `${bracketMatch[1]}/${bracketMatch[2]}`,\n });\n continue;\n }\n\n const slashMatch = trimmed.match(/^(\\w+)\\.(\\w+)\\/(\\w+)$/);\n if (slashMatch) {\n results.push({\n target: slashMatch[1],\n suite: slashMatch[2],\n testCase: slashMatch[3],\n onlyTestingArg: `${slashMatch[1]}/${slashMatch[2]}/${slashMatch[3]}`,\n });\n }\n }\n\n return results;\n}\n","import { spawn } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { mkdirSync, existsSync } from \"node:fs\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport { buildTestCommand } from \"./command.js\";\nimport { parseFailedTests } from \"./retry.js\";\n\nexport type { FailedTest } from \"./retry.js\";\nexport { buildTestCommand } from \"./command.js\";\nexport { parseFailedTests } from \"./retry.js\";\n\nexport interface ScanOptions {\n scheme?: string;\n workspace?: string;\n project?: string;\n devices?: string[];\n testPlan?: string;\n onlyTesting?: string[];\n skipTesting?: string[];\n configuration?: string;\n outputDirectory?: string;\n clean?: boolean;\n codeCoverage?: boolean;\n derivedDataPath?: string;\n resultBundlePath?: string;\n maxRetries?: number;\n xcargs?: string;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface TestResult {\n success: boolean;\n totalTests: number;\n failures: number;\n skipped: number;\n retries: number;\n duration: number;\n reportPaths: string[];\n output: string;\n}\n\nexport async function runTests(options: ScanOptions): Promise<TestResult> {\n requireMacOS(\"scan\");\n\n const outputDir = options.outputDirectory ?? join(process.cwd(), \"test_output\");\n mkdirSync(outputDir, { recursive: true });\n\n const resultBundlePath = options.resultBundlePath ?? join(outputDir, \"result.xcresult\");\n const maxRetries = options.maxRetries ?? 0;\n let retryCount = 0;\n let lastOutput = \"\";\n let currentOnlyTesting = options.onlyTesting;\n\n const startTime = Date.now();\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const args = buildTestCommand({\n ...options,\n resultBundlePath: attempt === 0 ? resultBundlePath : `${resultBundlePath}-retry-${attempt}`,\n onlyTesting: currentOnlyTesting,\n });\n\n const result = await runXcodebuild(args, options.onOutput);\n lastOutput = result.output;\n\n if (result.exitCode === 0) {\n // Tests passed\n break;\n }\n\n if (attempt < maxRetries) {\n // Parse failures for retry\n const failed = parseFailedTests(result.output);\n if (failed.length === 0) break; // No parseable failures\n\n currentOnlyTesting = failed.map((f) => f.onlyTestingArg);\n retryCount++;\n }\n }\n\n // Parse test counts from output\n const counts = parseTestCounts(lastOutput);\n const duration = (Date.now() - startTime) / 1000;\n\n return {\n success: counts.failures === 0,\n totalTests: counts.total,\n failures: counts.failures,\n skipped: counts.skipped,\n retries: retryCount,\n duration,\n reportPaths: existsSync(resultBundlePath) ? [resultBundlePath] : [],\n output: lastOutput,\n };\n}\n\nfunction runXcodebuild(\n args: string[],\n onOutput?: (chunk: string) => void\n): Promise<{ exitCode: number; output: string }> {\n return new Promise((resolve) => {\n const child = spawn(\"xcodebuild\", args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n let output = \"\";\n\n child.stdout.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n onOutput?.(chunk);\n });\n child.stderr.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n onOutput?.(chunk);\n });\n child.on(\"close\", (code) => resolve({ exitCode: code ?? 1, output }));\n });\n}\n\nfunction parseTestCounts(output: string): { total: number; failures: number; skipped: number } {\n // Match: \"Executed N tests, with M failures (X unexpected) in Y (Z) seconds\"\n const match = output.match(/Executed (\\d+) tests?, with (\\d+) failures?/);\n if (match) {\n return {\n total: parseInt(match[1], 10),\n failures: parseInt(match[2], 10),\n skipped: 0,\n };\n }\n return { total: 0, failures: 0, skipped: 0 };\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SimDevice {\n udid: string;\n name: string;\n state: \"Booted\" | \"Shutdown\" | \"Shutting Down\" | \"Creating\";\n isAvailable: boolean;\n runtime: string;\n deviceTypeIdentifier: string;\n}\n\ninterface SimctlDevicesJson {\n devices: Record<\n string,\n Array<{\n udid: string;\n name: string;\n state: string;\n isAvailable: boolean;\n deviceTypeIdentifier: string;\n }>\n >;\n}\n\n// ── Simulator Listing & Lookup ─────────────────────────────────────────────\n\nexport async function listSimulators(): Promise<SimDevice[]> {\n requireMacOS(\"Simulator management\");\n const { stdout } = await execFileAsync(\"xcrun\", [\"simctl\", \"list\", \"devices\", \"-j\"]);\n const parsed: SimctlDevicesJson = JSON.parse(stdout);\n const devices: SimDevice[] = [];\n for (const [runtimeId, runtimeDevices] of Object.entries(parsed.devices)) {\n for (const dev of runtimeDevices) {\n devices.push({\n udid: dev.udid,\n name: dev.name,\n state: dev.state as SimDevice[\"state\"],\n isAvailable: dev.isAvailable,\n runtime: runtimeId,\n deviceTypeIdentifier: dev.deviceTypeIdentifier,\n });\n }\n }\n return devices;\n}\n\nexport async function findDevice(\n deviceName: string,\n runtimeFilter?: string,\n): Promise<SimDevice | null> {\n const devices = await listSimulators();\n const candidates = devices.filter((d) => {\n if (!d.isAvailable) return false;\n if (d.name !== deviceName) return false;\n if (runtimeFilter && !d.runtime.includes(runtimeFilter)) return false;\n return true;\n });\n if (candidates.length === 0) return null;\n const booted = candidates.find((d) => d.state === \"Booted\");\n return booted ?? candidates[0];\n}\n\n// ── Boot / Shutdown / Erase ────────────────────────────────────────────────\n\nexport async function bootSimulator(udid: string): Promise<void> {\n requireMacOS(\"Simulator management\");\n const devices = await listSimulators();\n const device = devices.find((d) => d.udid === udid);\n if (device?.state === \"Booted\") return;\n await execFileAsync(\"xcrun\", [\"simctl\", \"boot\", udid]);\n const deadline = Date.now() + 30_000;\n while (Date.now() < deadline) {\n const refreshed = await listSimulators();\n const current = refreshed.find((d) => d.udid === udid);\n if (current?.state === \"Booted\") return;\n await new Promise((r) => setTimeout(r, 1000));\n }\n}\n\nexport async function shutdownAll(): Promise<void> {\n requireMacOS(\"Simulator management\");\n await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", \"all\"]);\n}\n\nexport async function eraseSimulator(udid: string): Promise<void> {\n requireMacOS(\"Simulator management\");\n const devices = await listSimulators();\n const device = devices.find((d) => d.udid === udid);\n if (device?.state === \"Booted\") {\n await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", udid]);\n }\n await execFileAsync(\"xcrun\", [\"simctl\", \"erase\", udid]);\n}\n\n// ── Locale / Language ──────────────────────────────────────────────────────\n\nexport async function localizeSimulator(\n udid: string,\n language: string,\n locale?: string,\n): Promise<void> {\n requireMacOS(\"Simulator management\");\n const deviceDataPath = getDeviceDataPath(udid);\n const prefsDir = join(deviceDataPath, \"data\", \"Library\", \"Preferences\");\n const prefsFile = join(prefsDir, \".GlobalPreferences.plist\");\n if (!existsSync(prefsDir)) {\n mkdirSync(prefsDir, { recursive: true });\n }\n const effectiveLocale = locale ?? language.replace(\"-\", \"_\");\n const plistXml = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">',\n '<plist version=\"1.0\">',\n \"<dict>\",\n \" <key>AppleLanguages</key>\",\n \" <array>\",\n \" <string>\" + escapeXml(language) + \"</string>\",\n \" </array>\",\n \" <key>AppleLocale</key>\",\n \" <string>\" + escapeXml(effectiveLocale) + \"</string>\",\n \" <key>AppleKeyboards</key>\",\n \" <array>\",\n \" <string>\" + escapeXml(effectiveLocale) + \"@sw=QWERTY;hw=Automatic</string>\",\n \" </array>\",\n \" <key>AppleKeyboardsExpanded</key>\",\n \" <integer>1</integer>\",\n \"</dict>\",\n \"</plist>\",\n ].join(\"\\n\");\n writeFileSync(prefsFile, plistXml, \"utf-8\");\n try {\n await execFileAsync(\"plutil\", [\"-convert\", \"binary1\", prefsFile]);\n } catch {\n // XML plist is still readable\n }\n}\n\n// ── UI Customization ───────────────────────────────────────────────────────\n\nexport async function setInterfaceStyle(\n udid: string,\n style: \"light\" | \"dark\",\n): Promise<void> {\n requireMacOS(\"Simulator management\");\n const appearance = style === \"dark\" ? \"dark\" : \"light\";\n await execFileAsync(\"xcrun\", [\"simctl\", \"ui\", udid, \"appearance\", appearance]);\n}\n\nexport async function overrideStatusBar(\n udid: string,\n options?: {\n time?: string;\n batteryLevel?: number;\n batteryState?: \"charged\" | \"charging\" | \"discharging\";\n wifiMode?: \"active\" | \"searching\" | \"failed\";\n cellularMode?: \"active\" | \"searching\" | \"failed\" | \"notSupported\";\n dataNetwork?: \"wifi\" | \"3g\" | \"4g\" | \"lte\" | \"lte-a\" | \"lte+\" | \"5g\" | \"5g+\" | \"5g-uwb\";\n },\n): Promise<void> {\n requireMacOS(\"Simulator management\");\n const args = [\n \"simctl\", \"status_bar\", udid, \"override\",\n \"--time\", options?.time ?? \"9:41\",\n \"--batteryLevel\", String(options?.batteryLevel ?? 100),\n \"--batteryState\", options?.batteryState ?? \"charged\",\n \"--wifiMode\", options?.wifiMode ?? \"active\",\n \"--wifiBars\", \"3\",\n \"--cellularMode\", options?.cellularMode ?? \"active\",\n \"--cellularBars\", \"4\",\n ];\n if (options?.dataNetwork) {\n args.push(\"--dataNetwork\", options.dataNetwork);\n }\n await execFileAsync(\"xcrun\", args);\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction getDeviceDataPath(udid: string): string {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? \"/tmp\";\n return join(home, \"Library\", \"Developer\", \"CoreSimulator\", \"Devices\", udid);\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n","import { execFile, spawn } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, mkdirSync, readdirSync, copyFileSync } from \"node:fs\";\nimport { join, basename, extname } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport {\n findDevice,\n bootSimulator,\n shutdownAll,\n localizeSimulator,\n overrideStatusBar,\n eraseSimulator,\n} from \"./simulator.js\";\nimport type { SimDevice } from \"./simulator.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Re-export simulator utilities ──────────────────────────────────────────\n\nexport {\n listSimulators,\n findDevice,\n bootSimulator,\n shutdownAll,\n eraseSimulator,\n localizeSimulator,\n setInterfaceStyle,\n overrideStatusBar,\n} from \"./simulator.js\";\n\nexport type { SimDevice } from \"./simulator.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SnapshotOptions {\n scheme?: string;\n workspace?: string;\n project?: string;\n devices: string[];\n languages: string[];\n outputDirectory?: string;\n clearPreviousScreenshots?: boolean;\n launchArguments?: string[];\n concurrent?: boolean;\n numberOfRetries?: number;\n darkMode?: boolean;\n overrideStatusBar?: boolean;\n eraseSimulatorBeforeRun?: boolean;\n derivedDataPath?: string;\n testPlan?: string;\n configuration?: string;\n xcargs?: string;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface ScreenshotResult {\n success: boolean;\n screenshots: Record<string, Record<string, string[]>>;\n failedDevices: string[];\n}\n\n// ── Main Entry Point ───────────────────────────────────────────────────────\n\n/**\n * Capture screenshots across a device x language matrix.\n *\n * Mirrors Fastlane snapshot's runner:\n * 1. Validate macOS\n * 2. Build device x language matrix\n * 3. For each combination: boot sim, set locale, run xcodebuild test, collect screenshots\n * 4. Return aggregated ScreenshotResult\n */\nexport async function captureScreenshots(\n options: SnapshotOptions,\n): Promise<ScreenshotResult> {\n requireMacOS(\"Screenshot capture\");\n\n // Validate required options\n if (!options.scheme && !options.workspace && !options.project) {\n throw new Error(\n \"At least one of scheme, workspace, or project must be specified\",\n );\n }\n if (options.devices.length === 0) {\n throw new Error(\"At least one device must be specified\");\n }\n if (options.languages.length === 0) {\n throw new Error(\"At least one language must be specified\");\n }\n\n const outputDir = options.outputDirectory ?? join(process.cwd(), \"screenshots\");\n const retries = options.numberOfRetries ?? 1;\n\n // Clear previous screenshots if requested\n if (options.clearPreviousScreenshots && existsSync(outputDir)) {\n const { rm } = await import(\"node:fs/promises\");\n await rm(outputDir, { recursive: true, force: true });\n }\n\n mkdirSync(outputDir, { recursive: true });\n\n const screenshots: Record<string, Record<string, string[]>> = {};\n const failedDevices: string[] = [];\n\n // Build the device x language matrix\n const matrix = buildMatrix(options.devices, options.languages);\n\n if (options.concurrent) {\n // Run all combinations in parallel\n const results = await Promise.allSettled(\n matrix.map((entry) =>\n runSingleCombination(entry, options, outputDir, retries),\n ),\n );\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const entry = matrix[i];\n if (result.status === \"fulfilled\") {\n mergeScreenshots(screenshots, result.value);\n } else {\n const key = entry.device + \" / \" + entry.language;\n failedDevices.push(key);\n }\n }\n } else {\n // Run sequentially\n for (const entry of matrix) {\n try {\n const result = await runSingleCombination(\n entry,\n options,\n outputDir,\n retries,\n );\n mergeScreenshots(screenshots, result);\n } catch {\n const key = entry.device + \" / \" + entry.language;\n failedDevices.push(key);\n }\n }\n }\n\n return {\n success: failedDevices.length === 0,\n screenshots,\n failedDevices,\n };\n}\n\n// ── Internal: Matrix Construction ──────────────────────────────────────────\n\ninterface MatrixEntry {\n device: string;\n language: string;\n}\n\nfunction buildMatrix(devices: string[], languages: string[]): MatrixEntry[] {\n const entries: MatrixEntry[] = [];\n for (const device of devices) {\n for (const language of languages) {\n entries.push({ device, language });\n }\n }\n return entries;\n}\n\n// ── Internal: Single Combination Runner ────────────────────────────────────\n\nasync function runSingleCombination(\n entry: MatrixEntry,\n options: SnapshotOptions,\n outputDir: string,\n retries: number,\n): Promise<Record<string, Record<string, string[]>>> {\n const { device: deviceName, language } = entry;\n\n // Find the simulator device\n const simDevice = await findDevice(deviceName);\n if (!simDevice) {\n throw new Error(\"Simulator device not found: \" + deviceName);\n }\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < retries; attempt++) {\n try {\n return await runOnSimulator(simDevice, language, options, outputDir);\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n options.onOutput?.(\n \"Attempt \" + (attempt + 1) + \" failed for \" + deviceName + \" / \" + language + \": \" + lastError.message + \"\\n\",\n );\n }\n }\n\n throw lastError ?? new Error(\"All retries exhausted\");\n}\n\nasync function runOnSimulator(\n simDevice: SimDevice,\n language: string,\n options: SnapshotOptions,\n outputDir: string,\n): Promise<Record<string, Record<string, string[]>>> {\n const udid = simDevice.udid;\n const deviceName = simDevice.name;\n\n // Erase simulator if requested\n if (options.eraseSimulatorBeforeRun) {\n await eraseSimulator(udid);\n }\n\n // Shut down, localize, then boot\n try {\n await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", udid]);\n } catch {\n // May already be shutdown\n }\n\n await localizeSimulator(udid, language);\n await bootSimulator(udid);\n\n // Override status bar for clean screenshots\n if (options.overrideStatusBar !== false) {\n try {\n await overrideStatusBar(udid);\n } catch {\n // Status bar override may fail on older simulators\n }\n }\n\n // Set dark mode if requested\n if (options.darkMode) {\n try {\n const { setInterfaceStyle } = await import(\"./simulator.js\");\n await setInterfaceStyle(udid, \"dark\");\n } catch {\n // Dark mode may not be available\n }\n }\n\n // Determine the derived data path (used to find screenshots)\n const derivedDataPath =\n options.derivedDataPath ??\n join(outputDir, \".derived-data\", deviceName + \"-\" + language);\n mkdirSync(derivedDataPath, { recursive: true });\n\n // Run xcodebuild test\n const exitCode = await runXcodebuildTest(\n udid,\n derivedDataPath,\n options,\n );\n\n if (exitCode !== 0 && exitCode !== 65) {\n // Exit code 65 = test failures but screenshots may still exist\n throw new Error(\n \"xcodebuild test failed with exit code \" + exitCode,\n );\n }\n\n // Collect screenshots from derived data and the simulator's data dir\n const deviceOutputDir = join(outputDir, deviceName, language);\n mkdirSync(deviceOutputDir, { recursive: true });\n\n const collectedPaths = collectScreenshots(derivedDataPath, deviceOutputDir);\n\n // Also collect from the simulator's screenshot directory\n const simScreenshotDir = getSimulatorScreenshotDir(udid);\n if (existsSync(simScreenshotDir)) {\n const simPaths = collectScreenshots(simScreenshotDir, deviceOutputDir);\n collectedPaths.push(...simPaths);\n }\n\n const result: Record<string, Record<string, string[]>> = {};\n if (!result[deviceName]) result[deviceName] = {};\n result[deviceName][language] = collectedPaths;\n\n return result;\n}\n\n// ── Internal: xcodebuild test ──────────────────────────────────────────────\n\nfunction runXcodebuildTest(\n udid: string,\n derivedDataPath: string,\n options: SnapshotOptions,\n): Promise<number> {\n return new Promise((resolve) => {\n const args = buildXcodebuildArgs(udid, derivedDataPath, options);\n\n const proc = spawn(\"xcodebuild\", args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n\n proc.stdout.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n output += text;\n options.onOutput?.(text);\n });\n\n proc.stderr.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n output += text;\n options.onOutput?.(text);\n });\n\n proc.on(\"close\", (code) => {\n resolve(code ?? 1);\n });\n\n proc.on(\"error\", () => {\n resolve(1);\n });\n });\n}\n\nfunction buildXcodebuildArgs(\n udid: string,\n derivedDataPath: string,\n options: SnapshotOptions,\n): string[] {\n const args: string[] = [];\n\n if (options.workspace) {\n args.push(\"-workspace\", options.workspace);\n } else if (options.project) {\n args.push(\"-project\", options.project);\n }\n\n if (options.scheme) {\n args.push(\"-scheme\", options.scheme);\n }\n\n if (options.configuration) {\n args.push(\"-configuration\", options.configuration);\n }\n\n args.push(\n \"-destination\",\n \"platform=iOS Simulator,id=\" + udid,\n \"-derivedDataPath\",\n derivedDataPath,\n \"test\",\n );\n\n if (options.testPlan) {\n args.push(\"-testPlan\", options.testPlan);\n }\n\n // Append launch arguments as build settings\n if (options.launchArguments && options.launchArguments.length > 0) {\n const launchArgsStr = options.launchArguments\n .map((a) => \"'\" + a + \"'\")\n .join(\" \");\n args.push(\"SNAPSHOT_LAUNCH_ARGUMENTS=\" + launchArgsStr);\n }\n\n if (options.xcargs) {\n // Split xcargs by spaces (simple split, doesn't handle quoted strings)\n args.push(...options.xcargs.split(/\\s+/).filter(Boolean));\n }\n\n return args;\n}\n\n// ── Internal: Screenshot Collection ────────────────────────────────────────\n\nfunction collectScreenshots(\n sourceDir: string,\n destDir: string,\n): string[] {\n const collected: string[] = [];\n\n if (!existsSync(sourceDir)) return collected;\n\n const screenshotExtensions = new Set([\".png\", \".jpg\", \".jpeg\"]);\n\n function walk(dir: string): void {\n let entries: string[];\n try {\n entries = readdirSync(dir, { withFileTypes: true }).map((e) => {\n if (e.isDirectory()) {\n walk(join(dir, e.name));\n return \"\";\n }\n return e.name;\n }).filter(Boolean);\n } catch {\n return;\n }\n\n for (const name of entries) {\n const ext = extname(name).toLowerCase();\n if (screenshotExtensions.has(ext)) {\n const srcPath = join(dir, name);\n const destPath = join(destDir, basename(name));\n try {\n copyFileSync(srcPath, destPath);\n collected.push(destPath);\n } catch {\n // Skip files we can't copy\n }\n }\n }\n }\n\n walk(sourceDir);\n return collected;\n}\n\nfunction getSimulatorScreenshotDir(udid: string): string {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? \"/tmp\";\n return join(\n home,\n \"Library\",\n \"Developer\",\n \"CoreSimulator\",\n \"Devices\",\n udid,\n \"data\",\n \"tmp\",\n \"Screenshots\",\n );\n}\n\n// ── Internal: Merge screenshot results ─────────────────────────────────────\n\nfunction mergeScreenshots(\n target: Record<string, Record<string, string[]>>,\n source: Record<string, Record<string, string[]>>,\n): void {\n for (const [device, languages] of Object.entries(source)) {\n if (!target[device]) target[device] = {};\n for (const [lang, paths] of Object.entries(languages)) {\n if (!target[device][lang]) target[device][lang] = [];\n target[device][lang].push(...paths);\n }\n }\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, readFileSync, writeFileSync, readdirSync } from \"node:fs\";\nimport { join, extname, basename } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport * as plist from \"plist\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface TrainerOptions {\n path?: string;\n outputDirectory?: string;\n outputFilename?: string;\n failBuildOnError?: boolean;\n xcpretty?: boolean;\n}\n\nexport interface JUnitResult {\n success: boolean;\n totalTests: number;\n failures: number;\n skipped: number;\n /** Total number of retried test attempts across all suites. */\n retries: number;\n numberOfRetries: number;\n /** Count of unique tests after collapsing retries. */\n numberOfTestsExcludingRetries: number;\n /** Count of unique failing tests after collapsing retries (last attempt wins). */\n numberOfFailuresExcludingRetries: number;\n junitPath: string;\n testSuites: TestSuite[];\n}\n\nexport interface TestSuite {\n name: string;\n tests: number;\n failures: number;\n time: number;\n testCases: TestCase[];\n}\n\nexport interface TestCase {\n name: string;\n className: string;\n time: number;\n failure: string | null;\n}\n\n// ── xcresulttool JSON shapes ───────────────────────────────────────────────\n\ninterface XCResultValue {\n _value?: string;\n _values?: XCResultValue[];\n _type?: { _name?: string };\n}\n\ninterface XCResultActionRecord {\n actionResult?: {\n testsRef?: { id?: XCResultValue };\n };\n}\n\ninterface XCResultActionsInvocation {\n actions?: {\n _values?: XCResultActionRecord[];\n };\n}\n\ninterface XCResultTestNode {\n name?: XCResultValue;\n identifier?: XCResultValue;\n duration?: XCResultValue;\n testStatus?: XCResultValue;\n subtests?: { _values?: XCResultTestNode[] };\n summaries?: {\n _values?: Array<{\n failureSummaries?: {\n _values?: Array<{\n message?: XCResultValue;\n fileName?: XCResultValue;\n lineNumber?: XCResultValue;\n }>;\n };\n }>;\n };\n}\n\ninterface XCResultTestPlan {\n subtests?: { _values?: XCResultTestNode[] };\n name?: XCResultValue;\n}\n\n// ── plist test results shape ───────────────────────────────────────────────\n\ninterface PlistTestSuite {\n TestName?: string;\n TestIdentifier?: string;\n Duration?: number;\n TestStatus?: string;\n Subtests?: PlistTestSuite[];\n FailureSummaries?: Array<{\n Message?: string;\n FileName?: string;\n LineNumber?: number;\n }>;\n}\n\n// ── Main Entry Point ───────────────────────────────────────────────────────\n\n/**\n * Parse test results from either .xcresult bundles or .plist files,\n * generate JUnit XML, and return structured results.\n *\n * Mirrors Fastlane trainer's test_parser.rb logic.\n */\nexport async function parseTestResults(\n options: TrainerOptions,\n): Promise<JUnitResult> {\n const inputPath = options.path ?? findTestResults();\n const outputDir = options.outputDirectory ?? process.cwd();\n const outputFilename = options.outputFilename ?? \"report.junit\";\n const junitPath = join(outputDir, outputFilename);\n\n if (!existsSync(inputPath)) {\n throw new Error(\"Test results not found at: \" + inputPath);\n }\n\n let testSuites: TestSuite[];\n\n if (inputPath.endsWith(\".xcresult\")) {\n requireMacOS(\"xcresult parsing\");\n testSuites = await parseXCResult(inputPath);\n } else if (inputPath.endsWith(\".plist\")) {\n testSuites = parsePlistResults(inputPath);\n } else {\n // Try to detect: if it's a directory, it might be an xcresult bundle\n const stat = await import(\"node:fs\").then((fs) =>\n fs.statSync(inputPath),\n );\n if (stat.isDirectory()) {\n requireMacOS(\"xcresult parsing\");\n testSuites = await parseXCResult(inputPath);\n } else {\n // Attempt plist parsing as fallback\n testSuites = parsePlistResults(inputPath);\n }\n }\n\n // Compute aggregated stats\n let totalTests = 0;\n let failures = 0;\n let skipped = 0;\n\n for (const suite of testSuites) {\n totalTests += suite.tests;\n failures += suite.failures;\n for (const tc of suite.testCases) {\n if (tc.time === 0 && tc.failure === null) {\n // Heuristic: zero-duration passing tests are often skipped\n }\n }\n }\n\n // Count skipped tests (tests with name containing \"skipped\" or with specific markers)\n for (const suite of testSuites) {\n for (const tc of suite.testCases) {\n if (tc.failure === \"skipped\" || tc.failure === \"disabled\") {\n skipped++;\n }\n }\n }\n\n // Retry detection: xcresult emits one TestCase per attempt of the same\n // (className, name). The final attempt wins for pass/fail. Count the\n // retry attempts that preceded it and compute retry-adjusted totals.\n const { numberOfRetries, numberOfTestsExcludingRetries, numberOfFailuresExcludingRetries } =\n computeRetryStats(testSuites);\n\n // Generate JUnit XML\n const junitXml = generateJUnitXml(testSuites);\n writeFileSync(junitPath, junitXml, \"utf-8\");\n\n const success = numberOfFailuresExcludingRetries === 0;\n\n if (!success && options.failBuildOnError) {\n throw new Error(\n \"Tests failed: \" + numberOfFailuresExcludingRetries + \" failure(s) out of \" +\n numberOfTestsExcludingRetries + \" test(s)\",\n );\n }\n\n return {\n success,\n totalTests,\n failures,\n skipped,\n retries: numberOfRetries,\n numberOfRetries,\n numberOfTestsExcludingRetries,\n numberOfFailuresExcludingRetries,\n junitPath,\n testSuites,\n };\n}\n\nfunction computeRetryStats(testSuites: TestSuite[]): {\n numberOfRetries: number;\n numberOfTestsExcludingRetries: number;\n numberOfFailuresExcludingRetries: number;\n} {\n let numberOfRetries = 0;\n let uniqueTests = 0;\n let uniqueFailures = 0;\n\n for (const suite of testSuites) {\n const attemptsByKey = new Map<string, TestCase[]>();\n for (const tc of suite.testCases) {\n const key = `${tc.className}::${tc.name}`;\n const arr = attemptsByKey.get(key) ?? [];\n arr.push(tc);\n attemptsByKey.set(key, arr);\n }\n for (const attempts of attemptsByKey.values()) {\n uniqueTests++;\n numberOfRetries += Math.max(0, attempts.length - 1);\n const last = attempts[attempts.length - 1];\n // Only real failures count — not \"skipped\" markers.\n if (last.failure !== null && last.failure !== \"skipped\" && last.failure !== \"disabled\") {\n uniqueFailures++;\n }\n }\n }\n\n return {\n numberOfRetries,\n numberOfTestsExcludingRetries: uniqueTests,\n numberOfFailuresExcludingRetries: uniqueFailures,\n };\n}\n\n// ── xcresult Parsing ───────────────────────────────────────────────────────\n\nasync function parseXCResult(xcresultPath: string): Promise<TestSuite[]> {\n // Step 1: Get the top-level invocation record\n const rootJson = await xcresulttoolGet(xcresultPath);\n const root = JSON.parse(rootJson) as XCResultActionsInvocation;\n\n const actions = root.actions?._values ?? [];\n const testSuites: TestSuite[] = [];\n\n for (const action of actions) {\n const testsRefId = action.actionResult?.testsRef?.id?._value;\n if (!testsRefId) continue;\n\n // Step 2: Get the test plan run summaries using the ref id\n const testsJson = await xcresulttoolGet(xcresultPath, testsRefId);\n const testsRoot = JSON.parse(testsJson) as XCResultTestPlan;\n\n // Step 3: Walk the test tree to extract suites and cases\n const topNodes = testsRoot.subtests?._values ?? [];\n for (const node of topNodes) {\n extractTestSuites(node, testSuites);\n }\n }\n\n return testSuites;\n}\n\nfunction extractTestSuites(\n node: XCResultTestNode,\n suites: TestSuite[],\n parentName?: string,\n): void {\n const name = node.name?._value ?? node.identifier?._value ?? \"Unknown\";\n const subtests = node.subtests?._values;\n\n if (subtests && subtests.length > 0) {\n // Check if children are leaf test cases or more groups\n const hasLeafTests = subtests.some(\n (s) => !s.subtests || !s.subtests._values || s.subtests._values.length === 0,\n );\n\n if (hasLeafTests) {\n // This node is a test suite containing test cases\n const testCases: TestCase[] = [];\n\n for (const sub of subtests) {\n if (sub.subtests?._values && sub.subtests._values.length > 0) {\n // Nested group -- recurse\n extractTestSuites(sub, suites, name);\n } else {\n // Leaf test case\n testCases.push(extractTestCase(sub, name));\n }\n }\n\n if (testCases.length > 0) {\n const failureCount = testCases.filter((tc) => tc.failure !== null && tc.failure !== \"skipped\").length;\n const totalTime = testCases.reduce((acc, tc) => acc + tc.time, 0);\n\n suites.push({\n name: parentName ? parentName + \".\" + name : name,\n tests: testCases.length,\n failures: failureCount,\n time: totalTime,\n testCases,\n });\n }\n } else {\n // All children are groups -- recurse deeper\n for (const sub of subtests) {\n extractTestSuites(sub, suites, name);\n }\n }\n }\n}\n\nfunction extractTestCase(\n node: XCResultTestNode,\n className: string,\n): TestCase {\n const name = node.name?._value ?? node.identifier?._value ?? \"Unknown\";\n const duration = node.duration?._value ? parseFloat(node.duration._value) : 0;\n const status = node.testStatus?._value ?? \"\";\n\n let failure: string | null = null;\n\n if (status === \"Failure\") {\n // Extract failure message from summaries\n const summaries = node.summaries?._values ?? [];\n const failureMessages: string[] = [];\n\n for (const summary of summaries) {\n const failureSummaries = summary.failureSummaries?._values ?? [];\n for (const fs of failureSummaries) {\n const msg = fs.message?._value ?? \"Test failed\";\n const file = fs.fileName?._value ?? \"\";\n const line = fs.lineNumber?._value ?? \"\";\n if (file) {\n failureMessages.push(msg + \" (\" + file + \":\" + line + \")\");\n } else {\n failureMessages.push(msg);\n }\n }\n }\n\n failure = failureMessages.length > 0\n ? failureMessages.join(\"\\n\")\n : \"Test failed\";\n } else if (status === \"Skipped\") {\n failure = \"skipped\";\n }\n\n return { name, className, time: duration, failure };\n}\n\nasync function xcresulttoolGet(\n xcresultPath: string,\n id?: string,\n): Promise<string> {\n const args = [\n \"xcresulttool\",\n \"get\",\n \"--format\",\n \"json\",\n \"--path\",\n xcresultPath,\n ];\n\n if (id) {\n args.push(\"--id\", id);\n }\n\n const { stdout } = await execFileAsync(\"xcrun\", args, {\n maxBuffer: 50 * 1024 * 1024, // 50MB buffer for large results\n });\n\n return stdout;\n}\n\n// ── Plist Parsing ──────────────────────────────────────────────────────────\n\nfunction parsePlistResults(plistPath: string): TestSuite[] {\n const raw = readFileSync(plistPath, \"utf-8\");\n const parsed = plist.parse(raw);\n\n // The plist can be either a single test suite dict or an array\n const suites: TestSuite[] = [];\n\n if (Array.isArray(parsed)) {\n for (const entry of parsed) {\n extractPlistSuites(entry as PlistTestSuite, suites);\n }\n } else {\n extractPlistSuites(parsed as PlistTestSuite, suites);\n }\n\n return suites;\n}\n\nfunction extractPlistSuites(\n node: PlistTestSuite,\n suites: TestSuite[],\n parentName?: string,\n): void {\n const name =\n node.TestName ?? node.TestIdentifier ?? \"Unknown\";\n const subtests = node.Subtests;\n\n if (subtests && subtests.length > 0) {\n const hasLeafTests = subtests.some(\n (s) => !s.Subtests || s.Subtests.length === 0,\n );\n\n if (hasLeafTests) {\n const testCases: TestCase[] = [];\n\n for (const sub of subtests) {\n if (sub.Subtests && sub.Subtests.length > 0) {\n extractPlistSuites(sub, suites, name);\n } else {\n testCases.push(extractPlistTestCase(sub, name));\n }\n }\n\n if (testCases.length > 0) {\n const failureCount = testCases.filter(\n (tc) => tc.failure !== null && tc.failure !== \"skipped\",\n ).length;\n const totalTime = testCases.reduce((acc, tc) => acc + tc.time, 0);\n\n suites.push({\n name: parentName ? parentName + \".\" + name : name,\n tests: testCases.length,\n failures: failureCount,\n time: totalTime,\n testCases,\n });\n }\n } else {\n for (const sub of subtests) {\n extractPlistSuites(sub, suites, name);\n }\n }\n }\n}\n\nfunction extractPlistTestCase(\n node: PlistTestSuite,\n className: string,\n): TestCase {\n const name =\n node.TestName ?? node.TestIdentifier ?? \"Unknown\";\n const duration = node.Duration ?? 0;\n const status = node.TestStatus ?? \"\";\n\n let failure: string | null = null;\n\n if (status === \"Failure\") {\n const summaries = node.FailureSummaries ?? [];\n const messages = summaries.map((s) => {\n const msg = s.Message ?? \"Test failed\";\n const file = s.FileName ?? \"\";\n const line = s.LineNumber ?? \"\";\n return file ? msg + \" (\" + file + \":\" + line + \")\" : msg;\n });\n failure = messages.length > 0 ? messages.join(\"\\n\") : \"Test failed\";\n } else if (status === \"Skipped\") {\n failure = \"skipped\";\n }\n\n return { name, className, time: duration, failure };\n}\n\n// ── JUnit XML Generation ───────────────────────────────────────────────────\n\n/**\n * Generate a JUnit XML string from test suites.\n * Mirrors Fastlane trainer's junit_generator.rb output format.\n */\nexport function generateJUnitXml(testSuites: TestSuite[]): string {\n const totalTests = testSuites.reduce((acc, s) => acc + s.tests, 0);\n const totalFailures = testSuites.reduce((acc, s) => acc + s.failures, 0);\n const totalTime = testSuites.reduce((acc, s) => acc + s.time, 0);\n\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\"?>');\n lines.push(\n '<testsuites tests=\"' + totalTests +\n '\" failures=\"' + totalFailures +\n '\" time=\"' + totalTime.toFixed(3) + '\">',\n );\n\n for (const suite of testSuites) {\n lines.push(\n ' <testsuite name=\"' + escapeXmlAttr(suite.name) +\n '\" tests=\"' + suite.tests +\n '\" failures=\"' + suite.failures +\n '\" time=\"' + suite.time.toFixed(3) + '\">',\n );\n\n for (const tc of suite.testCases) {\n if (tc.failure === \"skipped\") {\n lines.push(\n ' <testcase classname=\"' + escapeXmlAttr(tc.className) +\n '\" name=\"' + escapeXmlAttr(tc.name) +\n '\" time=\"' + tc.time.toFixed(3) + '\">',\n );\n lines.push(\" <skipped/>\");\n lines.push(\" </testcase>\");\n } else if (tc.failure !== null) {\n lines.push(\n ' <testcase classname=\"' + escapeXmlAttr(tc.className) +\n '\" name=\"' + escapeXmlAttr(tc.name) +\n '\" time=\"' + tc.time.toFixed(3) + '\">',\n );\n lines.push(\n ' <failure message=\"' + escapeXmlAttr(tc.failure) + '\">',\n );\n lines.push(\" \" + escapeXmlContent(tc.failure));\n lines.push(\" </failure>\");\n lines.push(\" </testcase>\");\n } else {\n lines.push(\n ' <testcase classname=\"' + escapeXmlAttr(tc.className) +\n '\" name=\"' + escapeXmlAttr(tc.name) +\n '\" time=\"' + tc.time.toFixed(3) + '\"/>',\n );\n }\n }\n\n lines.push(\" </testsuite>\");\n }\n\n lines.push(\"</testsuites>\");\n\n return lines.join(\"\\n\") + \"\\n\";\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\n/**\n * Auto-detect test results path. Searches common locations.\n */\nfunction findTestResults(): string {\n const cwd = process.cwd();\n\n // Check for xcresult in common derived data locations\n const derivedDataPath = join(\n process.env.HOME ?? \"/tmp\",\n \"Library\",\n \"Developer\",\n \"Xcode\",\n \"DerivedData\",\n );\n\n if (existsSync(derivedDataPath)) {\n try {\n const projects = readdirSync(derivedDataPath);\n for (const project of projects) {\n const logsDir = join(\n derivedDataPath,\n project,\n \"Logs\",\n \"Test\",\n );\n if (!existsSync(logsDir)) continue;\n\n const entries = readdirSync(logsDir);\n const xcresults = entries\n .filter((e) => e.endsWith(\".xcresult\"))\n .map((e) => ({\n name: e,\n path: join(logsDir, e),\n }));\n\n if (xcresults.length > 0) {\n // Return the most recently modified one\n return xcresults[xcresults.length - 1].path;\n }\n }\n } catch {\n // Ignore errors scanning derived data\n }\n }\n\n // Check for plist in current directory\n const plistFiles = safeReaddir(cwd).filter(\n (f) => f.endsWith(\".plist\") && f.includes(\"Test\"),\n );\n if (plistFiles.length > 0) {\n return join(cwd, plistFiles[0]);\n }\n\n throw new Error(\n \"Could not auto-detect test results. Please specify the path option.\",\n );\n}\n\nfunction safeReaddir(dir: string): string[] {\n try {\n return readdirSync(dir);\n } catch {\n return [];\n }\n}\n\nfunction escapeXmlAttr(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction escapeXmlContent(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n","export interface RuleResult {\n passed: boolean;\n message: string;\n}\n\n/**\n * Rule metadata attached as properties of each rule function. Mirrors\n * Fastlane precheck's `Rule` class attributes (rule.rb, line ~5+).\n *\n * `supportedFields` lists metadata field names this rule applies to. A\n * `null` value means the rule applies to every field (Fastlane's default\n * `supported_fields_symbol_set` return of `nil`).\n */\nexport interface RuleMetadata {\n key: string;\n envName: string;\n friendlyName: string;\n description: string;\n supportedFields: readonly string[] | null;\n}\n\nexport type Rule = ((text: string) => RuleResult) & { metadata: RuleMetadata };\n\nfunction defineRule(\n metadata: RuleMetadata,\n fn: (text: string) => RuleResult\n): Rule {\n const rule = fn as Rule;\n rule.metadata = metadata;\n return rule;\n}\n\nfunction createWordMatchRule(\n metadata: RuleMetadata,\n words: string[]\n): Rule {\n const lower = words.map((w) => w.toLowerCase());\n return defineRule(metadata, (text: string): RuleResult => {\n const textLower = text.toLowerCase();\n for (const word of lower) {\n if (textLower.includes(word)) {\n return {\n passed: false,\n message: `${metadata.friendlyName}: found \"${word}\"`,\n };\n }\n }\n return { passed: true, message: \"\" };\n });\n}\n\nexport const negativeAppleSentiment = createWordMatchRule(\n {\n key: \"negative_apple_sentiment\",\n envName: \"RULE_NEGATIVE_APPLE_SENTIMENT\",\n friendlyName: \"No negative sentiment about Apple\",\n description: \"using text that could be negative sentiment about Apple\",\n supportedFields: null,\n },\n [\"suck\", \"bug\", \"broken\", \"crash\", \"hate\", \"terrible\", \"horrible\", \"worst\", \"awful\"]\n);\n\nexport const placeholderText = createWordMatchRule(\n {\n key: \"placeholder_words\",\n envName: \"RULE_PLACEHOLDER_WORDS\",\n friendlyName: \"No placeholder words\",\n description: \"using placeholder text\",\n supportedFields: null,\n },\n [\n \"lorem ipsum\",\n \"placeholder\",\n \"todo\",\n \"tbd\",\n \"coming soon\",\n \"insert\",\n \"your text here\",\n ]\n);\n\nexport const otherPlatforms = createWordMatchRule(\n {\n key: \"other_platforms\",\n envName: \"RULE_OTHER_PLATFORMS\",\n friendlyName: \"No references to other platforms\",\n description: \"mentioning other platforms\",\n supportedFields: null,\n },\n [\"android\", \"google play\", \"samsung\", \"windows phone\", \"blackberry\", \"kindle\"]\n);\n\nexport const futureFunctionality = createWordMatchRule(\n {\n key: \"future_functionality\",\n envName: \"RULE_FUTURE_FUNCTIONALITY\",\n friendlyName: \"No references to future functionality\",\n description: \"referencing future functionality\",\n supportedFields: null,\n },\n [\n \"will be available\",\n \"coming soon\",\n \"in a future update\",\n \"planned for\",\n \"we plan to\",\n \"will include\",\n \"will support\",\n ]\n);\n\nexport const testWords = createWordMatchRule(\n {\n key: \"test_words\",\n envName: \"RULE_TEST_WORDS\",\n friendlyName: \"No references to test or demo\",\n description: \"using test or demo words\",\n supportedFields: null,\n },\n [\"test\", \"demo\", \"beta version\", \"debug\"]\n);\n\nexport const curseWords: Rule = defineRule(\n {\n key: \"curse_words\",\n envName: \"RULE_CURSE_WORDS\",\n friendlyName: \"No curse words\",\n description: \"using curse words\",\n supportedFields: null,\n },\n (text: string): RuleResult => {\n // Simplified curse word detection\n const cursePatterns = [\n /\\bf+u+c+k+/i,\n /\\bs+h+i+t+/i,\n /\\ba+s+s+h+o+l+e+/i,\n /\\bb+i+t+c+h+/i,\n /\\bd+a+m+n+/i,\n /\\bh+e+l+l+\\b/i,\n /\\bc+r+a+p+/i,\n /\\bd+i+c+k+/i,\n /\\bp+i+s+s+/i,\n ];\n for (const pattern of cursePatterns) {\n if (pattern.test(text)) {\n return {\n passed: false,\n message: \"Curse words: inappropriate language detected\",\n };\n }\n }\n return { passed: true, message: \"\" };\n }\n);\n\nexport const unreachableUrls: Rule = defineRule(\n {\n key: \"unreachable_urls\",\n envName: \"RULE_UNREACHABLE_URLS\",\n friendlyName: \"No unreachable URLs\",\n description: \"using URLs that cannot be reached\",\n supportedFields: [\"supportUrl\", \"marketingUrl\", \"privacyUrl\"],\n },\n (text: string): RuleResult => {\n // This is meant to check URLs — skip if not a URL\n if (!text.startsWith(\"http://\") && !text.startsWith(\"https://\")) {\n return { passed: true, message: \"\" };\n }\n // URL reachability check would be async — this is a sync placeholder\n return { passed: true, message: \"\" };\n }\n);\n\nexport const copyrightDate: Rule = defineRule(\n {\n key: \"copyright_date\",\n envName: \"RULE_COPYRIGHT_DATE\",\n friendlyName: \"No out-of-date copyright\",\n description: \"using a copyright date that is not this year\",\n supportedFields: [\"copyright\"],\n },\n (text: string): RuleResult => {\n const currentYear = new Date().getFullYear();\n const yearMatch = text.match(/©?\\s*(\\d{4})/);\n if (yearMatch) {\n const year = parseInt(yearMatch[1], 10);\n if (year < currentYear - 1) {\n return {\n passed: false,\n message: `Copyright date: year ${year} may be outdated (current: ${currentYear})`,\n };\n }\n }\n return { passed: true, message: \"\" };\n }\n);\n\nexport const noPriceInTitle: Rule = defineRule(\n {\n key: \"no_price_in_title\",\n envName: \"RULE_NO_PRICE_IN_TITLE\",\n friendlyName: \"No price in title\",\n description: \"mentioning price in the app title\",\n supportedFields: [\"name\", \"subtitle\"],\n },\n (text: string): RuleResult => {\n if (/\\$\\d+|\\d+\\.\\d{2}|free|€\\d+|£\\d+/i.test(text)) {\n return { passed: false, message: \"No price in title: price reference found\" };\n }\n return { passed: true, message: \"\" };\n }\n);\n\n/**\n * `freeStuffIap`: flag IAP descriptions that mention \"free\", matching\n * Fastlane's `FreeStuffIAPRule` (free_stuff_iap_rule.rb).\n */\nexport const freeStuffIap = createWordMatchRule(\n {\n key: \"free_stuff_in_iap\",\n envName: \"RULE_FREE_STUFF_IN_IAP\",\n friendlyName: \"No words indicating your IAP is free\",\n description: \"using text indicating that your IAP is free\",\n supportedFields: [\"in_app_purchase\"],\n },\n [\"free\"]\n);\n\nexport function customText(words: string[]): Rule {\n return createWordMatchRule(\n {\n key: \"custom_text\",\n envName: \"RULE_CUSTOM_TEXT\",\n friendlyName: \"No custom text\",\n description: \"using custom disallowed text\",\n supportedFields: null,\n },\n words\n );\n}\n\nexport const ALL_RULES: Record<string, Rule> = {\n negativeAppleSentiment,\n placeholderText,\n otherPlatforms,\n futureFunctionality,\n testWords,\n curseWords,\n unreachableUrls,\n copyrightDate,\n noPriceInTitle,\n freeStuffIap,\n};\n","import type { AppStoreConnectClient } from \"../client/index.js\";\nimport { ALL_RULES, type Rule, type RuleResult } from \"./rules.js\";\n\nexport { ALL_RULES } from \"./rules.js\";\nexport type { Rule, RuleResult } from \"./rules.js\";\n\nexport interface PrecheckOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n includeInAppPurchases?: boolean;\n rules?: PrecheckRule[];\n}\n\nexport interface PrecheckRule {\n name: string;\n level: \"error\" | \"warning\";\n}\n\nexport interface ValidationResult {\n passed: boolean;\n errors: ValidationIssue[];\n warnings: ValidationIssue[];\n}\n\nexport interface ValidationIssue {\n rule: string;\n message: string;\n field?: string;\n locale?: string;\n}\n\nexport async function validateMetadata(\n options: PrecheckOptions\n): Promise<ValidationResult> {\n const errors: ValidationIssue[] = [];\n const warnings: ValidationIssue[] = [];\n\n // Find app\n const app = await options.client.apps.findByBundleId(options.bundleIdentifier);\n if (!app) throw new Error(`App not found: ${options.bundleIdentifier}`);\n\n // Get latest version\n const versions = await options.client.appStoreVersions.listForApp(app.id, {\n filter: { platform: \"IOS\" },\n });\n\n if (versions.length === 0) {\n throw new Error(\"No app store version found\");\n }\n\n const version = versions[0];\n const localizations = await options.client.appStoreVersions.getLocalizations(version.id);\n\n // Determine which rules to run\n const ruleConfig = options.rules ?? Object.keys(ALL_RULES).map((name) => ({\n name,\n level: \"error\" as const,\n }));\n\n // Run rules against each localization\n for (const loc of localizations) {\n const locale = loc.attributes.locale;\n const fields: Record<string, string | null> = {\n description: loc.attributes.description,\n keywords: loc.attributes.keywords,\n whatsNew: loc.attributes.whatsNew,\n supportUrl: loc.attributes.supportUrl,\n marketingUrl: loc.attributes.marketingUrl,\n promotionalText: loc.attributes.promotionalText,\n };\n\n for (const [field, value] of Object.entries(fields)) {\n if (!value) continue;\n\n for (const ruleConfig_ of ruleConfig) {\n const rule = ALL_RULES[ruleConfig_.name];\n if (!rule) continue;\n\n // Respect the rule's supportedFields list (nil/null = applies to all).\n // Mirrors Fastlane precheck's `Rule#item_field_supported?`.\n const supported = rule.metadata?.supportedFields;\n if (supported && !supported.includes(field)) continue;\n\n const result = rule(value);\n if (!result.passed) {\n const issue: ValidationIssue = {\n rule: ruleConfig_.name,\n message: result.message,\n field,\n locale,\n };\n if (ruleConfig_.level === \"error\") {\n errors.push(issue);\n } else {\n warnings.push(issue);\n }\n }\n }\n }\n }\n\n // Check copyright on the version — only run copyright-supporting rules.\n if (version.attributes.copyright) {\n for (const ruleConfig_ of ruleConfig) {\n const rule = ALL_RULES[ruleConfig_.name];\n if (!rule) continue;\n const supported = rule.metadata?.supportedFields;\n if (supported && !supported.includes(\"copyright\")) continue;\n const result = rule(version.attributes.copyright);\n if (!result.passed) {\n const issue: ValidationIssue = {\n rule: ruleConfig_.name,\n message: result.message,\n field: \"copyright\",\n };\n if (ruleConfig_.level === \"error\") errors.push(issue);\n else warnings.push(issue);\n }\n }\n }\n\n return {\n passed: errors.length === 0,\n errors,\n warnings,\n };\n}\n","import { SignJWT, importPKCS8 } from \"jose\";\n\nexport interface TokenConfig {\n keyId: string;\n /** Issuer ID. When absent, the key is treated as an individual key (sub='user'). */\n issuerId?: string;\n privateKey: string;\n enterprise?: boolean;\n duration?: number;\n}\n\nconst MAX_TOKEN_DURATION = 1200;\nconst DEFAULT_TOKEN_DURATION = 500;\n\nexport class TokenManager {\n private config: TokenConfig;\n private currentToken: string | null = null;\n private expiresAt = 0;\n\n constructor(config: TokenConfig) {\n this.config = config;\n }\n\n async getToken(): Promise<string> {\n const now = Math.floor(Date.now() / 1000);\n if (this.currentToken && now < this.expiresAt - 30) {\n return this.currentToken;\n }\n return this.refresh();\n }\n\n async refresh(): Promise<string> {\n const duration = Math.min(\n this.config.duration ?? DEFAULT_TOKEN_DURATION,\n MAX_TOKEN_DURATION\n );\n const audience = this.config.enterprise\n ? \"apple-developer-enterprise-v1\"\n : \"appstoreconnect-v1\";\n\n const key = await importPKCS8(this.config.privateKey, \"ES256\");\n const now = Math.floor(Date.now() / 1000);\n\n // Mirror Fastlane's Spaceship::ConnectAPI::Token#refresh! behavior:\n // when issuerId is provided → set `iss`; otherwise treat as individual key\n // and set `sub: 'user'`.\n // https://developer.apple.com/documentation/appstoreconnectapi/generating_tokens_for_api_requests#4313913\n let jwt = new SignJWT(this.config.issuerId ? {} : { sub: \"user\" })\n .setProtectedHeader({\n alg: \"ES256\",\n kid: this.config.keyId,\n typ: \"JWT\",\n })\n .setIssuedAt(now - 60)\n .setExpirationTime(now + duration)\n .setAudience(audience);\n\n if (this.config.issuerId) {\n jwt = jwt.setIssuer(this.config.issuerId);\n }\n\n this.currentToken = await jwt.sign(key);\n\n this.expiresAt = now + duration;\n return this.currentToken;\n }\n\n invalidate(): void {\n this.currentToken = null;\n this.expiresAt = 0;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { CertificateType } from \"../types/enums.js\";\n\nexport class CertificatesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n certificateType?: CertificateType | CertificateType[];\n serialNumber?: string;\n displayName?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<Certificate[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { certificates: params.fields.join(\",\") };\n }\n return this.http.all<Certificate>(\"/v1/certificates\", listParams);\n }\n\n async get(id: string): Promise<Certificate> {\n const response = await this.http.get<JsonApiResponse<Certificate>>(\n `/v1/certificates/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n certificateType: CertificateType;\n csrContent: string;\n }): Promise<Certificate> {\n const response = await this.http.post<JsonApiResponse<Certificate>>(\n \"/v1/certificates\",\n {\n data: {\n type: \"certificates\",\n attributes: {\n certificateType: params.certificateType,\n csrContent: params.csrContent,\n },\n },\n }\n );\n return response.data;\n }\n\n async revoke(id: string): Promise<void> {\n await this.http.delete(`/v1/certificates/${id}`);\n }\n\n async *paginate(params?: {\n filter?: {\n certificateType?: CertificateType | CertificateType[];\n };\n limit?: number;\n }): AsyncGenerator<Certificate> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n yield* this.http.paginate<Certificate>(\"/v1/certificates\", listParams);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Profile } from \"../types/profile.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { ProfileType, ProfileState } from \"../types/enums.js\";\n\nexport class ProfilesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n profileType?: ProfileType | ProfileType[];\n profileState?: ProfileState;\n name?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { profiles?: string[]; certificates?: string[]; devices?: string[]; bundleIds?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<Profile[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<Profile>(\"/v1/profiles\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<Profile> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<Profile>>(\n `/v1/profiles/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n name: string;\n profileType: ProfileType;\n bundleIdId: string;\n certificateIds: string[];\n deviceIds?: string[];\n }): Promise<Profile> {\n const relationships: Record<string, unknown> = {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n certificates: {\n data: params.certificateIds.map((id) => ({\n type: \"certificates\",\n id,\n })),\n },\n };\n\n if (params.deviceIds && params.deviceIds.length > 0) {\n relationships.devices = {\n data: params.deviceIds.map((id) => ({\n type: \"devices\",\n id,\n })),\n };\n }\n\n const response = await this.http.post<JsonApiResponse<Profile>>(\n \"/v1/profiles\",\n {\n data: {\n type: \"profiles\",\n attributes: {\n name: params.name,\n profileType: params.profileType,\n },\n relationships,\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/profiles/${id}`);\n }\n\n async getCertificates(profileId: string): Promise<Certificate[]> {\n return this.http.all<Certificate>(\n `/v1/profiles/${profileId}/certificates`\n );\n }\n\n async getDevices(profileId: string): Promise<Device[]> {\n return this.http.all<Device>(`/v1/profiles/${profileId}/devices`);\n }\n\n async getBundleId(profileId: string): Promise<BundleId> {\n const response = await this.http.get<JsonApiResponse<BundleId>>(\n `/v1/profiles/${profileId}/bundleId`\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { BundleIdCapability } from \"../types/capability.js\";\nimport type { BundleIdPlatform } from \"../types/enums.js\";\n\nexport class BundleIdsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n identifier?: string;\n name?: string;\n platform?: BundleIdPlatform;\n seedId?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { bundleIds?: string[]; bundleIdCapabilities?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<BundleId[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<BundleId>(\"/v1/bundleIds\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<BundleId> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<BundleId>>(\n `/v1/bundleIds/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n identifier: string;\n name: string;\n platform: BundleIdPlatform;\n seedId?: string;\n }): Promise<BundleId> {\n const attributes: Record<string, unknown> = {\n identifier: params.identifier,\n name: params.name,\n platform: params.platform,\n };\n if (params.seedId) attributes.seedId = params.seedId;\n\n const response = await this.http.post<JsonApiResponse<BundleId>>(\n \"/v1/bundleIds\",\n {\n data: {\n type: \"bundleIds\",\n attributes,\n },\n }\n );\n return response.data;\n }\n\n async find(identifier: string): Promise<BundleId | null> {\n const results = await this.list({\n filter: { identifier },\n limit: 1,\n });\n return results[0] ?? null;\n }\n\n async getCapabilities(bundleIdId: string): Promise<BundleIdCapability[]> {\n return this.http.all<BundleIdCapability>(\n `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n );\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { DeviceStatus, Platform } from \"../types/enums.js\";\n\nexport class DevicesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n name?: string;\n platform?: Platform | Platform[];\n status?: DeviceStatus;\n udid?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<Device[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { devices: params.fields.join(\",\") };\n }\n return this.http.all<Device>(\"/v1/devices\", listParams);\n }\n\n async get(id: string): Promise<Device> {\n const response = await this.http.get<JsonApiResponse<Device>>(\n `/v1/devices/${id}`\n );\n return response.data;\n }\n\n async register(params: {\n name: string;\n platform: Platform;\n udid: string;\n }): Promise<Device> {\n const response = await this.http.post<JsonApiResponse<Device>>(\n \"/v1/devices\",\n {\n data: {\n type: \"devices\",\n attributes: {\n name: params.name,\n platform: params.platform,\n udid: params.udid,\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n params: { name?: string; status?: DeviceStatus }\n ): Promise<Device> {\n const response = await this.http.patch<JsonApiResponse<Device>>(\n `/v1/devices/${id}`,\n {\n data: {\n type: \"devices\",\n id,\n attributes: params,\n },\n }\n );\n return response.data;\n }\n\n async findByUdid(udid: string): Promise<Device | null> {\n const results = await this.list({ filter: { udid }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { App } from \"../types/app.js\";\n\nexport class AppsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n bundleId?: string;\n name?: string;\n sku?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { apps?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<App[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<App>(\"/v1/apps\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<App> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<App>>(\n `/v1/apps/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async findByBundleId(bundleId: string): Promise<App | null> {\n const results = await this.list({\n filter: { bundleId },\n limit: 1,\n });\n return results[0] ?? null;\n }\n\n /**\n * Create an App Store Connect **app record** (the thing that shows up\n * under \"My Apps\" and that TestFlight / App Store uploads require).\n *\n * This is distinct from registering an App ID in the Developer Portal —\n * you need BOTH. The Developer Portal App ID unlocks provisioning\n * profiles and entitlements; the App Store Connect app record unlocks\n * uploads. `upload_to_testflight` fails with \"Couldn't find app\n * 'com.foo.bar' on the account…\" when this record is missing.\n *\n * `bundleIdId` is the REST API primary key of the bundle id resource\n * (not the identifier string) — fetch it via `bundleIds.find(identifier)`\n * or from the response of `bundleIds.create()`.\n *\n * `sku` is an arbitrary unique string Apple uses to identify the app in\n * their internal records. If you don't have a meaningful one, pass the\n * bundle identifier itself or append a timestamp for uniqueness.\n */\n async create(params: {\n bundleIdentifier: string;\n bundleIdId: string;\n appName: string;\n sku: string;\n primaryLocale?: string;\n }): Promise<App> {\n const response = await this.http.post<JsonApiResponse<App>>(\"/v1/apps\", {\n data: {\n type: \"apps\",\n attributes: {\n bundleId: params.bundleIdentifier,\n name: params.appName,\n sku: params.sku,\n primaryLocale: params.primaryLocale ?? \"en-US\",\n },\n relationships: {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n },\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type {\n Build,\n BetaBuildLocalization,\n BuildBetaDetail,\n PreReleaseVersion,\n} from \"../types/build.js\";\n\nexport class BuildsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n version?: string;\n processingState?: string;\n \"preReleaseVersion.version\"?: string;\n expired?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { builds?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<Build[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<Build>(\"/v1/builds\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<Build> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<Build>>(\n `/v1/builds/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async getBetaDetail(buildId: string): Promise<BuildBetaDetail> {\n const response = await this.http.get<JsonApiResponse<BuildBetaDetail>>(\n `/v1/builds/${buildId}/buildBetaDetail`\n );\n return response.data;\n }\n\n async getLocalizations(buildId: string): Promise<BetaBuildLocalization[]> {\n return this.http.all<BetaBuildLocalization>(\n `/v1/builds/${buildId}/betaBuildLocalizations`\n );\n }\n\n async createLocalization(params: {\n buildId: string;\n locale: string;\n whatsNew: string;\n }): Promise<BetaBuildLocalization> {\n const response = await this.http.post<\n JsonApiResponse<BetaBuildLocalization>\n >(\"/v1/betaBuildLocalizations\", {\n data: {\n type: \"betaBuildLocalizations\",\n attributes: {\n locale: params.locale,\n whatsNew: params.whatsNew,\n },\n relationships: {\n build: {\n data: { type: \"builds\", id: params.buildId },\n },\n },\n },\n });\n return response.data;\n }\n\n async updateLocalization(\n localizationId: string,\n params: { whatsNew: string }\n ): Promise<BetaBuildLocalization> {\n const response = await this.http.patch<\n JsonApiResponse<BetaBuildLocalization>\n >(`/v1/betaBuildLocalizations/${localizationId}`, {\n data: {\n type: \"betaBuildLocalizations\",\n id: localizationId,\n attributes: {\n whatsNew: params.whatsNew,\n },\n },\n });\n return response.data;\n }\n\n async getPreReleaseVersion(buildId: string): Promise<PreReleaseVersion | null> {\n try {\n const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n `/v1/builds/${buildId}/preReleaseVersion`\n );\n return response.data;\n } catch {\n return null;\n }\n }\n\n async submitForBetaReview(buildId: string): Promise<void> {\n await this.http.post(\"/v1/betaAppReviewSubmissions\", {\n data: {\n type: \"betaAppReviewSubmissions\",\n relationships: {\n build: {\n data: { type: \"builds\", id: buildId },\n },\n },\n },\n });\n }\n\n async expireBuild(buildId: string): Promise<void> {\n await this.http.patch(`/v1/builds/${buildId}`, {\n data: {\n type: \"builds\",\n id: buildId,\n attributes: {\n expired: true,\n },\n },\n });\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BetaGroup } from \"../types/build.js\";\n\nexport class BetaGroupsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n name?: string;\n isInternalGroup?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<BetaGroup[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { betaGroups: params.fields.join(\",\") };\n }\n return this.http.all<BetaGroup>(\"/v1/betaGroups\", listParams);\n }\n\n async get(id: string): Promise<BetaGroup> {\n const response = await this.http.get<JsonApiResponse<BetaGroup>>(\n `/v1/betaGroups/${id}`\n );\n return response.data;\n }\n\n async listForApp(appId: string): Promise<BetaGroup[]> {\n return this.http.all<BetaGroup>(`/v1/apps/${appId}/betaGroups`);\n }\n\n async addBuilds(groupId: string, buildIds: string[]): Promise<void> {\n await this.http.post(`/v1/betaGroups/${groupId}/relationships/builds`, {\n data: buildIds.map((id) => ({ type: \"builds\", id })),\n });\n }\n\n async removeBuilds(groupId: string, buildIds: string[]): Promise<void> {\n await this.http.request(\n `/v1/betaGroups/${groupId}/relationships/builds`,\n {\n method: \"DELETE\",\n body: {\n data: buildIds.map((id) => ({ type: \"builds\", id })),\n },\n }\n );\n }\n\n async findByName(appId: string, name: string): Promise<BetaGroup | null> {\n const groups = await this.listForApp(appId);\n return groups.find((g) => g.attributes.name === name) ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\nimport type {\n BundleIdCapability,\n CapabilitySettingInput,\n} from \"../types/capability.js\";\nimport type { CapabilityType } from \"../types/enums.js\";\n\nexport class CapabilitiesResource {\n constructor(private http: RequestClient) {}\n\n async listForBundleId(bundleIdId: string): Promise<BundleIdCapability[]> {\n return this.http.all<BundleIdCapability>(\n `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n );\n }\n\n async enable(params: {\n bundleIdId: string;\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n }): Promise<BundleIdCapability> {\n const attributes: Record<string, unknown> = {\n capabilityType: params.capabilityType,\n };\n if (params.settings) {\n attributes.settings = params.settings;\n }\n\n const response = await this.http.post<\n JsonApiResponse<BundleIdCapability>\n >(\"/v1/bundleIdCapabilities\", {\n data: {\n type: \"bundleIdCapabilities\",\n attributes,\n relationships: {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n },\n },\n });\n return response.data;\n }\n\n async update(\n capabilityId: string,\n params: {\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n }\n ): Promise<BundleIdCapability> {\n const attributes: Record<string, unknown> = {\n capabilityType: params.capabilityType,\n };\n if (params.settings) {\n attributes.settings = params.settings;\n }\n\n const response = await this.http.patch<\n JsonApiResponse<BundleIdCapability>\n >(`/v1/bundleIdCapabilities/${capabilityId}`, {\n data: {\n type: \"bundleIdCapabilities\",\n id: capabilityId,\n attributes,\n },\n });\n return response.data;\n }\n\n async disable(capabilityId: string): Promise<void> {\n await this.http.delete(`/v1/bundleIdCapabilities/${capabilityId}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { AppStoreVersionState, Platform, ReleaseType } from \"../types/enums.js\";\n\nexport interface AppStoreVersion {\n id: string;\n type: \"appStoreVersions\";\n attributes: {\n platform: Platform;\n versionString: string;\n appStoreState: AppStoreVersionState;\n copyright: string | null;\n releaseType: ReleaseType | null;\n earliestReleaseDate: string | null;\n downloadable: boolean;\n createdDate: string;\n };\n relationships?: {\n app?: { data: { type: \"apps\"; id: string } };\n build?: { data: { type: \"builds\"; id: string } | null };\n appStoreVersionLocalizations?: {\n data: Array<{ type: \"appStoreVersionLocalizations\"; id: string }>;\n };\n };\n}\n\nexport interface AppStoreVersionLocalization {\n id: string;\n type: \"appStoreVersionLocalizations\";\n attributes: {\n description: string | null;\n locale: string;\n keywords: string | null;\n marketingUrl: string | null;\n promotionalText: string | null;\n supportUrl: string | null;\n whatsNew: string | null;\n };\n}\n\nexport class AppStoreVersionsResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(\n appId: string,\n params?: {\n filter?: { appStoreState?: AppStoreVersionState | AppStoreVersionState[]; platform?: Platform };\n include?: string;\n limit?: number;\n }\n ): Promise<AppStoreVersion[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppStoreVersion>(\n `/v1/apps/${appId}/appStoreVersions`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppStoreVersion> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppStoreVersion>>(\n `/v1/appStoreVersions/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n appId: string;\n versionString: string;\n platform: Platform;\n releaseType?: ReleaseType;\n earliestReleaseDate?: string;\n copyright?: string;\n }): Promise<AppStoreVersion> {\n const attributes: Record<string, unknown> = {\n versionString: params.versionString,\n platform: params.platform,\n };\n if (params.releaseType) attributes.releaseType = params.releaseType;\n if (params.earliestReleaseDate) attributes.earliestReleaseDate = params.earliestReleaseDate;\n if (params.copyright) attributes.copyright = params.copyright;\n\n const response = await this.http.post<JsonApiResponse<AppStoreVersion>>(\n \"/v1/appStoreVersions\",\n {\n data: {\n type: \"appStoreVersions\",\n attributes,\n relationships: {\n app: {\n data: { type: \"apps\", id: params.appId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n params: {\n versionString?: string;\n copyright?: string;\n releaseType?: ReleaseType;\n earliestReleaseDate?: string | null;\n }\n ): Promise<AppStoreVersion> {\n const response = await this.http.patch<JsonApiResponse<AppStoreVersion>>(\n `/v1/appStoreVersions/${id}`,\n {\n data: {\n type: \"appStoreVersions\",\n id,\n attributes: params,\n },\n }\n );\n return response.data;\n }\n\n async setBuild(versionId: string, buildId: string): Promise<void> {\n await this.http.patch(`/v1/appStoreVersions/${versionId}/relationships/build`, {\n data: { type: \"builds\", id: buildId },\n });\n }\n\n async getLocalizations(versionId: string): Promise<AppStoreVersionLocalization[]> {\n return this.http.all<AppStoreVersionLocalization>(\n `/v1/appStoreVersions/${versionId}/appStoreVersionLocalizations`\n );\n }\n\n async createLocalization(params: {\n versionId: string;\n locale: string;\n description?: string;\n keywords?: string;\n marketingUrl?: string;\n promotionalText?: string;\n supportUrl?: string;\n whatsNew?: string;\n }): Promise<AppStoreVersionLocalization> {\n const { versionId, ...attributes } = params;\n const response = await this.http.post<\n JsonApiResponse<AppStoreVersionLocalization>\n >(\"/v1/appStoreVersionLocalizations\", {\n data: {\n type: \"appStoreVersionLocalizations\",\n attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: versionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async updateLocalization(\n localizationId: string,\n params: {\n description?: string;\n keywords?: string;\n marketingUrl?: string;\n promotionalText?: string;\n supportUrl?: string;\n whatsNew?: string;\n }\n ): Promise<AppStoreVersionLocalization> {\n const response = await this.http.patch<\n JsonApiResponse<AppStoreVersionLocalization>\n >(`/v1/appStoreVersionLocalizations/${localizationId}`, {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: localizationId,\n attributes: params,\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppScreenshotSet {\n id: string;\n type: \"appScreenshotSets\";\n attributes: {\n screenshotDisplayType: string;\n };\n}\n\nexport interface AppScreenshot {\n id: string;\n type: \"appScreenshots\";\n attributes: {\n fileSize: number;\n fileName: string;\n sourceFileChecksum: string | null;\n imageAsset: {\n templateUrl: string;\n width: number;\n height: number;\n } | null;\n assetToken: string | null;\n assetType: string | null;\n uploadOperations: UploadOperation[] | null;\n assetDeliveryState: {\n state: string;\n errors: unknown[];\n } | null;\n };\n}\n\nexport interface UploadOperation {\n method: string;\n url: string;\n length: number;\n offset: number;\n requestHeaders: Array<{ name: string; value: string }>;\n}\n\nexport class AppScreenshotsResource {\n constructor(private http: RequestClient) {}\n\n async listSetsForLocalization(\n localizationId: string\n ): Promise<AppScreenshotSet[]> {\n return this.http.all<AppScreenshotSet>(\n `/v1/appStoreVersionLocalizations/${localizationId}/appScreenshotSets`\n );\n }\n\n async createSet(params: {\n localizationId: string;\n screenshotDisplayType: string;\n }): Promise<AppScreenshotSet> {\n const response = await this.http.post<\n JsonApiResponse<AppScreenshotSet>\n >(\"/v1/appScreenshotSets\", {\n data: {\n type: \"appScreenshotSets\",\n attributes: {\n screenshotDisplayType: params.screenshotDisplayType,\n },\n relationships: {\n appStoreVersionLocalization: {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: params.localizationId,\n },\n },\n },\n },\n });\n return response.data;\n }\n\n async listScreenshots(setId: string): Promise<AppScreenshot[]> {\n return this.http.all<AppScreenshot>(\n `/v1/appScreenshotSets/${setId}/appScreenshots`\n );\n }\n\n async reserveScreenshot(params: {\n setId: string;\n fileName: string;\n fileSize: number;\n }): Promise<AppScreenshot> {\n const response = await this.http.post<\n JsonApiResponse<AppScreenshot>\n >(\"/v1/appScreenshots\", {\n data: {\n type: \"appScreenshots\",\n attributes: {\n fileName: params.fileName,\n fileSize: params.fileSize,\n },\n relationships: {\n appScreenshotSet: {\n data: { type: \"appScreenshotSets\", id: params.setId },\n },\n },\n },\n });\n return response.data;\n }\n\n async commitScreenshot(\n screenshotId: string,\n params: { sourceFileChecksum: string; uploaded: boolean }\n ): Promise<AppScreenshot> {\n const response = await this.http.patch<\n JsonApiResponse<AppScreenshot>\n >(`/v1/appScreenshots/${screenshotId}`, {\n data: {\n type: \"appScreenshots\",\n id: screenshotId,\n attributes: {\n sourceFileChecksum: params.sourceFileChecksum,\n uploaded: params.uploaded,\n },\n },\n });\n return response.data;\n }\n\n async deleteScreenshot(screenshotId: string): Promise<void> {\n await this.http.delete(`/v1/appScreenshots/${screenshotId}`);\n }\n\n async deleteSet(setId: string): Promise<void> {\n await this.http.delete(`/v1/appScreenshotSets/${setId}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface ReviewSubmission {\n id: string;\n type: \"reviewSubmissions\";\n attributes: {\n state: string;\n submittedDate: string | null;\n platform: string;\n };\n}\n\nexport interface AppStoreVersionSubmission {\n id: string;\n type: \"appStoreVersionSubmissions\";\n}\n\nexport class ReviewSubmissionsResource {\n constructor(private http: RequestClient) {}\n\n async submitVersion(versionId: string): Promise<AppStoreVersionSubmission> {\n const response = await this.http.post<\n JsonApiResponse<AppStoreVersionSubmission>\n >(\"/v1/appStoreVersionSubmissions\", {\n data: {\n type: \"appStoreVersionSubmissions\",\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: versionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async createReviewSubmission(params: {\n appId: string;\n platform: string;\n }): Promise<ReviewSubmission> {\n const response = await this.http.post<\n JsonApiResponse<ReviewSubmission>\n >(\"/v1/reviewSubmissions\", {\n data: {\n type: \"reviewSubmissions\",\n attributes: {\n platform: params.platform,\n },\n relationships: {\n app: {\n data: { type: \"apps\", id: params.appId },\n },\n },\n },\n });\n return response.data;\n }\n\n async confirmReviewSubmission(submissionId: string): Promise<ReviewSubmission> {\n const response = await this.http.patch<\n JsonApiResponse<ReviewSubmission>\n >(`/v1/reviewSubmissions/${submissionId}`, {\n data: {\n type: \"reviewSubmissions\",\n id: submissionId,\n attributes: {\n submitted: true,\n },\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\n/**\n * App Info is the metadata container that holds an app's categories, age\n * ratings, and localisations for a single submission cycle. Ported from\n * `spaceship/connect_api/models/app_info.rb`.\n */\nexport interface AppInfoAttributes {\n appStoreState?: string | null;\n state?: string | null;\n appStoreAgeRating?: string | null;\n brazilAgeRating?: string | null;\n kidsAgeBand?: string | null;\n}\n\nexport type AppInfo = JsonApiResource<\"appInfos\", AppInfoAttributes>;\n\nexport class AppInfosResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n include?: string;\n limit?: number;\n }): Promise<AppInfo[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppInfo>(`/v1/apps/${appId}/appInfos`, listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppInfo> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppInfo>>(\n `/v1/appInfos/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async update(\n id: string,\n relationships?: Record<string, { type: string; id: string } | null>\n ): Promise<AppInfo> {\n const response = await this.http.patch<JsonApiResponse<AppInfo>>(\n `/v1/appInfos/${id}`,\n {\n data: {\n type: \"appInfos\",\n id,\n ...(relationships\n ? {\n relationships: Object.fromEntries(\n Object.entries(relationships).map(([k, v]) => [k, { data: v }])\n ),\n }\n : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appInfos/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppInfoLocalizationAttributes {\n locale: string;\n name?: string | null;\n subtitle?: string | null;\n privacyPolicyUrl?: string | null;\n privacyChoicesUrl?: string | null;\n privacyPolicyText?: string | null;\n}\n\nexport type AppInfoLocalization = JsonApiResource<\n \"appInfoLocalizations\",\n AppInfoLocalizationAttributes\n>;\n\nexport class AppInfoLocalizationsResource {\n constructor(private http: RequestClient) {}\n\n async listForAppInfo(appInfoId: string, params?: {\n limit?: number;\n }): Promise<AppInfoLocalization[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppInfoLocalization>(\n `/v1/appInfos/${appInfoId}/appInfoLocalizations`,\n listParams\n );\n }\n\n async get(id: string): Promise<AppInfoLocalization> {\n const response = await this.http.get<JsonApiResponse<AppInfoLocalization>>(\n `/v1/appInfoLocalizations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appInfoId: string;\n attributes: AppInfoLocalizationAttributes;\n }): Promise<AppInfoLocalization> {\n const response = await this.http.post<JsonApiResponse<AppInfoLocalization>>(\n \"/v1/appInfoLocalizations\",\n {\n data: {\n type: \"appInfoLocalizations\",\n attributes: params.attributes,\n relationships: {\n appInfo: { data: { type: \"appInfos\", id: params.appInfoId } },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AppInfoLocalizationAttributes>\n ): Promise<AppInfoLocalization> {\n const response = await this.http.patch<JsonApiResponse<AppInfoLocalization>>(\n `/v1/appInfoLocalizations/${id}`,\n { data: { type: \"appInfoLocalizations\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appInfoLocalizations/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppStoreReviewDetailAttributes {\n contactFirstName?: string | null;\n contactLastName?: string | null;\n contactPhone?: string | null;\n contactEmail?: string | null;\n demoAccountName?: string | null;\n demoAccountPassword?: string | null;\n demoAccountRequired?: boolean | null;\n notes?: string | null;\n}\n\nexport type AppStoreReviewDetail = JsonApiResource<\n \"appStoreReviewDetails\",\n AppStoreReviewDetailAttributes\n>;\n\nexport class AppStoreReviewDetailsResource {\n constructor(private http: RequestClient) {}\n\n async getForAppStoreVersion(\n appStoreVersionId: string\n ): Promise<AppStoreReviewDetail> {\n const response = await this.http.get<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreVersions/${appStoreVersionId}/appStoreReviewDetail`);\n return response.data;\n }\n\n async get(id: string): Promise<AppStoreReviewDetail> {\n const response = await this.http.get<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreReviewDetails/${id}`);\n return response.data;\n }\n\n async create(params: {\n appStoreVersionId: string;\n attributes: AppStoreReviewDetailAttributes;\n }): Promise<AppStoreReviewDetail> {\n const response = await this.http.post<\n JsonApiResponse<AppStoreReviewDetail>\n >(\"/v1/appStoreReviewDetails\", {\n data: {\n type: \"appStoreReviewDetails\",\n attributes: params.attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AppStoreReviewDetailAttributes>\n ): Promise<AppStoreReviewDetail> {\n const response = await this.http.patch<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreReviewDetails/${id}`, {\n data: { type: \"appStoreReviewDetails\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaTesterAttributes {\n firstName?: string | null;\n lastName?: string | null;\n email: string;\n inviteType?: \"EMAIL\" | \"PUBLIC_LINK\" | null;\n state?: string | null;\n}\n\nexport type BetaTester = JsonApiResource<\"betaTesters\", BetaTesterAttributes>;\n\nexport class BetaTestersResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n email?: string;\n firstName?: string;\n lastName?: string;\n inviteType?: string;\n apps?: string | string[];\n betaGroups?: string | string[];\n };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<BetaTester[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<BetaTester>(\"/v1/betaTesters\", listParams);\n }\n\n async get(id: string): Promise<BetaTester> {\n const response = await this.http.get<JsonApiResponse<BetaTester>>(\n `/v1/betaTesters/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n email: string;\n firstName?: string;\n lastName?: string;\n betaGroupIds?: string[];\n appIds?: string[];\n }): Promise<BetaTester> {\n const attributes: BetaTesterAttributes = {\n email: params.email,\n firstName: params.firstName,\n lastName: params.lastName,\n };\n const relationships: Record<string, { data: Array<{ type: string; id: string }> }> = {};\n if (params.betaGroupIds?.length) {\n relationships.betaGroups = {\n data: params.betaGroupIds.map((id) => ({ type: \"betaGroups\", id })),\n };\n }\n if (params.appIds?.length) {\n relationships.apps = {\n data: params.appIds.map((id) => ({ type: \"apps\", id })),\n };\n }\n const response = await this.http.post<JsonApiResponse<BetaTester>>(\n \"/v1/betaTesters\",\n {\n data: {\n type: \"betaTesters\",\n attributes,\n ...(Object.keys(relationships).length ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/betaTesters/${id}`);\n }\n\n async findByEmail(email: string): Promise<BetaTester | null> {\n const results = await this.list({ filter: { email }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaAppReviewSubmissionAttributes {\n betaReviewState?: string | null;\n submittedDate?: string | null;\n}\n\nexport type BetaAppReviewSubmission = JsonApiResource<\n \"betaAppReviewSubmissions\",\n BetaAppReviewSubmissionAttributes\n>;\n\nexport class BetaAppReviewSubmissionsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { build?: string | string[]; betaReviewState?: string };\n limit?: number;\n }): Promise<BetaAppReviewSubmission[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n return this.http.all<BetaAppReviewSubmission>(\n \"/v1/betaAppReviewSubmissions\",\n listParams\n );\n }\n\n async get(id: string): Promise<BetaAppReviewSubmission> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewSubmission>>(\n `/v1/betaAppReviewSubmissions/${id}`\n );\n return response.data;\n }\n\n async create(buildId: string): Promise<BetaAppReviewSubmission> {\n const response = await this.http.post<JsonApiResponse<BetaAppReviewSubmission>>(\n \"/v1/betaAppReviewSubmissions\",\n {\n data: {\n type: \"betaAppReviewSubmissions\",\n relationships: {\n build: { data: { type: \"builds\", id: buildId } },\n },\n },\n }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface BetaAppReviewDetailAttributes {\n contactFirstName?: string | null;\n contactLastName?: string | null;\n contactPhone?: string | null;\n contactEmail?: string | null;\n demoAccountName?: string | null;\n demoAccountPassword?: string | null;\n demoAccountRequired?: boolean | null;\n notes?: string | null;\n}\n\nexport type BetaAppReviewDetail = JsonApiResource<\n \"betaAppReviewDetails\",\n BetaAppReviewDetailAttributes\n>;\n\nexport class BetaAppReviewDetailsResource {\n constructor(private http: RequestClient) {}\n\n async getForApp(appId: string): Promise<BetaAppReviewDetail> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/apps/${appId}/betaAppReviewDetail`\n );\n return response.data;\n }\n\n async get(id: string): Promise<BetaAppReviewDetail> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/betaAppReviewDetails/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<BetaAppReviewDetailAttributes>\n ): Promise<BetaAppReviewDetail> {\n const response = await this.http.patch<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/betaAppReviewDetails/${id}`,\n { data: { type: \"betaAppReviewDetails\", id, attributes } }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport type InvitationType = \"EMAIL\" | \"PUBLIC_LINK\";\n\nexport interface BetaTesterInvitationAttributes {\n // Write-only resource: no stored attributes, just a creation side-effect.\n [key: string]: unknown;\n}\n\nexport type BetaTesterInvitation = JsonApiResource<\n \"betaTesterInvitations\",\n BetaTesterInvitationAttributes\n>;\n\nexport class BetaInvitationsResource {\n constructor(private http: RequestClient) {}\n\n /** Send a TestFlight invitation email for an existing tester + app. */\n async send(params: {\n appId: string;\n betaTesterId: string;\n }): Promise<BetaTesterInvitation> {\n const response = await this.http.post<JsonApiResponse<BetaTesterInvitation>>(\n \"/v1/betaTesterInvitations\",\n {\n data: {\n type: \"betaTesterInvitations\",\n relationships: {\n app: { data: { type: \"apps\", id: params.appId } },\n betaTester: { data: { type: \"betaTesters\", id: params.betaTesterId } },\n },\n },\n }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaLicenseAgreementAttributes {\n agreementText?: string | null;\n}\n\nexport type BetaLicenseAgreement = JsonApiResource<\n \"betaLicenseAgreements\",\n BetaLicenseAgreementAttributes\n>;\n\nexport class BetaLicensesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: { limit?: number }): Promise<BetaLicenseAgreement[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<BetaLicenseAgreement>(\n \"/v1/betaLicenseAgreements\",\n listParams\n );\n }\n\n async get(id: string): Promise<BetaLicenseAgreement> {\n const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n `/v1/betaLicenseAgreements/${id}`\n );\n return response.data;\n }\n\n async getForApp(appId: string): Promise<BetaLicenseAgreement> {\n const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n `/v1/apps/${appId}/betaLicenseAgreement`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<BetaLicenseAgreementAttributes>\n ): Promise<BetaLicenseAgreement> {\n const response = await this.http.patch<\n JsonApiResponse<BetaLicenseAgreement>\n >(`/v1/betaLicenseAgreements/${id}`, {\n data: { type: \"betaLicenseAgreements\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppPreviewAttributes {\n fileSize?: number | null;\n fileName?: string | null;\n sourceFileChecksum?: string | null;\n previewFrameTimeCode?: string | null;\n mimeType?: string | null;\n videoUrl?: string | null;\n previewImage?: { templateUrl?: string; width?: number; height?: number } | null;\n uploadOperations?: unknown[] | null;\n assetDeliveryState?: { state?: string } | null;\n uploaded?: boolean | null;\n}\n\nexport type AppPreview = JsonApiResource<\"appPreviews\", AppPreviewAttributes>;\n\nexport class AppPreviewsResource {\n constructor(private http: RequestClient) {}\n\n async get(id: string): Promise<AppPreview> {\n const response = await this.http.get<JsonApiResponse<AppPreview>>(\n `/v1/appPreviews/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appPreviewSetId: string;\n fileSize: number;\n fileName: string;\n previewFrameTimeCode?: string;\n mimeType?: string;\n }): Promise<AppPreview> {\n const { appPreviewSetId, ...rest } = params;\n const response = await this.http.post<JsonApiResponse<AppPreview>>(\n \"/v1/appPreviews\",\n {\n data: {\n type: \"appPreviews\",\n attributes: rest,\n relationships: {\n appPreviewSet: {\n data: { type: \"appPreviewSets\", id: appPreviewSetId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: { uploaded?: boolean; sourceFileChecksum?: string; previewFrameTimeCode?: string }\n ): Promise<AppPreview> {\n const response = await this.http.patch<JsonApiResponse<AppPreview>>(\n `/v1/appPreviews/${id}`,\n { data: { type: \"appPreviews\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appPreviews/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPreviewSetAttributes {\n previewType?: string | null;\n}\n\nexport type AppPreviewSet = JsonApiResource<\n \"appPreviewSets\",\n AppPreviewSetAttributes\n>;\n\nexport class AppPreviewSetsResource {\n constructor(private http: RequestClient) {}\n\n async listForLocalization(\n localizationId: string,\n params?: { limit?: number; include?: string }\n ): Promise<AppPreviewSet[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppPreviewSet>(\n `/v1/appStoreVersionLocalizations/${localizationId}/appPreviewSets`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppPreviewSet> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppPreviewSet>>(\n `/v1/appPreviewSets/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n appStoreVersionLocalizationId: string;\n previewType: string;\n }): Promise<AppPreviewSet> {\n const response = await this.http.post<JsonApiResponse<AppPreviewSet>>(\n \"/v1/appPreviewSets\",\n {\n data: {\n type: \"appPreviewSets\",\n attributes: { previewType: params.previewType },\n relationships: {\n appStoreVersionLocalization: {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: params.appStoreVersionLocalizationId,\n },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appPreviewSets/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPriceAttributes {\n startDate?: string | null;\n}\n\nexport type AppPrice = JsonApiResource<\"appPrices\", AppPriceAttributes>;\n\nexport class AppPricesResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n include?: string;\n limit?: number;\n }): Promise<AppPrice[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppPrice>(`/v1/apps/${appId}/prices`, listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppPrice> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppPrice>>(\n `/v1/appPrices/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface TerritoryAttributes {\n currency?: string | null;\n}\n\nexport type Territory = JsonApiResource<\"territories\", TerritoryAttributes>;\n\nexport class TerritoriesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: { limit?: number }): Promise<Territory[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<Territory>(\"/v1/territories\", listParams);\n }\n\n async get(id: string): Promise<Territory> {\n const response = await this.http.get<JsonApiResponse<Territory>>(\n `/v1/territories/${id}`\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AgeRatingDeclarationAttributes {\n alcoholTobaccoOrDrugUseOrReferences?: string | null;\n contests?: string | null;\n gamblingSimulated?: string | null;\n medicalOrTreatmentInformation?: string | null;\n profanityOrCrudeHumor?: string | null;\n sexualContentGraphicAndNudity?: string | null;\n sexualContentOrNudity?: string | null;\n horrorOrFearThemes?: string | null;\n matureOrSuggestiveThemes?: string | null;\n unrestrictedWebAccess?: boolean | null;\n gamblingAndContests?: boolean | null;\n gambling?: string | null;\n violenceCartoonOrFantasy?: string | null;\n violenceRealistic?: string | null;\n violenceRealisticProlongedGraphicOrSadistic?: string | null;\n kidsAgeBand?: string | null;\n seventeenPlus?: boolean | null;\n}\n\nexport type AgeRatingDeclaration = JsonApiResource<\n \"ageRatingDeclarations\",\n AgeRatingDeclarationAttributes\n>;\n\nexport class AgeRatingDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async get(id: string): Promise<AgeRatingDeclaration> {\n const response = await this.http.get<JsonApiResponse<AgeRatingDeclaration>>(\n `/v1/ageRatingDeclarations/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AgeRatingDeclarationAttributes>\n ): Promise<AgeRatingDeclaration> {\n const response = await this.http.patch<\n JsonApiResponse<AgeRatingDeclaration>\n >(`/v1/ageRatingDeclarations/${id}`, {\n data: { type: \"ageRatingDeclarations\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppCategoryAttributes {\n platforms?: string[] | null;\n}\n\nexport type AppCategory = JsonApiResource<\"appCategories\", AppCategoryAttributes>;\n\nexport class AppCategoriesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { platforms?: string };\n include?: string;\n limit?: number;\n }): Promise<AppCategory[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppCategory>(\"/v1/appCategories\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppCategory> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppCategory>>(\n `/v1/appCategories/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppEncryptionDeclarationAttributes {\n appEncryptionDeclarationState?: string | null;\n createdDate?: string | null;\n codeValue?: string | null;\n usesEncryption?: boolean | null;\n exempt?: boolean | null;\n containsProprietaryCryptography?: boolean | null;\n containsThirdPartyCryptography?: boolean | null;\n availableOnFrenchStore?: boolean | null;\n platform?: string | null;\n uploadedDate?: string | null;\n documentUrl?: string | null;\n documentName?: string | null;\n documentType?: string | null;\n}\n\nexport type AppEncryptionDeclaration = JsonApiResource<\n \"appEncryptionDeclarations\",\n AppEncryptionDeclarationAttributes\n>;\n\nexport class AppEncryptionDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { app?: string; platform?: string };\n limit?: number;\n }): Promise<AppEncryptionDeclaration[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppEncryptionDeclaration>(\n \"/v1/appEncryptionDeclarations\",\n listParams\n );\n }\n\n async get(id: string): Promise<AppEncryptionDeclaration> {\n const response = await this.http.get<\n JsonApiResponse<AppEncryptionDeclaration>\n >(`/v1/appEncryptionDeclarations/${id}`);\n return response.data;\n }\n\n async assignToBuild(params: {\n declarationId: string;\n buildIds: string[];\n }): Promise<void> {\n await this.http.post(\n `/v1/appEncryptionDeclarations/${params.declarationId}/relationships/builds`,\n { data: params.buildIds.map((id) => ({ type: \"builds\", id })) }\n );\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface IdfaDeclarationAttributes {\n honorsLimitedAdTracking?: boolean | null;\n servesAds?: boolean | null;\n attributesActionWithPreviousAd?: boolean | null;\n attributesAppInstallationToPreviousAd?: boolean | null;\n}\n\nexport type IdfaDeclaration = JsonApiResource<\n \"idfaDeclarations\",\n IdfaDeclarationAttributes\n>;\n\nexport class IdfaDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async getForAppStoreVersion(\n appStoreVersionId: string\n ): Promise<IdfaDeclaration> {\n const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n `/v1/appStoreVersions/${appStoreVersionId}/idfaDeclaration`\n );\n return response.data;\n }\n\n async get(id: string): Promise<IdfaDeclaration> {\n const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n `/v1/idfaDeclarations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appStoreVersionId: string;\n attributes: IdfaDeclarationAttributes;\n }): Promise<IdfaDeclaration> {\n const response = await this.http.post<JsonApiResponse<IdfaDeclaration>>(\n \"/v1/idfaDeclarations\",\n {\n data: {\n type: \"idfaDeclarations\",\n attributes: params.attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<IdfaDeclarationAttributes>\n ): Promise<IdfaDeclaration> {\n const response = await this.http.patch<JsonApiResponse<IdfaDeclaration>>(\n `/v1/idfaDeclarations/${id}`,\n { data: { type: \"idfaDeclarations\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/idfaDeclarations/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface PreReleaseVersionAttributes {\n version?: string | null;\n platform?: string | null;\n}\n\nexport type PreReleaseVersion = JsonApiResource<\n \"preReleaseVersions\",\n PreReleaseVersionAttributes\n>;\n\nexport class PreReleaseVersionsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n version?: string;\n platform?: string;\n \"builds.expired\"?: string;\n \"builds.processingState\"?: string;\n \"builds.version\"?: string;\n };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<PreReleaseVersion[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<PreReleaseVersion>(\n \"/v1/preReleaseVersions\",\n listParams\n );\n }\n\n async get(\n id: string,\n params?: { include?: string }\n ): Promise<PreReleaseVersion> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n `/v1/preReleaseVersions/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async findByVersion(params: {\n appId: string;\n version: string;\n platform?: string;\n }): Promise<PreReleaseVersion | null> {\n const filter: Record<string, string> = {\n app: params.appId,\n version: params.version,\n };\n if (params.platform) filter.platform = params.platform;\n const results = await this.list({ filter, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface ReviewSubmissionItemAttributes {\n state?: string | null;\n removed?: boolean | null;\n ready?: boolean | null;\n}\n\nexport type ReviewSubmissionItem = JsonApiResource<\n \"reviewSubmissionItems\",\n ReviewSubmissionItemAttributes\n>;\n\nexport class ReviewSubmissionItemsResource {\n constructor(private http: RequestClient) {}\n\n async listForSubmission(\n reviewSubmissionId: string,\n params?: { include?: string; limit?: number }\n ): Promise<ReviewSubmissionItem[]> {\n const listParams: ListParams = {\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<ReviewSubmissionItem>(\n `/v1/reviewSubmissions/${reviewSubmissionId}/items`,\n listParams\n );\n }\n\n async get(id: string): Promise<ReviewSubmissionItem> {\n const response = await this.http.get<JsonApiResponse<ReviewSubmissionItem>>(\n `/v1/reviewSubmissionItems/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n reviewSubmissionId: string;\n appStoreVersionId?: string;\n appCustomProductPageVersionId?: string;\n appStoreVersionExperimentId?: string;\n }): Promise<ReviewSubmissionItem> {\n const relationships: Record<string, { data: { type: string; id: string } }> = {\n reviewSubmission: {\n data: { type: \"reviewSubmissions\", id: params.reviewSubmissionId },\n },\n };\n if (params.appStoreVersionId) {\n relationships.appStoreVersion = {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n };\n }\n if (params.appCustomProductPageVersionId) {\n relationships.appCustomProductPageVersion = {\n data: {\n type: \"appCustomProductPageVersions\",\n id: params.appCustomProductPageVersionId,\n },\n };\n }\n if (params.appStoreVersionExperimentId) {\n relationships.appStoreVersionExperiment = {\n data: {\n type: \"appStoreVersionExperiments\",\n id: params.appStoreVersionExperimentId,\n },\n };\n }\n const response = await this.http.post<JsonApiResponse<ReviewSubmissionItem>>(\n \"/v1/reviewSubmissionItems\",\n {\n data: {\n type: \"reviewSubmissionItems\",\n relationships,\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: { removed?: boolean }\n ): Promise<ReviewSubmissionItem> {\n const response = await this.http.patch<JsonApiResponse<ReviewSubmissionItem>>(\n `/v1/reviewSubmissionItems/${id}`,\n { data: { type: \"reviewSubmissionItems\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/reviewSubmissionItems/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface UserAttributes {\n username?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n roles?: string[] | null;\n allAppsVisible?: boolean | null;\n provisioningAllowed?: boolean | null;\n}\n\nexport type User = JsonApiResource<\"users\", UserAttributes>;\n\nexport class UsersResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { username?: string; roles?: string | string[] };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<User[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<User>(\"/v1/users\", listParams);\n }\n\n async get(id: string): Promise<User> {\n const response = await this.http.get<JsonApiResponse<User>>(`/v1/users/${id}`);\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<UserAttributes>,\n visibleAppIds?: string[]\n ): Promise<User> {\n const relationships = visibleAppIds\n ? {\n visibleApps: {\n data: visibleAppIds.map((id) => ({ type: \"apps\", id })),\n },\n }\n : undefined;\n const response = await this.http.patch<JsonApiResponse<User>>(\n `/v1/users/${id}`,\n {\n data: {\n type: \"users\",\n id,\n attributes,\n ...(relationships ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/users/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface UserInvitationAttributes {\n email: string;\n firstName?: string | null;\n lastName?: string | null;\n expirationDate?: string | null;\n roles?: string[] | null;\n allAppsVisible?: boolean | null;\n provisioningAllowed?: boolean | null;\n}\n\nexport type UserInvitation = JsonApiResource<\n \"userInvitations\",\n UserInvitationAttributes\n>;\n\nexport class UserInvitationsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { email?: string; roles?: string | string[] };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<UserInvitation[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<UserInvitation>(\"/v1/userInvitations\", listParams);\n }\n\n async get(id: string): Promise<UserInvitation> {\n const response = await this.http.get<JsonApiResponse<UserInvitation>>(\n `/v1/userInvitations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n attributes: UserInvitationAttributes;\n visibleAppIds?: string[];\n }): Promise<UserInvitation> {\n const relationships = params.visibleAppIds\n ? {\n visibleApps: {\n data: params.visibleAppIds.map((id) => ({ type: \"apps\", id })),\n },\n }\n : undefined;\n const response = await this.http.post<JsonApiResponse<UserInvitation>>(\n \"/v1/userInvitations\",\n {\n data: {\n type: \"userInvitations\",\n attributes: params.attributes,\n ...(relationships ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/userInvitations/${id}`);\n }\n\n async findByEmail(email: string): Promise<UserInvitation | null> {\n const results = await this.list({ filter: { email }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface InAppPurchaseAttributes {\n name?: string | null;\n productId?: string | null;\n inAppPurchaseType?: string | null;\n state?: string | null;\n reviewNote?: string | null;\n familySharable?: boolean | null;\n}\n\nexport type InAppPurchase = JsonApiResource<\n \"inAppPurchases\" | \"inAppPurchasesV2\",\n InAppPurchaseAttributes\n>;\n\nexport class InAppPurchasesResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n filter?: { state?: string; inAppPurchaseType?: string };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<InAppPurchase[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<InAppPurchase>(\n `/v2/apps/${appId}/inAppPurchasesV2`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<InAppPurchase> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<InAppPurchase>>(\n `/v2/inAppPurchases/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface GameCenterDetailAttributes {\n arcadeEnabled?: boolean | null;\n challengeEnabled?: boolean | null;\n}\n\nexport type GameCenterDetail = JsonApiResource<\n \"gameCenterDetails\",\n GameCenterDetailAttributes\n>;\n\nexport class GameCenterDetailResource {\n constructor(private http: RequestClient) {}\n\n async getForApp(appId: string): Promise<GameCenterDetail> {\n const response = await this.http.get<JsonApiResponse<GameCenterDetail>>(\n `/v1/apps/${appId}/gameCenterDetail`\n );\n return response.data;\n }\n\n async get(id: string): Promise<GameCenterDetail> {\n const response = await this.http.get<JsonApiResponse<GameCenterDetail>>(\n `/v1/gameCenterDetails/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<GameCenterDetailAttributes>\n ): Promise<GameCenterDetail> {\n const response = await this.http.patch<JsonApiResponse<GameCenterDetail>>(\n `/v1/gameCenterDetails/${id}`,\n { data: { type: \"gameCenterDetails\", id, attributes } }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\n/**\n * TestFlight / Xcode build metrics. Exposes perf & crash stats per build.\n * Wraps `/v1/builds/{id}/perfPowerMetrics` and\n * `/v1/builds/{id}/diagnosticSignatures`.\n */\nexport interface PerfPowerMetricAttributes {\n metricCategory?: string | null;\n platform?: string | null;\n datasets?: unknown[] | null;\n}\n\nexport type PerfPowerMetric = JsonApiResource<\n \"perfPowerMetrics\",\n PerfPowerMetricAttributes\n>;\n\nexport interface DiagnosticSignatureAttributes {\n signature?: string | null;\n weight?: number | null;\n diagnosticType?: string | null;\n}\n\nexport type DiagnosticSignature = JsonApiResource<\n \"diagnosticSignatures\",\n DiagnosticSignatureAttributes\n>;\n\nexport class XcodeMetricsResource {\n constructor(private http: RequestClient) {}\n\n async getPerfPowerMetrics(buildId: string): Promise<PerfPowerMetric[]> {\n const response = await this.http.get<{ data: PerfPowerMetric[] }>(\n `/v1/builds/${buildId}/perfPowerMetrics`\n );\n return response.data;\n }\n\n async getDiagnosticSignatures(buildId: string): Promise<DiagnosticSignature[]> {\n const response = await this.http.get<{ data: DiagnosticSignature[] }>(\n `/v1/builds/${buildId}/diagnosticSignatures`\n );\n return response.data;\n }\n\n async getPerfPowerMetric(id: string): Promise<PerfPowerMetric> {\n const response = await this.http.get<JsonApiResponse<PerfPowerMetric>>(\n `/v1/perfPowerMetrics/${id}`\n );\n return response.data;\n }\n\n async getDiagnosticSignature(id: string): Promise<DiagnosticSignature> {\n const response = await this.http.get<JsonApiResponse<DiagnosticSignature>>(\n `/v1/diagnosticSignatures/${id}`\n );\n return response.data;\n }\n}\n","/**\n * Apple Developer Portal Client\n * 1:1 port of Fastlane Spaceship PortalClient\n *\n * Uses session cookies (from loginWithAppleId) to talk to\n * developer.apple.com/services-account/QH65B2/\n *\n * This is the web portal API — separate from the ASC REST API (JWT).\n * Fastlane uses this for: certs, profiles, devices, bundle IDs, app groups, etc.\n */\n\nimport type { AppleSession } from \"./apple-session.js\";\nimport { checkPortalResponse } from \"./apple-session.js\";\n\nconst PORTAL_BASE = \"https://developer.apple.com/services-account/QH65B2\";\n\n/**\n * Pick a key name that doesn't collide with any existing key in the\n * team. Apple rejects duplicate names with \"Another key with same name\n * exists\" (resultCode 35). On collision we append \" - 1\", \" - 2\", …\n * until we find a free slot.\n *\n * Note: Apple's auth key name validator is stricter than the profile\n * name validator — it rejects parentheses (resultCode 29106 \"Invalid\n * Auth Key name\") so the suffix is \" - N\" not \" (N)\".\n */\nfunction pickUniqueKeyName(base: string, taken: Set<string>): string {\n if (!taken.has(base)) return base;\n let n = 1;\n while (taken.has(`${base} - ${n}`)) n++;\n return `${base} - ${n}`;\n}\n\nexport class PortalClient {\n private session: AppleSession;\n private teamId: string;\n private csrf = \"\";\n private csrfTs = \"\";\n private cookieStr: string;\n\n constructor(session: AppleSession, teamId: string) {\n this.session = session;\n this.teamId = teamId;\n this.cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n }\n\n /** Initialize CSRF tokens — must be called before mutations */\n async init(): Promise<void> {\n await this.post(\"account/listTeams.action\", {});\n }\n\n /**\n * JSON POST — different content type than the standard form-encoded\n * `post()`. Used by the App Store Connect API key endpoints\n * (`account/auth/key/v2/create`), which Spaceship discovered take a\n * JSON body even though every other portal mutation is form-encoded.\n *\n * Like the form-encoded `post()`, this also runs the response through\n * `checkPortalResponse` — Apple returns HTTP 200 even for errors and\n * encodes the error in `resultCode`/`userString` fields, so a raw\n * status check would silently miss real failures.\n */\n private async postJson(path: string, body: unknown): Promise<{ status: number; body: any; rawText: string }> {\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n console.log(`[portal] POST(json) ${path}`);\n const res = await fetch(`${PORTAL_BASE}/${path}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n });\n\n if (res.headers.get(\"csrf\")) { this.csrf = res.headers.get(\"csrf\")!; this.csrfTs = res.headers.get(\"csrf_ts\") ?? \"\"; }\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n\n const text = await res.text();\n let data: any = null;\n try { data = text ? JSON.parse(text) : null; } catch {}\n console.log(`[portal] POST(json) ${path} → ${res.status} ${text.slice(0, 400)}`);\n // Apple's portal returns HTTP 200 with resultCode != 0 for failures;\n // checkPortalResponse throws on those.\n checkPortalResponse(data, this.session);\n return { status: res.status, body: data, rawText: text };\n }\n\n /**\n * GET helper for the portal endpoints that take query parameters\n * (currently just `account/auth/key/download`). Returns the raw text\n * since download endpoints can return PEMs or JSON depending on Apple's\n * mood — caller decides how to parse.\n */\n private async getRaw(path: string, params: Record<string, string> = {}): Promise<{ status: number; rawText: string; contentType: string }> {\n const url = new URL(`${PORTAL_BASE}/${path}`);\n for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n Accept: \"application/json, text/plain, application/x-pem-file, */*\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n console.log(`[portal] GET ${url.pathname}${url.search}`);\n const res = await fetch(url.toString(), { headers });\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n const text = await res.text();\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n console.log(`[portal] GET ${url.pathname} → ${res.status} ${contentType} ${text.length}b`);\n return { status: res.status, rawText: text, contentType };\n }\n\n // ── App Store Connect API Keys (.p8) ────────────────────────────────────\n\n /**\n * Create an App Store Connect API key via the developer portal's\n * `account/auth/key/v2/create` endpoint. Reverse-engineered from the\n * _current_ @expo/apple-utils npm package (v2.1.21), which is what\n * EAS CLI uses to manage Apple credentials in production.\n *\n * This differs from older published reverse-engineering guides:\n * • URL uses the `/v2/create` suffix (Apple kept it)\n * • Field is `serviceConfigurations`, shape is an object keyed by\n * service id (NOT `serviceConfigurationsRequests: [...]` array)\n * • Body REQUIRES `scope: \"team\"`\n * • Needs a scope-specific CSRF warmup via the `keys` endpoint\n * before the create call (EAS's `ensureCSRFAsync(\"keys\", …)`)\n *\n * For an App Store Connect API key (PUBLIC_API, used by altool for\n * TestFlight uploads), `serviceConfigurations` is an empty object `{}`.\n * For an APNs auth key, it's `{ \"U27F4V844T\": [] }`. For MusicKit:\n * `{ \"6A7HVUVQ3M\": [musicId] }`, etc.\n *\n * Apple's name validator rejects parentheses, brackets, and most\n * punctuation — sanitize to alphanumeric + space + dash + underscore\n * + period and collapse whitespace.\n */\n async createApiKey(\n rawName: string,\n serviceConfigurations: Record<string, unknown[]> = {}\n ): Promise<{ keyId: string; raw: any }> {\n // Sanitize: drop forbidden chars, leave headroom for a \"(N)\" suffix\n // since Apple caps key names at 50 chars and we may need to dedupe.\n const baseName = rawName\n .replace(/[^A-Za-z0-9 _\\-.]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 45);\n if (!baseName) throw new Error(\"createApiKey: name is empty after sanitization\");\n\n // EAS-style CSRF warmup AND name-collision discovery in one trip:\n // listApiKeys refreshes the scoped CSRF for the \"keys\" area\n // (per-section tokens, the listTeams CSRF isn't valid here) and\n // hands us back the existing key names so we can dodge Apple's\n // duplicate-name rejection (\"Another key with same name exists\").\n let existingNames = new Set<string>();\n try {\n const list = await this.listApiKeys();\n existingNames = new Set(\n (list.keys ?? []).map((k: any) => String(k.keyName ?? \"\").trim())\n );\n } catch {\n // Non-fatal — the create call will surface CSRF / collision\n // errors if the warmup mattered and failed.\n }\n\n const name = pickUniqueKeyName(baseName, existingNames);\n\n // EAS's portalRequestAsync auto-injects teamId into every body.\n // Apple rejects the create call without it with resultCode 35.\n const body = {\n teamId: this.teamId,\n name,\n serviceConfigurations,\n scope: \"team\",\n };\n const result = await this.postJson(\"account/auth/key/v2/create\", body);\n // checkPortalResponse inside postJson already throws on resultCode != 0,\n // so any error like \"Invalid Auth Key name\" surfaces as an exception\n // before reaching this point.\n const created = result.body?.keys?.[0] ?? result.body?.key ?? result.body?.data ?? result.body;\n const keyId =\n created?.keyId ??\n created?.id ??\n created?.kid ??\n created?.attributes?.kid;\n if (!keyId) {\n throw new Error(`createApiKey: no key id in response. Body: ${result.rawText.slice(0, 400)}`);\n }\n return { keyId, raw: created };\n }\n\n /**\n * Fetch a single API key by id via `account/auth/key/get`. Reverse-\n * engineered from Spaceship's `get_key`. Returns the raw key record so\n * the caller can extract whatever fields it needs (e.g. issuerId).\n *\n * Form-encoded POST — same shape as every other PortalClient mutation\n * except the JSON `create` endpoint.\n */\n async getApiKey(keyId: string): Promise<any> {\n const data = await this.post(\"account/auth/key/get\", {\n teamId: this.teamId,\n keyId,\n });\n return data?.keys?.[0] ?? data?.key ?? data?.data ?? data;\n }\n\n /**\n * Revoke an existing key. Form-encoded POST per Spaceship's\n * `revoke_key!`. Used for cleaning up orphan keys created during\n * failed wizard runs.\n */\n async revokeApiKey(keyId: string): Promise<void> {\n await this.post(\"account/auth/key/revoke\", {\n teamId: this.teamId,\n keyId,\n });\n }\n\n // ── APNs Authentication Keys (.p8) ──────────────────────────────────────\n\n /** Apple's hardcoded service id for APNs auth keys (from Spaceship). */\n static readonly APNS_SERVICE_ID = \"U27F4V844T\";\n\n /**\n * Create an APNs Authentication Key (.p8) via the developer portal.\n *\n * Apple requires BOTH `serviceConfigurations` (the map) AND\n * `serviceConfigurationsRequests` (the array of full config objects)\n * in the v2/create body. Just sending the map alone results in\n * \"No value was provided for the parameter 'serviceConfigurations'\".\n *\n * The exact body comes from @expo/apple-utils v2.1.21 — both fields\n * are produced by separate functions (`d` for the map, `h` for the\n * array) and merged into the create payload.\n *\n * Apple also rejects duplicate key names (\"Another key with same\n * name exists\") — we dedupe by listing existing keys first and\n * appending \" (N)\" until we find a free slot, mirroring the\n * provisioning profile dedup.\n */\n async createApnsAuthKey(rawName: string): Promise<{ keyId: string; pem: string; raw: any }> {\n const baseName = rawName\n .replace(/[^A-Za-z0-9 _\\-.]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 45); // headroom for a \" (N)\" suffix\n if (!baseName) throw new Error(\"createApnsAuthKey: name is empty after sanitization\");\n\n // CSRF warmup + name-collision discovery in one trip\n let existingNames = new Set<string>();\n try {\n const list = await this.listApiKeys();\n existingNames = new Set(\n (list.keys ?? []).map((k: any) => String(k.keyName ?? \"\").trim())\n );\n } catch { /* ignore */ }\n\n const name = pickUniqueKeyName(baseName, existingNames);\n\n const body = {\n teamId: this.teamId,\n name,\n serviceConfigurations: {\n [PortalClient.APNS_SERVICE_ID]: [],\n },\n serviceConfigurationsRequests: [\n {\n isNew: true,\n serviceId: PortalClient.APNS_SERVICE_ID,\n identifiers: {},\n environment: \"all\",\n scope: \"team\",\n },\n ],\n scope: \"team\",\n };\n const result = await this.postJson(\"account/auth/key/v2/create\", body);\n const created = result.body?.keys?.[0];\n if (!created?.keyId) {\n throw new Error(`createApnsAuthKey: no key id in response. Body: ${result.rawText.slice(0, 400)}`);\n }\n // Download the .p8 — Apple only allows this once\n const pem = await this.downloadApiKey(created.keyId);\n return { keyId: created.keyId, pem, raw: created };\n }\n\n /**\n * Find existing APNs auth keys in the team. Used by the wizard to\n * detect \"you already have one\" cases and offer to reuse rather than\n * proliferate keys.\n */\n async listApnsAuthKeys(): Promise<{ keyId: string; keyName: string; canDownload: boolean }[]> {\n const list = await this.listApiKeys();\n return (list.keys ?? [])\n .filter((k: any) =>\n (k.services ?? []).some((s: any) => s.id === PortalClient.APNS_SERVICE_ID || /apns/i.test(s.name ?? \"\"))\n )\n .map((k: any) => ({\n keyId: k.keyId,\n keyName: k.keyName,\n canDownload: Boolean(k.canDownload),\n }));\n }\n\n /**\n * Download an existing App Store Connect API key as PEM. Spaceship's\n * `download_key` endpoint — GET with teamId + keyId in query string.\n * Returns the raw .p8 PEM text. Apple shows the .p8 exactly once\n * (after creation), so call this immediately after createApiKey.\n */\n async downloadApiKey(keyId: string): Promise<string> {\n const { status, rawText, contentType } = await this.getRaw(\"account/auth/key/download\", {\n teamId: this.teamId,\n keyId,\n });\n if (status !== 200) {\n throw new Error(`downloadApiKey failed (${status}): ${rawText.slice(0, 200)}`);\n }\n // Plain PEM text response\n if (rawText.includes(\"BEGIN PRIVATE KEY\")) return rawText;\n // JSON wrapper variants\n if (contentType.includes(\"json\")) {\n try {\n const parsed = JSON.parse(rawText);\n const candidates = [\n parsed?.privateKey,\n parsed?.key?.privateKey,\n parsed?.keys?.[0]?.privateKey,\n parsed?.data?.attributes?.privateKey,\n parsed?.value,\n ];\n for (const c of candidates) {\n if (typeof c === \"string\" && c.includes(\"BEGIN PRIVATE KEY\")) return c;\n }\n } catch { /* fall through */ }\n }\n throw new Error(`downloadApiKey returned no PEM. Content-Type=${contentType} body=${rawText.slice(0, 300)}`);\n }\n\n /**\n * List existing API keys via the portal. Used to discover the team's\n * issuer id — every key in the team shares the same issuer id, and\n * altool needs it alongside the key id and .p8 file.\n *\n * Form-encoded POST (NOT JSON), with pagination params, per Spaceship's\n * `list_keys` method. JSON returned 415 from this endpoint.\n */\n async listApiKeys(): Promise<{ keys: any[]; issuerId?: string }> {\n const data = await this.post(\"account/auth/key/list\", {\n teamId: this.teamId,\n pageNumber: \"1\",\n pageSize: \"500\",\n sort: \"name=asc\",\n });\n const keys = data?.keys ?? [];\n // Issuer id may live on the response root, in a metadata bag, or on\n // each key — try all known paths.\n const issuerId =\n data?.issuerId ??\n data?.issuer ??\n data?.team?.issuerId ??\n keys[0]?.issuerId ??\n keys[0]?.issuer;\n return { keys, issuerId };\n }\n\n private async post(path: string, params: Record<string, string | string[]>): Promise<any> {\n // Build form body using URLSearchParams (proper encoding)\n const body = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (Array.isArray(v)) { for (const item of v) body.append(k, item); }\n else body.set(k, v);\n }\n const bodyStr = body.toString();\n\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n if (process.env.FASTNODE_DEBUG) console.log(`[portal] POST ${path} body=${bodyStr.slice(0, 200)}`);\n const res = await fetch(`${PORTAL_BASE}/${path}`, { method: \"POST\", headers, body: bodyStr });\n\n // Update CSRF\n if (res.headers.get(\"csrf\")) { this.csrf = res.headers.get(\"csrf\")!; this.csrfTs = res.headers.get(\"csrf_ts\") ?? \"\"; }\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n\n const text = await res.text();\n let data: any;\n try { data = JSON.parse(text); } catch { throw new Error(`Portal returned non-JSON: ${text.slice(0, 200)}`); }\n checkPortalResponse(data, this.session);\n return data;\n }\n\n // ── Teams ──────────────────────────────────────────────────────────────\n\n async listTeams(): Promise<any[]> {\n const data = await this.post(\"account/listTeams.action\", {});\n return data.teams ?? [];\n }\n\n // ── App IDs / Bundle IDs ───────────────────────────────────────────────\n\n async listAppIds(): Promise<any[]> {\n const data = await this.post(\"account/ios/identifiers/listAppIds.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\",\n });\n return data.appIds ?? [];\n }\n\n async createAppId(params: { identifier: string; name: string; enablePush?: boolean; enableIAP?: boolean }): Promise<any> {\n const reqParams: Record<string, string> = {\n teamId: this.teamId, type: \"explicit\", identifier: params.identifier, name: params.name,\n };\n if (params.enablePush) reqParams.push = \"on\";\n if (params.enableIAP !== false) reqParams.inAppPurchase = \"on\";\n const data = await this.post(\"account/ios/identifiers/addAppId.action\", reqParams);\n return data.appId;\n }\n\n async deleteAppId(appIdId: string): Promise<void> {\n await this.post(\"account/ios/identifiers/deleteAppId.action\", { teamId: this.teamId, appIdId });\n }\n\n /**\n * Toggle a capability (a.k.a. \"service\") on a bundle ID. Mirrors\n * Spaceship::Portal's `update_service` — the legacy portal endpoint\n * still works and is the only session-cookie-authenticated way to flip\n * capabilities like Push Notifications and Sign in with Apple from\n * outside the Apple Developer web UI.\n *\n * Common service codes (from Spaceship portal/portal_client.rb):\n * push → push notifications\n * APG3427HIY → Sign in with Apple\n * IAD53UNK2F → in-app purchase\n * homeKit → HomeKit\n * healthKit → HealthKit\n *\n * @param featureType Apple's internal capability key (string code or short name)\n * @param enabled true → turn on, false → turn off\n */\n async setBundleCapability(params: {\n appIdId: string;\n featureType: string;\n enabled: boolean;\n }): Promise<void> {\n await this.post(\"account/ios/identifiers/updateAppService.action\", {\n teamId: this.teamId,\n displayId: params.appIdId,\n featureType: params.featureType,\n featureValue: params.enabled ? \"on\" : \"off\",\n });\n }\n\n // ── Certificates ───────────────────────────────────────────────────────\n\n async listCertificates(types?: string[]): Promise<any[]> {\n // Default to all known iOS cert type codes plus Fastlane's list of\n // legacy type codes (OLDER_IOS_CERTIFICATE_TYPES). The portal may still\n // return these older codes for pre-existing certs and Fastlane's\n // `Certificate.all` includes them — see certificate.rb line 278.\n const iosTypes = types ?? [\n PortalClient.CERT_TYPES.IOS_DEVELOPMENT,\n PortalClient.CERT_TYPES.IOS_DISTRIBUTION,\n ...PortalClient.OLDER_IOS_CERTIFICATE_TYPES,\n ];\n const data = await this.post(\"account/ios/certificate/listCertRequests.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\",\n sort: \"certRequestStatusCode=asc\", types: iosTypes.join(\",\"),\n });\n return data.certRequests ?? [];\n }\n\n async listPushCertificates(): Promise<any[]> {\n // iOS-only push cert type codes, deduplicated. The endpoint\n // `account/ios/certificate/listCertRequests.action` rejects any code\n // that isn't an iOS code (so Mac push types, even if listed in\n // CERT_TYPES, must be excluded) and rejects duplicates in the comma\n // list. We also include the legacy push cert codes from before\n // Apple's 2017 cert restructuring — they still occasionally appear\n // for older bundles.\n //\n // The modern unified \"Apple Push Services\" cert (one cert for both\n // prod + sandbox) reuses IOS_PRODUCTION_PUSH (UPV3DW712I), so the\n // first two codes catch every modern case.\n const types = Array.from(\n new Set([\n PortalClient.CERT_TYPES.IOS_PRODUCTION_PUSH,\n PortalClient.CERT_TYPES.IOS_DEVELOPMENT_PUSH,\n // Legacy push codes from OLDER_IOS_CERTIFICATE_TYPES\n \"3BQKVH9I2X\",\n \"BKLRAVXMGM\",\n ])\n );\n const data = await this.post(\"account/ios/certificate/listCertRequests.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\",\n sort: \"certRequestStatusCode=asc\",\n types: types.join(\",\"),\n });\n return data.certRequests ?? [];\n }\n\n async createCertificate(params: { type: string; csrContent: string; appIdId?: string }): Promise<any> {\n const reqParams: Record<string, string> = {\n teamId: this.teamId, type: params.type, csrContent: params.csrContent,\n };\n if (params.appIdId) reqParams.appIdId = params.appIdId;\n const data = await this.post(\"account/ios/certificate/submitCertificateRequest.action\", reqParams);\n return data.certRequest;\n }\n\n async downloadCertificate(certId: string, type: string): Promise<Buffer> {\n const headers: Record<string, string> = { Cookie: this.cookieStr, Accept: \"application/json\" };\n const res = await fetch(\n `${PORTAL_BASE}/account/ios/certificate/downloadCertificateContent.action?teamId=${this.teamId}&certificateId=${certId}&type=${type}`,\n { headers }\n );\n return Buffer.from(await res.arrayBuffer());\n }\n\n async revokeCertificate(certId: string, type: string): Promise<void> {\n await this.post(\"account/ios/certificate/revokeCertificate.action\", {\n teamId: this.teamId, certificateId: certId, type,\n });\n }\n\n // ── Devices ────────────────────────────────────────────────────────────\n\n async listDevices(): Promise<any[]> {\n const data = await this.post(\"account/ios/device/listDevices.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\", includeRemovedDevices: \"false\",\n });\n return data.devices ?? [];\n }\n\n async registerDevice(params: { name: string; udid: string; deviceClass?: string }): Promise<any> {\n const data = await this.post(\"account/ios/device/addDevices.action\", {\n teamId: this.teamId, deviceNames: params.name, deviceNumbers: params.udid,\n register: \"single\", deviceClasses: params.deviceClass ?? \"iphone\",\n });\n return (data.devices ?? [])[0];\n }\n\n // ── Provisioning Profiles ──────────────────────────────────────────────\n\n async listProfiles(): Promise<any[]> {\n const data = await this.post(\"account/ios/profile/listProvisioningProfiles.action\", {\n teamId: this.teamId, includeInactiveProfiles: \"true\",\n pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\",\n });\n return data.provisioningProfiles ?? [];\n }\n\n async createProfile(params: {\n appIdId: string;\n name: string;\n distributionType: string; // \"limited\" (dev), \"store\" (appstore), \"adhoc\"\n certificateIds: string[];\n deviceIds?: string[];\n }): Promise<any> {\n const reqParams: Record<string, string | string[]> = {\n teamId: this.teamId,\n appIdId: params.appIdId,\n distributionType: params.distributionType,\n provisioningProfileName: params.name,\n certificateIds: params.certificateIds,\n };\n if (params.deviceIds?.length) reqParams.deviceIds = params.deviceIds;\n const data = await this.post(\"account/ios/profile/createProvisioningProfile.action\", reqParams);\n return data.provisioningProfile;\n }\n\n async deleteProfile(profileId: string): Promise<void> {\n await this.post(\"account/ios/profile/deleteProvisioningProfile.action\", {\n teamId: this.teamId, provisioningProfileId: profileId,\n });\n }\n\n async downloadProfile(profileId: string): Promise<Buffer> {\n const headers: Record<string, string> = { Cookie: this.cookieStr };\n const res = await fetch(\n `${PORTAL_BASE}/account/ios/profile/downloadProfileContent?teamId=${this.teamId}&provisioningProfileId=${profileId}`,\n { headers }\n );\n return Buffer.from(await res.arrayBuffer());\n }\n\n // ── Certificate Type Constants (matching Fastlane) ─────────────────────\n\n /**\n * Apple certificate type codes — copied 1:1 from Fastlane's\n * spaceship/portal/certificate.rb IOS_CERTIFICATE_TYPE_IDS / MAC_CERTIFICATE_TYPE_IDS\n */\n static CERT_TYPES = {\n // iOS\n IOS_DEVELOPMENT: \"5QPB9NHCEI\",\n IOS_DISTRIBUTION: \"R58UK2EWSO\", // App Store Production\n IOS_IN_HOUSE: \"9RQEK7MSXA\",\n IOS_DEVELOPMENT_PUSH: \"JKG5JZ54H7\",\n IOS_PRODUCTION_PUSH: \"UPV3DW712I\",\n APPLE_PUSH_PRODUCTION: \"UPV3DW712I\", // alias\n APPLE_PUSH_SANDBOX: \"JKG5JZ54H7\", // alias\n PASSBOOK: \"Y3B2F3TYSI\",\n WEBSITE_PUSH: \"3T2ZP62QW8\",\n VOIP_PUSH: \"E5D663CMZW\",\n APPLE_PAY: \"4APLUP237T\",\n APPLE_PAY_MERCHANT_IDENTITY: \"MD8Q2VRT6A\",\n // Universal (Apple Development/Distribution)\n APPLE_DEVELOPMENT: \"83Q87W3TGH\",\n APPLE_DISTRIBUTION: \"WXV89964HE\",\n // Mac\n MAC_DEVELOPMENT: \"749Y1QAGU7\",\n MAC_APP_DISTRIBUTION: \"HXZEUKP0FP\",\n MAC_INSTALLER_DISTRIBUTION: \"2PQI8IDXNH\",\n MAC_PRODUCTION_PUSH: \"CDZ7EMXIZ1\",\n MAC_DEVELOPMENT_PUSH: \"HQ4KP3I34R\",\n DEVELOPER_ID_APPLICATION: \"DIVN2GW3XT\",\n DEVELOPER_ID_INSTALLER: \"OYVN2GW35E\",\n } as const;\n\n /**\n * Legacy iOS certificate type codes that can still appear in the portal\n * responses. Port of Fastlane's Spaceship::Portal::Certificate\n * OLDER_IOS_CERTIFICATE_TYPES list (certificate.rb lines 180-189).\n */\n static OLDER_IOS_CERTIFICATE_TYPES: readonly string[] = [\n \"3BQKVH9I2X\", // old ProductionPush\n \"BKLRAVXMGM\", // old DevelopmentPush\n // Also sent by the browser, but not sure what they represent:\n \"T44PTHVNID\",\n \"DZQUP8189Y\",\n \"FGQUP4785Z\",\n \"S5WE21TULA\",\n \"FUOY7LWJET\",\n ] as const;\n}\n","/**\n * App Store Connect \"iris\" admin API client.\n *\n * The iris API lives at `https://appstoreconnect.apple.com/iris/v1/*` and\n * is what App Store Connect's own web UI uses for everything that doesn't\n * fit the public REST API (which requires JWT). Authentication is via the\n * Olympus session cookies we already obtain after SIRP + 2FA login.\n *\n * Notable iris endpoints (reverse-engineered from the App Store Connect\n * web app — Apple does not publish this API, so the shapes below are best\n * effort and may need iteration):\n *\n * POST /iris/v1/apiKeys\n * Body: { data: { type: \"apiKeys\", attributes: {\n * nickname, allAppsVisible, roles: [\"DEVELOPER\" | \"APP_MANAGER\" | ...]\n * }}}\n * Response: { data: { id, attributes: { nickname, kid, privateKey?, ... }}}\n *\n * `kid` is the key ID used in JWT auth (e.g. \"2X9R4HXF34\"). The\n * `privateKey` field, when present, contains the PEM-encoded .p8\n * content. Apple shows this exactly ONCE at creation time — if we\n * don't capture it, the key is bricked and must be revoked.\n *\n * GET /iris/v1/apiKeys\n * List existing keys. Used to find the issuer id.\n *\n * Roles the wizard uses: \"APP_MANAGER\" is the minimum needed for\n * TestFlight uploads via altool. Higher roles work too.\n *\n * Failure modes:\n * • 403 → user lacks Account Holder / Admin role → fall back to manual\n * • 4xx with `error.detail` → surface the message to the user\n * • 200 but no `privateKey` in response → endpoint shape changed,\n * surface so we can iterate\n */\n\nimport type { AppleSession } from \"./apple-session.js\";\n\nconst IRIS_BASE = \"https://appstoreconnect.apple.com/iris/v1\";\n\nexport type ApiKeyRole =\n | \"ADMIN\"\n | \"FINANCE\"\n | \"ACCESS_TO_REPORTS\"\n | \"APP_MANAGER\"\n | \"DEVELOPER\"\n | \"MARKETING\"\n | \"SALES\"\n | \"CUSTOMER_SUPPORT\";\n\nexport interface IrisApiKey {\n id: string;\n /** Key ID used for JWT auth (the short alphanumeric string) */\n kid: string;\n nickname: string;\n /** PEM-encoded .p8 private key — only present in create response, ONCE */\n privateKey?: string;\n /** Issuer id (UUID) — needed by altool/iTMSTransporter alongside the key id */\n issuerId?: string;\n roles: ApiKeyRole[];\n allAppsVisible: boolean;\n}\n\nexport class IrisClient {\n private cookieStr: string;\n\n constructor(private session: AppleSession) {\n this.cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n }\n\n private buildHeaders(): Record<string, string> {\n return {\n Cookie: this.cookieStr,\n Accept: \"application/vnd.api+json, application/json, text/plain, */*\",\n \"Content-Type\": \"application/vnd.api+json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Mimic the App Store Connect web UI's user agent\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15\",\n };\n }\n\n /**\n * Issue a request and absorb any new cookies (Apple rotates session\n * cookies on a lot of iris calls).\n */\n private async request(\n method: \"GET\" | \"POST\" | \"DELETE\",\n path: string,\n body?: unknown\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = this.buildHeaders();\n if (process.env.FASTNODE_DEBUG) {\n console.log(`[iris] ${method} ${path}${body ? ` body=${JSON.stringify(body).slice(0, 200)}` : \"\"}`);\n }\n const res = await fetch(`${IRIS_BASE}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n // Absorb new cookies\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) {\n this.session.cookies[m[1]] = m[2];\n }\n }\n this.cookieStr = Object.entries(this.session.cookies)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"; \");\n\n const text = await res.text();\n let parsed: any = null;\n try {\n parsed = text ? JSON.parse(text) : null;\n } catch {\n // not JSON\n }\n if (process.env.FASTNODE_DEBUG) {\n console.log(`[iris] → ${res.status} ${text.slice(0, 300)}`);\n }\n return { status: res.status, body: parsed, rawText: text };\n }\n\n /**\n * List existing API keys. Used both as a sanity check (the user has\n * permission) and to discover the team's issuer id (which is the same\n * for every key in the team and is needed by altool).\n *\n * Important: Apple's iris endpoint rejects most query parameters with\n * `PARAMETER_ERROR.INVALID`. Call with no params and let the API return\n * its default page.\n */\n async listApiKeys(): Promise<{ keys: IrisApiKey[]; issuerId?: string }> {\n const { status, body, rawText } = await this.request(\"GET\", \"/apiKeys\");\n if (status === 403) {\n throw new IrisAuthError(\n \"You don't have permission to manage App Store Connect API keys (this requires the Account Holder or Admin role).\"\n );\n }\n if (status >= 400 || !body) {\n throw new Error(`iris listApiKeys failed (${status}): ${rawText.slice(0, 200)}`);\n }\n\n const issuerId = body?.meta?.issuerId ?? body?.data?.[0]?.attributes?.issuerId;\n const keys: IrisApiKey[] = (body.data ?? []).map((d: any) => ({\n id: d.id,\n kid: d.attributes?.kid ?? d.id,\n nickname: d.attributes?.nickname ?? \"\",\n issuerId: d.attributes?.issuerId ?? issuerId,\n roles: d.attributes?.roles ?? [],\n allAppsVisible: d.attributes?.allAppsVisible ?? true,\n }));\n return { keys, issuerId };\n }\n\n /**\n * Create a new API key. Apple returns the .p8 PEM exactly once in the\n * create response — capture it immediately or the key is dead weight.\n *\n * `keyType` is required by Apple's iris API:\n * • PUBLIC_API — the standard team-wide API key (what TestFlight uploads need)\n * • MARKETING_API — for App Analytics access only\n */\n async createApiKey(input: {\n nickname: string;\n roles?: ApiKeyRole[];\n allAppsVisible?: boolean;\n keyType?: \"PUBLIC_API\" | \"MARKETING_API\";\n }): Promise<IrisApiKey> {\n const requestBody = {\n data: {\n type: \"apiKeys\",\n attributes: {\n nickname: input.nickname,\n roles: input.roles ?? [\"APP_MANAGER\"],\n allAppsVisible: input.allAppsVisible ?? true,\n keyType: input.keyType ?? \"PUBLIC_API\",\n },\n },\n };\n\n // Always log this — it's the trickiest call in the whole orchestrator\n // and we need full visibility while the iris API is being shaken out.\n console.log(\"[iris] createApiKey request:\", JSON.stringify(requestBody));\n const { status, body, rawText } = await this.request(\"POST\", \"/apiKeys\", requestBody);\n console.log(`[iris] createApiKey response: ${status} ${rawText.slice(0, 800)}`);\n\n if (status === 403) {\n throw new IrisAuthError(\n \"You don't have permission to create App Store Connect API keys (this requires the Account Holder or Admin role).\"\n );\n }\n if (status >= 400 || !body) {\n const msg =\n body?.errors?.[0]?.detail ??\n body?.errors?.[0]?.title ??\n rawText.slice(0, 300) ??\n `iris createApiKey failed (${status})`;\n throw new Error(msg);\n }\n\n const data = body.data ?? body;\n if (!data?.id) {\n throw new Error(`iris createApiKey returned no key id. Raw response: ${rawText.slice(0, 400)}`);\n }\n\n const key: IrisApiKey = {\n id: data.id,\n kid: data.attributes?.kid ?? data.id,\n nickname: data.attributes?.nickname ?? input.nickname,\n privateKey: data.attributes?.privateKey,\n issuerId: data.attributes?.issuerId,\n roles: data.attributes?.roles ?? input.roles ?? [\"APP_MANAGER\"],\n allAppsVisible: data.attributes?.allAppsVisible ?? true,\n };\n return key;\n }\n\n /**\n * Fetch the .p8 PEM AND the team's issuer id for a previously-created\n * ASC API key. Both come back in a single request via:\n *\n * GET /iris/v1/apiKeys/{id}?fields[apiKeys]=privateKey&include=provider\n *\n * Sparse fieldset requesting ONLY `privateKey` is the magic that makes\n * Apple actually include the (base64-encoded) PEM in the response —\n * the default view returns `privateKey: null`. The `include=provider`\n * pulls the team's contentProvider record into `included[]`, and its\n * `id` field IS the issuer id altool needs (a UUID like\n * `cfadaf94-44ca-4c2c-8fa6-ecc28d3c7d0d`).\n *\n * Reverse-engineered from @expo/apple-utils v2.1.21 (the package that\n * powers EAS CLI), specifically the `ApiKey.downloadAsync` method\n * combined with `ApiKey.infoAsync` reading `provider?.id`.\n *\n * Returns `{ pem, issuerId }`, or `null` if Apple won't return the\n * private key (typically because the key was already downloaded once).\n */\n async fetchApiKeyPrivateKey(keyId: string): Promise<{ pem: string; issuerId?: string } | null> {\n try {\n const url = `${IRIS_BASE}/apiKeys/${keyId}?fields%5BapiKeys%5D=privateKey&include=provider`;\n const res = await fetch(url, {\n headers: {\n ...this.buildHeaders(),\n Accept: \"application/vnd.api+json, application/json, text/plain, */*\",\n },\n });\n const text = await res.text();\n console.log(`[iris] fetchApiKeyPrivateKey → ${res.status} (${text.length} bytes)`);\n if (res.status !== 200) {\n console.log(`[iris] err: ${text.slice(0, 300)}`);\n return null;\n }\n const body = JSON.parse(text);\n const encoded = body?.data?.attributes?.privateKey;\n if (typeof encoded !== \"string\" || encoded.length === 0) {\n console.log(`[iris] no privateKey in response`);\n return null;\n }\n const pem = Buffer.from(encoded, \"base64\").toString(\"utf-8\");\n if (!pem.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] decoded body didn't contain PEM marker`);\n return null;\n }\n // Issuer id is the contentProvider in the included array\n const provider = (body?.included ?? []).find((i: any) => i.type === \"contentProviders\");\n const issuerId = provider?.id;\n console.log(`[iris] ✓ PEM ${pem.length} bytes, issuerId=${issuerId ?? \"(missing)\"}`);\n return { pem, issuerId };\n } catch (err) {\n console.log(`[iris] fetchApiKeyPrivateKey error: ${(err as Error).message}`);\n return null;\n }\n }\n\n /**\n * @deprecated Kept as a fallback probe for debugging. The real path\n * is the sparse fieldset above — everything in this brute-force list\n * returned 404 during testing. Left here so we can re-verify if Apple\n * changes anything.\n */\n async fetchApiKeyPrivateKeyBruteForce(keyId: string): Promise<string | null> {\n type Attempt =\n | { kind: \"GET\"; path: string; accept?: string }\n | { kind: \"POST\"; path: string; body?: unknown }\n | { kind: \"ABSOLUTE\"; url: string };\n\n const attempts: Attempt[] = [\n // Sparse fieldsets — JSON-API spec lets us request specific attributes.\n // Apple may exclude privateKey by default and return it only when asked.\n { kind: \"GET\", path: `/apiKeys/${keyId}?fields[apiKeys]=privateKey,kid,issuerId,nickname,roles` },\n { kind: \"GET\", path: `/apiKeys/${keyId}?include=privateKey` },\n { kind: \"GET\", path: `/apiKeys/${keyId}?fields[apiKeys]=privateKey` },\n // Custom Accept headers — maybe Apple negotiates content type\n { kind: \"GET\", path: `/apiKeys/${keyId}`, accept: \"application/x-pem-file\" },\n { kind: \"GET\", path: `/apiKeys/${keyId}`, accept: \"application/octet-stream\" },\n { kind: \"GET\", path: `/apiKeys/${keyId}/p8`, accept: \"application/x-pem-file\" },\n // POST variants — Apple sometimes uses POST to mint a download token\n { kind: \"POST\", path: `/apiKeys/${keyId}/secrets`, body: {} },\n { kind: \"POST\", path: `/apiKeys/${keyId}/regenerate`, body: {} },\n { kind: \"POST\", path: `/apiKeys/${keyId}/p8`, body: {} },\n // Bare GET (last) — confirms canonical fields, in case my parser missed any\n { kind: \"GET\", path: `/apiKeys/${keyId}` },\n // Different host — the legacy developer.apple.com user-and-access namespace\n { kind: \"ABSOLUTE\", url: `https://appstoreconnect.apple.com/api/v1/apiKeys/${keyId}/p8` },\n { kind: \"ABSOLUTE\", url: `https://appstoreconnect.apple.com/access/api/keys/${keyId}/download` },\n ];\n\n for (const attempt of attempts) {\n try {\n let result: { status: number; body: any; rawText: string };\n if (attempt.kind === \"GET\") {\n // Custom request that allows overriding Accept header.\n result = await this.requestWithHeaders(\"GET\", attempt.path, undefined, {\n ...(attempt.accept ? { Accept: attempt.accept } : {}),\n });\n console.log(`[iris] fetchApiKeyPrivateKey GET ${attempt.path}${attempt.accept ? ` accept=${attempt.accept}` : \"\"} → ${result.status} (${result.rawText.length} bytes)`);\n } else if (attempt.kind === \"POST\") {\n result = await this.request(\"POST\", attempt.path, attempt.body);\n console.log(`[iris] fetchApiKeyPrivateKey POST ${attempt.path} → ${result.status} (${result.rawText.length} bytes)`);\n } else {\n result = await this.requestAbsolute(\"GET\", attempt.url);\n console.log(`[iris] fetchApiKeyPrivateKey GET ${attempt.url} → ${result.status} (${result.rawText.length} bytes)`);\n }\n\n // For 200 responses, log the full body so we can see what Apple is returning.\n if (result.status === 200) {\n console.log(`[iris] body: ${result.rawText.slice(0, 1500)}`);\n }\n if (result.status !== 200) continue;\n\n // Plain PEM body\n if (result.rawText && result.rawText.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] ✓ found PEM (plain text response)`);\n return result.rawText;\n }\n // JSON wrapper that might contain the PEM under various attribute names\n if (result.body) {\n const candidates = [\n result.body?.data?.attributes?.privateKey,\n result.body?.data?.attributes?.p8,\n result.body?.data?.attributes?.privateKeyContent,\n result.body?.data?.attributes?.kpem,\n result.body?.data?.attributes?.secret,\n result.body?.data?.attributes?.keyContent,\n result.body?.privateKey,\n result.body?.p8,\n result.body?.value,\n result.body?.secret,\n ];\n for (const c of candidates) {\n if (typeof c === \"string\" && c.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] ✓ found PEM in JSON response`);\n return c;\n }\n }\n }\n } catch (err) {\n console.log(`[iris] fetchApiKeyPrivateKey attempt failed: ${(err as Error).message}`);\n }\n }\n console.log(`[iris] fetchApiKeyPrivateKey: no working download path for key ${keyId}`);\n return null;\n }\n\n /** Internal: like request() but lets us override headers. */\n private async requestWithHeaders(\n method: \"GET\" | \"POST\" | \"DELETE\",\n path: string,\n body?: unknown,\n extraHeaders: Record<string, string> = {}\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = { ...this.buildHeaders(), ...extraHeaders };\n const res = await fetch(`${IRIS_BASE}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) this.session.cookies[m[1]] = m[2];\n }\n this.cookieStr = Object.entries(this.session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n const text = await res.text();\n let parsed: any = null;\n try { parsed = text ? JSON.parse(text) : null; } catch {}\n return { status: res.status, body: parsed, rawText: text };\n }\n\n /** Internal: fetch an absolute URL with the session cookies. */\n private async requestAbsolute(\n method: \"GET\" | \"POST\" | \"DELETE\",\n url: string\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = this.buildHeaders();\n const res = await fetch(url, { method, headers });\n const text = await res.text();\n let parsed: any = null;\n try { parsed = text ? JSON.parse(text) : null; } catch {}\n return { status: res.status, body: parsed, rawText: text };\n }\n\n async deleteApiKey(keyId: string): Promise<void> {\n await this.request(\"DELETE\", `/apiKeys/${keyId}`);\n }\n}\n\n/** Thrown when the user doesn't have permission to use the iris admin API. */\nexport class IrisAuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"IrisAuthError\";\n }\n}\n","import { TokenManager } from \"./auth.js\";\nimport { RequestClient } from \"./request.js\";\nimport type { AppStoreConnectConfig, ListParams, RequestOptions } from \"./types.js\";\nimport { CertificatesResource } from \"../resources/certificates.js\";\nimport { ProfilesResource } from \"../resources/profiles.js\";\nimport { BundleIdsResource } from \"../resources/bundle-ids.js\";\nimport { DevicesResource } from \"../resources/devices.js\";\nimport { AppsResource } from \"../resources/apps.js\";\nimport { BuildsResource } from \"../resources/builds.js\";\nimport { BetaGroupsResource } from \"../resources/beta-groups.js\";\nimport { CapabilitiesResource } from \"../resources/capabilities.js\";\nimport { AppStoreVersionsResource } from \"../resources/app-store-versions.js\";\nimport { AppScreenshotsResource } from \"../resources/app-screenshots.js\";\nimport { ReviewSubmissionsResource } from \"../resources/review-submissions.js\";\nimport { AppInfosResource } from \"../resources/app-info.js\";\nimport { AppInfoLocalizationsResource } from \"../resources/app-info-localizations.js\";\nimport { AppStoreReviewDetailsResource } from \"../resources/app-store-review-details.js\";\nimport { BetaTestersResource } from \"../resources/beta-testers.js\";\nimport { BetaAppReviewSubmissionsResource } from \"../resources/beta-app-review-submissions.js\";\nimport { BetaAppReviewDetailsResource } from \"../resources/beta-app-review-details.js\";\nimport { BetaInvitationsResource } from \"../resources/beta-invitations.js\";\nimport { BetaLicensesResource } from \"../resources/beta-licenses.js\";\nimport { AppPreviewsResource } from \"../resources/app-previews.js\";\nimport { AppPreviewSetsResource } from \"../resources/app-preview-sets.js\";\nimport { AppPricesResource } from \"../resources/app-prices.js\";\nimport { TerritoriesResource } from \"../resources/territories.js\";\nimport { AgeRatingDeclarationsResource } from \"../resources/age-rating-declarations.js\";\nimport { AppCategoriesResource } from \"../resources/app-categories.js\";\nimport { AppEncryptionDeclarationsResource } from \"../resources/app-encryption-declarations.js\";\nimport { IdfaDeclarationsResource } from \"../resources/idfa-declarations.js\";\nimport { PreReleaseVersionsResource } from \"../resources/pre-release-versions.js\";\nimport { ReviewSubmissionItemsResource } from \"../resources/review-submission-items.js\";\nimport { UsersResource } from \"../resources/users.js\";\nimport { UserInvitationsResource } from \"../resources/user-invitations.js\";\nimport { InAppPurchasesResource } from \"../resources/in-app-purchases.js\";\nimport { GameCenterDetailResource } from \"../resources/game-center-detail.js\";\nimport { XcodeMetricsResource } from \"../resources/xcode-metrics.js\";\n\nexport type { AppStoreConnectConfig, ListParams, RequestOptions };\nexport { TokenManager } from \"./auth.js\";\nexport type { TokenConfig } from \"./auth.js\";\nexport { RequestClient, AppStoreConnectError, RateLimitError } from \"./request.js\";\nexport type * from \"./types.js\";\nexport {\n loginWithAppleId,\n beginLogin,\n submitTwoFactorCode,\n requestSmsCode,\n checkPortalResponse,\n ProgramLicenseAgreementError,\n} from \"./apple-session.js\";\nexport type {\n AppleSessionConfig,\n AppleSession,\n ContractMessage,\n PendingLogin,\n TwoFactorChallenge,\n BeginLoginResult,\n} from \"./apple-session.js\";\nexport { PortalClient } from \"./portal.js\";\nexport { IrisClient, IrisAuthError } from \"./iris.js\";\nexport type { IrisApiKey, ApiKeyRole } from \"./iris.js\";\n\nexport class AppStoreConnectClient {\n readonly http: RequestClient;\n\n readonly certificates: CertificatesResource;\n readonly profiles: ProfilesResource;\n readonly bundleIds: BundleIdsResource;\n readonly devices: DevicesResource;\n readonly apps: AppsResource;\n readonly builds: BuildsResource;\n readonly betaGroups: BetaGroupsResource;\n readonly capabilities: CapabilitiesResource;\n readonly appStoreVersions: AppStoreVersionsResource;\n readonly appScreenshots: AppScreenshotsResource;\n readonly reviewSubmissions: ReviewSubmissionsResource;\n readonly appInfos: AppInfosResource;\n readonly appInfoLocalizations: AppInfoLocalizationsResource;\n readonly appStoreReviewDetails: AppStoreReviewDetailsResource;\n readonly betaTesters: BetaTestersResource;\n readonly betaAppReviewSubmissions: BetaAppReviewSubmissionsResource;\n readonly betaAppReviewDetails: BetaAppReviewDetailsResource;\n readonly betaInvitations: BetaInvitationsResource;\n readonly betaLicenses: BetaLicensesResource;\n readonly appPreviews: AppPreviewsResource;\n readonly appPreviewSets: AppPreviewSetsResource;\n readonly appPrices: AppPricesResource;\n readonly territories: TerritoriesResource;\n readonly ageRatingDeclarations: AgeRatingDeclarationsResource;\n readonly appCategories: AppCategoriesResource;\n readonly appEncryptionDeclarations: AppEncryptionDeclarationsResource;\n readonly idfaDeclarations: IdfaDeclarationsResource;\n readonly preReleaseVersions: PreReleaseVersionsResource;\n readonly reviewSubmissionItems: ReviewSubmissionItemsResource;\n readonly users: UsersResource;\n readonly userInvitations: UserInvitationsResource;\n readonly inAppPurchases: InAppPurchasesResource;\n readonly gameCenterDetail: GameCenterDetailResource;\n readonly xcodeMetrics: XcodeMetricsResource;\n\n constructor(config: AppStoreConnectConfig) {\n const tokenManager = new TokenManager({\n keyId: config.keyId,\n issuerId: config.issuerId,\n privateKey: config.privateKey,\n enterprise: config.enterprise,\n duration: config.tokenDuration,\n });\n this.http = new RequestClient(tokenManager, config.enterprise);\n\n this.certificates = new CertificatesResource(this.http);\n this.profiles = new ProfilesResource(this.http);\n this.bundleIds = new BundleIdsResource(this.http);\n this.devices = new DevicesResource(this.http);\n this.apps = new AppsResource(this.http);\n this.builds = new BuildsResource(this.http);\n this.betaGroups = new BetaGroupsResource(this.http);\n this.capabilities = new CapabilitiesResource(this.http);\n this.appStoreVersions = new AppStoreVersionsResource(this.http);\n this.appScreenshots = new AppScreenshotsResource(this.http);\n this.reviewSubmissions = new ReviewSubmissionsResource(this.http);\n this.appInfos = new AppInfosResource(this.http);\n this.appInfoLocalizations = new AppInfoLocalizationsResource(this.http);\n this.appStoreReviewDetails = new AppStoreReviewDetailsResource(this.http);\n this.betaTesters = new BetaTestersResource(this.http);\n this.betaAppReviewSubmissions = new BetaAppReviewSubmissionsResource(this.http);\n this.betaAppReviewDetails = new BetaAppReviewDetailsResource(this.http);\n this.betaInvitations = new BetaInvitationsResource(this.http);\n this.betaLicenses = new BetaLicensesResource(this.http);\n this.appPreviews = new AppPreviewsResource(this.http);\n this.appPreviewSets = new AppPreviewSetsResource(this.http);\n this.appPrices = new AppPricesResource(this.http);\n this.territories = new TerritoriesResource(this.http);\n this.ageRatingDeclarations = new AgeRatingDeclarationsResource(this.http);\n this.appCategories = new AppCategoriesResource(this.http);\n this.appEncryptionDeclarations = new AppEncryptionDeclarationsResource(this.http);\n this.idfaDeclarations = new IdfaDeclarationsResource(this.http);\n this.preReleaseVersions = new PreReleaseVersionsResource(this.http);\n this.reviewSubmissionItems = new ReviewSubmissionItemsResource(this.http);\n this.users = new UsersResource(this.http);\n this.userInvitations = new UserInvitationsResource(this.http);\n this.inAppPurchases = new InAppPurchasesResource(this.http);\n this.gameCenterDetail = new GameCenterDetailResource(this.http);\n this.xcodeMetrics = new XcodeMetricsResource(this.http);\n }\n\n async request<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.http.request<T>(path, options);\n }\n}\n","/**\n * Device frame definitions ported from Fastlane's `frameit/device_types.rb`.\n *\n * Each device mirrors Fastlane's `Device.new(id, name, priority, resolutions,\n * ppi, color, platform)` declaration. Frame canvas dimensions and screen\n * offsets are computed from the primary screen resolution, because Fastlane\n * resolves those at runtime from the downloaded `offsets.json` in its frames\n * repository — which is not bundled here.\n *\n * For modern edge-to-edge devices (post-2017 iPhones, Pixel 3+, recent Samsung),\n * the frame adds a small 4–7% horizontal bezel. For bezeled devices, padding\n * roughly follows the real chassis (~10% X, ~18% Y). These estimates mean\n * `frameScreenshots` still composites sensibly, but they are not pixel-perfect\n * reproductions of the real frame PNGs.\n *\n * Device names follow Fastlane's `formatted_name_without_apple`: the \"Apple \"\n * prefix is stripped, as are parenthesised suffixes (e.g. \"(3rd generation)\").\n */\n\nexport interface DeviceFrame {\n /** Fastlane device id (slug). Used for filename detection. */\n id: string;\n /** Human-readable device name (matches Fastlane's `formatted_name_without_apple`). */\n name: string;\n /** Priority (from Fastlane). Higher wins when multiple devices match. */\n priority: number;\n /** Frame canvas dimensions (computed). */\n width: number;\n height: number;\n /** Primary screen resolution used for detection and compositing. */\n screenWidth: number;\n screenHeight: number;\n /** All supported screen resolutions [width, height] for detection. */\n screenResolutions: Array<[number, number]>;\n /** Screen-within-frame offset in pixels. */\n screenOffsetX: number;\n screenOffsetY: number;\n platform: \"ios\" | \"android\" | \"mac\";\n /** Optional PPI from Fastlane. */\n ppi?: number;\n /** Default color from Fastlane. */\n color?: string;\n}\n\ninterface ComputeInput {\n id: string;\n name: string;\n priority: number;\n resolutions: Array<[number, number]>;\n ppi?: number;\n color?: string;\n platform: \"ios\" | \"android\" | \"mac\";\n style: \"edge\" | \"bezel\" | \"tablet\" | \"mac\";\n}\n\nfunction buildFrame(d: ComputeInput): DeviceFrame {\n // Pick the portrait resolution (smaller = width)\n const [res] = d.resolutions;\n const [a, b] = res;\n const screenWidth = Math.min(a, b);\n const screenHeight = Math.max(a, b);\n\n let width: number;\n let height: number;\n let offsetX: number;\n let offsetY: number;\n\n switch (d.style) {\n case \"edge\": {\n // Modern edge-to-edge: ~4% X bezel each side, minimal Y bezel\n const padX = Math.round(screenWidth * 0.04);\n const padY = Math.round(screenHeight * 0.005);\n width = screenWidth + padX * 2;\n height = screenHeight + padY * 2;\n offsetX = padX;\n offsetY = padY;\n break;\n }\n case \"bezel\": {\n // Older bezeled phones: ~5% X, ~9% Y each side\n const padX = Math.round(screenWidth * 0.05);\n const padY = Math.round(screenHeight * 0.09);\n width = screenWidth + padX * 2;\n height = screenHeight + padY * 2;\n offsetX = padX;\n offsetY = padY;\n break;\n }\n case \"tablet\": {\n const padX = Math.round(screenWidth * 0.05);\n const padY = Math.round(screenHeight * 0.05);\n width = screenWidth + padX * 2;\n height = screenHeight + padY * 2;\n offsetX = padX;\n offsetY = padY;\n break;\n }\n case \"mac\": {\n const padX = Math.round(screenWidth * 0.08);\n const padY = Math.round(screenHeight * 0.12);\n width = screenWidth + padX * 2;\n height = screenHeight + padY * 2;\n offsetX = padX;\n offsetY = padY;\n break;\n }\n }\n\n return {\n id: d.id,\n name: d.name,\n priority: d.priority,\n width,\n height,\n screenWidth,\n screenHeight,\n screenResolutions: d.resolutions,\n screenOffsetX: offsetX,\n screenOffsetY: offsetY,\n platform: d.platform,\n ppi: d.ppi,\n color: d.color,\n };\n}\n\n/**\n * All devices from Fastlane's `frameit/device_types.rb` (66 entries) plus\n * iPhone 15/16 models that Apple released after Fastlane's last update, and\n * a couple of Samsung Galaxy S21 entries carried over from fastnode's\n * pre-port list. Ordered descending by priority so `detectDevice*` picks the\n * newest/highest priority device when multiple match.\n */\nexport const DEVICE_FRAMES: DeviceFrame[] = [\n // ── iPhones 15/16 (post-Fastlane) ──\n buildFrame({ id: \"iphone16-pro-max\", name: \"iPhone 16 Pro Max\", priority: 14, resolutions: [[1320, 2868], [2868, 1320]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-16-pro\", name: \"iPhone 16 Pro\", priority: 14, resolutions: [[1206, 2622], [2622, 1206]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-16-plus\", name: \"iPhone 16 Plus\", priority: 14, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-16\", name: \"iPhone 16\", priority: 14, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone15-pro-max\", name: \"iPhone 15 Pro Max\", priority: 13, resolutions: [[1290, 2796], [2796, 1290]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-15-pro\", name: \"iPhone 15 Pro\", priority: 13, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-15-plus\", name: \"iPhone 15 Plus\", priority: 13, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-15\", name: \"iPhone 15\", priority: 13, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n\n // ── iPhones (Fastlane Platform::IOS) ──\n buildFrame({ id: \"iphone14-pro-max\", name: \"iPhone 14 Pro Max\", priority: 12, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-14-pro\", name: \"iPhone 14 Pro\", priority: 12, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-14-plus\", name: \"iPhone 14 Plus\", priority: 12, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-14\", name: \"iPhone 14\", priority: 12, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone13-pro-max\", name: \"iPhone 13 Pro Max\", priority: 11, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-13-pro\", name: \"iPhone 13 Pro\", priority: 11, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-13\", name: \"iPhone 13\", priority: 11, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-13-mini\", name: \"iPhone 13 Mini\", priority: 11, resolutions: [[1080, 2340], [2340, 1080]], ppi: 476, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone12-pro-max\", name: \"iPhone 12 Pro Max\", priority: 10, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-12-pro\", name: \"iPhone 12 Pro\", priority: 10, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-12\", name: \"iPhone 12\", priority: 10, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-12-mini\", name: \"iPhone 12 Mini\", priority: 10, resolutions: [[1125, 2436], [2436, 1125]], ppi: 476, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone11-pro-max\", name: \"iPhone 11 Pro Max\", priority: 9, resolutions: [[1242, 2688], [2688, 1242]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-11-pro\", name: \"iPhone 11 Pro\", priority: 9, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-11\", name: \"iPhone 11\", priority: 9, resolutions: [[828, 1792], [1792, 828]], ppi: 326, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-XS-Max\", name: \"iPhone XS Max\", priority: 8, resolutions: [[1242, 2688], [2688, 1242]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-XR\", name: \"iPhone XR\", priority: 8, resolutions: [[828, 1792], [1792, 828]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-XS\", name: \"iPhone XS\", priority: 8, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-X\", name: \"iPhone X\", priority: 7, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-8\", name: \"iPhone 8\", priority: 6, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-8-plus\", name: \"iPhone 8 Plus\", priority: 6, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-7\", name: \"iPhone 7\", priority: 5, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Matte Black\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-7-plus\", name: \"iPhone 7 Plus\", priority: 5, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Matte Black\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-6s\", name: \"iPhone 6s\", priority: 4, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-6s-plus\", name: \"iPhone 6s Plus\", priority: 4, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-se\", name: \"iPhone SE\", priority: 3, resolutions: [[640, 1096], [640, 1136], [1136, 600], [1136, 640]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-5s\", name: \"iPhone 5s\", priority: 2, resolutions: [[640, 1096], [640, 1136], [1136, 600], [1136, 640]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-5c\", name: \"iPhone 5c\", priority: 2, resolutions: [[640, 1136], [1136, 640]], ppi: 326, color: \"White\", platform: \"ios\", style: \"bezel\" }),\n\n // ── iPads ──\n buildFrame({ id: \"ipadPro11\", name: \"iPad Pro 11-inch\", priority: 1, resolutions: [[1668, 2388], [2388, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipadPro129\", name: \"iPad Pro 12.9-inch 4th generation\", priority: 5, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipadPro129-3gen\", name: \"iPad Pro 12.9-inch 3rd generation\", priority: 4, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-pro\", name: \"iPad Pro\", priority: 3, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad105\", name: \"iPad Pro 10.5-inch\", priority: 1, resolutions: [[1668, 2224], [2224, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-10-2\", name: \"iPad 10.2\", priority: 1, resolutions: [[1620, 2160], [2160, 1620]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-air-2\", name: \"iPad Air 2\", priority: 1, resolutions: [[1536, 2048], [2048, 1536]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-air-2019\", name: \"iPad Air 2019\", priority: 2, resolutions: [[1668, 2224], [2224, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-mini-4\", name: \"iPad Mini 4\", priority: 2, resolutions: [[1536, 2048], [2048, 1536]], ppi: 324, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-mini-2019\", name: \"iPad Mini 2019\", priority: 3, resolutions: [[1536, 2048], [2048, 1536]], ppi: 324, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n\n // ── Mac ──\n buildFrame({ id: \"mac\", name: \"MacBook\", priority: 0, resolutions: [[1280, 800], [1440, 900], [2560, 1600], [2880, 1800]], color: \"Space Gray\", platform: \"mac\", style: \"mac\" }),\n\n // ── Google Pixel (Android) ──\n buildFrame({ id: \"google-pixel-5\", name: \"Google Pixel 5\", priority: 10, resolutions: [[1080, 2340], [2340, 1080]], ppi: 432, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"google-pixel-4-xl\", name: \"Google Pixel 4 XL\", priority: 9, resolutions: [[1440, 3040], [3040, 1440]], ppi: 537, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"google-pixel-4\", name: \"Google Pixel 4\", priority: 9, resolutions: [[1080, 2280], [2280, 1080]], ppi: 444, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"google-pixel-3-xl\", name: \"Google Pixel 3 XL\", priority: 7, resolutions: [[1440, 2960], [2960, 1440]], ppi: 523, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"google-pixel-3\", name: \"Google Pixel 3\", priority: 7, resolutions: [[1080, 2160], [2160, 1080]], ppi: 443, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n\n // ── HTC / Huawei / Motorola (Android, bezeled) ──\n buildFrame({ id: \"htc-one-a9\", name: \"HTC One A9\", priority: 6, resolutions: [[1080, 1920], [1920, 1080]], ppi: 441, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"htc-one-m8\", name: \"HTC One M8\", priority: 3, resolutions: [[1080, 1920], [1920, 1080]], ppi: 441, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"huawei-p8\", name: \"Huawei P8\", priority: 5, resolutions: [[1080, 1920], [1920, 1080]], ppi: 424, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"motorola-moto-e\", name: \"Motorola Moto E\", priority: 3, resolutions: [[540, 960], [960, 540]], ppi: 245, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"motorola-moto-g\", name: \"Motorola Moto G\", priority: 4, resolutions: [[1080, 1920], [1920, 1080]], ppi: 401, platform: \"android\", style: \"bezel\" }),\n\n // ── Nexus (Android, bezeled) ──\n buildFrame({ id: \"nexus-4\", name: \"Nexus 4\", priority: 7, resolutions: [[768, 1280], [1820, 768]], ppi: 318, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"nexus-5x\", name: \"Nexus 5X\", priority: 7, resolutions: [[1080, 1920], [1920, 1080]], ppi: 423, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"nexus-6p\", name: \"Nexus 6P\", priority: 7, resolutions: [[1440, 2560], [2560, 1440]], ppi: 518, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"nexus-9\", name: \"Nexus 9\", priority: 7, resolutions: [[1536, 2048], [2048, 1536]], ppi: 281, platform: \"android\", style: \"tablet\" }),\n\n // ── Samsung Galaxy (Android) ──\n buildFrame({ id: \"samsung-galaxy-s21\", name: \"Samsung Galaxy S21\", priority: 9, resolutions: [[1080, 2400], [2400, 1080]], ppi: 421, color: \"Phantom Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-note-10-plus\", name: \"Samsung Galaxy Note 10+\", priority: 7, resolutions: [[1440, 3040], [3040, 1440]], ppi: 498, color: \"Aura Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-note-10\", name: \"Samsung Galaxy Note 10\", priority: 6, resolutions: [[1080, 2280], [2280, 1080]], ppi: 401, color: \"Aura Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-note-5\", name: \"Samsung Galaxy Note 5\", priority: 5, resolutions: [[1440, 2560], [2560, 1440]], ppi: 518, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-s10-plus\", name: \"Samsung Galaxy S10+\", priority: 8, resolutions: [[1440, 3040], [3040, 1440]], ppi: 522, color: \"Prism Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-s10\", name: \"Samsung Galaxy S10\", priority: 7, resolutions: [[1440, 3040], [3040, 1440]], ppi: 550, color: \"Prism Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-s9\", name: \"Samsung Galaxy S9\", priority: 6, resolutions: [[1440, 2960], [2960, 1440]], ppi: 570, color: \"Midnight Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-s8\", name: \"Samsung Galaxy S8\", priority: 5, resolutions: [[1440, 2960], [2960, 1440]], ppi: 570, color: \"Midnight Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-s7\", name: \"Samsung Galaxy S7\", priority: 4, resolutions: [[1440, 2560], [2560, 1440]], ppi: 577, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-s5\", name: \"Samsung Galaxy S5\", priority: 3, resolutions: [[1080, 1920], [1920, 1080]], ppi: 432, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-s3\", name: \"Samsung Galaxy S3\", priority: 3, resolutions: [[720, 1280], [1280, 720]], ppi: 306, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-s-duos\", name: \"Samsung Galaxy S Duos\", priority: 3, resolutions: [[480, 800], [800, 480]], ppi: 233, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-grand-prime\", name: \"Samsung Galaxy Grand Prime\", priority: 5, resolutions: [[540, 960], [960, 540]], ppi: 220, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n\n // ── Xiaomi ──\n buildFrame({ id: \"xiaomi-mi-mix-alpha\", name: \"Xiaomi Mi Mix Alpha\", priority: 1, resolutions: [[2088, 2250], [2250, 2088]], ppi: 388, platform: \"android\", style: \"edge\" }),\n];\n\n/**\n * Match a device by screenshot pixel dimensions. Returns the highest-priority\n * device whose resolution list contains `(width, height)` in either orientation.\n */\nexport function detectDeviceFromDimensions(\n width: number,\n height: number\n): DeviceFrame | null {\n let best: DeviceFrame | null = null;\n for (const device of DEVICE_FRAMES) {\n for (const [w, h] of device.screenResolutions) {\n if (w === width && h === height) {\n if (!best || device.priority > best.priority) best = device;\n break;\n }\n }\n }\n return best;\n}\n\n/**\n * Match a device by filename substring. Mirrors Fastlane's\n * `Device.detect_device`: a device matches if the filename contains either\n * the formatted name or the slug id. Token separators `-`, `_`, and spaces\n * are treated as equivalent, and `.` inside numeric suffixes (e.g. `12.9`)\n * is optional. Returns the highest-priority match.\n */\nexport function detectDeviceFromFilename(filename: string): DeviceFrame | null {\n const lower = filename.toLowerCase();\n let best: DeviceFrame | null = null;\n\n const matchesToken = (candidate: string): boolean => {\n const pattern = candidate\n .toLowerCase()\n .replace(/[()]/g, \"\")\n .replace(/[.+^$*?|{}\\\\[\\]]/g, \"\\\\$&\")\n .replace(/\\\\\\./g, \"\\\\.?\")\n .replace(/[-_\\s]+/g, \"[-_ ]?\");\n return new RegExp(pattern).test(lower);\n };\n\n for (const device of DEVICE_FRAMES) {\n if (matchesToken(device.name) || matchesToken(device.id)) {\n if (!best || device.priority > best.priority) best = device;\n }\n }\n return best;\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { join, extname, basename } from \"node:path\";\nimport { detectDeviceFromDimensions, detectDeviceFromFilename, type DeviceFrame } from \"./devices.js\";\n\nexport { DEVICE_FRAMES, detectDeviceFromDimensions, detectDeviceFromFilename } from \"./devices.js\";\nexport type { DeviceFrame } from \"./devices.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface FrameitOptions {\n screenshotsPath: string;\n outputPath?: string;\n forceDeviceType?: string;\n useDeviceOuterShadow?: boolean;\n whiteBackground?: boolean;\n}\n\nexport async function frameScreenshots(options: FrameitOptions): Promise<void> {\n const inputDir = options.screenshotsPath;\n const outputDir = options.outputPath ?? inputDir;\n\n const entries = await readdir(inputDir);\n const imageFiles = entries.filter((f) =>\n [\".png\", \".jpg\", \".jpeg\"].includes(extname(f).toLowerCase()) &&\n !f.includes(\"_framed\")\n );\n\n for (const file of imageFiles) {\n const filePath = join(inputDir, file);\n const fileStat = await stat(filePath);\n if (!fileStat.isFile()) continue;\n\n // Detect device from filename or dimensions\n let device = detectDeviceFromFilename(file);\n if (!device) {\n const dims = await getImageDimensions(filePath);\n if (dims) {\n device = detectDeviceFromDimensions(dims.width, dims.height);\n }\n }\n\n if (!device) continue;\n\n // Frame the screenshot using ImageMagick\n const outputFile = join(\n outputDir,\n basename(file, extname(file)) + \"_framed.png\"\n );\n\n try {\n await compositeScreenshot(filePath, device, outputFile, options);\n } catch {\n // ImageMagick may not be installed — skip gracefully\n }\n }\n}\n\nasync function getImageDimensions(\n filePath: string\n): Promise<{ width: number; height: number } | null> {\n try {\n const { stdout } = await execFileAsync(\"identify\", [\"-format\", \"%wx%h\", filePath]);\n const [w, h] = stdout.trim().split(\"x\").map(Number);\n if (w && h) return { width: w, height: h };\n } catch {\n // ImageMagick not available\n }\n return null;\n}\n\nasync function compositeScreenshot(\n screenshotPath: string,\n device: DeviceFrame,\n outputPath: string,\n options: FrameitOptions\n): Promise<void> {\n // Create a canvas of the device frame size, composite the screenshot at the offset\n const bgColor = options.whiteBackground ? \"white\" : \"none\";\n\n const args = [\n \"-size\", `${device.width}x${device.height}`,\n `xc:${bgColor}`,\n screenshotPath,\n \"-geometry\", `${device.screenWidth}x${device.screenHeight}+${device.screenOffsetX}+${device.screenOffsetY}`,\n \"-composite\",\n outputPath,\n ];\n\n await execFileAsync(\"convert\", args);\n}\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n name: \"run_tests\",\n aliases: [\"scan\"],\n description: \"Run unit and UI tests using xcodebuild\",\n async run(params, ctx) {\n const { runTests } = await import(\"../../scan/index.js\");\n const result = await runTests({\n scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string | undefined,\n workspace: params.workspace as string | undefined,\n project: params.project as string | undefined,\n devices: params.devices as string[] | undefined,\n testPlan: params.test_plan as string | undefined,\n onlyTesting: params.only_testing as string[] | undefined,\n skipTesting: params.skip_testing as string[] | undefined,\n configuration: params.configuration as string | undefined,\n outputDirectory: params.output_directory as string | undefined,\n clean: params.clean as boolean | undefined,\n codeCoverage: params.code_coverage as boolean | undefined,\n maxRetries: params.number_of_retries as number | undefined,\n xcargs: params.xcargs as string | undefined,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n ctx.set(\"SCAN_GENERATED_REPORT\", result.reportPaths[0]);\n return result;\n },\n});\n\nregisterAction({\n name: \"capture_ios_screenshots\",\n aliases: [\"snapshot\", \"capture_screenshots\"],\n description: \"Capture screenshots using iOS simulators\",\n async run(params, ctx) {\n const { captureScreenshots } = await import(\"../../snapshot/index.js\");\n return captureScreenshots({\n scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string | undefined,\n workspace: params.workspace as string | undefined,\n project: params.project as string | undefined,\n devices: (params.devices ?? []) as string[],\n languages: (params.languages ?? [\"en-US\"]) as string[],\n outputDirectory: params.output_directory as string | undefined,\n clearPreviousScreenshots: params.clear_previous_screenshots as boolean | undefined,\n concurrent: params.concurrent as boolean | undefined,\n numberOfRetries: params.number_of_retries as number | undefined,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n },\n});\n\nregisterAction({\n name: \"trainer\",\n aliases: [\"parse_test_results\"],\n description: \"Parse test results and generate JUnit XML\",\n async run(params) {\n const { parseTestResults } = await import(\"../../trainer/index.js\");\n return parseTestResults({\n path: params.path as string | undefined,\n outputDirectory: params.output_directory as string | undefined,\n outputFilename: params.output_filename as string | undefined,\n failBuildOnError: params.fail_build as boolean | undefined,\n });\n },\n});\n\nregisterAction({\n name: \"precheck\",\n aliases: [\"check_app_store_metadata\"],\n description: \"Validate app metadata against App Store review guidelines\",\n async run(params, ctx) {\n const { validateMetadata } = await import(\"../../precheck/index.js\");\n const { AppStoreConnectClient } = await import(\"../../client/index.js\");\n const client = params.client as InstanceType<typeof AppStoreConnectClient> ?? ctx.get(\"client\");\n if (!client) throw new Error(\"precheck: client is required\");\n return validateMetadata({\n client: client as any,\n bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n });\n },\n});\n\nregisterAction({\n name: \"frame_screenshots\",\n aliases: [\"frameit\"],\n description: \"Frame screenshots with device bezels\",\n async run(params) {\n const { frameScreenshots } = await import(\"../../frameit/index.js\");\n return frameScreenshots({\n screenshotsPath: params.path as string,\n outputPath: params.output_path as string | undefined,\n whiteBackground: params.white as boolean | undefined,\n });\n },\n});\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { requireMacOS } from \"./platform.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport async function updateSigningSettings(options: {\n projectPath: string;\n teamId: string;\n bundleIdentifier: string;\n codeSignIdentity: string;\n targets?: string[];\n profileName?: string;\n profileUuid?: string;\n automaticSigning?: boolean;\n}): Promise<void> {\n const pbxprojPath = `${options.projectPath}/project.pbxproj`;\n let content = await readFile(pbxprojPath, \"utf-8\");\n\n const style = options.automaticSigning ? \"Automatic\" : \"Manual\";\n\n // Replace build settings across the file\n content = replaceBuildSetting(content, \"CODE_SIGN_STYLE\", style);\n content = replaceBuildSetting(content, \"DEVELOPMENT_TEAM\", options.teamId);\n content = replaceBuildSetting(content, \"CODE_SIGN_IDENTITY\", options.codeSignIdentity);\n\n if (options.profileName) {\n content = replaceBuildSetting(content, \"PROVISIONING_PROFILE_SPECIFIER\", options.profileName);\n }\n if (options.profileUuid) {\n content = replaceBuildSetting(content, \"PROVISIONING_PROFILE\", options.profileUuid);\n }\n\n await writeFile(pbxprojPath, content);\n}\n\nexport async function setBuildNumber(\n projectPath: string,\n buildNumber: string\n): Promise<void> {\n const pbxprojPath = `${projectPath}/project.pbxproj`;\n let content = await readFile(pbxprojPath, \"utf-8\");\n content = replaceBuildSetting(content, \"CURRENT_PROJECT_VERSION\", buildNumber);\n await writeFile(pbxprojPath, content);\n}\n\nexport async function setVersionNumber(\n projectPath: string,\n version: string\n): Promise<void> {\n const pbxprojPath = `${projectPath}/project.pbxproj`;\n let content = await readFile(pbxprojPath, \"utf-8\");\n content = replaceBuildSetting(content, \"MARKETING_VERSION\", version);\n await writeFile(pbxprojPath, content);\n}\n\nexport async function readBuildSettings(options: {\n projectPath?: string;\n workspacePath?: string;\n scheme: string;\n configuration?: string;\n}): Promise<Record<string, string>> {\n requireMacOS(\"readBuildSettings\");\n\n const args = [\"-showBuildSettings\"];\n if (options.workspacePath) args.push(\"-workspace\", options.workspacePath);\n else if (options.projectPath) args.push(\"-project\", options.projectPath);\n args.push(\"-scheme\", options.scheme);\n if (options.configuration) args.push(\"-configuration\", options.configuration);\n\n const { stdout } = await execFileAsync(\"xcodebuild\", args);\n const settings: Record<string, string> = {};\n\n for (const line of stdout.split(\"\\n\")) {\n const match = line.match(/^\\s+(\\w+)\\s*=\\s*(.*)$/);\n if (match) {\n settings[match[1]] = match[2].trim();\n }\n }\n\n return settings;\n}\n\nfunction replaceBuildSetting(content: string, key: string, value: string): string {\n // Match: KEY = \"value\"; or KEY = value;\n // Use negative lookbehind to avoid partial matches (e.g., PROVISIONING_PROFILE vs _SPECIFIER)\n const regex = new RegExp(`(?<![A-Z_])(${key})\\\\s*=\\\\s*(\"[^\"]*\"|[^;]*);`, \"g\");\n // Quote value if it contains non-alphanumeric chars or if the original was quoted\n const needsQuotes = /[^A-Za-z0-9]/.test(value) || /\\s/.test(value);\n const quoted = needsQuotes ? `\"${value}\"` : value;\n return content.replace(regex, `$1 = ${quoted};`);\n}\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n name: \"increment_build_number\",\n description: \"Increment the build number in Xcode project\",\n async run(params, ctx) {\n const { readBuildSettings, setBuildNumber } = await import(\"../../xcode/project.js\");\n const projectPath = (params.xcodeproj ?? params.project_path) as string;\n\n let buildNumber: string;\n if (params.build_number) {\n buildNumber = String(params.build_number);\n } else {\n // Read current and increment\n const settings = await readBuildSettings({\n projectPath,\n scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n });\n const current = parseInt(settings.CURRENT_PROJECT_VERSION ?? \"0\", 10);\n buildNumber = String(current + 1);\n }\n\n await setBuildNumber(projectPath, buildNumber);\n ctx.set(\"BUILD_NUMBER\", buildNumber);\n return buildNumber;\n },\n});\n\nregisterAction({\n name: \"increment_version_number\",\n description: \"Increment the version number in Xcode project\",\n async run(params, ctx) {\n const { setVersionNumber, readBuildSettings } = await import(\"../../xcode/project.js\");\n const projectPath = (params.xcodeproj ?? params.project_path) as string;\n\n let version: string;\n if (params.version_number) {\n version = String(params.version_number);\n } else {\n const settings = await readBuildSettings({\n projectPath,\n scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n });\n const current = settings.MARKETING_VERSION ?? \"1.0.0\";\n const parts = current.split(\".\").map(Number);\n const bump = (params.bump_type ?? \"patch\") as string;\n if (bump === \"major\") { parts[0]++; parts[1] = 0; parts[2] = 0; }\n else if (bump === \"minor\") { parts[1] = (parts[1] ?? 0) + 1; parts[2] = 0; }\n else { parts[2] = (parts[2] ?? 0) + 1; }\n version = parts.join(\".\");\n }\n\n await setVersionNumber(projectPath, version);\n ctx.set(\"VERSION_NUMBER\", version);\n return version;\n },\n});\n\nregisterAction({\n name: \"get_build_number\",\n description: \"Get the current build number from Xcode project\",\n async run(params, ctx) {\n const { readBuildSettings } = await import(\"../../xcode/project.js\");\n const settings = await readBuildSettings({\n projectPath: (params.xcodeproj ?? params.project_path) as string | undefined,\n workspacePath: params.workspace as string | undefined,\n scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n });\n return settings.CURRENT_PROJECT_VERSION ?? \"1\";\n },\n});\n\nregisterAction({\n name: \"get_version_number\",\n description: \"Get the current version number from Xcode project\",\n async run(params, ctx) {\n const { readBuildSettings } = await import(\"../../xcode/project.js\");\n const settings = await readBuildSettings({\n projectPath: (params.xcodeproj ?? params.project_path) as string | undefined,\n workspacePath: params.workspace as string | undefined,\n scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n });\n return settings.MARKETING_VERSION ?? \"1.0.0\";\n },\n});\n","import { registerAction } from \"../index.js\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nregisterAction({\n name: \"add_git_tag\",\n aliases: [\"git_tag\"],\n description: \"Add a git tag to the current commit\",\n async run(params) {\n const tag = params.tag as string;\n const message = params.message as string | undefined;\n const force = params.force as boolean | undefined;\n\n const args = [\"tag\"];\n if (message) args.push(\"-a\", tag, \"-m\", message);\n else args.push(tag);\n if (force) args.push(\"-f\");\n\n await execFileAsync(\"git\", args);\n\n if (params.push !== false) {\n await execFileAsync(\"git\", [\"push\", \"origin\", tag, ...(force ? [\"-f\"] : [])]);\n }\n\n return tag;\n },\n});\n\nregisterAction({\n name: \"commit_version_bump\",\n aliases: [\"git_commit\"],\n description: \"Commit version bump changes to git\",\n async run(params) {\n const message = (params.message ?? \"Version Bump\") as string;\n const files = (params.include ?? [\".\"]) as string[];\n\n for (const file of files) {\n await execFileAsync(\"git\", [\"add\", file]);\n }\n await execFileAsync(\"git\", [\"commit\", \"-m\", message]);\n return { committed: true, message };\n },\n});\n\nregisterAction({\n name: \"push_to_git_remote\",\n aliases: [\"git_push\"],\n description: \"Push changes to the git remote\",\n async run(params) {\n const remote = (params.remote ?? \"origin\") as string;\n const branch = params.branch as string | undefined;\n const force = params.force as boolean | undefined;\n\n const args = [\"push\", remote];\n if (branch) args.push(branch);\n if (force) args.push(\"-f\");\n\n await execFileAsync(\"git\", args);\n return { pushed: true };\n },\n});\n\nregisterAction({\n name: \"git_pull\",\n description: \"Pull from the git remote\",\n async run(params) {\n const remote = (params.remote ?? \"origin\") as string;\n const branch = params.branch as string | undefined;\n const args = [\"pull\", remote];\n if (branch) args.push(branch);\n await execFileAsync(\"git\", args);\n return { pulled: true };\n },\n});\n\nregisterAction({\n name: \"changelog_from_git_commits\",\n description: \"Generate a changelog from git commits\",\n async run(params) {\n const between = params.between as [string, string] | undefined;\n const pretty = (params.pretty ?? \"%B\") as string;\n const args = [\"log\", `--pretty=format:${pretty}`];\n if (between) args.push(`${between[0]}...${between[1]}`);\n else if (params.commits_count) args.push(`-${params.commits_count}`);\n else args.push(\"-10\");\n\n const { stdout } = await execFileAsync(\"git\", args);\n return stdout.trim();\n },\n});\n\nregisterAction({\n name: \"last_git_commit\",\n description: \"Get information about the last git commit\",\n async run() {\n const { stdout: hash } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%H\"]);\n const { stdout: message } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%B\"]);\n const { stdout: author } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%an\"]);\n return {\n commit_hash: hash.trim(),\n message: message.trim(),\n author_name: author.trim(),\n };\n },\n});\n\nregisterAction({\n name: \"ensure_git_status_clean\",\n description: \"Ensure the git repository has no uncommitted changes\",\n async run() {\n const { stdout } = await execFileAsync(\"git\", [\"status\", \"--porcelain\"]);\n if (stdout.trim().length > 0) {\n throw new Error(\"Git repository has uncommitted changes:\\n\" + stdout);\n }\n return { clean: true };\n },\n});\n\nregisterAction({\n name: \"git_branch\",\n description: \"Get the current git branch name\",\n async run() {\n const { stdout } = await execFileAsync(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]);\n return stdout.trim();\n },\n});\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n name: \"slack\",\n description: \"Send a message to Slack\",\n async run(params) {\n const webhookUrl = (params.slack_url ?? params.webhook_url ?? process.env.SLACK_URL) as string;\n if (!webhookUrl) throw new Error(\"slack: webhook_url or SLACK_URL env var required\");\n\n const payload: Record<string, unknown> = {};\n if (params.message) payload.text = params.message;\n if (params.channel) payload.channel = params.channel;\n if (params.username) payload.username = params.username;\n if (params.icon_url) payload.icon_url = params.icon_url;\n\n if (params.payload || params.attachment_properties) {\n payload.attachments = [\n {\n fallback: params.message,\n color: (params.success === false) ? \"danger\" : \"good\",\n fields: Object.entries(params.payload ?? params.attachment_properties ?? {}).map(\n ([title, value]) => ({ title, value: String(value), short: String(value).length < 40 })\n ),\n },\n ];\n }\n\n const res = await fetch(webhookUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) throw new Error(`Slack webhook failed: ${res.status}`);\n return { sent: true };\n },\n});\n\nregisterAction({\n name: \"notification\",\n description: \"Display a macOS notification\",\n async run(params) {\n if (process.platform !== \"darwin\") return;\n const title = (params.title ?? \"fastnode\") as string;\n const message = (params.message ?? params.subtitle ?? \"\") as string;\n const { execFile } = await import(\"node:child_process\");\n const { promisify } = await import(\"node:util\");\n const exec = promisify(execFile);\n const script = `display notification \"${message}\" with title \"${title}\"`;\n await exec(\"osascript\", [\"-e\", script]).catch(() => {});\n return { notified: true };\n },\n});\n","import { registerAction } from \"../index.js\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport * as plist from \"plist\";\n\nregisterAction({\n name: \"get_info_plist_value\",\n description: \"Get a value from an Info.plist file\",\n async run(params) {\n const path = params.plist_path as string;\n const key = params.key as string;\n const content = await readFile(path, \"utf-8\");\n const parsed = plist.parse(content) as Record<string, unknown>;\n return parsed[key];\n },\n});\n\nregisterAction({\n name: \"set_info_plist_value\",\n description: \"Set a value in an Info.plist file\",\n async run(params) {\n const path = params.plist_path as string;\n const key = params.key as string;\n const value = params.value;\n const content = await readFile(path, \"utf-8\");\n const parsed = plist.parse(content) as Record<string, unknown>;\n parsed[key] = value;\n await writeFile(path, plist.build(parsed as any));\n return value;\n },\n});\n\nregisterAction({\n name: \"update_plist\",\n description: \"Update multiple values in a plist file\",\n async run(params) {\n const path = params.plist_path as string;\n const block = params.block as Record<string, unknown> | undefined;\n const content = await readFile(path, \"utf-8\");\n const parsed = plist.parse(content) as Record<string, unknown>;\n if (block) Object.assign(parsed, block);\n await writeFile(path, plist.build(parsed as any));\n return parsed;\n },\n});\n","import { registerAction } from \"../index.js\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nregisterAction({\n name: \"sh\",\n aliases: [\"shell\"],\n description: \"Execute a shell command\",\n async run(params) {\n const command = params.command as string;\n const { exec } = await import(\"node:child_process\");\n return new Promise<string>((resolve, reject) => {\n exec(command, { maxBuffer: 50 * 1024 * 1024 }, (err, stdout, stderr) => {\n if (err && params.error_callback) return resolve(stderr);\n if (err) return reject(err);\n resolve(stdout);\n });\n });\n },\n});\n\nregisterAction({\n name: \"puts\",\n aliases: [\"say\", \"echo\"],\n description: \"Print a message to stdout\",\n async run(params) {\n const message = (params.message ?? params[\"\"]) as string;\n console.log(message);\n return message;\n },\n});\n\nregisterAction({\n name: \"prompt\",\n description: \"Ask the user for input\",\n async run(params) {\n const text = (params.text ?? \"Enter a value:\") as string;\n const { createInterface } = await import(\"node:readline\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise<string>((resolve) => {\n rl.question(text + \" \", (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n },\n});\n\nregisterAction({\n name: \"lane_context\",\n description: \"Access the current lane context\",\n async run(_params, ctx) {\n return ctx.toRecord();\n },\n});\n\nregisterAction({\n name: \"is_ci\",\n aliases: [\"is_ci?\"],\n description: \"Check if running in a CI environment\",\n async run() {\n return !!(\n process.env.CI ||\n process.env.CONTINUOUS_INTEGRATION ||\n process.env.GITHUB_ACTIONS ||\n process.env.CIRCLECI ||\n process.env.TRAVIS ||\n process.env.JENKINS_URL ||\n process.env.BITRISE_IO ||\n process.env.BUILDKITE\n );\n },\n});\n\nregisterAction({\n name: \"number_of_commits\",\n description: \"Get the total number of commits in the repo\",\n async run() {\n const { stdout } = await execFileAsync(\"git\", [\"rev-list\", \"--count\", \"HEAD\"]);\n return parseInt(stdout.trim(), 10);\n },\n});\n\nregisterAction({\n name: \"ensure_env_vars\",\n description: \"Ensure required environment variables are set\",\n async run(params) {\n const vars = (params.env_vars ?? []) as string[];\n const missing = vars.filter((v) => !process.env[v]);\n if (missing.length > 0) {\n throw new Error(`Missing environment variables: ${missing.join(\", \")}`);\n }\n return { all_set: true };\n },\n});\n\nregisterAction({\n name: \"update_code_signing_settings\",\n description: \"Update code signing settings in an Xcode project\",\n async run(params, ctx) {\n const { updateSigningSettings } = await import(\"../../xcode/project.js\");\n await updateSigningSettings({\n projectPath: params.path as string,\n teamId: (params.team_id ?? ctx.get(\"TEAM_ID\")) as string,\n bundleIdentifier: (params.bundle_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n codeSignIdentity: (params.code_sign_identity ?? \"Apple Distribution\") as string,\n profileName: params.profile_name as string | undefined,\n profileUuid: params.profile_uuid as string | undefined,\n automaticSigning: (params.use_automatic_signing ?? false) as boolean,\n });\n return { updated: true };\n },\n});\n","import type { LaneContext } from \"../lane/context.js\";\n\nexport interface ActionDefinition {\n name: string;\n aliases?: string[];\n description: string;\n run(params: Record<string, unknown>, context: LaneContext): Promise<unknown>;\n}\n\nconst actionRegistry = new Map<string, ActionDefinition>();\n\nexport function registerAction(definition: ActionDefinition): void {\n actionRegistry.set(definition.name, definition);\n if (definition.aliases) {\n for (const alias of definition.aliases) {\n actionRegistry.set(alias, definition);\n }\n }\n}\n\nexport function getAction(name: string): ActionDefinition | undefined {\n return actionRegistry.get(name);\n}\n\nexport function listActions(): ActionDefinition[] {\n const seen = new Set<ActionDefinition>();\n const result: ActionDefinition[] = [];\n for (const def of actionRegistry.values()) {\n if (!seen.has(def)) {\n seen.add(def);\n result.push(def);\n }\n }\n return result;\n}\n\n// Auto-register all built-in actions on first import\nlet _registered = false;\nexport async function ensureActionsRegistered(): Promise<void> {\n if (_registered) return;\n _registered = true;\n await import(\"./built-in/signing.js\");\n await import(\"./built-in/building.js\");\n await import(\"./built-in/distribution.js\");\n await import(\"./built-in/testing.js\");\n await import(\"./built-in/versioning.js\");\n await import(\"./built-in/git.js\");\n await import(\"./built-in/notifications.js\");\n await import(\"./built-in/plist.js\");\n await import(\"./built-in/utilities.js\");\n}\n\nexport const action = new Proxy(\n {} as Record<string, (params?: Record<string, unknown>) => Promise<unknown>>,\n {\n get(_target, prop: string) {\n return async (params: Record<string, unknown> = {}) => {\n const def = actionRegistry.get(prop);\n if (!def) {\n throw new Error(`Unknown action: ${prop}. Run 'fastnode actions' to see available actions.`);\n }\n // Context will be injected by the lane runner\n const context = (globalThis as any).__fastnodeLaneContext as LaneContext | undefined;\n if (!context) {\n throw new Error(`Action '${prop}' must be called within a lane context.`);\n }\n return def.run(params, context);\n };\n },\n }\n);\n","export class LaneContext {\n private values = new Map<string, unknown>();\n readonly platform: string | null;\n readonly laneName: string;\n readonly env: Record<string, string | undefined>;\n\n constructor(platform: string | null, laneName: string) {\n this.platform = platform;\n this.laneName = laneName;\n this.env = process.env as Record<string, string | undefined>;\n }\n\n get<T = unknown>(key: string): T | undefined {\n return this.values.get(key) as T | undefined;\n }\n\n set(key: string, value: unknown): void {\n this.values.set(key, value);\n }\n\n has(key: string): boolean {\n return this.values.has(key);\n }\n\n toRecord(): Record<string, unknown> {\n return Object.fromEntries(this.values);\n }\n}\n","import { LaneContext } from \"./context.js\";\nimport type { LaneDefinition, LaneCallback } from \"./index.js\";\nimport { _getLanes, _getHooks } from \"./index.js\";\nimport { ensureActionsRegistered } from \"../actions/index.js\";\n\nexport interface RunLaneOptions {\n lane: string;\n platform?: string;\n parameters?: Record<string, unknown>;\n}\n\nexport interface RunResult {\n success: boolean;\n result: unknown;\n duration: number;\n error?: Error;\n}\n\nexport async function runLane(options: RunLaneOptions): Promise<RunResult> {\n await ensureActionsRegistered();\n\n const lanes = _getLanes();\n const hooks = _getHooks();\n\n // Find the lane\n const key = options.platform\n ? `${options.platform}:${options.lane}`\n : options.lane;\n\n let definition = lanes.get(key);\n if (!definition && options.platform) {\n // Try without platform prefix\n definition = lanes.get(options.lane);\n }\n\n if (!definition) {\n const available = Array.from(lanes.keys()).join(\", \");\n throw new Error(\n `Lane '${key}' not found. Available lanes: ${available || \"(none)\"}`\n );\n }\n\n if (definition.isPrivate) {\n throw new Error(`Lane '${definition.name}' is private and cannot be called directly.`);\n }\n\n const ctx = new LaneContext(definition.platform, definition.name);\n\n // Inject parameters into context\n if (options.parameters) {\n for (const [k, v] of Object.entries(options.parameters)) {\n ctx.set(k, v);\n }\n }\n\n // Set global context for action proxy\n (globalThis as any).__fastnodeLaneContext = ctx;\n\n const startTime = Date.now();\n\n try {\n // Run beforeAll hooks\n for (const hook of hooks.beforeAll) {\n await hook(ctx);\n }\n\n // Run beforeEach hooks\n for (const hook of hooks.beforeEach) {\n await hook(ctx);\n }\n\n // Execute the lane\n const result = await definition.callback(ctx);\n\n // Run afterEach hooks\n for (const hook of hooks.afterEach) {\n await hook(ctx);\n }\n\n // Run afterAll hooks\n for (const hook of hooks.afterAll) {\n await hook(ctx);\n }\n\n const duration = Date.now() - startTime;\n return { success: true, result, duration };\n } catch (error) {\n const duration = Date.now() - startTime;\n return {\n success: false,\n result: null,\n duration,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n (globalThis as any).__fastnodeLaneContext = undefined;\n }\n}\n\nexport function listAvailableLanes(): Array<{\n name: string;\n platform: string | null;\n isPrivate: boolean;\n description?: string;\n}> {\n const lanes = _getLanes();\n return Array.from(lanes.values()).map((def) => ({\n name: def.name,\n platform: def.platform,\n isPrivate: def.isPrivate,\n description: def.description,\n }));\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve, join } from \"node:path\";\nimport { _registerLane, type LaneDefinition } from \"./index.js\";\n\nconst FASTFILE_NAMES = [\"Fastfile.ts\", \"Fastfile.js\", \"Fastfile.mts\", \"Fastfile.mjs\"];\n\nexport async function loadFastfile(dir?: string): Promise<{\n path: string;\n laneCount: number;\n}> {\n const baseDir = dir ?? process.cwd();\n let fastfilePath: string | null = null;\n\n // Search for Fastfile in common locations\n const searchDirs = [\n baseDir,\n join(baseDir, \"fastlane\"),\n join(baseDir, \"fastnode\"),\n ];\n\n for (const searchDir of searchDirs) {\n for (const name of FASTFILE_NAMES) {\n const candidate = resolve(searchDir, name);\n if (existsSync(candidate)) {\n fastfilePath = candidate;\n break;\n }\n }\n if (fastfilePath) break;\n }\n\n if (!fastfilePath) {\n throw new Error(\n `No Fastfile found. Searched for ${FASTFILE_NAMES.join(\", \")} in:\\n` +\n searchDirs.map((d) => ` - ${d}`).join(\"\\n\") +\n \"\\n\\nRun 'fastnode init' to create one.\"\n );\n }\n\n // Dynamic import of the Fastfile\n // For TypeScript files, the user needs tsx or ts-node registered\n const module = await import(fastfilePath);\n\n // Register all exported lanes\n let laneCount = 0;\n for (const [exportName, value] of Object.entries(module)) {\n if (isLaneDefinition(value)) {\n _registerLane(exportName, value);\n laneCount++;\n }\n }\n\n if (laneCount === 0) {\n throw new Error(\n `Fastfile at ${fastfilePath} has no exported lanes. ` +\n `Export functions wrapped with lane() or privateLane().`\n );\n }\n\n return { path: fastfilePath, laneCount };\n}\n\nfunction isLaneDefinition(value: unknown): value is LaneDefinition {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"callback\" in value &&\n typeof (value as LaneDefinition).callback === \"function\" &&\n \"isPrivate\" in value\n );\n}\n\nexport function generateFastfileTemplate(): string {\n return `import { lane, privateLane, beforeAll, afterAll, action } from \"fastnode\";\nimport type { LaneContext } from \"fastnode/lane\";\n\n// ── Hooks ──────────────────────────────────────────────────────────────────\n\nbeforeAll(async (ctx: LaneContext) => {\n console.log(\\`Running lane: \\${ctx.laneName}\\`);\n});\n\nafterAll(async (ctx: LaneContext) => {\n console.log(\\`Finished lane: \\${ctx.laneName}\\`);\n});\n\n// ── Lanes ──────────────────────────────────────────────────────────────────\n\nexport const beta = lane(\"ios\", async (ctx) => {\n // Create certificate\n const certResult = await action.cert({\n development: false,\n });\n\n // Get provisioning profile\n await action.sigh({\n app_identifier: \"com.example.app\",\n });\n\n // Build the app\n await action.build_app({\n scheme: \"MyApp\",\n export_method: \"app-store\",\n });\n\n // Upload to TestFlight\n await action.upload_to_testflight({\n changelog: \"Bug fixes and improvements\",\n });\n});\n\nexport const release = lane(\"ios\", async (ctx) => {\n // Upload to App Store\n await action.deliver({\n submit_for_review: true,\n });\n});\n\nexport const tests = lane(async (ctx) => {\n await action.run_tests({\n scheme: \"MyAppTests\",\n });\n});\n`;\n}\n","import type { LaneContext } from \"./context.js\";\n\nexport type LaneCallback = (ctx: LaneContext) => Promise<unknown>;\n\nexport interface LaneDefinition {\n name: string;\n platform: string | null;\n callback: LaneCallback;\n isPrivate: boolean;\n description?: string;\n}\n\nconst lanes = new Map<string, LaneDefinition>();\nconst hooks: {\n beforeAll: LaneCallback[];\n afterAll: LaneCallback[];\n beforeEach: LaneCallback[];\n afterEach: LaneCallback[];\n} = {\n beforeAll: [],\n afterAll: [],\n beforeEach: [],\n afterEach: [],\n};\n\nexport function lane(\n platformOrCallback: string | LaneCallback,\n callbackOrUndefined?: LaneCallback\n): LaneDefinition {\n let platform: string | null = null;\n let callback: LaneCallback;\n\n if (typeof platformOrCallback === \"function\") {\n callback = platformOrCallback;\n } else {\n platform = platformOrCallback;\n callback = callbackOrUndefined!;\n }\n\n // The name gets set when the Fastfile.ts is loaded (from the export name)\n const definition: LaneDefinition = {\n name: \"\",\n platform,\n callback,\n isPrivate: false,\n };\n return definition;\n}\n\nexport function privateLane(\n platformOrCallback: string | LaneCallback,\n callbackOrUndefined?: LaneCallback\n): LaneDefinition {\n const definition = lane(platformOrCallback, callbackOrUndefined);\n definition.isPrivate = true;\n return definition;\n}\n\nexport function beforeAll(callback: LaneCallback): void {\n hooks.beforeAll.push(callback);\n}\n\nexport function afterAll(callback: LaneCallback): void {\n hooks.afterAll.push(callback);\n}\n\nexport function beforeEach(callback: LaneCallback): void {\n hooks.beforeEach.push(callback);\n}\n\nexport function afterEach(callback: LaneCallback): void {\n hooks.afterEach.push(callback);\n}\n\nexport function _getLanes(): Map<string, LaneDefinition> {\n return lanes;\n}\n\nexport function _getHooks() {\n return hooks;\n}\n\nexport function _registerLane(name: string, definition: LaneDefinition): void {\n definition.name = name;\n const key = definition.platform ? `${definition.platform}:${name}` : name;\n lanes.set(key, definition);\n}\n\nexport { LaneContext } from \"./context.js\";\nexport { runLane, listAvailableLanes } from \"./runner.js\";\nexport type { RunLaneOptions, RunResult } from \"./runner.js\";\nexport { loadFastfile, generateFastfileTemplate } from \"./fastfile.js\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cert/csr.ts","../../src/cert/cert.ts","../../src/sigh/index.ts","../../src/match/storage/git.ts","../../src/match/storage/s3.ts","../../src/match/storage/local.ts","../../src/match/storage/index.ts","../../src/match/encryption.ts","../../src/match/index.ts","../../src/pem/index.ts","../../src/actions/built-in/signing.ts","../../src/xcode/platform.ts","../../src/gym/detect.ts","../../src/gym/export-options.ts","../../src/gym/index.ts","../../src/actions/built-in/building.ts","../../src/client/srp.ts","../../src/client/apple-session.ts","../../src/client/request.ts","../../src/pilot/upload-altool.ts","../../src/pilot/transporter-install.ts","../../src/pilot/upload-transporter.ts","../../src/pilot/classify.ts","../../src/pilot/index.ts","../../src/deliver/metadata.ts","../../src/deliver/assets.ts","../../src/xcode/upload.ts","../../src/deliver/index.ts","../../src/produce/index.ts","../../src/actions/built-in/distribution.ts","../../src/scan/command.ts","../../src/scan/retry.ts","../../src/scan/index.ts","../../src/snapshot/simulator.ts","../../src/snapshot/index.ts","../../src/trainer/index.ts","../../src/precheck/rules.ts","../../src/precheck/index.ts","../../src/client/auth.ts","../../src/resources/certificates.ts","../../src/resources/profiles.ts","../../src/resources/bundle-ids.ts","../../src/resources/devices.ts","../../src/resources/apps.ts","../../src/resources/builds.ts","../../src/resources/beta-groups.ts","../../src/resources/capabilities.ts","../../src/resources/app-store-versions.ts","../../src/resources/app-screenshots.ts","../../src/resources/review-submissions.ts","../../src/resources/app-info.ts","../../src/resources/app-info-localizations.ts","../../src/resources/app-store-review-details.ts","../../src/resources/beta-testers.ts","../../src/resources/beta-app-review-submissions.ts","../../src/resources/beta-app-review-details.ts","../../src/resources/beta-invitations.ts","../../src/resources/beta-licenses.ts","../../src/resources/app-previews.ts","../../src/resources/app-preview-sets.ts","../../src/resources/app-prices.ts","../../src/resources/territories.ts","../../src/resources/age-rating-declarations.ts","../../src/resources/app-categories.ts","../../src/resources/app-encryption-declarations.ts","../../src/resources/idfa-declarations.ts","../../src/resources/pre-release-versions.ts","../../src/resources/review-submission-items.ts","../../src/resources/users.ts","../../src/resources/user-invitations.ts","../../src/resources/in-app-purchases.ts","../../src/resources/game-center-detail.ts","../../src/resources/xcode-metrics.ts","../../src/resources/app-asset-libraries.ts","../../src/resources/app-asset-library-assets.ts","../../src/resources/app-asset-library-placements.ts","../../src/client/portal.ts","../../src/client/iris.ts","../../src/client/index.ts","../../src/frameit/devices.ts","../../src/frameit/index.ts","../../src/actions/built-in/testing.ts","../../src/xcode/project.ts","../../src/actions/built-in/versioning.ts","../../src/actions/built-in/git.ts","../../src/actions/built-in/notifications.ts","../../src/actions/built-in/plist.ts","../../src/actions/built-in/utilities.ts","../../src/actions/index.ts","../../src/lane/context.ts","../../src/lane/runner.ts","../../src/lane/fastfile.ts","../../src/lane/index.ts"],"names":["cert","content","result","join","tmpdir","unlink","mkdir","writeFile","writeFileSync","mkdtempSync","execFileSync","rmSync","GitStorage","S3Storage","LocalStorage","readFile","createCertificate","createProfile","readdir","extname","execSync","promisify","execFile","syncSigningAssets","createPushCertificate","plist","spawn","resolve","stat","buildApp","rm","createHash","pbkdf2Sync","randomBytes","choice","phone","code","detail","existsSync","homedir","build","sleep","basename","uploadWithAltool","mkdtemp","uploadToAppStore","createApp","mkdirSync","runXcodebuild","execFileAsync","setInterfaceStyle","action","readFileSync","plist2","readdirSync","id","init_devices","runTests","captureScreenshots","parseTestResults","validateMetadata","AppStoreConnectClient","frameScreenshots","readBuildSettings","setBuildNumber","setVersionNumber","git_exports","init_git","createInterface","updateSigningSettings","lanes","hooks"],"mappings":"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","file":"index.mjs","sourcesContent":["import * as x509 from \"@peculiar/x509\";\nimport { webcrypto, generateKeyPairSync } from \"node:crypto\";\nimport { execSync } from \"node:child_process\";\nimport { writeFileSync, readFileSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\n\n// Register the Node.js crypto provider.\nx509.cryptoProvider.set(webcrypto as unknown as Parameters<typeof x509.cryptoProvider.set>[0]);\n\nfunction toPem(header: string, der: Buffer): string {\n const b64 = der.toString(\"base64\");\n const lines: string[] = [];\n for (let i = 0; i < b64.length; i += 64) lines.push(b64.slice(i, i + 64));\n return `-----BEGIN ${header}-----\\n${lines.join(\"\\n\")}\\n-----END ${header}-----`;\n}\n\n/**\n * Generate EC P-256 CSR — used by App Store Connect API (JWT auth).\n */\nexport async function generateCSR(): Promise<{ csr: string; privateKey: string }> {\n const algorithm = { name: \"ECDSA\", namedCurve: \"P-256\" } as const;\n const keyPair = await webcrypto.subtle.generateKey(algorithm, true, [\"sign\", \"verify\"]);\n\n const csr = await x509.Pkcs10CertificateRequestGenerator.create({\n name: \"CN=PEM\",\n keys: keyPair,\n signingAlgorithm: { name: \"ECDSA\", hash: \"SHA-256\" },\n });\n\n const pkcs8 = await webcrypto.subtle.exportKey(\"pkcs8\", keyPair.privateKey);\n return {\n csr: csr.toString(\"pem\"),\n privateKey: toPem(\"PRIVATE KEY\", Buffer.from(pkcs8)),\n };\n}\n\n/**\n * Generate RSA 2048 CSR — required by Apple Developer Portal (session auth).\n * Matches Fastlane's create_certificate_signing_request which uses RSA 2048.\n */\nexport function generateRSACSR(): { csr: string; privateKey: string } {\n const { privateKey, publicKey } = generateKeyPairSync(\"rsa\", {\n modulusLength: 2048,\n privateKeyEncoding: { type: \"pkcs8\", format: \"pem\" },\n publicKeyEncoding: { type: \"spki\", format: \"pem\" },\n });\n\n // Generate CSR using openssl (Node crypto doesn't have native CSR generation for RSA)\n const keyPath = join(tmpdir(), `fastnode-rsa-${Date.now()}.pem`);\n const csrPath = join(tmpdir(), `fastnode-rsa-${Date.now()}.csr`);\n\n try {\n writeFileSync(keyPath, privateKey);\n execSync(`openssl req -new -key \"${keyPath}\" -out \"${csrPath}\" -subj \"/CN=PEM\" 2>/dev/null`);\n const csr = readFileSync(csrPath, \"utf-8\");\n return { csr, privateKey };\n } finally {\n try { unlinkSync(keyPath); } catch {}\n try { unlinkSync(csrPath); } catch {}\n }\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { writeFile, mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Certificate, CertificateType } from \"../types/index.js\";\nimport { generateCSR } from \"./csr.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface CertOptions {\n client: AppStoreConnectClient;\n type?: CertificateType;\n development?: boolean;\n force?: boolean;\n outputDir?: string;\n keychainPath?: string;\n keychainPassword?: string;\n platform?: \"ios\" | \"macos\";\n}\n\nexport interface CertResult {\n certificate: Certificate;\n privateKey: string;\n certificateContent: Buffer;\n certPath?: string;\n p12Path?: string;\n}\n\nfunction resolveCertificateTypes(options: CertOptions): CertificateType[] {\n if (options.type) return [options.type];\n\n const platform = options.platform ?? \"ios\";\n if (options.development) {\n return platform === \"macos\" ? [\"MAC_APP_DEVELOPMENT\"] : [\"IOS_DEVELOPMENT\"];\n }\n return platform === \"macos\"\n ? [\"MAC_APP_DISTRIBUTION\"]\n : [\"IOS_DISTRIBUTION\"];\n}\n\nexport async function findValidCertificates(\n options: Omit<CertOptions, \"force\">\n): Promise<Certificate[]> {\n const types = resolveCertificateTypes(options as CertOptions);\n const certs = await options.client.certificates.list({\n filter: { certificateType: types },\n limit: 200,\n });\n\n const now = new Date();\n return certs.filter(\n (c) => new Date(c.attributes.expirationDate) > now\n );\n}\n\nexport async function createCertificate(\n options: CertOptions\n): Promise<CertResult> {\n // Check for existing valid certs unless force\n if (!options.force) {\n const existing = await findValidCertificates(options);\n if (existing.length > 0) {\n const cert = existing[0];\n const content = Buffer.from(cert.attributes.certificateContent, \"base64\");\n const result: CertResult = {\n certificate: cert,\n privateKey: \"\",\n certificateContent: content,\n };\n\n if (options.outputDir) {\n await mkdir(options.outputDir, { recursive: true });\n const certPath = join(options.outputDir, `${cert.id}.cer`);\n await writeFile(certPath, content);\n result.certPath = certPath;\n }\n\n return result;\n }\n }\n\n // Generate CSR and create new certificate\n const types = resolveCertificateTypes(options);\n const { csr, privateKey } = await generateCSR();\n\n const cert = await options.client.certificates.create({\n certificateType: types[0],\n csrContent: csr,\n });\n\n const content = Buffer.from(cert.attributes.certificateContent, \"base64\");\n\n const result: CertResult = {\n certificate: cert,\n privateKey,\n certificateContent: content,\n };\n\n // Write files if outputDir provided\n if (options.outputDir) {\n await mkdir(options.outputDir, { recursive: true });\n\n const certPath = join(options.outputDir, `${cert.id}.cer`);\n await writeFile(certPath, content);\n result.certPath = certPath;\n\n const keyPath = join(options.outputDir, `${cert.id}.p12`);\n await writeFile(keyPath, privateKey);\n result.p12Path = keyPath;\n }\n\n // Import to keychain if on macOS\n if (options.keychainPath && process.platform === \"darwin\") {\n await importToKeychain(\n content,\n options.keychainPath,\n options.keychainPassword\n );\n }\n\n return result;\n}\n\nexport async function revokeCertificate(\n client: AppStoreConnectClient,\n id: string\n): Promise<void> {\n await client.certificates.revoke(id);\n}\n\nexport async function downloadCertificate(\n client: AppStoreConnectClient,\n id: string\n): Promise<Buffer> {\n const cert = await client.certificates.get(id);\n return Buffer.from(cert.attributes.certificateContent, \"base64\");\n}\n\nexport async function revokeExpiredCertificates(\n options: CertOptions\n): Promise<number> {\n const types = resolveCertificateTypes(options);\n const certs = await options.client.certificates.list({\n filter: { certificateType: types },\n });\n\n const now = new Date();\n let count = 0;\n for (const cert of certs) {\n if (new Date(cert.attributes.expirationDate) <= now) {\n try {\n await options.client.certificates.revoke(cert.id);\n count++;\n } catch {\n // Ignore revocation failures for already-revoked certs\n }\n }\n }\n return count;\n}\n\nasync function importToKeychain(\n certData: Buffer,\n keychainPath: string,\n keychainPassword?: string\n): Promise<void> {\n const { tmpdir } = await import(\"node:os\");\n const tempCertPath = join(tmpdir(), `fastnode-cert-${Date.now()}.cer`);\n await writeFile(tempCertPath, certData);\n\n try {\n const args = [\n \"import\",\n tempCertPath,\n \"-k\",\n keychainPath,\n \"-T\",\n \"/usr/bin/codesign\",\n \"-T\",\n \"/usr/bin/security\",\n ];\n\n await execFileAsync(\"security\", args);\n\n // Set partition list if keychain password provided\n if (keychainPassword) {\n await execFileAsync(\"security\", [\n \"set-key-partition-list\",\n \"-S\",\n \"apple-tool:,apple:,codesign:\",\n \"-s\",\n \"-k\",\n keychainPassword,\n keychainPath,\n ]);\n }\n } finally {\n const { unlink } = await import(\"node:fs/promises\");\n await unlink(tempCertPath).catch(() => {});\n }\n}\n","import { writeFile, mkdir, copyFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Profile, ProfileType, CertificateType, Platform } from \"../types/index.js\";\n\nexport interface SighOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n profileType?: ProfileType;\n profileName?: string;\n certificateIds?: string[];\n deviceIds?: string[];\n force?: boolean;\n outputDir?: string;\n platform?: \"ios\" | \"macos\" | \"tvos\" | \"catalyst\";\n development?: boolean;\n adhoc?: boolean;\n inHouse?: boolean;\n readonly?: boolean;\n skipInstall?: boolean;\n skipCertificateVerification?: boolean;\n includeAllCertificates?: boolean;\n}\n\nexport interface SighResult {\n profile: Profile;\n profileContent: Buffer;\n uuid: string;\n name: string;\n filePath?: string;\n}\n\nfunction resolveProfileType(options: SighOptions): ProfileType {\n if (options.profileType) return options.profileType;\n\n const platform = options.platform ?? \"ios\";\n const isDev = options.development ?? false;\n const isAdhoc = options.adhoc ?? false;\n const isInHouse = options.inHouse ?? false;\n\n switch (platform) {\n case \"macos\":\n if (isDev) return \"MAC_APP_DEVELOPMENT\";\n if (isInHouse) return \"MAC_APP_INHOUSE\";\n return \"MAC_APP_STORE\";\n case \"tvos\":\n if (isDev) return \"TVOS_APP_DEVELOPMENT\";\n if (isAdhoc) return \"TVOS_APP_ADHOC\";\n if (isInHouse) return \"TVOS_APP_INHOUSE\";\n return \"TVOS_APP_STORE\";\n case \"catalyst\":\n if (isDev) return \"MAC_CATALYST_APP_DEVELOPMENT\";\n if (isInHouse) return \"MAC_CATALYST_APP_INHOUSE\";\n return \"MAC_CATALYST_APP_STORE\";\n default:\n if (isDev) return \"IOS_APP_DEVELOPMENT\";\n if (isAdhoc) return \"IOS_APP_ADHOC\";\n if (isInHouse) return \"IOS_APP_INHOUSE\";\n return \"IOS_APP_STORE\";\n }\n}\n\nfunction certificateTypesForProfile(\n profileType: ProfileType\n): CertificateType[] {\n switch (profileType) {\n case \"IOS_APP_DEVELOPMENT\":\n case \"TVOS_APP_DEVELOPMENT\":\n case \"MAC_CATALYST_APP_DEVELOPMENT\":\n return [\"IOS_DEVELOPMENT\"];\n case \"MAC_APP_DEVELOPMENT\":\n return [\"MAC_APP_DEVELOPMENT\"];\n case \"IOS_APP_STORE\":\n case \"IOS_APP_ADHOC\":\n case \"TVOS_APP_STORE\":\n case \"TVOS_APP_ADHOC\":\n case \"MAC_CATALYST_APP_STORE\":\n return [\"IOS_DISTRIBUTION\"];\n case \"IOS_APP_INHOUSE\":\n case \"TVOS_APP_INHOUSE\":\n case \"MAC_CATALYST_APP_INHOUSE\":\n return [\"IOS_DISTRIBUTION\"];\n case \"MAC_APP_STORE\":\n case \"MAC_APP_INHOUSE\":\n return [\"MAC_APP_DISTRIBUTION\"];\n case \"MAC_APP_DIRECT\":\n return [\"DEVELOPER_ID_APPLICATION\"];\n default:\n return [\"IOS_DISTRIBUTION\"];\n }\n}\n\nfunction needsDevices(profileType: ProfileType): boolean {\n return (\n profileType.includes(\"DEVELOPMENT\") || profileType.includes(\"ADHOC\")\n );\n}\n\nfunction profileExtension(profileType: ProfileType): string {\n return profileType.startsWith(\"MAC_\") && !profileType.includes(\"CATALYST\")\n ? \".provisionprofile\"\n : \".mobileprovision\";\n}\n\nexport async function findMatchingProfile(\n options: Omit<SighOptions, \"force\">\n): Promise<Profile | null> {\n const profileType = resolveProfileType(options as SighOptions);\n const profiles = await options.client.profiles.list({\n filter: { profileType },\n include: \"bundleId\",\n limit: 200,\n });\n\n const now = new Date();\n for (const profile of profiles) {\n // Check bundle ID match\n const bundleIdRel = profile.relationships?.bundleId?.data;\n if (bundleIdRel) {\n const bundleId = await options.client.bundleIds.get(bundleIdRel.id);\n if (bundleId.attributes.identifier !== options.bundleIdentifier) continue;\n }\n\n // Check state and expiration\n if (profile.attributes.profileState !== \"ACTIVE\") continue;\n if (new Date(profile.attributes.expirationDate) <= now) continue;\n\n // Check name if specified\n if (\n options.profileName &&\n profile.attributes.name !== options.profileName\n ) {\n continue;\n }\n\n return profile;\n }\n\n return null;\n}\n\nexport async function createProfile(\n options: SighOptions\n): Promise<SighResult> {\n const profileType = resolveProfileType(options);\n\n // If force, delete existing first\n if (options.force) {\n const existing = await findMatchingProfile(options);\n if (existing) {\n await options.client.profiles.delete(existing.id);\n }\n } else {\n // Check for existing\n const existing = await findMatchingProfile(options);\n if (existing) {\n return downloadAndReturn(options, existing);\n }\n }\n\n // Find or verify bundle ID\n let bundleId = await options.client.bundleIds.find(options.bundleIdentifier);\n if (!bundleId) {\n throw new Error(\n `Bundle ID '${options.bundleIdentifier}' not found. Register it first with produce.registerBundleId().`\n );\n }\n\n // Get certificates\n const certTypes = certificateTypesForProfile(profileType);\n let certificateIds = options.certificateIds;\n if (!certificateIds || certificateIds.length === 0) {\n const certs = await options.client.certificates.list({\n filter: { certificateType: certTypes },\n });\n const now = new Date();\n const validCerts = certs.filter(\n (c) => new Date(c.attributes.expirationDate) > now\n );\n if (validCerts.length === 0) {\n throw new Error(\n `No valid certificates found of type ${certTypes.join(\", \")}. Create one first with cert.createCertificate().`\n );\n }\n certificateIds = options.includeAllCertificates\n ? validCerts.map((c) => c.id)\n : [validCerts[0].id];\n }\n\n // Get devices if needed\n let deviceIds = options.deviceIds;\n if (needsDevices(profileType) && (!deviceIds || deviceIds.length === 0)) {\n const platform: Platform =\n options.platform === \"macos\"\n ? \"MAC_OS\"\n : options.platform === \"tvos\"\n ? \"TVOS\"\n : \"IOS\";\n const devices = await options.client.devices.list({\n filter: { platform, status: \"ENABLED\" },\n });\n deviceIds = devices.map((d) => d.id);\n }\n\n // Generate profile name\n const profileName =\n options.profileName ??\n `${profileType} ${options.bundleIdentifier} ${Date.now()}`;\n\n // Create profile\n const profile = await options.client.profiles.create({\n name: profileName,\n profileType,\n bundleIdId: bundleId.id,\n certificateIds,\n deviceIds,\n });\n\n return downloadAndReturn(options, profile);\n}\n\nasync function downloadAndReturn(\n options: SighOptions,\n profile: Profile\n): Promise<SighResult> {\n const content = Buffer.from(profile.attributes.profileContent, \"base64\");\n const profileType = resolveProfileType(options);\n const ext = profileExtension(profileType);\n\n const result: SighResult = {\n profile,\n profileContent: content,\n uuid: profile.attributes.uuid,\n name: profile.attributes.name,\n };\n\n if (options.outputDir) {\n await mkdir(options.outputDir, { recursive: true });\n const filename = `${profileType}_${options.bundleIdentifier}${ext}`;\n const filePath = join(options.outputDir, filename);\n await writeFile(filePath, content);\n result.filePath = filePath;\n }\n\n // Install on macOS\n if (!options.skipInstall && process.platform === \"darwin\") {\n await installProfile(content, profile.attributes.uuid);\n }\n\n return result;\n}\n\nexport async function downloadProfile(\n client: AppStoreConnectClient,\n id: string\n): Promise<Buffer> {\n const profile = await client.profiles.get(id);\n return Buffer.from(profile.attributes.profileContent, \"base64\");\n}\n\n/**\n * Install a provisioning profile to both the legacy MobileDevice directory\n * (Xcode ≤ 15) and the new Xcode 16+ location. Xcode 16 moved the default\n * profiles directory to `~/Library/Developer/Xcode/UserData/Provisioning\n * Profiles/`; writing to both keeps old and new Xcodes happy without needing\n * to detect the installed Xcode version.\n *\n * Returns the legacy path as the primary install location.\n */\nexport async function installProfile(\n profileContent: Buffer,\n uuid: string\n): Promise<string> {\n const legacyDir = join(\n homedir(),\n \"Library\",\n \"MobileDevice\",\n \"Provisioning Profiles\"\n );\n const xcode16Dir = join(\n homedir(),\n \"Library\",\n \"Developer\",\n \"Xcode\",\n \"UserData\",\n \"Provisioning Profiles\"\n );\n const filename = `${uuid}.mobileprovision`;\n\n await mkdir(legacyDir, { recursive: true });\n const legacyPath = join(legacyDir, filename);\n await writeFile(legacyPath, profileContent);\n\n // Also install into the Xcode 16+ location. Non-fatal if it fails\n // (e.g. sandboxed environments).\n try {\n await mkdir(xcode16Dir, { recursive: true });\n await writeFile(join(xcode16Dir, filename), profileContent);\n } catch {\n // Ignore — legacy path install is the authoritative one.\n }\n\n return legacyPath;\n}\n","import { execFileSync } from \"node:child_process\";\nimport { mkdtempSync, rmSync, writeFileSync, chmodSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class GitStorage implements StorageBackend {\n workingDirectory: string;\n private gitUrl: string;\n private branch: string;\n private privateKeyPath?: string;\n private privateKeyContent?: string;\n private basicAuth?: { user: string; pass: string };\n private bearerToken?: string;\n private userName?: string;\n private userEmail?: string;\n private shallowClone: boolean;\n /** Temp path written from `gitPrivateKeyContent`. Cleaned up on `cleanup`. */\n private tempKeyPath?: string;\n\n constructor(params: StorageParams) {\n this.gitUrl = params.gitUrl ?? \"\";\n this.branch = params.gitBranch ?? \"master\";\n this.privateKeyPath = params.gitPrivateKey;\n this.privateKeyContent = params.gitPrivateKeyContent;\n this.basicAuth = params.gitBasicAuth;\n this.bearerToken = params.gitBearerToken;\n this.userName = params.gitUserName;\n this.userEmail = params.gitUserEmail;\n this.shallowClone = params.shallowClone ?? true;\n this.workingDirectory = \"\";\n }\n\n async download(): Promise<string> {\n this.workingDirectory = mkdtempSync(join(tmpdir(), \"fastnode-match-\"));\n\n // Materialise inline private key content to a temp file with 0600 perms.\n if (this.privateKeyContent && !this.privateKeyPath) {\n this.tempKeyPath = join(\n mkdtempSync(join(tmpdir(), \"fastnode-match-key-\")),\n \"id_rsa\"\n );\n writeFileSync(this.tempKeyPath, this.privateKeyContent);\n chmodSync(this.tempKeyPath, 0o600);\n }\n\n const env = this.buildEnv();\n const extraArgs = this.buildHttpAuthArgs();\n const cloneBase = [\"-c\", \"http.extraheader=\", ...extraArgs]; // placeholder removed below\n // Rebuild cleanly: only include extraArgs (each is a pair of -c flag)\n const configArgs = extraArgs.flatMap((entry) => [\"-c\", entry]);\n\n const baseArgs = this.shallowClone ? [\"--depth\", \"1\"] : [];\n const branchArgs = [\"-b\", this.branch, \"--single-branch\"];\n\n try {\n execFileSync(\n \"git\",\n [\n ...configArgs,\n \"clone\",\n ...baseArgs,\n ...branchArgs,\n this.gitUrl,\n this.workingDirectory,\n ],\n { env, stdio: \"pipe\" }\n );\n } catch {\n // Branch may not exist — clone without branch and create it\n execFileSync(\n \"git\",\n [\n ...configArgs,\n \"clone\",\n ...baseArgs,\n this.gitUrl,\n this.workingDirectory,\n ],\n { env, stdio: \"pipe\" }\n );\n try {\n execFileSync(\"git\", [\"checkout\", this.branch], {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\",\n });\n } catch {\n execFileSync(\"git\", [\"checkout\", \"--orphan\", this.branch], {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\",\n });\n }\n }\n\n // Set commit author locally when provided (don't touch global config).\n if (this.userName) {\n execFileSync(\"git\", [\"config\", \"user.name\", this.userName], {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\",\n });\n }\n if (this.userEmail) {\n execFileSync(\"git\", [\"config\", \"user.email\", this.userEmail], {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\",\n });\n }\n\n return this.workingDirectory;\n }\n\n async saveChanges(files: string[], message: string): Promise<void> {\n const env = this.buildEnv();\n const extraArgs = this.buildHttpAuthArgs();\n const configArgs = extraArgs.flatMap((entry) => [\"-c\", entry]);\n const opts = {\n cwd: this.workingDirectory,\n env,\n stdio: \"pipe\" as const,\n };\n\n for (const file of files) {\n execFileSync(\"git\", [\"add\", file], opts);\n }\n\n try {\n execFileSync(\"git\", [\"commit\", \"-m\", message], opts);\n execFileSync(\n \"git\",\n [...configArgs, \"push\", \"origin\", this.branch],\n opts\n );\n } catch {\n // Nothing to commit or push failed\n }\n }\n\n async cleanup(): Promise<void> {\n if (this.workingDirectory) {\n rmSync(this.workingDirectory, { recursive: true, force: true });\n }\n if (this.tempKeyPath) {\n rmSync(this.tempKeyPath, { force: true });\n rmSync(join(this.tempKeyPath, \"..\"), { recursive: true, force: true });\n }\n }\n\n private buildHttpAuthArgs(): string[] {\n // Returns an array of `http.extraheader=...` values (for use with -c).\n // Mirrors Fastlane's match `GitStorage#setup_auth` which uses\n // `http.extraheader` to inject Basic/Bearer credentials.\n const args: string[] = [];\n if (this.basicAuth) {\n const encoded = Buffer.from(\n `${this.basicAuth.user}:${this.basicAuth.pass}`\n ).toString(\"base64\");\n args.push(`http.extraheader=Authorization: Basic ${encoded}`);\n } else if (this.bearerToken) {\n args.push(`http.extraheader=Authorization: Bearer ${this.bearerToken}`);\n }\n return args;\n }\n\n private buildEnv(): NodeJS.ProcessEnv {\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n GIT_TERMINAL_PROMPT: \"0\",\n };\n const keyPath = this.privateKeyPath ?? this.tempKeyPath;\n if (keyPath) {\n env.GIT_SSH_COMMAND = `ssh -i ${keyPath} -o StrictHostKeyChecking=no -o IdentitiesOnly=yes`;\n }\n return env;\n }\n}\n","import { execFileSync } from \"node:child_process\";\nimport { mkdtempSync, rmSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class S3Storage implements StorageBackend {\n workingDirectory: string;\n private bucket: string;\n private region: string;\n private prefix: string;\n\n constructor(params: StorageParams) {\n this.bucket = params.s3Bucket ?? \"\";\n this.region = params.s3Region ?? \"us-east-1\";\n this.prefix = params.s3ObjectPrefix ?? \"\";\n this.workingDirectory = \"\";\n }\n\n async download(): Promise<string> {\n this.workingDirectory = mkdtempSync(join(tmpdir(), \"fastnode-match-s3-\"));\n const s3Path = this.prefix ? `s3://${this.bucket}/${this.prefix}` : `s3://${this.bucket}`;\n\n execFileSync(\"aws\", [\"s3\", \"sync\", s3Path, this.workingDirectory, \"--region\", this.region], { stdio: \"pipe\" });\n\n return this.workingDirectory;\n }\n\n async saveChanges(files: string[], _message: string): Promise<void> {\n const s3Path = this.prefix ? `s3://${this.bucket}/${this.prefix}` : `s3://${this.bucket}`;\n\n for (const file of files) {\n const relativePath = file.replace(this.workingDirectory + \"/\", \"\");\n execFileSync(\n \"aws\",\n [\"s3\", \"cp\", file, `${s3Path}/${relativePath}`, \"--region\", this.region],\n { stdio: \"pipe\" }\n );\n }\n }\n\n async cleanup(): Promise<void> {\n if (this.workingDirectory) {\n rmSync(this.workingDirectory, { recursive: true, force: true });\n }\n }\n}\n","import { mkdirSync } from \"node:fs\";\nimport type { StorageBackend, StorageParams } from \"./index.js\";\n\nexport class LocalStorage implements StorageBackend {\n workingDirectory: string;\n\n constructor(params: StorageParams) {\n this.workingDirectory = params.localPath ?? \"\";\n }\n\n async download(): Promise<string> {\n mkdirSync(this.workingDirectory, { recursive: true });\n return this.workingDirectory;\n }\n\n async saveChanges(_files: string[], _message: string): Promise<void> {\n // Files are already on disk — nothing to push\n }\n\n async cleanup(): Promise<void> {\n // Don't delete local storage\n }\n}\n","export interface StorageBackend {\n workingDirectory: string;\n download(): Promise<string>;\n saveChanges(files: string[], message: string): Promise<void>;\n cleanup(): Promise<void>;\n}\n\nexport type StorageMode = \"git\" | \"s3\" | \"local\";\n\nexport interface StorageParams {\n mode: StorageMode;\n gitUrl?: string;\n gitBranch?: string;\n /** Path to an SSH private key file. */\n gitPrivateKey?: string;\n /**\n * Raw SSH private key content (alternative to `gitPrivateKey`). Written\n * to a temp file with `0600` perms before `git clone`.\n */\n gitPrivateKeyContent?: string;\n /** HTTP Basic auth credentials. */\n gitBasicAuth?: { user: string; pass: string };\n /** HTTP Bearer token for authorization. */\n gitBearerToken?: string;\n /** Override the commit author name. */\n gitUserName?: string;\n /** Override the commit author email. */\n gitUserEmail?: string;\n /** Disable the default `--depth 1` shallow clone. */\n shallowClone?: boolean;\n s3Bucket?: string;\n s3Region?: string;\n s3ObjectPrefix?: string;\n localPath?: string;\n teamId?: string;\n}\n\nexport async function createStorage(params: StorageParams): Promise<StorageBackend> {\n switch (params.mode) {\n case \"git\": {\n const { GitStorage } = await import(\"./git.js\");\n return new GitStorage(params);\n }\n case \"s3\": {\n const { S3Storage } = await import(\"./s3.js\");\n return new S3Storage(params);\n }\n case \"local\": {\n const { LocalStorage } = await import(\"./local.js\");\n return new LocalStorage(params);\n }\n default:\n throw new Error(`Unknown storage mode: ${params.mode}`);\n }\n}\n","import { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes, createHash } from \"node:crypto\";\nimport { readFile, writeFile, readdir, stat } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\n\nconst V2_PREFIX = \"match_encrypted_v2__\";\nconst V1_PREFIX = \"Salted__\";\nconst PBKDF2_ITERATIONS = 10_000;\nconst PBKDF2_HASH = \"sha256\";\nconst PBKDF2_KEY_LEN = 32 + 12 + 24; // key(32) + iv(12) + authData(24) = 68\n\nconst ENCRYPTABLE_EXTENSIONS = [\".cer\", \".p12\", \".mobileprovision\", \".provisionprofile\", \".pkey\", \".pem\"];\n\n// ── V2: AES-256-GCM with PBKDF2 ───────────────────────────────────────────\n\nexport function encryptV2(data: Buffer, password: string): Buffer {\n const salt = randomBytes(8);\n const derived = pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, PBKDF2_KEY_LEN, PBKDF2_HASH);\n const key = derived.subarray(0, 32);\n const iv = derived.subarray(32, 44);\n const authData = derived.subarray(44, 68);\n\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n cipher.setAAD(authData);\n const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);\n const authTag = cipher.getAuthTag(); // 16 bytes\n\n // Format: prefix + salt(8) + authTag(16) + ciphertext\n const prefix = Buffer.from(V2_PREFIX, \"utf-8\");\n const result = Buffer.concat([prefix, salt, authTag, encrypted]);\n return Buffer.from(result.toString(\"base64\"));\n}\n\nexport function decryptV2(data: Buffer, password: string): Buffer {\n const raw = Buffer.from(data.toString(\"utf-8\"), \"base64\");\n const prefixLen = Buffer.from(V2_PREFIX, \"utf-8\").length;\n\n const salt = raw.subarray(prefixLen, prefixLen + 8);\n const authTag = raw.subarray(prefixLen + 8, prefixLen + 24);\n const ciphertext = raw.subarray(prefixLen + 24);\n\n const derived = pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, PBKDF2_KEY_LEN, PBKDF2_HASH);\n const key = derived.subarray(0, 32);\n const iv = derived.subarray(32, 44);\n const authData = derived.subarray(44, 68);\n\n const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAAD(authData);\n decipher.setAuthTag(authTag);\n return Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n}\n\n// ── V1: AES-256-CBC (legacy, decrypt only) ─────────────────────────────────\n\nfunction evpBytesToKey(\n password: string,\n salt: Buffer,\n keyLen: number,\n ivLen: number,\n hashAlg: string\n): { key: Buffer; iv: Buffer } {\n const target = keyLen + ivLen;\n const result: Buffer[] = [];\n let total = 0;\n let prev = Buffer.alloc(0);\n\n while (total < target) {\n const input = Buffer.concat([prev, Buffer.from(password, \"utf-8\"), salt]);\n prev = createHash(hashAlg).update(input).digest();\n result.push(prev);\n total += prev.length;\n }\n\n const derived = Buffer.concat(result);\n return {\n key: derived.subarray(0, keyLen),\n iv: derived.subarray(keyLen, keyLen + ivLen),\n };\n}\n\nexport function decryptV1(data: Buffer, password: string): Buffer {\n const raw = Buffer.from(data.toString(\"utf-8\"), \"base64\");\n const saltHeader = raw.subarray(0, 8).toString(\"utf-8\");\n\n if (saltHeader !== V1_PREFIX) {\n throw new Error(\"Invalid V1 encrypted data: missing Salted__ header\");\n }\n\n const salt = raw.subarray(8, 16);\n const ciphertext = raw.subarray(16);\n\n // Try MD5 first (original OpenSSL default), then SHA256\n for (const hashAlg of [\"md5\", \"sha256\"]) {\n try {\n const { key, iv } = evpBytesToKey(password, salt, 32, 16, hashAlg);\n const decipher = createDecipheriv(\"aes-256-cbc\", key, iv);\n return Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n } catch {\n continue;\n }\n }\n\n throw new Error(\"Failed to decrypt V1 data with both MD5 and SHA256\");\n}\n\n// ── Auto-detect and decrypt ────────────────────────────────────────────────\n\nexport function decrypt(data: Buffer, password: string): Buffer {\n const str = data.toString(\"utf-8\");\n const decoded = Buffer.from(str, \"base64\").toString(\"utf-8\");\n\n if (decoded.startsWith(V2_PREFIX)) {\n return decryptV2(data, password);\n }\n if (decoded.startsWith(V1_PREFIX)) {\n return decryptV1(data, password);\n }\n // Try V2 first, then V1\n try {\n return decryptV2(data, password);\n } catch {\n return decryptV1(data, password);\n }\n}\n\nexport function encrypt(data: Buffer, password: string): Buffer {\n return encryptV2(data, password);\n}\n\n// ── File-level operations ──────────────────────────────────────────────────\n\nfunction isEncryptable(filePath: string): boolean {\n return ENCRYPTABLE_EXTENSIONS.includes(extname(filePath).toLowerCase());\n}\n\nexport async function decryptFiles(dir: string, password: string): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n await decryptFiles(fullPath, password);\n } else if (isEncryptable(fullPath)) {\n const data = await readFile(fullPath);\n try {\n const decrypted = decrypt(data, password);\n await writeFile(fullPath, decrypted);\n } catch {\n // File may not be encrypted, skip\n }\n }\n }\n}\n\nexport async function encryptFiles(dir: string, password: string): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n await encryptFiles(fullPath, password);\n } else if (isEncryptable(fullPath)) {\n const data = await readFile(fullPath);\n const encrypted = encrypt(data, password);\n await writeFile(fullPath, encrypted);\n }\n }\n}\n","import { join, extname } from \"node:path\";\nimport { readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { CertificateType, ProfileType } from \"../types/index.js\";\nimport type { CertResult } from \"../cert/cert.js\";\nimport type { SighResult } from \"../sigh/index.js\";\nimport { createStorage, type StorageMode } from \"./storage/index.js\";\nimport { decryptFiles, encryptFiles } from \"./encryption.js\";\nexport { encrypt, decrypt, encryptV2, decryptV2, decryptV1, encryptFiles, decryptFiles } from \"./encryption.js\";\n\nexport interface MatchOptions {\n client: AppStoreConnectClient;\n type: \"development\" | \"appstore\" | \"adhoc\" | \"enterprise\";\n appIdentifiers: string[];\n storageMode: StorageMode;\n gitUrl?: string;\n gitBranch?: string;\n /** Path to an SSH private key file. */\n gitPrivateKey?: string;\n /** Raw SSH private key content (alternative to `gitPrivateKey`). */\n gitPrivateKeyContent?: string;\n /** HTTP Basic auth credentials for the git remote. */\n gitBasicAuth?: { user: string; pass: string };\n /** HTTP Bearer token for the git remote. */\n gitBearerToken?: string;\n /** Override the commit author name. */\n gitUserName?: string;\n /** Override the commit author email. */\n gitUserEmail?: string;\n /** Disable the default `--depth 1` shallow clone. */\n shallowClone?: boolean;\n s3Bucket?: string;\n s3Region?: string;\n localPath?: string;\n password?: string;\n readonly?: boolean;\n force?: boolean;\n keychainName?: string;\n keychainPassword?: string;\n teamId?: string;\n platform?: \"ios\" | \"macos\" | \"tvos\" | \"catalyst\";\n}\n\nexport interface MatchResult {\n certificates: CertResult[];\n profiles: SighResult[];\n}\n\nfunction profileTypeForMatch(\n type: MatchOptions[\"type\"],\n platform: MatchOptions[\"platform\"]\n): ProfileType {\n const p = platform ?? \"ios\";\n switch (type) {\n case \"development\":\n if (p === \"macos\") return \"MAC_APP_DEVELOPMENT\";\n if (p === \"tvos\") return \"TVOS_APP_DEVELOPMENT\";\n if (p === \"catalyst\") return \"MAC_CATALYST_APP_DEVELOPMENT\";\n return \"IOS_APP_DEVELOPMENT\";\n case \"adhoc\":\n if (p === \"tvos\") return \"TVOS_APP_ADHOC\";\n return \"IOS_APP_ADHOC\";\n case \"enterprise\":\n if (p === \"macos\") return \"MAC_APP_INHOUSE\";\n if (p === \"tvos\") return \"TVOS_APP_INHOUSE\";\n if (p === \"catalyst\") return \"MAC_CATALYST_APP_INHOUSE\";\n return \"IOS_APP_INHOUSE\";\n default:\n if (p === \"macos\") return \"MAC_APP_STORE\";\n if (p === \"tvos\") return \"TVOS_APP_STORE\";\n if (p === \"catalyst\") return \"MAC_CATALYST_APP_STORE\";\n return \"IOS_APP_STORE\";\n }\n}\n\nfunction certTypeForMatch(\n type: MatchOptions[\"type\"],\n platform: MatchOptions[\"platform\"]\n): CertificateType {\n const p = platform ?? \"ios\";\n if (type === \"development\") {\n return p === \"macos\" ? \"MAC_APP_DEVELOPMENT\" : \"IOS_DEVELOPMENT\";\n }\n return p === \"macos\" ? \"MAC_APP_DISTRIBUTION\" : \"IOS_DISTRIBUTION\";\n}\n\nfunction certSubdir(type: MatchOptions[\"type\"]): string {\n return type === \"development\" ? \"development\" : \"distribution\";\n}\n\nfunction profileSubdir(type: MatchOptions[\"type\"]): string {\n switch (type) {\n case \"development\": return \"development\";\n case \"adhoc\": return \"adhoc\";\n case \"enterprise\": return \"enterprise\";\n default: return \"appstore\";\n }\n}\n\nexport async function syncSigningAssets(\n options: MatchOptions\n): Promise<MatchResult> {\n const password = options.password ?? process.env.MATCH_PASSWORD ?? \"\";\n if (!password) {\n throw new Error(\"Match password is required. Set MATCH_PASSWORD or pass password option.\");\n }\n\n // Initialize storage\n const storage = await createStorage({\n mode: options.storageMode,\n gitUrl: options.gitUrl,\n gitBranch: options.gitBranch,\n gitPrivateKey: options.gitPrivateKey,\n gitPrivateKeyContent: options.gitPrivateKeyContent,\n gitBasicAuth: options.gitBasicAuth,\n gitBearerToken: options.gitBearerToken,\n gitUserName: options.gitUserName,\n gitUserEmail: options.gitUserEmail,\n shallowClone: options.shallowClone,\n s3Bucket: options.s3Bucket,\n s3Region: options.s3Region,\n localPath: options.localPath,\n teamId: options.teamId,\n });\n\n const workDir = await storage.download();\n\n // Decrypt files\n await decryptFiles(workDir, password);\n\n const certificates: CertResult[] = [];\n const profiles: SighResult[] = [];\n const filesToCommit: string[] = [];\n\n const certDir = join(workDir, \"certs\", certSubdir(options.type));\n const profileDir = join(workDir, \"profiles\", profileSubdir(options.type));\n\n for (const appId of options.appIdentifiers) {\n // Check for existing certificate\n let certResult: CertResult | null = null;\n const certFiles = existsSync(certDir) ? await findFilesWithExt(certDir, \".cer\") : [];\n\n if (certFiles.length > 0 && !options.force) {\n // Use existing cert from storage\n const certContent = await readFile(certFiles[0]);\n certResult = {\n certificate: null as any, // Stored cert doesn't have full API object\n privateKey: \"\",\n certificateContent: certContent,\n certPath: certFiles[0],\n };\n } else if (!options.readonly) {\n // Generate new cert\n const { createCertificate } = await import(\"../cert/cert.js\");\n certResult = await createCertificate({\n client: options.client,\n type: certTypeForMatch(options.type, options.platform),\n outputDir: certDir,\n keychainPath: options.keychainName,\n keychainPassword: options.keychainPassword,\n });\n if (certResult.certPath) filesToCommit.push(certResult.certPath);\n if (certResult.p12Path) filesToCommit.push(certResult.p12Path);\n }\n\n if (certResult) certificates.push(certResult);\n\n // Check for existing profile\n const profileFiles = existsSync(profileDir) ? await findFilesWithExt(profileDir, \".mobileprovision\") : [];\n const matchingProfile = profileFiles.find((f) => f.includes(appId));\n\n if (matchingProfile && !options.force) {\n const profileContent = await readFile(matchingProfile);\n profiles.push({\n profile: null as any,\n profileContent,\n uuid: \"\",\n name: \"\",\n filePath: matchingProfile,\n });\n } else if (!options.readonly) {\n // Generate new profile\n const { createProfile } = await import(\"../sigh/index.js\");\n const profileType = profileTypeForMatch(options.type, options.platform);\n const sighResult = await createProfile({\n client: options.client,\n bundleIdentifier: appId,\n profileType,\n outputDir: profileDir,\n skipInstall: false,\n });\n if (sighResult.filePath) filesToCommit.push(sighResult.filePath);\n profiles.push(sighResult);\n }\n }\n\n // Encrypt and save changes\n if (filesToCommit.length > 0 && !options.readonly) {\n await encryptFiles(workDir, password);\n // Mirror Fastlane's match commit message: `[fastlane-match] Updated\n // {type} and profile for {appId}` — adapted for fastnode and multiple\n // app identifiers.\n const appList = options.appIdentifiers.join(\", \");\n const message = `[fastlane-match] Updated ${options.type} and profile for ${appList}`;\n await storage.saveChanges(filesToCommit, message);\n }\n\n await storage.cleanup();\n\n return { certificates, profiles };\n}\n\nasync function findFilesWithExt(dir: string, ext: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true });\n const results: string[] = [];\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (!entry.isDirectory() && extname(entry.name) === ext) {\n results.push(fullPath);\n }\n }\n return results;\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { writeFile, mkdir, unlink } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { CertificateType } from \"../types/index.js\";\nimport { generateCSR } from \"../cert/csr.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport type PushCertKind =\n | \"development\"\n | \"production\"\n | \"website\"\n | \"voip\"\n | \"passbook\";\n\nexport interface PemOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n development?: boolean;\n websitePush?: boolean;\n /** Voice-over-IP push cert (Portal type code `E5D663CMZW`). */\n voipPush?: boolean;\n /** Passbook/Wallet cert (Portal type code `Y3B2F3TYSI`). */\n passbook?: boolean;\n outputDir?: string;\n p12Password?: string;\n activeDaysLimit?: number;\n force?: boolean;\n platform?: \"ios\" | \"macos\";\n generateP12?: boolean;\n savePrivateKey?: boolean;\n}\n\nexport interface PemResult {\n pemPath: string;\n p12Path?: string;\n keyPath?: string;\n expiresAt: Date;\n}\n\n/**\n * Resolve the push certificate descriptor for the given options. Returns:\n * - `kind`: semantic certificate family (used in filename prefix)\n * - `portalTypeCode`: Apple Developer Portal type code (matches Fastlane's\n * `Spaceship::Portal::Certificate` codes in certificate.rb)\n * - `ascCertificateType`: best-fit ASC `CertificateType` for the ASC API\n * fallback path (note: push certs are really a Portal concept; the ASC\n * cert types here only approximate the platform distinction).\n */\nexport function getPushCertificateType(options: {\n development?: boolean;\n websitePush?: boolean;\n voipPush?: boolean;\n passbook?: boolean;\n platform?: \"ios\" | \"macos\";\n}): {\n kind: PushCertKind;\n portalTypeCode: string;\n ascCertificateType: CertificateType;\n} {\n if (options.passbook) {\n return {\n kind: \"passbook\",\n portalTypeCode: \"Y3B2F3TYSI\",\n ascCertificateType: \"IOS_DISTRIBUTION\",\n };\n }\n if (options.voipPush) {\n return {\n kind: \"voip\",\n portalTypeCode: \"E5D663CMZW\",\n ascCertificateType: \"IOS_DISTRIBUTION\",\n };\n }\n if (options.websitePush) {\n return {\n kind: \"website\",\n portalTypeCode: \"3T2ZP62QW8\",\n ascCertificateType: \"IOS_DISTRIBUTION\",\n };\n }\n const platform = options.platform ?? \"ios\";\n if (platform === \"macos\") {\n return options.development\n ? {\n kind: \"development\",\n portalTypeCode: \"HQ4KP3I34R\", // MacDevelopmentPush\n ascCertificateType: \"MAC_APP_DEVELOPMENT\",\n }\n : {\n kind: \"production\",\n portalTypeCode: \"CDZ7EMXIZ1\", // MacProductionPush\n ascCertificateType: \"MAC_APP_DISTRIBUTION\",\n };\n }\n return options.development\n ? {\n kind: \"development\",\n portalTypeCode: \"JKG5JZ54H7\", // DevelopmentPush\n ascCertificateType: \"IOS_DEVELOPMENT\",\n }\n : {\n kind: \"production\",\n portalTypeCode: \"UPV3DW712I\", // ProductionPush\n ascCertificateType: \"IOS_DISTRIBUTION\",\n };\n}\n\nexport async function createPushCertificate(\n options: PemOptions\n): Promise<PemResult> {\n const outputDir = options.outputDir ?? process.cwd();\n await mkdir(outputDir, { recursive: true });\n\n const descriptor = getPushCertificateType(options);\n const platform = options.platform ?? \"ios\";\n const activeDaysLimit = options.activeDaysLimit ?? 30;\n const generateP12 = options.generateP12 !== false;\n const savePrivateKey = options.savePrivateKey !== false;\n // Mirror Fastlane pem's filename convention (manager.rb line 68):\n // `{type}_{app_identifier}_{platform}`.\n const filenameBase = `${descriptor.kind}_${options.bundleIdentifier}_${platform}`;\n\n // Check for existing valid push certs\n if (!options.force) {\n const existing = await options.client.certificates.list({\n filter: { certificateType: descriptor.ascCertificateType },\n });\n\n const now = new Date();\n const validCert = existing.find((c) => {\n const expires = new Date(c.attributes.expirationDate);\n const daysLeft = (expires.getTime() - now.getTime()) / (1000 * 60 * 60 * 24);\n return daysLeft > activeDaysLimit && c.attributes.displayName?.includes(options.bundleIdentifier);\n });\n\n if (validCert) {\n // Cert exists and is still valid — but we can't re-download the private key\n // Just return info about the existing cert\n return {\n pemPath: join(outputDir, `${filenameBase}.pem`),\n expiresAt: new Date(validCert.attributes.expirationDate),\n };\n }\n }\n\n // Generate new CSR and create cert\n const { csr, privateKey } = await generateCSR();\n\n const cert = await options.client.certificates.create({\n certificateType: descriptor.ascCertificateType,\n csrContent: csr,\n });\n\n const certDer = Buffer.from(cert.attributes.certificateContent, \"base64\");\n\n // Convert DER cert to PEM\n const certPem =\n \"-----BEGIN CERTIFICATE-----\\n\" +\n certDer.toString(\"base64\").match(/.{1,64}/g)!.join(\"\\n\") +\n \"\\n-----END CERTIFICATE-----\";\n\n // Write combined PEM (cert + key)\n const pemPath = join(outputDir, `${filenameBase}.pem`);\n await writeFile(pemPath, certPem + \"\\n\" + privateKey);\n\n const result: PemResult = {\n pemPath,\n expiresAt: new Date(cert.attributes.expirationDate),\n };\n\n // Save private key\n if (savePrivateKey) {\n const keyPath = join(outputDir, `${filenameBase}.pkey`);\n await writeFile(keyPath, privateKey);\n result.keyPath = keyPath;\n }\n\n // Generate PKCS#12\n if (generateP12) {\n const p12Path = join(outputDir, `${filenameBase}.p12`);\n const p12Password = options.p12Password ?? \"\";\n try {\n const { execSync } = await import(\"node:child_process\");\n // Write private key to temp file\n const keyTmpPath = join(outputDir, `${filenameBase}.tmp.key`);\n await writeFile(keyTmpPath, privateKey);\n execSync(\n `openssl pkcs12 -export -inkey \"${keyTmpPath}\" -in \"${pemPath}\" -out \"${p12Path}\" -passout \"pass:${p12Password}\"`,\n { stdio: \"pipe\" }\n );\n await unlink(keyTmpPath).catch(() => {});\n result.p12Path = p12Path;\n } catch {\n // openssl may not be available — p12 generation is optional\n }\n }\n\n return result;\n}\n\nexport async function renewPushCertificate(\n options: PemOptions\n): Promise<PemResult> {\n return createPushCertificate({ ...options, force: true });\n}\n\nexport async function checkExpiration(options: {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n development?: boolean;\n activeDaysLimit?: number;\n}): Promise<{ valid: boolean; daysLeft: number; expiresAt: Date | null }> {\n const certType: CertificateType = options.development ? \"IOS_DEVELOPMENT\" : \"IOS_DISTRIBUTION\";\n const certs = await options.client.certificates.list({\n filter: { certificateType: certType },\n });\n\n const now = new Date();\n const limit = options.activeDaysLimit ?? 30;\n\n for (const cert of certs) {\n if (cert.attributes.displayName?.includes(options.bundleIdentifier)) {\n const expires = new Date(cert.attributes.expirationDate);\n const daysLeft = (expires.getTime() - now.getTime()) / (1000 * 60 * 60 * 24);\n return { valid: daysLeft > limit, daysLeft: Math.floor(daysLeft), expiresAt: expires };\n }\n }\n\n return { valid: false, daysLeft: 0, expiresAt: null };\n}\n","import { registerAction } from \"../index.js\";\nimport type { AppStoreConnectClient } from \"../../client/index.js\";\nimport type { CertificateType, ProfileType } from \"../../types/index.js\";\n\nregisterAction({\n name: \"cert\",\n aliases: [\"get_certificates\", \"create_certificate\"],\n description: \"Create or fetch code signing certificates\",\n async run(params, ctx) {\n const { createCertificate } = await import(\"../../cert/cert.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"cert: client is required (pass as param or set in context)\");\n const result = await createCertificate({\n client,\n type: params.type as CertificateType | undefined,\n development: params.development as boolean | undefined,\n force: params.force as boolean | undefined,\n outputDir: params.output_path as string | undefined,\n keychainPath: params.keychain_path as string | undefined,\n keychainPassword: params.keychain_password as string | undefined,\n platform: params.platform as \"ios\" | \"macos\" | undefined,\n });\n ctx.set(\"CER_CERTIFICATE_ID\", result.certificate.id);\n ctx.set(\"CER_FILE_PATH\", result.certPath);\n return result;\n },\n});\n\nregisterAction({\n name: \"sigh\",\n aliases: [\"get_provisioning_profile\", \"get_profiles\"],\n description: \"Create or fetch provisioning profiles\",\n async run(params, ctx) {\n const { createProfile } = await import(\"../../sigh/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"sigh: client is required\");\n const result = await createProfile({\n client,\n bundleIdentifier: (params.app_identifier ?? params.bundle_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n profileType: params.profile_type as ProfileType | undefined,\n profileName: params.provisioning_name as string | undefined,\n force: params.force as boolean | undefined,\n outputDir: params.output_path as string | undefined,\n platform: params.platform as any,\n development: params.development as boolean | undefined,\n adhoc: params.adhoc as boolean | undefined,\n });\n ctx.set(\"SIGH_PROFILE_PATH\", result.filePath);\n ctx.set(\"SIGH_PROFILE_TYPE\", result.profile.attributes.profileType);\n ctx.set(\"SIGH_UUID\", result.uuid);\n ctx.set(\"SIGH_NAME\", result.name);\n return result;\n },\n});\n\nregisterAction({\n name: \"match\",\n aliases: [\"sync_code_signing\"],\n description: \"Sync certificates and profiles using match\",\n async run(params, ctx) {\n const { syncSigningAssets } = await import(\"../../match/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"match: client is required\");\n return syncSigningAssets({\n client,\n type: (params.type ?? \"appstore\") as any,\n appIdentifiers: (params.app_identifier ? [params.app_identifier] : params.app_identifiers ?? []) as string[],\n storageMode: (params.storage_mode ?? \"git\") as any,\n gitUrl: params.git_url as string | undefined,\n gitBranch: params.git_branch as string | undefined,\n password: params.password as string | undefined,\n readonly: params.readonly as boolean | undefined,\n force: params.force as boolean | undefined,\n platform: params.platform as any,\n });\n },\n});\n\nregisterAction({\n name: \"pem\",\n aliases: [\"get_push_certificate\"],\n description: \"Create push notification certificates\",\n async run(params, ctx) {\n const { createPushCertificate } = await import(\"../../pem/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"pem: client is required\");\n return createPushCertificate({\n client,\n bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n development: params.development as boolean | undefined,\n outputDir: params.output_path as string | undefined,\n p12Password: params.p12_password as string | undefined,\n force: params.force as boolean | undefined,\n });\n },\n});\n","export function requireMacOS(feature: string): void {\n if (process.platform !== \"darwin\") {\n throw new Error(\n `${feature} requires macOS. This operation uses Xcode command-line tools ` +\n `which are not available on ${process.platform}.`\n );\n }\n}\n\nexport function isMacOS(): boolean {\n return process.platform === \"darwin\";\n}\n","import { readdir } from \"node:fs/promises\";\nimport { join, resolve, basename } from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface DetectedValues {\n workspace: string | null;\n project: string | null;\n scheme: string;\n configuration: string;\n schemes: string[];\n configurations: string[];\n targets: string[];\n}\n\nexport interface XcodeBuildListOutput {\n project?: {\n name: string;\n schemes: string[];\n configurations: string[];\n targets: string[];\n };\n workspace?: {\n name: string;\n schemes: string[];\n };\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\n/**\n * Find the first file in `dir` matching the given extension.\n */\nasync function findFirst(dir: string, ext: string): Promise<string | null> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.name.endsWith(ext) && !entry.name.startsWith(\".\")) {\n return join(dir, entry.name);\n }\n }\n return null;\n}\n\n/**\n * Run `xcodebuild -list -json` and return parsed JSON.\n */\nasync function xcodebuildList(args: string[]): Promise<XcodeBuildListOutput> {\n return new Promise<XcodeBuildListOutput>((res, rej) => {\n const proc = spawn(\"xcodebuild\", [\"-list\", \"-json\", ...args], {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const chunks: Buffer[] = [];\n const errChunks: Buffer[] = [];\n proc.stdout.on(\"data\", (d: Buffer) => chunks.push(d));\n proc.stderr.on(\"data\", (d: Buffer) => errChunks.push(d));\n proc.on(\"error\", rej);\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n const stderr = Buffer.concat(errChunks).toString(\"utf-8\").trim();\n rej(new Error(\"xcodebuild -list failed (exit \" + code + \"):\\n\" + stderr));\n return;\n }\n const raw = Buffer.concat(chunks).toString(\"utf-8\").trim();\n try {\n res(JSON.parse(raw) as XcodeBuildListOutput);\n } catch {\n rej(new Error(\"Failed to parse xcodebuild -list JSON:\\n\" + raw));\n }\n });\n });\n}\n\n// ── Public API ─────────────────────────────────────────────────────────────\n\n/**\n * Auto-detect the Xcode workspace/project, scheme, and configuration.\n *\n * Workspace/project resolution:\n * 1. Explicit option\n * 2. First `.xcworkspace` in searchDir\n * 3. First `.xcodeproj` in searchDir\n *\n * Scheme resolution:\n * 1. Explicit option\n * 2. Sole scheme -> auto-select\n * 3. Scheme matching workspace/project name\n * 4. Error\n */\nexport async function detectValues(options: {\n workspace?: string;\n project?: string;\n scheme?: string;\n configuration?: string;\n searchDir?: string;\n}): Promise<DetectedValues> {\n const searchDir = resolve(options.searchDir ?? process.cwd());\n\n // ── Resolve workspace / project ───────────────────────────────────────\n\n let workspace = options.workspace ?? null;\n let project = options.project ?? null;\n\n if (!workspace && !project) {\n workspace = await findFirst(searchDir, \".xcworkspace\");\n }\n if (!workspace && !project) {\n project = await findFirst(searchDir, \".xcodeproj\");\n }\n if (!workspace && !project) {\n throw new Error(\n \"Could not find .xcworkspace or .xcodeproj in \" + searchDir +\n \". Pass workspace or project explicitly.\",\n );\n }\n\n // ── Run xcodebuild -list ──────────────────────────────────────────────\n\n const listArgs: string[] = [];\n if (workspace) listArgs.push(\"-workspace\", workspace);\n else if (project) listArgs.push(\"-project\", project);\n\n const listOutput = await xcodebuildList(listArgs);\n\n const schemes: string[] =\n listOutput.workspace?.schemes ?? listOutput.project?.schemes ?? [];\n const configurations: string[] =\n listOutput.project?.configurations ?? [];\n const targets: string[] = listOutput.project?.targets ?? [];\n\n // ── Resolve scheme ────────────────────────────────────────────────────\n\n let scheme = options.scheme ?? null;\n\n if (!scheme) {\n if (schemes.length === 1) {\n scheme = schemes[0];\n } else if (schemes.length > 1) {\n const refName =\n (workspace ? basename(workspace, \".xcworkspace\") : null) ??\n (project ? basename(project, \".xcodeproj\") : null);\n if (refName) {\n const m = schemes.find((s) => s === refName);\n if (m) scheme = m;\n }\n if (!scheme) {\n throw new Error(\n \"Multiple schemes found: \" + schemes.join(\", \") +\n \". Pass scheme explicitly.\",\n );\n }\n } else {\n throw new Error(\n \"No schemes found in the Xcode project. Make sure the scheme is shared.\",\n );\n }\n }\n\n const configuration = options.configuration ?? \"Release\";\n\n return {\n workspace,\n project,\n scheme,\n configuration,\n schemes,\n configurations,\n targets,\n };\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport plist from \"plist\";\nimport type { ExportMethod } from \"../types/index.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface ExportOptionsPlistConfig {\n /** The export method: app-store, ad-hoc, development, enterprise, etc. */\n exportMethod: ExportMethod;\n /** Apple Developer team ID */\n teamId?: string;\n /**\n * Map of bundle identifier to provisioning profile name.\n * e.g. { \"com.example.app\": \"MyApp Distribution\" }\n */\n provisioningProfiles?: Record<string, string>;\n /** Whether to include bitcode (deprecated in Xcode 14+, defaults to false) */\n includeBitcode?: boolean;\n /** Whether to include symbols in the export (defaults to true) */\n includeSymbols?: boolean;\n /** Code signing identity, e.g. \"Apple Distribution: Company (TEAM_ID)\" */\n signingCertificate?: string;\n /** Signing style: \"manual\" or \"automatic\" */\n signingStyle?: \"manual\" | \"automatic\";\n /** Destination for export: \"export\" or \"upload\" */\n destination?: \"export\" | \"upload\";\n /** Whether to generate an app thinning report */\n thinning?: string;\n /** Catalyst platform: \"macos\" or \"ios\" */\n catalystPlatform?: string;\n /** Additional arbitrary keys to merge into the plist */\n additionalOptions?: Record<string, unknown>;\n}\n\n// ── Signing Style Inference ────────────────────────────────────────────────\n\nfunction inferSigningStyle(\n config: ExportOptionsPlistConfig,\n): \"manual\" | \"automatic\" {\n if (config.signingStyle) return config.signingStyle;\n // If provisioning profiles are specified, use manual signing\n if (\n config.provisioningProfiles &&\n Object.keys(config.provisioningProfiles).length > 0\n ) {\n return \"manual\";\n }\n return \"automatic\";\n}\n\n// ── Public API ─────────────────────────────────────────────────────────────\n\n/**\n * Build the exportOptions plist dictionary. Returns a plain object that can be\n * serialized to XML plist via the `plist` package.\n */\nexport function buildExportOptions(\n config: ExportOptionsPlistConfig,\n): Record<string, unknown> {\n const opts: Record<string, unknown> = {\n method: config.exportMethod,\n };\n\n const signingStyle = inferSigningStyle(config);\n opts.signingStyle = signingStyle;\n\n if (config.teamId) {\n opts.teamID = config.teamId;\n }\n\n if (signingStyle === \"manual\" && config.provisioningProfiles) {\n opts.provisioningProfiles = config.provisioningProfiles;\n }\n\n if (config.signingCertificate) {\n opts.signingCertificate = config.signingCertificate;\n }\n\n // Bitcode (default false for modern Xcode)\n opts.uploadBitcode = config.includeBitcode ?? false;\n opts.compileBitcode = config.includeBitcode ?? false;\n\n // Symbols (default true)\n opts.uploadSymbols = config.includeSymbols ?? true;\n\n if (config.destination) {\n opts.destination = config.destination;\n }\n\n if (config.thinning) {\n opts.thinning = config.thinning;\n }\n\n if (config.catalystPlatform) {\n // Apple expects \"macos\" or \"ios\"\n opts.distributionBundleIdentifier = undefined;\n }\n\n // Merge additional options last so they can override anything\n if (config.additionalOptions) {\n Object.assign(opts, config.additionalOptions);\n }\n\n return opts;\n}\n\n/**\n * Generate an exportOptions plist XML string from the given config.\n */\nexport function generateExportOptionsPlistXml(\n config: ExportOptionsPlistConfig,\n): string {\n const opts = buildExportOptions(config);\n return plist.build(opts as plist.PlistObject);\n}\n\n/**\n * Write an exportOptions.plist file to disk and return its path.\n *\n * @param dir - Directory to write the file into\n * @param config - Export options configuration\n * @returns The absolute path to the written plist file\n */\nexport async function writeExportOptionsPlist(\n dir: string,\n config: ExportOptionsPlistConfig,\n): Promise<string> {\n const xml = generateExportOptionsPlistXml(config);\n const plistPath = join(dir, \"exportOptions.plist\");\n await writeFile(plistPath, xml, \"utf-8\");\n return plistPath;\n}\n","import { spawn } from \"node:child_process\";\nimport { mkdir, readdir, rm, stat } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport { detectValues } from \"./detect.js\";\nimport { writeExportOptionsPlist } from \"./export-options.js\";\nimport type { ExportMethod } from \"../types/index.js\";\n\n// ── Re-exports ─────────────────────────────────────────────────────────────\n\nexport { detectValues } from \"./detect.js\";\nexport type { DetectedValues, XcodeBuildListOutput } from \"./detect.js\";\nexport {\n buildExportOptions,\n generateExportOptionsPlistXml,\n writeExportOptionsPlist,\n} from \"./export-options.js\";\nexport type { ExportOptionsPlistConfig } from \"./export-options.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface GymOptions {\n scheme: string;\n workspace?: string;\n project?: string;\n configuration?: string;\n exportMethod: ExportMethod;\n teamId?: string;\n provisioningProfiles?: Record<string, string>;\n codeSignIdentity?: string;\n outputDirectory?: string;\n outputName?: string;\n clean?: boolean;\n archivePath?: string;\n derivedDataPath?: string;\n xcargs?: string;\n buildPath?: string;\n includeBitcode?: boolean;\n includeSymbols?: boolean;\n exportOptions?: Record<string, unknown>;\n sdk?: string;\n destination?: string;\n catalystPlatform?: string;\n disableXcpretty?: boolean;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface GymResult {\n success: boolean;\n exitCode: number;\n ipaPath: string | null;\n pkgPath: string | null;\n dsymPath: string | null;\n archivePath: string;\n output: string;\n}\n\n// ── Internal helpers ───────────────────────────────────────────────────────\n\n/**\n * Spawn xcodebuild with the given args, streaming stdout/stderr to the\n * optional `onOutput` callback and collecting full output.\n */\nfunction runXcodebuild(\n args: string[],\n onOutput?: (chunk: string) => void,\n): Promise<{ exitCode: number; output: string }> {\n return new Promise((res, rej) => {\n const proc = spawn(\"xcodebuild\", args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const chunks: string[] = [];\n\n const handleData = (data: Buffer) => {\n const text = data.toString(\"utf-8\");\n chunks.push(text);\n if (onOutput) onOutput(text);\n };\n\n proc.stdout.on(\"data\", handleData);\n proc.stderr.on(\"data\", handleData);\n proc.on(\"error\", rej);\n proc.on(\"close\", (code) => {\n res({ exitCode: code ?? 1, output: chunks.join(\"\") });\n });\n });\n}\n\n/**\n * Recursively find the first file matching `ext` inside `dir`.\n */\nasync function findFileWithExtension(\n dir: string,\n ext: string,\n): Promise<string | null> {\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return null;\n }\n for (const entry of entries) {\n const full = join(dir, entry.name);\n if (entry.name.endsWith(ext) && !entry.isDirectory()) {\n return full;\n }\n if (entry.isDirectory()) {\n const found = await findFileWithExtension(full, ext);\n if (found) return found;\n }\n }\n return null;\n}\n\n/**\n * Compress a directory to a .tar.gz file and return its path.\n */\nasync function compressDsyms(\n dsymDir: string,\n outputPath: string,\n): Promise<string> {\n return new Promise((res, rej) => {\n const proc = spawn(\"tar\", [\"-czf\", outputPath, \"-C\", dsymDir, \".\"], {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n proc.on(\"error\", rej);\n proc.on(\"close\", (code) => {\n if (code !== 0) rej(new Error(\"tar failed with exit code \" + code));\n else res(outputPath);\n });\n });\n}\n\n// ── Main entry point ───────────────────────────────────────────────────────\n\n/**\n * Build an iOS/macOS app using xcodebuild archive + exportArchive.\n * This is the TypeScript equivalent of Fastlane's `gym` (alias `build_app`).\n *\n * Steps:\n * 1. requireMacOS(\"gym\")\n * 2. Detect values (workspace/project/scheme/config)\n * 3. Clean if requested\n * 4. Archive via `xcodebuild archive`\n * 5. Generate exportOptionsPlist\n * 6. Export via `xcodebuild -exportArchive`\n * 7. Find IPA/PKG, compress dSYMs\n * 8. Return GymResult\n */\nexport async function buildApp(options: GymOptions): Promise<GymResult> {\n requireMacOS(\"gym\");\n\n // ── 1. Detect values ──────────────────────────────────────────────────\n\n const detected = await detectValues({\n workspace: options.workspace,\n project: options.project,\n scheme: options.scheme,\n configuration: options.configuration,\n });\n\n const { workspace, project, scheme, configuration } = detected;\n\n // ── 2. Prepare paths ─────────────────────────────────────────────────\n\n const outputDir = resolve(\n options.outputDirectory ?? join(process.cwd(), \"output\"),\n );\n await mkdir(outputDir, { recursive: true });\n\n const archiveName = options.outputName ?? scheme;\n const archivePath =\n options.archivePath ?? join(outputDir, archiveName + \".xcarchive\");\n const exportPath = join(outputDir, \"export\");\n await mkdir(exportPath, { recursive: true });\n\n // Temp directory for the export options plist\n const tmpDir = join(tmpdir(), \"fastnode-gym-\" + randomUUID());\n await mkdir(tmpDir, { recursive: true });\n\n const fullOutput: string[] = [];\n const onOutput = (chunk: string) => {\n fullOutput.push(chunk);\n if (options.onOutput) options.onOutput(chunk);\n };\n\n try {\n // ── 3. Clean if requested ─────────────────────────────────────────\n\n if (options.clean) {\n const cleanArgs = [\"clean\"];\n if (workspace) cleanArgs.push(\"-workspace\", workspace);\n else if (project) cleanArgs.push(\"-project\", project);\n cleanArgs.push(\"-scheme\", scheme, \"-configuration\", configuration);\n if (options.xcargs) cleanArgs.push(...options.xcargs.split(/\\s+/));\n\n const cleanResult = await runXcodebuild(cleanArgs, onOutput);\n if (cleanResult.exitCode !== 0) {\n return {\n success: false,\n exitCode: cleanResult.exitCode,\n ipaPath: null,\n pkgPath: null,\n dsymPath: null,\n archivePath,\n output: fullOutput.join(\"\"),\n };\n }\n }\n\n // ── 4. Archive ────────────────────────────────────────────────────\n\n const archiveArgs: string[] = [\"archive\"];\n\n if (workspace) archiveArgs.push(\"-workspace\", workspace);\n else if (project) archiveArgs.push(\"-project\", project);\n\n archiveArgs.push(\"-scheme\", scheme);\n archiveArgs.push(\"-archivePath\", archivePath);\n archiveArgs.push(\"-configuration\", configuration);\n\n if (options.sdk) {\n archiveArgs.push(\"-sdk\", options.sdk);\n }\n if (options.destination) {\n archiveArgs.push(\"-destination\", options.destination);\n }\n if (options.derivedDataPath) {\n archiveArgs.push(\"-derivedDataPath\", options.derivedDataPath);\n }\n if (options.xcargs) {\n archiveArgs.push(...options.xcargs.split(/\\s+/));\n }\n\n const archiveResult = await runXcodebuild(archiveArgs, onOutput);\n if (archiveResult.exitCode !== 0) {\n return {\n success: false,\n exitCode: archiveResult.exitCode,\n ipaPath: null,\n pkgPath: null,\n dsymPath: null,\n archivePath,\n output: fullOutput.join(\"\"),\n };\n }\n\n // ── 5. Generate exportOptionsPlist ────────────────────────────────\n\n const exportOptionsPlistPath = await writeExportOptionsPlist(tmpDir, {\n exportMethod: options.exportMethod,\n teamId: options.teamId,\n provisioningProfiles: options.provisioningProfiles,\n signingCertificate: options.codeSignIdentity,\n includeBitcode: options.includeBitcode,\n includeSymbols: options.includeSymbols,\n additionalOptions: options.exportOptions,\n });\n\n // ── 6. Export archive ─────────────────────────────────────────────\n\n const exportArgs: string[] = [\n \"-exportArchive\",\n \"-archivePath\",\n archivePath,\n \"-exportOptionsPlist\",\n exportOptionsPlistPath,\n \"-exportPath\",\n exportPath,\n ];\n\n if (options.xcargs) {\n exportArgs.push(...options.xcargs.split(/\\s+/));\n }\n\n const exportResult = await runXcodebuild(exportArgs, onOutput);\n if (exportResult.exitCode !== 0) {\n return {\n success: false,\n exitCode: exportResult.exitCode,\n ipaPath: null,\n pkgPath: null,\n dsymPath: null,\n archivePath,\n output: fullOutput.join(\"\"),\n };\n }\n\n // ── 7. Find outputs ───────────────────────────────────────────────\n\n // Find IPA\n let ipaPath = await findFileWithExtension(exportPath, \".ipa\");\n\n // Find PKG (macOS installer)\n let pkgPath = await findFileWithExtension(exportPath, \".pkg\");\n\n // Compress dSYMs\n let dsymPath: string | null = null;\n const dsymsDir = join(archivePath, \"dSYMs\");\n try {\n const dsymStat = await stat(dsymsDir);\n if (dsymStat.isDirectory()) {\n const dsymEntries = await readdir(dsymsDir);\n if (dsymEntries.length > 0) {\n dsymPath = join(outputDir, archiveName + \".app.dSYM.zip\");\n await compressDsyms(dsymsDir, dsymPath);\n }\n }\n } catch {\n // No dSYMs directory — that's OK\n }\n\n return {\n success: true,\n exitCode: 0,\n ipaPath,\n pkgPath,\n dsymPath,\n archivePath,\n output: fullOutput.join(\"\"),\n };\n } finally {\n // Clean up temp directory\n await rm(tmpDir, { recursive: true, force: true }).catch(() => {});\n }\n}\n","import { registerAction } from \"../index.js\";\nimport type { ExportMethod } from \"../../types/index.js\";\n\nregisterAction({\n name: \"build_app\",\n aliases: [\"gym\", \"build_ios_app\", \"build_mac_app\"],\n description: \"Build the iOS/macOS app using xcodebuild\",\n async run(params, ctx) {\n const { buildApp } = await import(\"../../gym/index.js\");\n const result = await buildApp({\n scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string,\n workspace: params.workspace as string | undefined,\n project: params.project as string | undefined,\n configuration: params.configuration as string | undefined,\n exportMethod: (params.export_method ?? \"app-store\") as ExportMethod,\n teamId: params.team_id as string | undefined,\n provisioningProfiles: params.export_options && typeof params.export_options === \"object\"\n ? (params.export_options as Record<string, unknown>).provisioningProfiles as Record<string, string> | undefined\n : undefined,\n codeSignIdentity: params.codesigning_identity as string | undefined,\n outputDirectory: params.output_directory as string | undefined,\n outputName: params.output_name as string | undefined,\n clean: params.clean as boolean | undefined,\n xcargs: params.xcargs as string | undefined,\n sdk: params.sdk as string | undefined,\n destination: params.destination as string | undefined,\n includeBitcode: params.include_bitcode as boolean | undefined,\n includeSymbols: params.include_symbols as boolean | undefined,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n ctx.set(\"IPA_OUTPUT_PATH\", result.ipaPath);\n ctx.set(\"PKG_OUTPUT_PATH\", result.pkgPath);\n ctx.set(\"DSYM_OUTPUT_PATH\", result.dsymPath);\n ctx.set(\"XCODEBUILD_ARCHIVE\", result.archivePath);\n return result;\n },\n});\n\nregisterAction({\n name: \"clean_build_artifacts\",\n description: \"Remove build artifacts (IPA, dSYM, etc.)\",\n async run(params, ctx) {\n const { rm } = await import(\"node:fs/promises\");\n const paths = [\n ctx.get<string>(\"IPA_OUTPUT_PATH\"),\n ctx.get<string>(\"PKG_OUTPUT_PATH\"),\n ctx.get<string>(\"DSYM_OUTPUT_PATH\"),\n ].filter(Boolean) as string[];\n for (const p of paths) {\n await rm(p, { force: true }).catch(() => {});\n }\n return { cleaned: paths };\n },\n});\n","/**\n * SRP (Secure Remote Password) implementation\n * 1:1 port of the fastlane-sirp Ruby gem\n * Used for Apple ID authentication\n */\n\nimport { createHash, randomBytes, pbkdf2Sync } from \"node:crypto\";\n\n// ── RFC 5054 SRP Group Parameters ──────────────────────────────────────────\n\n// Copied exactly from fastlane-sirp parameters.rb (2048-bit group)\nconst N_2048 = BigInt(\n \"0x\" +\n \"AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050\" +\n \"A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50\" +\n \"E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B8\" +\n \"55F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773B\" +\n \"CA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748\" +\n \"544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6\" +\n \"AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB\" +\n \"694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73\"\n);\nconst g_2048 = 2n;\n\n// ── Utility Functions ──────────────────────────────────────────────────────\n\nfunction numToHex(num: bigint): string {\n let hex = num.toString(16);\n if (hex.length % 2 !== 0) hex = \"0\" + hex;\n return hex.toLowerCase();\n}\n\nfunction hexToBytes(hex: string): Buffer {\n return Buffer.from(hex, \"hex\");\n}\n\nfunction shaHex(h: string, algorithm: string): string {\n return createHash(algorithm).update(hexToBytes(h)).digest(\"hex\");\n}\n\nfunction shaStr(s: string, algorithm: string): string {\n return createHash(algorithm).update(s).digest(\"hex\");\n}\n\nfunction modExp(base: bigint, exp: bigint, mod: bigint): bigint {\n if (mod === 1n) return 0n;\n let result = 1n;\n base = base % mod;\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod;\n }\n exp = exp / 2n;\n base = (base * base) % mod;\n }\n return result;\n}\n\nfunction H(algorithm: string, n: bigint, ...args: (bigint | string | undefined)[]): bigint {\n const nHex = numToHex(n);\n // Must match Ruby: nlen = 2 * ((('%x' % [n]).length * 4 + 7) >> 3)\n // Use floor division (>>3), NOT ceiling\n const nlen = 2 * (((nHex.length * 4 + 7) >> 3));\n\n let hashin = \"\";\n for (const s of args) {\n if (s === undefined) continue;\n const shex = typeof s === \"string\" ? s : numToHex(s);\n if (shex.length > nlen) {\n throw new Error(\"Bit width does not match - client uses different prime\");\n }\n hashin += \"0\".repeat(nlen - shex.length) + shex;\n }\n\n const hashed = shaHex(hashin, algorithm);\n return BigInt(\"0x\" + hashed) % n;\n}\n\n// ── SRP Client ─────────────────────────────────────────────────────────────\n\nexport class SRPClient {\n private N: bigint;\n private g: bigint;\n private hashAlg: string;\n private k: bigint;\n private a: bigint;\n A: string;\n private S: string | null = null;\n private K: string | null = null;\n M: string | null = null;\n H_AMK: string | null = null;\n\n constructor(group: number = 2048) {\n if (group !== 2048) throw new Error(\"Only 2048-bit group is supported\");\n this.N = N_2048;\n this.g = g_2048;\n this.hashAlg = \"sha256\";\n this.k = H(this.hashAlg, this.N, this.N, this.g);\n // Generate random 'a'\n this.a = BigInt(\"0x\" + randomBytes(256).toString(\"hex\"));\n // Compute A = g^a mod N\n this.A = numToHex(modExp(this.g, this.a, this.N));\n }\n\n startAuthentication(): string {\n return this.A;\n }\n\n processChallenge(\n username: string,\n password: string, // hex-encoded encrypted password\n xsalt: string, // hex\n xbb: string, // hex\n isPasswordEncrypted: boolean = false\n ): string | false {\n const bb = BigInt(\"0x\" + xbb);\n\n // SRP-6a safety check\n if (bb % this.N === 0n) return false;\n\n let x: bigint;\n if (isPasswordEncrypted) {\n x = this.calcXHex(password, xsalt);\n } else {\n x = this.calcX(username, password, xsalt);\n }\n\n const u = H(this.hashAlg, this.N, this.A, xbb);\n if (u === 0n) return false;\n\n // S = (B - k * g^x) ^ (a + u*x) mod N\n const gx = modExp(this.g, x, this.N);\n let base = (bb - this.k * gx) % this.N;\n if (base < 0n) base += this.N;\n const exp = this.a + x * u;\n this.S = numToHex(modExp(base, exp, this.N));\n this.K = shaHex(this.S, this.hashAlg);\n\n // M = H(H(N) xor H(g), H(I), s, A, B, K)\n const hxor = H(this.hashAlg, this.N, this.N) ^ H(this.hashAlg, this.N, this.g);\n const buf =\n numToHex(hxor) +\n shaStr(username, this.hashAlg) +\n xsalt +\n this.A +\n xbb +\n this.K;\n const bytes = hexToBytes(buf);\n this.M = createHash(this.hashAlg).update(bytes).digest(\"hex\");\n\n // H_AMK = H(A, M, K)\n const amkBytes = hexToBytes(this.A + this.M + this.K);\n this.H_AMK = numToHex(\n BigInt(\"0x\" + createHash(this.hashAlg).update(amkBytes).digest(\"hex\"))\n );\n\n return this.M;\n }\n\n private calcX(username: string, password: string, xsalt: string): bigint {\n const spad = xsalt.length % 2 !== 0 ? \"0\" : \"\";\n const inner = shaStr(`${username}:${password}`, this.hashAlg);\n return BigInt(\"0x\" + shaHex(spad + xsalt + inner, this.hashAlg));\n }\n\n private calcXHex(xpassword: string, xsalt: string): bigint {\n // calc_x_hex: sha_hex(xsalt + sha_hex(\":\" hex + xpassword), hash)\n const colonHex = \":\".charCodeAt(0).toString(16);\n const inner = shaHex(colonHex + xpassword, this.hashAlg);\n return BigInt(\"0x\" + shaHex(xsalt + inner, this.hashAlg));\n }\n}\n\n// ── Apple PBKDF2 password derivation ───────────────────────────────────────\n\nexport function applePbkdf2(\n password: string,\n salt: Buffer,\n iterations: number,\n keyLength: number,\n protocol: string\n): Buffer {\n if (![\"s2k\", \"s2k_fo\"].includes(protocol)) {\n throw new Error(`Unsupported protocol '${protocol}' for pbkdf2`);\n }\n\n // First hash the password with SHA-256\n let passwordBytes: Buffer | string = createHash(\"sha256\").update(password).digest();\n\n if (protocol === \"s2k_fo\") {\n // Legacy: convert to hex string\n passwordBytes = passwordBytes.toString(\"hex\");\n }\n\n return pbkdf2Sync(passwordBytes, salt, iterations, keyLength, \"sha256\");\n}\n","/**\n * Apple ID Session Authentication\n * 1:1 port of Fastlane Spaceship client.rb + two_step_or_factor_client.rb\n *\n * Two flows:\n *\n * loginWithAppleId({ email, password, onPrompt })\n * - blocking, CLI-style. onPrompt is awaited to collect 2FA codes.\n *\n * beginLogin({ email, password }) → { kind: \"logged_in\" | \"needs_2fa\", ... }\n * submitTwoFactorCode({ pending, code, source, ... }) → AppleSession\n * requestSmsCode({ pending, phoneId, mode })\n * - HTTP-resumable. Used by the App Release wizard, where the 2FA\n * challenge is rendered in a browser modal and the code arrives in\n * a separate request.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { createInterface } from \"node:readline\";\nimport { SRPClient, applePbkdf2 } from \"./srp.js\";\n\nconst AUTH_BASE = \"https://idmsa.apple.com/appleauth/auth\";\n\n/**\n * Apple's answer as JSON, or a readable error when it is not.\n *\n * Apple's sign-in endpoints sometimes answer with an HTML page rather than\n * JSON: a \"Service Unavailable\" or \"Access Denied\" page when it is refusing or\n * rate-limiting a server, a maintenance page, a redirect to a captcha. Parsed\n * blindly, the failure surfaced as `Unexpected token '<', \"<html> <he\"... is\n * not valid JSON`, which told the person at the dashboard nothing. This reads\n * the body as text first and, when it is not JSON, says what Apple actually\n * sent: the status, the page title, and what to do.\n */\nexport async function appleJson<T = any>(res: Response, what: string): Promise<T> {\n const text = await res.text();\n try {\n return JSON.parse(text) as T;\n } catch {\n const contentType = (res.headers.get(\"content-type\") ?? \"\").split(\";\")[0].trim();\n const title = /<title>([^<]{1,120})<\\/title>/i.exec(text)?.[1]?.trim();\n const looksHtml = /^\\s*<(!doctype|html)/i.test(text) || contentType === \"text/html\";\n const page = looksHtml ? \"an HTML page\" : contentType ? `a ${contentType} response` : \"a non-JSON response\";\n throw new Error(\n `Apple answered the ${what} with ${page} (HTTP ${res.status}${title ? `, \"${title}\"` : \"\"}) instead of JSON. ` +\n \"Apple is refusing or rate-limiting sign-ins from this server right now; wait a few minutes and try again. \" +\n \"If it keeps happening, sign in once at appleid.apple.com to clear any hold on the account.\",\n );\n }\n}\n\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 appleJson(r, \"two-factor challenge\");\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(rawInput: {\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 // A code copied off a phone can carry a non-breaking space or a stray\n // newline; fastlane strips those too. Only the digits are the code.\n const input = { ...rawInput, code: rawInput.code.replace(/[\\s\\u00a0]+/g, \"\") };\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 appleJson(initRes, \"sign-in init\");\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 // The shape fastlane's spaceship checks since its January 2026 hardening:\n // a 200 with JSON that is not the challenge (a rate-limit notice, an empty\n // object) used to fail deeper down as a Buffer of \"undefined\".\n if (!iterations || !saltB64 || !bB64 || !c || !protocol) {\n throw new Error(`Apple's sign-in init answered without a challenge (HTTP ${initRes.status}): ${JSON.stringify(initBody).slice(0, 300)}`);\n }\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 appleJson(res, \"session lookup\");\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 appleJson<any[]>(res, \"agreements lookup\");\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\n/** Where App Store Connect sends a signed-out browser: the widget key rides on that redirect. */\nconst LOGOUT_URL = \"https://appstoreconnect.apple.com/logout\";\n\n/**\n * The widget key out of the sign-out redirect, or null.\n *\n * `https://idmsa.apple.com/appleauth/signout?widgetKey=<key>&asop=…` is the\n * Location a HEAD to /logout answers with, and the key on it is the same\n * X-Apple-Widget-Key the sign-in needs.\n */\nexport function serviceKeyFromLocation(location: string | null | undefined): string | null {\n if (!location) return null;\n try {\n const key = new URL(location).searchParams.get(\"widgetKey\")?.trim();\n return key && /^[0-9a-f]{16,}$/i.test(key) ? key : null;\n } catch {\n return null;\n }\n}\n\n/**\n * The X-Apple-Widget-Key the sign-in needs.\n *\n * Read from the sign-out redirect first, the way fastlane's spaceship does\n * since September 2026 (\"Read the App Store Connect API key from where Apple\n * keeps it now\"): the olympus config endpoint this used to call answers 404\n * with an HTML page now, which surfaced at the dashboard as `Unexpected\n * token '<'`. The config endpoint is kept as the fallback, read safely.\n */\nexport async function fetchServiceKey(fetchImpl: typeof fetch = fetch): Promise<string> {\n const head = await fetchImpl(LOGOUT_URL, { method: \"HEAD\", redirect: \"manual\" });\n const fromRedirect = serviceKeyFromLocation(head.headers.get(\"location\"));\n if (fromRedirect) return fromRedirect;\n\n const res = await fetchImpl(WIDGET_KEY_URL);\n const body = await appleJson(res, \"service key request\");\n if (!body?.authServiceKey) throw new Error(\"Could not fetch Apple service key: the sign-out redirect carried no widgetKey and the config endpoint had no authServiceKey.\");\n return body.authServiceKey as string;\n}\n\nfunction buildAuthHeaders(session: AppleSession): Record<string, string> {\n const h: Record<string, string> = { \"X-Apple-Widget-Key\": session.serviceKey, Accept: \"application/json\" };\n if (session.sessionId) h[\"X-Apple-Id-Session-Id\"] = session.sessionId;\n if (session.scnt) h[\"scnt\"] = session.scnt;\n const c = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n if (c) h[\"Cookie\"] = c;\n return h;\n}\n\nfunction parseCookies(headers: Headers): Record<string, string> {\n const cookies: Record<string, string> = {};\n for (const raw of headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) cookies[m[1]] = m[2];\n }\n return cookies;\n}\n\nfunction computeHashcash(bits: number, challenge: string): string {\n const date = new Date().toISOString().replace(/[-:T]/g, \"\").slice(0, 12);\n let counter = 0;\n while (true) {\n const stamp = `1:${bits}:${date}:${challenge}::${counter.toString(36)}:`;\n const hash = createHash(\"sha1\").update(stamp).digest();\n let zeroBits = 0;\n for (const byte of hash) {\n if (byte === 0) { zeroBits += 8; } else { zeroBits += Math.clz32(byte) - 24; break; }\n if (zeroBits >= bits) break;\n }\n if (zeroBits >= bits) return stamp;\n counter++;\n }\n}\n\nasync function defaultPrompt(message: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((r) => { rl.question(message, (a) => { rl.close(); r(a.trim()); }); });\n}\n","import type { TokenManager } from \"./auth.js\";\nimport { ProgramLicenseAgreementError } from \"./apple-session.js\";\nimport type {\n JsonApiErrorResponse,\n JsonApiListResponse,\n JsonApiResponse,\n ListParams,\n RequestOptions,\n} from \"./types.js\";\n\nconst PRODUCTION_BASE = \"https://api.appstoreconnect.apple.com\";\nconst ENTERPRISE_BASE = \"https://api.enterprise.developer.apple.com\";\n\nconst MAX_RETRIES = 5;\nconst INITIAL_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 60_000;\n/** Fastlane's TooManyRequestsError gives up after 3600s cumulative backoff. */\nconst MAX_RATE_LIMIT_BACKOFF_MS = 3_600_000;\n\nexport class AppStoreConnectError extends Error {\n constructor(\n message: string,\n public status: number,\n public errors: JsonApiErrorResponse[\"errors\"] = []\n ) {\n super(message);\n this.name = \"AppStoreConnectError\";\n }\n}\n\nexport class RateLimitError extends AppStoreConnectError {\n constructor(public retryAfter: number) {\n super(`Rate limited. Retry after ${retryAfter}s`, 429);\n this.name = \"RateLimitError\";\n }\n}\n\nexport class RequestClient {\n private baseUrl: string;\n private tokenManager: TokenManager;\n\n constructor(tokenManager: TokenManager, enterprise = false) {\n this.tokenManager = tokenManager;\n this.baseUrl = enterprise ? ENTERPRISE_BASE : PRODUCTION_BASE;\n }\n\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = \"GET\", body, params, headers: extraHeaders } = options;\n\n let url = `${this.baseUrl}${path}`;\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n searchParams.set(key, value.join(\",\"));\n } else {\n searchParams.set(key, String(value));\n }\n }\n const qs = searchParams.toString();\n if (qs) url += `?${qs}`;\n }\n\n let lastError: Error | null = null;\n // Soft-cumulative backoff for 429 that doubles on each hit, mirroring\n // Fastlane's Spaceship::ConnectAPI::APIClient#with_asc_retry 429 handler:\n // `Kernel.sleep(backoff); backoff *= 2`, giving up past 3600s.\n let rateLimitBackoffMs = INITIAL_BACKOFF_MS;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n const token = await this.tokenManager.getToken();\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n ...extraHeaders,\n };\n\n const res = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (res.ok) {\n if (res.status === 204) return undefined as T;\n return (await res.json()) as T;\n }\n\n // Handle 401 — refresh token and retry once\n if (res.status === 401 && attempt === 0) {\n this.tokenManager.invalidate();\n continue;\n }\n\n // Handle 429 — rate limit. Prefer server's Retry-After header when\n // provided, otherwise fall back to Fastlane's doubling backoff.\n if (res.status === 429) {\n if (rateLimitBackoffMs > MAX_RATE_LIMIT_BACKOFF_MS) {\n throw new RateLimitError(Math.floor(rateLimitBackoffMs / 1000));\n }\n const retryAfterHeader = res.headers.get(\"Retry-After\");\n const sleepMs = retryAfterHeader\n ? parseInt(retryAfterHeader, 10) * 1000\n : rateLimitBackoffMs;\n await sleep(sleepMs);\n rateLimitBackoffMs *= 2;\n continue;\n }\n\n // Parse error body early so we can inspect it for 403/502 special cases.\n const errorBody = await res.json().catch(() => null);\n const errors = (errorBody as JsonApiErrorResponse)?.errors || [];\n\n // Handle 403 — detect missing/expired program license agreement.\n // Mirrors api_client.rb's ProgramLicenseAgreementUpdated branch.\n if (res.status === 403) {\n const firstCode = errors[0]?.code;\n if (firstCode === \"FORBIDDEN.REQUIRED_AGREEMENTS_MISSING_OR_EXPIRED\") {\n const detail =\n errors.map((e) => e.detail || e.title).join(\"; \") ||\n \"Required agreements are missing or expired.\";\n throw new ProgramLicenseAgreementError(\n `${detail} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n []\n );\n }\n }\n\n // Handle 502 — special-case \"Could not process this request\" retry.\n // Mirrors api_client.rb's BadGatewayError branch (issue fastlane#19264).\n if (res.status === 502 && attempt < MAX_RETRIES) {\n const bodyText = errorBody ? JSON.stringify(errorBody) : \"\";\n if (bodyText.includes(\"Could not process this request\")) {\n const backoff = Math.min(\n INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n MAX_BACKOFF_MS\n );\n await sleep(backoff + Math.random() * 500);\n continue;\n }\n }\n\n // Handle 5xx — retry with exponential backoff\n if (res.status >= 500 && attempt < MAX_RETRIES) {\n const backoff = Math.min(\n INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n MAX_BACKOFF_MS\n );\n await sleep(backoff + Math.random() * 500);\n continue;\n }\n\n const detail = errors.map((e) => e.detail || e.title).join(\"; \") || `HTTP ${res.status}`;\n\n lastError = new AppStoreConnectError(detail, res.status, errors);\n break;\n }\n\n throw lastError || new Error(\"Request failed after retries\");\n }\n\n async get<T>(path: string, params?: Record<string, string | string[] | number | undefined>): Promise<T> {\n return this.request<T>(path, { method: \"GET\", params });\n }\n\n async post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body });\n }\n\n async patch<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"PATCH\", body });\n }\n\n async delete(path: string): Promise<void> {\n await this.request(path, { method: \"DELETE\" });\n }\n\n // Build query params from ListParams\n buildListParams(params: ListParams): Record<string, string | undefined> {\n const result: Record<string, string | undefined> = {};\n\n if (params.filter) {\n for (const [key, value] of Object.entries(params.filter)) {\n result[`filter[${key}]`] = Array.isArray(value) ? value.join(\",\") : value;\n }\n }\n\n if (params.include) {\n result[\"include\"] = params.include;\n }\n\n if (params.fields) {\n for (const [key, value] of Object.entries(params.fields)) {\n result[`fields[${key}]`] = value;\n }\n }\n\n if (params.limit !== undefined) {\n result[\"limit\"] = String(params.limit);\n }\n\n if (params.sort) {\n result[\"sort\"] = params.sort;\n }\n\n if (params.cursor) {\n // ASC uses page[after] for cursor pagination\n result[\"page[after]\"] = params.cursor;\n }\n\n return result;\n }\n\n async list<T>(path: string, params: ListParams = {}): Promise<JsonApiListResponse<T>> {\n const queryParams = this.buildListParams(params);\n return this.get<JsonApiListResponse<T>>(path, queryParams);\n }\n\n async *paginate<T>(path: string, params: ListParams = {}): AsyncGenerator<T, void, undefined> {\n let cursor: string | undefined = params.cursor;\n\n while (true) {\n const response = await this.list<T>(path, { ...params, cursor });\n\n for (const item of response.data) {\n yield item;\n }\n\n // Check for next page\n const nextLink = response.links?.next;\n if (!nextLink) break;\n\n // Extract cursor from next link\n const nextUrl = new URL(nextLink);\n cursor = nextUrl.searchParams.get(\"page[after]\") || undefined;\n if (!cursor) break;\n }\n }\n\n async all<T>(path: string, params: ListParams = {}): Promise<T[]> {\n const results: T[] = [];\n for await (const item of this.paginate<T>(path, params)) {\n results.push(item);\n }\n return results;\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { writeFile, unlink, mkdtemp, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport type { PilotUploadOptions, UploadResult } from \"./types.js\";\n\n/**\n * Upload a build to TestFlight via Apple's `altool` (macOS only).\n *\n * altool ships with Xcode command-line tools. It provides richer error\n * output than iTMSTransporter but is only available on macOS.\n */\nexport async function uploadWithAltool(\n options: PilotUploadOptions\n): Promise<UploadResult> {\n if (!existsSync(options.ipaPath)) {\n throw new Error(`File not found: ${options.ipaPath}`);\n }\n\n const platform = options.platform ?? \"ios\";\n const timeout = options.timeout ?? 1_800_000; // 30 min\n\n // Write temp .p8 key file — altool reads from API_PRIVATE_KEYS_DIR\n const keyDir = await mkdtemp(join(tmpdir(), \"fastnode-altool-\"));\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await writeFile(keyPath, options.apiPrivateKey);\n\n return new Promise<UploadResult>((resolve) => {\n const args = [\n \"altool\",\n \"--upload-app\",\n \"-f\",\n options.ipaPath,\n \"-t\",\n platform,\n \"--apiKey\",\n options.apiKeyId,\n \"--apiIssuer\",\n options.apiIssuerId,\n ];\n\n const child = spawn(\"xcrun\", args, {\n env: { ...process.env, API_PRIVATE_KEYS_DIR: keyDir },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n }, timeout);\n\n const onData = (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n };\n\n child.stdout.on(\"data\", onData);\n child.stderr.on(\"data\", onData);\n\n child.on(\"close\", async (code) => {\n clearTimeout(timer);\n await unlink(keyPath).catch(() => {});\n await rm(keyDir, { recursive: true, force: true }).catch(() => {});\n resolve({ success: code === 0, output, backend: \"altool\" });\n });\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\n\n/**\n * Locate the iTMSTransporter binary on this host.\n *\n * Apple ships iTMSTransporter as a Java-based tool bundled with Xcode\n * on macOS, and as a standalone Linux distribution used by media\n * publishers for CI. Either works for uploading IPAs — same protocol,\n * same ASC API key format.\n *\n * Resolution order:\n * 1. ITMSTRANSPORTER_BIN env var (pinning for prod deployments)\n * 2. Well-known system paths for the host OS\n * 3. Throw with a clear install hint\n *\n * We deliberately do NOT auto-download Transporter. Apple's download\n * URL is not versioned and the license/redistribution story is fuzzy.\n * Prod hosts should install it once via apt/brew/manual, then pin via\n * env var so CI is reproducible.\n */\nexport async function resolveTransporter(): Promise<string> {\n // 1. Env override — the canonical path for prod\n const override = process.env.ITMSTRANSPORTER_BIN;\n if (override) {\n if (!existsSync(override)) {\n throw new Error(\n `ITMSTRANSPORTER_BIN is set to \"${override}\" but that path does not exist.`\n );\n }\n return override;\n }\n\n // 2. Well-known system paths, in preferred order per OS\n const candidates =\n process.platform === \"darwin\"\n ? [\n // Xcode 15+: Transporter.app bundled with Xcode\n \"/Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/Versions/A/itms/bin/iTMSTransporter\",\n // Standalone Transporter.app from the Mac App Store\n \"/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter\",\n ]\n : [\n \"/usr/local/itms/bin/iTMSTransporter\",\n \"/opt/itms/bin/iTMSTransporter\",\n \"/usr/local/bin/iTMSTransporter\",\n ];\n\n for (const path of candidates) {\n if (existsSync(path)) return path;\n }\n\n throw new Error(\n [\n \"iTMSTransporter not found.\",\n \"\",\n \"Install options:\",\n process.platform === \"darwin\"\n ? \" - Install Xcode (includes Transporter)\"\n : \" - Download Apple's standalone iTMSTransporter package for Linux\",\n \" - Or set ITMSTRANSPORTER_BIN to the absolute path of the binary\",\n \"\",\n `Searched: ${candidates.join(\", \")}`,\n ].join(\"\\n\")\n );\n}\n\n/**\n * Verify that Java is available on PATH. iTMSTransporter is a Java\n * application and won't run without a JRE.\n */\nexport async function verifyJava(): Promise<{ version: string }> {\n return new Promise((resolve, reject) => {\n const child = spawn(\"java\", [\"-version\"], { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n let stderr = \"\";\n child.stderr.on(\"data\", (d: Buffer) => {\n stderr += d.toString();\n });\n child.on(\"error\", (err) => {\n reject(\n new Error(\n `java not found on PATH (${err.message}). Install Java 17 LTS and ensure it is on PATH.`\n )\n );\n });\n child.on(\"close\", (code) => {\n if (code !== 0) {\n reject(new Error(`java -version exited ${code}: ${stderr}`));\n return;\n }\n // Output format: `openjdk version \"17.0.8\" 2023-07-18 ...`\n const match = stderr.match(/version \"([^\"]+)\"/);\n resolve({ version: match?.[1] ?? \"unknown\" });\n });\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { writeFile, mkdir, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport type { PilotUploadOptions, UploadResult } from \"./types.js\";\nimport { resolveTransporter, verifyJava } from \"./transporter-install.js\";\n\n/**\n * Upload a build to TestFlight via Apple's iTMSTransporter (Java).\n *\n * This path works on Linux (and macOS) and does NOT require Xcode.\n * It is the primary upload path for the ship worker LXC.\n *\n * iTMSTransporter reads the ASC API private key from a directory\n * named by API_PRIVATE_KEYS_DIR, looking for the file `AuthKey_<keyId>.p8`.\n */\nexport async function uploadWithTransporter(\n options: PilotUploadOptions\n): Promise<UploadResult> {\n if (!existsSync(options.ipaPath)) {\n throw new Error(`File not found: ${options.ipaPath}`);\n }\n\n // Fail fast if Java is missing — avoids a cryptic exec error deep inside\n // Transporter. This is cheap (~20ms) and only runs once per upload.\n await verifyJava();\n\n const transporterBin = await resolveTransporter();\n\n const platform = options.platform ?? \"ios\";\n const timeout = options.timeout ?? 1_800_000; // 30 min\n\n // Write the ASC API .p8 key where iTMSTransporter will actually find it.\n //\n // Transporter does NOT reliably honor the API_PRIVATE_KEYS_DIR env var for\n // `-m upload` (observed on the Linux standalone build on the ship worker: it\n // ignored the temp dir and failed with \"Could not locate the private key\n // file named either: AuthKey_<id>.p8 or ApiKey_<id>.p8\"). What it always\n // searches is a fixed set of directories — chiefly `~/.appstoreconnect/\n // private_keys` — so we place the key there. API_PRIVATE_KEYS_DIR is still\n // set below as belt-and-suspenders for versions that do honor it.\n //\n // Uploads are serialized by the ship worker (one build at a time), and the\n // filename is keyed by keyId, so there is no cross-upload collision. We clean\n // up only the file we wrote, never the shared directory.\n const keyDir = join(homedir(), \".appstoreconnect\", \"private_keys\");\n await mkdir(keyDir, { recursive: true });\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await writeFile(keyPath, options.apiPrivateKey, { mode: 0o600 });\n\n return new Promise<UploadResult>((resolve) => {\n const args = [\n \"-m\", \"upload\",\n \"-assetFile\", options.ipaPath,\n \"-apiKey\", options.apiKeyId,\n \"-apiIssuer\", options.apiIssuerId,\n // WONoPause prevents the JVM from waiting on stdin in non-TTY\n // environments (CI, LaunchAgent) where it would hang forever.\n \"-WONoPause\", \"true\",\n ];\n\n // On Linux, iTMSTransporter cannot run the software-analysis phase that\n // inspects the Mach-O binary, so it needs a pre-generated AppStoreInfo.plist\n // supplied via -assetDescription (created on the macOS build runner). We pass\n // an absolute path because transporter otherwise resolves the descriptor\n // relative to its own install dir, not the cwd.\n if (options.assetDescriptionPath) {\n args.push(\"-assetDescription\", options.assetDescriptionPath);\n }\n\n // Transporter distinguishes iOS vs macOS/tvOS via a -bundleType flag\n // on some code paths. For standard IPAs the protocol is platform-aware\n // via the asset itself, so we only pass the hint when it's non-default.\n if (platform !== \"ios\") {\n args.push(\"-bundleType\", platform);\n }\n\n const child = spawn(transporterBin, args, {\n env: {\n ...process.env,\n API_PRIVATE_KEYS_DIR: keyDir,\n },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\");\n }, timeout);\n\n const onData = (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n };\n\n child.stdout.on(\"data\", onData);\n child.stderr.on(\"data\", onData);\n\n child.on(\"close\", async (code) => {\n clearTimeout(timer);\n await rm(keyPath, { force: true }).catch(() => {});\n resolve({ success: code === 0, output, backend: \"transporter\" });\n });\n\n child.on(\"error\", async (err) => {\n clearTimeout(timer);\n await rm(keyPath, { force: true }).catch(() => {});\n resolve({\n success: false,\n output: output + `\\nProcess error: ${err.message}`,\n backend: \"transporter\",\n });\n });\n });\n}\n","/**\n * Classify upload failures into transient vs. permanent buckets.\n *\n * Apple's App Store Connect / iTMSTransporter backend is flaky:\n * the finalize step (\"CHANGE UPLOAD STATE TO COMPLETE\") periodically\n * returns 500, and the Java transporter surfaces various connection\n * errors during long uploads. These are all safe to retry — the IPA\n * is deterministic and Apple deduplicates on build number.\n *\n * Non-transient errors (invalid binary, duplicate build number, auth\n * failure) should NOT be retried — they will never succeed without\n * the caller taking some action.\n */\n\nexport type TransientUploadError =\n | \"apple_5xx\"\n | \"finalize_failed\"\n | \"network_timeout\"\n | \"connection_reset\"\n | \"transporter_jvm_error\";\n\ninterface ClassifierRule {\n pattern: RegExp;\n kind: TransientUploadError;\n}\n\nconst RULES: ClassifierRule[] = [\n // Apple's finalize-upload call returning 5xx — the most common transient\n // failure we see in practice. Example:\n // \"CHANGE UPLOAD STATE TO COMPLETE (UPLOADING ASSET DESCRIPTION):\n // received status code 500; internal server error.\"\n { pattern: /CHANGE UPLOAD STATE TO COMPLETE/i, kind: \"finalize_failed\" },\n\n // Generic 5xx from ASC backend services\n { pattern: /status code 5\\d\\d/i, kind: \"apple_5xx\" },\n { pattern: /internal server error/i, kind: \"apple_5xx\" },\n { pattern: /Service Unavailable/i, kind: \"apple_5xx\" },\n { pattern: /Bad Gateway/i, kind: \"apple_5xx\" },\n\n // Network-level interruptions during the upload body transfer\n { pattern: /Connection reset/i, kind: \"connection_reset\" },\n { pattern: /SocketException/i, kind: \"connection_reset\" },\n { pattern: /Broken pipe/i, kind: \"connection_reset\" },\n\n // Timeouts — distinct from resets because the other side may have\n // actually processed the request, so dedupe logic may matter.\n { pattern: /Read timed out/i, kind: \"network_timeout\" },\n { pattern: /SocketTimeoutException/i, kind: \"network_timeout\" },\n { pattern: /Operation timed out/i, kind: \"network_timeout\" },\n\n // JVM-internal errors from iTMSTransporter (OOM, thread interruption, etc.)\n { pattern: /java\\.lang\\.OutOfMemoryError/i, kind: \"transporter_jvm_error\" },\n { pattern: /EOFException/i, kind: \"transporter_jvm_error\" },\n];\n\n/**\n * Returns the transient-error kind if the output matches any known\n * retry-worthy pattern, or `null` if the error is non-transient.\n */\nexport function classifyUploadError(output: string): TransientUploadError | null {\n for (const { pattern, kind } of RULES) {\n if (pattern.test(output)) return kind;\n }\n return null;\n}\n\n/**\n * Convenience: `true` if the upload should be retried.\n */\nexport function isTransientUploadError(output: string): boolean {\n return classifyUploadError(output) !== null;\n}\n","import emojiRegex from \"emoji-regex\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport { AppStoreConnectError } from \"../client/request.js\";\nimport type { Build } from \"../types/index.js\";\nimport type {\n PilotUploadOptions,\n UploadBackend,\n UploadResult,\n} from \"./types.js\";\nimport { uploadWithAltool } from \"./upload-altool.js\";\nimport { uploadWithTransporter } from \"./upload-transporter.js\";\n\nexport type { PilotUploadOptions, UploadBackend, UploadResult } from \"./types.js\";\nexport { uploadWithAltool } from \"./upload-altool.js\";\nexport { uploadWithTransporter } from \"./upload-transporter.js\";\nexport {\n classifyUploadError,\n isTransientUploadError,\n} from \"./classify.js\";\nexport type { TransientUploadError } from \"./classify.js\";\nexport { resolveTransporter, verifyJava } from \"./transporter-install.js\";\n\nexport interface PilotDistributeOptions {\n client: AppStoreConnectClient;\n buildId: string;\n groupNames?: string[];\n changelog?: string;\n locale?: string;\n expirePreviousBuilds?: boolean;\n submitForReview?: boolean;\n}\n\n// ── Upload ─────────────────────────────────────────────────────────────────\n\n/**\n * Upload a build to TestFlight.\n *\n * Selects the upload backend based on the host OS:\n * - macOS → altool (ships with Xcode CLI)\n * - Linux → iTMSTransporter (standalone Java tool from Apple)\n *\n * Pass `backend` to force a specific path, e.g. for testing the\n * Linux path on a mac dev machine.\n */\nexport async function uploadToTestFlight(\n options: PilotUploadOptions\n): Promise<UploadResult> {\n const backend = selectBackend(options.backend ?? \"auto\");\n if (backend === \"altool\") {\n return uploadWithAltool(options);\n }\n return uploadWithTransporter(options);\n}\n\nfunction selectBackend(pref: UploadBackend | \"auto\"): UploadBackend {\n if (pref !== \"auto\") return pref;\n return process.platform === \"darwin\" ? \"altool\" : \"transporter\";\n}\n\n// ── Wait for Processing ────────────────────────────────────────────────────\n\nexport async function waitForProcessing(\n client: AppStoreConnectClient,\n params: {\n bundleId: string;\n buildNumber: string;\n appVersion: string;\n timeout?: number;\n pollInterval?: number;\n }\n): Promise<Build> {\n const timeout = params.timeout ?? 1_800_000; // 30 min\n const pollInterval = params.pollInterval ?? 30_000; // 30s\n const deadline = Date.now() + timeout;\n\n // Find app\n const app = await client.apps.findByBundleId(params.bundleId);\n if (!app) throw new Error(`App not found for bundle ID: ${params.bundleId}`);\n\n while (Date.now() < deadline) {\n const builds = await client.builds.list({\n filter: {\n app: app.id,\n version: params.buildNumber,\n \"preReleaseVersion.version\": params.appVersion,\n },\n limit: 1,\n });\n\n if (builds.length > 0) {\n const build = builds[0];\n const state = build.attributes.processingState;\n\n if (state === \"VALID\") return build;\n if (state === \"FAILED\" || state === \"INVALID\") {\n throw new Error(`Build processing ${state}: ${params.buildNumber}`);\n }\n }\n\n await sleep(pollInterval);\n }\n\n throw new Error(\n `Timeout waiting for build ${params.buildNumber} after ${timeout / 1000}s`\n );\n}\n\n// ── Distribute ─────────────────────────────────────────────────────────────\n\nexport async function distributeToGroups(\n options: PilotDistributeOptions\n): Promise<string[]> {\n const groupNames = options.groupNames ?? [];\n if (groupNames.length === 0) return [];\n\n // Get the build's app\n const build = await options.client.builds.get(options.buildId, {\n include: \"app\",\n });\n const appId =\n build.relationships?.app?.data?.id;\n if (!appId) throw new Error(\"Could not determine app for build\");\n\n // Set changelog if provided\n if (options.changelog) {\n await setChangelog({\n client: options.client,\n buildId: options.buildId,\n changelog: options.changelog,\n locale: options.locale,\n });\n }\n\n // Expire previous builds if requested\n if (options.expirePreviousBuilds) {\n const allBuilds = await options.client.builds.list({\n filter: { app: appId, expired: \"false\" },\n limit: 50,\n });\n for (const b of allBuilds) {\n if (b.id !== options.buildId) {\n await options.client.builds.expireBuild(b.id).catch(() => {});\n }\n }\n }\n\n // Find and add to groups\n const allGroups = await options.client.betaGroups.listForApp(appId);\n const matched: string[] = [];\n\n for (const name of groupNames) {\n const group = allGroups.find((g) => g.attributes.name === name);\n if (!group) continue;\n\n try {\n await options.client.betaGroups.addBuilds(group.id, [options.buildId]);\n matched.push(name);\n } catch (err) {\n // 409 = already added, that's fine\n if (err instanceof AppStoreConnectError && err.status === 409) {\n matched.push(name);\n }\n }\n }\n\n // Submit for beta review if requested\n if (options.submitForReview) {\n try {\n await options.client.builds.submitForBetaReview(options.buildId);\n } catch {\n // May already be submitted\n }\n }\n\n return matched;\n}\n\n// ── Changelog ──────────────────────────────────────────────────────────────\n\nexport async function setChangelog(options: {\n client: AppStoreConnectClient;\n buildId: string;\n changelog: string;\n locale?: string;\n}): Promise<void> {\n const locale = options.locale ?? \"en-US\";\n const sanitized = sanitizeChangelog(options.changelog);\n\n const localizations = await options.client.builds.getLocalizations(\n options.buildId\n );\n const existing = localizations.find(\n (l) => l.attributes.locale === locale\n );\n\n if (existing) {\n await options.client.builds.updateLocalization(existing.id, {\n whatsNew: sanitized,\n });\n } else {\n await options.client.builds.createLocalization({\n buildId: options.buildId,\n locale,\n whatsNew: sanitized,\n });\n }\n}\n\n// ── Expire ─────────────────────────────────────────────────────────────────\n\nexport async function expireBuild(\n client: AppStoreConnectClient,\n buildId: string\n): Promise<void> {\n await client.builds.expireBuild(buildId);\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction sanitizeChangelog(text: string): string {\n // Strip RGI-standard emojis using the `emoji-regex` package — same\n // approach as Fastlane's pilot (gem `emoji_regex`), which tracks the\n // Unicode \"Recommended for General Interchange\" spec so new emoji\n // sequences are covered without hand-maintaining ranges.\n let sanitized = text.replace(emojiRegex(), \"\");\n\n // Strip < characters (not allowed by Apple)\n sanitized = sanitized.replace(/</g, \"\");\n\n // Truncate to 4000 bytes\n const encoder = new TextEncoder();\n const encoded = encoder.encode(sanitized);\n if (encoded.length > 4000) {\n const decoder = new TextDecoder();\n sanitized = decoder.decode(encoded.slice(0, 3997)) + \"...\";\n }\n\n return sanitized;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { readFile, readdir, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface LocalizedMetadata {\n locale: string;\n description?: string;\n keywords?: string;\n releaseNotes?: string;\n supportUrl?: string;\n marketingUrl?: string;\n promotionalText?: string;\n name?: string;\n subtitle?: string;\n privacyUrl?: string;\n}\n\n/**\n * Review information submitted to App Store Connect for App Review.\n * Mirrors Fastlane deliver's `review_first_name`, `review_last_name`,\n * etc. (upload_metadata.rb lines 45-51), mapping to ASC's\n * `appStoreReviewDetails` attribute names.\n */\nexport interface ReviewInformation {\n firstName?: string;\n lastName?: string;\n phoneNumber?: string;\n emailAddress?: string;\n demoUser?: string;\n demoPassword?: string;\n notes?: string;\n}\n\nexport interface MetadataSet {\n localizations: LocalizedMetadata[];\n copyright?: string;\n /** Typed review information extracted from `review_information/`. */\n reviewInformation?: ReviewInformation;\n /** Raw review information map, including any unrecognised filenames. */\n reviewInfo?: Record<string, string>;\n}\n\n/**\n * Map from a `metadata/review_information/` filename (without `.txt`) to\n * its `ReviewInformation` field. Supports both the modern ASC-aligned\n * names and Fastlane's legacy `review_*` names.\n */\nconst REVIEW_FILENAME_TO_FIELD: Record<string, keyof ReviewInformation> = {\n // Modern (ASC-aligned) filenames\n first_name: \"firstName\",\n last_name: \"lastName\",\n phone_number: \"phoneNumber\",\n email_address: \"emailAddress\",\n demo_user: \"demoUser\",\n demo_password: \"demoPassword\",\n notes: \"notes\",\n // Legacy Fastlane filenames\n review_first_name: \"firstName\",\n review_last_name: \"lastName\",\n review_phone_number: \"phoneNumber\",\n review_email: \"emailAddress\",\n review_demo_user: \"demoUser\",\n review_demo_password: \"demoPassword\",\n review_notes: \"notes\",\n};\n\nconst LOCALE_FILES: Record<string, string> = {\n \"description.txt\": \"description\",\n \"keywords.txt\": \"keywords\",\n \"release_notes.txt\": \"releaseNotes\",\n \"support_url.txt\": \"supportUrl\",\n \"marketing_url.txt\": \"marketingUrl\",\n \"promotional_text.txt\": \"promotionalText\",\n \"name.txt\": \"name\",\n \"subtitle.txt\": \"subtitle\",\n \"privacy_url.txt\": \"privacyUrl\",\n};\n\nexport async function loadMetadata(metadataPath: string): Promise<MetadataSet> {\n const localizations: LocalizedMetadata[] = [];\n let copyright: string | undefined;\n let reviewInfo: Record<string, string> | undefined;\n let reviewInformation: ReviewInformation | undefined;\n\n // Read copyright\n try {\n copyright = (await readFile(join(metadataPath, \"copyright.txt\"), \"utf-8\")).trim();\n } catch {\n // Optional\n }\n\n // Read review info\n const reviewDir = join(metadataPath, \"review_information\");\n try {\n const reviewStat = await stat(reviewDir);\n if (reviewStat.isDirectory()) {\n reviewInfo = {};\n reviewInformation = {};\n const files = await readdir(reviewDir);\n for (const file of files) {\n if (!file.endsWith(\".txt\")) continue;\n const key = file.replace(\".txt\", \"\");\n const content = (await readFile(join(reviewDir, file), \"utf-8\")).trim();\n reviewInfo[key] = content;\n const field = REVIEW_FILENAME_TO_FIELD[key];\n if (field && content) reviewInformation[field] = content;\n }\n }\n } catch {\n // Optional\n }\n\n // Read locale directories\n const entries = await readdir(metadataPath, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (entry.name === \"review_information\" || entry.name === \"trade_representative_contact_information\") continue;\n\n const locale = entry.name;\n const localeDir = join(metadataPath, locale);\n const localization: LocalizedMetadata = { locale };\n\n for (const [filename, key] of Object.entries(LOCALE_FILES)) {\n try {\n const content = (await readFile(join(localeDir, filename), \"utf-8\")).trim();\n if (content) {\n (localization as any)[key] = content;\n }\n } catch {\n // File doesn't exist — optional\n }\n }\n\n localizations.push(localization);\n }\n\n return { localizations, copyright, reviewInfo, reviewInformation };\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, readdir, stat } from \"node:fs/promises\";\nimport { basename, extname, join, relative } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type {\n AppAssetLibraryRefDatumAttributes,\n AppAssetLibraryImageSpec,\n} from \"../resources/app-asset-libraries.js\";\nimport type { PlacementTarget } from \"../resources/app-asset-library-placements.js\";\nimport type { UploadOperation } from \"../resources/app-screenshots.js\";\nimport type {\n AppAssetLibraryAssetCategory,\n AppAssetLibraryAssetState,\n AppAssetLibraryFeature,\n AppAssetLibraryPlacementType,\n} from \"../types/enums.js\";\n\n/**\n * Folder name under `<assetsPath>/<locale>/` → what gets placed there.\n *\n * assets/en-US/screenshots/01-home.png APP_SCREENSHOT (group from image size)\n * assets/en-US/screenshots/IPHONE_DUO/01.png APP_SCREENSHOT in an explicit group\n * assets/en-US/previews/IPHONE_…_PROFILE/a.mp4 APP_PREVIEW (videos need the group folder\n * unless the type has a single group)\n * assets/en-US/header/hero.png PRODUCT_PAGE_HEADER_ASSET\n * assets/en-US/search_results/card.png APP_STORE_SEARCH_RESULTS_ASSET\n */\nexport const ASSET_FOLDERS: Record<string, AppAssetLibraryPlacementType> = {\n screenshots: \"APP_SCREENSHOT\",\n imessage_screenshots: \"IMESSAGE_APP_SCREENSHOT\",\n previews: \"APP_PREVIEW\",\n header: \"PRODUCT_PAGE_HEADER_ASSET\",\n search_results: \"APP_STORE_SEARCH_RESULTS_ASSET\",\n event_card: \"EVENT_CARD_ASSET\",\n event_details: \"EVENT_DETAILS_PAGE_ASSET\",\n};\n\nconst IMAGE_EXTENSIONS = [\".png\", \".jpg\", \".jpeg\"];\nconst VIDEO_EXTENSIONS = [\".mp4\", \".mov\", \".m4v\"];\nconst READY_STATES: AppAssetLibraryAssetState[] = [\n \"COMPLETE\",\n \"PREPARE_FOR_SUBMISSION\",\n \"READY_FOR_REVIEW\",\n \"WAITING_FOR_REVIEW\",\n \"IN_REVIEW\",\n \"ACCEPTED\",\n \"APPROVED\",\n];\n\nexport function categoryFor(placementType: AppAssetLibraryPlacementType): AppAssetLibraryAssetCategory {\n return placementType === \"APP_SCREENSHOT\" ||\n placementType === \"IMESSAGE_APP_SCREENSHOT\" ||\n placementType === \"APP_PREVIEW\"\n ? \"APP_SCREENSHOTS_AND_PREVIEWS\"\n : \"CREATIVE_ASSETS\";\n}\n\n// ── Image dimensions (PNG / JPEG headers, no dependency) ───────────────────\n\nexport function readImageSize(data: Buffer): { width: number; height: number; alpha?: boolean } | null {\n // PNG: signature, then IHDR width/height at 16/20, colour type at 25\n if (data.length >= 26 && data.readUInt32BE(0) === 0x89504e47) {\n const colorType = data[25];\n return {\n width: data.readUInt32BE(16),\n height: data.readUInt32BE(20),\n alpha: colorType === 4 || colorType === 6,\n };\n }\n // JPEG: walk markers to the first SOFn\n if (data.length >= 4 && data[0] === 0xff && data[1] === 0xd8) {\n let offset = 2;\n while (offset + 9 < data.length) {\n if (data[offset] !== 0xff) return null;\n const marker = data[offset + 1];\n const length = data.readUInt16BE(offset + 2);\n const isSof = marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc;\n if (isSof) {\n return { height: data.readUInt16BE(offset + 5), width: data.readUInt16BE(offset + 7), alpha: false };\n }\n offset += 2 + length;\n }\n }\n return null;\n}\n\n// ── Spec / placement-group resolution ──────────────────────────────────────\n\nfunction fits(spec: AppAssetLibraryImageSpec, width: number, height: number): boolean {\n const d = spec.dimensions;\n return width >= d.minWidth && width <= d.maxWidth && height >= d.minHeight && height <= d.maxHeight;\n}\n\n/** Placement groups the feature allows for a placement type (all, if the feature lists none). */\nfunction groupsForFeature(\n refData: AppAssetLibraryRefDatumAttributes,\n feature: AppAssetLibraryFeature,\n placementType: AppAssetLibraryPlacementType\n): string[] {\n const mappings = refData.placementTypes?.find((p) => p.placementTypeId === placementType)?.specMappings ?? [];\n const all = mappings.map((m) => m.placementGroupId);\n const policy = refData.features\n ?.find((f) => f.featureId === feature)\n ?.placementPolicies?.find((p) => p.placementType === placementType);\n const limited = policy?.groupLimits?.flatMap((l) => l.groupIds);\n return limited?.length ? all.filter((g) => limited.includes(g)) : all;\n}\n\nexport function maxCountFor(\n refData: AppAssetLibraryRefDatumAttributes,\n feature: AppAssetLibraryFeature,\n placementType: AppAssetLibraryPlacementType,\n placementGroup: string\n): number | undefined {\n return refData.features\n ?.find((f) => f.featureId === feature)\n ?.placementPolicies?.find((p) => p.placementType === placementType)\n ?.groupLimits?.find((l) => l.groupIds.includes(placementGroup))?.maxCount;\n}\n\n/**\n * Which placement groups an image of this size can go into, read from\n * Apple's reference data (never hard-coded — new devices appear there first).\n */\nexport function resolveImageGroups(\n refData: AppAssetLibraryRefDatumAttributes,\n feature: AppAssetLibraryFeature,\n placementType: AppAssetLibraryPlacementType,\n size: { width: number; height: number }\n): { groups: string[]; spec?: AppAssetLibraryImageSpec } {\n const specs = (refData.imageSpecs ?? []).filter(\n (s) => s.compatiblePlacementTypes.includes(placementType) && fits(s, size.width, size.height)\n );\n const specIds = new Set(specs.map((s) => s.specId));\n const allowed = new Set(groupsForFeature(refData, feature, placementType));\n const mappings = refData.placementTypes?.find((p) => p.placementTypeId === placementType)?.specMappings ?? [];\n const groups = mappings\n .filter((m) => allowed.has(m.placementGroupId) && m.specs.some((id) => specIds.has(id)))\n .map((m) => m.placementGroupId);\n return { groups: [...new Set(groups)], spec: specs[0] };\n}\n\n// ── Upload ─────────────────────────────────────────────────────────────────\n\nexport async function runUploadOperations(ops: UploadOperation[], data: Buffer): Promise<void> {\n for (const op of ops) {\n const headers: Record<string, string> = {};\n for (const h of op.requestHeaders) headers[h.name] = h.value;\n const res = await fetch(op.url, {\n method: op.method,\n headers,\n body: data.subarray(op.offset, op.offset + op.length),\n });\n if (!res.ok) {\n throw new Error(`Upload operation failed: ${op.method} ${new URL(op.url).host} → HTTP ${res.status}`);\n }\n }\n}\n\nexport interface UploadedAsset {\n kind: \"image\" | \"video\";\n id: string;\n state: AppAssetLibraryAssetState;\n reused: boolean;\n}\n\n/**\n * Upload one file into the app's asset library and wait until it can be\n * placed. A file already in the library (same content hash in its reference\n * name) is reused instead of uploaded again.\n */\nexport async function uploadLibraryAsset(options: {\n client: AppStoreConnectClient;\n libraryId: string;\n filePath: string;\n category: AppAssetLibraryAssetCategory;\n referenceName?: string;\n previewFrameTimeCode?: string;\n pollIntervalMs?: number;\n timeoutMs?: number;\n log?: (line: string) => void;\n}): Promise<UploadedAsset> {\n const { client, libraryId, filePath, category } = options;\n const data = await readFile(filePath);\n const fileName = basename(filePath);\n const kind = VIDEO_EXTENSIONS.includes(extname(filePath).toLowerCase()) ? \"video\" : \"image\";\n const hash = createHash(\"sha256\").update(data).digest(\"hex\").slice(0, 12);\n const referenceName = `${options.referenceName ?? fileName} #${hash}`;\n const media = kind === \"image\" ? client.appAssetLibraryImages : client.appAssetLibraryVideos;\n\n const filter = { filter: { referenceName } };\n const existing: Array<{ id: string; attributes: { category?: string; state?: AppAssetLibraryAssetState } }> =\n kind === \"image\"\n ? await client.appAssetLibraries.listImages(libraryId, filter)\n : await client.appAssetLibraries.listVideos(libraryId, filter);\n const reusable = existing.find(\n (a) => a.attributes.category === category && a.attributes.state && READY_STATES.includes(a.attributes.state)\n );\n if (reusable) {\n return { kind, id: reusable.id, state: reusable.attributes.state!, reused: true };\n }\n\n const reserved =\n kind === \"image\"\n ? await client.appAssetLibraryImages.create({ libraryId, fileName, fileSize: data.length, category, referenceName })\n : await client.appAssetLibraryVideos.create({\n libraryId,\n fileName,\n fileSize: data.length,\n category,\n referenceName,\n previewFrameTimeCode: options.previewFrameTimeCode,\n });\n\n await runUploadOperations(reserved.attributes.uploadOperations ?? [], data);\n await media.update(reserved.id, { uploaded: true });\n options.log?.(`uploaded ${fileName} (${kind}, ${data.length} bytes)`);\n\n const state = await waitForAssetReady(\n () => media.get(reserved.id),\n options.pollIntervalMs ?? 3000,\n options.timeoutMs ?? (kind === \"video\" ? 30 * 60_000 : 5 * 60_000)\n );\n return { kind, id: reserved.id, state, reused: false };\n}\n\nexport async function waitForAssetReady(\n get: () => Promise<{ attributes: { state?: AppAssetLibraryAssetState; stateDetails?: Array<{ code?: string; message?: string }> | null } }>,\n intervalMs: number,\n timeoutMs: number\n): Promise<AppAssetLibraryAssetState> {\n const deadline = Date.now() + timeoutMs;\n for (;;) {\n const asset = await get();\n const state = asset.attributes.state;\n if (state === \"FAILED\") {\n const why = (asset.attributes.stateDetails ?? []).map((d) => d.message ?? d.code).filter(Boolean).join(\"; \");\n throw new Error(`Asset processing failed${why ? `: ${why}` : \"\"}`);\n }\n if (state && READY_STATES.includes(state)) return state;\n if (Date.now() > deadline) throw new Error(`Asset still ${state ?? \"unknown\"} after ${timeoutMs / 1000}s`);\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n}\n\n// ── Placing a folder of assets on App Store version localizations ──────────\n\ninterface PlannedFile {\n filePath: string;\n placementType: AppAssetLibraryPlacementType;\n groups: string[];\n}\n\nasync function listFiles(dir: string): Promise<string[]> {\n return (await readdir(dir)).filter((f) => !f.startsWith(\".\")).sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));\n}\n\nasync function isDir(path: string): Promise<boolean> {\n return (await stat(path)).isDirectory();\n}\n\n/** Read `<locale>/<folder>/[<GROUP>/]file` and decide where each file goes. */\nasync function planLocale(\n localeDir: string,\n refData: AppAssetLibraryRefDatumAttributes,\n feature: AppAssetLibraryFeature,\n folders: Record<string, AppAssetLibraryPlacementType>,\n warn: (line: string) => void\n): Promise<PlannedFile[]> {\n const planned: PlannedFile[] = [];\n for (const [folder, placementType] of Object.entries(folders)) {\n const typeDir = join(localeDir, folder);\n if (!existsSync(typeDir)) continue;\n const known = new Set(groupsForFeature(refData, feature, placementType));\n\n const entries: Array<{ filePath: string; group?: string }> = [];\n for (const entry of await listFiles(typeDir)) {\n const full = join(typeDir, entry);\n if (await isDir(full)) {\n if (!known.has(entry)) {\n warn(`${relative(localeDir, full)}: \"${entry}\" is not a ${placementType} placement group for ${feature} — skipped`);\n continue;\n }\n for (const f of await listFiles(full)) entries.push({ filePath: join(full, f), group: entry });\n } else {\n entries.push({ filePath: full });\n }\n }\n\n for (const { filePath, group } of entries) {\n const ext = extname(filePath).toLowerCase();\n const isVideo = VIDEO_EXTENSIONS.includes(ext);\n if (!isVideo && !IMAGE_EXTENSIONS.includes(ext)) continue;\n const needsVideo = placementType === \"APP_PREVIEW\";\n const needsImage = placementType === \"APP_SCREENSHOT\" || placementType === \"IMESSAGE_APP_SCREENSHOT\";\n if ((needsVideo && !isVideo) || (needsImage && isVideo)) {\n warn(`${relative(localeDir, filePath)}: ${isVideo ? \"video\" : \"image\"} cannot be a ${placementType} — skipped`);\n continue;\n }\n if (group) {\n planned.push({ filePath, placementType, groups: [group] });\n continue;\n }\n if (isVideo) {\n if (known.size === 1) planned.push({ filePath, placementType, groups: [...known] });\n else warn(`${relative(localeDir, filePath)}: put videos in a placement-group folder (one of ${[...known].join(\", \")}) — skipped`);\n continue;\n }\n const size = readImageSize(await readFile(filePath));\n if (!size) {\n warn(`${relative(localeDir, filePath)}: could not read image size — skipped`);\n continue;\n }\n const { groups, spec } = resolveImageGroups(refData, feature, placementType, size);\n if (!groups.length) {\n warn(`${relative(localeDir, filePath)}: ${size.width}×${size.height} matches no ${placementType} spec — skipped`);\n continue;\n }\n if (size.alpha && spec && spec.alphaAllowed === false) {\n warn(`${relative(localeDir, filePath)}: has an alpha channel, which Apple rejects for this spec`);\n }\n // A size can fit several groups (2732×2048 is both IPAD_13 and IPAD_129).\n // Apple lists the largest device first; place there once. A group folder\n // places it anywhere else on purpose.\n planned.push({ filePath, placementType, groups: groups.slice(0, 1) });\n }\n }\n return planned;\n}\n\nexport interface PlaceAssetsResult {\n uploaded: number;\n reused: number;\n placed: number;\n removed: number;\n warnings: string[];\n}\n\n/**\n * Upload a folder of screenshots, previews and creative assets (product page\n * header, search results) into the app's asset library and place them on each\n * App Store version localization. See ASSET_FOLDERS for the layout.\n *\n * With `overwrite`, existing placements of each (type, group) we upload into\n * are removed first, so the folder becomes the source of truth. Without it,\n * new placements are added and files already placed are left alone.\n */\nexport async function uploadAssetLibrary(options: {\n client: AppStoreConnectClient;\n appId: string;\n versionId: string;\n assetsPath: string;\n overwrite?: boolean;\n /** Override the folder → placement type map (e.g. screenshots-only from a legacy screenshots path). */\n folders?: Record<string, AppAssetLibraryPlacementType>;\n /** Treat files directly under `<locale>/` as this placement type (legacy screenshots layout). */\n rootPlacementType?: AppAssetLibraryPlacementType;\n log?: (line: string) => void;\n}): Promise<PlaceAssetsResult> {\n const { client } = options;\n const log = options.log ?? (() => {});\n const feature: AppAssetLibraryFeature = \"APP_STORE_VERSIONS\";\n const result: PlaceAssetsResult = { uploaded: 0, reused: 0, placed: 0, removed: 0, warnings: [] };\n const warn = (line: string) => {\n result.warnings.push(line);\n log(`warning: ${line}`);\n };\n\n const [library, refData, localizations] = await Promise.all([\n client.appAssetLibraries.getForApp(options.appId),\n client.appAssetLibraries.refData({ features: [feature] }),\n client.appStoreVersions.getLocalizations(options.versionId),\n ]);\n const folders = { ...(options.folders ?? ASSET_FOLDERS) };\n if (options.rootPlacementType) folders[\".\"] = options.rootPlacementType;\n\n // Same file in several locales is uploaded once.\n const uploads = new Map<string, Promise<UploadedAsset>>();\n const uploadOnce = (filePath: string, placementType: AppAssetLibraryPlacementType) => {\n const key = `${filePath}|${categoryFor(placementType)}`;\n if (!uploads.has(key)) {\n uploads.set(\n key,\n uploadLibraryAsset({\n client,\n libraryId: library.id,\n filePath,\n category: categoryFor(placementType),\n referenceName: relative(options.assetsPath, filePath),\n log,\n }).then((a) => {\n if (a.reused) result.reused++;\n else result.uploaded++;\n return a;\n })\n );\n }\n return uploads.get(key)!;\n };\n\n for (const loc of localizations) {\n const localeDir = join(options.assetsPath, loc.attributes.locale);\n if (!existsSync(localeDir)) continue;\n const target: PlacementTarget = { kind: \"appStoreVersionLocalization\", id: loc.id };\n const plan = await planLocale(localeDir, refData, feature, folders, warn);\n\n // Group the plan by (type, group) so limits, overwrite and ordering apply per slot.\n const slots = new Map<string, { placementType: AppAssetLibraryPlacementType; group: string; files: string[] }>();\n for (const p of plan) {\n for (const group of p.groups) {\n const key = `${p.placementType}|${group}`;\n if (!slots.has(key)) slots.set(key, { placementType: p.placementType, group, files: [] });\n slots.get(key)!.files.push(p.filePath);\n }\n }\n\n for (const slot of slots.values()) {\n const where = `${loc.attributes.locale} ${slot.placementType} ${slot.group}`;\n const max = maxCountFor(refData, feature, slot.placementType, slot.group);\n if (max !== undefined && slot.files.length > max) {\n warn(`${where}: ${slot.files.length} files but Apple allows ${max} — keeping the first ${max}`);\n slot.files = slot.files.slice(0, max);\n }\n\n const existing = await client.appAssetLibraryPlacements.listForTarget(target, {\n placementType: slot.placementType,\n placementGroup: slot.group,\n include: \"image,video\",\n });\n if (options.overwrite) {\n for (const p of existing) {\n await client.appAssetLibraryPlacements.delete(p.id);\n result.removed++;\n }\n }\n const kept = options.overwrite ? [] : existing;\n const keptAssetIds = new Set(kept.map((p) => placementAssetId(p)).filter(Boolean));\n\n const ours: string[] = [];\n for (const filePath of slot.files) {\n const asset = await uploadOnce(filePath, slot.placementType);\n if (keptAssetIds.has(asset.id)) continue;\n const placement = await client.appAssetLibraryPlacements.create({\n placementType: slot.placementType,\n placementGroup: slot.group,\n ...(asset.kind === \"image\" ? { imageId: asset.id } : { videoId: asset.id }),\n target,\n });\n ours.push(placement.id);\n result.placed++;\n }\n log(`${where}: placed ${ours.length}${kept.length ? `, kept ${kept.length}` : \"\"}`);\n\n const orderable = slot.placementType === \"APP_SCREENSHOT\" || slot.placementType === \"APP_PREVIEW\" || slot.placementType === \"IMESSAGE_APP_SCREENSHOT\";\n if (orderable && ours.length + kept.length > 1) {\n await client.appAssetLibraryPlacements.order({\n placementGroup: slot.group,\n placementIds: [...ours, ...kept.map((p) => p.id)],\n target,\n });\n }\n }\n }\n return result;\n}\n\nfunction placementAssetId(p: { relationships?: Record<string, { data: unknown }> }): string | undefined {\n for (const rel of [\"image\", \"video\"]) {\n const data = p.relationships?.[rel]?.data as { id?: string } | null | undefined;\n if (data?.id) return data.id;\n }\n return undefined;\n}\n","import { spawn } from \"node:child_process\";\nimport { writeFile, unlink, mkdtemp } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { requireMacOS } from \"./platform.js\";\n\nexport async function uploadWithAltool(options: {\n filePath: string;\n apiKeyId: string;\n apiIssuerId: string;\n apiPrivateKey?: string;\n apiKeyPath?: string;\n platform?: string;\n onOutput?: (chunk: string) => void;\n}): Promise<{ success: boolean; output: string }> {\n requireMacOS(\"altool upload\");\n\n // Write temp .p8 if private key content provided\n let keyDir: string | undefined;\n if (options.apiPrivateKey && !options.apiKeyPath) {\n keyDir = await mkdtemp(join(tmpdir(), \"fastnode-altool-\"));\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await writeFile(keyPath, options.apiPrivateKey);\n }\n\n const args = [\n \"altool\",\n \"--upload-app\",\n \"-f\", options.filePath,\n \"-t\", options.platform ?? \"ios\",\n \"--apiKey\", options.apiKeyId,\n \"--apiIssuer\", options.apiIssuerId,\n ];\n\n const env = { ...process.env };\n if (keyDir) {\n env.API_PRIVATE_KEYS_DIR = keyDir;\n }\n\n return new Promise<{ success: boolean; output: string }>((resolve) => {\n const child = spawn(\"xcrun\", args, {\n env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n\n child.stdout.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n });\n\n child.stderr.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n options.onOutput?.(chunk);\n });\n\n child.on(\"close\", async (code) => {\n if (keyDir) {\n const keyPath = join(keyDir, `AuthKey_${options.apiKeyId}.p8`);\n await unlink(keyPath).catch(() => {});\n }\n resolve({ success: code === 0, output });\n });\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile, readdir, stat } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { Platform, ReleaseType } from \"../types/index.js\";\nimport { loadMetadata } from \"./metadata.js\";\nimport { runUploadOperations, uploadAssetLibrary } from \"./assets.js\";\n\nexport { loadMetadata } from \"./metadata.js\";\nexport type { LocalizedMetadata, MetadataSet } from \"./metadata.js\";\nexport {\n ASSET_FOLDERS,\n uploadAssetLibrary,\n uploadLibraryAsset,\n resolveImageGroups,\n readImageSize,\n categoryFor,\n} from \"./assets.js\";\nexport type { PlaceAssetsResult, UploadedAsset } from \"./assets.js\";\n\nexport interface DeliverOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n appVersion?: string;\n platform?: Platform;\n ipaPath?: string;\n pkgPath?: string;\n metadataPath?: string;\n screenshotsPath?: string;\n submitForReview?: boolean;\n automaticRelease?: boolean;\n releaseType?: ReleaseType;\n skipBinaryUpload?: boolean;\n skipMetadata?: boolean;\n skipScreenshots?: boolean;\n /**\n * App Asset Library folder: `<locale>/{screenshots,previews,header,search_results}/…`.\n * Places screenshots, previews and creative assets (product page header,\n * search results) on the version. See ASSET_FOLDERS.\n */\n assetsPath?: string;\n /** Route `screenshotsPath` through the asset library instead of the deprecated screenshot sets. */\n useAssetLibrary?: boolean;\n /** Replace existing placements in each slot we upload into (fastlane's overwrite_screenshots). */\n overwriteAssets?: boolean;\n skipAssets?: boolean;\n force?: boolean;\n apiKeyId?: string;\n apiIssuerId?: string;\n apiPrivateKey?: string;\n copyright?: string;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface DeliverResult {\n appId: string;\n versionId: string;\n submitted: boolean;\n}\n\nexport async function uploadToAppStore(options: DeliverOptions): Promise<DeliverResult> {\n const platform = options.platform ?? \"IOS\";\n\n // Find app\n const app = await options.client.apps.findByBundleId(options.bundleIdentifier);\n if (!app) throw new Error(`App not found: ${options.bundleIdentifier}`);\n\n // Find or create version\n const versions = await options.client.appStoreVersions.listForApp(app.id, {\n filter: { platform },\n });\n\n let version = versions.find(\n (v) =>\n v.attributes.appStoreState === \"PREPARE_FOR_SUBMISSION\" ||\n v.attributes.appStoreState === \"DEVELOPER_REJECTED\"\n );\n\n if (!version && options.appVersion) {\n version = await options.client.appStoreVersions.create({\n appId: app.id,\n versionString: options.appVersion,\n platform,\n releaseType: options.releaseType,\n });\n }\n\n if (!version) {\n throw new Error(\"No editable app store version found. Pass appVersion to create one.\");\n }\n\n // Upload metadata\n if (!options.skipMetadata && options.metadataPath && existsSync(options.metadataPath)) {\n await uploadMetadata({\n client: options.client,\n appId: app.id,\n versionId: version.id,\n metadataPath: options.metadataPath,\n });\n }\n\n // Set copyright\n if (options.copyright) {\n await options.client.appStoreVersions.update(version.id, {\n copyright: options.copyright,\n });\n }\n\n const log = (line: string) => options.onOutput?.(`${line}\\n`);\n\n // Upload screenshots\n if (!options.skipScreenshots && options.screenshotsPath && existsSync(options.screenshotsPath)) {\n if (options.useAssetLibrary) {\n await uploadAssetLibrary({\n client: options.client,\n appId: app.id,\n versionId: version.id,\n assetsPath: options.screenshotsPath,\n folders: {},\n rootPlacementType: \"APP_SCREENSHOT\",\n overwrite: options.overwriteAssets,\n log,\n });\n } else {\n await uploadScreenshots({\n client: options.client,\n versionId: version.id,\n screenshotsPath: options.screenshotsPath,\n });\n }\n }\n\n // Upload asset library media: screenshots, previews, header, search results\n if (!options.skipAssets && options.assetsPath && existsSync(options.assetsPath)) {\n await uploadAssetLibrary({\n client: options.client,\n appId: app.id,\n versionId: version.id,\n assetsPath: options.assetsPath,\n overwrite: options.overwriteAssets,\n log,\n });\n }\n\n // Upload binary\n if (!options.skipBinaryUpload) {\n const binaryPath = options.ipaPath ?? options.pkgPath;\n if (binaryPath && options.apiKeyId && options.apiIssuerId) {\n const { uploadWithAltool } = await import(\"../xcode/upload.js\");\n await uploadWithAltool({\n filePath: binaryPath,\n apiKeyId: options.apiKeyId,\n apiIssuerId: options.apiIssuerId,\n apiPrivateKey: options.apiPrivateKey,\n onOutput: options.onOutput,\n });\n }\n }\n\n // Submit for review\n let submitted = false;\n if (options.submitForReview) {\n await submitForReview({\n client: options.client,\n appId: app.id,\n versionId: version.id,\n });\n submitted = true;\n }\n\n return { appId: app.id, versionId: version.id, submitted };\n}\n\nexport async function submitForReview(options: {\n client: AppStoreConnectClient;\n appId: string;\n versionId: string;\n}): Promise<void> {\n await options.client.reviewSubmissions.submitVersion(options.versionId);\n}\n\nexport async function uploadMetadata(options: {\n client: AppStoreConnectClient;\n appId: string;\n versionId: string;\n metadataPath: string;\n}): Promise<void> {\n const metadata = await loadMetadata(options.metadataPath);\n\n // Get existing localizations\n const existingLocs = await options.client.appStoreVersions.getLocalizations(options.versionId);\n\n for (const loc of metadata.localizations) {\n const existing = existingLocs.find((e) => e.attributes.locale === loc.locale);\n const attrs: Record<string, string | undefined> = {};\n if (loc.description) attrs.description = loc.description;\n if (loc.keywords) attrs.keywords = loc.keywords;\n if (loc.releaseNotes) attrs.whatsNew = loc.releaseNotes;\n if (loc.supportUrl) attrs.supportUrl = loc.supportUrl;\n if (loc.marketingUrl) attrs.marketingUrl = loc.marketingUrl;\n if (loc.promotionalText) attrs.promotionalText = loc.promotionalText;\n\n if (existing) {\n await options.client.appStoreVersions.updateLocalization(existing.id, attrs);\n } else {\n await options.client.appStoreVersions.createLocalization({\n versionId: options.versionId,\n locale: loc.locale,\n ...attrs,\n });\n }\n }\n\n // Update copyright\n if (metadata.copyright) {\n await options.client.appStoreVersions.update(options.versionId, {\n copyright: metadata.copyright,\n });\n }\n}\n\n/**\n * Legacy screenshot-set upload. Apple deprecated screenshot sets in ASC API\n * 4.5.1 — prefer `uploadAssetLibrary` (or `useAssetLibrary: true`).\n */\nexport async function uploadScreenshots(options: {\n client: AppStoreConnectClient;\n versionId: string;\n screenshotsPath: string;\n}): Promise<void> {\n const localizations = await options.client.appStoreVersions.getLocalizations(options.versionId);\n\n for (const loc of localizations) {\n const localeDir = join(options.screenshotsPath, loc.attributes.locale);\n if (!existsSync(localeDir)) continue;\n\n const sets = await options.client.appScreenshots.listSetsForLocalization(loc.id);\n const files = (await readdir(localeDir)).filter((f) =>\n [\".png\", \".jpg\", \".jpeg\"].includes(extname(f).toLowerCase())\n );\n\n for (const file of files) {\n const filePath = join(localeDir, file);\n const fileData = await readFile(filePath);\n const checksum = createHash(\"md5\").update(fileData).digest(\"hex\");\n\n // Determine display type from filename convention\n const displayType = detectDisplayType(file);\n if (!displayType) continue;\n\n // Find or create screenshot set\n let set = sets.find((s) => s.attributes.screenshotDisplayType === displayType);\n if (!set) {\n set = await options.client.appScreenshots.createSet({\n localizationId: loc.id,\n screenshotDisplayType: displayType,\n });\n }\n\n // Reserve, upload, commit\n const reserved = await options.client.appScreenshots.reserveScreenshot({\n setId: set.id,\n fileName: file,\n fileSize: fileData.length,\n });\n\n await runUploadOperations(reserved.attributes.uploadOperations ?? [], fileData);\n\n await options.client.appScreenshots.commitScreenshot(reserved.id, {\n sourceFileChecksum: checksum,\n uploaded: true,\n });\n }\n }\n}\n\nfunction detectDisplayType(filename: string): string | null {\n const lower = filename.toLowerCase();\n if (lower.includes(\"6.7\") || lower.includes(\"iphone_67\")) return \"APP_IPHONE_67\";\n if (lower.includes(\"6.5\") || lower.includes(\"iphone_65\")) return \"APP_IPHONE_65\";\n if (lower.includes(\"5.5\") || lower.includes(\"iphone_55\")) return \"APP_IPHONE_55\";\n if (lower.includes(\"ipad_pro_3gen\") || lower.includes(\"12.9\")) return \"APP_IPAD_PRO_3GEN_129\";\n if (lower.includes(\"ipad_pro\") || lower.includes(\"ipad\")) return \"APP_IPAD_PRO_129\";\n return null;\n}\n","import type { AppStoreConnectClient } from \"../client/index.js\";\nimport type { BundleId, App, BundleIdPlatform, CapabilityType } from \"../types/index.js\";\nimport type { CapabilitySettingInput } from \"../types/capability.js\";\nimport type { PortalClient } from \"../client/portal.js\";\n\nexport interface ProduceOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n appName: string;\n platform?: BundleIdPlatform;\n sku?: string;\n primaryLocale?: string;\n companyName?: string;\n enableServices?: CapabilityType[];\n appGroups?: Array<{ name: string; identifier: string }>;\n portalClient?: PortalClient;\n}\n\n/**\n * Map from Fastlane's `produce` service name → App Store Connect\n * `capabilityType`. Ported 1:1 from `produce/lib/produce/service.rb`'s\n * `valid_services_for` list and `update` method, covering every service\n * that Fastlane supports.\n */\nexport const SERVICE_NAME_TO_CAPABILITY: Record<string, CapabilityType> = {\n access_wifi: \"ACCESS_WIFI_INFORMATION\",\n app_attest: \"APP_ATTEST\",\n // Fastlane uses singular `app_group` — see service.rb line 59 & 105.\n app_group: \"APP_GROUPS\",\n apple_pay: \"APPLE_PAY\",\n associated_domains: \"ASSOCIATED_DOMAINS\",\n auto_fill_credential: \"AUTOFILL_CREDENTIAL_PROVIDER\",\n car_play_audio_app: \"CARPLAY_PLAYABLE_CONTENT\",\n car_play_messaging_app: \"CARPLAY_MESSAGING\",\n car_play_navigation_app: \"CARPLAY_NAVIGATION\",\n car_play_voip_calling_app: \"CARPLAY_VOIP\",\n class_kit: \"CLASSKIT\",\n declared_age_range: \"DECLARED_AGE_RANGE\",\n icloud: \"ICLOUD\",\n critical_alerts: \"CRITICAL_ALERTS\",\n custom_network_protocol: \"NETWORK_CUSTOM_PROTOCOL\",\n data_protection: \"DATA_PROTECTION\",\n extended_virtual_address_space: \"EXTENDED_VIRTUAL_ADDRESSING\",\n file_provider_testing_mode: \"FILEPROVIDER_TESTINGMODE\",\n family_controls: \"FAMILY_CONTROLS\",\n fonts: \"FONT_INSTALLATION\",\n game_center: \"GAME_CENTER\",\n health_kit: \"HEALTHKIT\",\n hls_interstitial_preview: \"HLS_INTERSTITIAL_PREVIEW\",\n home_kit: \"HOMEKIT\",\n hotspot: \"HOT_SPOT\",\n hotspot_helper: \"HOTSPOT_HELPER_MANAGED\",\n in_app_purchase: \"IN_APP_PURCHASE\",\n inter_app_audio: \"INTER_APP_AUDIO\",\n low_latency_hls: \"COREMEDIA_HLS_LOW_LATENCY\",\n managed_associated_domains: \"MDM_MANAGED_ASSOCIATED_DOMAINS\",\n maps: \"MAPS\",\n multipath: \"MULTIPATH\",\n network_extension: \"NETWORK_EXTENSIONS\",\n nfc_tag_reading: \"NFC_TAG_READING\",\n personal_vpn: \"PERSONAL_VPN\",\n push_notification: \"PUSH_NOTIFICATIONS\",\n sign_in_with_apple: \"APPLE_ID_AUTH\",\n siri_kit: \"SIRIKIT\",\n system_extension: \"SYSTEM_EXTENSION_INSTALL\",\n user_management: \"USER_MANAGEMENT\",\n wallet: \"WALLET\",\n wireless_accessory: \"WIRELESS_ACCESSORY_CONFIGURATION\",\n driver_kit: \"DRIVERKIT\",\n driver_kit_endpoint_security: \"DRIVERKIT_ENDPOINT_SECURITY\",\n driver_kit_family_hid_device: \"DRIVERKIT_HID_DEVICE\",\n driver_kit_family_networking: \"DRIVERKIT_NETWORKING\",\n driver_kit_family_serial: \"DRIVERKIT_SERIAL\",\n driver_kit_hid_event_service: \"DRIVERKIT_HID_EVENT_SERVICE\",\n driver_kit_transport_hid: \"DRIVERKIT_HID\",\n multitasking_camera_access: \"IPAD_CAMERA_MULTITASKING\",\n sf_universal_link_api: \"SFUNIVERSALLINK_API\",\n vp9_decoder: \"VP9_DECODER\",\n music_kit: \"MUSIC_KIT\",\n shazam_kit: \"SHAZAM_KIT\",\n communication_notifications: \"USERNOTIFICATIONS_COMMUNICATION\",\n group_activities: \"GROUP_ACTIVITIES\",\n health_kit_estimate_recalibration: \"HEALTHKIT_RECALIBRATE_ESTIMATES\",\n time_sensitive_notifications: \"USERNOTIFICATIONS_TIMESENSITIVE\",\n};\n\n/**\n * Build the `settings` payload for a capability whose service value is\n * more than a plain boolean. Mirrors Fastlane's\n * `Produce::Service#build_settings_for` applied per-service.\n *\n * Returns `undefined` when the service doesn't carry settings or the\n * value is just `true`/`false`.\n */\nexport function buildCapabilitySettings(\n serviceName: string,\n value: string | boolean\n): CapabilitySettingInput[] | undefined {\n if (value === true || value === false) return undefined;\n\n const wrap = (\n key: string,\n optionKey: string\n ): CapabilitySettingInput[] => [{ key, options: [{ key: optionKey }] }];\n\n switch (serviceName) {\n case \"data_protection\":\n switch (value) {\n case \"complete\":\n return wrap(\"DATA_PROTECTION_PERMISSION_LEVEL\", \"COMPLETE_PROTECTION\");\n case \"unlessopen\":\n return wrap(\"DATA_PROTECTION_PERMISSION_LEVEL\", \"PROTECTED_UNLESS_OPEN\");\n case \"untilfirstauth\":\n return wrap(\n \"DATA_PROTECTION_PERMISSION_LEVEL\",\n \"PROTECTED_UNTIL_FIRST_USER_AUTH\"\n );\n default:\n throw new Error(\n `Unknown value for data_protection: '${value}'. Valid values: 'complete', 'unlessopen', 'untilfirstauth'`\n );\n }\n case \"icloud\":\n switch (value) {\n case \"xcode6_compatible\":\n return wrap(\"ICLOUD_VERSION\", \"XCODE_6\");\n case \"xcode5_compatible\":\n return wrap(\"ICLOUD_VERSION\", \"XCODE_5\");\n default:\n throw new Error(\n `Unknown value for icloud: '${value}'. Valid values: 'xcode6_compatible', 'xcode5_compatible'`\n );\n }\n case \"game_center\":\n switch (value) {\n case \"mac\":\n return wrap(\"GAME_CENTER_SETTING\", \"GAME_CENTER_MAC\");\n case \"ios\":\n return wrap(\"GAME_CENTER_SETTING\", \"GAME_CENTER_IOS\");\n default:\n throw new Error(\n `Unknown value for game_center: '${value}'. Valid values: 'ios', 'mac'`\n );\n }\n case \"sign_in_with_apple\":\n return wrap(\"APPLE_ID_AUTH_APP_CONSENT\", \"PRIMARY_APP_CONSENT\");\n default:\n return undefined;\n }\n}\n\nexport async function registerBundleId(options: {\n client: AppStoreConnectClient;\n identifier: string;\n name: string;\n platform?: BundleIdPlatform;\n}): Promise<BundleId> {\n // Check if already exists (idempotent)\n const existing = await options.client.bundleIds.find(options.identifier);\n if (existing) return existing;\n\n return options.client.bundleIds.create({\n identifier: options.identifier,\n name: options.name,\n platform: options.platform ?? \"IOS\",\n });\n}\n\nexport async function addCapability(options: {\n client: AppStoreConnectClient;\n bundleIdId: string;\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n}): Promise<void> {\n await options.client.capabilities.enable({\n bundleIdId: options.bundleIdId,\n capabilityType: options.capabilityType,\n settings: options.settings,\n });\n}\n\nexport async function removeCapability(options: {\n client: AppStoreConnectClient;\n capabilityId: string;\n}): Promise<void> {\n await options.client.capabilities.disable(options.capabilityId);\n}\n\nexport async function listCapabilities(options: {\n client: AppStoreConnectClient;\n bundleIdId: string;\n}) {\n return options.client.capabilities.listForBundleId(options.bundleIdId);\n}\n\nexport async function enableServices(options: {\n client: AppStoreConnectClient;\n bundleIdId: string;\n /**\n * Service names (Fastlane style, e.g. `data_protection`, `icloud`).\n * Pass either a plain list of names or a record of name → value, where\n * the value either is `true` or one of the per-service variants handled\n * by `buildCapabilitySettings`.\n */\n services: string[] | Record<string, string | boolean>;\n}): Promise<void> {\n const entries: Array<[string, string | boolean]> = Array.isArray(\n options.services\n )\n ? options.services.map((s) => [s, true])\n : Object.entries(options.services);\n\n for (const [service, value] of entries) {\n if (value === false) continue;\n const capType = SERVICE_NAME_TO_CAPABILITY[service];\n if (!capType) continue;\n const settings = buildCapabilitySettings(service, value);\n await addCapability({\n client: options.client,\n bundleIdId: options.bundleIdId,\n capabilityType: capType,\n settings,\n });\n }\n}\n\nexport async function associateAppGroups(options: {\n portalClient: PortalClient;\n bundleIdId: string;\n appGroups: Array<{ name: string; identifier: string }>;\n}): Promise<void> {\n if (!options.appGroups?.length) return;\n\n // Enable the App Groups capability on the App ID once, then associate all\n // requested groups in a single declarative call. Apple's internal group\n // handle comes back under `applicationGroup` (Spaceship's app_group_id) —\n // NOT the human `group.com.…` identifier, which association rejects.\n await options.portalClient.enableAppGroups(options.bundleIdId).catch(() => {});\n\n const existing = await options.portalClient.listAppGroups();\n const appGroupIds: string[] = [];\n for (const group of options.appGroups) {\n let record = existing.find((ag: any) => ag.identifier === group.identifier);\n if (!record) {\n record = await options.portalClient.createAppGroup({\n name: group.name,\n identifier: group.identifier,\n });\n }\n const id =\n record?.applicationGroup ?? record?.applicationGroupId ?? record?.appGroupId ?? record?.id;\n if (id) appGroupIds.push(id);\n }\n\n if (appGroupIds.length) {\n await options.portalClient.assignAppGroups({\n appIdId: options.bundleIdId,\n appGroupIds,\n });\n }\n}\n\nexport async function createApp(options: ProduceOptions): Promise<App> {\n // Check if app already exists\n const existing = await options.client.apps.findByBundleId(options.bundleIdentifier);\n if (existing) return existing;\n\n // Register bundle ID\n const bundleId = await registerBundleId({\n client: options.client,\n identifier: options.bundleIdentifier,\n name: options.appName,\n platform: options.platform,\n });\n\n // Enable services\n if (options.enableServices) {\n for (const service of options.enableServices) {\n await addCapability({\n client: options.client,\n bundleIdId: bundleId.id,\n capabilityType: service,\n });\n }\n }\n\n // Create/associate app groups (requires PortalClient with Apple ID session)\n if (options.appGroups?.length && options.portalClient) {\n await associateAppGroups({\n portalClient: options.portalClient,\n bundleIdId: bundleId.id,\n appGroups: options.appGroups,\n });\n }\n\n // Create app on App Store Connect\n return options.client.apps.create({\n bundleIdentifier: options.bundleIdentifier,\n bundleIdId: bundleId.id,\n appName: options.appName,\n sku: options.sku ?? `${options.bundleIdentifier}.${Date.now()}`,\n primaryLocale: options.primaryLocale,\n });\n}\n","import { registerAction } from \"../index.js\";\nimport type { AppStoreConnectClient } from \"../../client/index.js\";\n\nregisterAction({\n name: \"upload_to_testflight\",\n aliases: [\"pilot\", \"testflight\"],\n description: \"Upload a build to TestFlight\",\n async run(params, ctx) {\n const pilot = await import(\"../../pilot/index.js\");\n\n // Upload if IPA provided\n const ipaPath = (params.ipa ?? ctx.get(\"IPA_OUTPUT_PATH\")) as string | undefined;\n if (ipaPath && params.api_key_id) {\n const uploadResult = await pilot.uploadToTestFlight({\n ipaPath,\n apiKeyId: params.api_key_id as string,\n apiIssuerId: params.api_issuer_id as string,\n apiPrivateKey: params.api_private_key as string,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n if (!uploadResult.success) {\n throw new Error(`Upload failed: ${uploadResult.output.slice(-500)}`);\n }\n }\n\n // Wait for processing\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (client && params.bundle_id && params.build_number) {\n const build = await pilot.waitForProcessing(client, {\n bundleId: params.bundle_id as string,\n buildNumber: String(params.build_number),\n appVersion: (params.app_version ?? \"1.0\") as string,\n });\n ctx.set(\"PILOT_BUILD_ID\", build.id);\n\n // Distribute\n const groups = (params.groups ?? params.beta_groups) as string[] | undefined;\n if (groups && groups.length > 0) {\n await pilot.distributeToGroups({\n client,\n buildId: build.id,\n groupNames: groups,\n changelog: params.changelog as string | undefined,\n });\n }\n\n // Changelog\n if (params.changelog && !groups) {\n await pilot.setChangelog({\n client,\n buildId: build.id,\n changelog: params.changelog as string,\n locale: params.locale as string | undefined,\n });\n }\n\n return build;\n }\n\n return { uploaded: true };\n },\n});\n\nregisterAction({\n name: \"upload_to_app_store\",\n aliases: [\"deliver\", \"appstore\"],\n description: \"Upload metadata and binary to App Store Connect\",\n async run(params, ctx) {\n const { uploadToAppStore } = await import(\"../../deliver/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"deliver: client is required\");\n return uploadToAppStore({\n client,\n bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n appVersion: params.app_version as string | undefined,\n ipaPath: (params.ipa ?? ctx.get(\"IPA_OUTPUT_PATH\")) as string | undefined,\n metadataPath: params.metadata_path as string | undefined,\n screenshotsPath: params.screenshots_path as string | undefined,\n submitForReview: params.submit_for_review as boolean | undefined,\n skipBinaryUpload: params.skip_binary_upload as boolean | undefined,\n skipMetadata: params.skip_metadata as boolean | undefined,\n skipScreenshots: params.skip_screenshots as boolean | undefined,\n force: params.force as boolean | undefined,\n apiKeyId: params.api_key_id as string | undefined,\n apiIssuerId: params.api_issuer_id as string | undefined,\n apiPrivateKey: params.api_private_key as string | undefined,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n },\n});\n\nregisterAction({\n name: \"produce\",\n aliases: [\"create_app_online\"],\n description: \"Register a new app on Apple Developer Portal and App Store Connect\",\n async run(params, ctx) {\n const { createApp } = await import(\"../../produce/index.js\");\n const client = params.client as AppStoreConnectClient ?? ctx.get<AppStoreConnectClient>(\"client\");\n if (!client) throw new Error(\"produce: client is required\");\n return createApp({\n client,\n bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n appName: (params.app_name ?? params.name) as string,\n sku: params.sku as string | undefined,\n primaryLocale: params.primary_locale as string | undefined,\n });\n },\n});\n","export interface TestCommandOptions {\n scheme?: string;\n workspace?: string;\n project?: string;\n destination?: string;\n devices?: string[];\n testPlan?: string;\n onlyTesting?: string[];\n skipTesting?: string[];\n configuration?: string;\n derivedDataPath?: string;\n resultBundlePath?: string;\n codeCoverage?: boolean;\n xcargs?: string;\n clean?: boolean;\n // ── Parallel testing (Fastlane scan parity) ──────────────────────────────\n /** Enable `-parallel-testing-enabled YES`. */\n parallelTesting?: boolean;\n /** Sets `-parallel-testing-worker-count`. */\n concurrentWorkers?: number;\n /** Sets `-maximum-concurrent-test-simulator-destinations`. */\n maxConcurrentSimulators?: number;\n /** Explicitly disable concurrent destinations (`-disable-concurrent-destination-testing`). */\n disableConcurrentTesting?: boolean;\n // ── Sanitizers ───────────────────────────────────────────────────────────\n addressSanitizer?: boolean;\n threadSanitizer?: boolean;\n undefinedBehaviorSanitizer?: boolean;\n}\n\nexport function buildTestCommand(options: TestCommandOptions): string[] {\n const args: string[] = [];\n\n if (options.clean) args.push(\"clean\");\n args.push(\"test\");\n\n if (options.workspace) args.push(\"-workspace\", options.workspace);\n else if (options.project) args.push(\"-project\", options.project);\n\n if (options.scheme) args.push(\"-scheme\", options.scheme);\n\n // Destination\n if (options.destination) {\n args.push(\"-destination\", options.destination);\n } else if (options.devices && options.devices.length > 0) {\n for (const device of options.devices) {\n args.push(\"-destination\", `platform=iOS Simulator,name=${device}`);\n }\n }\n\n if (options.testPlan) args.push(\"-testPlan\", options.testPlan);\n if (options.configuration) args.push(\"-configuration\", options.configuration);\n if (options.derivedDataPath) args.push(\"-derivedDataPath\", options.derivedDataPath);\n if (options.resultBundlePath) args.push(\"-resultBundlePath\", options.resultBundlePath);\n\n if (options.codeCoverage) args.push(\"-enableCodeCoverage\", \"YES\");\n\n if (options.onlyTesting) {\n for (const test of options.onlyTesting) {\n args.push(\"-only-testing:\" + test);\n }\n }\n if (options.skipTesting) {\n for (const test of options.skipTesting) {\n args.push(\"-skip-testing:\" + test);\n }\n }\n\n // Parallel testing flags (xcodebuild native, not xcargs)\n if (options.parallelTesting !== undefined) {\n args.push(\"-parallel-testing-enabled\", options.parallelTesting ? \"YES\" : \"NO\");\n }\n if (options.concurrentWorkers !== undefined) {\n args.push(\"-parallel-testing-worker-count\", String(options.concurrentWorkers));\n }\n if (options.maxConcurrentSimulators !== undefined) {\n args.push(\n \"-maximum-concurrent-test-simulator-destinations\",\n String(options.maxConcurrentSimulators)\n );\n }\n if (options.disableConcurrentTesting) {\n args.push(\"-disable-concurrent-destination-testing\");\n }\n\n // Runtime sanitizers\n if (options.addressSanitizer !== undefined) {\n args.push(\"-enableAddressSanitizer\", options.addressSanitizer ? \"YES\" : \"NO\");\n }\n if (options.threadSanitizer !== undefined) {\n args.push(\"-enableThreadSanitizer\", options.threadSanitizer ? \"YES\" : \"NO\");\n }\n if (options.undefinedBehaviorSanitizer !== undefined) {\n args.push(\n \"-enableUndefinedBehaviorSanitizer\",\n options.undefinedBehaviorSanitizer ? \"YES\" : \"NO\"\n );\n }\n\n if (options.xcargs) args.push(...options.xcargs.split(/\\s+/));\n\n return args;\n}\n","export interface FailedTest {\n target: string;\n suite: string;\n testCase: string;\n onlyTestingArg: string;\n}\n\nexport function parseFailedTests(output: string): FailedTest[] {\n const results: FailedTest[] = [];\n // Strip ANSI color codes\n const clean = output.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n\n // Look for \"Failing tests:\" section\n const failingMatch = clean.match(/Failing tests:\\s*\\n([\\s\\S]*?)(?:\\n\\n|\\n\\*\\*|$)/);\n if (!failingMatch) return results;\n\n const lines = failingMatch[1].split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"*\")) continue;\n\n // Format: -[TestSuite testMethod] or TestTarget.TestSuite/testMethod\n const bracketMatch = trimmed.match(/-\\[(\\w+)\\s+(\\w+)\\]/);\n if (bracketMatch) {\n results.push({\n target: \"\",\n suite: bracketMatch[1],\n testCase: bracketMatch[2],\n onlyTestingArg: `${bracketMatch[1]}/${bracketMatch[2]}`,\n });\n continue;\n }\n\n const slashMatch = trimmed.match(/^(\\w+)\\.(\\w+)\\/(\\w+)$/);\n if (slashMatch) {\n results.push({\n target: slashMatch[1],\n suite: slashMatch[2],\n testCase: slashMatch[3],\n onlyTestingArg: `${slashMatch[1]}/${slashMatch[2]}/${slashMatch[3]}`,\n });\n }\n }\n\n return results;\n}\n","import { spawn } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { mkdirSync, existsSync } from \"node:fs\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport { buildTestCommand } from \"./command.js\";\nimport { parseFailedTests } from \"./retry.js\";\n\nexport type { FailedTest } from \"./retry.js\";\nexport { buildTestCommand } from \"./command.js\";\nexport { parseFailedTests } from \"./retry.js\";\n\nexport interface ScanOptions {\n scheme?: string;\n workspace?: string;\n project?: string;\n devices?: string[];\n testPlan?: string;\n onlyTesting?: string[];\n skipTesting?: string[];\n configuration?: string;\n outputDirectory?: string;\n clean?: boolean;\n codeCoverage?: boolean;\n derivedDataPath?: string;\n resultBundlePath?: string;\n maxRetries?: number;\n xcargs?: string;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface TestResult {\n success: boolean;\n totalTests: number;\n failures: number;\n skipped: number;\n retries: number;\n duration: number;\n reportPaths: string[];\n output: string;\n}\n\nexport async function runTests(options: ScanOptions): Promise<TestResult> {\n requireMacOS(\"scan\");\n\n const outputDir = options.outputDirectory ?? join(process.cwd(), \"test_output\");\n mkdirSync(outputDir, { recursive: true });\n\n const resultBundlePath = options.resultBundlePath ?? join(outputDir, \"result.xcresult\");\n const maxRetries = options.maxRetries ?? 0;\n let retryCount = 0;\n let lastOutput = \"\";\n let currentOnlyTesting = options.onlyTesting;\n\n const startTime = Date.now();\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const args = buildTestCommand({\n ...options,\n resultBundlePath: attempt === 0 ? resultBundlePath : `${resultBundlePath}-retry-${attempt}`,\n onlyTesting: currentOnlyTesting,\n });\n\n const result = await runXcodebuild(args, options.onOutput);\n lastOutput = result.output;\n\n if (result.exitCode === 0) {\n // Tests passed\n break;\n }\n\n if (attempt < maxRetries) {\n // Parse failures for retry\n const failed = parseFailedTests(result.output);\n if (failed.length === 0) break; // No parseable failures\n\n currentOnlyTesting = failed.map((f) => f.onlyTestingArg);\n retryCount++;\n }\n }\n\n // Parse test counts from output\n const counts = parseTestCounts(lastOutput);\n const duration = (Date.now() - startTime) / 1000;\n\n return {\n success: counts.failures === 0,\n totalTests: counts.total,\n failures: counts.failures,\n skipped: counts.skipped,\n retries: retryCount,\n duration,\n reportPaths: existsSync(resultBundlePath) ? [resultBundlePath] : [],\n output: lastOutput,\n };\n}\n\nfunction runXcodebuild(\n args: string[],\n onOutput?: (chunk: string) => void\n): Promise<{ exitCode: number; output: string }> {\n return new Promise((resolve) => {\n const child = spawn(\"xcodebuild\", args, { stdio: [\"ignore\", \"pipe\", \"pipe\"] });\n let output = \"\";\n\n child.stdout.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n onOutput?.(chunk);\n });\n child.stderr.on(\"data\", (data: Buffer) => {\n const chunk = data.toString();\n output += chunk;\n onOutput?.(chunk);\n });\n child.on(\"close\", (code) => resolve({ exitCode: code ?? 1, output }));\n });\n}\n\nfunction parseTestCounts(output: string): { total: number; failures: number; skipped: number } {\n // Match: \"Executed N tests, with M failures (X unexpected) in Y (Z) seconds\"\n const match = output.match(/Executed (\\d+) tests?, with (\\d+) failures?/);\n if (match) {\n return {\n total: parseInt(match[1], 10),\n failures: parseInt(match[2], 10),\n skipped: 0,\n };\n }\n return { total: 0, failures: 0, skipped: 0 };\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SimDevice {\n udid: string;\n name: string;\n state: \"Booted\" | \"Shutdown\" | \"Shutting Down\" | \"Creating\";\n isAvailable: boolean;\n runtime: string;\n deviceTypeIdentifier: string;\n}\n\ninterface SimctlDevicesJson {\n devices: Record<\n string,\n Array<{\n udid: string;\n name: string;\n state: string;\n isAvailable: boolean;\n deviceTypeIdentifier: string;\n }>\n >;\n}\n\n// ── Simulator Listing & Lookup ─────────────────────────────────────────────\n\nexport async function listSimulators(): Promise<SimDevice[]> {\n requireMacOS(\"Simulator management\");\n const { stdout } = await execFileAsync(\"xcrun\", [\"simctl\", \"list\", \"devices\", \"-j\"]);\n const parsed: SimctlDevicesJson = JSON.parse(stdout);\n const devices: SimDevice[] = [];\n for (const [runtimeId, runtimeDevices] of Object.entries(parsed.devices)) {\n for (const dev of runtimeDevices) {\n devices.push({\n udid: dev.udid,\n name: dev.name,\n state: dev.state as SimDevice[\"state\"],\n isAvailable: dev.isAvailable,\n runtime: runtimeId,\n deviceTypeIdentifier: dev.deviceTypeIdentifier,\n });\n }\n }\n return devices;\n}\n\nexport async function findDevice(\n deviceName: string,\n runtimeFilter?: string,\n): Promise<SimDevice | null> {\n const devices = await listSimulators();\n const candidates = devices.filter((d) => {\n if (!d.isAvailable) return false;\n if (d.name !== deviceName) return false;\n if (runtimeFilter && !d.runtime.includes(runtimeFilter)) return false;\n return true;\n });\n if (candidates.length === 0) return null;\n const booted = candidates.find((d) => d.state === \"Booted\");\n return booted ?? candidates[0];\n}\n\n// ── Boot / Shutdown / Erase ────────────────────────────────────────────────\n\nexport async function bootSimulator(udid: string): Promise<void> {\n requireMacOS(\"Simulator management\");\n const devices = await listSimulators();\n const device = devices.find((d) => d.udid === udid);\n if (device?.state === \"Booted\") return;\n await execFileAsync(\"xcrun\", [\"simctl\", \"boot\", udid]);\n const deadline = Date.now() + 30_000;\n while (Date.now() < deadline) {\n const refreshed = await listSimulators();\n const current = refreshed.find((d) => d.udid === udid);\n if (current?.state === \"Booted\") return;\n await new Promise((r) => setTimeout(r, 1000));\n }\n}\n\nexport async function shutdownAll(): Promise<void> {\n requireMacOS(\"Simulator management\");\n await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", \"all\"]);\n}\n\nexport async function eraseSimulator(udid: string): Promise<void> {\n requireMacOS(\"Simulator management\");\n const devices = await listSimulators();\n const device = devices.find((d) => d.udid === udid);\n if (device?.state === \"Booted\") {\n await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", udid]);\n }\n await execFileAsync(\"xcrun\", [\"simctl\", \"erase\", udid]);\n}\n\n// ── Locale / Language ──────────────────────────────────────────────────────\n\nexport async function localizeSimulator(\n udid: string,\n language: string,\n locale?: string,\n): Promise<void> {\n requireMacOS(\"Simulator management\");\n const deviceDataPath = getDeviceDataPath(udid);\n const prefsDir = join(deviceDataPath, \"data\", \"Library\", \"Preferences\");\n const prefsFile = join(prefsDir, \".GlobalPreferences.plist\");\n if (!existsSync(prefsDir)) {\n mkdirSync(prefsDir, { recursive: true });\n }\n const effectiveLocale = locale ?? language.replace(\"-\", \"_\");\n const plistXml = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">',\n '<plist version=\"1.0\">',\n \"<dict>\",\n \" <key>AppleLanguages</key>\",\n \" <array>\",\n \" <string>\" + escapeXml(language) + \"</string>\",\n \" </array>\",\n \" <key>AppleLocale</key>\",\n \" <string>\" + escapeXml(effectiveLocale) + \"</string>\",\n \" <key>AppleKeyboards</key>\",\n \" <array>\",\n \" <string>\" + escapeXml(effectiveLocale) + \"@sw=QWERTY;hw=Automatic</string>\",\n \" </array>\",\n \" <key>AppleKeyboardsExpanded</key>\",\n \" <integer>1</integer>\",\n \"</dict>\",\n \"</plist>\",\n ].join(\"\\n\");\n writeFileSync(prefsFile, plistXml, \"utf-8\");\n try {\n await execFileAsync(\"plutil\", [\"-convert\", \"binary1\", prefsFile]);\n } catch {\n // XML plist is still readable\n }\n}\n\n// ── UI Customization ───────────────────────────────────────────────────────\n\nexport async function setInterfaceStyle(\n udid: string,\n style: \"light\" | \"dark\",\n): Promise<void> {\n requireMacOS(\"Simulator management\");\n const appearance = style === \"dark\" ? \"dark\" : \"light\";\n await execFileAsync(\"xcrun\", [\"simctl\", \"ui\", udid, \"appearance\", appearance]);\n}\n\nexport async function overrideStatusBar(\n udid: string,\n options?: {\n time?: string;\n batteryLevel?: number;\n batteryState?: \"charged\" | \"charging\" | \"discharging\";\n wifiMode?: \"active\" | \"searching\" | \"failed\";\n cellularMode?: \"active\" | \"searching\" | \"failed\" | \"notSupported\";\n dataNetwork?: \"wifi\" | \"3g\" | \"4g\" | \"lte\" | \"lte-a\" | \"lte+\" | \"5g\" | \"5g+\" | \"5g-uwb\";\n },\n): Promise<void> {\n requireMacOS(\"Simulator management\");\n const args = [\n \"simctl\", \"status_bar\", udid, \"override\",\n \"--time\", options?.time ?? \"9:41\",\n \"--batteryLevel\", String(options?.batteryLevel ?? 100),\n \"--batteryState\", options?.batteryState ?? \"charged\",\n \"--wifiMode\", options?.wifiMode ?? \"active\",\n \"--wifiBars\", \"3\",\n \"--cellularMode\", options?.cellularMode ?? \"active\",\n \"--cellularBars\", \"4\",\n ];\n if (options?.dataNetwork) {\n args.push(\"--dataNetwork\", options.dataNetwork);\n }\n await execFileAsync(\"xcrun\", args);\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nfunction getDeviceDataPath(udid: string): string {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? \"/tmp\";\n return join(home, \"Library\", \"Developer\", \"CoreSimulator\", \"Devices\", udid);\n}\n\nfunction escapeXml(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n","import { execFile, spawn } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, mkdirSync, readdirSync, copyFileSync } from \"node:fs\";\nimport { join, basename, extname } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport {\n findDevice,\n bootSimulator,\n shutdownAll,\n localizeSimulator,\n overrideStatusBar,\n eraseSimulator,\n} from \"./simulator.js\";\nimport type { SimDevice } from \"./simulator.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Re-export simulator utilities ──────────────────────────────────────────\n\nexport {\n listSimulators,\n findDevice,\n bootSimulator,\n shutdownAll,\n eraseSimulator,\n localizeSimulator,\n setInterfaceStyle,\n overrideStatusBar,\n} from \"./simulator.js\";\n\nexport type { SimDevice } from \"./simulator.js\";\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface SnapshotOptions {\n scheme?: string;\n workspace?: string;\n project?: string;\n devices: string[];\n languages: string[];\n outputDirectory?: string;\n clearPreviousScreenshots?: boolean;\n launchArguments?: string[];\n concurrent?: boolean;\n numberOfRetries?: number;\n darkMode?: boolean;\n overrideStatusBar?: boolean;\n eraseSimulatorBeforeRun?: boolean;\n derivedDataPath?: string;\n testPlan?: string;\n configuration?: string;\n xcargs?: string;\n onOutput?: (chunk: string) => void;\n}\n\nexport interface ScreenshotResult {\n success: boolean;\n screenshots: Record<string, Record<string, string[]>>;\n failedDevices: string[];\n}\n\n// ── Main Entry Point ───────────────────────────────────────────────────────\n\n/**\n * Capture screenshots across a device x language matrix.\n *\n * Mirrors Fastlane snapshot's runner:\n * 1. Validate macOS\n * 2. Build device x language matrix\n * 3. For each combination: boot sim, set locale, run xcodebuild test, collect screenshots\n * 4. Return aggregated ScreenshotResult\n */\nexport async function captureScreenshots(\n options: SnapshotOptions,\n): Promise<ScreenshotResult> {\n requireMacOS(\"Screenshot capture\");\n\n // Validate required options\n if (!options.scheme && !options.workspace && !options.project) {\n throw new Error(\n \"At least one of scheme, workspace, or project must be specified\",\n );\n }\n if (options.devices.length === 0) {\n throw new Error(\"At least one device must be specified\");\n }\n if (options.languages.length === 0) {\n throw new Error(\"At least one language must be specified\");\n }\n\n const outputDir = options.outputDirectory ?? join(process.cwd(), \"screenshots\");\n const retries = options.numberOfRetries ?? 1;\n\n // Clear previous screenshots if requested\n if (options.clearPreviousScreenshots && existsSync(outputDir)) {\n const { rm } = await import(\"node:fs/promises\");\n await rm(outputDir, { recursive: true, force: true });\n }\n\n mkdirSync(outputDir, { recursive: true });\n\n const screenshots: Record<string, Record<string, string[]>> = {};\n const failedDevices: string[] = [];\n\n // Build the device x language matrix\n const matrix = buildMatrix(options.devices, options.languages);\n\n if (options.concurrent) {\n // Run all combinations in parallel\n const results = await Promise.allSettled(\n matrix.map((entry) =>\n runSingleCombination(entry, options, outputDir, retries),\n ),\n );\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const entry = matrix[i];\n if (result.status === \"fulfilled\") {\n mergeScreenshots(screenshots, result.value);\n } else {\n const key = entry.device + \" / \" + entry.language;\n failedDevices.push(key);\n }\n }\n } else {\n // Run sequentially\n for (const entry of matrix) {\n try {\n const result = await runSingleCombination(\n entry,\n options,\n outputDir,\n retries,\n );\n mergeScreenshots(screenshots, result);\n } catch {\n const key = entry.device + \" / \" + entry.language;\n failedDevices.push(key);\n }\n }\n }\n\n return {\n success: failedDevices.length === 0,\n screenshots,\n failedDevices,\n };\n}\n\n// ── Internal: Matrix Construction ──────────────────────────────────────────\n\ninterface MatrixEntry {\n device: string;\n language: string;\n}\n\nfunction buildMatrix(devices: string[], languages: string[]): MatrixEntry[] {\n const entries: MatrixEntry[] = [];\n for (const device of devices) {\n for (const language of languages) {\n entries.push({ device, language });\n }\n }\n return entries;\n}\n\n// ── Internal: Single Combination Runner ────────────────────────────────────\n\nasync function runSingleCombination(\n entry: MatrixEntry,\n options: SnapshotOptions,\n outputDir: string,\n retries: number,\n): Promise<Record<string, Record<string, string[]>>> {\n const { device: deviceName, language } = entry;\n\n // Find the simulator device\n const simDevice = await findDevice(deviceName);\n if (!simDevice) {\n throw new Error(\"Simulator device not found: \" + deviceName);\n }\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < retries; attempt++) {\n try {\n return await runOnSimulator(simDevice, language, options, outputDir);\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n options.onOutput?.(\n \"Attempt \" + (attempt + 1) + \" failed for \" + deviceName + \" / \" + language + \": \" + lastError.message + \"\\n\",\n );\n }\n }\n\n throw lastError ?? new Error(\"All retries exhausted\");\n}\n\nasync function runOnSimulator(\n simDevice: SimDevice,\n language: string,\n options: SnapshotOptions,\n outputDir: string,\n): Promise<Record<string, Record<string, string[]>>> {\n const udid = simDevice.udid;\n const deviceName = simDevice.name;\n\n // Erase simulator if requested\n if (options.eraseSimulatorBeforeRun) {\n await eraseSimulator(udid);\n }\n\n // Shut down, localize, then boot\n try {\n await execFileAsync(\"xcrun\", [\"simctl\", \"shutdown\", udid]);\n } catch {\n // May already be shutdown\n }\n\n await localizeSimulator(udid, language);\n await bootSimulator(udid);\n\n // Override status bar for clean screenshots\n if (options.overrideStatusBar !== false) {\n try {\n await overrideStatusBar(udid);\n } catch {\n // Status bar override may fail on older simulators\n }\n }\n\n // Set dark mode if requested\n if (options.darkMode) {\n try {\n const { setInterfaceStyle } = await import(\"./simulator.js\");\n await setInterfaceStyle(udid, \"dark\");\n } catch {\n // Dark mode may not be available\n }\n }\n\n // Determine the derived data path (used to find screenshots)\n const derivedDataPath =\n options.derivedDataPath ??\n join(outputDir, \".derived-data\", deviceName + \"-\" + language);\n mkdirSync(derivedDataPath, { recursive: true });\n\n // Run xcodebuild test\n const exitCode = await runXcodebuildTest(\n udid,\n derivedDataPath,\n options,\n );\n\n if (exitCode !== 0 && exitCode !== 65) {\n // Exit code 65 = test failures but screenshots may still exist\n throw new Error(\n \"xcodebuild test failed with exit code \" + exitCode,\n );\n }\n\n // Collect screenshots from derived data and the simulator's data dir\n const deviceOutputDir = join(outputDir, deviceName, language);\n mkdirSync(deviceOutputDir, { recursive: true });\n\n const collectedPaths = collectScreenshots(derivedDataPath, deviceOutputDir);\n\n // Also collect from the simulator's screenshot directory\n const simScreenshotDir = getSimulatorScreenshotDir(udid);\n if (existsSync(simScreenshotDir)) {\n const simPaths = collectScreenshots(simScreenshotDir, deviceOutputDir);\n collectedPaths.push(...simPaths);\n }\n\n const result: Record<string, Record<string, string[]>> = {};\n if (!result[deviceName]) result[deviceName] = {};\n result[deviceName][language] = collectedPaths;\n\n return result;\n}\n\n// ── Internal: xcodebuild test ──────────────────────────────────────────────\n\nfunction runXcodebuildTest(\n udid: string,\n derivedDataPath: string,\n options: SnapshotOptions,\n): Promise<number> {\n return new Promise((resolve) => {\n const args = buildXcodebuildArgs(udid, derivedDataPath, options);\n\n const proc = spawn(\"xcodebuild\", args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let output = \"\";\n\n proc.stdout.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n output += text;\n options.onOutput?.(text);\n });\n\n proc.stderr.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n output += text;\n options.onOutput?.(text);\n });\n\n proc.on(\"close\", (code) => {\n resolve(code ?? 1);\n });\n\n proc.on(\"error\", () => {\n resolve(1);\n });\n });\n}\n\nfunction buildXcodebuildArgs(\n udid: string,\n derivedDataPath: string,\n options: SnapshotOptions,\n): string[] {\n const args: string[] = [];\n\n if (options.workspace) {\n args.push(\"-workspace\", options.workspace);\n } else if (options.project) {\n args.push(\"-project\", options.project);\n }\n\n if (options.scheme) {\n args.push(\"-scheme\", options.scheme);\n }\n\n if (options.configuration) {\n args.push(\"-configuration\", options.configuration);\n }\n\n args.push(\n \"-destination\",\n \"platform=iOS Simulator,id=\" + udid,\n \"-derivedDataPath\",\n derivedDataPath,\n \"test\",\n );\n\n if (options.testPlan) {\n args.push(\"-testPlan\", options.testPlan);\n }\n\n // Append launch arguments as build settings\n if (options.launchArguments && options.launchArguments.length > 0) {\n const launchArgsStr = options.launchArguments\n .map((a) => \"'\" + a + \"'\")\n .join(\" \");\n args.push(\"SNAPSHOT_LAUNCH_ARGUMENTS=\" + launchArgsStr);\n }\n\n if (options.xcargs) {\n // Split xcargs by spaces (simple split, doesn't handle quoted strings)\n args.push(...options.xcargs.split(/\\s+/).filter(Boolean));\n }\n\n return args;\n}\n\n// ── Internal: Screenshot Collection ────────────────────────────────────────\n\nfunction collectScreenshots(\n sourceDir: string,\n destDir: string,\n): string[] {\n const collected: string[] = [];\n\n if (!existsSync(sourceDir)) return collected;\n\n const screenshotExtensions = new Set([\".png\", \".jpg\", \".jpeg\"]);\n\n function walk(dir: string): void {\n let entries: string[];\n try {\n entries = readdirSync(dir, { withFileTypes: true }).map((e) => {\n if (e.isDirectory()) {\n walk(join(dir, e.name));\n return \"\";\n }\n return e.name;\n }).filter(Boolean);\n } catch {\n return;\n }\n\n for (const name of entries) {\n const ext = extname(name).toLowerCase();\n if (screenshotExtensions.has(ext)) {\n const srcPath = join(dir, name);\n const destPath = join(destDir, basename(name));\n try {\n copyFileSync(srcPath, destPath);\n collected.push(destPath);\n } catch {\n // Skip files we can't copy\n }\n }\n }\n }\n\n walk(sourceDir);\n return collected;\n}\n\nfunction getSimulatorScreenshotDir(udid: string): string {\n const home = process.env.HOME ?? process.env.USERPROFILE ?? \"/tmp\";\n return join(\n home,\n \"Library\",\n \"Developer\",\n \"CoreSimulator\",\n \"Devices\",\n udid,\n \"data\",\n \"tmp\",\n \"Screenshots\",\n );\n}\n\n// ── Internal: Merge screenshot results ─────────────────────────────────────\n\nfunction mergeScreenshots(\n target: Record<string, Record<string, string[]>>,\n source: Record<string, Record<string, string[]>>,\n): void {\n for (const [device, languages] of Object.entries(source)) {\n if (!target[device]) target[device] = {};\n for (const [lang, paths] of Object.entries(languages)) {\n if (!target[device][lang]) target[device][lang] = [];\n target[device][lang].push(...paths);\n }\n }\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { existsSync, readFileSync, writeFileSync, readdirSync } from \"node:fs\";\nimport { join, extname, basename } from \"node:path\";\nimport { requireMacOS } from \"../xcode/platform.js\";\nimport * as plist from \"plist\";\n\nconst execFileAsync = promisify(execFile);\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\nexport interface TrainerOptions {\n path?: string;\n outputDirectory?: string;\n outputFilename?: string;\n failBuildOnError?: boolean;\n xcpretty?: boolean;\n}\n\nexport interface JUnitResult {\n success: boolean;\n totalTests: number;\n failures: number;\n skipped: number;\n /** Total number of retried test attempts across all suites. */\n retries: number;\n numberOfRetries: number;\n /** Count of unique tests after collapsing retries. */\n numberOfTestsExcludingRetries: number;\n /** Count of unique failing tests after collapsing retries (last attempt wins). */\n numberOfFailuresExcludingRetries: number;\n junitPath: string;\n testSuites: TestSuite[];\n}\n\nexport interface TestSuite {\n name: string;\n tests: number;\n failures: number;\n time: number;\n testCases: TestCase[];\n}\n\nexport interface TestCase {\n name: string;\n className: string;\n time: number;\n failure: string | null;\n}\n\n// ── xcresulttool JSON shapes ───────────────────────────────────────────────\n\ninterface XCResultValue {\n _value?: string;\n _values?: XCResultValue[];\n _type?: { _name?: string };\n}\n\ninterface XCResultActionRecord {\n actionResult?: {\n testsRef?: { id?: XCResultValue };\n };\n}\n\ninterface XCResultActionsInvocation {\n actions?: {\n _values?: XCResultActionRecord[];\n };\n}\n\ninterface XCResultTestNode {\n name?: XCResultValue;\n identifier?: XCResultValue;\n duration?: XCResultValue;\n testStatus?: XCResultValue;\n subtests?: { _values?: XCResultTestNode[] };\n summaries?: {\n _values?: Array<{\n failureSummaries?: {\n _values?: Array<{\n message?: XCResultValue;\n fileName?: XCResultValue;\n lineNumber?: XCResultValue;\n }>;\n };\n }>;\n };\n}\n\ninterface XCResultTestPlan {\n subtests?: { _values?: XCResultTestNode[] };\n name?: XCResultValue;\n}\n\n// ── plist test results shape ───────────────────────────────────────────────\n\ninterface PlistTestSuite {\n TestName?: string;\n TestIdentifier?: string;\n Duration?: number;\n TestStatus?: string;\n Subtests?: PlistTestSuite[];\n FailureSummaries?: Array<{\n Message?: string;\n FileName?: string;\n LineNumber?: number;\n }>;\n}\n\n// ── Main Entry Point ───────────────────────────────────────────────────────\n\n/**\n * Parse test results from either .xcresult bundles or .plist files,\n * generate JUnit XML, and return structured results.\n *\n * Mirrors Fastlane trainer's test_parser.rb logic.\n */\nexport async function parseTestResults(\n options: TrainerOptions,\n): Promise<JUnitResult> {\n const inputPath = options.path ?? findTestResults();\n const outputDir = options.outputDirectory ?? process.cwd();\n const outputFilename = options.outputFilename ?? \"report.junit\";\n const junitPath = join(outputDir, outputFilename);\n\n if (!existsSync(inputPath)) {\n throw new Error(\"Test results not found at: \" + inputPath);\n }\n\n let testSuites: TestSuite[];\n\n if (inputPath.endsWith(\".xcresult\")) {\n requireMacOS(\"xcresult parsing\");\n testSuites = await parseXCResult(inputPath);\n } else if (inputPath.endsWith(\".plist\")) {\n testSuites = parsePlistResults(inputPath);\n } else {\n // Try to detect: if it's a directory, it might be an xcresult bundle\n const stat = await import(\"node:fs\").then((fs) =>\n fs.statSync(inputPath),\n );\n if (stat.isDirectory()) {\n requireMacOS(\"xcresult parsing\");\n testSuites = await parseXCResult(inputPath);\n } else {\n // Attempt plist parsing as fallback\n testSuites = parsePlistResults(inputPath);\n }\n }\n\n // Compute aggregated stats\n let totalTests = 0;\n let failures = 0;\n let skipped = 0;\n\n for (const suite of testSuites) {\n totalTests += suite.tests;\n failures += suite.failures;\n for (const tc of suite.testCases) {\n if (tc.time === 0 && tc.failure === null) {\n // Heuristic: zero-duration passing tests are often skipped\n }\n }\n }\n\n // Count skipped tests (tests with name containing \"skipped\" or with specific markers)\n for (const suite of testSuites) {\n for (const tc of suite.testCases) {\n if (tc.failure === \"skipped\" || tc.failure === \"disabled\") {\n skipped++;\n }\n }\n }\n\n // Retry detection: xcresult emits one TestCase per attempt of the same\n // (className, name). The final attempt wins for pass/fail. Count the\n // retry attempts that preceded it and compute retry-adjusted totals.\n const { numberOfRetries, numberOfTestsExcludingRetries, numberOfFailuresExcludingRetries } =\n computeRetryStats(testSuites);\n\n // Generate JUnit XML\n const junitXml = generateJUnitXml(testSuites);\n writeFileSync(junitPath, junitXml, \"utf-8\");\n\n const success = numberOfFailuresExcludingRetries === 0;\n\n if (!success && options.failBuildOnError) {\n throw new Error(\n \"Tests failed: \" + numberOfFailuresExcludingRetries + \" failure(s) out of \" +\n numberOfTestsExcludingRetries + \" test(s)\",\n );\n }\n\n return {\n success,\n totalTests,\n failures,\n skipped,\n retries: numberOfRetries,\n numberOfRetries,\n numberOfTestsExcludingRetries,\n numberOfFailuresExcludingRetries,\n junitPath,\n testSuites,\n };\n}\n\nfunction computeRetryStats(testSuites: TestSuite[]): {\n numberOfRetries: number;\n numberOfTestsExcludingRetries: number;\n numberOfFailuresExcludingRetries: number;\n} {\n let numberOfRetries = 0;\n let uniqueTests = 0;\n let uniqueFailures = 0;\n\n for (const suite of testSuites) {\n const attemptsByKey = new Map<string, TestCase[]>();\n for (const tc of suite.testCases) {\n const key = `${tc.className}::${tc.name}`;\n const arr = attemptsByKey.get(key) ?? [];\n arr.push(tc);\n attemptsByKey.set(key, arr);\n }\n for (const attempts of attemptsByKey.values()) {\n uniqueTests++;\n numberOfRetries += Math.max(0, attempts.length - 1);\n const last = attempts[attempts.length - 1];\n // Only real failures count — not \"skipped\" markers.\n if (last.failure !== null && last.failure !== \"skipped\" && last.failure !== \"disabled\") {\n uniqueFailures++;\n }\n }\n }\n\n return {\n numberOfRetries,\n numberOfTestsExcludingRetries: uniqueTests,\n numberOfFailuresExcludingRetries: uniqueFailures,\n };\n}\n\n// ── xcresult Parsing ───────────────────────────────────────────────────────\n\nasync function parseXCResult(xcresultPath: string): Promise<TestSuite[]> {\n // Step 1: Get the top-level invocation record\n const rootJson = await xcresulttoolGet(xcresultPath);\n const root = JSON.parse(rootJson) as XCResultActionsInvocation;\n\n const actions = root.actions?._values ?? [];\n const testSuites: TestSuite[] = [];\n\n for (const action of actions) {\n const testsRefId = action.actionResult?.testsRef?.id?._value;\n if (!testsRefId) continue;\n\n // Step 2: Get the test plan run summaries using the ref id\n const testsJson = await xcresulttoolGet(xcresultPath, testsRefId);\n const testsRoot = JSON.parse(testsJson) as XCResultTestPlan;\n\n // Step 3: Walk the test tree to extract suites and cases\n const topNodes = testsRoot.subtests?._values ?? [];\n for (const node of topNodes) {\n extractTestSuites(node, testSuites);\n }\n }\n\n return testSuites;\n}\n\nfunction extractTestSuites(\n node: XCResultTestNode,\n suites: TestSuite[],\n parentName?: string,\n): void {\n const name = node.name?._value ?? node.identifier?._value ?? \"Unknown\";\n const subtests = node.subtests?._values;\n\n if (subtests && subtests.length > 0) {\n // Check if children are leaf test cases or more groups\n const hasLeafTests = subtests.some(\n (s) => !s.subtests || !s.subtests._values || s.subtests._values.length === 0,\n );\n\n if (hasLeafTests) {\n // This node is a test suite containing test cases\n const testCases: TestCase[] = [];\n\n for (const sub of subtests) {\n if (sub.subtests?._values && sub.subtests._values.length > 0) {\n // Nested group -- recurse\n extractTestSuites(sub, suites, name);\n } else {\n // Leaf test case\n testCases.push(extractTestCase(sub, name));\n }\n }\n\n if (testCases.length > 0) {\n const failureCount = testCases.filter((tc) => tc.failure !== null && tc.failure !== \"skipped\").length;\n const totalTime = testCases.reduce((acc, tc) => acc + tc.time, 0);\n\n suites.push({\n name: parentName ? parentName + \".\" + name : name,\n tests: testCases.length,\n failures: failureCount,\n time: totalTime,\n testCases,\n });\n }\n } else {\n // All children are groups -- recurse deeper\n for (const sub of subtests) {\n extractTestSuites(sub, suites, name);\n }\n }\n }\n}\n\nfunction extractTestCase(\n node: XCResultTestNode,\n className: string,\n): TestCase {\n const name = node.name?._value ?? node.identifier?._value ?? \"Unknown\";\n const duration = node.duration?._value ? parseFloat(node.duration._value) : 0;\n const status = node.testStatus?._value ?? \"\";\n\n let failure: string | null = null;\n\n if (status === \"Failure\") {\n // Extract failure message from summaries\n const summaries = node.summaries?._values ?? [];\n const failureMessages: string[] = [];\n\n for (const summary of summaries) {\n const failureSummaries = summary.failureSummaries?._values ?? [];\n for (const fs of failureSummaries) {\n const msg = fs.message?._value ?? \"Test failed\";\n const file = fs.fileName?._value ?? \"\";\n const line = fs.lineNumber?._value ?? \"\";\n if (file) {\n failureMessages.push(msg + \" (\" + file + \":\" + line + \")\");\n } else {\n failureMessages.push(msg);\n }\n }\n }\n\n failure = failureMessages.length > 0\n ? failureMessages.join(\"\\n\")\n : \"Test failed\";\n } else if (status === \"Skipped\") {\n failure = \"skipped\";\n }\n\n return { name, className, time: duration, failure };\n}\n\nasync function xcresulttoolGet(\n xcresultPath: string,\n id?: string,\n): Promise<string> {\n const args = [\n \"xcresulttool\",\n \"get\",\n \"--format\",\n \"json\",\n \"--path\",\n xcresultPath,\n ];\n\n if (id) {\n args.push(\"--id\", id);\n }\n\n const { stdout } = await execFileAsync(\"xcrun\", args, {\n maxBuffer: 50 * 1024 * 1024, // 50MB buffer for large results\n });\n\n return stdout;\n}\n\n// ── Plist Parsing ──────────────────────────────────────────────────────────\n\nfunction parsePlistResults(plistPath: string): TestSuite[] {\n const raw = readFileSync(plistPath, \"utf-8\");\n const parsed = plist.parse(raw);\n\n // The plist can be either a single test suite dict or an array\n const suites: TestSuite[] = [];\n\n if (Array.isArray(parsed)) {\n for (const entry of parsed) {\n extractPlistSuites(entry as PlistTestSuite, suites);\n }\n } else {\n extractPlistSuites(parsed as PlistTestSuite, suites);\n }\n\n return suites;\n}\n\nfunction extractPlistSuites(\n node: PlistTestSuite,\n suites: TestSuite[],\n parentName?: string,\n): void {\n const name =\n node.TestName ?? node.TestIdentifier ?? \"Unknown\";\n const subtests = node.Subtests;\n\n if (subtests && subtests.length > 0) {\n const hasLeafTests = subtests.some(\n (s) => !s.Subtests || s.Subtests.length === 0,\n );\n\n if (hasLeafTests) {\n const testCases: TestCase[] = [];\n\n for (const sub of subtests) {\n if (sub.Subtests && sub.Subtests.length > 0) {\n extractPlistSuites(sub, suites, name);\n } else {\n testCases.push(extractPlistTestCase(sub, name));\n }\n }\n\n if (testCases.length > 0) {\n const failureCount = testCases.filter(\n (tc) => tc.failure !== null && tc.failure !== \"skipped\",\n ).length;\n const totalTime = testCases.reduce((acc, tc) => acc + tc.time, 0);\n\n suites.push({\n name: parentName ? parentName + \".\" + name : name,\n tests: testCases.length,\n failures: failureCount,\n time: totalTime,\n testCases,\n });\n }\n } else {\n for (const sub of subtests) {\n extractPlistSuites(sub, suites, name);\n }\n }\n }\n}\n\nfunction extractPlistTestCase(\n node: PlistTestSuite,\n className: string,\n): TestCase {\n const name =\n node.TestName ?? node.TestIdentifier ?? \"Unknown\";\n const duration = node.Duration ?? 0;\n const status = node.TestStatus ?? \"\";\n\n let failure: string | null = null;\n\n if (status === \"Failure\") {\n const summaries = node.FailureSummaries ?? [];\n const messages = summaries.map((s) => {\n const msg = s.Message ?? \"Test failed\";\n const file = s.FileName ?? \"\";\n const line = s.LineNumber ?? \"\";\n return file ? msg + \" (\" + file + \":\" + line + \")\" : msg;\n });\n failure = messages.length > 0 ? messages.join(\"\\n\") : \"Test failed\";\n } else if (status === \"Skipped\") {\n failure = \"skipped\";\n }\n\n return { name, className, time: duration, failure };\n}\n\n// ── JUnit XML Generation ───────────────────────────────────────────────────\n\n/**\n * Generate a JUnit XML string from test suites.\n * Mirrors Fastlane trainer's junit_generator.rb output format.\n */\nexport function generateJUnitXml(testSuites: TestSuite[]): string {\n const totalTests = testSuites.reduce((acc, s) => acc + s.tests, 0);\n const totalFailures = testSuites.reduce((acc, s) => acc + s.failures, 0);\n const totalTime = testSuites.reduce((acc, s) => acc + s.time, 0);\n\n const lines: string[] = [];\n lines.push('<?xml version=\"1.0\" encoding=\"UTF-8\"?>');\n lines.push(\n '<testsuites tests=\"' + totalTests +\n '\" failures=\"' + totalFailures +\n '\" time=\"' + totalTime.toFixed(3) + '\">',\n );\n\n for (const suite of testSuites) {\n lines.push(\n ' <testsuite name=\"' + escapeXmlAttr(suite.name) +\n '\" tests=\"' + suite.tests +\n '\" failures=\"' + suite.failures +\n '\" time=\"' + suite.time.toFixed(3) + '\">',\n );\n\n for (const tc of suite.testCases) {\n if (tc.failure === \"skipped\") {\n lines.push(\n ' <testcase classname=\"' + escapeXmlAttr(tc.className) +\n '\" name=\"' + escapeXmlAttr(tc.name) +\n '\" time=\"' + tc.time.toFixed(3) + '\">',\n );\n lines.push(\" <skipped/>\");\n lines.push(\" </testcase>\");\n } else if (tc.failure !== null) {\n lines.push(\n ' <testcase classname=\"' + escapeXmlAttr(tc.className) +\n '\" name=\"' + escapeXmlAttr(tc.name) +\n '\" time=\"' + tc.time.toFixed(3) + '\">',\n );\n lines.push(\n ' <failure message=\"' + escapeXmlAttr(tc.failure) + '\">',\n );\n lines.push(\" \" + escapeXmlContent(tc.failure));\n lines.push(\" </failure>\");\n lines.push(\" </testcase>\");\n } else {\n lines.push(\n ' <testcase classname=\"' + escapeXmlAttr(tc.className) +\n '\" name=\"' + escapeXmlAttr(tc.name) +\n '\" time=\"' + tc.time.toFixed(3) + '\"/>',\n );\n }\n }\n\n lines.push(\" </testsuite>\");\n }\n\n lines.push(\"</testsuites>\");\n\n return lines.join(\"\\n\") + \"\\n\";\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\n/**\n * Auto-detect test results path. Searches common locations.\n */\nfunction findTestResults(): string {\n const cwd = process.cwd();\n\n // Check for xcresult in common derived data locations\n const derivedDataPath = join(\n process.env.HOME ?? \"/tmp\",\n \"Library\",\n \"Developer\",\n \"Xcode\",\n \"DerivedData\",\n );\n\n if (existsSync(derivedDataPath)) {\n try {\n const projects = readdirSync(derivedDataPath);\n for (const project of projects) {\n const logsDir = join(\n derivedDataPath,\n project,\n \"Logs\",\n \"Test\",\n );\n if (!existsSync(logsDir)) continue;\n\n const entries = readdirSync(logsDir);\n const xcresults = entries\n .filter((e) => e.endsWith(\".xcresult\"))\n .map((e) => ({\n name: e,\n path: join(logsDir, e),\n }));\n\n if (xcresults.length > 0) {\n // Return the most recently modified one\n return xcresults[xcresults.length - 1].path;\n }\n }\n } catch {\n // Ignore errors scanning derived data\n }\n }\n\n // Check for plist in current directory\n const plistFiles = safeReaddir(cwd).filter(\n (f) => f.endsWith(\".plist\") && f.includes(\"Test\"),\n );\n if (plistFiles.length > 0) {\n return join(cwd, plistFiles[0]);\n }\n\n throw new Error(\n \"Could not auto-detect test results. Please specify the path option.\",\n );\n}\n\nfunction safeReaddir(dir: string): string[] {\n try {\n return readdirSync(dir);\n } catch {\n return [];\n }\n}\n\nfunction escapeXmlAttr(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction escapeXmlContent(str: string): string {\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n","export interface RuleResult {\n passed: boolean;\n message: string;\n}\n\n/**\n * Rule metadata attached as properties of each rule function. Mirrors\n * Fastlane precheck's `Rule` class attributes (rule.rb, line ~5+).\n *\n * `supportedFields` lists metadata field names this rule applies to. A\n * `null` value means the rule applies to every field (Fastlane's default\n * `supported_fields_symbol_set` return of `nil`).\n */\nexport interface RuleMetadata {\n key: string;\n envName: string;\n friendlyName: string;\n description: string;\n supportedFields: readonly string[] | null;\n}\n\nexport type Rule = ((text: string) => RuleResult) & { metadata: RuleMetadata };\n\nfunction defineRule(\n metadata: RuleMetadata,\n fn: (text: string) => RuleResult\n): Rule {\n const rule = fn as Rule;\n rule.metadata = metadata;\n return rule;\n}\n\nfunction createWordMatchRule(\n metadata: RuleMetadata,\n words: string[]\n): Rule {\n const lower = words.map((w) => w.toLowerCase());\n return defineRule(metadata, (text: string): RuleResult => {\n const textLower = text.toLowerCase();\n for (const word of lower) {\n if (textLower.includes(word)) {\n return {\n passed: false,\n message: `${metadata.friendlyName}: found \"${word}\"`,\n };\n }\n }\n return { passed: true, message: \"\" };\n });\n}\n\nexport const negativeAppleSentiment = createWordMatchRule(\n {\n key: \"negative_apple_sentiment\",\n envName: \"RULE_NEGATIVE_APPLE_SENTIMENT\",\n friendlyName: \"No negative sentiment about Apple\",\n description: \"using text that could be negative sentiment about Apple\",\n supportedFields: null,\n },\n [\"suck\", \"bug\", \"broken\", \"crash\", \"hate\", \"terrible\", \"horrible\", \"worst\", \"awful\"]\n);\n\nexport const placeholderText = createWordMatchRule(\n {\n key: \"placeholder_words\",\n envName: \"RULE_PLACEHOLDER_WORDS\",\n friendlyName: \"No placeholder words\",\n description: \"using placeholder text\",\n supportedFields: null,\n },\n [\n \"lorem ipsum\",\n \"placeholder\",\n \"todo\",\n \"tbd\",\n \"coming soon\",\n \"insert\",\n \"your text here\",\n ]\n);\n\nexport const otherPlatforms = createWordMatchRule(\n {\n key: \"other_platforms\",\n envName: \"RULE_OTHER_PLATFORMS\",\n friendlyName: \"No references to other platforms\",\n description: \"mentioning other platforms\",\n supportedFields: null,\n },\n [\"android\", \"google play\", \"samsung\", \"windows phone\", \"blackberry\", \"kindle\"]\n);\n\nexport const futureFunctionality = createWordMatchRule(\n {\n key: \"future_functionality\",\n envName: \"RULE_FUTURE_FUNCTIONALITY\",\n friendlyName: \"No references to future functionality\",\n description: \"referencing future functionality\",\n supportedFields: null,\n },\n [\n \"will be available\",\n \"coming soon\",\n \"in a future update\",\n \"planned for\",\n \"we plan to\",\n \"will include\",\n \"will support\",\n ]\n);\n\nexport const testWords = createWordMatchRule(\n {\n key: \"test_words\",\n envName: \"RULE_TEST_WORDS\",\n friendlyName: \"No references to test or demo\",\n description: \"using test or demo words\",\n supportedFields: null,\n },\n [\"test\", \"demo\", \"beta version\", \"debug\"]\n);\n\nexport const curseWords: Rule = defineRule(\n {\n key: \"curse_words\",\n envName: \"RULE_CURSE_WORDS\",\n friendlyName: \"No curse words\",\n description: \"using curse words\",\n supportedFields: null,\n },\n (text: string): RuleResult => {\n // Simplified curse word detection\n const cursePatterns = [\n /\\bf+u+c+k+/i,\n /\\bs+h+i+t+/i,\n /\\ba+s+s+h+o+l+e+/i,\n /\\bb+i+t+c+h+/i,\n /\\bd+a+m+n+/i,\n /\\bh+e+l+l+\\b/i,\n /\\bc+r+a+p+/i,\n /\\bd+i+c+k+/i,\n /\\bp+i+s+s+/i,\n ];\n for (const pattern of cursePatterns) {\n if (pattern.test(text)) {\n return {\n passed: false,\n message: \"Curse words: inappropriate language detected\",\n };\n }\n }\n return { passed: true, message: \"\" };\n }\n);\n\nexport const unreachableUrls: Rule = defineRule(\n {\n key: \"unreachable_urls\",\n envName: \"RULE_UNREACHABLE_URLS\",\n friendlyName: \"No unreachable URLs\",\n description: \"using URLs that cannot be reached\",\n supportedFields: [\"supportUrl\", \"marketingUrl\", \"privacyUrl\"],\n },\n (text: string): RuleResult => {\n // This is meant to check URLs — skip if not a URL\n if (!text.startsWith(\"http://\") && !text.startsWith(\"https://\")) {\n return { passed: true, message: \"\" };\n }\n // URL reachability check would be async — this is a sync placeholder\n return { passed: true, message: \"\" };\n }\n);\n\nexport const copyrightDate: Rule = defineRule(\n {\n key: \"copyright_date\",\n envName: \"RULE_COPYRIGHT_DATE\",\n friendlyName: \"No out-of-date copyright\",\n description: \"using a copyright date that is not this year\",\n supportedFields: [\"copyright\"],\n },\n (text: string): RuleResult => {\n const currentYear = new Date().getFullYear();\n const yearMatch = text.match(/©?\\s*(\\d{4})/);\n if (yearMatch) {\n const year = parseInt(yearMatch[1], 10);\n if (year < currentYear - 1) {\n return {\n passed: false,\n message: `Copyright date: year ${year} may be outdated (current: ${currentYear})`,\n };\n }\n }\n return { passed: true, message: \"\" };\n }\n);\n\nexport const noPriceInTitle: Rule = defineRule(\n {\n key: \"no_price_in_title\",\n envName: \"RULE_NO_PRICE_IN_TITLE\",\n friendlyName: \"No price in title\",\n description: \"mentioning price in the app title\",\n supportedFields: [\"name\", \"subtitle\"],\n },\n (text: string): RuleResult => {\n if (/\\$\\d+|\\d+\\.\\d{2}|free|€\\d+|£\\d+/i.test(text)) {\n return { passed: false, message: \"No price in title: price reference found\" };\n }\n return { passed: true, message: \"\" };\n }\n);\n\n/**\n * `freeStuffIap`: flag IAP descriptions that mention \"free\", matching\n * Fastlane's `FreeStuffIAPRule` (free_stuff_iap_rule.rb).\n */\nexport const freeStuffIap = createWordMatchRule(\n {\n key: \"free_stuff_in_iap\",\n envName: \"RULE_FREE_STUFF_IN_IAP\",\n friendlyName: \"No words indicating your IAP is free\",\n description: \"using text indicating that your IAP is free\",\n supportedFields: [\"in_app_purchase\"],\n },\n [\"free\"]\n);\n\nexport function customText(words: string[]): Rule {\n return createWordMatchRule(\n {\n key: \"custom_text\",\n envName: \"RULE_CUSTOM_TEXT\",\n friendlyName: \"No custom text\",\n description: \"using custom disallowed text\",\n supportedFields: null,\n },\n words\n );\n}\n\nexport const ALL_RULES: Record<string, Rule> = {\n negativeAppleSentiment,\n placeholderText,\n otherPlatforms,\n futureFunctionality,\n testWords,\n curseWords,\n unreachableUrls,\n copyrightDate,\n noPriceInTitle,\n freeStuffIap,\n};\n","import type { AppStoreConnectClient } from \"../client/index.js\";\nimport { ALL_RULES, type Rule, type RuleResult } from \"./rules.js\";\n\nexport { ALL_RULES } from \"./rules.js\";\nexport type { Rule, RuleResult } from \"./rules.js\";\n\nexport interface PrecheckOptions {\n client: AppStoreConnectClient;\n bundleIdentifier: string;\n includeInAppPurchases?: boolean;\n rules?: PrecheckRule[];\n}\n\nexport interface PrecheckRule {\n name: string;\n level: \"error\" | \"warning\";\n}\n\nexport interface ValidationResult {\n passed: boolean;\n errors: ValidationIssue[];\n warnings: ValidationIssue[];\n}\n\nexport interface ValidationIssue {\n rule: string;\n message: string;\n field?: string;\n locale?: string;\n}\n\nexport async function validateMetadata(\n options: PrecheckOptions\n): Promise<ValidationResult> {\n const errors: ValidationIssue[] = [];\n const warnings: ValidationIssue[] = [];\n\n // Find app\n const app = await options.client.apps.findByBundleId(options.bundleIdentifier);\n if (!app) throw new Error(`App not found: ${options.bundleIdentifier}`);\n\n // Get latest version\n const versions = await options.client.appStoreVersions.listForApp(app.id, {\n filter: { platform: \"IOS\" },\n });\n\n if (versions.length === 0) {\n throw new Error(\"No app store version found\");\n }\n\n const version = versions[0];\n const localizations = await options.client.appStoreVersions.getLocalizations(version.id);\n\n // Determine which rules to run\n const ruleConfig = options.rules ?? Object.keys(ALL_RULES).map((name) => ({\n name,\n level: \"error\" as const,\n }));\n\n // Run rules against each localization\n for (const loc of localizations) {\n const locale = loc.attributes.locale;\n const fields: Record<string, string | null> = {\n description: loc.attributes.description,\n keywords: loc.attributes.keywords,\n whatsNew: loc.attributes.whatsNew,\n supportUrl: loc.attributes.supportUrl,\n marketingUrl: loc.attributes.marketingUrl,\n promotionalText: loc.attributes.promotionalText,\n };\n\n for (const [field, value] of Object.entries(fields)) {\n if (!value) continue;\n\n for (const ruleConfig_ of ruleConfig) {\n const rule = ALL_RULES[ruleConfig_.name];\n if (!rule) continue;\n\n // Respect the rule's supportedFields list (nil/null = applies to all).\n // Mirrors Fastlane precheck's `Rule#item_field_supported?`.\n const supported = rule.metadata?.supportedFields;\n if (supported && !supported.includes(field)) continue;\n\n const result = rule(value);\n if (!result.passed) {\n const issue: ValidationIssue = {\n rule: ruleConfig_.name,\n message: result.message,\n field,\n locale,\n };\n if (ruleConfig_.level === \"error\") {\n errors.push(issue);\n } else {\n warnings.push(issue);\n }\n }\n }\n }\n }\n\n // Check copyright on the version — only run copyright-supporting rules.\n if (version.attributes.copyright) {\n for (const ruleConfig_ of ruleConfig) {\n const rule = ALL_RULES[ruleConfig_.name];\n if (!rule) continue;\n const supported = rule.metadata?.supportedFields;\n if (supported && !supported.includes(\"copyright\")) continue;\n const result = rule(version.attributes.copyright);\n if (!result.passed) {\n const issue: ValidationIssue = {\n rule: ruleConfig_.name,\n message: result.message,\n field: \"copyright\",\n };\n if (ruleConfig_.level === \"error\") errors.push(issue);\n else warnings.push(issue);\n }\n }\n }\n\n return {\n passed: errors.length === 0,\n errors,\n warnings,\n };\n}\n","import { SignJWT, importPKCS8 } from \"jose\";\n\nexport interface TokenConfig {\n keyId: string;\n /** Issuer ID. When absent, the key is treated as an individual key (sub='user'). */\n issuerId?: string;\n privateKey: string;\n enterprise?: boolean;\n duration?: number;\n}\n\nconst MAX_TOKEN_DURATION = 1200;\nconst DEFAULT_TOKEN_DURATION = 500;\n\nexport class TokenManager {\n private config: TokenConfig;\n private currentToken: string | null = null;\n private expiresAt = 0;\n\n constructor(config: TokenConfig) {\n this.config = config;\n }\n\n async getToken(): Promise<string> {\n const now = Math.floor(Date.now() / 1000);\n if (this.currentToken && now < this.expiresAt - 30) {\n return this.currentToken;\n }\n return this.refresh();\n }\n\n async refresh(): Promise<string> {\n const duration = Math.min(\n this.config.duration ?? DEFAULT_TOKEN_DURATION,\n MAX_TOKEN_DURATION\n );\n const audience = this.config.enterprise\n ? \"apple-developer-enterprise-v1\"\n : \"appstoreconnect-v1\";\n\n const key = await importPKCS8(this.config.privateKey, \"ES256\");\n const now = Math.floor(Date.now() / 1000);\n\n // Mirror Fastlane's Spaceship::ConnectAPI::Token#refresh! behavior:\n // when issuerId is provided → set `iss`; otherwise treat as individual key\n // and set `sub: 'user'`.\n // https://developer.apple.com/documentation/appstoreconnectapi/generating_tokens_for_api_requests#4313913\n let jwt = new SignJWT(this.config.issuerId ? {} : { sub: \"user\" })\n .setProtectedHeader({\n alg: \"ES256\",\n kid: this.config.keyId,\n typ: \"JWT\",\n })\n .setIssuedAt(now - 60)\n .setExpirationTime(now + duration)\n .setAudience(audience);\n\n if (this.config.issuerId) {\n jwt = jwt.setIssuer(this.config.issuerId);\n }\n\n this.currentToken = await jwt.sign(key);\n\n this.expiresAt = now + duration;\n return this.currentToken;\n }\n\n invalidate(): void {\n this.currentToken = null;\n this.expiresAt = 0;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { CertificateType } from \"../types/enums.js\";\n\nexport class CertificatesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n certificateType?: CertificateType | CertificateType[];\n serialNumber?: string;\n displayName?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<Certificate[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { certificates: params.fields.join(\",\") };\n }\n return this.http.all<Certificate>(\"/v1/certificates\", listParams);\n }\n\n async get(id: string): Promise<Certificate> {\n const response = await this.http.get<JsonApiResponse<Certificate>>(\n `/v1/certificates/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n certificateType: CertificateType;\n csrContent: string;\n }): Promise<Certificate> {\n const response = await this.http.post<JsonApiResponse<Certificate>>(\n \"/v1/certificates\",\n {\n data: {\n type: \"certificates\",\n attributes: {\n certificateType: params.certificateType,\n csrContent: params.csrContent,\n },\n },\n }\n );\n return response.data;\n }\n\n async revoke(id: string): Promise<void> {\n await this.http.delete(`/v1/certificates/${id}`);\n }\n\n async *paginate(params?: {\n filter?: {\n certificateType?: CertificateType | CertificateType[];\n };\n limit?: number;\n }): AsyncGenerator<Certificate> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n yield* this.http.paginate<Certificate>(\"/v1/certificates\", listParams);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Profile } from \"../types/profile.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { ProfileType, ProfileState } from \"../types/enums.js\";\n\nexport class ProfilesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n profileType?: ProfileType | ProfileType[];\n profileState?: ProfileState;\n name?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { profiles?: string[]; certificates?: string[]; devices?: string[]; bundleIds?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<Profile[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<Profile>(\"/v1/profiles\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<Profile> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<Profile>>(\n `/v1/profiles/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n name: string;\n profileType: ProfileType;\n bundleIdId: string;\n certificateIds: string[];\n deviceIds?: string[];\n }): Promise<Profile> {\n const relationships: Record<string, unknown> = {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n certificates: {\n data: params.certificateIds.map((id) => ({\n type: \"certificates\",\n id,\n })),\n },\n };\n\n if (params.deviceIds && params.deviceIds.length > 0) {\n relationships.devices = {\n data: params.deviceIds.map((id) => ({\n type: \"devices\",\n id,\n })),\n };\n }\n\n const response = await this.http.post<JsonApiResponse<Profile>>(\n \"/v1/profiles\",\n {\n data: {\n type: \"profiles\",\n attributes: {\n name: params.name,\n profileType: params.profileType,\n },\n relationships,\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/profiles/${id}`);\n }\n\n async getCertificates(profileId: string): Promise<Certificate[]> {\n return this.http.all<Certificate>(\n `/v1/profiles/${profileId}/certificates`\n );\n }\n\n async getDevices(profileId: string): Promise<Device[]> {\n return this.http.all<Device>(`/v1/profiles/${profileId}/devices`);\n }\n\n async getBundleId(profileId: string): Promise<BundleId> {\n const response = await this.http.get<JsonApiResponse<BundleId>>(\n `/v1/profiles/${profileId}/bundleId`\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { BundleIdCapability } from \"../types/capability.js\";\nimport type { BundleIdPlatform } from \"../types/enums.js\";\n\nexport class BundleIdsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n identifier?: string;\n name?: string;\n platform?: BundleIdPlatform;\n seedId?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { bundleIds?: string[]; bundleIdCapabilities?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<BundleId[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<BundleId>(\"/v1/bundleIds\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<BundleId> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<BundleId>>(\n `/v1/bundleIds/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n identifier: string;\n name: string;\n platform: BundleIdPlatform;\n seedId?: string;\n }): Promise<BundleId> {\n const attributes: Record<string, unknown> = {\n identifier: params.identifier,\n name: params.name,\n platform: params.platform,\n };\n if (params.seedId) attributes.seedId = params.seedId;\n\n const response = await this.http.post<JsonApiResponse<BundleId>>(\n \"/v1/bundleIds\",\n {\n data: {\n type: \"bundleIds\",\n attributes,\n },\n }\n );\n return response.data;\n }\n\n async find(identifier: string): Promise<BundleId | null> {\n const results = await this.list({\n filter: { identifier },\n limit: 1,\n });\n return results[0] ?? null;\n }\n\n async getCapabilities(bundleIdId: string): Promise<BundleIdCapability[]> {\n return this.http.all<BundleIdCapability>(\n `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n );\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { DeviceStatus, Platform } from \"../types/enums.js\";\n\nexport class DevicesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n name?: string;\n platform?: Platform | Platform[];\n status?: DeviceStatus;\n udid?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<Device[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { devices: params.fields.join(\",\") };\n }\n return this.http.all<Device>(\"/v1/devices\", listParams);\n }\n\n async get(id: string): Promise<Device> {\n const response = await this.http.get<JsonApiResponse<Device>>(\n `/v1/devices/${id}`\n );\n return response.data;\n }\n\n async register(params: {\n name: string;\n platform: Platform;\n udid: string;\n }): Promise<Device> {\n const response = await this.http.post<JsonApiResponse<Device>>(\n \"/v1/devices\",\n {\n data: {\n type: \"devices\",\n attributes: {\n name: params.name,\n platform: params.platform,\n udid: params.udid,\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n params: { name?: string; status?: DeviceStatus }\n ): Promise<Device> {\n const response = await this.http.patch<JsonApiResponse<Device>>(\n `/v1/devices/${id}`,\n {\n data: {\n type: \"devices\",\n id,\n attributes: params,\n },\n }\n );\n return response.data;\n }\n\n async findByUdid(udid: string): Promise<Device | null> {\n const results = await this.list({ filter: { udid }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { App } from \"../types/app.js\";\n\nexport class AppsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n bundleId?: string;\n name?: string;\n sku?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { apps?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<App[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<App>(\"/v1/apps\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<App> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<App>>(\n `/v1/apps/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async findByBundleId(bundleId: string): Promise<App | null> {\n const results = await this.list({\n filter: { bundleId },\n limit: 1,\n });\n return results[0] ?? null;\n }\n\n /**\n * Create an App Store Connect **app record** (the thing that shows up\n * under \"My Apps\" and that TestFlight / App Store uploads require).\n *\n * This is distinct from registering an App ID in the Developer Portal —\n * you need BOTH. The Developer Portal App ID unlocks provisioning\n * profiles and entitlements; the App Store Connect app record unlocks\n * uploads. `upload_to_testflight` fails with \"Couldn't find app\n * 'com.foo.bar' on the account…\" when this record is missing.\n *\n * `bundleIdId` is the REST API primary key of the bundle id resource\n * (not the identifier string) — fetch it via `bundleIds.find(identifier)`\n * or from the response of `bundleIds.create()`.\n *\n * `sku` is an arbitrary unique string Apple uses to identify the app in\n * their internal records. If you don't have a meaningful one, pass the\n * bundle identifier itself or append a timestamp for uniqueness.\n */\n async create(params: {\n bundleIdentifier: string;\n bundleIdId: string;\n appName: string;\n sku: string;\n primaryLocale?: string;\n }): Promise<App> {\n const response = await this.http.post<JsonApiResponse<App>>(\"/v1/apps\", {\n data: {\n type: \"apps\",\n attributes: {\n bundleId: params.bundleIdentifier,\n name: params.appName,\n sku: params.sku,\n primaryLocale: params.primaryLocale ?? \"en-US\",\n },\n relationships: {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n },\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type {\n Build,\n BetaBuildLocalization,\n BuildBetaDetail,\n PreReleaseVersion,\n} from \"../types/build.js\";\n\nexport class BuildsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n version?: string;\n processingState?: string;\n \"preReleaseVersion.version\"?: string;\n expired?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { builds?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<Build[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<Build>(\"/v1/builds\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<Build> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<Build>>(\n `/v1/builds/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async getBetaDetail(buildId: string): Promise<BuildBetaDetail> {\n const response = await this.http.get<JsonApiResponse<BuildBetaDetail>>(\n `/v1/builds/${buildId}/buildBetaDetail`\n );\n return response.data;\n }\n\n async getLocalizations(buildId: string): Promise<BetaBuildLocalization[]> {\n return this.http.all<BetaBuildLocalization>(\n `/v1/builds/${buildId}/betaBuildLocalizations`\n );\n }\n\n async createLocalization(params: {\n buildId: string;\n locale: string;\n whatsNew: string;\n }): Promise<BetaBuildLocalization> {\n const response = await this.http.post<\n JsonApiResponse<BetaBuildLocalization>\n >(\"/v1/betaBuildLocalizations\", {\n data: {\n type: \"betaBuildLocalizations\",\n attributes: {\n locale: params.locale,\n whatsNew: params.whatsNew,\n },\n relationships: {\n build: {\n data: { type: \"builds\", id: params.buildId },\n },\n },\n },\n });\n return response.data;\n }\n\n async updateLocalization(\n localizationId: string,\n params: { whatsNew: string }\n ): Promise<BetaBuildLocalization> {\n const response = await this.http.patch<\n JsonApiResponse<BetaBuildLocalization>\n >(`/v1/betaBuildLocalizations/${localizationId}`, {\n data: {\n type: \"betaBuildLocalizations\",\n id: localizationId,\n attributes: {\n whatsNew: params.whatsNew,\n },\n },\n });\n return response.data;\n }\n\n async getPreReleaseVersion(buildId: string): Promise<PreReleaseVersion | null> {\n try {\n const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n `/v1/builds/${buildId}/preReleaseVersion`\n );\n return response.data;\n } catch {\n return null;\n }\n }\n\n async submitForBetaReview(buildId: string): Promise<void> {\n await this.http.post(\"/v1/betaAppReviewSubmissions\", {\n data: {\n type: \"betaAppReviewSubmissions\",\n relationships: {\n build: {\n data: { type: \"builds\", id: buildId },\n },\n },\n },\n });\n }\n\n async expireBuild(buildId: string): Promise<void> {\n await this.http.patch(`/v1/builds/${buildId}`, {\n data: {\n type: \"builds\",\n id: buildId,\n attributes: {\n expired: true,\n },\n },\n });\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BetaGroup } from \"../types/build.js\";\n\nexport class BetaGroupsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n name?: string;\n isInternalGroup?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<BetaGroup[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { betaGroups: params.fields.join(\",\") };\n }\n return this.http.all<BetaGroup>(\"/v1/betaGroups\", listParams);\n }\n\n async get(id: string): Promise<BetaGroup> {\n const response = await this.http.get<JsonApiResponse<BetaGroup>>(\n `/v1/betaGroups/${id}`\n );\n return response.data;\n }\n\n async listForApp(appId: string): Promise<BetaGroup[]> {\n return this.http.all<BetaGroup>(`/v1/apps/${appId}/betaGroups`);\n }\n\n async addBuilds(groupId: string, buildIds: string[]): Promise<void> {\n await this.http.post(`/v1/betaGroups/${groupId}/relationships/builds`, {\n data: buildIds.map((id) => ({ type: \"builds\", id })),\n });\n }\n\n async removeBuilds(groupId: string, buildIds: string[]): Promise<void> {\n await this.http.request(\n `/v1/betaGroups/${groupId}/relationships/builds`,\n {\n method: \"DELETE\",\n body: {\n data: buildIds.map((id) => ({ type: \"builds\", id })),\n },\n }\n );\n }\n\n async findByName(appId: string, name: string): Promise<BetaGroup | null> {\n const groups = await this.listForApp(appId);\n return groups.find((g) => g.attributes.name === name) ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\nimport type {\n BundleIdCapability,\n CapabilitySettingInput,\n} from \"../types/capability.js\";\nimport type { CapabilityType } from \"../types/enums.js\";\n\nexport class CapabilitiesResource {\n constructor(private http: RequestClient) {}\n\n async listForBundleId(bundleIdId: string): Promise<BundleIdCapability[]> {\n return this.http.all<BundleIdCapability>(\n `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n );\n }\n\n async enable(params: {\n bundleIdId: string;\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n }): Promise<BundleIdCapability> {\n const attributes: Record<string, unknown> = {\n capabilityType: params.capabilityType,\n };\n if (params.settings) {\n attributes.settings = params.settings;\n }\n\n const response = await this.http.post<\n JsonApiResponse<BundleIdCapability>\n >(\"/v1/bundleIdCapabilities\", {\n data: {\n type: \"bundleIdCapabilities\",\n attributes,\n relationships: {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n },\n },\n });\n return response.data;\n }\n\n async update(\n capabilityId: string,\n params: {\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n }\n ): Promise<BundleIdCapability> {\n const attributes: Record<string, unknown> = {\n capabilityType: params.capabilityType,\n };\n if (params.settings) {\n attributes.settings = params.settings;\n }\n\n const response = await this.http.patch<\n JsonApiResponse<BundleIdCapability>\n >(`/v1/bundleIdCapabilities/${capabilityId}`, {\n data: {\n type: \"bundleIdCapabilities\",\n id: capabilityId,\n attributes,\n },\n });\n return response.data;\n }\n\n async disable(capabilityId: string): Promise<void> {\n await this.http.delete(`/v1/bundleIdCapabilities/${capabilityId}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { AppStoreVersionState, Platform, ReleaseType } from \"../types/enums.js\";\n\nexport interface AppStoreVersion {\n id: string;\n type: \"appStoreVersions\";\n attributes: {\n platform: Platform;\n versionString: string;\n appStoreState: AppStoreVersionState;\n copyright: string | null;\n releaseType: ReleaseType | null;\n earliestReleaseDate: string | null;\n downloadable: boolean;\n createdDate: string;\n };\n relationships?: {\n app?: { data: { type: \"apps\"; id: string } };\n build?: { data: { type: \"builds\"; id: string } | null };\n appStoreVersionLocalizations?: {\n data: Array<{ type: \"appStoreVersionLocalizations\"; id: string }>;\n };\n };\n}\n\nexport interface AppStoreVersionLocalization {\n id: string;\n type: \"appStoreVersionLocalizations\";\n attributes: {\n description: string | null;\n locale: string;\n keywords: string | null;\n marketingUrl: string | null;\n promotionalText: string | null;\n supportUrl: string | null;\n whatsNew: string | null;\n };\n}\n\nexport class AppStoreVersionsResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(\n appId: string,\n params?: {\n filter?: { appStoreState?: AppStoreVersionState | AppStoreVersionState[]; platform?: Platform };\n include?: string;\n limit?: number;\n }\n ): Promise<AppStoreVersion[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppStoreVersion>(\n `/v1/apps/${appId}/appStoreVersions`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppStoreVersion> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppStoreVersion>>(\n `/v1/appStoreVersions/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n appId: string;\n versionString: string;\n platform: Platform;\n releaseType?: ReleaseType;\n earliestReleaseDate?: string;\n copyright?: string;\n }): Promise<AppStoreVersion> {\n const attributes: Record<string, unknown> = {\n versionString: params.versionString,\n platform: params.platform,\n };\n if (params.releaseType) attributes.releaseType = params.releaseType;\n if (params.earliestReleaseDate) attributes.earliestReleaseDate = params.earliestReleaseDate;\n if (params.copyright) attributes.copyright = params.copyright;\n\n const response = await this.http.post<JsonApiResponse<AppStoreVersion>>(\n \"/v1/appStoreVersions\",\n {\n data: {\n type: \"appStoreVersions\",\n attributes,\n relationships: {\n app: {\n data: { type: \"apps\", id: params.appId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n params: {\n versionString?: string;\n copyright?: string;\n releaseType?: ReleaseType;\n earliestReleaseDate?: string | null;\n }\n ): Promise<AppStoreVersion> {\n const response = await this.http.patch<JsonApiResponse<AppStoreVersion>>(\n `/v1/appStoreVersions/${id}`,\n {\n data: {\n type: \"appStoreVersions\",\n id,\n attributes: params,\n },\n }\n );\n return response.data;\n }\n\n async setBuild(versionId: string, buildId: string): Promise<void> {\n await this.http.patch(`/v1/appStoreVersions/${versionId}/relationships/build`, {\n data: { type: \"builds\", id: buildId },\n });\n }\n\n async getLocalizations(versionId: string): Promise<AppStoreVersionLocalization[]> {\n return this.http.all<AppStoreVersionLocalization>(\n `/v1/appStoreVersions/${versionId}/appStoreVersionLocalizations`\n );\n }\n\n async createLocalization(params: {\n versionId: string;\n locale: string;\n description?: string;\n keywords?: string;\n marketingUrl?: string;\n promotionalText?: string;\n supportUrl?: string;\n whatsNew?: string;\n }): Promise<AppStoreVersionLocalization> {\n const { versionId, ...attributes } = params;\n const response = await this.http.post<\n JsonApiResponse<AppStoreVersionLocalization>\n >(\"/v1/appStoreVersionLocalizations\", {\n data: {\n type: \"appStoreVersionLocalizations\",\n attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: versionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async updateLocalization(\n localizationId: string,\n params: {\n description?: string;\n keywords?: string;\n marketingUrl?: string;\n promotionalText?: string;\n supportUrl?: string;\n whatsNew?: string;\n }\n ): Promise<AppStoreVersionLocalization> {\n const response = await this.http.patch<\n JsonApiResponse<AppStoreVersionLocalization>\n >(`/v1/appStoreVersionLocalizations/${localizationId}`, {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: localizationId,\n attributes: params,\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppScreenshotSet {\n id: string;\n type: \"appScreenshotSets\";\n attributes: {\n screenshotDisplayType: string;\n };\n}\n\nexport interface AppScreenshot {\n id: string;\n type: \"appScreenshots\";\n attributes: {\n fileSize: number;\n fileName: string;\n sourceFileChecksum: string | null;\n imageAsset: {\n templateUrl: string;\n width: number;\n height: number;\n } | null;\n assetToken: string | null;\n assetType: string | null;\n uploadOperations: UploadOperation[] | null;\n assetDeliveryState: {\n state: string;\n errors: unknown[];\n } | null;\n };\n}\n\nexport interface UploadOperation {\n method: string;\n url: string;\n length: number;\n offset: number;\n requestHeaders: Array<{ name: string; value: string }>;\n}\n\nexport class AppScreenshotsResource {\n constructor(private http: RequestClient) {}\n\n async listSetsForLocalization(\n localizationId: string\n ): Promise<AppScreenshotSet[]> {\n return this.http.all<AppScreenshotSet>(\n `/v1/appStoreVersionLocalizations/${localizationId}/appScreenshotSets`\n );\n }\n\n async createSet(params: {\n localizationId: string;\n screenshotDisplayType: string;\n }): Promise<AppScreenshotSet> {\n const response = await this.http.post<\n JsonApiResponse<AppScreenshotSet>\n >(\"/v1/appScreenshotSets\", {\n data: {\n type: \"appScreenshotSets\",\n attributes: {\n screenshotDisplayType: params.screenshotDisplayType,\n },\n relationships: {\n appStoreVersionLocalization: {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: params.localizationId,\n },\n },\n },\n },\n });\n return response.data;\n }\n\n async listScreenshots(setId: string): Promise<AppScreenshot[]> {\n return this.http.all<AppScreenshot>(\n `/v1/appScreenshotSets/${setId}/appScreenshots`\n );\n }\n\n async reserveScreenshot(params: {\n setId: string;\n fileName: string;\n fileSize: number;\n }): Promise<AppScreenshot> {\n const response = await this.http.post<\n JsonApiResponse<AppScreenshot>\n >(\"/v1/appScreenshots\", {\n data: {\n type: \"appScreenshots\",\n attributes: {\n fileName: params.fileName,\n fileSize: params.fileSize,\n },\n relationships: {\n appScreenshotSet: {\n data: { type: \"appScreenshotSets\", id: params.setId },\n },\n },\n },\n });\n return response.data;\n }\n\n async commitScreenshot(\n screenshotId: string,\n params: { sourceFileChecksum: string; uploaded: boolean }\n ): Promise<AppScreenshot> {\n const response = await this.http.patch<\n JsonApiResponse<AppScreenshot>\n >(`/v1/appScreenshots/${screenshotId}`, {\n data: {\n type: \"appScreenshots\",\n id: screenshotId,\n attributes: {\n sourceFileChecksum: params.sourceFileChecksum,\n uploaded: params.uploaded,\n },\n },\n });\n return response.data;\n }\n\n async deleteScreenshot(screenshotId: string): Promise<void> {\n await this.http.delete(`/v1/appScreenshots/${screenshotId}`);\n }\n\n async deleteSet(setId: string): Promise<void> {\n await this.http.delete(`/v1/appScreenshotSets/${setId}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface ReviewSubmission {\n id: string;\n type: \"reviewSubmissions\";\n attributes: {\n state: string;\n submittedDate: string | null;\n platform: string;\n };\n}\n\nexport interface AppStoreVersionSubmission {\n id: string;\n type: \"appStoreVersionSubmissions\";\n}\n\nexport class ReviewSubmissionsResource {\n constructor(private http: RequestClient) {}\n\n async submitVersion(versionId: string): Promise<AppStoreVersionSubmission> {\n const response = await this.http.post<\n JsonApiResponse<AppStoreVersionSubmission>\n >(\"/v1/appStoreVersionSubmissions\", {\n data: {\n type: \"appStoreVersionSubmissions\",\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: versionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async createReviewSubmission(params: {\n appId: string;\n platform: string;\n }): Promise<ReviewSubmission> {\n const response = await this.http.post<\n JsonApiResponse<ReviewSubmission>\n >(\"/v1/reviewSubmissions\", {\n data: {\n type: \"reviewSubmissions\",\n attributes: {\n platform: params.platform,\n },\n relationships: {\n app: {\n data: { type: \"apps\", id: params.appId },\n },\n },\n },\n });\n return response.data;\n }\n\n async confirmReviewSubmission(submissionId: string): Promise<ReviewSubmission> {\n const response = await this.http.patch<\n JsonApiResponse<ReviewSubmission>\n >(`/v1/reviewSubmissions/${submissionId}`, {\n data: {\n type: \"reviewSubmissions\",\n id: submissionId,\n attributes: {\n submitted: true,\n },\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\n/**\n * App Info is the metadata container that holds an app's categories, age\n * ratings, and localisations for a single submission cycle. Ported from\n * `spaceship/connect_api/models/app_info.rb`.\n */\nexport interface AppInfoAttributes {\n appStoreState?: string | null;\n state?: string | null;\n appStoreAgeRating?: string | null;\n brazilAgeRating?: string | null;\n kidsAgeBand?: string | null;\n}\n\nexport type AppInfo = JsonApiResource<\"appInfos\", AppInfoAttributes>;\n\nexport class AppInfosResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n include?: string;\n limit?: number;\n }): Promise<AppInfo[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppInfo>(`/v1/apps/${appId}/appInfos`, listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppInfo> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppInfo>>(\n `/v1/appInfos/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async update(\n id: string,\n relationships?: Record<string, { type: string; id: string } | null>\n ): Promise<AppInfo> {\n const response = await this.http.patch<JsonApiResponse<AppInfo>>(\n `/v1/appInfos/${id}`,\n {\n data: {\n type: \"appInfos\",\n id,\n ...(relationships\n ? {\n relationships: Object.fromEntries(\n Object.entries(relationships).map(([k, v]) => [k, { data: v }])\n ),\n }\n : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appInfos/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppInfoLocalizationAttributes {\n locale: string;\n name?: string | null;\n subtitle?: string | null;\n privacyPolicyUrl?: string | null;\n privacyChoicesUrl?: string | null;\n privacyPolicyText?: string | null;\n}\n\nexport type AppInfoLocalization = JsonApiResource<\n \"appInfoLocalizations\",\n AppInfoLocalizationAttributes\n>;\n\nexport class AppInfoLocalizationsResource {\n constructor(private http: RequestClient) {}\n\n async listForAppInfo(appInfoId: string, params?: {\n limit?: number;\n }): Promise<AppInfoLocalization[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppInfoLocalization>(\n `/v1/appInfos/${appInfoId}/appInfoLocalizations`,\n listParams\n );\n }\n\n async get(id: string): Promise<AppInfoLocalization> {\n const response = await this.http.get<JsonApiResponse<AppInfoLocalization>>(\n `/v1/appInfoLocalizations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appInfoId: string;\n attributes: AppInfoLocalizationAttributes;\n }): Promise<AppInfoLocalization> {\n const response = await this.http.post<JsonApiResponse<AppInfoLocalization>>(\n \"/v1/appInfoLocalizations\",\n {\n data: {\n type: \"appInfoLocalizations\",\n attributes: params.attributes,\n relationships: {\n appInfo: { data: { type: \"appInfos\", id: params.appInfoId } },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AppInfoLocalizationAttributes>\n ): Promise<AppInfoLocalization> {\n const response = await this.http.patch<JsonApiResponse<AppInfoLocalization>>(\n `/v1/appInfoLocalizations/${id}`,\n { data: { type: \"appInfoLocalizations\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appInfoLocalizations/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppStoreReviewDetailAttributes {\n contactFirstName?: string | null;\n contactLastName?: string | null;\n contactPhone?: string | null;\n contactEmail?: string | null;\n demoAccountName?: string | null;\n demoAccountPassword?: string | null;\n demoAccountRequired?: boolean | null;\n notes?: string | null;\n}\n\nexport type AppStoreReviewDetail = JsonApiResource<\n \"appStoreReviewDetails\",\n AppStoreReviewDetailAttributes\n>;\n\nexport class AppStoreReviewDetailsResource {\n constructor(private http: RequestClient) {}\n\n async getForAppStoreVersion(\n appStoreVersionId: string\n ): Promise<AppStoreReviewDetail> {\n const response = await this.http.get<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreVersions/${appStoreVersionId}/appStoreReviewDetail`);\n return response.data;\n }\n\n async get(id: string): Promise<AppStoreReviewDetail> {\n const response = await this.http.get<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreReviewDetails/${id}`);\n return response.data;\n }\n\n async create(params: {\n appStoreVersionId: string;\n attributes: AppStoreReviewDetailAttributes;\n }): Promise<AppStoreReviewDetail> {\n const response = await this.http.post<\n JsonApiResponse<AppStoreReviewDetail>\n >(\"/v1/appStoreReviewDetails\", {\n data: {\n type: \"appStoreReviewDetails\",\n attributes: params.attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AppStoreReviewDetailAttributes>\n ): Promise<AppStoreReviewDetail> {\n const response = await this.http.patch<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreReviewDetails/${id}`, {\n data: { type: \"appStoreReviewDetails\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaTesterAttributes {\n firstName?: string | null;\n lastName?: string | null;\n email: string;\n inviteType?: \"EMAIL\" | \"PUBLIC_LINK\" | null;\n state?: string | null;\n}\n\nexport type BetaTester = JsonApiResource<\"betaTesters\", BetaTesterAttributes>;\n\nexport class BetaTestersResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n email?: string;\n firstName?: string;\n lastName?: string;\n inviteType?: string;\n apps?: string | string[];\n betaGroups?: string | string[];\n };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<BetaTester[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<BetaTester>(\"/v1/betaTesters\", listParams);\n }\n\n async get(id: string): Promise<BetaTester> {\n const response = await this.http.get<JsonApiResponse<BetaTester>>(\n `/v1/betaTesters/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n email: string;\n firstName?: string;\n lastName?: string;\n betaGroupIds?: string[];\n appIds?: string[];\n }): Promise<BetaTester> {\n const attributes: BetaTesterAttributes = {\n email: params.email,\n firstName: params.firstName,\n lastName: params.lastName,\n };\n const relationships: Record<string, { data: Array<{ type: string; id: string }> }> = {};\n if (params.betaGroupIds?.length) {\n relationships.betaGroups = {\n data: params.betaGroupIds.map((id) => ({ type: \"betaGroups\", id })),\n };\n }\n if (params.appIds?.length) {\n relationships.apps = {\n data: params.appIds.map((id) => ({ type: \"apps\", id })),\n };\n }\n const response = await this.http.post<JsonApiResponse<BetaTester>>(\n \"/v1/betaTesters\",\n {\n data: {\n type: \"betaTesters\",\n attributes,\n ...(Object.keys(relationships).length ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/betaTesters/${id}`);\n }\n\n async findByEmail(email: string): Promise<BetaTester | null> {\n const results = await this.list({ filter: { email }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaAppReviewSubmissionAttributes {\n betaReviewState?: string | null;\n submittedDate?: string | null;\n}\n\nexport type BetaAppReviewSubmission = JsonApiResource<\n \"betaAppReviewSubmissions\",\n BetaAppReviewSubmissionAttributes\n>;\n\nexport class BetaAppReviewSubmissionsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { build?: string | string[]; betaReviewState?: string };\n limit?: number;\n }): Promise<BetaAppReviewSubmission[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n return this.http.all<BetaAppReviewSubmission>(\n \"/v1/betaAppReviewSubmissions\",\n listParams\n );\n }\n\n async get(id: string): Promise<BetaAppReviewSubmission> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewSubmission>>(\n `/v1/betaAppReviewSubmissions/${id}`\n );\n return response.data;\n }\n\n async create(buildId: string): Promise<BetaAppReviewSubmission> {\n const response = await this.http.post<JsonApiResponse<BetaAppReviewSubmission>>(\n \"/v1/betaAppReviewSubmissions\",\n {\n data: {\n type: \"betaAppReviewSubmissions\",\n relationships: {\n build: { data: { type: \"builds\", id: buildId } },\n },\n },\n }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface BetaAppReviewDetailAttributes {\n contactFirstName?: string | null;\n contactLastName?: string | null;\n contactPhone?: string | null;\n contactEmail?: string | null;\n demoAccountName?: string | null;\n demoAccountPassword?: string | null;\n demoAccountRequired?: boolean | null;\n notes?: string | null;\n}\n\nexport type BetaAppReviewDetail = JsonApiResource<\n \"betaAppReviewDetails\",\n BetaAppReviewDetailAttributes\n>;\n\nexport class BetaAppReviewDetailsResource {\n constructor(private http: RequestClient) {}\n\n async getForApp(appId: string): Promise<BetaAppReviewDetail> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/apps/${appId}/betaAppReviewDetail`\n );\n return response.data;\n }\n\n async get(id: string): Promise<BetaAppReviewDetail> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/betaAppReviewDetails/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<BetaAppReviewDetailAttributes>\n ): Promise<BetaAppReviewDetail> {\n const response = await this.http.patch<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/betaAppReviewDetails/${id}`,\n { data: { type: \"betaAppReviewDetails\", id, attributes } }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport type InvitationType = \"EMAIL\" | \"PUBLIC_LINK\";\n\nexport interface BetaTesterInvitationAttributes {\n // Write-only resource: no stored attributes, just a creation side-effect.\n [key: string]: unknown;\n}\n\nexport type BetaTesterInvitation = JsonApiResource<\n \"betaTesterInvitations\",\n BetaTesterInvitationAttributes\n>;\n\nexport class BetaInvitationsResource {\n constructor(private http: RequestClient) {}\n\n /** Send a TestFlight invitation email for an existing tester + app. */\n async send(params: {\n appId: string;\n betaTesterId: string;\n }): Promise<BetaTesterInvitation> {\n const response = await this.http.post<JsonApiResponse<BetaTesterInvitation>>(\n \"/v1/betaTesterInvitations\",\n {\n data: {\n type: \"betaTesterInvitations\",\n relationships: {\n app: { data: { type: \"apps\", id: params.appId } },\n betaTester: { data: { type: \"betaTesters\", id: params.betaTesterId } },\n },\n },\n }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaLicenseAgreementAttributes {\n agreementText?: string | null;\n}\n\nexport type BetaLicenseAgreement = JsonApiResource<\n \"betaLicenseAgreements\",\n BetaLicenseAgreementAttributes\n>;\n\nexport class BetaLicensesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: { limit?: number }): Promise<BetaLicenseAgreement[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<BetaLicenseAgreement>(\n \"/v1/betaLicenseAgreements\",\n listParams\n );\n }\n\n async get(id: string): Promise<BetaLicenseAgreement> {\n const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n `/v1/betaLicenseAgreements/${id}`\n );\n return response.data;\n }\n\n async getForApp(appId: string): Promise<BetaLicenseAgreement> {\n const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n `/v1/apps/${appId}/betaLicenseAgreement`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<BetaLicenseAgreementAttributes>\n ): Promise<BetaLicenseAgreement> {\n const response = await this.http.patch<\n JsonApiResponse<BetaLicenseAgreement>\n >(`/v1/betaLicenseAgreements/${id}`, {\n data: { type: \"betaLicenseAgreements\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppPreviewAttributes {\n fileSize?: number | null;\n fileName?: string | null;\n sourceFileChecksum?: string | null;\n previewFrameTimeCode?: string | null;\n mimeType?: string | null;\n videoUrl?: string | null;\n previewImage?: { templateUrl?: string; width?: number; height?: number } | null;\n uploadOperations?: unknown[] | null;\n assetDeliveryState?: { state?: string } | null;\n uploaded?: boolean | null;\n}\n\nexport type AppPreview = JsonApiResource<\"appPreviews\", AppPreviewAttributes>;\n\nexport class AppPreviewsResource {\n constructor(private http: RequestClient) {}\n\n async get(id: string): Promise<AppPreview> {\n const response = await this.http.get<JsonApiResponse<AppPreview>>(\n `/v1/appPreviews/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appPreviewSetId: string;\n fileSize: number;\n fileName: string;\n previewFrameTimeCode?: string;\n mimeType?: string;\n }): Promise<AppPreview> {\n const { appPreviewSetId, ...rest } = params;\n const response = await this.http.post<JsonApiResponse<AppPreview>>(\n \"/v1/appPreviews\",\n {\n data: {\n type: \"appPreviews\",\n attributes: rest,\n relationships: {\n appPreviewSet: {\n data: { type: \"appPreviewSets\", id: appPreviewSetId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: { uploaded?: boolean; sourceFileChecksum?: string; previewFrameTimeCode?: string }\n ): Promise<AppPreview> {\n const response = await this.http.patch<JsonApiResponse<AppPreview>>(\n `/v1/appPreviews/${id}`,\n { data: { type: \"appPreviews\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appPreviews/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPreviewSetAttributes {\n previewType?: string | null;\n}\n\nexport type AppPreviewSet = JsonApiResource<\n \"appPreviewSets\",\n AppPreviewSetAttributes\n>;\n\nexport class AppPreviewSetsResource {\n constructor(private http: RequestClient) {}\n\n async listForLocalization(\n localizationId: string,\n params?: { limit?: number; include?: string }\n ): Promise<AppPreviewSet[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppPreviewSet>(\n `/v1/appStoreVersionLocalizations/${localizationId}/appPreviewSets`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppPreviewSet> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppPreviewSet>>(\n `/v1/appPreviewSets/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n appStoreVersionLocalizationId: string;\n previewType: string;\n }): Promise<AppPreviewSet> {\n const response = await this.http.post<JsonApiResponse<AppPreviewSet>>(\n \"/v1/appPreviewSets\",\n {\n data: {\n type: \"appPreviewSets\",\n attributes: { previewType: params.previewType },\n relationships: {\n appStoreVersionLocalization: {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: params.appStoreVersionLocalizationId,\n },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appPreviewSets/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPriceAttributes {\n startDate?: string | null;\n}\n\nexport type AppPrice = JsonApiResource<\"appPrices\", AppPriceAttributes>;\n\nexport class AppPricesResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n include?: string;\n limit?: number;\n }): Promise<AppPrice[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppPrice>(`/v1/apps/${appId}/prices`, listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppPrice> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppPrice>>(\n `/v1/appPrices/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface TerritoryAttributes {\n currency?: string | null;\n}\n\nexport type Territory = JsonApiResource<\"territories\", TerritoryAttributes>;\n\nexport class TerritoriesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: { limit?: number }): Promise<Territory[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<Territory>(\"/v1/territories\", listParams);\n }\n\n async get(id: string): Promise<Territory> {\n const response = await this.http.get<JsonApiResponse<Territory>>(\n `/v1/territories/${id}`\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AgeRatingDeclarationAttributes {\n alcoholTobaccoOrDrugUseOrReferences?: string | null;\n contests?: string | null;\n gamblingSimulated?: string | null;\n medicalOrTreatmentInformation?: string | null;\n profanityOrCrudeHumor?: string | null;\n sexualContentGraphicAndNudity?: string | null;\n sexualContentOrNudity?: string | null;\n horrorOrFearThemes?: string | null;\n matureOrSuggestiveThemes?: string | null;\n unrestrictedWebAccess?: boolean | null;\n gamblingAndContests?: boolean | null;\n gambling?: string | null;\n violenceCartoonOrFantasy?: string | null;\n violenceRealistic?: string | null;\n violenceRealisticProlongedGraphicOrSadistic?: string | null;\n kidsAgeBand?: string | null;\n seventeenPlus?: boolean | null;\n}\n\nexport type AgeRatingDeclaration = JsonApiResource<\n \"ageRatingDeclarations\",\n AgeRatingDeclarationAttributes\n>;\n\nexport class AgeRatingDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async get(id: string): Promise<AgeRatingDeclaration> {\n const response = await this.http.get<JsonApiResponse<AgeRatingDeclaration>>(\n `/v1/ageRatingDeclarations/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AgeRatingDeclarationAttributes>\n ): Promise<AgeRatingDeclaration> {\n const response = await this.http.patch<\n JsonApiResponse<AgeRatingDeclaration>\n >(`/v1/ageRatingDeclarations/${id}`, {\n data: { type: \"ageRatingDeclarations\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppCategoryAttributes {\n platforms?: string[] | null;\n}\n\nexport type AppCategory = JsonApiResource<\"appCategories\", AppCategoryAttributes>;\n\nexport class AppCategoriesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { platforms?: string };\n include?: string;\n limit?: number;\n }): Promise<AppCategory[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppCategory>(\"/v1/appCategories\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppCategory> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppCategory>>(\n `/v1/appCategories/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppEncryptionDeclarationAttributes {\n appEncryptionDeclarationState?: string | null;\n createdDate?: string | null;\n codeValue?: string | null;\n usesEncryption?: boolean | null;\n exempt?: boolean | null;\n containsProprietaryCryptography?: boolean | null;\n containsThirdPartyCryptography?: boolean | null;\n availableOnFrenchStore?: boolean | null;\n platform?: string | null;\n uploadedDate?: string | null;\n documentUrl?: string | null;\n documentName?: string | null;\n documentType?: string | null;\n}\n\nexport type AppEncryptionDeclaration = JsonApiResource<\n \"appEncryptionDeclarations\",\n AppEncryptionDeclarationAttributes\n>;\n\nexport class AppEncryptionDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { app?: string; platform?: string };\n limit?: number;\n }): Promise<AppEncryptionDeclaration[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppEncryptionDeclaration>(\n \"/v1/appEncryptionDeclarations\",\n listParams\n );\n }\n\n async get(id: string): Promise<AppEncryptionDeclaration> {\n const response = await this.http.get<\n JsonApiResponse<AppEncryptionDeclaration>\n >(`/v1/appEncryptionDeclarations/${id}`);\n return response.data;\n }\n\n async assignToBuild(params: {\n declarationId: string;\n buildIds: string[];\n }): Promise<void> {\n await this.http.post(\n `/v1/appEncryptionDeclarations/${params.declarationId}/relationships/builds`,\n { data: params.buildIds.map((id) => ({ type: \"builds\", id })) }\n );\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface IdfaDeclarationAttributes {\n honorsLimitedAdTracking?: boolean | null;\n servesAds?: boolean | null;\n attributesActionWithPreviousAd?: boolean | null;\n attributesAppInstallationToPreviousAd?: boolean | null;\n}\n\nexport type IdfaDeclaration = JsonApiResource<\n \"idfaDeclarations\",\n IdfaDeclarationAttributes\n>;\n\nexport class IdfaDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async getForAppStoreVersion(\n appStoreVersionId: string\n ): Promise<IdfaDeclaration> {\n const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n `/v1/appStoreVersions/${appStoreVersionId}/idfaDeclaration`\n );\n return response.data;\n }\n\n async get(id: string): Promise<IdfaDeclaration> {\n const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n `/v1/idfaDeclarations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appStoreVersionId: string;\n attributes: IdfaDeclarationAttributes;\n }): Promise<IdfaDeclaration> {\n const response = await this.http.post<JsonApiResponse<IdfaDeclaration>>(\n \"/v1/idfaDeclarations\",\n {\n data: {\n type: \"idfaDeclarations\",\n attributes: params.attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<IdfaDeclarationAttributes>\n ): Promise<IdfaDeclaration> {\n const response = await this.http.patch<JsonApiResponse<IdfaDeclaration>>(\n `/v1/idfaDeclarations/${id}`,\n { data: { type: \"idfaDeclarations\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/idfaDeclarations/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface PreReleaseVersionAttributes {\n version?: string | null;\n platform?: string | null;\n}\n\nexport type PreReleaseVersion = JsonApiResource<\n \"preReleaseVersions\",\n PreReleaseVersionAttributes\n>;\n\nexport class PreReleaseVersionsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n version?: string;\n platform?: string;\n \"builds.expired\"?: string;\n \"builds.processingState\"?: string;\n \"builds.version\"?: string;\n };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<PreReleaseVersion[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<PreReleaseVersion>(\n \"/v1/preReleaseVersions\",\n listParams\n );\n }\n\n async get(\n id: string,\n params?: { include?: string }\n ): Promise<PreReleaseVersion> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n `/v1/preReleaseVersions/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async findByVersion(params: {\n appId: string;\n version: string;\n platform?: string;\n }): Promise<PreReleaseVersion | null> {\n const filter: Record<string, string> = {\n app: params.appId,\n version: params.version,\n };\n if (params.platform) filter.platform = params.platform;\n const results = await this.list({ filter, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface ReviewSubmissionItemAttributes {\n state?: string | null;\n removed?: boolean | null;\n ready?: boolean | null;\n}\n\nexport type ReviewSubmissionItem = JsonApiResource<\n \"reviewSubmissionItems\",\n ReviewSubmissionItemAttributes\n>;\n\n// create() param → [relationship name, resource type]\nconst ITEM_RELATIONSHIPS: Record<string, [string, string]> = {\n appStoreVersionId: [\"appStoreVersion\", \"appStoreVersions\"],\n appCustomProductPageVersionId: [\"appCustomProductPageVersion\", \"appCustomProductPageVersions\"],\n appStoreVersionExperimentId: [\"appStoreVersionExperiment\", \"appStoreVersionExperiments\"],\n appStoreVersionExperimentV2Id: [\"appStoreVersionExperimentV2\", \"appStoreVersionExperiments\"],\n appEventId: [\"appEvent\", \"appEvents\"],\n appAssetLibraryImageId: [\"appAssetLibraryImage\", \"appAssetLibraryImages\"],\n appAssetLibraryVideoId: [\"appAssetLibraryVideo\", \"appAssetLibraryVideos\"],\n backgroundAssetVersionId: [\"backgroundAssetVersion\", \"backgroundAssetVersions\"],\n inAppPurchaseVersionId: [\"inAppPurchaseVersion\", \"inAppPurchaseVersions\"],\n subscriptionVersionId: [\"subscriptionVersion\", \"subscriptionVersions\"],\n subscriptionGroupVersionId: [\"subscriptionGroupVersion\", \"subscriptionGroupVersions\"],\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 /**\n * Add one item to a review submission. Besides versions, asset library\n * images and videos can be submitted on their own (ASC API 4.5.1) so\n * creative assets are approved ahead of a campaign.\n */\n async create(params: {\n reviewSubmissionId: string;\n appStoreVersionId?: string;\n appCustomProductPageVersionId?: string;\n appStoreVersionExperimentId?: string;\n appStoreVersionExperimentV2Id?: string;\n appEventId?: string;\n appAssetLibraryImageId?: string;\n appAssetLibraryVideoId?: string;\n backgroundAssetVersionId?: string;\n inAppPurchaseVersionId?: string;\n subscriptionVersionId?: string;\n subscriptionGroupVersionId?: 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 for (const [param, [relationship, type]] of Object.entries(ITEM_RELATIONSHIPS)) {\n const id = params[param as keyof typeof params];\n if (id) relationships[relationship] = { data: { type, id } };\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","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type {\n AppAssetLibraryAssetCategory,\n AppAssetLibraryFeature,\n AppAssetLibraryPlacementPlatform,\n AppAssetLibraryPlacementType,\n} from \"../types/enums.js\";\nimport type { AppAssetLibraryImage, AppAssetLibraryVideo } from \"./app-asset-library-assets.js\";\n\n/**\n * The App Asset Library (ASC API 4.5.1) — one per app. Images and videos are\n * uploaded into it once, then placed on any number of App Store surfaces\n * (version, custom product page, in-app event, product page test\n * localizations). Replaces the deprecated screenshot/preview sets.\n */\nexport type AppAssetLibrary = JsonApiResource<\"appAssetLibraries\", Record<string, never>>;\n\nexport interface AppAssetLibraryDimensions {\n minWidth: number;\n maxWidth: number;\n minHeight: number;\n maxHeight: number;\n}\n\nexport interface AppAssetLibraryImageSpec {\n specId: string;\n shortName?: string;\n aspectRatio?: string;\n dimensions: AppAssetLibraryDimensions;\n compatiblePlacementTypes: AppAssetLibraryPlacementType[];\n alphaAllowed?: boolean;\n fileExtensions?: string[];\n mimeTypes?: string[];\n maxFileSize?: number;\n universalAsset?: boolean;\n}\n\nexport interface AppAssetLibraryVideoSpec extends AppAssetLibraryImageSpec {\n audioRequired?: boolean;\n duration?: { min?: string; max?: string };\n frameRates?: Array<{ minFps?: number; maxFps?: number }>;\n}\n\nexport interface AppAssetLibraryRefDatumAttributes {\n features?: Array<{\n featureId: AppAssetLibraryFeature;\n placementPolicies?: Array<{\n placementType: AppAssetLibraryPlacementType;\n groupLimits?: Array<{ groupIds: string[]; maxCount: number }>;\n }>;\n }>;\n placementProfileGroups?: Array<{\n placementProfileGroupId: string;\n platform?: AppAssetLibraryPlacementPlatform;\n displayClassId?: string;\n }>;\n imageSpecs?: AppAssetLibraryImageSpec[];\n videoSpecs?: AppAssetLibraryVideoSpec[];\n placementTypes?: Array<{\n placementTypeId: AppAssetLibraryPlacementType;\n acceptsAssetCategories?: AppAssetLibraryAssetCategory[];\n specMappings?: Array<{ placementGroupId: string; specs: string[] }>;\n }>;\n displayClasses?: Array<{\n displayClassId: string;\n deviceFamily?: string;\n screenDimensions?: string[];\n }>;\n}\n\nexport type AppAssetLibraryRefDatum = JsonApiResource<\n \"appAssetLibraryRefData\",\n AppAssetLibraryRefDatumAttributes\n>;\n\nexport class AppAssetLibrariesResource {\n constructor(private http: RequestClient) {}\n\n async getForApp(appId: string): Promise<AppAssetLibrary> {\n const response = await this.http.get<JsonApiResponse<AppAssetLibrary>>(\n `/v1/apps/${appId}/assetLibrary`\n );\n return response.data;\n }\n\n async listImages(libraryId: string, params: ListParams = {}): Promise<AppAssetLibraryImage[]> {\n return this.http.all<AppAssetLibraryImage>(`/v1/appAssetLibraries/${libraryId}/images`, params);\n }\n\n async listVideos(libraryId: string, params: ListParams = {}): Promise<AppAssetLibraryVideo[]> {\n return this.http.all<AppAssetLibraryVideo>(`/v1/appAssetLibraries/${libraryId}/videos`, params);\n }\n\n /**\n * Specs, placement groups and limits. Apple adds placement groups (new\n * devices) without an API version bump, so read them from here rather than\n * hard-coding display types.\n */\n async refData(params: {\n features?: AppAssetLibraryFeature[];\n placementTypes?: AppAssetLibraryPlacementType[];\n placementProfileGroups?: string[];\n } = {}): Promise<AppAssetLibraryRefDatumAttributes> {\n const filter: Record<string, string[]> = {};\n if (params.features?.length) filter.features = params.features;\n if (params.placementTypes?.length) filter.placementTypes = params.placementTypes;\n if (params.placementProfileGroups?.length) filter.placementProfileGroups = params.placementProfileGroups;\n const data = await this.http.all<AppAssetLibraryRefDatum>(\"/v1/appAssetLibraryRefData\", { filter });\n return mergeRefData(data.map((d) => d.attributes));\n }\n}\n\nfunction mergeRefData(parts: AppAssetLibraryRefDatumAttributes[]): AppAssetLibraryRefDatumAttributes {\n const merged: Required<AppAssetLibraryRefDatumAttributes> = {\n features: [],\n placementProfileGroups: [],\n imageSpecs: [],\n videoSpecs: [],\n placementTypes: [],\n displayClasses: [],\n };\n for (const part of parts) {\n for (const key of Object.keys(merged) as Array<keyof typeof merged>) {\n (merged[key] as unknown[]).push(...((part[key] as unknown[] | undefined) ?? []));\n }\n }\n return merged;\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { AppAssetLibraryAssetCategory, AppAssetLibraryAssetState } from \"../types/enums.js\";\nimport type { UploadOperation } from \"./app-screenshots.js\";\nimport type { AppAssetLibraryPlacement } from \"./app-asset-library-placements.js\";\n\ninterface AssetAttributes {\n category?: AppAssetLibraryAssetCategory;\n fileName?: string;\n fileSize?: number;\n referenceName?: string | null;\n specId?: string | null;\n state?: AppAssetLibraryAssetState;\n stateDetails?: Array<{ code?: string; message?: string }> | null;\n uploadOperations?: UploadOperation[] | null;\n createdDate?: string;\n lastModifiedDate?: string;\n}\n\nexport interface AppAssetLibraryImageAttributes extends AssetAttributes {\n imageAsset?: { templateUrl: string; width: number; height: number } | null;\n}\n\nexport interface AppAssetLibraryVideoAttributes extends AssetAttributes {\n previewFrameTimeCode?: string | null;\n videoAsset?: { url?: string; width?: number; height?: number; duration?: string } | null;\n previewFrameImage?: { templateUrl: string; width: number; height: number } | null;\n}\n\nexport type AppAssetLibraryImage = JsonApiResource<\"appAssetLibraryImages\", AppAssetLibraryImageAttributes>;\nexport type AppAssetLibraryVideo = JsonApiResource<\"appAssetLibraryVideos\", AppAssetLibraryVideoAttributes>;\n\nexport interface CreateAssetParams {\n libraryId: string;\n fileName: string;\n fileSize: number;\n /** Fixed at upload. Headers, search results and event assets need CREATIVE_ASSETS. */\n category: AppAssetLibraryAssetCategory;\n referenceName?: string;\n}\n\nexport interface UpdateAssetAttributes {\n /** Commit after every upload operation has succeeded. No checksum is sent. */\n uploaded?: boolean;\n referenceName?: string;\n /** Only an APPROVED asset can be archived (409 STATE_ERROR.INVALID_ASSET_STATE otherwise). */\n archived?: boolean;\n}\n\n/**\n * Images and videos in an app's asset library share one lifecycle:\n * reserve (POST) → run uploadOperations → PATCH uploaded:true → poll state.\n */\nabstract class AssetLibraryMediaResource<\n T extends \"appAssetLibraryImages\" | \"appAssetLibraryVideos\",\n R extends JsonApiResource<T, AssetAttributes>,\n> {\n protected abstract readonly type: T;\n\n constructor(protected http: RequestClient) {}\n\n async get(id: string): Promise<R> {\n const response = await this.http.get<JsonApiResponse<R>>(`/v1/${this.type}/${id}`);\n return response.data;\n }\n\n protected async reserve(params: CreateAssetParams, extra: Record<string, unknown> = {}): Promise<R> {\n const { libraryId, ...attributes } = params;\n const response = await this.http.post<JsonApiResponse<R>>(`/v1/${this.type}`, {\n data: {\n type: this.type,\n attributes: { ...attributes, ...extra },\n relationships: {\n assetLibrary: { data: { type: \"appAssetLibraries\", id: libraryId } },\n },\n },\n });\n return response.data;\n }\n\n protected async patch(id: string, attributes: Record<string, unknown>): Promise<R> {\n const response = await this.http.patch<JsonApiResponse<R>>(`/v1/${this.type}/${id}`, {\n data: { type: this.type, id, attributes },\n });\n return response.data;\n }\n\n /** Fails with 409 STATE_ERROR.ASSET_HAS_PLACEMENTS while the asset is still placed. */\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/${this.type}/${id}`);\n }\n\n async listPlacements(id: string, params: ListParams = {}): Promise<AppAssetLibraryPlacement[]> {\n return this.http.all<AppAssetLibraryPlacement>(`/v1/${this.type}/${id}/placements`, params);\n }\n}\n\nexport class AppAssetLibraryImagesResource extends AssetLibraryMediaResource<\n \"appAssetLibraryImages\",\n AppAssetLibraryImage\n> {\n protected readonly type = \"appAssetLibraryImages\" as const;\n\n async create(params: CreateAssetParams): Promise<AppAssetLibraryImage> {\n return this.reserve(params);\n }\n\n async update(id: string, attributes: UpdateAssetAttributes): Promise<AppAssetLibraryImage> {\n return this.patch(id, { ...attributes });\n }\n}\n\nexport class AppAssetLibraryVideosResource extends AssetLibraryMediaResource<\n \"appAssetLibraryVideos\",\n AppAssetLibraryVideo\n> {\n protected readonly type = \"appAssetLibraryVideos\" as const;\n\n async create(params: CreateAssetParams & { previewFrameTimeCode?: string }): Promise<AppAssetLibraryVideo> {\n const { previewFrameTimeCode, ...rest } = params;\n return this.reserve(rest, previewFrameTimeCode ? { previewFrameTimeCode } : {});\n }\n\n async update(\n id: string,\n attributes: UpdateAssetAttributes & { previewFrameTimeCode?: string }\n ): Promise<AppAssetLibraryVideo> {\n return this.patch(id, { ...attributes });\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type {\n AppAssetLibraryMediaType,\n AppAssetLibraryPlacementState,\n AppAssetLibraryPlacementType,\n} from \"../types/enums.js\";\n\nexport interface AppAssetLibraryPlacementAttributes {\n mediaType?: AppAssetLibraryMediaType;\n placementType?: AppAssetLibraryPlacementType;\n placementGroup?: string;\n state?: AppAssetLibraryPlacementState;\n stateDetails?: Array<{ code?: string; message?: string }> | null;\n createdDate?: string;\n lastModifiedDate?: string;\n}\n\nexport type AppAssetLibraryPlacement = JsonApiResource<\n \"appAssetLibraryPlacements\",\n AppAssetLibraryPlacementAttributes\n>;\n\n/** The localization a placement puts an asset on. */\nexport type PlacementTargetKind =\n | \"appStoreVersionLocalization\"\n | \"appCustomProductPageLocalization\"\n | \"appEventLocalization\"\n | \"appStoreVersionExperimentTreatmentLocalization\";\n\nexport interface PlacementTarget {\n kind: PlacementTargetKind;\n id: string;\n}\n\nconst TARGET_TYPES: Record<PlacementTargetKind, string> = {\n appStoreVersionLocalization: \"appStoreVersionLocalizations\",\n appCustomProductPageLocalization: \"appCustomProductPageLocalizations\",\n appEventLocalization: \"appEventLocalizations\",\n appStoreVersionExperimentTreatmentLocalization: \"appStoreVersionExperimentTreatmentLocalizations\",\n};\n\nfunction targetRelationship(target: PlacementTarget) {\n return { [target.kind]: { data: { type: TARGET_TYPES[target.kind], id: target.id } } };\n}\n\nexport class AppAssetLibraryPlacementsResource {\n constructor(private http: RequestClient) {}\n\n /**\n * Place an image or video on one localization. Placements cannot be edited —\n * delete and recreate. The parent version/page must be editable.\n */\n async create(params: {\n placementType: AppAssetLibraryPlacementType;\n placementGroup: string;\n imageId?: string;\n videoId?: string;\n target: PlacementTarget;\n }): Promise<AppAssetLibraryPlacement> {\n if (!params.imageId === !params.videoId) {\n throw new Error(\"A placement needs exactly one of imageId or videoId\");\n }\n const media = params.imageId\n ? { image: { data: { type: \"appAssetLibraryImages\", id: params.imageId } } }\n : { video: { data: { type: \"appAssetLibraryVideos\", id: params.videoId! } } };\n const response = await this.http.post<JsonApiResponse<AppAssetLibraryPlacement>>(\n \"/v1/appAssetLibraryPlacements\",\n {\n data: {\n type: \"appAssetLibraryPlacements\",\n attributes: { placementType: params.placementType, placementGroup: params.placementGroup },\n relationships: { ...media, ...targetRelationship(params.target) },\n },\n }\n );\n return response.data;\n }\n\n async get(id: string, params: { include?: string } = {}): Promise<AppAssetLibraryPlacement> {\n const response = await this.http.get<JsonApiResponse<AppAssetLibraryPlacement>>(\n `/v1/appAssetLibraryPlacements/${id}`,\n params.include ? { include: params.include } : undefined\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appAssetLibraryPlacements/${id}`);\n }\n\n /** Placements on one localization, in display order by default. */\n async listForTarget(\n target: PlacementTarget,\n params: {\n placementType?: AppAssetLibraryPlacementType;\n placementGroup?: string;\n include?: string;\n } = {}\n ): Promise<AppAssetLibraryPlacement[]> {\n const filter: Record<string, string> = {};\n if (params.placementType) filter.placementType = params.placementType;\n if (params.placementGroup) filter.placementGroup = params.placementGroup;\n const listParams: ListParams = { filter, include: params.include, sort: \"placementGroupPosition\" };\n return this.http.all<AppAssetLibraryPlacement>(\n `/v1/${TARGET_TYPES[target.kind]}/${target.id}/placements`,\n listParams\n );\n }\n\n /** Set the display order of a placement group. In-app event localizations cannot be ordered. */\n async order(params: {\n placementGroup: string;\n placementIds: string[];\n target: PlacementTarget;\n }): Promise<void> {\n if (params.target.kind === \"appEventLocalization\") {\n throw new Error(\"In-app event placements cannot be ordered\");\n }\n await this.http.post(\"/v1/appAssetLibraryPlacementOrderingRequests\", {\n data: {\n type: \"appAssetLibraryPlacementOrderingRequests\",\n attributes: { placementGroup: params.placementGroup },\n relationships: {\n orderedPlacements: {\n data: params.placementIds.map((id) => ({ type: \"appAssetLibraryPlacements\", id })),\n },\n ...targetRelationship(params.target),\n },\n },\n });\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 // Pass pagination params (matching the other list* methods) — without them\n // Apple's listTeams.action returns only a small default page, hiding teams\n // for users who belong to many.\n const data = await this.post(\"account/listTeams.action\", {\n pageSize: \"500\", pageNumber: \"1\",\n });\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 // Apple's App ID name validator allows only alphanumerics + spaces\n // (\"Please choose a name containing only alphanumeric characters and\n // spaces\") — sanitize so a caller can safely pass a bundle id as the\n // display name. The `identifier` is unaffected.\n const safeName =\n params.name.replace(/[^0-9A-Za-z\\s]/g, \" \").replace(/\\s+/g, \" \").trim() || \"App\";\n const reqParams: Record<string, string> = {\n teamId: this.teamId, type: \"explicit\", identifier: params.identifier, name: safeName,\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 // ── Application Groups ──────────────────────────────────────────────────\n //\n // App Groups (e.g. `group.com.playspina.com`) are the only clean way to\n // share data — an auth token, in our case — between a host app and an\n // embedded extension (Messages / Notification Service / etc.). App Store\n // Connect API keys (.p8) genuinely cannot manage them; Apple only exposes\n // group create/associate through this legacy session-cookie portal API,\n // which is why they live on PortalClient (Apple ID session) and not on the\n // ASC REST client. Endpoint shapes ported 1:1 from Spaceship's\n // portal_client.rb (listApplicationGroups / addApplicationGroup /\n // assignApplicationGroupToAppId).\n\n /** Apple's internal feature code for the App Groups capability. */\n static readonly APP_GROUPS_FEATURE = \"APG3427HIY\";\n\n /** List all app groups in the team. */\n async listAppGroups(): Promise<any[]> {\n const data = await this.post(\"account/ios/identifiers/listApplicationGroups.action\", {\n teamId: this.teamId, pageNumber: \"1\", pageSize: \"500\", sort: \"name=asc\",\n });\n return data.applicationGroupList ?? [];\n }\n\n /**\n * Create an app group, returning the raw group record. Idempotent —\n * Apple rejects a duplicate group identifier (\"Multiple App Groups may\n * not have the same identifier\"), so we list first and reuse an existing\n * group when the identifier already exists in the team.\n *\n * Note the two ids on the returned record: `identifier` is the\n * `group.com.…` string you type, while `applicationGroup` is Apple's\n * opaque internal handle that association actually requires — do NOT pass\n * the human identifier to assignAppGroups.\n */\n async createAppGroup(params: { identifier: string; name: string }): Promise<any> {\n const existing = await this.listAppGroups();\n const hit = existing.find((g: any) => g.identifier === params.identifier);\n if (hit) return hit;\n // Apple's App Group *name* validator rejects punctuation — periods,\n // in particular (\"An invalid value … for the parameter 'name'\"). Mirror\n // Spaceship's valid_name_for: keep alphanumerics + spaces, collapse the\n // rest. The `identifier` (group.com.…) is unaffected.\n const safeName =\n params.name.replace(/[^0-9A-Za-z\\s]/g, \" \").replace(/\\s+/g, \" \").trim() || \"App Group\";\n const data = await this.post(\"account/ios/identifiers/addApplicationGroup.action\", {\n teamId: this.teamId, identifier: params.identifier, name: safeName,\n });\n return data.applicationGroup;\n }\n\n /**\n * Enable the App Groups capability on an App ID. Required before an\n * App ID can have a group associated with it — mirrors Spaceship\n * enabling `AppService::AppGroup` before `associate_groups`.\n */\n async enableAppGroups(appIdId: string): Promise<void> {\n // App Groups enables via the legacy `updateService.action` endpoint with\n // a boolean-string featureValue — NOT `updateAppService.action` (which\n // reports \"Service mapping to the requested URL is not available\" for\n // this feature). Mirrors Spaceship's AppService::AppGroup service_uri +\n // value. Must succeed before assignAppGroups, or Apple rejects the\n // association (\"Application Group feature should be enabled before …\").\n await this.post(\"account/ios/identifiers/updateService.action\", {\n teamId: this.teamId,\n displayId: appIdId,\n featureType: PortalClient.APP_GROUPS_FEATURE,\n featureValue: \"true\",\n });\n }\n\n /**\n * Associate one or more app groups with an App ID. `appGroupIds` are the\n * internal ids (Spaceship's `app_group_id`), NOT the `group.com.…`\n * identifiers. Apple wants both `appIdId` and `displayId` set to the\n * App ID's internal id, per Spaceship's associate_groups_with_app.\n */\n async assignAppGroups(params: { appIdId: string; appGroupIds: string[] }): Promise<void> {\n await this.post(\"account/ios/identifiers/assignApplicationGroupToAppId.action\", {\n teamId: this.teamId,\n appIdId: params.appIdId,\n displayId: params.appIdId,\n applicationGroups: params.appGroupIds,\n });\n }\n\n // ── Apple Pay merchants (OMCs) ─────────────────────────────────────────\n //\n // Merchant IDs are team-level identifiers (merchant.com.…) that an App ID's\n // Apple Pay capability must be LINKED to — enabling the capability alone\n // produces profiles that fail with \"doesn't support the … Merchant ID\".\n // Like App Groups, merchants are only manageable through the legacy\n // session-cookie portal API. Endpoint shapes ported 1:1 from Spaceship's\n // portal_client.rb (merchants / create_merchant! /\n // associate_merchants_with_app).\n\n /** Apple's internal feature code for the Apple Pay capability. */\n static readonly APPLE_PAY_FEATURE = \"OM633U5T5G\";\n\n /**\n * List all Apple Pay merchant IDs in the team. Each record maps\n * (per Spaceship's merchant.rb attr_mapping): `omcId` = internal id,\n * `identifier` = the human `merchant.com.…` string, `name` = display name.\n */\n async listMerchants(): Promise<any[]> {\n const data = await this.post(\"account/ios/identifiers/listOMCs.action\", {\n teamId: this.teamId, pageNumber: \"1\", pageSize: \"500\", sort: \"name=asc\",\n });\n return data.identifierList ?? [];\n }\n\n /**\n * Register (or reuse) a merchant ID, returning its INTERNAL id (`omcId`) —\n * Apple's opaque handle that association requires, NOT the human\n * `merchant.com.…` identifier. Idempotent: lists first and reuses an\n * existing merchant with the same identifier. Endpoint + params ported 1:1\n * from Spaceship's create_merchant! (addOMC.action).\n */\n async createMerchant(params: { identifier: string; name: string }): Promise<string> {\n const existing = await this.listMerchants();\n const hit = existing.find((m: any) => m.identifier === params.identifier);\n if (hit?.omcId) return String(hit.omcId);\n // Same name validator as App Groups: alphanumerics + spaces only.\n const safeName =\n params.name.replace(/[^0-9A-Za-z\\s]/g, \" \").replace(/\\s+/g, \" \").trim() || \"Merchant\";\n const data = await this.post(\"account/ios/identifiers/addOMC.action\", {\n name: safeName, identifier: params.identifier, teamId: this.teamId,\n });\n // Spaceship's create_merchant! reads parse_response(r, 'omcId'); the\n // created record may be nested under `omcId` or returned flat.\n const rec = data.omcId ?? data;\n const id = typeof rec === \"string\" ? rec : (rec?.omcId ?? rec?.merchantId);\n if (!id) {\n throw new Error(\"Apple returned no internal merchant id (omcId) for the registered merchant.\");\n }\n return String(id);\n }\n\n /**\n * Enable the Apple Pay capability on an App ID. Apple Pay is a standard\n * AppService (service_id OM633U5T5G) whose service_uri is the default\n * `updateService.action` — confirmed in Spaceship's app_service.rb.\n */\n async enableApplePay(appIdId: string): Promise<void> {\n await this.post(\"account/ios/identifiers/updateService.action\", {\n teamId: this.teamId,\n displayId: appIdId,\n featureType: PortalClient.APPLE_PAY_FEATURE,\n featureValue: \"true\",\n });\n }\n\n /**\n * Associate merchant IDs with an App ID's Apple Pay capability. `omcIds`\n * are the internal ids (each merchant record's `omcId`), NOT the\n * `merchant.com.…` identifiers. Endpoint + params ported 1:1 from\n * Spaceship's associate_merchants_with_app (assignOMCToAppId.action — note\n * the singular \"OMC\", and NO displayId param).\n */\n async assignMerchants(params: { appIdId: string; omcIds: string[] }): Promise<void> {\n await this.post(\"account/ios/identifiers/assignOMCToAppId.action\", {\n teamId: this.teamId,\n appIdId: params.appIdId,\n omcIds: params.omcIds,\n });\n }\n\n /**\n * Create an Apple Pay **Payment Processing Certificate** on a merchant ID\n * from a CSR — the certificate a PSP (e.g. Stripe) hands you as a CSR, which\n * must be uploaded to the Merchant ID in Apple Developer, then the resulting\n * `.cer` downloaded and given back to the PSP so it can decrypt payment\n * tokens. This is the one manual Apple-portal step in wiring up Apple Pay.\n *\n * Ported 1:1 from Spaceship's create_certificate! (submitCertificateRequest\n * .action): the merchant's INTERNAL id (`omcId`) is passed as BOTH `appIdId`\n * and `specialIdentifierDisplayId` — the latter is how the portal scopes a\n * cert to a merchant/special identifier rather than an App ID. The cert type\n * is APPLE_PAY (`4APLUP237T`). Returns the created certRequest (its\n * `certificateId` feeds `downloadApplePayCertificate`).\n *\n * @param omcId the merchant's internal id (from createMerchant/listMerchants)\n * @param csrContent the PEM CSR string (Stripe's \"Apple Pay CSR\")\n */\n async createApplePayCertificate(params: { omcId: string; csrContent: string }): Promise<any> {\n const data = await this.post(\"account/ios/certificate/submitCertificateRequest.action\", {\n teamId: this.teamId,\n type: PortalClient.CERT_TYPES.APPLE_PAY,\n csrContent: params.csrContent,\n appIdId: params.omcId,\n specialIdentifierDisplayId: params.omcId,\n });\n return data.certRequest;\n }\n\n /**\n * Download an Apple Pay Payment Processing Certificate's raw bytes by its\n * certificate id (from `createApplePayCertificate`). Thin wrapper over\n * `downloadCertificate` pinned to the APPLE_PAY type — the DER `.cer` you\n * upload back into Stripe.\n */\n async downloadApplePayCertificate(certificateId: string): Promise<Buffer> {\n return this.downloadCertificate(certificateId, PortalClient.CERT_TYPES.APPLE_PAY);\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\";\nimport { AppAssetLibrariesResource } from \"../resources/app-asset-libraries.js\";\nimport {\n AppAssetLibraryImagesResource,\n AppAssetLibraryVideosResource,\n} from \"../resources/app-asset-library-assets.js\";\nimport { AppAssetLibraryPlacementsResource } from \"../resources/app-asset-library-placements.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 readonly appAssetLibraries: AppAssetLibrariesResource;\n readonly appAssetLibraryImages: AppAssetLibraryImagesResource;\n readonly appAssetLibraryVideos: AppAssetLibraryVideosResource;\n readonly appAssetLibraryPlacements: AppAssetLibraryPlacementsResource;\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 this.appAssetLibraries = new AppAssetLibrariesResource(this.http);\n this.appAssetLibraryImages = new AppAssetLibraryImagesResource(this.http);\n this.appAssetLibraryVideos = new AppAssetLibraryVideosResource(this.http);\n this.appAssetLibraryPlacements = new AppAssetLibraryPlacementsResource(this.http);\n }\n\n async request<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.http.request<T>(path, options);\n }\n}\n","/**\n * Device frame definitions ported from Fastlane's `frameit/device_types.rb`.\n *\n * Each device mirrors Fastlane's `Device.new(id, name, priority, resolutions,\n * ppi, color, platform)` declaration. Frame canvas dimensions and screen\n * offsets are computed from the primary screen resolution, because Fastlane\n * resolves those at runtime from the downloaded `offsets.json` in its frames\n * repository — which is not bundled here.\n *\n * For modern edge-to-edge devices (post-2017 iPhones, Pixel 3+, recent Samsung),\n * the frame adds a small 4–7% horizontal bezel. For bezeled devices, padding\n * roughly follows the real chassis (~10% X, ~18% Y). These estimates mean\n * `frameScreenshots` still composites sensibly, but they are not pixel-perfect\n * reproductions of the real frame PNGs.\n *\n * Device names follow Fastlane's `formatted_name_without_apple`: the \"Apple \"\n * prefix is stripped, as are parenthesised suffixes (e.g. \"(3rd generation)\").\n */\n\nexport interface DeviceFrame {\n /** Fastlane device id (slug). Used for filename detection. */\n id: string;\n /** Human-readable device name (matches Fastlane's `formatted_name_without_apple`). */\n name: string;\n /** Priority (from Fastlane). Higher wins when multiple devices match. */\n priority: number;\n /** Frame canvas dimensions (computed). */\n width: number;\n height: number;\n /** Primary screen resolution used for detection and compositing. */\n screenWidth: number;\n screenHeight: number;\n /** All supported screen resolutions [width, height] for detection. */\n screenResolutions: Array<[number, number]>;\n /** Screen-within-frame offset in pixels. */\n screenOffsetX: number;\n screenOffsetY: number;\n platform: \"ios\" | \"android\" | \"mac\";\n /** Optional PPI from Fastlane. */\n ppi?: number;\n /** Default color from Fastlane. */\n color?: string;\n}\n\ninterface ComputeInput {\n id: string;\n name: string;\n priority: number;\n resolutions: Array<[number, number]>;\n ppi?: number;\n color?: string;\n platform: \"ios\" | \"android\" | \"mac\";\n style: \"edge\" | \"bezel\" | \"tablet\" | \"mac\";\n}\n\nfunction buildFrame(d: ComputeInput): DeviceFrame {\n // Pick the portrait resolution (smaller = width)\n const [res] = d.resolutions;\n const [a, b] = res;\n const screenWidth = Math.min(a, b);\n const screenHeight = Math.max(a, b);\n\n let width: number;\n let height: number;\n let offsetX: number;\n let offsetY: number;\n\n switch (d.style) {\n case \"edge\": {\n // Modern edge-to-edge: ~4% X bezel each side, minimal Y bezel\n const padX = Math.round(screenWidth * 0.04);\n const padY = Math.round(screenHeight * 0.005);\n width = screenWidth + padX * 2;\n height = screenHeight + padY * 2;\n offsetX = padX;\n offsetY = padY;\n break;\n }\n case \"bezel\": {\n // Older bezeled phones: ~5% X, ~9% Y each side\n const padX = Math.round(screenWidth * 0.05);\n const padY = Math.round(screenHeight * 0.09);\n width = screenWidth + padX * 2;\n height = screenHeight + padY * 2;\n offsetX = padX;\n offsetY = padY;\n break;\n }\n case \"tablet\": {\n const padX = Math.round(screenWidth * 0.05);\n const padY = Math.round(screenHeight * 0.05);\n width = screenWidth + padX * 2;\n height = screenHeight + padY * 2;\n offsetX = padX;\n offsetY = padY;\n break;\n }\n case \"mac\": {\n const padX = Math.round(screenWidth * 0.08);\n const padY = Math.round(screenHeight * 0.12);\n width = screenWidth + padX * 2;\n height = screenHeight + padY * 2;\n offsetX = padX;\n offsetY = padY;\n break;\n }\n }\n\n return {\n id: d.id,\n name: d.name,\n priority: d.priority,\n width,\n height,\n screenWidth,\n screenHeight,\n screenResolutions: d.resolutions,\n screenOffsetX: offsetX,\n screenOffsetY: offsetY,\n platform: d.platform,\n ppi: d.ppi,\n color: d.color,\n };\n}\n\n/**\n * All devices from Fastlane's `frameit/device_types.rb` (66 entries) plus\n * iPhone 15/16 models that Apple released after Fastlane's last update, and\n * a couple of Samsung Galaxy S21 entries carried over from fastnode's\n * pre-port list. Ordered descending by priority so `detectDevice*` picks the\n * newest/highest priority device when multiple match.\n */\nexport const DEVICE_FRAMES: DeviceFrame[] = [\n // ── iPhones 15/16 (post-Fastlane) ──\n buildFrame({ id: \"iphone16-pro-max\", name: \"iPhone 16 Pro Max\", priority: 14, resolutions: [[1320, 2868], [2868, 1320]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-16-pro\", name: \"iPhone 16 Pro\", priority: 14, resolutions: [[1206, 2622], [2622, 1206]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-16-plus\", name: \"iPhone 16 Plus\", priority: 14, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-16\", name: \"iPhone 16\", priority: 14, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone15-pro-max\", name: \"iPhone 15 Pro Max\", priority: 13, resolutions: [[1290, 2796], [2796, 1290]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-15-pro\", name: \"iPhone 15 Pro\", priority: 13, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black Titanium\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-15-plus\", name: \"iPhone 15 Plus\", priority: 13, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-15\", name: \"iPhone 15\", priority: 13, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n\n // ── iPhones (Fastlane Platform::IOS) ──\n buildFrame({ id: \"iphone14-pro-max\", name: \"iPhone 14 Pro Max\", priority: 12, resolutions: [[1290, 2796], [2796, 1290]], ppi: 458, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-14-pro\", name: \"iPhone 14 Pro\", priority: 12, resolutions: [[1179, 2556], [2556, 1179]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-14-plus\", name: \"iPhone 14 Plus\", priority: 12, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-14\", name: \"iPhone 14\", priority: 12, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone13-pro-max\", name: \"iPhone 13 Pro Max\", priority: 11, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-13-pro\", name: \"iPhone 13 Pro\", priority: 11, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-13\", name: \"iPhone 13\", priority: 11, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-13-mini\", name: \"iPhone 13 Mini\", priority: 11, resolutions: [[1080, 2340], [2340, 1080]], ppi: 476, color: \"Midnight\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone12-pro-max\", name: \"iPhone 12 Pro Max\", priority: 10, resolutions: [[1284, 2778], [2778, 1284]], ppi: 458, color: \"Graphite\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-12-pro\", name: \"iPhone 12 Pro\", priority: 10, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-12\", name: \"iPhone 12\", priority: 10, resolutions: [[1170, 2532], [2532, 1170]], ppi: 460, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-12-mini\", name: \"iPhone 12 Mini\", priority: 10, resolutions: [[1125, 2436], [2436, 1125]], ppi: 476, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone11-pro-max\", name: \"iPhone 11 Pro Max\", priority: 9, resolutions: [[1242, 2688], [2688, 1242]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-11-pro\", name: \"iPhone 11 Pro\", priority: 9, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-11\", name: \"iPhone 11\", priority: 9, resolutions: [[828, 1792], [1792, 828]], ppi: 326, color: \"Black\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-XS-Max\", name: \"iPhone XS Max\", priority: 8, resolutions: [[1242, 2688], [2688, 1242]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-XR\", name: \"iPhone XR\", priority: 8, resolutions: [[828, 1792], [1792, 828]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-XS\", name: \"iPhone XS\", priority: 8, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-X\", name: \"iPhone X\", priority: 7, resolutions: [[1125, 2436], [2436, 1125]], ppi: 458, color: \"Space Gray\", platform: \"ios\", style: \"edge\" }),\n buildFrame({ id: \"iphone-8\", name: \"iPhone 8\", priority: 6, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-8-plus\", name: \"iPhone 8 Plus\", priority: 6, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-7\", name: \"iPhone 7\", priority: 5, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Matte Black\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-7-plus\", name: \"iPhone 7 Plus\", priority: 5, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Matte Black\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-6s\", name: \"iPhone 6s\", priority: 4, resolutions: [[750, 1334], [1334, 750]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-6s-plus\", name: \"iPhone 6s Plus\", priority: 4, resolutions: [[1242, 2208], [2208, 1242]], ppi: 401, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-se\", name: \"iPhone SE\", priority: 3, resolutions: [[640, 1096], [640, 1136], [1136, 600], [1136, 640]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-5s\", name: \"iPhone 5s\", priority: 2, resolutions: [[640, 1096], [640, 1136], [1136, 600], [1136, 640]], ppi: 326, color: \"Space Gray\", platform: \"ios\", style: \"bezel\" }),\n buildFrame({ id: \"iphone-5c\", name: \"iPhone 5c\", priority: 2, resolutions: [[640, 1136], [1136, 640]], ppi: 326, color: \"White\", platform: \"ios\", style: \"bezel\" }),\n\n // ── iPads ──\n buildFrame({ id: \"ipadPro11\", name: \"iPad Pro 11-inch\", priority: 1, resolutions: [[1668, 2388], [2388, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipadPro129\", name: \"iPad Pro 12.9-inch 4th generation\", priority: 5, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipadPro129-3gen\", name: \"iPad Pro 12.9-inch 3rd generation\", priority: 4, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-pro\", name: \"iPad Pro\", priority: 3, resolutions: [[2048, 2732], [2732, 2048]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad105\", name: \"iPad Pro 10.5-inch\", priority: 1, resolutions: [[1668, 2224], [2224, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-10-2\", name: \"iPad 10.2\", priority: 1, resolutions: [[1620, 2160], [2160, 1620]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-air-2\", name: \"iPad Air 2\", priority: 1, resolutions: [[1536, 2048], [2048, 1536]], ppi: 264, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-air-2019\", name: \"iPad Air 2019\", priority: 2, resolutions: [[1668, 2224], [2224, 1668]], ppi: 265, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-mini-4\", name: \"iPad Mini 4\", priority: 2, resolutions: [[1536, 2048], [2048, 1536]], ppi: 324, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n buildFrame({ id: \"ipad-mini-2019\", name: \"iPad Mini 2019\", priority: 3, resolutions: [[1536, 2048], [2048, 1536]], ppi: 324, color: \"Space Gray\", platform: \"ios\", style: \"tablet\" }),\n\n // ── Mac ──\n buildFrame({ id: \"mac\", name: \"MacBook\", priority: 0, resolutions: [[1280, 800], [1440, 900], [2560, 1600], [2880, 1800]], color: \"Space Gray\", platform: \"mac\", style: \"mac\" }),\n\n // ── Google Pixel (Android) ──\n buildFrame({ id: \"google-pixel-5\", name: \"Google Pixel 5\", priority: 10, resolutions: [[1080, 2340], [2340, 1080]], ppi: 432, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"google-pixel-4-xl\", name: \"Google Pixel 4 XL\", priority: 9, resolutions: [[1440, 3040], [3040, 1440]], ppi: 537, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"google-pixel-4\", name: \"Google Pixel 4\", priority: 9, resolutions: [[1080, 2280], [2280, 1080]], ppi: 444, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"google-pixel-3-xl\", name: \"Google Pixel 3 XL\", priority: 7, resolutions: [[1440, 2960], [2960, 1440]], ppi: 523, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"google-pixel-3\", name: \"Google Pixel 3\", priority: 7, resolutions: [[1080, 2160], [2160, 1080]], ppi: 443, color: \"Just Black\", platform: \"android\", style: \"edge\" }),\n\n // ── HTC / Huawei / Motorola (Android, bezeled) ──\n buildFrame({ id: \"htc-one-a9\", name: \"HTC One A9\", priority: 6, resolutions: [[1080, 1920], [1920, 1080]], ppi: 441, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"htc-one-m8\", name: \"HTC One M8\", priority: 3, resolutions: [[1080, 1920], [1920, 1080]], ppi: 441, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"huawei-p8\", name: \"Huawei P8\", priority: 5, resolutions: [[1080, 1920], [1920, 1080]], ppi: 424, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"motorola-moto-e\", name: \"Motorola Moto E\", priority: 3, resolutions: [[540, 960], [960, 540]], ppi: 245, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"motorola-moto-g\", name: \"Motorola Moto G\", priority: 4, resolutions: [[1080, 1920], [1920, 1080]], ppi: 401, platform: \"android\", style: \"bezel\" }),\n\n // ── Nexus (Android, bezeled) ──\n buildFrame({ id: \"nexus-4\", name: \"Nexus 4\", priority: 7, resolutions: [[768, 1280], [1820, 768]], ppi: 318, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"nexus-5x\", name: \"Nexus 5X\", priority: 7, resolutions: [[1080, 1920], [1920, 1080]], ppi: 423, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"nexus-6p\", name: \"Nexus 6P\", priority: 7, resolutions: [[1440, 2560], [2560, 1440]], ppi: 518, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"nexus-9\", name: \"Nexus 9\", priority: 7, resolutions: [[1536, 2048], [2048, 1536]], ppi: 281, platform: \"android\", style: \"tablet\" }),\n\n // ── Samsung Galaxy (Android) ──\n buildFrame({ id: \"samsung-galaxy-s21\", name: \"Samsung Galaxy S21\", priority: 9, resolutions: [[1080, 2400], [2400, 1080]], ppi: 421, color: \"Phantom Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-note-10-plus\", name: \"Samsung Galaxy Note 10+\", priority: 7, resolutions: [[1440, 3040], [3040, 1440]], ppi: 498, color: \"Aura Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-note-10\", name: \"Samsung Galaxy Note 10\", priority: 6, resolutions: [[1080, 2280], [2280, 1080]], ppi: 401, color: \"Aura Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-note-5\", name: \"Samsung Galaxy Note 5\", priority: 5, resolutions: [[1440, 2560], [2560, 1440]], ppi: 518, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-s10-plus\", name: \"Samsung Galaxy S10+\", priority: 8, resolutions: [[1440, 3040], [3040, 1440]], ppi: 522, color: \"Prism Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-s10\", name: \"Samsung Galaxy S10\", priority: 7, resolutions: [[1440, 3040], [3040, 1440]], ppi: 550, color: \"Prism Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-s9\", name: \"Samsung Galaxy S9\", priority: 6, resolutions: [[1440, 2960], [2960, 1440]], ppi: 570, color: \"Midnight Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-s8\", name: \"Samsung Galaxy S8\", priority: 5, resolutions: [[1440, 2960], [2960, 1440]], ppi: 570, color: \"Midnight Black\", platform: \"android\", style: \"edge\" }),\n buildFrame({ id: \"samsung-galaxy-s7\", name: \"Samsung Galaxy S7\", priority: 4, resolutions: [[1440, 2560], [2560, 1440]], ppi: 577, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-s5\", name: \"Samsung Galaxy S5\", priority: 3, resolutions: [[1080, 1920], [1920, 1080]], ppi: 432, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-s3\", name: \"Samsung Galaxy S3\", priority: 3, resolutions: [[720, 1280], [1280, 720]], ppi: 306, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-s-duos\", name: \"Samsung Galaxy S Duos\", priority: 3, resolutions: [[480, 800], [800, 480]], ppi: 233, platform: \"android\", style: \"bezel\" }),\n buildFrame({ id: \"samsung-galaxy-grand-prime\", name: \"Samsung Galaxy Grand Prime\", priority: 5, resolutions: [[540, 960], [960, 540]], ppi: 220, color: \"Black\", platform: \"android\", style: \"bezel\" }),\n\n // ── Xiaomi ──\n buildFrame({ id: \"xiaomi-mi-mix-alpha\", name: \"Xiaomi Mi Mix Alpha\", priority: 1, resolutions: [[2088, 2250], [2250, 2088]], ppi: 388, platform: \"android\", style: \"edge\" }),\n];\n\n/**\n * Match a device by screenshot pixel dimensions. Returns the highest-priority\n * device whose resolution list contains `(width, height)` in either orientation.\n */\nexport function detectDeviceFromDimensions(\n width: number,\n height: number\n): DeviceFrame | null {\n let best: DeviceFrame | null = null;\n for (const device of DEVICE_FRAMES) {\n for (const [w, h] of device.screenResolutions) {\n if (w === width && h === height) {\n if (!best || device.priority > best.priority) best = device;\n break;\n }\n }\n }\n return best;\n}\n\n/**\n * Match a device by filename substring. Mirrors Fastlane's\n * `Device.detect_device`: a device matches if the filename contains either\n * the formatted name or the slug id. Token separators `-`, `_`, and spaces\n * are treated as equivalent, and `.` inside numeric suffixes (e.g. `12.9`)\n * is optional. Returns the highest-priority match.\n */\nexport function detectDeviceFromFilename(filename: string): DeviceFrame | null {\n const lower = filename.toLowerCase();\n let best: DeviceFrame | null = null;\n\n const matchesToken = (candidate: string): boolean => {\n const pattern = candidate\n .toLowerCase()\n .replace(/[()]/g, \"\")\n .replace(/[.+^$*?|{}\\\\[\\]]/g, \"\\\\$&\")\n .replace(/\\\\\\./g, \"\\\\.?\")\n .replace(/[-_\\s]+/g, \"[-_ ]?\");\n return new RegExp(pattern).test(lower);\n };\n\n for (const device of DEVICE_FRAMES) {\n if (matchesToken(device.name) || matchesToken(device.id)) {\n if (!best || device.priority > best.priority) best = device;\n }\n }\n return best;\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readdir, stat } from \"node:fs/promises\";\nimport { join, extname, basename } from \"node:path\";\nimport { detectDeviceFromDimensions, detectDeviceFromFilename, type DeviceFrame } from \"./devices.js\";\n\nexport { DEVICE_FRAMES, detectDeviceFromDimensions, detectDeviceFromFilename } from \"./devices.js\";\nexport type { DeviceFrame } from \"./devices.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface FrameitOptions {\n screenshotsPath: string;\n outputPath?: string;\n forceDeviceType?: string;\n useDeviceOuterShadow?: boolean;\n whiteBackground?: boolean;\n}\n\nexport async function frameScreenshots(options: FrameitOptions): Promise<void> {\n const inputDir = options.screenshotsPath;\n const outputDir = options.outputPath ?? inputDir;\n\n const entries = await readdir(inputDir);\n const imageFiles = entries.filter((f) =>\n [\".png\", \".jpg\", \".jpeg\"].includes(extname(f).toLowerCase()) &&\n !f.includes(\"_framed\")\n );\n\n for (const file of imageFiles) {\n const filePath = join(inputDir, file);\n const fileStat = await stat(filePath);\n if (!fileStat.isFile()) continue;\n\n // Detect device from filename or dimensions\n let device = detectDeviceFromFilename(file);\n if (!device) {\n const dims = await getImageDimensions(filePath);\n if (dims) {\n device = detectDeviceFromDimensions(dims.width, dims.height);\n }\n }\n\n if (!device) continue;\n\n // Frame the screenshot using ImageMagick\n const outputFile = join(\n outputDir,\n basename(file, extname(file)) + \"_framed.png\"\n );\n\n try {\n await compositeScreenshot(filePath, device, outputFile, options);\n } catch {\n // ImageMagick may not be installed — skip gracefully\n }\n }\n}\n\nasync function getImageDimensions(\n filePath: string\n): Promise<{ width: number; height: number } | null> {\n try {\n const { stdout } = await execFileAsync(\"identify\", [\"-format\", \"%wx%h\", filePath]);\n const [w, h] = stdout.trim().split(\"x\").map(Number);\n if (w && h) return { width: w, height: h };\n } catch {\n // ImageMagick not available\n }\n return null;\n}\n\nasync function compositeScreenshot(\n screenshotPath: string,\n device: DeviceFrame,\n outputPath: string,\n options: FrameitOptions\n): Promise<void> {\n // Create a canvas of the device frame size, composite the screenshot at the offset\n const bgColor = options.whiteBackground ? \"white\" : \"none\";\n\n const args = [\n \"-size\", `${device.width}x${device.height}`,\n `xc:${bgColor}`,\n screenshotPath,\n \"-geometry\", `${device.screenWidth}x${device.screenHeight}+${device.screenOffsetX}+${device.screenOffsetY}`,\n \"-composite\",\n outputPath,\n ];\n\n await execFileAsync(\"convert\", args);\n}\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n name: \"run_tests\",\n aliases: [\"scan\"],\n description: \"Run unit and UI tests using xcodebuild\",\n async run(params, ctx) {\n const { runTests } = await import(\"../../scan/index.js\");\n const result = await runTests({\n scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string | undefined,\n workspace: params.workspace as string | undefined,\n project: params.project as string | undefined,\n devices: params.devices as string[] | undefined,\n testPlan: params.test_plan as string | undefined,\n onlyTesting: params.only_testing as string[] | undefined,\n skipTesting: params.skip_testing as string[] | undefined,\n configuration: params.configuration as string | undefined,\n outputDirectory: params.output_directory as string | undefined,\n clean: params.clean as boolean | undefined,\n codeCoverage: params.code_coverage as boolean | undefined,\n maxRetries: params.number_of_retries as number | undefined,\n xcargs: params.xcargs as string | undefined,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n ctx.set(\"SCAN_GENERATED_REPORT\", result.reportPaths[0]);\n return result;\n },\n});\n\nregisterAction({\n name: \"capture_ios_screenshots\",\n aliases: [\"snapshot\", \"capture_screenshots\"],\n description: \"Capture screenshots using iOS simulators\",\n async run(params, ctx) {\n const { captureScreenshots } = await import(\"../../snapshot/index.js\");\n return captureScreenshots({\n scheme: (params.scheme ?? ctx.get(\"SCHEME\")) as string | undefined,\n workspace: params.workspace as string | undefined,\n project: params.project as string | undefined,\n devices: (params.devices ?? []) as string[],\n languages: (params.languages ?? [\"en-US\"]) as string[],\n outputDirectory: params.output_directory as string | undefined,\n clearPreviousScreenshots: params.clear_previous_screenshots as boolean | undefined,\n concurrent: params.concurrent as boolean | undefined,\n numberOfRetries: params.number_of_retries as number | undefined,\n onOutput: params.on_output as ((chunk: string) => void) | undefined,\n });\n },\n});\n\nregisterAction({\n name: \"trainer\",\n aliases: [\"parse_test_results\"],\n description: \"Parse test results and generate JUnit XML\",\n async run(params) {\n const { parseTestResults } = await import(\"../../trainer/index.js\");\n return parseTestResults({\n path: params.path as string | undefined,\n outputDirectory: params.output_directory as string | undefined,\n outputFilename: params.output_filename as string | undefined,\n failBuildOnError: params.fail_build as boolean | undefined,\n });\n },\n});\n\nregisterAction({\n name: \"precheck\",\n aliases: [\"check_app_store_metadata\"],\n description: \"Validate app metadata against App Store review guidelines\",\n async run(params, ctx) {\n const { validateMetadata } = await import(\"../../precheck/index.js\");\n const { AppStoreConnectClient } = await import(\"../../client/index.js\");\n const client = params.client as InstanceType<typeof AppStoreConnectClient> ?? ctx.get(\"client\");\n if (!client) throw new Error(\"precheck: client is required\");\n return validateMetadata({\n client: client as any,\n bundleIdentifier: (params.app_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n });\n },\n});\n\nregisterAction({\n name: \"frame_screenshots\",\n aliases: [\"frameit\"],\n description: \"Frame screenshots with device bezels\",\n async run(params) {\n const { frameScreenshots } = await import(\"../../frameit/index.js\");\n return frameScreenshots({\n screenshotsPath: params.path as string,\n outputPath: params.output_path as string | undefined,\n whiteBackground: params.white as boolean | undefined,\n });\n },\n});\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { requireMacOS } from \"./platform.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport async function updateSigningSettings(options: {\n projectPath: string;\n teamId: string;\n bundleIdentifier: string;\n codeSignIdentity: string;\n targets?: string[];\n profileName?: string;\n profileUuid?: string;\n automaticSigning?: boolean;\n}): Promise<void> {\n const pbxprojPath = `${options.projectPath}/project.pbxproj`;\n let content = await readFile(pbxprojPath, \"utf-8\");\n\n const style = options.automaticSigning ? \"Automatic\" : \"Manual\";\n\n // Replace build settings across the file\n content = replaceBuildSetting(content, \"CODE_SIGN_STYLE\", style);\n content = replaceBuildSetting(content, \"DEVELOPMENT_TEAM\", options.teamId);\n content = replaceBuildSetting(content, \"CODE_SIGN_IDENTITY\", options.codeSignIdentity);\n\n if (options.profileName) {\n content = replaceBuildSetting(content, \"PROVISIONING_PROFILE_SPECIFIER\", options.profileName);\n }\n if (options.profileUuid) {\n content = replaceBuildSetting(content, \"PROVISIONING_PROFILE\", options.profileUuid);\n }\n\n await writeFile(pbxprojPath, content);\n}\n\nexport async function setBuildNumber(\n projectPath: string,\n buildNumber: string\n): Promise<void> {\n const pbxprojPath = `${projectPath}/project.pbxproj`;\n let content = await readFile(pbxprojPath, \"utf-8\");\n content = replaceBuildSetting(content, \"CURRENT_PROJECT_VERSION\", buildNumber);\n await writeFile(pbxprojPath, content);\n}\n\nexport async function setVersionNumber(\n projectPath: string,\n version: string\n): Promise<void> {\n const pbxprojPath = `${projectPath}/project.pbxproj`;\n let content = await readFile(pbxprojPath, \"utf-8\");\n content = replaceBuildSetting(content, \"MARKETING_VERSION\", version);\n await writeFile(pbxprojPath, content);\n}\n\nexport async function readBuildSettings(options: {\n projectPath?: string;\n workspacePath?: string;\n scheme: string;\n configuration?: string;\n}): Promise<Record<string, string>> {\n requireMacOS(\"readBuildSettings\");\n\n const args = [\"-showBuildSettings\"];\n if (options.workspacePath) args.push(\"-workspace\", options.workspacePath);\n else if (options.projectPath) args.push(\"-project\", options.projectPath);\n args.push(\"-scheme\", options.scheme);\n if (options.configuration) args.push(\"-configuration\", options.configuration);\n\n const { stdout } = await execFileAsync(\"xcodebuild\", args);\n const settings: Record<string, string> = {};\n\n for (const line of stdout.split(\"\\n\")) {\n const match = line.match(/^\\s+(\\w+)\\s*=\\s*(.*)$/);\n if (match) {\n settings[match[1]] = match[2].trim();\n }\n }\n\n return settings;\n}\n\nfunction replaceBuildSetting(content: string, key: string, value: string): string {\n // Match: KEY = \"value\"; or KEY = value;\n // Use negative lookbehind to avoid partial matches (e.g., PROVISIONING_PROFILE vs _SPECIFIER)\n const regex = new RegExp(`(?<![A-Z_])(${key})\\\\s*=\\\\s*(\"[^\"]*\"|[^;]*);`, \"g\");\n // Quote value if it contains non-alphanumeric chars or if the original was quoted\n const needsQuotes = /[^A-Za-z0-9]/.test(value) || /\\s/.test(value);\n const quoted = needsQuotes ? `\"${value}\"` : value;\n return content.replace(regex, `$1 = ${quoted};`);\n}\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n name: \"increment_build_number\",\n description: \"Increment the build number in Xcode project\",\n async run(params, ctx) {\n const { readBuildSettings, setBuildNumber } = await import(\"../../xcode/project.js\");\n const projectPath = (params.xcodeproj ?? params.project_path) as string;\n\n let buildNumber: string;\n if (params.build_number) {\n buildNumber = String(params.build_number);\n } else {\n // Read current and increment\n const settings = await readBuildSettings({\n projectPath,\n scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n });\n const current = parseInt(settings.CURRENT_PROJECT_VERSION ?? \"0\", 10);\n buildNumber = String(current + 1);\n }\n\n await setBuildNumber(projectPath, buildNumber);\n ctx.set(\"BUILD_NUMBER\", buildNumber);\n return buildNumber;\n },\n});\n\nregisterAction({\n name: \"increment_version_number\",\n description: \"Increment the version number in Xcode project\",\n async run(params, ctx) {\n const { setVersionNumber, readBuildSettings } = await import(\"../../xcode/project.js\");\n const projectPath = (params.xcodeproj ?? params.project_path) as string;\n\n let version: string;\n if (params.version_number) {\n version = String(params.version_number);\n } else {\n const settings = await readBuildSettings({\n projectPath,\n scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n });\n const current = settings.MARKETING_VERSION ?? \"1.0.0\";\n const parts = current.split(\".\").map(Number);\n const bump = (params.bump_type ?? \"patch\") as string;\n if (bump === \"major\") { parts[0]++; parts[1] = 0; parts[2] = 0; }\n else if (bump === \"minor\") { parts[1] = (parts[1] ?? 0) + 1; parts[2] = 0; }\n else { parts[2] = (parts[2] ?? 0) + 1; }\n version = parts.join(\".\");\n }\n\n await setVersionNumber(projectPath, version);\n ctx.set(\"VERSION_NUMBER\", version);\n return version;\n },\n});\n\nregisterAction({\n name: \"get_build_number\",\n description: \"Get the current build number from Xcode project\",\n async run(params, ctx) {\n const { readBuildSettings } = await import(\"../../xcode/project.js\");\n const settings = await readBuildSettings({\n projectPath: (params.xcodeproj ?? params.project_path) as string | undefined,\n workspacePath: params.workspace as string | undefined,\n scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n });\n return settings.CURRENT_PROJECT_VERSION ?? \"1\";\n },\n});\n\nregisterAction({\n name: \"get_version_number\",\n description: \"Get the current version number from Xcode project\",\n async run(params, ctx) {\n const { readBuildSettings } = await import(\"../../xcode/project.js\");\n const settings = await readBuildSettings({\n projectPath: (params.xcodeproj ?? params.project_path) as string | undefined,\n workspacePath: params.workspace as string | undefined,\n scheme: (params.scheme ?? ctx.get(\"SCHEME\") ?? \"\") as string,\n });\n return settings.MARKETING_VERSION ?? \"1.0.0\";\n },\n});\n","import { registerAction } from \"../index.js\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nregisterAction({\n name: \"add_git_tag\",\n aliases: [\"git_tag\"],\n description: \"Add a git tag to the current commit\",\n async run(params) {\n const tag = params.tag as string;\n const message = params.message as string | undefined;\n const force = params.force as boolean | undefined;\n\n const args = [\"tag\"];\n if (message) args.push(\"-a\", tag, \"-m\", message);\n else args.push(tag);\n if (force) args.push(\"-f\");\n\n await execFileAsync(\"git\", args);\n\n if (params.push !== false) {\n await execFileAsync(\"git\", [\"push\", \"origin\", tag, ...(force ? [\"-f\"] : [])]);\n }\n\n return tag;\n },\n});\n\nregisterAction({\n name: \"commit_version_bump\",\n aliases: [\"git_commit\"],\n description: \"Commit version bump changes to git\",\n async run(params) {\n const message = (params.message ?? \"Version Bump\") as string;\n const files = (params.include ?? [\".\"]) as string[];\n\n for (const file of files) {\n await execFileAsync(\"git\", [\"add\", file]);\n }\n await execFileAsync(\"git\", [\"commit\", \"-m\", message]);\n return { committed: true, message };\n },\n});\n\nregisterAction({\n name: \"push_to_git_remote\",\n aliases: [\"git_push\"],\n description: \"Push changes to the git remote\",\n async run(params) {\n const remote = (params.remote ?? \"origin\") as string;\n const branch = params.branch as string | undefined;\n const force = params.force as boolean | undefined;\n\n const args = [\"push\", remote];\n if (branch) args.push(branch);\n if (force) args.push(\"-f\");\n\n await execFileAsync(\"git\", args);\n return { pushed: true };\n },\n});\n\nregisterAction({\n name: \"git_pull\",\n description: \"Pull from the git remote\",\n async run(params) {\n const remote = (params.remote ?? \"origin\") as string;\n const branch = params.branch as string | undefined;\n const args = [\"pull\", remote];\n if (branch) args.push(branch);\n await execFileAsync(\"git\", args);\n return { pulled: true };\n },\n});\n\nregisterAction({\n name: \"changelog_from_git_commits\",\n description: \"Generate a changelog from git commits\",\n async run(params) {\n const between = params.between as [string, string] | undefined;\n const pretty = (params.pretty ?? \"%B\") as string;\n const args = [\"log\", `--pretty=format:${pretty}`];\n if (between) args.push(`${between[0]}...${between[1]}`);\n else if (params.commits_count) args.push(`-${params.commits_count}`);\n else args.push(\"-10\");\n\n const { stdout } = await execFileAsync(\"git\", args);\n return stdout.trim();\n },\n});\n\nregisterAction({\n name: \"last_git_commit\",\n description: \"Get information about the last git commit\",\n async run() {\n const { stdout: hash } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%H\"]);\n const { stdout: message } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%B\"]);\n const { stdout: author } = await execFileAsync(\"git\", [\"log\", \"-1\", \"--format=%an\"]);\n return {\n commit_hash: hash.trim(),\n message: message.trim(),\n author_name: author.trim(),\n };\n },\n});\n\nregisterAction({\n name: \"ensure_git_status_clean\",\n description: \"Ensure the git repository has no uncommitted changes\",\n async run() {\n const { stdout } = await execFileAsync(\"git\", [\"status\", \"--porcelain\"]);\n if (stdout.trim().length > 0) {\n throw new Error(\"Git repository has uncommitted changes:\\n\" + stdout);\n }\n return { clean: true };\n },\n});\n\nregisterAction({\n name: \"git_branch\",\n description: \"Get the current git branch name\",\n async run() {\n const { stdout } = await execFileAsync(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"]);\n return stdout.trim();\n },\n});\n","import { registerAction } from \"../index.js\";\n\nregisterAction({\n name: \"slack\",\n description: \"Send a message to Slack\",\n async run(params) {\n const webhookUrl = (params.slack_url ?? params.webhook_url ?? process.env.SLACK_URL) as string;\n if (!webhookUrl) throw new Error(\"slack: webhook_url or SLACK_URL env var required\");\n\n const payload: Record<string, unknown> = {};\n if (params.message) payload.text = params.message;\n if (params.channel) payload.channel = params.channel;\n if (params.username) payload.username = params.username;\n if (params.icon_url) payload.icon_url = params.icon_url;\n\n if (params.payload || params.attachment_properties) {\n payload.attachments = [\n {\n fallback: params.message,\n color: (params.success === false) ? \"danger\" : \"good\",\n fields: Object.entries(params.payload ?? params.attachment_properties ?? {}).map(\n ([title, value]) => ({ title, value: String(value), short: String(value).length < 40 })\n ),\n },\n ];\n }\n\n const res = await fetch(webhookUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) throw new Error(`Slack webhook failed: ${res.status}`);\n return { sent: true };\n },\n});\n\nregisterAction({\n name: \"notification\",\n description: \"Display a macOS notification\",\n async run(params) {\n if (process.platform !== \"darwin\") return;\n const title = (params.title ?? \"fastnode\") as string;\n const message = (params.message ?? params.subtitle ?? \"\") as string;\n const { execFile } = await import(\"node:child_process\");\n const { promisify } = await import(\"node:util\");\n const exec = promisify(execFile);\n const script = `display notification \"${message}\" with title \"${title}\"`;\n await exec(\"osascript\", [\"-e\", script]).catch(() => {});\n return { notified: true };\n },\n});\n","import { registerAction } from \"../index.js\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport * as plist from \"plist\";\n\nregisterAction({\n name: \"get_info_plist_value\",\n description: \"Get a value from an Info.plist file\",\n async run(params) {\n const path = params.plist_path as string;\n const key = params.key as string;\n const content = await readFile(path, \"utf-8\");\n const parsed = plist.parse(content) as Record<string, unknown>;\n return parsed[key];\n },\n});\n\nregisterAction({\n name: \"set_info_plist_value\",\n description: \"Set a value in an Info.plist file\",\n async run(params) {\n const path = params.plist_path as string;\n const key = params.key as string;\n const value = params.value;\n const content = await readFile(path, \"utf-8\");\n const parsed = plist.parse(content) as Record<string, unknown>;\n parsed[key] = value;\n await writeFile(path, plist.build(parsed as any));\n return value;\n },\n});\n\nregisterAction({\n name: \"update_plist\",\n description: \"Update multiple values in a plist file\",\n async run(params) {\n const path = params.plist_path as string;\n const block = params.block as Record<string, unknown> | undefined;\n const content = await readFile(path, \"utf-8\");\n const parsed = plist.parse(content) as Record<string, unknown>;\n if (block) Object.assign(parsed, block);\n await writeFile(path, plist.build(parsed as any));\n return parsed;\n },\n});\n","import { registerAction } from \"../index.js\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nregisterAction({\n name: \"sh\",\n aliases: [\"shell\"],\n description: \"Execute a shell command\",\n async run(params) {\n const command = params.command as string;\n const { exec } = await import(\"node:child_process\");\n return new Promise<string>((resolve, reject) => {\n exec(command, { maxBuffer: 50 * 1024 * 1024 }, (err, stdout, stderr) => {\n if (err && params.error_callback) return resolve(stderr);\n if (err) return reject(err);\n resolve(stdout);\n });\n });\n },\n});\n\nregisterAction({\n name: \"puts\",\n aliases: [\"say\", \"echo\"],\n description: \"Print a message to stdout\",\n async run(params) {\n const message = (params.message ?? params[\"\"]) as string;\n console.log(message);\n return message;\n },\n});\n\nregisterAction({\n name: \"prompt\",\n description: \"Ask the user for input\",\n async run(params) {\n const text = (params.text ?? \"Enter a value:\") as string;\n const { createInterface } = await import(\"node:readline\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise<string>((resolve) => {\n rl.question(text + \" \", (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n },\n});\n\nregisterAction({\n name: \"lane_context\",\n description: \"Access the current lane context\",\n async run(_params, ctx) {\n return ctx.toRecord();\n },\n});\n\nregisterAction({\n name: \"is_ci\",\n aliases: [\"is_ci?\"],\n description: \"Check if running in a CI environment\",\n async run() {\n return !!(\n process.env.CI ||\n process.env.CONTINUOUS_INTEGRATION ||\n process.env.GITHUB_ACTIONS ||\n process.env.CIRCLECI ||\n process.env.TRAVIS ||\n process.env.JENKINS_URL ||\n process.env.BITRISE_IO ||\n process.env.BUILDKITE\n );\n },\n});\n\nregisterAction({\n name: \"number_of_commits\",\n description: \"Get the total number of commits in the repo\",\n async run() {\n const { stdout } = await execFileAsync(\"git\", [\"rev-list\", \"--count\", \"HEAD\"]);\n return parseInt(stdout.trim(), 10);\n },\n});\n\nregisterAction({\n name: \"ensure_env_vars\",\n description: \"Ensure required environment variables are set\",\n async run(params) {\n const vars = (params.env_vars ?? []) as string[];\n const missing = vars.filter((v) => !process.env[v]);\n if (missing.length > 0) {\n throw new Error(`Missing environment variables: ${missing.join(\", \")}`);\n }\n return { all_set: true };\n },\n});\n\nregisterAction({\n name: \"update_code_signing_settings\",\n description: \"Update code signing settings in an Xcode project\",\n async run(params, ctx) {\n const { updateSigningSettings } = await import(\"../../xcode/project.js\");\n await updateSigningSettings({\n projectPath: params.path as string,\n teamId: (params.team_id ?? ctx.get(\"TEAM_ID\")) as string,\n bundleIdentifier: (params.bundle_identifier ?? ctx.get(\"APP_IDENTIFIER\")) as string,\n codeSignIdentity: (params.code_sign_identity ?? \"Apple Distribution\") as string,\n profileName: params.profile_name as string | undefined,\n profileUuid: params.profile_uuid as string | undefined,\n automaticSigning: (params.use_automatic_signing ?? false) as boolean,\n });\n return { updated: true };\n },\n});\n","import type { LaneContext } from \"../lane/context.js\";\n\nexport interface ActionDefinition {\n name: string;\n aliases?: string[];\n description: string;\n run(params: Record<string, unknown>, context: LaneContext): Promise<unknown>;\n}\n\nconst actionRegistry = new Map<string, ActionDefinition>();\n\nexport function registerAction(definition: ActionDefinition): void {\n actionRegistry.set(definition.name, definition);\n if (definition.aliases) {\n for (const alias of definition.aliases) {\n actionRegistry.set(alias, definition);\n }\n }\n}\n\nexport function getAction(name: string): ActionDefinition | undefined {\n return actionRegistry.get(name);\n}\n\nexport function listActions(): ActionDefinition[] {\n const seen = new Set<ActionDefinition>();\n const result: ActionDefinition[] = [];\n for (const def of actionRegistry.values()) {\n if (!seen.has(def)) {\n seen.add(def);\n result.push(def);\n }\n }\n return result;\n}\n\n// Auto-register all built-in actions on first import\nlet _registered = false;\nexport async function ensureActionsRegistered(): Promise<void> {\n if (_registered) return;\n _registered = true;\n await import(\"./built-in/signing.js\");\n await import(\"./built-in/building.js\");\n await import(\"./built-in/distribution.js\");\n await import(\"./built-in/testing.js\");\n await import(\"./built-in/versioning.js\");\n await import(\"./built-in/git.js\");\n await import(\"./built-in/notifications.js\");\n await import(\"./built-in/plist.js\");\n await import(\"./built-in/utilities.js\");\n}\n\nexport const action = new Proxy(\n {} as Record<string, (params?: Record<string, unknown>) => Promise<unknown>>,\n {\n get(_target, prop: string) {\n return async (params: Record<string, unknown> = {}) => {\n const def = actionRegistry.get(prop);\n if (!def) {\n throw new Error(`Unknown action: ${prop}. Run 'fastnode actions' to see available actions.`);\n }\n // Context will be injected by the lane runner\n const context = (globalThis as any).__fastnodeLaneContext as LaneContext | undefined;\n if (!context) {\n throw new Error(`Action '${prop}' must be called within a lane context.`);\n }\n return def.run(params, context);\n };\n },\n }\n);\n","export class LaneContext {\n private values = new Map<string, unknown>();\n readonly platform: string | null;\n readonly laneName: string;\n readonly env: Record<string, string | undefined>;\n\n constructor(platform: string | null, laneName: string) {\n this.platform = platform;\n this.laneName = laneName;\n this.env = process.env as Record<string, string | undefined>;\n }\n\n get<T = unknown>(key: string): T | undefined {\n return this.values.get(key) as T | undefined;\n }\n\n set(key: string, value: unknown): void {\n this.values.set(key, value);\n }\n\n has(key: string): boolean {\n return this.values.has(key);\n }\n\n toRecord(): Record<string, unknown> {\n return Object.fromEntries(this.values);\n }\n}\n","import { LaneContext } from \"./context.js\";\nimport type { LaneDefinition, LaneCallback } from \"./index.js\";\nimport { _getLanes, _getHooks } from \"./index.js\";\nimport { ensureActionsRegistered } from \"../actions/index.js\";\n\nexport interface RunLaneOptions {\n lane: string;\n platform?: string;\n parameters?: Record<string, unknown>;\n}\n\nexport interface RunResult {\n success: boolean;\n result: unknown;\n duration: number;\n error?: Error;\n}\n\nexport async function runLane(options: RunLaneOptions): Promise<RunResult> {\n await ensureActionsRegistered();\n\n const lanes = _getLanes();\n const hooks = _getHooks();\n\n // Find the lane\n const key = options.platform\n ? `${options.platform}:${options.lane}`\n : options.lane;\n\n let definition = lanes.get(key);\n if (!definition && options.platform) {\n // Try without platform prefix\n definition = lanes.get(options.lane);\n }\n\n if (!definition) {\n const available = Array.from(lanes.keys()).join(\", \");\n throw new Error(\n `Lane '${key}' not found. Available lanes: ${available || \"(none)\"}`\n );\n }\n\n if (definition.isPrivate) {\n throw new Error(`Lane '${definition.name}' is private and cannot be called directly.`);\n }\n\n const ctx = new LaneContext(definition.platform, definition.name);\n\n // Inject parameters into context\n if (options.parameters) {\n for (const [k, v] of Object.entries(options.parameters)) {\n ctx.set(k, v);\n }\n }\n\n // Set global context for action proxy\n (globalThis as any).__fastnodeLaneContext = ctx;\n\n const startTime = Date.now();\n\n try {\n // Run beforeAll hooks\n for (const hook of hooks.beforeAll) {\n await hook(ctx);\n }\n\n // Run beforeEach hooks\n for (const hook of hooks.beforeEach) {\n await hook(ctx);\n }\n\n // Execute the lane\n const result = await definition.callback(ctx);\n\n // Run afterEach hooks\n for (const hook of hooks.afterEach) {\n await hook(ctx);\n }\n\n // Run afterAll hooks\n for (const hook of hooks.afterAll) {\n await hook(ctx);\n }\n\n const duration = Date.now() - startTime;\n return { success: true, result, duration };\n } catch (error) {\n const duration = Date.now() - startTime;\n return {\n success: false,\n result: null,\n duration,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n } finally {\n (globalThis as any).__fastnodeLaneContext = undefined;\n }\n}\n\nexport function listAvailableLanes(): Array<{\n name: string;\n platform: string | null;\n isPrivate: boolean;\n description?: string;\n}> {\n const lanes = _getLanes();\n return Array.from(lanes.values()).map((def) => ({\n name: def.name,\n platform: def.platform,\n isPrivate: def.isPrivate,\n description: def.description,\n }));\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve, join } from \"node:path\";\nimport { _registerLane, type LaneDefinition } from \"./index.js\";\n\nconst FASTFILE_NAMES = [\"Fastfile.ts\", \"Fastfile.js\", \"Fastfile.mts\", \"Fastfile.mjs\"];\n\nexport async function loadFastfile(dir?: string): Promise<{\n path: string;\n laneCount: number;\n}> {\n const baseDir = dir ?? process.cwd();\n let fastfilePath: string | null = null;\n\n // Search for Fastfile in common locations\n const searchDirs = [\n baseDir,\n join(baseDir, \"fastlane\"),\n join(baseDir, \"fastnode\"),\n ];\n\n for (const searchDir of searchDirs) {\n for (const name of FASTFILE_NAMES) {\n const candidate = resolve(searchDir, name);\n if (existsSync(candidate)) {\n fastfilePath = candidate;\n break;\n }\n }\n if (fastfilePath) break;\n }\n\n if (!fastfilePath) {\n throw new Error(\n `No Fastfile found. Searched for ${FASTFILE_NAMES.join(\", \")} in:\\n` +\n searchDirs.map((d) => ` - ${d}`).join(\"\\n\") +\n \"\\n\\nRun 'fastnode init' to create one.\"\n );\n }\n\n // Dynamic import of the Fastfile\n // For TypeScript files, the user needs tsx or ts-node registered\n const module = await import(fastfilePath);\n\n // Register all exported lanes\n let laneCount = 0;\n for (const [exportName, value] of Object.entries(module)) {\n if (isLaneDefinition(value)) {\n _registerLane(exportName, value);\n laneCount++;\n }\n }\n\n if (laneCount === 0) {\n throw new Error(\n `Fastfile at ${fastfilePath} has no exported lanes. ` +\n `Export functions wrapped with lane() or privateLane().`\n );\n }\n\n return { path: fastfilePath, laneCount };\n}\n\nfunction isLaneDefinition(value: unknown): value is LaneDefinition {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"callback\" in value &&\n typeof (value as LaneDefinition).callback === \"function\" &&\n \"isPrivate\" in value\n );\n}\n\nexport function generateFastfileTemplate(): string {\n return `import { lane, privateLane, beforeAll, afterAll, action } from \"fastnode\";\nimport type { LaneContext } from \"fastnode/lane\";\n\n// ── Hooks ──────────────────────────────────────────────────────────────────\n\nbeforeAll(async (ctx: LaneContext) => {\n console.log(\\`Running lane: \\${ctx.laneName}\\`);\n});\n\nafterAll(async (ctx: LaneContext) => {\n console.log(\\`Finished lane: \\${ctx.laneName}\\`);\n});\n\n// ── Lanes ──────────────────────────────────────────────────────────────────\n\nexport const beta = lane(\"ios\", async (ctx) => {\n // Create certificate\n const certResult = await action.cert({\n development: false,\n });\n\n // Get provisioning profile\n await action.sigh({\n app_identifier: \"com.example.app\",\n });\n\n // Build the app\n await action.build_app({\n scheme: \"MyApp\",\n export_method: \"app-store\",\n });\n\n // Upload to TestFlight\n await action.upload_to_testflight({\n changelog: \"Bug fixes and improvements\",\n });\n});\n\nexport const release = lane(\"ios\", async (ctx) => {\n // Upload to App Store\n await action.deliver({\n submit_for_review: true,\n });\n});\n\nexport const tests = lane(async (ctx) => {\n await action.run_tests({\n scheme: \"MyAppTests\",\n });\n});\n`;\n}\n","import type { LaneContext } from \"./context.js\";\n\nexport type LaneCallback = (ctx: LaneContext) => Promise<unknown>;\n\nexport interface LaneDefinition {\n name: string;\n platform: string | null;\n callback: LaneCallback;\n isPrivate: boolean;\n description?: string;\n}\n\nconst lanes = new Map<string, LaneDefinition>();\nconst hooks: {\n beforeAll: LaneCallback[];\n afterAll: LaneCallback[];\n beforeEach: LaneCallback[];\n afterEach: LaneCallback[];\n} = {\n beforeAll: [],\n afterAll: [],\n beforeEach: [],\n afterEach: [],\n};\n\nexport function lane(\n platformOrCallback: string | LaneCallback,\n callbackOrUndefined?: LaneCallback\n): LaneDefinition {\n let platform: string | null = null;\n let callback: LaneCallback;\n\n if (typeof platformOrCallback === \"function\") {\n callback = platformOrCallback;\n } else {\n platform = platformOrCallback;\n callback = callbackOrUndefined!;\n }\n\n // The name gets set when the Fastfile.ts is loaded (from the export name)\n const definition: LaneDefinition = {\n name: \"\",\n platform,\n callback,\n isPrivate: false,\n };\n return definition;\n}\n\nexport function privateLane(\n platformOrCallback: string | LaneCallback,\n callbackOrUndefined?: LaneCallback\n): LaneDefinition {\n const definition = lane(platformOrCallback, callbackOrUndefined);\n definition.isPrivate = true;\n return definition;\n}\n\nexport function beforeAll(callback: LaneCallback): void {\n hooks.beforeAll.push(callback);\n}\n\nexport function afterAll(callback: LaneCallback): void {\n hooks.afterAll.push(callback);\n}\n\nexport function beforeEach(callback: LaneCallback): void {\n hooks.beforeEach.push(callback);\n}\n\nexport function afterEach(callback: LaneCallback): void {\n hooks.afterEach.push(callback);\n}\n\nexport function _getLanes(): Map<string, LaneDefinition> {\n return lanes;\n}\n\nexport function _getHooks() {\n return hooks;\n}\n\nexport function _registerLane(name: string, definition: LaneDefinition): void {\n definition.name = name;\n const key = definition.platform ? `${definition.platform}:${name}` : name;\n lanes.set(key, definition);\n}\n\nexport { LaneContext } from \"./context.js\";\nexport { runLane, listAvailableLanes } from \"./runner.js\";\nexport type { RunLaneOptions, RunResult } from \"./runner.js\";\nexport { loadFastfile, generateFastfileTemplate } from \"./fastfile.js\";\n"]}
|