import { withXcodeProject, type ConfigPlugin } from '@expo/config-plugins';
import type { ExpoConfig } from '@expo/config-types';
type XcodeProject = Parameters<Parameters<typeof withXcodeProject>[1]>[0]['modResults'];
export interface ConnectPluginProps {
    /** Explicit App Group override. Wins over ConnectConfig.json when set. */
    iosAppGroupIdentifier?: string;
    /**
     * Apple Team ID (10-char) used to sign the host app and the push extensions.
     * Wins over `Connect.iOSDevelopmentTeam` in ConnectConfig.json when set.
     * Required for push: without a team, a CLI build drops the `aps-environment`
     * entitlement to ad-hoc signing and the OS issues no APNs token.
     */
    iosDevelopmentTeam?: string;
}
/**
 * Validates an App Group identifier against Apple's format and returns it.
 * Throws an actionable error otherwise.
 */
export declare function assertValidAppGroup(value: string, source: string): string;
/**
 * Resolves the iOS App Group identifier used by ConnectNSE.
 *
 * Priority:
 *  1. `iosAppGroupIdentifier` plugin prop in app.json (explicit override)
 *  2. `Connect.iOSAppGroupIdentifier` in `<projectRoot>/ConnectConfig.json`
 *
 * The resolved value is validated against Apple's App Group format. Throws a
 * clear, actionable error if neither source provides the value, or if the
 * provided value is malformed.
 */
export declare function resolveAppGroupIdentifier(projectRoot: string, props: ConnectPluginProps): string;
/**
 * Returns the content of `plugin/swift/NotificationService.swift` with the
 * placeholder replaced by the resolved App Group identifier and a generated
 * header prepended.
 */
export declare function substituteSwiftTemplate(templatePath: string, appGroupIdentifier: string): string;
/**
 * Generates the Info.plist content for the ConnectNSE target.
 *
 * RCTNewArchEnabled is intentionally omitted: the NSE links the Connect SDK
 * only — no React Native runtime is present in the extension process.
 */
export declare function buildNSEInfoPlist(): string;
/** Generates the entitlements plist content for the ConnectNSE target. */
export declare function buildNSEEntitlements(appGroupIdentifier: string): string;
/**
 * Builds the Ruby Podfile snippet shared by the NSE and NCE mods: a helper
 * that resolves the AcousticConnect pod (name + version requirements) from
 * ConnectConfig.json, plus an extension `target` that links it. Centralised
 * here so the NSE and NCE blocks have a single source of truth for the
 * resolution logic — they differ only in marker, helper name, and target name.
 *
 * Tolerates a missing ConnectConfig.json or a missing `Connect` key: when
 * the file or key is absent the block defaults to AcousticConnectDebug with
 * floor '>= 2.1.12' and no version pin, so prop-only setups (no
 * ConnectConfig.json) keep working.  If the file exists but contains invalid
 * JSON, `pod install` will print a warning and use the same defaults rather
 * than crashing.
 */
export declare function buildConnectPodTargetBlock(marker: string, helperName: string, targetName: string): string;
/**
 * Returns the Ruby snippet to inject into the Expo-generated Podfile for the
 * ConnectNSE target. Thin wrapper over {@link buildConnectPodTargetBlock}.
 */
export declare function buildPodfileBlock(): string;
/**
 * Injects the ConnectNSE Podfile block into `podfileContent` if not already
 * present (idempotent, guarded by PODFILE_MARKER).
 */
export declare function injectPodfileBlock(podfileContent: string): string;
/**
 * Adds the HOST app's push entitlements. Merges idempotently:
 * - `aps-environment` — the APNs (Push Notifications) capability. Required for
 *   the SDK's automatic `registerForRemoteNotifications()` to receive a device
 *   token; without it iOS fails registration with "no valid aps-environment
 *   entitlement string found", so no token is ever sent to the collector.
 *   Mirrors the bare-workflow host entitlements. `development` targets the
 *   sandbox APNs used by dev/`expo run:ios`/EAS `development` builds;
 *   production/TestFlight builds need `production`.
 * - `com.apple.security.application-groups` — shared App Group for the host app
 *   and the NSE/NCE extensions. Never clobbers an existing array.
 */
export declare function withNSEEntitlements(config: ExpoConfig, appGroupIdentifier: string): ExpoConfig;
/**
 * Extracts a build setting value scoped to the host native target's
 * configuration list for the given `configName` (e.g. "Debug" or "Release").
 * Falls back to the other host config if the named one is absent, then to the
 * hardcoded `fallback`.
 *
 * Scoped to host configs only: configs whose CODE_SIGN_ENTITLEMENTS references
 * one of `skipTargetNames` (the extension targets this plugin generates) are
 * skipped, so values are never mirrored from a previously generated extension
 * target. Defaults to `[NSE_TARGET_NAME]`; the NCE mod (withConnectNCE) passes
 * both ConnectNSE and ConnectNCE so a re-run that already wrote the NSE target
 * never mirrors the sibling extension's settings.
 */
export declare function getHostBuildSettingForConfig(xcodeProject: XcodeProject, setting: string, configName: string, fallback: string, skipTargetNames?: string[]): string;
/**
 * Adds the ConnectNSE Xcode target (app_extension) to the project.
 *
 * Follows the OneSignal plugin pattern (withOneSignalNSE.ts) using the
 * `xcode` API exposed via `config.modResults`.
 *
 * Idempotent: if a target named ConnectNSE already exists, skips target
 * creation but still (re)writes the source files.
 */
export declare function withNSEXcodeProject(config: ExpoConfig, appGroupIdentifier: string, swiftContent: string): ExpoConfig;
/**
 * Injects the ConnectNSE Podfile target block via withDangerousMod.
 * Guarded by a marker comment — re-runs are no-ops.
 *
 * M5: throws a clear, actionable error when the Podfile does not exist at
 * mod-execution time, instead of silently returning — a silent skip would
 * ship an NSE whose `import Connect` cannot resolve.
 */
export declare function withNSEPodfile(config: ExpoConfig): ExpoConfig;
/**
 * Expo Config Plugin mod that provisions a Notification Service Extension
 * (NSE) Xcode target named `ConnectNSE`.
 *
 * Applies three mutations — all idempotent:
 *  1. Host app entitlements: merges App Group into
 *     `com.apple.security.application-groups`.
 *  2. Xcode project: adds ConnectNSE target + files (skips if already present).
 *  3. Podfile: injects `target 'ConnectNSE'` block (guarded by marker comment).
 *
 * M4: `config._internal.projectRoot` is required. If absent (i.e. invoked
 * outside Expo CLI), an actionable error is thrown rather than silently
 * falling back to `process.cwd()`, which would misresolve ConnectConfig.json
 * in monorepo setups.
 */
export declare const withConnectNSE: ConfigPlugin<ConnectPluginProps>;
export {};
//# sourceMappingURL=withConnectNSE.d.ts.map