import { z } from 'zod'; import type { JenkinsConfig } from './config.js'; export declare const buildJobSchema: z.ZodString; export declare const buildIdSchema: z.ZodNumber; export declare const requestIdSchema: z.ZodString; export declare const buildParametersSchema: z.ZodRecord; export declare const triggerBuildSchema: z.ZodObject<{ job: z.ZodString; request_id: z.ZodString; parameters: z.ZodOptional>; }, z.core.$strip>; type TriggerInput = z.infer; /** * 예약이 이보다 젊으면 결과가 없는 재호출을 `pending`(다른 호출이 처리 중)으로, 더 오래됐으면 `unknown` * (도중에 죽음)으로 본다. crumb 조회(1회, 60초) + POST(1회, 60초) 최악 소요보다 넉넉하게 잡는다. */ export declare const PENDING_WINDOW_MS: number; /** 예약·receipt 가 사는 곳. os.homedir() 를 호출 시점에 읽는다 (테스트가 HOME 을 바꾼다). */ export declare function buildRequestsDir(): string; /** * 파라미터 지문용 설치별 비밀 키 (~/.mimi-seed/jenkins-build-requests/.key, 0600). * * 지문을 평문 sha256 으로 두면 짧은 파라미터(버전 번호·브랜치 이름)는 receipt 만 보고 사전 대입으로 되찾을 수 * 있다. 그래서 HMAC 으로 소금 친다. 처음 쓸 때 공용 writer 로 temp 에 쓰고 link(2) 로 "없을 때만" 게시한다 — * 두 프로세스가 동시에 만들어도 한 키만 살아남고, 진 쪽은 이긴 키를 다시 읽는다 (각자 다른 키로 지문을 만들면 * 같은 요청이 "다른 파라미터" 로 거절된다). 키가 사라지면 기존 예약의 재호출은 지문 불일치로 거절된다 — 다시 * 보내지는 않는다. 예약 디렉터리 이름은 키와 무관한 sha256 이라 키를 지워도 중복 발송이 풀리지 않는다. */ export declare function fingerprintKey(): Buffer; /** * Local durable at-most-once dispatch, not Jenkins-side exactly-once delivery. * Keep reservations indefinitely once the POST may have been sent: a crash after POST must never become a retry. * Only an HMAC fingerprint and bounded response metadata are stored, never parameters or tokens. * Once the POST may have been sent this function never throws — it always returns what it knows. */ export declare function triggerBuild(cfg: JenkinsConfig, input: TriggerInput): Promise<{ message?: string | undefined; http_status?: number | undefined; queue_id?: number | undefined; queue_url?: string | undefined; request_id: string; state: "pending" | "unknown" | "queued" | "rejected"; replayed: boolean; } | { persisted: boolean; message: string; http_status?: number | undefined; queue_id?: number | undefined; queue_url?: string | undefined; request_id: string; state: "pending" | "unknown" | "queued" | "rejected"; replayed: boolean; }>; export declare function getQueueItem(cfg: JenkinsConfig, queueId: number): Promise<{ queue_id: number; state: string; message: string; } | { blocked: boolean; buildable: boolean; stuck: boolean; why: string | null; build_number?: number | undefined; queue_id: number; queue_url: string; state: string; message?: undefined; }>; export declare function getBuildStatus(cfg: JenkinsConfig, job: string, buildNumber: number): Promise<{ job: string; build_number: number; state: string; build_url: string; } | { number: number; building: boolean; result: "SUCCESS" | "FAILURE" | "UNSTABLE" | "ABORTED" | "NOT_BUILT" | null; timestamp?: number | undefined; duration?: number | undefined; job: string; build_number: number; build_url: string; state?: undefined; }>; export {};