Parameters
- contextUser: UserInfo
- manifest: {
$schema?: string;
categories?: string[];
code?: { sourceDirectory?: string; visibility?: "public" | "private" };
color?: string;
configuration?: { schema?: Record<string, unknown> };
dependencies?:
| {
[k: string]: { repository: string; subpath?: string; version: string };
}
| Record<
string,
string
| { repository?: string; subpath?: string; version?: string },
>;
description?: string;
displayName?: string;
hooks?: {
postInstall?: string;
postInstallModule?: string;
postUpgrade?: string;
postUpgradeModule?: string;
preRemove?: string;
preRemoveModule?: string;
};
icon?: string;
license?: string;
manifestVersion?: 1;
metadata?: { directory?: string };
migrations?: {
directory?: string;
engine?: "flyway" | "skyway";
teardownDirectory?: string;
};
mjVersionRange?: string;
name?: string;
packages?: {
client?: {
name?: string;
role?: | "bootstrap"
| "actions"
| "engine"
| "provider"
| "module"
| "components"
| "library";
startupExport?: string;
}[];
prefix?: string;
registry?: string;
server?: {
name?: string;
role?: | "bootstrap"
| "actions"
| "engine"
| "provider"
| "module"
| "components"
| "library";
startupExport?: string;
}[];
shared?: {
name?: string;
role?: | "bootstrap"
| "actions"
| "engine"
| "provider"
| "module"
| "components"
| "library";
startupExport?: string;
}[];
};
publisher?: { email?: string; name?: string; url?: string };
repository?: string;
schema?: {
createIfNotExists?: boolean;
entityPackage?: string;
name?: string;
};
tags?: string[];
version?: string;
} Optionalcallbacks: AppInstallCallbacksOptionaltransactionGroup: TransactionGroupBase- initialStatus: AppStatus = 'Active'
Optionalprovider: IMetadataProviderOptionalsubpath: string
Returns Promise<string>
The OpenApp record ID (pre-generated for new, existing for reinstall)
Records a new app installation in the MJ: Open Apps table.
When a TransactionGroup is provided the save is queued (not executed) and the caller is responsible for calling tg.Submit(). The returned appId is available immediately because MJ pre-generates IDs on NewRecord().