@mica/sdk (SDK contract v1)
    Preparing search index...

    Interface CatalogEntry

    One installable app as an operator's catalog server describes it — everything installFromCatalog needs to build the manifest itself, without ever running the bundle to ask it. See registry.ts's installVerified: the manifest is built from these fields, never from import()ing fetched code.

    interface CatalogEntry {
        bundleUrl: string;
        color: string;
        description: string;
        devices?: readonly ("phone" | "tablet")[];
        icon?: string;
        id: string;
        name: string;
        networkHosts?: readonly string[];
        permissions: (
            | "messages"
            | "admin"
            | "location"
            | "camera"
            | "account"
            | "bank"
            | "call"
            | "contacts"
            | "control-center"
            | "highscores"
            | "jobs"
            | "mail"
            | "marketplace"
            | "media"
            | "notifications"
            | "reports"
            | "social"
            | "storage"
            | "app-events"
            | "app-registry"
            | "app-registry-write"
            | "clock"
            | "clock-write"
            | "devtools"
            | "display"
            | "display-write"
            | "keybinds"
            | "keybinds-write"
            | "lock-screen"
            | "lock-screen-write"
            | "music"
            | "navigation"
            | "notification-settings"
            | "notification-settings-write"
            | "system-hardware"
            | "system-hardware-write"
            | "theme"
            | "theme-write"
            | "wallpaper"
            | "wallpaper-write"
        )[];
        requires?: ("jobs" | "money")[];
        requiresNetwork?: boolean;
        sdkContract?: string;
        services?: readonly string[];
        sha256: string;
        version: string;
    }
    Index
    bundleUrl: string
    color: string
    description: string
    devices?: readonly ("phone" | "tablet")[]

    MICA-260: the devices the app appears on. See AppManifest.devices. Here for the reason requires is; absent means the phone, which is what every catalog written before the field existed says.

    icon?: string
    id: string
    name: string
    networkHosts?: readonly string[]

    MICA-24: the exact origins the installed add-on's frame may fetch(). See AppManifest.networkHosts.

    permissions: (
        | "messages"
        | "admin"
        | "location"
        | "camera"
        | "account"
        | "bank"
        | "call"
        | "contacts"
        | "control-center"
        | "highscores"
        | "jobs"
        | "mail"
        | "marketplace"
        | "media"
        | "notifications"
        | "reports"
        | "social"
        | "storage"
        | "app-events"
        | "app-registry"
        | "app-registry-write"
        | "clock"
        | "clock-write"
        | "devtools"
        | "display"
        | "display-write"
        | "keybinds"
        | "keybinds-write"
        | "lock-screen"
        | "lock-screen-write"
        | "music"
        | "navigation"
        | "notification-settings"
        | "notification-settings-write"
        | "system-hardware"
        | "system-hardware-write"
        | "theme"
        | "theme-write"
        | "wallpaper"
        | "wallpaper-write"
    )[]

    What this app discloses it reaches for — shown to a player before they install it.

    requires?: ("jobs" | "money")[]

    Server capabilities the app cannot work without. See AppManifest.requires.

    A catalog entry is the only thing installVerified builds a remote manifest from — it never import()s the fetched bundle to ask what it claims to be — so a capability absent here is a capability the app can never declare, however plainly its own source says otherwise. Optional, and absent means "needs none", which is both the right default and the only thing a catalog written before this field existed can say.

    requiresNetwork?: boolean

    Whether the phone should block this app while signal is out. Defaults to false.

    sdkContract?: string

    MICA-196: the SDK contract version the bundle was compiled against. See AppManifest.sdkContract.

    Here rather than read out of the fetched bundle for the reason every other field is: installVerified never runs the code to ask it what it is. Absent means "did not say" and installs exactly as it did before.

    services?: readonly string[]

    MICA-196: the server services this app owns. See AppManifest.services.

    Here for the same reason requires is: installVerified builds the installed manifest from this entry and nothing else, never by running the fetched bundle to ask what it claims to be, so a field absent here is one the installed app can never declare. Absent means "did not say", and the old prefix rule answers for it — which is what every catalog written before this field existed says, and the right thing for it to mean.

    sha256: string

    Lowercase hex SHA-256 of the exact bytes at bundleUrl. Required — installFromCatalog refuses to import a bundle without one.

    version: string