import type { NodeKeyPair } from '@forgezero/runtime/identity'; import { type GuestBindingV3, type GuestPrivateNetworkAttachment } from '@forgezero/runtime/guest-enrolment'; export type GuestBinding = GuestBindingV3; export type { GuestPrivateNetworkAttachment } from '@forgezero/runtime/guest-enrolment'; /** Fail closed when setup supplied only part of a cross-network attachment. */ export declare function privateNetworkAttachmentFromEnvironment(env?: Record): GuestPrivateNetworkAttachment | undefined; export interface GuestEnrolmentOptions { apiUrl: string; /** Already-unsealed systemd credential. Production uses this path. */ token?: string; /** Legacy/dev input; removed after a successful exchange. */ tokenPath?: string; /** Removes the encrypted one-time source after the binding is durable. */ consume?: () => void | Promise; /** Non-secret coordinates needed to recover the tenant route after restart. */ statePath: string; nodeKey: string; keys: NodeKeyPair; label?: string; gitDeployPublicKey?: string; /** Public half of the runner-only SSH identity; safe to show for authorized_keys. */ bootstrapSshPublicKey?: string; privateNetworkAttachment?: GuestPrivateNetworkAttachment; /** Stable API ingress identity; signed with the rest of the enrolment body. */ edgeHostname?: string; fetch?: (input: URL, init: RequestInit) => Promise; requestTimeoutMs?: number; } /** Load only routing coordinates. The node seed and enrolment token never enter this file. */ export declare function loadGuestBinding(path: string, expectedNodeKey: string): GuestBinding | null; /** Exchange the cloud-init capability for the guest's permanent public identity. */ export declare function enrolGuestIdentity(options: GuestEnrolmentOptions): Promise;