/** * Define a remote domain. Views/functions are first-class domain members; their * serving URL is stamped later by spec producers and is also the worker issuer. */ import type { FunctionBinding } from '@astrale-os/kernel-api/routed'; import type { BoundMethod, CompiledDomain, FunctionSchema, ViewSchema } from '@astrale-os/kernel-core/domain'; import type { Core, Schema } from '@astrale-os/kernel-dsl'; import type { DomainManifest } from '../config/define-domain.js'; import type { AnyRemoteFunctionDef, ViewDef } from '../define/index.js'; import type { SchemaMethodsImpl } from '../method/class.js'; import type { AnyRemoteHandler } from '../method/single.js'; export type RemoteDomainConfig = { schema: S; methods: SchemaMethodsImpl; core?: Core; views?: Record>; viewsFolder?: string; remoteFunctions?: Record; functionsFolder?: string; /** Presentation metadata for `/meta` (logo / entry view). Carried verbatim. */ manifest?: DomainManifest; /** Physical tree path for the Domain node (absolute, e.g. `/domains/acme`); default `/domains/`. */ path?: string; }; /** Effective bindings + folder layout + member schemas for auxiliary routes, resolved against `url`. */ export type AuxiliaryMetadata = { url: string; viewsFolder: string; functionsFolder: string; viewBindings: Record; remoteFunctionBindings: Record; /** Function members' impl/binding half (`function.`) for `serialize`. */ functionSchemas: FunctionSchema[]; /** View members' impl/binding half (`view.`) for `serialize`. */ viewSchemas: ViewSchema[]; }; export type RemoteDomain = { /** Define-time compile has structure only; bindings are stamped at materialization. */ compiled: CompiledDomain; methods: BoundMethod[]; views?: Record>; remoteFunctions?: Record; /** Presentation metadata for `/meta` (logo / entry view); `createRemoteServer` stamps it. */ manifest?: DomainManifest; /** The original config, so `materializeRemoteDomain` re-materializes from source. */ config: MaterializeInputs; /** * Physical tree path for the Domain node (absolute string, e.g. `/domains/acme`). * Read by `buildInstallGraph` and passed to `serialize` as `treeMount`; unset => * `/domains/` (applied in build-spec). Addressing is unaffected. */ path?: string; }; /** The defineRemoteDomain inputs `materializeRemoteDomain` needs to re-materialize. */ type MaterializeInputs = { userCore?: Core; viewsFolder: string; functionsFolder: string; }; export declare function defineRemoteDomain(): (config: RemoteDomainConfig) => RemoteDomain; /** Materialize aux member bindings against the real serving URL. Pure and repeatable. */ export declare function materializeRemoteDomain(domain: RemoteDomain, url: string): { compiled: CompiledDomain; auxiliary: AuxiliaryMetadata | undefined; }; export {}; //# sourceMappingURL=define.d.ts.map