/** 공간 판정 결과. */ export interface IngestSpaceChoice { /** 실제로 쓸 공간 id. */ spaceId: string; /** 사용자가 기존 현장에 합치기를 골랐나(마스터가 파생한 공간과 다른 곳으로 들어가나). */ joined: boolean; } /** 거절 사유 — 호출측이 문장을 만들 때 쓴다(언어 중립 코드). */ export declare const INGEST_SPACE_NOT_FOUND = "space-not-found"; /** * 요청받은 공간과 마스터가 파생한 공간 중 무엇으로 들어갈지 정한다. * * @param masterSpaceId 마스터에서 파생된 공간 id(요청이 없을 때의 기본). * @param requested 사용자가 고른 기존 공간 id. 없으면 빈 값/undefined. * @param requestedExists 그 공간이 이 테넌트에 실제로 있나(호출측이 조회해 넘긴다). * @throws 요청한 공간이 없으면 — 알리지 않고 새로 만들지 않는다. */ export declare function resolveIngestSpace(masterSpaceId: string, requested: string | undefined | null, requestedExists: boolean): IngestSpaceChoice; /** * 실 시스템 import 가 현장을 고를 때의 거절 판정 — **순수**. * * 레퍼런스 하나는 사이트를 여럿 발견할 수 있고(`discoverSites`), 그 사이트마다 트윈이 하나씩 생긴다. * 그런데 "이 현장에 더한다" 는 **한 곳**을 가리키는 말이다. 사이트 여럿을 한 공간에 넣으면 서로 다른 * 현장의 구역·랜드마크가 id 로 합쳐지고(`unionById`), 그 사실을 알아차릴 때는 이미 이벤트가 양쪽에 * 쌓여 있다 — 손으로 되돌릴 수 없는 종류다. 그래서 **묻지 않고 합치지 않고, 거절한다.** * * 공간을 고르지 않으면 지금까지의 거동 그대로다: 사이트마다 마스터가 파생한 공간으로 들어간다. */ export type ImportSpaceRefusalCode = 'space-with-multiple-sites'; export interface ImportSpaceRefusal { code: ImportSpaceRefusalCode; params?: Record; /** 영어 canonical — 로그에 남고, 번역이 없으면 그대로 보인다(발견 오류와 같은 규약). */ message: string; } /** * @param siteCount 실제로 만들 사이트 수(필터 적용 후). * @param requested 사용자가 고른 기존 공간 id. 없으면 판정할 것이 없다. * @returns 거절 사유. 없으면 진행해도 된다. */ export declare function refuseImportSpace(siteCount: number, requested?: string | null): ImportSpaceRefusal | undefined; /** 구역·랜드마크처럼 id 로 합쳐지는 것들. */ interface Identified { id?: string; } /** * 합치는 쪽과 기존 쪽이 같은 id 를 쓰는 것들을 찾아 경고 문장을 만든다. * * 정당한 경우(같은 현장의 같은 구역)와 사고(서로 다른 구역이 우연히 같은 이름)를 기계가 가릴 수는 * 없다. 구분할 수 없는 것을 고르지 않고, **무엇이 합쳐졌는지 말한다.** */ export declare function collidingIds(existing: readonly Identified[] | undefined | null, incoming: readonly Identified[] | undefined | null): string[]; export {};