{"version":3,"sources":["../../src/match/storage/git.ts","../../src/match/storage/s3.ts","../../src/match/storage/local.ts","../../src/cert/csr.ts","../../src/cert/cert.ts","../../src/sigh/index.ts","../../src/match/storage/index.ts","../../src/match/encryption.ts","../../src/match/index.ts"],"names":["mkdtempSync","join","tmpdir","writeFileSync","chmodSync","execFileSync","rmSync","mkdirSync","webcrypto","x509","cert","content","result","mkdir","writeFile","promisify","execFile","homedir","GitStorage","S3Storage","LocalStorage","randomBytes","pbkdf2Sync","createCipheriv","createDecipheriv","createHash","extname","readdir","readFile","existsSync","createCertificate","createProfile"],"mappings":"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","file":"index.cjs","sourcesContent":["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","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","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"]}