import type { ReferenceCapability } from './reference-adapter.js'; /** 판단에 필요한 것만 — 엔티티 전체를 받지 않는다. */ export interface ActuationTargetInput { /** 어느 트윈인가 — **거절 문장이 이것을 말한다.** 「모르는 트윈입니다」만으로는 찾을 수 없다. */ instanceId: string; /** 트윈이 있나. 없으면 `undefined`. */ twinExists: boolean; /** 이 트윈이 어느 사이트에서 왔나 — `TwinInstance.origin.siteId`. */ siteId?: string; /** 연결된 원본. 없으면 `undefined`(시뮬레이션으로만 세운 트윈). */ ref?: { source: string; adapterType: string; }; /** 커넥터가 등록되어 있나. */ adapterRegistered: boolean; /** * 그 커넥터가 실제로 낼 수 있는 능력 — `capabilitiesOf` 가 판정한 값. * * **낼 수 있나는 이 값만 본다.** 아래 둘은 못 낼 때 무엇을 고쳐야 하는지 말하기 위한 것이고, * 판정을 다시 만들지 않는다. */ capabilities: readonly ReferenceCapability[]; /** 커넥터가 `capabilities` 에 조치를 적었나. */ declaresActuate: boolean; /** 커넥터에 `actuate` 함수가 있나. */ hasActuateImpl: boolean; } /** 보낼 수 있다 — 어디로까지 정해진 상태. */ export interface ActuationAllowed { ok: true; siteId: string; adapterType: string; source: string; } /** 보낼 수 없다 — 왜인지 코드와 문장으로. */ export interface ActuationRefused { ok: false; code: ActuationRefusal; detail: string; } export type ActuationTarget = ActuationAllowed | ActuationRefused; /** * 보낼 수 있나 — **타입 가드로 둔다.** * * 이 저장소는 기본 설정이 `strict: false` 이고(`packages/tsconfig-base.json`), 그 상태에서는 `ok` 가 * `true`·`false` 로 갈린 유니온이 `if (!t.ok)` 로 좁혀지지 않는다. 부르는 쪽마다 캐스팅을 넣으면 그 * 캐스팅이 언젠가 틀린 쪽을 가리킨다. 판정을 여기 한 자리에 둔다. */ export declare function isActuationAllowed(target: ActuationTarget): target is ActuationAllowed; /** * 왜 못 보내나 — **코드로 답한다.** * * 화면이 이 코드로 다음 할 일을 가른다. 문장만 주면 화면은 그것을 그대로 띄우는 것밖에 못 하고, * 사람은 연결 설정을 열어야 하는지 커넥터를 고쳐야 하는지 모른다. */ export type ActuationRefusal = 'unknown-twin' | 'no-source' | 'no-adapter' | 'not-declared' | 'not-implemented' | 'not-supported' | 'no-site'; /** * 보낼 수 있나 — 보낼 수 있으면 **어디로**까지 답한다. * * 순서가 뜻을 갖는다. 앞의 것이 없으면 뒤를 물을 수 없다 — 원본을 모르면 능력을 물을 데가 없다. */ export declare function actuationTarget(input: ActuationTargetInput): ActuationTarget; /** 승인은 남는다는 것을 함께 말한다 — 원인을 고친 뒤 다시 넘길 수 있다. */ export declare const APPROVAL_STANDS = "\uC2B9\uC778\uC740 \uADF8\uB300\uB85C \uB0A8\uC544 \uC788\uC2B5\uB2C8\uB2E4 \u2014 \uACE0\uCE5C \uB4A4 \uB2E4\uC2DC \uB118\uAE38 \uC218 \uC788\uC2B5\uB2C8\uB2E4";