import { Address, Effects } from "../types" import { NetworkInterfaceType } from "../util/utils" import { AddressReceipt } from "./AddressReceipt" import { Host } from "./Host" import { Origin } from "./Origin" /** * A helper class for creating a Network Interface * * Network Interfaces are collections of web addresses that expose the same API or other resource, * display to the user with under a common name and description. * * All URIs on an interface inherit the same ui: bool, basic auth credentials, path, and search (query) params * * @param options * @returns */ export class NetworkInterfaceBuilder { constructor( readonly options: { effects: Effects name: string id: string description: string hasPrimary: boolean disabled: boolean type: NetworkInterfaceType username: null | string path: string search: Record }, ) {} /** * A function to register a group of origins ( :// : ) with StartOS * * The returned addressReceipt serves as proof that the addresses were registered * * @param addresses * @returns */ async export[]>( origins: Origins, ): Promise { const { name, description, hasPrimary, disabled, id, type, username, path, search, } = this.options const addresses = Array.from(origins).map((o) => o.build({ username, path, search, scheme: null }), ) await this.options.effects.exportNetworkInterface({ interfaceId: id, name, description, hasPrimary, disabled, addresses, type, }) return addresses as Address[] & AddressReceipt } }