import { O as ObfuscationLayer } from './core-ihIEWmI5.js';

/**
 * Runtime detection helpers with no platform-specific imports.
 *
 * @module adapters/runtime
 */
/** 감지된 런타임 환경 식별자 */
type RuntimeId = "node" | "browser" | "edge" | "deno" | "bun" | "unknown";
/**
 * 현재 JavaScript 런타임 환경을 감지합니다.
 *
 * 감지는 순수하게 globalThis 검사에 기반하며 Node.js 내장 모듈을 임포트하지 않습니다.
 */
declare function detectRuntime(): RuntimeId;

/**
 * 한글 음절 난독화 레이어 구현.
 *
 * 암호화된 charset 인코딩 문자열을 결정론적 전단사 매핑을 사용하여
 * 자연스러운 한국어 음절 블록으로 변환합니다. 매핑은 다음을 보장합니다:
 * - 모든 출력 문자가 유효한 한국어 음절 블록 (U+AC00–U+D7A3)
 * - 단일 문자 빈도가 기대 균등 빈도의 3배를 초과하지 않음
 * - 출력 길이 <= 입력 길이의 1.5배 (실제로는 1:1 매핑)
 *
 * 플랫폼 독립적: Node.js 임포트 없음.
 *
 * @module obfuscation/ObfuscationLayer
 */

/**
 * 한글 음절 매핑을 사용하여 ObfuscationLayer 인터페이스를 구현합니다.
 *
 * 입력 알파벳(인코더가 사용하는 charset 문자)이 주어지면,
 * 이 레이어는 각 문자를 결정론적으로 한글 음절에 매핑합니다.
 * 매핑은 전단사(가역적)이며 위치에 따라 각 문자의 할당된 음절 범위를
 * 순환하여 출력 빈도를 균등하게 분배합니다.
 */
declare class HangulObfuscationLayer implements ObfuscationLayer {
    private readonly config;
    /**
     * 새 HangulObfuscationLayer를 생성합니다.
     *
     * @param alphabet - 완전한 입력 알파벳 (charset 문자 + 패딩 문자).
     *   인코딩된 문자열에 나타날 수 있는 모든 고유 문자.
     */
    constructor(alphabet: string[]);
    /**
     * 암호화된 charset 인코딩 문자열을 한글 음절로 변환합니다.
     *
     * 각 입력 문자는 할당된 범위의 한글 음절에 매핑됩니다.
     * 문자열 내 위치가 범위 내 어떤 음절을 사용할지 결정하여
     * 균등한 빈도 분포를 보장합니다.
     *
     * @param input - 암호화된 charset 인코딩 문자열
     * @returns 한글 음절 블록 문자열 (U+AC00–U+D7A3)
     * @throws 입력에 알파벳에 없는 문자가 포함된 경우 에러
     */
    obfuscate(input: string): string;
    /**
     * 난독화를 역변환하여 원본 charset 인코딩 문자열을 복원합니다.
     *
     * 각 한글 음절이 어떤 문자의 범위에 속하는지 판별하여
     * 원래 문자로 매핑합니다.
     *
     * @param input - 난독화된 한글 음절 문자열
     * @returns 원본 charset 인코딩 문자열
     * @throws 입력에 유효한 한글 음절 범위 밖의 문자가 포함되거나
     *   알파벳 문자에 매핑되지 않는 문자가 포함된 경우 에러
     */
    deobfuscate(input: string): string;
}
/**
 * Ddu64 인코더 출력과 호환되는 ObfuscationLayer를 생성합니다.
 *
 * charset/패딩 외에 footer 마커(ELYSIA/GRISEO/ENC/V3/V4)와 숫자(0-9)까지 알파벳에
 * 포함하므로, 압축/암호화/파이프라인 마커가 붙은 실제 인코더 출력도 안전하게
 * deobfuscate할 수 있습니다.
 *
 * 일반적으로는 `Ddu64`의 `obfuscate` 옵션을 쓰는 것으로 충분하며, 이 헬퍼는 인코더와
 * 동일한 난독화 매핑을 외부에서 재현해야 할 때 사용합니다.
 *
 * @param charSet - 인코딩에 사용되는 charset 문자
 * @param paddingChar - 패딩 문자
 * @returns 인코더 호환 ObfuscationLayer 인스턴스
 */
declare function createEncoderObfuscationLayer(charSet: string[], paddingChar: string): ObfuscationLayer;

export { HangulObfuscationLayer as H, createEncoderObfuscationLayer as c, detectRuntime as d };
