/** * This file was automatically generated by json-schema-to-typescript. * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, * and run json-schema-to-typescript to regenerate this file. */ /** * Schema describing the set of configurations for applications running in **io.Connect Desktop**. */ export type ApplicationConfigSet = ApplicationConfig[]; /** * Schema describing the configuration for an application running in **io.Connect Desktop**. */ export interface ApplicationConfig { /** * Type of the application. */ type: "window" | "activity" | "exe" | "node" | "workspaces" | "webGroup" | "clickonce" | "citrix" | "childWindow"; /** * Detailed configuration based on the application type. */ details: WindowConfig | ActivityConfig | ExeConfig | NodeConfig | WorkspacesConfig | WebGroupConfig | ClickOnceConfig | CitrixConfig | ChildWindowConfig; /** * Name of the application. Should be unique. */ name: string; /** * Version of the application. */ version?: string; /** * Title used when visualizing the application. */ title?: string; /** * User friendly (longer) description that can be used by the **io.Connect Desktop** clients to show more detailed application information. */ caption?: string; /** * Specifies in which **io.Connect Desktop** configuration mode these applications will be available. */ configMode?: "All" | "File" | "CM"; /** * Tooltip (extended description) that will be used when visualizing the application. */ tooltip?: string; /** * If `true`, the application will auto start. */ autoStart?: boolean; /** * Determines the priority with which the app will be started. If not set, the app will be considered with lowest priority. Use a number if you want to set the start priority of an end user app. Use an object if you want to set the start priority of system apps. */ runPriority?: number | RunPriority; /** * This option is valid for system and auto start applications and if it is `true`, they will auto start after a successful SSO login. Note that user applications are always initialized (and this way auto started) after SSO login, so this option is useless for them. */ requiresSSO?: boolean; /** * This option is valid for system applications and if `true`, the application will start after **io.Connect Desktop** initialization. Usually, this is a container based web UI application which acts as an **io.Connect Desktop** client. */ shell?: boolean; /** * If `true`, the application default layout will not be auto saved when it is closed and on the next start, if the layout exists, it will be ignored. */ ignoreSavedLayout?: boolean; /** * Deprecated. Use `ignoreSavedLayout` instead. */ ignoreSaveOnClose?: boolean; /** * Whether to close the application when it is part of a hibernating layout. */ closeOnHibernate?: boolean; /** * Specify another application to be started in order to shut down the current application instances. */ shutdownApplicationName?: string; activityTarget?: ActivityTarget; /** * URL or the Base64 encoding (only the data part from the URI scheme) of the icon used as a taskbar icon for the application. */ icon?: string; /** * If `true`, the application will be disabled. */ disabled?: boolean; /** * If `true`, the application will not be visible in the App Manager. */ hidden?: boolean; /** * If `true`, multiple instances of the application can be started. */ allowMultiple?: boolean; /** * If `true`, this app will be allowed to capture display/window/group screenshots through the 'glue.displays' API */ allowCapture?: boolean; /** * If `true`, this app will be allowed to log in a custom file in 'UserData/logs/application' through the 'glue.log' API */ allowLogging?: boolean; /** * If `true`, this app will not be saved when saving a layout, nor closed or restored when restoring a layout. */ ignoreFromLayouts?: boolean; /** * Defines the (ascending) order used by **io.Connect Desktop** when sending the user applications list to its clients. */ sortOrder?: number; /** * When `false`, only the last application (or activity) instance will be saved in the default (startup) layout. When `true`, all instances will be saved. */ saveMultipleInstances?: boolean; /** * If `true`, the application will not be closed when saving and restoring a layout. */ service?: boolean; /** * These name/value pairs are sent to the **io.Connect Desktop** clients. The Application Manager API exposes them as well, allowing custom UIs to interpret and use the values. */ customProperties?: { [k: string]: any; }; /** * An array of keywords that can help discovering the application easier */ keywords?: string[]; /** * If `true`, the application will always be restored directly when restoring workspaces (no delayed or lazy restore for this app). */ noDelayedRestore?: boolean; intents?: Intent[]; /** * The original FDC3 app definition as retrieved from an FDC3 App Directory. When **io.Connect Desktop** is configured to retrieve app definitions from a REST store that is an FDC3 App Directory, the FDC3 definitions are converted to io.Connect definitions and this property is added automatically to each one of them. */ fdc3?: { [k: string]: any; }; /** * If `true`, the application won't publish any metrics. */ suspendMetrics?: boolean; /** * Will be registered as global shortcut and will start the app or focus it. */ shortcut?: string; /** * Name of the application to be used to launch this app. */ launcherApp?: string; /** * Will allow registering shortcuts in any workspace. */ allowRegisteringWorkspaceShortcuts?: boolean; /** * If `true`, the app can query and modify the session cookies. */ allowCookiesManipulation?: boolean; /** * If `true`, the app will be able to access the command line arguments with which **io.Connect Desktop** is started. */ allowCLAAccess?: boolean; /** * If `false`, the user won't be able to drop the app in a Workspace. */ allowWorkspaceDrop?: boolean; /** * If `true` and the app is part of a hibernated Layout, one or more of its available instances will be reused when resuming another Layout that contains the same app. */ reuseInLayouts?: boolean; /** * Emails of the owners of the application */ supportEmails?: string[]; /** * Configuration for an archived app that will be downloaded and extracted at a specified location. The default location is `%LocalAppData%/Tick42/UserData/%GLUE-ENV%-%GLUE-REGION%/remoteApps/` where `` is the name of the app as defined in its configuration. The default location can be changed using the `"userData"` property of the `"folders"` top-level key in the `system.json` configuration file of **io.Connect Desktop**. You can also use the `$ASSET_LOCATION$` macro pointing to the default location of the extracted app when defining the `"path"` or the `"url"` property of your app. */ asset?: { /** * URL pointing to the location of the archived app that will be downloaded and extracted. */ src?: string; /** * Headers that will be added to the request for downloading the archived app. */ headers?: { /** * Header name. */ name: string; /** * Header value. */ value: string; }[]; /** * If `true`, the `Cache-Control: no-cache` header will be added. */ noCache?: boolean; [k: string]: any; }; /** * If `true`, the app can query and modify the request headers. */ allowHeadersManipulation?: boolean; /** * If `true`, it will be possible to auto arrange the app window programmatically. Defaults to `true`. */ allowAutoArrange?: boolean; /** * If set, child windows spawned by this app will be joined to its current Channel. You can enable this setting for all child windows of this app, or only for a list of specific ones. If the app definition of the child contains a `"channelId"` property, it will be joined to the Channel specified in its definition and not to the current Channel of the parent. */ childrenInheritChannel?: boolean | string[]; /** * If `true`, the current window will be able to execute code in its own context, or in the context of other windows, by invoking the `executeCode()` method on an io.Connect Window object. */ allowScriptExecution?: boolean; /** * If `true`, the app will be considered critical for the platform and **io.Connect Desktop** will shut down and display an error message if the app fails to load. */ critical?: boolean; /** * If `true`, an already existing hidden instance of the app will be reused (if available) when a new instance of the same app has been requested. The reused instance will be made visible, will be focused, and its context will be updated. */ reuseHiddenInstances?: boolean; [k: string]: any; } /** * Single window application. */ export interface WindowConfig { /** * Describes the options for loading a window URL. */ urlLoadOptions?: { /** * Base URL for files loaded by a data URL. Must end with a trailing path separator. This property is necessary only when the loaded URL is a data URL. */ baseURLForDataURL?: string; /** * A string with extra headers for the request. Separate the headers with a `\n`. */ extraHeaders?: string; /** * URL for the `Referer` request header or a `Referrer` object specifying a URL and a policy for the `Referrer-Policy` request header. */ httpReferrer?: Referrer | string; /** * Data for the POST request. Either an `UploadFile` object describing the location and other properties of the file to upload, or an `UploadBase64Data` object containing data encoded as a Base64 string. */ postData?: (UploadFile | UploadBase64Data)[]; /** * A user agent originating the request. */ userAgent?: string; /** * Query string that will be appended to the URL when starting the app. If the string doesn't start with a `?`, one will be prepended to it. Note that the query string must be URL encoded. */ queryString?: string; [k: string]: any; }; /** * Required. URL pointing to the location of the window application. */ url: string; /** * If `true`, the current URL of the web app will be saved and loaded when the app is restored in a Layout. */ saveCurrentUrlInLayout?: boolean | ("Global" | "ApplicationDefault" | "Workspace")[]; /** * If `true`, the current title of the web app will be saved and restored when the app is restored in a Layout. */ saveCurrentTitleInLayout?: boolean | ("Global" | "ApplicationDefault" | "Workspace")[]; /** * Custom string to use for the `User-Agent` request header. */ userAgent?: string | { /** * Type of the `User-Agent` string. If set to `"chromium"`, will use the default Chromium `User-Agent` string without the Electron token. If set to `"custom"`, you must provide a custom string via the `"value"` property. */ type: "chromium" | "custom"; /** * Custom string to use for the `User-Agent` request header. Valid only if `"type"` is set to `"custom"`. This value will replace the entire default `User-Agent` string. */ value?: string; /** * String to append to the end of the clean Chromium `User-Agent` string. Valid only if `"type"` is set to `"chromium"`. Use this to add custom tokens to the clean Chromium `User-Agent` string. */ append?: string; [k: string]: any; }; /** * Name of the window */ name?: string; /** * Deprecated. Name of the window */ windowName?: string; /** * If `true`, the newly created window will participate in io.Connect Window operations (stick, unstick, etc.). */ isSticky?: boolean; snapToScreenEdges?: SnapToScreenEdges; /** * Position (in pixels) of the top-left window corner relative to the left edge of the display. */ left?: number; /** * Position (in pixels) of the top-left window corner, relative to the top edge of the display. */ top?: number; /** * Width of the app window. */ width?: number; /** * Height of the app window. */ height?: number; /** * If `false`, the window will not contain a close button. */ allowClose?: boolean; /** * If `false`, the tab header will not contain a close button. */ allowTabClose?: boolean; /** * If `false`, the window will not contain a collapse button. */ allowCollapse?: boolean; /** * If `false`, the window will not contain an activity related forward button. */ allowForward?: boolean; /** * If `false`, the window will not contain a maximize button. */ allowMaximize?: boolean; /** * If `false`,the window will not contain a minimize button. */ allowMinimize?: boolean; /** * If `false`, the window will remain stuck to other windows. */ allowUnstick?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ allowChannels?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ readOnlyChannelSelector?: boolean; /** * If `false`, the window will not contain a lock/unlock button. */ allowLockUnlock?: boolean; /** * If `false`, the window will not contain an extract button. */ allowExtract?: boolean; /** * If `false`, the window will not contain a sticky button. */ showStickyButton?: boolean; /** * If `false`, the window will not contain a feedback button. */ showFeedbackButton?: boolean; /** * If `false`, the window will not contain a clone button. */ showCloneButton?: boolean; /** * If `false`, the window will not be able to maximize via buttons and/or windows gestures. */ maximizable?: boolean; /** * If `false`, the window will not be able to minimize via buttons and/or windows gestures. */ minimizable?: boolean; /** * If `true`, disables transition animations applied when showing a hidden window or changing its state during minimize/restore/maximize. */ disableTransitions?: boolean; /** * If `true`, when the move operation ends, the window will snap to one of the approaching edges of another window (if any of the approaching edges are marked with red). */ autoSnap?: boolean; /** * When `true`, a snapped window will adjust its bounds in order to have equal width/height and/or to occupy the space between other windows (if any). */ autoAlign?: boolean; /** * URL or the Base64 encoding (only the data part from the URI scheme) of the icon used as a taskbar icon for the window. If not specified, it will use the icon from the application configuration. */ icon?: string; /** * Can be a color name, such as "red", or a hex-encoded RGB or ARGB value. */ borderColor?: string; /** * Background color of the Electron window. Can be a color in Hex, RGB, RGBA, HSL, HSLA or named CSS color format. The alpha channel is optional for the hex type. */ backgroundColor?: string | boolean; /** * Defines the height of the window when collapsed. */ collapseHeight?: number; /** * If `true`, allows opening a developer console (using `F12`) for the new window. */ devToolsEnable?: boolean; /** * Settings for downloading files in io.Connect Windows. */ downloadSettings?: { /** * If `true`, will auto save the file (without asking the user where to save it). If `false`, a system save dialog will appear. */ autoSave?: boolean; /** * If `true`, will open the folder that contains the downloaded file after the download is completed. */ autoOpenPath?: boolean; /** * If `true`, will open the download file after the download is completed. */ autoOpenDownload?: boolean; /** * If `true`, will enable the window to download files. */ enable?: boolean; /** * If `true`, a download bar tracking the download progress will appear at the bottom of the window. If `false`, the download process will be invisible. */ enableDownloadBar?: boolean; /** * If `true`, a "Download" button will be available at the top of the window. The "Download" button opens a download popup in the current window which displays all downloads initiated by the user and provides controls for managing them. Defaults to `true` in the default platform mode and to `false` in the advanced platform mode. */ enableDownloadButton?: boolean; /** * Location where the downloaded file will be saved. Due to security reasons, there are only two possible locations for downloads: the Windows "Temp" or "Downloads" folder. */ path?: string; /** * If `true`, empty windows opened when the user clicks on a download link with a `"target=_blank"` attribute will be closed automatically. */ closeBlankDownloadWindows?: boolean; }; /** * If `true`, the window will start collapsed. */ isCollapsed?: boolean; /** * Deprecated, use `isChild` instead. If `true`, the window will open as a pop-up, sharing the lifetime and environment of the opener. */ isPopup?: boolean; /** * If `true`, the window will be created as a child window of the application/window creating it. This means that it will share the lifetime and environment of the opener. */ isChild?: boolean; /** * If `false`, the window will not take focus when created. */ focus?: boolean; /** * If `false`, a window in HTML mode can not be moved. */ hasMoveAreas?: boolean; /** * If `false`, the window won't have resizing areas and the user won't be able to resize it by dragging its borders. Defaults to `true` for the io.Connect HTML, flat and tab windows. Defaults to `false` for the io.Connect frameless windows. */ hasSizeAreas?: boolean; /** * If `true`, the window will start as a hidden window. */ hidden?: boolean; /** * If `true`, will allow users to navigate back (`CTRL+Left`) and forward (`CTRL+Right`) through the web page history. */ historyNavigationEnabled?: boolean; /** * Deprecated - use allowExtensions - Whether to allow a web application hosted in **io.Connect Desktop** to be accessible by external scripts injected in the window */ injectionIntegration?: boolean; /** * Specify the maximum window height. */ maxHeight?: number; /** * Specify the maximum window width. */ maxWidth?: number; /** * Specify the minimum window height. */ minHeight?: number; /** * Specify the minimum window width. */ minWidth?: number; /** * io.Connect Window type. Possible values are `flat`, `html`, `tab`. */ mode?: "flat" | "tab" | "html" | "frameless"; /** * A legacy setting which indicates whether the app should be hidden (also provides other relevant settings). Currently not used. */ serviceWindow?: boolean; /** * Settings for printing the window web page as a PDF file. */ printToPdfSettings?: { /** * If `true`, will enable printing to a PDF file. */ enabled?: boolean; /** * If `true`, will auto save the PDF file. If `false`, a system dialog will appear asking the user where to save the file. */ autoSave?: boolean; /** * If `true`, will open automatically the directory where the file was saved. */ autoOpenPath?: boolean; /** * If `true`, will open the downloaded file after the download is completed. */ autoOpen?: boolean; /** * The default directory where PDF files will be saved. */ fullPath?: string; /** * If `true`, will use `CTRL + P` by default to print to a PDF file. */ usePrintShortcutKey?: boolean; /** * Header and footer for the PDF. */ headerFooter?: { /** * Title to be printed in the header and the footer.. */ title?: string; /** * URL to be printed in the header and the footer. */ url?: string; }; /** * If `true`, will print to PDF in landscape mode. If `false`, will print to PDF in portrait mode. */ landscape?: boolean; /** * Specifies the type of margins to use. Use `0` for default margin, `1` for no margin, and `2` for minimum margin. */ marginsType?: number; /** * The page ranges to print. */ pageRanges?: { /** * Index of the first page to print (0-based). */ from?: number; /** * Index of the last page to print (inclusive, 0-based). */ to?: number; }[]; /** * Page size in inches or in standardized sizes such as A3, A4, Letter, Legal, etc. */ pageSize?: { /** * Width in inches. */ width?: number; /** * Height in inches. */ height?: number; } | ("A3" | "A4" | "A5" | "Legal" | "Letter" | "Tabloid"); /** * If `true`, will print the page background. */ printBackground?: boolean; /** * If `true`, will print only the currently selected section of the page. */ printSelectionOnly?: boolean; /** * The scale factor of the web page. Can range from 0 to 100. */ scaleFactor?: number; }; /** * Settings for printing a web page. */ print?: { /** * If `true`, will enable printing. */ enabled?: boolean; /** * If `true`, printed copies will be collated. */ collate?: boolean; /** * If `true`, will print the page in color. Otherwise, in grayscale. */ color?: boolean; /** * The number of copies to print. */ copies?: number; /** * Sets the printer device name to use. Must be the system-defined name and not the user-friendly name. */ deviceName?: string; /** * Printing resolution. */ dpi?: { /** * Horizontal resolution in DPI. */ horizontal?: number; /** * Vertical resolution in DPI. */ vertical?: number; }; /** * Setting for duplex printing. */ duplexMode?: "longEdge" | "shortEdge" | "simplex"; /** * String that will be printed as a footer on each page. */ footer?: string; /** * String that will be printed as a header on each page. */ header?: string; /** * If `true`, will print the page in landscape mode. If `false`, will print the page in portrait mode. */ landscape?: boolean; /** * Settings for the margins of the printed page. */ margins?: { /** * Bottom margin in pixels for the printed page. */ bottom?: number; /** * Left margin in pixels for the printed page. */ left?: number; /** * Predefined margin type. If you choose `"custom"`, you must also set `"top"`, `"bottom"`, `"left"`, and `"right"`. */ marginType?: "custom" | "default" | "none" | "printableArea"; /** * Right margin in pixels for the printed page. */ right?: number; /** * Top margin in pixels for the printed page. */ top?: number; }; /** * The page ranges to print. */ pageRanges?: { /** * Index of the first page to print (0-based). */ from?: number; /** * Index of the last page to print (inclusive, 0-based). */ to?: number; }[]; /** * Page size in inches or in standardized sizes such as A3, A4, Letter, Legal, etc. */ pageSize?: { /** * Width in inches. */ width?: number; /** * Height in inches. */ height?: number; } | ("A3" | "A4" | "A5" | "Legal" | "Letter" | "Tabloid"); /** * The number of pages to print per sheet. */ pagesPerSheet?: number; /** * If `true`, will print the page background. */ printBackground?: boolean; /** * The scale factor of the web page. Can range from 0 to 100. */ scaleFactor?: number; /** * If `true`, won't ask the user for print settings. */ silent?: boolean; }; /** * How much of the outer window area is to be considered as a moving area (meaning you can move the window using it). The string value corresponds to the left, top, right and bottom borders. */ moveAreaThickness?: string; /** * The io.Connect Window can contain a move area thickness left margin. The margin is related to the left border of `moveAreaThickness` only. The string value corresponds to the left, top, right and bottom. */ moveAreaLeftMargin?: string; /** * The io.Connect Window can contain a move area thickness top margin. The margin is related to the top border of `moveAreaThickness` only. The string value corresponds to the left, top, right and bottom. */ moveAreaTopMargin?: string; /** * The io.Connect Window can contain a move area thickness right margin. The margin is related to the right border of `moveAreaThickness` only. The string value corresponds to the left, top, right and bottom. */ moveAreaRightMargin?: string; /** * The io.Connect Window can contain a move area thickness bottom margin. The margin is related to the bottom border of `moveAreaThickness` only. The string value corresponds to the left, top, right and bottom. */ moveAreaBottomMargin?: string; /** * If `true`, mouse hover events which are over move area will be passed to the underlying Electron window. */ moveAreaPassThroughMouseHover?: boolean; /** * Setting that allows the app window to be on top of the Z-order, in front of all other windows, even when it isn't on focus. Note that because each io.Connect app window is in fact in an io.Connect Window group container (even though being a single window), the `onTop` setting actually determines the Z-order of the group container at the moment of its creation. Snapping an io.Connect Window to another io.Connect Window in reality destroys the group container of the snapped window and that window joins the group container of the window to which it is being snapped. Therefore, when joining a window with a specified `onTop` setting to another window or a window group, its initial `onTop` value will be overwritten - either permanently (when set to `true`), or temporarily (when set to `always`). */ onTop?: boolean | "always"; /** * The window ID of the window that will be used to relatively position the new window. Can be combined with `relativeDirection`. */ relativeTo?: string; /** * Direction (`bottom`, `top`, `left`, `right`) for positioning the window relatively to the `relativeTo` window. Considered only if `relativeTo` is supplied. */ relativeDirection?: string; /** * If `false`, the window will not appear in the taskbar. */ showInTaskbar?: boolean; /** * Whether the window will have a window title bar. */ showTitleBar?: boolean; /** * How much of the outer window area is to be considered as a sizing area (meaning you can resize the window using it). The string value corresponds to the left, top, right and bottom borders. */ sizeAreaThickness?: string; /** * If `true`, mouse hover events which are over size area will be passed to the underlying Electron window. */ sizeAreaPassThroughMouseHover?: boolean; /** * Specifies the active io.Connect Window snapping edges. Possible combinations are: `top`, `left`, `right`, `bottom`, `all` and any combination of them (e.g. `left, right`). */ snappingEdges?: string; /** * Window startup location. */ startLocation?: ("center" | "topCenter" | "bottomCenter" | "leftCenter" | "rightCenter" | "full" | "topFull" | "bottomFull" | "leftFull" | "rightFull") | { location?: "center" | "topCenter" | "bottomCenter" | "leftCenter" | "rightCenter" | "full" | "topFull" | "bottomFull" | "leftFull" | "rightFull"; /** * Identifies whether an application has to be stuck to particular location */ stuck?: boolean; /** * Specifies the window width */ width?: number; /** * Specifies the window height */ height?: number; /** * Defines the window width or height in pixels or percents of the containing monitor */ sizeMode?: "pixels" | "percents"; /** * The identifying number of the monitor (e.g., 1, 2, 3 or "main") */ display?: string; }; /** * Specifies the io.Connect Window frame color. Accepts hex color as a string (e.g., `#666666`) or named HTML colors (e.g., `red`) */ frameColor?: string; /** * Specifies the color that indicates on which side the windows will stick. */ stickyFrameColor?: string; /** * If set, the io.Connect Window can only stick to windows that belong to the same group. */ stickyGroup?: string; /** * Specifies the tab group ID. If two or more tab windows are defined with the same ID, they will be hosted in the same tab window. */ tabGroupId?: string; /** * Specifies the tab position index. Tab windows in the same tab group are ordered by their position index. Use negative index to make the tab active. */ tabIndex?: number; /** * Whether the application tab to be on focus when the app is opened as a tab window in a tab group. */ tabSelected?: boolean; /** * Deprecated. Use 'title' instead. */ tabTitle?: string; /** * Specifies the tab width. */ tabWidth?: number; /** * Hides the tab header. */ hideTabHeader?: boolean; /** * Deprecated. Use 'tabTooltip' instead. */ tabToolTip?: string; /** * Tab tooltip. */ tabTooltip?: string; /** * Hides the group header when a window joins this windows group */ hideGroupHeader?: boolean; /** * Sets the window title. To work properly, there should be a title HTML tag in the page. */ title?: string; /** * Object that defines loader behavior. */ loader?: { /** * If `true`, enables page loaders. */ enabled?: boolean; /** * The loader animation type. Check the "Loader Animations" for possible options. */ type?: string; /** * Changes the background of the loader page. Accepts hex color as a string (e.g., `#666666`) or named HTML colors (e.g., `red`). */ background?: string; /** * Changes the animation speed. A bigger number means faster animation. */ speed?: number; /** * Use this to set an absolute size to the loader animation in pixels. Note that not all loader types support that setting. */ size?: number; /** * Use this to set the size of the loader animation as a factor of the window size. */ sizeFactor?: number; /** * Use this to hide the loader once the page is loaded. */ hideOnLoad?: boolean; /** * Use this to display text on the loading page. */ text?: string; /** * Use this to set loader text font size. */ textSize?: number; /** * Use this to set loader text color. Accepts hex color as a string (e.g., `#666666`) or named HTML colors (e.g., `red`). */ textColor?: string; }; /** * If `true`, will set a random (from a predefined list of colors) frame color to the new window. */ useRandomFrameColor?: boolean; /** * If set, the window will start in the specified state (maximized, minimized, normal). */ windowState?: string; /** * Specifies if the io.Connect JavaScript API will be auto injected in the window context. The `Glue()` factory function becomes available without referencing a `desktop.js` file. */ autoInjectAPI?: { /** * If `true`, will enable auto injection of the io.Connect JavaScript library. */ enabled: boolean; /** * If set, will auto initialize the injected io.Connect JavaScript library. */ autoInit?: boolean | { [k: string]: any; }; }; /** * Specifies if the glue-fdc3 JavaScript API will be auto injected in the window context. The api becomes available without referencing any JS file. */ autoInjectFdc3?: { /** * If `true`, will enable auto injection of the glue-fdc3 JavaScript library. */ enabled: boolean; /** * Settings for the `@interopio/fdc3` library to be injected. */ library?: { /** * URL pointing to a locally or remotely hosted `@interopio/fdc3` library, or a string specifying the version of the `@interopio/fdc3` library to be used from the locally available packages in the `%LocalAppData%/interop.io/io.Connect Desktop/Desktop/assets` folder. */ source?: string; /** * Fallback location of the `@interopio/fdc3` library in case the one specified in the `"source"` property doesn't load. Accepts a URL pointing to a locally or remotely hosted `@interopio/fdc3` library, or a string specifying the version of the `@interopio/fdc3` library to be used from the locally available packages in the `%LocalAppData%/interop.io/io.Connect Desktop/Desktop/assets` folder. */ fallback?: string; /** * Interval in milliseconds to wait for loading the `@interopio/fdc3` library. */ timeout?: number; [k: string]: any; }; /** * Reserved. */ autoInit?: boolean | { [k: string]: any; }; [k: string]: any; }; /** * Custom context object associated with the window. */ context?: { [k: string]: any; }; /** * If set, DevTools will start automatically. */ autoOpenDevTools?: boolean; processAffinity?: ApplicationProcessAffinity | string; /** * Set to `true` to run the window in Salesforce mode (resolving the issues preventing Salesforce to run in a desktop container). */ sfMode?: boolean; /** * Whether to inject the `htmlContainer` object. This is used for legacy applications. */ registerHtmlContainer?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ channelId?: string; contextMenu?: ContextMenuConfig; /** * Deprecated. Use `"contextMenu"` instead. */ contextMenuEnabled?: boolean; /** * Deprecated. Use `"contextMenu"` instead. */ contextMenuMode?: string; /** * Global security settings. */ security?: { /** * If `true`, will allow an HTTPS page to run JavaScript, CSS or plugins from HTTP URLs. */ allowRunningInsecureContent?: boolean; /** * If `true`, web security will be enabled. Set to `false` to disable the same-origin policy (e.g., for testing purposes) and to set `"allowRunningInsecureContent"` to `true`. */ webSecurity?: boolean; /** * Deprecated. Use `"nativeWindowOpen"` instead. */ popups?: boolean; /** * Deprecated. Use `"onCertificateError"` instead. */ stopLoadingOnCertificationErrors?: boolean; /** * Settings for handling web pages with invalid certificates. */ onCertificateError?: { /** * Controls the behavior for loading web pages with invalid certificates - whether to allow or deny loading the page, or to ask the user. */ action?: "allow" | "deny" | "ask"; /** * URL pointing to a page that will be shown to the user and will allow them to report the issue. Only valid if `"action"` is set to `"ask"`. */ reportURL?: string; }; /** * If `true`, dragging and dropping a file or a link onto the page will trigger navigation. */ navigateOnDragDrop?: boolean; /** * If `true`, the renderer associated with the window will be sandboxed, making it compatible with the Chromium OS-level sandbox and disabling the Node.js engine. */ sandbox?: boolean; /** * If `true`, will allow running code in preload scripts and in Electron APIs in a dedicated JavaScript context. Context isolation allows each script running in the renderer process to make changes to its JavaScript environment without conflicting with scripts in the Electron API or preload script. */ contextIsolation?: boolean; /** * If `true`, will enable Node.js integration. */ nodeIntegration?: boolean; /** * List of URI schemes allowed to be opened externally. */ allowedExternalURISchemes?: string[]; }; /** * Configuration for the refresh handlers. */ refreshHandlers?: { /** * If `true`, will enable refresh handlers. */ enabled?: boolean; /** * The maximum amount of time (ms) that a refresh handler will have to complete its operation. */ timeout?: number; }; /** * Configuration for close handlers. */ closeHandlers?: { /** * If `true`, will enable close handlers. */ enabled?: boolean; /** * The maximum amount of time (ms) that a close handler will have to complete its operation. */ timeout?: number; }; /** * Whether to inject the SID in the window context after successful SSO authentication. */ injectSIDtoContext?: boolean; /** * Settings for zooming in web apps. */ zoom?: { /** * If `true`, will enable zooming. */ enabled?: boolean; /** * If `true`, will enable zooming with `CTRL` + `mouse scroll`. */ mouseWheelZoom?: boolean; /** * List of zoom factors to be used when the user zooms in or out of the window. The factors must be in ascending order and may have integer or floating point values. Zooming will only work with factor values within the range of `25` to `500`. Avoid passing negative values when setting the zoom factor (via configuration or programmatically), as this will cause unexpected behavior. */ factors?: number[]; /** * Default zoom factor within the range of `25` to `500`. Avoid negative values. */ defaultFactor?: number; /** * Determines the default zoom behavior for web apps. If set to `"domain"`, changes in the zoom factor will be applied to the current window, as well as to all other windows within the same domain (default web browser behavior). If set to `"window"`, changes in the zoom factor will be applied only to the current window and won't affect other windows within the domain. */ mode?: "domain" | "window"; /** * Keyboard shortcuts for zooming actions. */ shortcuts?: { /** * Keyboard shortcuts for zooming in. */ zoomIn?: string[]; /** * Keyboard shortcuts for zooming out. */ zoomOut?: string[]; /** * Keyboard shortcuts for resetting the zoom factor to the default value. */ resetZoom?: string[]; [k: string]: any; }; }; /** * Which parts of the opened window to be visible. The window itself will not be resized. The parts of the window outside the specified areas will remain intact but will be invisible. */ visibleAreas?: { /** * Coordinate on the horizontal axis. */ left?: number; /** * Coordinate on the vertical axis. */ top?: number; /** * Width of the app window. */ width?: number; /** * Height of the app window. */ height?: number; }[]; /** * Settings for opening new window instances of the same app in a cascade. */ cascade?: { /** * If `true`, will enable cascading windows. */ enabled?: boolean; /** * Offset in pixels for the cascaded window. */ offset?: number; }; /** * If `true`, this app can host chrome extensions. Extensions must be enabled in system config. */ allowExtensions?: boolean; consoleLogLevel?: string; syncTitleWithDocumentTitle?: boolean | "preserveCustomTitle"; /** * Controls the behavior of the browser `window.open()` method. Child windows opened with the browser native `window.open()` method can be opened in the default browser, in io.Connect Windows, or can be prevented from opening altogether. */ nativeWindowOpen?: ("off" | "window" | "browser") | { /** * Must be set to `"window"`. */ mode: "window"; /** * If `true`, will prevent child windows from being closed when their parent is closed. */ outlivesOpener?: boolean; /** * Settings for grouping the newly opened child window with the parent window. The child window can be snapped on any side of the parent window, or can be added to its tab group, provided that both windows are io.Connect tab windows. */ grouping?: { /** * If `true`, will add the new child window to the tab group of the parent. Valid only when both the parent and the child are io.Connect tab windows. */ addToTabGroup?: boolean; /** * If `true`, the child window will be snapped to the parent window. To specify a relative direction for the snapped window, use the `"snappingOptions"` object. If no direction is specified, the child window will be snapped to the right side of the parent window. */ snap?: boolean; /** * Options for snapping the child window to the parent window. */ snappingOptions?: { /** * Direction (bottom, top, left or right) for positioning the child window relatively to the parent window. Considered only if `"snap"` is set to `true`. */ direction?: "bottom" | "top" | "left" | "right"; [k: string]: any; }; [k: string]: any; }; }; /** * Configuration options for windows opened as io.Connect Windows (i.e. when `"nativeWindowOpen"` is set to `"window"`) using the browser `window.open()` method. The available window options are identical to the ones used in the `io.windows.open()` method. */ nativeWindowOpenOptions?: { [k: string]: any; }; /** * Enabling this will allow this application to publish performance metrics extracted from the underlying Chromium browser. */ pagePerformanceMetric?: { /** * Enable or disable the Page Performance metric for this application. */ enabled: boolean; /** * The interval (in ms) in which page performance data will be published */ publishInterval?: number; /** * The time (in ms) after which the initial data will be published */ initialPublishTimeout?: number; }; /** * Settings for searching in web apps. */ search?: { /** * If `true`, will enable searching in web apps with `CTRL + F`. */ enabled?: boolean; }; /** * Settings for docking an app at one of the screen edges - e.g., a toolbar app that may start docked at one of the screen edges and the user can undock it, move it, and dock at another screen edge. */ docking?: { /** * If `true`, docking will be enabled for the app. */ enabled?: boolean; /** * If `true`, the app will claim the area it occupies on the screen when docked, in effect, reducing the working area of the screen. */ claimScreenArea?: boolean; /** * Initial docking position for the app. Available positions are `"top"`, `"bottom"`, `"left"`, and `"right"`. */ initialPosition?: "top" | "bottom" | "left" | "right"; /** * Allowed positions for docking the app. */ allowedPositions?: ("top" | "bottom" | "left" | "right")[]; /** * Width in pixels for the app when docked at the left or the right screen edge. */ width?: number; /** * Height in pixels for the app when docked at the top or the bottom screen edge. */ height?: number; [k: string]: any; }; /** * Specifies the window position relative to the screen */ placement?: { /** * If `true`, the io.Connect Window will remain snapped to the specified screen position even in cases of resolution changes, window visibility changes or when the application virtualization window hosting the io.Connect Window has been resized. However, this doesn't include any API calls or manual user interaction which affect the window placement or bounds. If `false`, the window will be positioned at the specified screen location only once when created */ snapped: boolean; /** * Defines a vertical alignment configuration. If `horizontalAlignment` is set, then `verticalAlignment` will default to "stretch" */ verticalAlignment?: "top" | "bottom" | "center" | "stretch"; /** * Defines a horizontal alignment configuration. If `verticalAlignment` is set, then `horizontalAlignment` will default to "stretch" */ horizontalAlignment?: "left" | "right" | "center" | "stretch"; /** * Top margin for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ top?: number | string; /** * Right margin for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ right?: number | string; /** * Bottom margin for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ bottom?: number | string; /** * Left margin for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ left?: number | string; /** * Width for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ width?: number | string; /** * Height for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ height?: number | string; /** * The identifying number of the monitor (e.g., 1, 2, 3 or "main") */ display?: string; }; fdc3InitsGlue?: boolean; /** * Determines the conditions under which the window buttons will be visible. Valid only for io.Connect Windows in `html` mode. */ buttonsVisibility?: "off" | "onDemand" | "always" | "onFocus"; /** * If `true`, the user cannot refresh the window. */ disableRefreshOnF5?: boolean; /** * Taskbar specific configuration. */ taskbar?: { /** * If `true`, will allow pinning shell applications to the taskbar. */ allowPin?: boolean; /** * Deprecated. Specify a unique application ID necessary for selecting the correct icon for the pinned application in the taskbar. Defaults to `appName-env-region`. */ appId?: string; /** * The name that will be shown on right click on the application pinned to the taskbar. Defaults to configured build name or **io.Connect Desktop**. */ displayName?: string; /** * Specify the command (and all arguments needed) for relaunching the application. Defaults to the current **io.Connect Desktop** executable with its starting arguments. */ command?: string; /** * Specify the environment variable used for storing the command (and all arguments needed) for application relaunch. Defaults to `GLUE_START_CMD` and is ignored if `command` is set. */ commandEnvVar?: string; /** * Specify the path to the icon that will be used for the pinned to the taskbar application. Defaults to the application icon or the default one. It is strongly recommended to explicitly specify an icon here and to use an icon persisted on the machine. */ iconPath?: string; /** * Index of the icon specified in `iconPath`. Ignored when `iconPath` is not set. Defaults to 0. */ iconIndex?: number; /** * Determines how the taskbar icons of the app instances will be combined with each other and with icons of other io.Connect apps when the Windows taskbar is set to combine icons. Can be `sameIcon`, `sameApp` or `never`. Set to `sameIcon` to combine the icons of the app instances with each other and with all other io.Connect apps that use the same icon. Set to `sameApp` to combine the icons only of the app instances. Set to `never` to prevent the icons of the app instances from combining with each other or with other io.Connect apps that use the same icon. Defaults to `sameIcon`. */ combineIcons?: "sameIcon" | "sameApp" | "never"; }; /** * Settings for app jump lists. Jump lists are categorized lists with actions that appear in the context menu when the user right-clicks on the Windows taskbar icons of io.Connect apps. Currently available only in the advanced platform mode. */ jumpList?: { /** * If `true`, will enable jump lists. */ enabled?: boolean; /** * Categorized lists with actions to execute when the user clicks on them. */ categories?: { /** * Title of the category to be displayed in the context menu. */ title?: string; /** * List of actions contained in the category. */ actions?: { /** * Type of the predefined action to execute. */ type: "notifications" | "centerScreen" | "userDefined" | "focusApplication" | "newWorkspace"; /** * Icon for the action to be displayed in the context menu. Must point to a local file. */ icon?: string; /** * Title of the action to be displayed in the context menu when there is a single instance with a single Windows taskbar icon. */ singleInstanceTitle?: string; /** * Title of the action to be displayed in the context menu when there are multiple instances with grouped Windows taskbar icons. */ multiInstanceTitle?: string; }[]; }[]; }; /** * If `true`, the app can retrieve OS information. */ allowOSInfo?: boolean; /** * If `true`, the app can retrieve authentication information about the current user. */ allowAuthInfo?: boolean; /** * If `true`, the app can modify the proxy configuration. */ allowProxySettingManipulation?: boolean; /** * If `true`, the application can clear session and host cache. */ allowClearingCache?: boolean; /** * Settings for overriding app definition properties when starting the current app programmatically via the io.Connect APIs. */ allowOverrides?: { /** * If `true`, will allow overriding the URL specified in the current app definition when launching this app programmatically via the io.Connect APIs. */ url?: boolean; [k: string]: any; }; /** * A list of preload scripts (URLs) that will be loaded and executed before the actual page is executed */ preloadScripts?: string[] | { /** * List of preload scripts that will be executed in the specified order. */ scripts: ({ /** * URL pointing to a local or a remote preload script or a CSS file. */ url: string; /** * URL pointing to a local or a remote preload script or a CSS file that will be used as a fallback in case the one specified in the `"url"` property doesn't load. */ fallback?: string; /** * Interval in milliseconds to wait for the item to load. */ timeout?: number; /** * If `true`, the preload script or CSS file failure will be treated as a critical error. */ critical?: boolean; [k: string]: any; } | string)[]; /** * If `true`, will import the preload scripts as Base64 strings. */ useBase64PreloadScripts?: boolean; }; /** * Settings for injecting CSS files in web apps. The CSS files will be injected after the page has been loaded. */ injectedStyles?: { /** * If `true`, will replace the existing styles of the web app with the injected ones. Note that this won't affect styles added dynamically after the initial page load. If `false`, the existing styles will be merged with the injected ones. */ replace?: boolean; /** * List of objects describing CSS files that will be injected in the specified order. */ styles?: { /** * URL pointing to a local or a remote preload script or a CSS file. */ url: string; /** * URL pointing to a local or a remote preload script or a CSS file that will be used as a fallback in case the one specified in the `"url"` property doesn't load. */ fallback?: string; /** * Interval in milliseconds to wait for the item to load. */ timeout?: number; /** * If `true`, the preload script or CSS file failure will be treated as a critical error. */ critical?: boolean; [k: string]: any; }[]; [k: string]: any; }; /** * If `true`, the app can query and modify the session cookies. */ allowCookiesManipulation?: boolean; /** * If `true`, the app will be able to access the environment variables for the io.Connect process by using the `env` property of the `iodesktop` object. */ allowEnvVars?: boolean; /** * If `true` (default), animations and timers will be throttled when the web app is in the background. Set to `false` to disable background throttling. */ backgroundThrottling?: boolean; /** * Settings for web page navigation. */ navigation?: { /** * Regular expression that will be matched against the URL when the window navigates. If the new URL doesn't match the expression, navigation will be blocked. */ allowed?: string; /** * If `true`, the current URL will be updated when the user navigates within the current page. */ trackInPageNavigation?: boolean; [k: string]: any; }; /** * Settings for opening new windows from the current app. */ windowOpen?: { /** * Regular expression that will be matched against the URL when opening a new window from the current app. If the URL doesn't match the expression, opening the new window will be blocked. */ allowed?: string; [k: string]: any; }; /** * Specifies properties to be persisted when the app is saved in a Layout. */ saveInLayout?: { /** * Settings for persisting the current URL of the web app when a Layout is saved. */ url?: boolean | ("Global" | "ApplicationDefault" | "Workspace")[]; /** * Settings for persisting the current title of the app when a Layout is saved. */ title?: boolean | ("Global" | "ApplicationDefault" | "Workspace")[]; [k: string]: any; }; /** * Options for reloading current window when it fails to load. */ reloadOptions?: { /** * Interval in milliseconds at which to attempt to reload the window. */ timeout?: number; /** * Maximum number of times to attempt reloading the window. */ maxAttempts?: number; [k: string]: any; }; /** * Settings for the Channel Selector UI. */ channelSelector?: { /** * Type of the Channel Selector to show on the io.Connect Windows. The single Channel Selector (default) allows the window to join a single Channel to which it can subscribe and publish data unrestrictedly. The directional single Channel Selector allows the window to join a single Channel, but also enables the user to restrict the window from publishing or from subscribing to the current Channel. The multi Channel Selector allows the window to join multiple Channels simultaneously to which it can subscribe and publish data unrestrictedly. The directional multi Channel Selector allows the window to join multiple Channels, but also enables the user to restrict the window from publishing or from subscribing to the currently joined Channels. */ type?: "single" | "directionalSingle" | "multi" | "directionalMulti"; /** * If `true`, will allow showing the Channel Selector. */ enabled?: boolean; /** * If `true`, the Channel Selector will be visible, but the user won't be able to switch between Channels from it. */ readOnly?: boolean; /** * Name of the Channel to which the window will be joined by default when it's started. */ channelId?: string; /** * By default, users are able to modify the read and write restrictions for all Channels via the Channel Selector UI. Apps can also modify the Channel restrictions programmatically. To prevent the users and the app from being able to modify a Channel restriction, use this property. Provide a list of objects, each containing a Channel name and the Channel restrictions that you want to prevent the users and the app from modifying. */ preventModifyingRestrictionsFor?: { /** * Name of the Channel. */ name?: string; /** * If `true`, the users and the app won't be able to modify the Channel restriction for subscribing for data (manually from the Channel Selector or programmatically via the Channels API). */ read?: boolean; /** * If `true`, the users and the app won't be able to modify the Channel restriction for publishing data (manually from the Channel Selector or programmatically via the Channels API). */ write?: boolean; [k: string]: any; }[]; [k: string]: any; }; /** * If `true`, frameless windows will be transparent. */ transparent?: boolean; /** * If `true`, frameless windows will have rounded corners. Defaults to `true` in the default platform mode and to `false` in the advanced platform mode. In Windows versions older than Windows 11 build 22000 this property won't have any effect and frameless windows won't have rounded corners. */ roundedCorners?: boolean; /** * If `true`, the window tab will be pinned. Pinned tabs are placed before the regular tab windows and they contain only the window title. Pinned tab windows don't have a "Close" button, effectively preventing the user from closing them. Available only for tab windows in web groups. */ isPinned?: boolean; /** * Settings for manipulating the response headers received by the platform from external servers. It's possible to remove an entire header, or to modify its directives. Use this property to define the response headers you want to remove or modify as key/value pairs. The key must be the header name (e.g., `Content-Security-Policy`) and the value must be an object holding the desired settings. */ responseHeaders?: { /** * Object describing the settings for removing a response header or modifying its directives. */ [k: string]: { /** * If `true`, the entire response header will be removed. */ remove?: boolean; /** * List of response header directives to be modified. It's possible to remove a directive, to replace its value, or to append a value to its current value. */ directives?: { /** * Name of the directive to modify. */ name: string; /** * New value for the directive. Required when replacing or appending a directive value. */ value?: string; /** * Action to be performed on the directive. Set to `"remove"` to remove the directive. Set to `"replace"` to replace the current value. Set to `"append"` to append a value to the current value. When replacing or appending a value, it's required to specify a new value. */ action: "append" | "remove" | "replace"; [k: string]: any; }[]; [k: string]: any; }; }; /** * Settings for capturing console messages and network request errors for the app and logging them in the `application.log` file of **io.Connect Desktop**. */ logging?: boolean | { /** * Settings for capturing console messages. */ consoleMessages?: { /** * If `true`, will allow capturing all console messages. */ enabled?: boolean; /** * Sets the level at which to capture console messages. The platform will capture all console messages at the specified level and above. */ level?: "debug" | "info" | "warn" | "error"; [k: string]: any; }; /** * Settings for capturing network request errors. */ networkRequestErrors?: { /** * If `true`, will allow capturing all network request errors. */ enabled?: boolean; [k: string]: any; }; /** * Settings for capturing unhandled errors (e.g., unhandled `Promise` rejections, errors not logged in the console). */ unhandledErrors?: { /** * If `true`, will allow capturing all unhandled errors. */ enabled?: boolean; [k: string]: any; }; [k: string]: any; }; [k: string]: any; } /** * Describes the values that will be used for the `Referer` and the `Referrer-Policy` request headers. */ export interface Referrer { /** * Value for the `Referrer-Policy` request header. For more details, see the [`Referrer-Policy` request header documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy). */ policy: "default" | "no-referrer" | "no-referrer-when-downgrade" | "origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin" | "unsafe-url"; /** * URL for the `Referer` request header. */ url: string; [k: string]: any; } /** * Describes a file to upload. */ export interface UploadFile { /** * Path to the file to upload. */ filePath: string; /** * Number of bytes to read starting from the value set in `offset`. */ length: number; /** * The time the file was last modified expressed as a number of seconds since the UNIX epoch. */ modificationTime: number; /** * Position of the first byte to read. */ offset: number; /** * Type of the uploaded data. Must be set to `file`. */ type: "file"; [k: string]: any; } /** * Describes data to upload encoded as a Base64 string. */ export interface UploadBase64Data { /** * The data to upload encoded as a Base64 string. */ data?: string; /** * Type of the uploaded data. Must be set to `base64`. */ type?: "base64"; [k: string]: any; } /** * Settings for snapping windows to the edges of the screen. */ export interface SnapToScreenEdges { /** * If `true`, will enable snapping windows to the screen edges when the user moves them within the specified distance from the screen edge. */ enabled?: boolean; /** * Distance in pixels from the screen edge at which the window will snap to it. */ distance?: number; } /** * Deprecated. Defines configuration for application process affinity config */ export interface ApplicationProcessAffinity { /** * Deprecated. Set this to override the default grouping logic configured in system.json. If set will group the app only with apps with the same affinity. */ affinity?: string; /** * Deprecated. If true will keep the app in separate process. */ dedicatedProcess?: boolean; } /** * Settings for the context menu of io.Connect Windows. */ export interface ContextMenuConfig { /** * If `true`, will enable the context menu for io.Connect Windows. */ enabled?: boolean; /** * Mode for the context menu. Set to `"native"` to use the standard built-in context menu. Set to `"custom"` to use your own implementation for a context menu. */ mode?: "native" | "custom"; } /** * Defines an activity as a set of activity window types. Also defines the other activity related parameters (like layout and initial context). */ export interface ActivityConfig { activityType?: string; owner: ActivityWindow; windows?: ActivityWindow[]; layout?: ActivityLayout; /** * Initial activity context in a JSON format (not parsed for now and used as is). */ initialContext?: { [k: string]: any; }; /** * If `true`, there will be no header for any window groups that are in the activity window. */ hideGroupHeader?: boolean; /** * Activity context can be saved as part of a saved layout. The activity owner window can register a callback to describe the members of the context that should be saved. If no handler is registered, then by default no activity context will be saved. By using this option and setting its value to `true`, the user has an option to save activity context for legacy applications (i.e., these that haven't registered such callbacks). */ autoSaveContext?: boolean; /** * When an activity application is saved, by default only the activity owner window information will be stored. This will "work out of the box" for legacy activities that don’t support saving/restoring layouts and contexts. When this is `false`, all activity windows (or the ones configured using the options below) will be saved. */ saveOwnerOnly?: boolean; /** * Comma separated list of window types which should be included in the activity application auto saved layout. */ includeTypesToLayout?: string; /** * Comma separated list of window types which should be excluded from the activity application auto saved layout. Note that `ignoreTypesFromLayout` has priority, i.e. if a window type is defined in both lists, it will be excluded. Also, if `includeTypesToLayout` is specified but not `ignoreTypesFromLayout`, then the types in the `includeTypesToLayout` list will be included in the layout and the rest will be excluded and vice versa. */ ignoreTypesFromLayout?: string; [k: string]: any; } /** * A window which takes part in an activity and may or may not be the owner. */ export interface ActivityWindow { /** * The application identifier. */ type: string; /** * The name of the application. */ name: string; /** * Position (in pixels) of the left window border, relative to the left edge of the display. */ left: number; /** * Position (in pixels) of the top window border, relative to the top edge of the display. */ top: number; /** * Width of the app window. */ width: number; /** * Height of the app window. */ height: number; [k: string]: any; } /** * Specifies the `mode` and `cellSize` of the layout. */ export interface ActivityLayout { /** * Whether the activity window dimensions are in absolute (pixels) or relative (percents) tp the screen. */ mode?: "pixels" | "percents"; /** * Size modifier for each activity cell in the activity grid. */ cellSize?: number; /** * Size modifier for the width of each activity cell in the activity grid. */ cellWidth?: number; /** * Size modifier for the height of each activity cell in the activity grid. */ cellHeight?: number; /** * Can specify the target screen by index or "main" to indicate the primary display device. */ screen?: string | number; } /** * Executable application. Could be anything that the OS can execute via the appropriate system calls. */ export interface ExeConfig { /** * If specified, will override the system-generated instance id for this application. */ instanceIdOverride?: string; /** * If `true`, the console will be visible. */ showConsole?: boolean; /** * If `true`, `path` is not used (and must be empty) and the specified command can contain a well known resource type (like URL) which will be executed via the "shell execute" option, i.e. using the associated application. */ useShellExecute?: boolean; /** * This is the working directory of the target application/script and could either be relative to the **io.Connect Desktop** startup directory, or an absolute path. The path must exist and will be combined with the command parameter, if it doesn’t contain a root drive. Required, if `shellExecute` is false, otherwise must be empty. */ path?: string; /** * This is the target application/script that will be executed (when `useShellExecute=false`) or a resource that will be opened via an associated application if `useShellExecute=true`. When `useShellExecute=false`, a command target file must exist. It could contain relative (to the **io.Connect Desktop** startup folder) or an absolute file path. */ command?: string; /** * Settings for overriding app definition properties when starting the current app programmatically via the io.Connect APIs. */ allowOverrides?: { /** * If `true`, will allow overriding the command specified in the current app definition when launching this app programmatically via the io.Connect APIs. */ command?: boolean; [k: string]: any; }; /** * Optional parameters that will be used when starting the target application/script or opening the resource. The content is used as is, no checks performed. */ parameters?: string; /** * Specifies the target's main window style (if supported). */ windowStyle?: "Normal" | "Hidden" | "Minimized" | "Maximized"; /** * Specifies how to track the lifetime of the target application process , i.e. to determine when it is started and stopped. */ trackingType?: "None" | "Process" | "AGM"; /** * Time in seconds to wait for AGM tracked instance to connect. Use 0 to wait indefinitely. */ agmTrackingLaunchTimeout?: number; /** * Specifies how to pass application starting context to the client application. */ startingContextMode?: "environment" | "interop" | "interopCmdLine" | "none"; /** * This option is valid for external user applications and if it is `true`, when they are started a valid GW3 token will be sent. */ passGlueToken?: boolean; /** * The name of the token argument. */ glueTokenArgument?: string; /** * Position (in pixels) of the left window border, relative to the left edge of the display. */ left?: number; /** * Position (in pixels) of the top window border, relative to the top edge of the display. */ top?: number; /** * Width of the app window. */ width?: number; /** * Height of the app window. */ height?: number; /** * Specify the maximum window height. */ maxHeight?: number; /** * Specify the maximum window width. */ maxWidth?: number; /** * Specify the minimum window height. */ minHeight?: number; /** * Specify the minimum window width. */ minWidth?: number; /** * If `false`, the window won't have resizing areas and the user won't be able to resize it by dragging its borders. */ hasSizeAreas?: boolean; /** * Specifies the tab group ID. If two or more tab windows are defined with same ID, they will be hosted in the same tab window. */ tabGroupId?: string; /** * io.Connect Window type. Possible values are `flat`, `html`, `tab`. */ mode?: "flat" | "tab" | "html" | "frameless"; /** * Specifies the io.Connect Window frame color. Accepts hex color as a string (e.g., `#666666`) or named HTML colors (e.g., `red`) */ frameColor?: string; /** * Specifies the tab position index. Tab windows in the same tab group are ordered by their position index. Use negative index to make the tab active. */ tabIndex?: number; /** * The window ID of the window that will be used to relatively position the new window. Can be combined with `relativeDirection` */ relativeTo?: string; /** * Direction (`bottom`, `top`, `left`, `right`) of positioning the window relatively to the `relativeTo` window. Considered only if `relativeTo` is supplied. */ relativeDirection?: string; /** * If `false`, the window will not contain a close button. */ allowClose?: boolean; /** * If `false`, the tab header will not contain a close button. */ allowTabClose?: boolean; /** * If `false`, the window will not contain a collapse button. */ allowCollapse?: boolean; /** * If `false`, the window will not contain a maximize button. */ allowMaximize?: boolean; /** * If `false`,the window will not contain a minimize button. */ allowMinimize?: boolean; /** * If `false`, the window will not contain an extract button. */ allowExtract?: boolean; /** * If `false`, the window will not contain a sticky button. */ showStickyButton?: boolean; /** * If `false`, the window will not contain a feedback button. */ showFeedbackButton?: boolean; /** * If `false`, the window will not contain a clone button. */ showCloneButton?: boolean; /** * If `false`, the window will remain stuck to other windows. */ allowUnstick?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ allowChannels?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ readOnlyChannelSelector?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ channelId?: string; /** * If `false`, the window will not contain a lock/unlock button. */ allowLockUnlock?: boolean; /** * If `false`, the window will not be able to maximize via buttons and/or windows gestures. */ maximizable?: boolean; /** * If `false`, the window will not be able to minimize via buttons and/or windows gestures. */ minimizable?: boolean; /** * If `true`, disables transition animations which are applied when showing a hidden window, minimize, restore, maximize, etc. */ disableTransitions?: boolean; /** * If `false`, the window will not appear in the taskbar. */ showInTaskbar?: boolean; /** * If `true`, the newly created window will participate in io.Connect Window operations (stick, unstick, etc.). */ isSticky?: boolean; /** * Setting that allows the app window to be on top of the Z-order, in front of all other windows, even when it isn't on focus. Note that because each io.Connect app window is in fact in an io.Connect Window group container (even though being a single window), the `onTop` setting actually determines the Z-order of the group container at the moment of its creation. Snapping an io.Connect Window to another io.Connect Window in reality destroys the group container of the snapped window and that window joins the group container of the window to which it is being snapped. Therefore, when joining a window with a specified `onTop` setting to another window or a window group, its initial `onTop` value will be overwritten - either permanently (when set to `true`), or temporarily (when set to `always`). */ onTop?: boolean | "always"; compatibility?: NativeAppCompatibilityConfig; /** * If `true`, the `stdout` and `stderr` will be saved in the log folder under the `application` folder with the name of the application. */ logging?: boolean; /** * Error message that should be displayed to users if the `exe` fails to start. */ startFailedMessage?: string; /** * Settings for opening new window instances of the same app in a cascade. */ cascade?: { /** * If `true`, will enable cascading windows. */ enabled?: boolean; /** * Offset in pixels for the cascaded window. */ offset?: number; }; /** * If `true`, the app will be stopped when the platform shuts down. */ terminateOnShutdown?: boolean; /** * Specifies the window position relative to the screen */ placement?: { /** * If `true`, the io.Connect Window will remain snapped to the specified screen position even in cases of resolution changes, window visibility changes or when the application virtualization window hosting the io.Connect Window has been resized. However, this doesn't include any API calls or manual user interaction which affect the window placement or bounds. If `false`, the window will be positioned at the specified screen location only once when created */ snapped: boolean; /** * Defines a vertical alignment configuration. If `horizontalAlignment` is set, then `verticalAlignment` will default to "stretch" */ verticalAlignment?: "top" | "bottom" | "center" | "stretch"; /** * Defines a horizontal alignment configuration. If `verticalAlignment` is set, then `horizontalAlignment` will default to "stretch" */ horizontalAlignment?: "left" | "right" | "center" | "stretch"; /** * Top margin for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ top?: number | string; /** * Right margin for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ right?: number | string; /** * Bottom margin for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ bottom?: number | string; /** * Left margin for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ left?: number | string; /** * Width for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ width?: number | string; /** * Height for the placed window. Use a `number` to define the value in pixels, or use a `string` to define the value in pixels or in percentage of the screen - e.g., `"10px"` or `"10%"`. */ height?: number | string; /** * The identifying number of the monitor (e.g., 1, 2, 3 or "main") */ display?: string; }; /** * Starting timeout in seconds. */ timeout?: number; /** * Settings for app jump lists. Jump lists are categorized lists with actions that appear in the context menu when the user right-clicks on the Windows taskbar icons of io.Connect apps. Currently available only in the advanced platform mode. */ jumpList?: { /** * If `true`, will enable jump lists. */ enabled?: boolean; /** * Categorized lists with actions to execute when the user clicks on them. */ categories?: { /** * Title of the category to be displayed in the context menu. */ title?: string; /** * List of actions contained in the category. */ actions?: { /** * Type of the predefined action to execute. */ type: "notifications" | "centerScreen" | "userDefined" | "focusApplication" | "newWorkspace"; /** * Icon for the action to be displayed in the context menu. Must point to a local file. */ icon?: string; /** * Title of the action to be displayed in the context menu when there is a single instance with a single Windows taskbar icon. */ singleInstanceTitle?: string; /** * Title of the action to be displayed in the context menu when there are multiple instances with grouped Windows taskbar icons. */ multiInstanceTitle?: string; }[]; }[]; }; /** * Specifies properties to be persisted when the app is saved in a Layout. */ saveInLayout?: { /** * If `true`, when the app is saved in a Layout, the command with which it was started will be persisted. If the value of the `"command"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted command, and not the one in the current app definition. */ command?: boolean; /** * If `true`, when the app is saved in a Layout, the parameters with which it was started will be persisted. If the value of the `"parameters"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted parameters, and not the ones in the current app definition. */ parameters?: boolean; /** * If `true`, when the app is saved in a Layout, the environment options with which it was started will be persisted. If the value of the `"env"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted environment options, and not the ones in the current app definition. */ env?: boolean; /** * Settings for persisting the current title of the app when a Layout is saved. */ title?: boolean | ("Global" | "ApplicationDefault" | "Workspace")[]; [k: string]: any; }; /** * Key/value pairs that will be merged with the `process.env` object when spawning a new process for an executable app from the Node.js environment. */ env?: { [k: string]: string; }; /** * Settings for the Channel Selector UI. */ channelSelector?: { /** * Type of the Channel Selector to show on the io.Connect Windows. The single Channel Selector (default) allows the window to join a single Channel to which it can subscribe and publish data unrestrictedly. The directional single Channel Selector allows the window to join a single Channel, but also enables the user to restrict the window from publishing or from subscribing to the current Channel. The multi Channel Selector allows the window to join multiple Channels simultaneously to which it can subscribe and publish data unrestrictedly. The directional multi Channel Selector allows the window to join multiple Channels, but also enables the user to restrict the window from publishing or from subscribing to the currently joined Channels. */ type?: "single" | "directionalSingle" | "multi" | "directionalMulti"; /** * If `true`, will allow showing the Channel Selector. */ enabled?: boolean; /** * If `true`, the Channel Selector will be visible, but the user won't be able to switch between Channels from it. */ readOnly?: boolean; /** * Name of the Channel to which the window will be joined by default when it's started. */ channelId?: string; /** * By default, users are able to modify the read and write restrictions for all Channels via the Channel Selector UI. Apps can also modify the Channel restrictions programmatically. To prevent the users and the app from being able to modify a Channel restriction, use this property. Provide a list of objects, each containing a Channel name and the Channel restrictions that you want to prevent the users and the app from modifying. */ preventModifyingRestrictionsFor?: { /** * Name of the Channel. */ name?: string; /** * Set to `false` to prevent the users and the app from modifying the Channel restriction for subscribing for data. */ read?: boolean; /** * Set to `false` to prevent the users and the app from modifying the Channel restriction for publishing data. */ write?: boolean; [k: string]: any; }[]; [k: string]: any; }; [k: string]: any; } /** * Compatibility options for native apps (excluding Citrix apps). */ export interface NativeAppCompatibilityConfig { /** * If `true`, the native window will receive the `WM_DPICHNAGED` message when the effective DPI resolution for it has changed. This will allow the native window to handle the resolution changes properly. */ emulateDPIChangedMessage?: boolean; [k: string]: any; } /** * Node application */ export interface NodeConfig { /** * If `true`, the console of the Node.js script will be visible. */ showConsole?: boolean; /** * This is the path to the JavaScript file to be executed in `Node.js`. */ path?: string; remote?: { /** * This is the URL to the JavaScript file to be executed in `Node.js`. */ url?: string; /** * Set of headers that will be added to the request for downloading the script file. */ headers?: { /** * Header name. */ name: string; /** * Header value. */ value: string; }[]; /** * If `true`, the `Cache-Control: no-cache` header will be added. */ noCache?: boolean; }; /** * If `true`, when the app is started, a valid GW3 token will be set as an environment variable - `gwToken`. */ passGlueToken?: boolean; /** * Enable debugging. Same as inspect. */ debug?: boolean | string; /** * Enable the inspector agent. If `boolean`, listens on the default address and port (127.0.0.1:9229). If `number`, listens on the port number. */ inspect?: boolean | number; /** * Enable the inspector agent and break before the user code starts. If `boolean`, listens on the default address and port (127.0.0.1:9229). If `number`, listens on the port number. */ inspectBrk?: boolean | number; /** * Optional parameters that will be used when starting the application/script. */ parameters?: string; /** * Starting timeout in seconds. */ timeout?: number; /** * The Node.JS version */ nodeVersion?: string; /** * If `true`, the `stdout` and `stderr` will be saved in the log folder under the `application` folder with the name of the application. */ logging?: boolean; /** * CLI options for the Node.js environment. */ nodeCLIOptions?: string; /** * If `true`, the app will be stopped when the platform shuts down. */ terminateOnShutdown?: boolean; [k: string]: any; } /** * Defines a workspace config. */ export interface WorkspacesConfig { /** * If true the application will act as default workspace application (will be used if no workspace app is specified or the specified one is missing). */ default?: boolean; saveWorkspaceApp?: string; restoreWorkspaceApp?: string; addApplicationApp?: string; url?: string; bounds?: { /** * Position (in pixels) of the left window border, relative to the left edge of the display. */ left?: number; /** * Position (in pixels) of the top window border, relative to the top edge of the display. */ top?: number; /** * Width of the app window. */ width?: number; /** * Height of the app window. */ height?: number; }; /** * If set, the window will start in the specified state (maximized, minimized, normal) */ windowState?: "maximized" | "minimized" | "normal"; frameStartLocation?: string; activateFrame?: boolean; hidden?: boolean; /** * When enabled GD applies the min max constraints to the Workspaces Frame window */ updateFrameConstraints?: boolean; layout?: WorkspaceLayout; /** * Workspaces to be loaded when a new frame is loaded */ layouts?: (WorkspaceLayout | WorkspaceRestoreConfig)[]; loading?: LoadingConfig; /** * Settings for hibernating Workspaces. */ hibernation?: { /** * If `true`, will enable Workspaces hibernation. */ enabled?: boolean; /** * Interval in minutes at which to check whether any Workspaces should be hibernated. */ interval?: number; /** * Number of Workspaces to hibernate at a time. The higher the number, the more the usage of system resources will spike. */ workspacesToClose?: number; /** * List of rules that will define whether a Workspace should be hibernated. */ rules?: { /** * If `true`, will enable the hibernation rule. */ enabled: boolean; /** * Must be set to one of the built-in rules. `"InsufficientSystemMemory"` - if the available system memory falls below the limit in KB set by this rule, Workspaces will be hibernated. `"MaximumActiveWorkspaces"` - if the maximum number of active Workspaces set by this rule has been reached, Workspace hibernation will begin. `"WorkspaceIdleTime"` - if a Workspace has been idle for the amount of time in minutes set by this rule, it will be hibernated. */ type: "InsufficientSystemMemory" | "MaximumActiveWorkspaces" | "WorkspaceIdleTime"; /** * Number value for the respective rule - limit in KB for insufficient memory, number of maximum active Workspaces, or minutes for Workspace idle time. */ threshold: number; }[]; }; /** * Controls the count of cached frames, which will be used for workspace extract. The higher the number the higher the consumed memory, the lower the number the chance for workspace extract rejection, because the pool is empty will be higher. */ framePool?: number; /** * If `true`, the app can retrieve OS information. */ allowOSInfo?: boolean; /** * If `true`, the app can retrieve authentication information about the current user. */ allowAuthInfo?: boolean; /** * If `true`, the app can modify the proxy configuration. */ allowProxySettingManipulation?: boolean; syncTitleWithDocumentTitle?: boolean | "preserveCustomTitle"; /** * If `true` only applications opened in the workspace will be allowed to be dropped inside of it and all other apps won't be */ restrictWindowDropByOrigin?: boolean; /** * If `false`, the user won't be able to extract any of the Workspace tabs in the Workspaces App. This will override the Workspaces API locking configuration. */ allowWorkspaceTabExtract?: boolean; /** * Global security settings. */ security?: { /** * If `true`, will allow an HTTPS page to run JavaScript, CSS or plugins from HTTP URLs. */ allowRunningInsecureContent?: boolean; /** * If `true`, web security will be enabled. Set to `false` to disable the same-origin policy (e.g., for testing purposes) and to set `"allowRunningInsecureContent"` to `true`. */ webSecurity?: boolean; /** * Deprecated. Use `"nativeWindowOpen"` instead. */ popups?: boolean; /** * Deprecated. Use `"onCertificateError"` instead. */ stopLoadingOnCertificationErrors?: boolean; /** * Settings for handling web pages with invalid certificates. */ onCertificateError?: { /** * Controls the behavior for loading web pages with invalid certificates - whether to allow or deny loading the page, or to ask the user. */ action?: "allow" | "deny" | "ask"; /** * URL pointing to a page that will be shown to the user and will allow them to report the issue. Only valid if `"action"` is set to `"ask"`. */ reportURL?: string; }; /** * If `true`, dragging and dropping a file or a link onto the page will trigger navigation. */ navigateOnDragDrop?: boolean; /** * If `true`, the renderer associated with the window will be sandboxed, making it compatible with the Chromium OS-level sandbox and disabling the Node.js engine. */ sandbox?: boolean; /** * If `true`, will allow running code in preload scripts and in Electron APIs in a dedicated JavaScript context. Context isolation allows each script running in the renderer process to make changes to its JavaScript environment without conflicting with scripts in the Electron API or preload script. */ contextIsolation?: boolean; /** * If `true`, will enable Node.js integration. */ nodeIntegration?: boolean; /** * List of URI schemes allowed to be opened externally. */ allowedExternalURISchemes?: string[]; }; /** * Specifies the minimum width in pixels for the Workspaces App. */ minWidth?: number; /** * Specifies the minimum height in pixels for the Workspaces App. */ minHeight?: number; /** * Specifies the maximum width in pixels for the Workspaces App. */ maxWidth?: number; /** * Specifies the maximum height in pixels for the Workspaces App. */ maxHeight?: number; /** * Configuration for the Workspace loading animation. */ workspaceLoadingAnimation?: { /** * If `true`, will enable showing a loading animation while a Workspace is being loaded. */ enabled?: boolean; /** * If `true` (default), will hide the Workspace loader once all visible windows in the Workspace have been loaded. */ hideOnLoad?: boolean; }; /** * Specifies if the io.Connect JavaScript API will be auto injected in the window context. The `Glue()` factory function becomes available without referencing a `desktop.js` file. */ autoInjectAPI?: { /** * If `true`, will enable auto injection of the io.Connect JavaScript library. */ enabled: boolean; }; /** * If `true`, the Chrome Dev Tools for the workspace page will start automatically. Suitable for debugging purposes, in case your workspace page contains an error and can't start properly. */ autoOpenDevTools?: boolean; /** * Settings for app jump lists. Jump lists are categorized lists with actions that appear in the context menu when the user right-clicks on the Windows taskbar icons of io.Connect apps. Currently available only in the advanced platform mode. */ jumpList?: { /** * If `true`, will enable jump lists. */ enabled?: boolean; /** * Categorized lists with actions to execute when the user clicks on them. */ categories?: { /** * Title of the category to be displayed in the context menu. */ title?: string; /** * List of actions contained in the category. */ actions?: { /** * Type of the predefined action to execute. */ type: "notifications" | "centerScreen" | "userDefined" | "focusApplication" | "newWorkspace"; /** * Icon for the action to be displayed in the context menu. Must point to a local file. */ icon?: string; /** * Title of the action to be displayed in the context menu when there is a single instance with a single Windows taskbar icon. */ singleInstanceTitle?: string; /** * Title of the action to be displayed in the context menu when there are multiple instances with grouped Windows taskbar icons. */ multiInstanceTitle?: string; }[]; }[]; }; contextMenu?: ContextMenuConfig; /** * Deprecated. Use `"contextMenu"` instead. */ contextMenuEnabled?: boolean; /** * Deprecated. Use `"contextMenu"` instead. */ contextMenuMode?: string; /** * When set to `true` all iframes in the Workspaces frame will receive focus when clicked */ autoRequestFocusInIframes?: boolean; /** * If `true`, the app will be able to access the environment variables for the io.Connect process by using the `env` property of the `iodesktop` object. */ allowEnvVars?: boolean; /** * Settings for zooming in web apps. */ zoom?: { /** * If `true`, will enable zooming. */ enabled?: boolean; /** * If `true`, will enable zooming with `CTRL` + `mouse scroll`. */ mouseWheelZoom?: boolean; /** * List of zoom factors to be used when the user zooms in or out of the window. The factors must be in ascending order and may have integer or floating point values. Zooming will only work with factor values within the range of `25` to `500`. Avoid passing negative values when setting the zoom factor (via configuration or programmatically), as this will cause unexpected behavior. */ factors?: number[]; /** * Default zoom factor within the range of `25` to `500`. Avoid negative values. */ defaultFactor?: number; /** * Determines the default zoom behavior for web apps. If set to `"domain"`, changes in the zoom factor will be applied to the current window, as well as to all other windows within the same domain (default web browser behavior). If set to `"window"`, changes in the zoom factor will be applied only to the current window and won't affect other windows within the domain. */ mode?: "domain" | "window"; /** * Keyboard shortcuts for zooming actions. */ shortcuts?: { /** * Keyboard shortcuts for zooming in. */ zoomIn?: string[]; /** * Keyboard shortcuts for zooming out. */ zoomOut?: string[]; /** * Keyboard shortcuts for resetting the zoom factor to the default value. */ resetZoom?: string[]; [k: string]: any; }; }; /** * A list of preload scripts (URLs) that will be loaded and executed before the actual page is executed */ preloadScripts?: string[] | { /** * List of preload scripts that will be executed in the specified order. */ scripts: ({ /** * URL pointing to a local or a remote preload script or a CSS file. */ url: string; /** * URL pointing to a local or a remote preload script or a CSS file that will be used as a fallback in case the one specified in the `"url"` property doesn't load. */ fallback?: string; /** * Interval in milliseconds to wait for the item to load. */ timeout?: number; /** * If `true`, the preload script or CSS file failure will be treated as a critical error. */ critical?: boolean; [k: string]: any; } | string)[]; /** * If `true`, will import the preload scripts as Base64 strings. */ useBase64PreloadScripts?: boolean; }; /** * Controls the behavior of the browser `window.open()` method. Child windows opened with the browser native `window.open()` method can be opened in the default browser, in io.Connect Windows, or can be prevented from opening altogether. */ nativeWindowOpen?: ("off" | "window" | "browser") | { /** * Must be set to `"window"`. */ mode: "window"; /** * If `true`, will prevent child windows from being closed when their parent is closed. */ outlivesOpener?: boolean; /** * Settings for grouping the newly opened child window with the parent window. The child window can be snapped on any side of the parent window, or can be added to its tab group, provided that both windows are io.Connect tab windows. */ grouping?: { /** * If `true`, will add the new child window to the tab group of the parent. Valid only when both the parent and the child are io.Connect tab windows. */ addToTabGroup?: boolean; /** * If `true`, the child window will be snapped to the parent window. To specify a relative direction for the snapped window, use the `"snappingOptions"` object. If no direction is specified, the child window will be snapped to the right side of the parent window. */ snap?: boolean; /** * Options for snapping the child window to the parent window. */ snappingOptions?: { /** * Direction (bottom, top, left or right) for positioning the child window relatively to the parent window. Considered only if `"snap"` is set to `true`. */ direction?: "bottom" | "top" | "left" | "right"; [k: string]: any; }; [k: string]: any; }; }; /** * Configuration options for windows opened as io.Connect Windows (i.e. when `"nativeWindowOpen"` is set to `"window"`) using the browser `window.open()` method. The available window options are identical to the ones used in the `io.windows.open()` method. */ nativeWindowOpenOptions?: { [k: string]: any; }; /** * If `true`, Workspaces saved in a Global Layout will be restored in their original (unmodified) state when the Global Layout is restored. If `false`, Workspaces will be restored in the exact state in which they were when the Global Layout was saved. */ restoreWorkspacesByReference?: boolean; /** * Settings for injecting CSS files in web apps. The CSS files will be injected after the page has been loaded. */ injectedStyles?: { /** * If `true`, will replace the existing styles of the web app with the injected ones. Note that this won't affect styles added dynamically after the initial page load. If `false`, the existing styles will be merged with the injected ones. */ replace?: boolean; /** * List of objects describing CSS files that will be injected in the specified order. */ styles?: { /** * URL pointing to a local or a remote preload script or a CSS file. */ url: string; /** * URL pointing to a local or a remote preload script or a CSS file that will be used as a fallback in case the one specified in the `"url"` property doesn't load. */ fallback?: string; /** * Interval in milliseconds to wait for the item to load. */ timeout?: number; /** * If `true`, the preload script or CSS file failure will be treated as a critical error. */ critical?: boolean; [k: string]: any; }[]; [k: string]: any; }; /** * Mode for dragging the windows that are part of a Workspace. If set to `"autoEject"`, when the user drags a Workspace window, it will be ejected from the Workspace during the dragging operation and the user will be able to drop it back inside the Workspace, or out of the Workspace. If set to `"keepInside"`, the window won't be ejected from the Workspace when being dragged and the user will be able to drop it only inside the Workspace. */ windowDragMode?: "keepInside" | "autoEject"; /** * Settings for capturing console messages and network request errors for the app and logging them in the `application.log` file of **io.Connect Desktop**. */ logging?: boolean | { /** * Settings for capturing console messages. */ consoleMessages?: { /** * If `true`, will allow capturing all console messages. */ enabled?: boolean; /** * Sets the level at which to capture console messages. The platform will capture all console messages at the specified level and above. */ level?: "debug" | "info" | "warn" | "error"; [k: string]: any; }; /** * Settings for capturing network request errors. */ networkRequestErrors?: { /** * If `true`, will allow capturing all network request errors. */ enabled?: boolean; [k: string]: any; }; /** * Settings for capturing unhandled errors (e.g., unhandled `Promise` rejections, errors not logged in the console). */ unhandledErrors?: { /** * If `true`, will allow capturing all unhandled errors. */ enabled?: boolean; [k: string]: any; }; [k: string]: any; }; dialogs?: WorkspacesDialogsConfig; /** * Custom string to use for the `User-Agent` request header. */ userAgent?: string | { /** * Type of the `User-Agent` string. If set to `"chromium"`, will use the default Chromium `User-Agent` string without the Electron token. If set to `"custom"`, you must provide a custom string via the `"value"` property. */ type: "chromium" | "custom"; /** * Custom string to use for the `User-Agent` request header. Valid only if `"type"` is set to `"custom"`. This value will replace the entire default `User-Agent` string. */ value?: string; /** * String to append to the end of the clean Chromium `User-Agent` string. Valid only if `"type"` is set to `"chromium"`. Use this to add custom tokens to the clean Chromium `User-Agent` string. */ append?: string; [k: string]: any; }; [k: string]: any; } export interface WorkspaceLayout { children: (RowWorkspaceChild | ColumnWorkspaceChild | GroupWorkspaceChild | WindowWorkspaceChild)[]; [k: string]: any; } export interface RowWorkspaceChild { type: "row"; children: (ColumnWorkspaceChild | WindowWorkspaceChild | GroupWorkspaceChild)[]; [k: string]: any; } export interface ColumnWorkspaceChild { type: "column"; children: (RowWorkspaceChild | WindowWorkspaceChild | GroupWorkspaceChild)[]; [k: string]: any; } export interface WindowWorkspaceChild { type: "window"; appName: string; [k: string]: any; } export interface GroupWorkspaceChild { type: "group"; children: WindowWorkspaceChild[]; [k: string]: any; } export interface WorkspaceRestoreConfig { layoutName: string; restoreConfig?: { noTabHeader?: boolean; context?: { [k: string]: any; }; [k: string]: any; }; } /** * Configuration for the loading of applications when opening Workspaces. */ export interface LoadingConfig { /** * Default loading strategy when opening Workspaces. */ loadingStrategy?: "direct" | "delayed" | "lazy"; /** * Valid only in `delayed` mode. Initial period after which to start loading applications in batches. */ initialOffsetInterval?: number; /** * Valid only in `delayed` mode. Interval in minutes at which to load the application batches. */ interval?: number; /** * Valid only in `delayed` mode. Number of applications in a batch to be loaded at each interval. */ batch?: number; /** * Visual indicator `Zzz` on tabs of apps which are not loaded yet. Useful for developing and testing purposes. */ showDelayedIndicator?: boolean; /** * If `true`, the current loading strategy associated with the Workspace will be used for restoring it and resuming it if hibernated. Workspaces created programmatically may have loading strategies different from the default one specified in `"loadingStrategy"`. This property allows you to determine whether the current or the default strategy will be applied when the user hibernates and resumes or saves and restores the programmatically created Workspace. */ persistCurrentStrategy?: boolean; } /** * Configuration for the dialogs used in the Workspaces App. */ export interface WorkspacesDialogsConfig { /** * Enable or disable the default io.Connect dialog messages. */ enableDefaultDialogs?: { /** * If `true`, will enable the dialog message that appears when the user tries to close an io.Connect Workspaces Frame that is programmatically prevented from closing. This dialog will appear also when such Frame participates in a Layout that is being closed. */ preventClose?: boolean; [k: string]: any; }; [k: string]: any; } /** * Configuration for the Web Group App used in **io.Connect Desktop** for web-based io.Connect Window groups. */ export interface WebGroupConfig { /** * URL pointing to the location of the Web Group App. */ url: string; /** * A list of preload scripts (URLs) that will be loaded and executed before the actual page is executed */ preloadScripts?: string[] | { /** * List of preload scripts that will be executed in the specified order. */ scripts: ({ /** * URL pointing to a local or a remote preload script or a CSS file. */ url: string; /** * URL pointing to a local or a remote preload script or a CSS file that will be used as a fallback in case the one specified in the `"url"` property doesn't load. */ fallback?: string; /** * Interval in milliseconds to wait for the item to load. */ timeout?: number; /** * If `true`, the preload script or CSS file failure will be treated as a critical error. */ critical?: boolean; [k: string]: any; } | string)[]; /** * If `true`, will import the preload scripts as Base64 strings. */ useBase64PreloadScripts?: boolean; }; /** * Controls the behavior of the browser `window.open()` method. Child windows opened with the browser native `window.open()` method can be opened in the default browser, in io.Connect Windows, or can be prevented from opening altogether. */ nativeWindowOpen?: ("off" | "window" | "browser") | { /** * Must be set to `"window"`. */ mode: "window"; /** * If `true`, will prevent child windows from being closed when their parent is closed. */ outlivesOpener?: boolean; /** * Settings for grouping the newly opened child window with the parent window. The child window can be snapped on any side of the parent window, or can be added to its tab group, provided that both windows are io.Connect tab windows. */ grouping?: { /** * If `true`, will add the new child window to the tab group of the parent. Valid only when both the parent and the child are io.Connect tab windows. */ addToTabGroup?: boolean; /** * If `true`, the child window will be snapped to the parent window. To specify a relative direction for the snapped window, use the `"snappingOptions"` object. If no direction is specified, the child window will be snapped to the right side of the parent window. */ snap?: boolean; /** * Options for snapping the child window to the parent window. */ snappingOptions?: { /** * Direction (bottom, top, left or right) for positioning the child window relatively to the parent window. Considered only if `"snap"` is set to `true`. */ direction?: "bottom" | "top" | "left" | "right"; [k: string]: any; }; [k: string]: any; }; }; /** * Configuration options for windows opened as io.Connect Windows (i.e. when `"nativeWindowOpen"` is set to `"window"`) using the browser `window.open()` method. The available window options are identical to the ones used in the `io.windows.open()` method. */ nativeWindowOpenOptions?: { [k: string]: any; }; /** * If `true`, the Web Group App will use the OS system buttons for minimize, maximize, restore, and close. If `false`, the Web Group App will use its own buttons for minimize, maximize, restore, and close. Available only for web groups in the default platform mode. */ useOSSystemButtons?: boolean; /** * If `true`, the Chrome Dev Tools for the web group page will start automatically. Suitable for debugging purposes, in case your web group page contains an error and can't start properly. */ autoOpenDevTools?: boolean; /** * If `true`, errors from web group pages will be captured and written in the application log. */ captureErrors?: boolean; pool?: WebGroupPoolConfig; /** * In seconds to wait for the app to become ready after the initial navigation completes. */ timeout?: number; /** * Maximum time in seconds to wait for the page to begin responding (TTFB or between response chunks). This timeout applies only to network responsiveness and does not limit total page load time. */ navigationResponseTimeoutSeconds?: number; /** * Incremental intervals. The application waits a short time before the first retry, and then incrementally increasing time between each subsequent retry. For example, it may retry the operation after 1*500, 2*500, 3*500, and so on. */ retryCount?: number; /** * retryAfter */ retryInterval?: number; /** * retryFailedMessage */ retryFailedMessage?: string; /** * Global security settings. */ security?: { /** * If `true`, will allow an HTTPS page to run JavaScript, CSS or plugins from HTTP URLs. */ allowRunningInsecureContent?: boolean; /** * If `true`, web security will be enabled. Set to `false` to disable the same-origin policy (e.g., for testing purposes) and to set `"allowRunningInsecureContent"` to `true`. */ webSecurity?: boolean; /** * Deprecated. Use `"nativeWindowOpen"` instead. */ popups?: boolean; /** * Deprecated. Use `"onCertificateError"` instead. */ stopLoadingOnCertificationErrors?: boolean; /** * Settings for handling web pages with invalid certificates. */ onCertificateError?: { /** * Controls the behavior for loading web pages with invalid certificates - whether to allow or deny loading the page, or to ask the user. */ action?: "allow" | "deny" | "ask"; /** * URL pointing to a page that will be shown to the user and will allow them to report the issue. Only valid if `"action"` is set to `"ask"`. */ reportURL?: string; }; /** * If `true`, dragging and dropping a file or a link onto the page will trigger navigation. */ navigateOnDragDrop?: boolean; /** * If `true`, the renderer associated with the window will be sandboxed, making it compatible with the Chromium OS-level sandbox and disabling the Node.js engine. */ sandbox?: boolean; /** * If `true`, will allow running code in preload scripts and in Electron APIs in a dedicated JavaScript context. Context isolation allows each script running in the renderer process to make changes to its JavaScript environment without conflicting with scripts in the Electron API or preload script. */ contextIsolation?: boolean; /** * If `true`, will enable Node.js integration. */ nodeIntegration?: boolean; /** * List of URI schemes allowed to be opened externally. */ allowedExternalURISchemes?: string[]; }; contextMenu?: ContextMenuConfig; /** * Deprecated. Use `"contextMenu"` instead. */ contextMenuEnabled?: boolean; /** * Deprecated. Use `"contextMenu"` instead. */ contextMenuMode?: string; /** * Settings for zooming in web apps. */ zoom?: { /** * If `true`, will enable zooming. */ enabled?: boolean; /** * If `true`, will enable zooming with `CTRL` + `mouse scroll`. */ mouseWheelZoom?: boolean; /** * List of zoom factors to be used when the user zooms in or out of the window. The factors must be in ascending order and may have integer or floating point values. Zooming will only work with factor values within the range of `25` to `500`. Avoid passing negative values when setting the zoom factor (via configuration or programmatically), as this will cause unexpected behavior. */ factors?: number[]; /** * Default zoom factor within the range of `25` to `500`. Avoid negative values. */ defaultFactor?: number; /** * Determines the default zoom behavior for web apps. If set to `"domain"`, changes in the zoom factor will be applied to the current window, as well as to all other windows within the same domain (default web browser behavior). If set to `"window"`, changes in the zoom factor will be applied only to the current window and won't affect other windows within the domain. */ mode?: "domain" | "window"; /** * Keyboard shortcuts for zooming actions. */ shortcuts?: { /** * Keyboard shortcuts for zooming in. */ zoomIn?: string[]; /** * Keyboard shortcuts for zooming out. */ zoomOut?: string[]; /** * Keyboard shortcuts for resetting the zoom factor to the default value. */ resetZoom?: string[]; [k: string]: any; }; }; /** * Settings for injecting CSS files in web apps. The CSS files will be injected after the page has been loaded. */ injectedStyles?: { /** * If `true`, will replace the existing styles of the web app with the injected ones. Note that this won't affect styles added dynamically after the initial page load. If `false`, the existing styles will be merged with the injected ones. */ replace?: boolean; /** * List of objects describing CSS files that will be injected in the specified order. */ styles?: { /** * URL pointing to a local or a remote preload script or a CSS file. */ url: string; /** * URL pointing to a local or a remote preload script or a CSS file that will be used as a fallback in case the one specified in the `"url"` property doesn't load. */ fallback?: string; /** * Interval in milliseconds to wait for the item to load. */ timeout?: number; /** * If `true`, the preload script or CSS file failure will be treated as a critical error. */ critical?: boolean; [k: string]: any; }[]; [k: string]: any; }; /** * Settings for capturing console messages and network request errors for the app and logging them in the `application.log` file of **io.Connect Desktop**. */ logging?: boolean | { /** * Settings for capturing console messages. */ consoleMessages?: { /** * If `true`, will allow capturing all console messages. */ enabled?: boolean; /** * Sets the level at which to capture console messages. The platform will capture all console messages at the specified level and above. */ level?: "debug" | "info" | "warn" | "error"; [k: string]: any; }; /** * Settings for capturing network request errors. */ networkRequestErrors?: { /** * If `true`, will allow capturing all network request errors. */ enabled?: boolean; [k: string]: any; }; /** * Settings for capturing unhandled errors (e.g., unhandled `Promise` rejections, errors not logged in the console). */ unhandledErrors?: { /** * If `true`, will allow capturing all unhandled errors. */ enabled?: boolean; [k: string]: any; }; [k: string]: any; }; /** * Custom string to use for the `User-Agent` request header. */ userAgent?: string | { /** * Type of the `User-Agent` string. If set to `"chromium"`, will use the default Chromium `User-Agent` string without the Electron token. If set to `"custom"`, you must provide a custom string via the `"value"` property. */ type: "chromium" | "custom"; /** * Custom string to use for the `User-Agent` request header. Valid only if `"type"` is set to `"custom"`. This value will replace the entire default `User-Agent` string. */ value?: string; /** * String to append to the end of the clean Chromium `User-Agent` string. Valid only if `"type"` is set to `"chromium"`. Use this to add custom tokens to the clean Chromium `User-Agent` string. */ append?: string; [k: string]: any; }; [k: string]: any; } /** * Configuration for the pool of cached Web Group App instances that will be used for various operations - open, extract, unstick, etc. */ export interface WebGroupPoolConfig { /** * The minimum number of cached Web Group App instances. The higher the number, the more memory will be consumed; the lower the number, the higher the chance to experience delay during web group operations. */ min?: number; /** * Reserved for future use. */ max?: number; [k: string]: any; } /** * ClickOnce applications */ export interface ClickOnceConfig { /** * URL to web server address associated with directory, which contains the ClickOnce application. */ url?: string; /** * Specifies the target's main window style (if supported). */ windowStyle?: "Normal" | "Hidden" | "Minimized" | "Maximized"; /** * Position (in pixels) of the left window border, relative to the left edge of the display. */ left?: number; /** * Position (in pixels) of the top window border, relative to the top edge of the display. */ top?: number; /** * Width of the app window. */ width?: number; /** * Height of the app window. */ height?: number; /** * Specify the maximum window height. */ maxHeight?: number; /** * Specify the maximum window width. */ maxWidth?: number; /** * Specify the minimum window height. */ minHeight?: number; /** * Specify the minimum window width. */ minWidth?: number; /** * If `false`, the window won't have resizing areas and the user won't be able to resize it by dragging its borders. */ hasSizeAreas?: boolean; /** * Specifies the tab group ID. If two or more tab windows are defined with same ID, they will be hosted in the same tab window. */ tabGroupId?: string; /** * io.Connect Window type. Possible values are `flat`, `html`, `tab`. */ mode?: "flat" | "tab" | "html" | "frameless"; /** * Specifies the io.Connect Window frame color. Accepts hex color as a string (e.g., `#666666`) or named HTML colors (e.g., `red`) */ frameColor?: string; /** * Specifies the tab position index. Tab windows in the same tab group are ordered by their position index. Use negative index to make the tab active. */ tabIndex?: number; /** * Setting that allows the app window to be on top of the Z-order, in front of all other windows, even when it isn't on focus. Note that because each io.Connect app window is in fact in an io.Connect Window group container (even though being a single window), the `onTop` setting actually determines the Z-order of the group container at the moment of its creation. Snapping an io.Connect Window to another io.Connect Window in reality destroys the group container of the snapped window and that window joins the group container of the window to which it is being snapped. Therefore, when joining a window with a specified `onTop` setting to another window or a window group, its initial `onTop` value will be overwritten - either permanently (when set to `true`), or temporarily (when set to `always`). */ onTop?: boolean | "always"; /** * The window ID of the window that will be used to relatively position the new window. Can be combined with `relativeDirection` */ relativeTo?: string; /** * Direction (`bottom`, `top`, `left`, `right`) of positioning the window relatively to the `relativeTo` window. Considered only if `relativeTo` is supplied. */ relativeDirection?: string; /** * If `false`, the window will not contain a close button. */ allowClose?: boolean; /** * If `false`, the tab header will not contain a close button. */ allowTabClose?: boolean; /** * If `false`, the window will not contain a collapse button. */ allowCollapse?: boolean; /** * If `false`, the window will not contain a maximize button. */ allowMaximize?: boolean; /** * If `false`,the window will not contain a minimize button. */ allowMinimize?: boolean; /** * If `false`, the window will not contain an extract button. */ allowExtract?: boolean; /** * If `false`, the window will not contain a sticky button. */ showStickyButton?: boolean; /** * If `false`, the window will not contain a feedback button. */ showFeedbackButton?: boolean; /** * If `false`, the window will not contain a clone button. */ showCloneButton?: boolean; /** * If `false`, the window will remain stuck to other windows. */ allowUnstick?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ allowChannels?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ readOnlyChannelSelector?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ channelId?: string; /** * If `false`, the window will not contain a lock/unlock button. */ allowLockUnlock?: boolean; /** * If `false`, the window will not be able to maximize via buttons and/or windows gestures. */ maximizable?: boolean; /** * If `false`, the window will not be able to minimize via buttons and/or windows gestures. */ minimizable?: boolean; /** * If `true`, disables transition animations which are applied when showing a hidden window, minimize, restore, maximize, etc. */ disableTransitions?: boolean; /** * If `false`, the window will not appear in the taskbar. */ showInTaskbar?: boolean; /** * If `true`, the newly created window will participate in io.Connect Window operations (stick, unstick, etc.). */ isSticky?: boolean; /** * If `true`, the `stdout` and `stderr` will be saved in the log folder under the `application` folder with the name of the application. */ logging?: boolean; /** * Error message that should be displayed to users if the `clickonce` fails to start. */ startFailedMessage?: string; /** * Starting timeout in seconds. */ timeout?: number; /** * Specifies how to track the lifetime of the target application process , i.e. to determine when it is started and stopped. */ trackingType?: "None" | "Process" | "AGM"; /** * Time in seconds to wait for AGM tracked instance to connect. Use 0 to wait indefinitely. */ agmTrackingLaunchTimeout?: number; /** * Specifies how to pass application starting context to the client application. */ startingContextMode?: "environment" | "interop" | "interopCmdLine" | "none"; /** * Settings for opening new window instances of the same app in a cascade. */ cascade?: { /** * If `true`, will enable cascading windows. */ enabled?: boolean; /** * Offset in pixels for the cascaded window. */ offset?: number; }; /** * If `true`, the app will be stopped when the platform shuts down. */ terminateOnShutdown?: boolean; /** * Settings for app jump lists. Jump lists are categorized lists with actions that appear in the context menu when the user right-clicks on the Windows taskbar icons of io.Connect apps. Currently available only in the advanced platform mode. */ jumpList?: { /** * If `true`, will enable jump lists. */ enabled?: boolean; /** * Categorized lists with actions to execute when the user clicks on them. */ categories?: { /** * Title of the category to be displayed in the context menu. */ title?: string; /** * List of actions contained in the category. */ actions?: { /** * Type of the predefined action to execute. */ type: "notifications" | "centerScreen" | "userDefined" | "focusApplication" | "newWorkspace"; /** * Icon for the action to be displayed in the context menu. Must point to a local file. */ icon?: string; /** * Title of the action to be displayed in the context menu when there is a single instance with a single Windows taskbar icon. */ singleInstanceTitle?: string; /** * Title of the action to be displayed in the context menu when there are multiple instances with grouped Windows taskbar icons. */ multiInstanceTitle?: string; }[]; }[]; }; /** * Specifies properties to be persisted when the app is saved in a Layout. */ saveInLayout?: { /** * If `true`, when the app is saved in a Layout, the command with which it was started will be persisted. If the value of the `"command"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted command, and not the one in the current app definition. */ command?: boolean; /** * If `true`, when the app is saved in a Layout, the parameters with which it was started will be persisted. If the value of the `"parameters"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted parameters, and not the ones in the current app definition. */ parameters?: boolean; /** * Settings for persisting the current title of the app when a Layout is saved. */ title?: boolean | ("Global" | "ApplicationDefault" | "Workspace")[]; [k: string]: any; }; /** * Settings for the Channel Selector UI. */ channelSelector?: { /** * Type of the Channel Selector to show on the io.Connect Windows. The single Channel Selector (default) allows the window to join a single Channel to which it can subscribe and publish data unrestrictedly. The directional single Channel Selector allows the window to join a single Channel, but also enables the user to restrict the window from publishing or from subscribing to the current Channel. The multi Channel Selector allows the window to join multiple Channels simultaneously to which it can subscribe and publish data unrestrictedly. The directional multi Channel Selector allows the window to join multiple Channels, but also enables the user to restrict the window from publishing or from subscribing to the currently joined Channels. */ type?: "single" | "directionalSingle" | "multi" | "directionalMulti"; /** * If `true`, will allow showing the Channel Selector. */ enabled?: boolean; /** * If `true`, the Channel Selector will be visible, but the user won't be able to switch between Channels from it. */ readOnly?: boolean; /** * Name of the Channel to which the window will be joined by default when it's started. */ channelId?: string; /** * By default, users are able to modify the read and write restrictions for all Channels via the Channel Selector UI. Apps can also modify the Channel restrictions programmatically. To prevent the users and the app from being able to modify a Channel restriction, use this property. Provide a list of objects, each containing a Channel name and the Channel restrictions that you want to prevent the users and the app from modifying. */ preventModifyingRestrictionsFor?: { /** * Name of the Channel. */ name?: string; /** * Set to `false` to prevent the users and the app from modifying the Channel restriction for subscribing for data. */ read?: boolean; /** * Set to `false` to prevent the users and the app from modifying the Channel restriction for publishing data. */ write?: boolean; [k: string]: any; }[]; [k: string]: any; }; /** * Object containing key/value pairs of command line parameter names and values to be passed to the ClickOnce app. */ appParameters?: { [k: string]: any; }; [k: string]: any; } /** * Citrix applications */ export interface CitrixConfig { /** * Published Citrix application name. */ name?: string; /** * Optional parameters that will be used when starting the target Citrix application. The content is used as is, no checks performed. */ parameters?: string; /** * If specified, will override the system-generated instance id for this application. */ instanceIdOverride?: string; /** * Specifies the target's main window style (if supported). */ windowStyle?: "Normal" | "Hidden" | "Minimized" | "Maximized"; /** * Position (in pixels) of the left window border, relative to the left edge of the display. */ left?: number; /** * Position (in pixels) of the top window border, relative to the top edge of the display. */ top?: number; /** * Width of the app window. */ width?: number; /** * Height of the app window. */ height?: number; /** * Specify the maximum window height. */ maxHeight?: number; /** * Specify the maximum window width. */ maxWidth?: number; /** * Specify the minimum window height. */ minHeight?: number; /** * Specify the minimum window width. */ minWidth?: number; /** * If `false`, the window won't have resizing areas and the user won't be able to resize it by dragging its borders. */ hasSizeAreas?: boolean; /** * Specifies the tab group ID. If two or more tab windows are defined with same ID, they will be hosted in the same tab window. */ tabGroupId?: string; /** * io.Connect Window type. Possible values are `flat`, `html`, `tab`. */ mode?: "flat" | "tab" | "html" | "frameless"; /** * Specifies the io.Connect Window frame color. Accepts hex color as a string (e.g., `#666666`) or named HTML colors (e.g., `red`) */ frameColor?: string; /** * Specifies the tab position index. Tab windows in the same tab group are ordered by their position index. Use negative index to make the tab active. */ tabIndex?: number; /** * The window ID of the window that will be used to relatively position the new window. Can be combined with `relativeDirection` */ relativeTo?: string; /** * Direction (`bottom`, `top`, `left`, `right`) of positioning the window relatively to the `relativeTo` window. Considered only if `relativeTo` is supplied. */ relativeDirection?: string; /** * If `false`, the window will not contain a close button. */ allowClose?: boolean; /** * If `false`, the tab header will not contain a close button. */ allowTabClose?: boolean; /** * If `false`, the window will not contain a collapse button. */ allowCollapse?: boolean; /** * If `false`, the window will not contain a maximize button. */ allowMaximize?: boolean; /** * If `false`,the window will not contain a minimize button. */ allowMinimize?: boolean; /** * If `false`, the window will not contain an extract button. */ allowExtract?: boolean; /** * If `false`, the window will not contain a sticky button. */ showStickyButton?: boolean; /** * If `false`, the window will not contain a feedback button. */ showFeedbackButton?: boolean; /** * If `false`, the window will not contain a clone button. */ showCloneButton?: boolean; /** * If `false`, the window will remain stuck to other windows. */ allowUnstick?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ allowChannels?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ readOnlyChannelSelector?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ channelId?: string; /** * If `false`, the window will not contain a lock/unlock button. */ allowLockUnlock?: boolean; /** * If `false`, the window will not be able to maximize via buttons and/or windows gestures. */ maximizable?: boolean; /** * If `false`, the window will not be able to minimize via buttons and/or windows gestures. */ minimizable?: boolean; /** * If `true`, disables transition animations which are applied when showing a hidden window, minimize, restore, maximize, etc. */ disableTransitions?: boolean; /** * If `false`, the window will not appear in the taskbar. */ showInTaskbar?: boolean; /** * If `true`, the newly created window will participate in io.Connect Window operations (stick, unstick, etc.). */ isSticky?: boolean; /** * If `true`, the `stdout` and `stderr` will be saved in the log folder under the `application` folder with the name of the application. */ logging?: boolean; /** * Error message that should be displayed to users if the `citrix` application fails to start. */ startFailedMessage?: string; /** * Starting timeout in seconds. */ timeout?: number; /** * Specifies how to track the lifetime of the target application process , i.e. to determine when it is started and stopped. */ trackingType?: "None" | "Process" | "AGM"; /** * Time in seconds to wait for AGM tracked instance to connect. Use 0 to wait indefinitely. */ agmTrackingLaunchTimeout?: number; /** * Specifies how to pass application starting context to the client application. */ startingContextMode?: "environment" | "interop" | "interopCmdLine" | "none"; /** * By default the list of command-line arguments will be processed to replace localhost and 127.0.0.1 addresses with the machine's network IP. Set this argument to true to suppress this behavior. */ dontReplaceLocalhost?: boolean; /** * Settings for opening new window instances of the same app in a cascade. */ cascade?: { /** * If `true`, will enable cascading windows. */ enabled?: boolean; /** * Offset in pixels for the cascaded window. */ offset?: number; }; /** * If `true`, the app will be stopped when the platform shuts down. */ terminateOnShutdown?: boolean; /** * Specifies properties to be persisted when the app is saved in a Layout. */ saveInLayout?: { /** * If `true`, when the app is saved in a Layout, the command with which it was started will be persisted. If the value of the `"command"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted command, and not the one in the current app definition. */ command?: boolean; /** * If `true`, when the app is saved in a Layout, the parameters with which it was started will be persisted. If the value of the `"parameters"` property in the app definition is changed, when the Layout is restored, the app will be started with the previously persisted parameters, and not the ones in the current app definition. */ parameters?: boolean; /** * Settings for persisting the current title of the app when a Layout is saved. */ title?: boolean | ("Global" | "ApplicationDefault" | "Workspace")[]; [k: string]: any; }; /** * Settings for the Channel Selector UI. */ channelSelector?: { /** * Type of the Channel Selector to show on the io.Connect Windows. The single Channel Selector (default) allows the window to join a single Channel to which it can subscribe and publish data unrestrictedly. The directional single Channel Selector allows the window to join a single Channel, but also enables the user to restrict the window from publishing or from subscribing to the current Channel. The multi Channel Selector allows the window to join multiple Channels simultaneously to which it can subscribe and publish data unrestrictedly. The directional multi Channel Selector allows the window to join multiple Channels, but also enables the user to restrict the window from publishing or from subscribing to the currently joined Channels. */ type?: "single" | "directionalSingle" | "multi" | "directionalMulti"; /** * If `true`, will allow showing the Channel Selector. */ enabled?: boolean; /** * If `true`, the Channel Selector will be visible, but the user won't be able to switch between Channels from it. */ readOnly?: boolean; /** * Name of the Channel to which the window will be joined by default when it's started. */ channelId?: string; /** * By default, users are able to modify the read and write restrictions for all Channels via the Channel Selector UI. Apps can also modify the Channel restrictions programmatically. To prevent the users and the app from being able to modify a Channel restriction, use this property. Provide a list of objects, each containing a Channel name and the Channel restrictions that you want to prevent the users and the app from modifying. */ preventModifyingRestrictionsFor?: { /** * Name of the Channel. */ name?: string; /** * Set to `false` to prevent the users and the app from modifying the Channel restriction for subscribing for data. */ read?: boolean; /** * Set to `false` to prevent the users and the app from modifying the Channel restriction for publishing data. */ write?: boolean; [k: string]: any; }[]; [k: string]: any; }; /** * If `true`, the application will attempt to connect to the io.Connect Desktop Gateway via a Citrix Virtual Channel. If `false`, it will try to connect directly to the IP address of the client machine. */ useVirtualChannel?: boolean; [k: string]: any; } /** * Child-window application */ export interface ChildWindowConfig { /** * The host application name */ owner: string; /** * Specifies the target's main window style (if supported). */ windowStyle?: "Normal" | "Hidden" | "Minimized" | "Maximized"; /** * Position (in pixels) of the left window border, relative to the left edge of the display. */ left?: number; /** * Position (in pixels) of the top window border, relative to the top edge of the display. */ top?: number; /** * Width of the app window. */ width?: number; /** * Height of the app window. */ height?: number; /** * Specify the maximum window height. */ maxHeight?: number; /** * Specify the maximum window width. */ maxWidth?: number; /** * Specify the minimum window height. */ minHeight?: number; /** * Specify the minimum window width. */ minWidth?: number; /** * If `false`, the window won't have resizing areas and the user won't be able to resize it by dragging its borders. */ hasSizeAreas?: boolean; /** * Specifies the tab group ID. If two or more tab windows are defined with same ID, they will be hosted in the same tab window. */ tabGroupId?: string; /** * io.Connect Window type. Possible values are `flat`, `html`, `tab`. */ mode?: "flat" | "tab" | "html" | "frameless"; /** * Specifies the io.Connect Window frame color. Accepts hex color as a string (e.g., `#666666`) or named HTML colors (e.g., `red`) */ frameColor?: string; /** * Specifies the tab position index. Tab windows in the same tab group are ordered by their position index. Use negative index to make the tab active. */ tabIndex?: number; /** * The window ID of the window that will be used to relatively position the new window. Can be combined with `relativeDirection` */ relativeTo?: string; /** * Direction (`bottom`, `top`, `left`, `right`) of positioning the window relatively to the `relativeTo` window. Considered only if `relativeTo` is supplied. */ relativeDirection?: string; /** * If `false`, the window will not contain a close button. */ allowClose?: boolean; /** * If `false`, the tab header will not contain a close button. */ allowTabClose?: boolean; /** * If `false`, the window will not contain a collapse button. */ allowCollapse?: boolean; /** * If `false`, the window will not contain a maximize button. */ allowMaximize?: boolean; /** * If `false`,the window will not contain a minimize button. */ allowMinimize?: boolean; /** * If `false`, the window will not contain an extract button. */ allowExtract?: boolean; /** * If `false`, the window will not contain a sticky button. */ showStickyButton?: boolean; /** * If `false`, the window will not contain a feedback button. */ showFeedbackButton?: boolean; /** * If `false`, the window will not contain a clone button. */ showCloneButton?: boolean; /** * If `false`, the window will remain stuck to other windows. */ allowUnstick?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ allowChannels?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ readOnlyChannelSelector?: boolean; /** * Deprecated. Use `"channelSelector"` instead. */ channelId?: string; /** * If `false`, the window will not contain a lock/unlock button. */ allowLockUnlock?: boolean; /** * If `false`, the window will not be able to maximize via buttons and/or windows gestures. */ maximizable?: boolean; /** * If `false`, the window will not be able to minimize via buttons and/or windows gestures. */ minimizable?: boolean; /** * If `true`, disables transition animations which are applied when showing a hidden window, minimize, restore, maximize, etc. */ disableTransitions?: boolean; /** * If `false`, the window will not appear in the taskbar. */ showInTaskbar?: boolean; /** * If `true`, the newly created window will participate in io.Connect Window operations (stick, unstick, etc.). */ isSticky?: boolean; compatibility?: NativeAppCompatibilityConfig; /** * Settings for opening new window instances of the same app in a cascade. */ cascade?: { /** * If `true`, will enable cascading windows. */ enabled?: boolean; /** * Offset in pixels for the cascaded window. */ offset?: number; }; /** * If `true`, the app will be stopped when the platform shuts down. */ terminateOnShutdown?: boolean; /** * Starting timeout in seconds. */ timeout?: number; /** * Settings for app jump lists. Jump lists are categorized lists with actions that appear in the context menu when the user right-clicks on the Windows taskbar icons of io.Connect apps. Currently available only in the advanced platform mode. */ jumpList?: { /** * If `true`, will enable jump lists. */ enabled?: boolean; /** * Categorized lists with actions to execute when the user clicks on them. */ categories?: { /** * Title of the category to be displayed in the context menu. */ title?: string; /** * List of actions contained in the category. */ actions?: { /** * Type of the predefined action to execute. */ type: "notifications" | "centerScreen" | "userDefined" | "focusApplication" | "newWorkspace"; /** * Icon for the action to be displayed in the context menu. Must point to a local file. */ icon?: string; /** * Title of the action to be displayed in the context menu when there is a single instance with a single Windows taskbar icon. */ singleInstanceTitle?: string; /** * Title of the action to be displayed in the context menu when there are multiple instances with grouped Windows taskbar icons. */ multiInstanceTitle?: string; }[]; }[]; }; /** * Setting that allows the app window to be on top of the Z-order, in front of all other windows, even when it isn't on focus. Note that because each io.Connect app window is in fact in an io.Connect Window group container (even though being a single window), the `onTop` setting actually determines the Z-order of the group container at the moment of its creation. Snapping an io.Connect Window to another io.Connect Window in reality destroys the group container of the snapped window and that window joins the group container of the window to which it is being snapped. Therefore, when joining a window with a specified `onTop` setting to another window or a window group, its initial `onTop` value will be overwritten - either permanently (when set to `true`), or temporarily (when set to `always`). */ onTop?: boolean | "always"; /** * Settings for the Channel Selector UI. */ channelSelector?: { /** * Type of the Channel Selector to show on the io.Connect Windows. The single Channel Selector (default) allows the window to join a single Channel to which it can subscribe and publish data unrestrictedly. The directional single Channel Selector allows the window to join a single Channel, but also enables the user to restrict the window from publishing or from subscribing to the current Channel. The multi Channel Selector allows the window to join multiple Channels simultaneously to which it can subscribe and publish data unrestrictedly. The directional multi Channel Selector allows the window to join multiple Channels, but also enables the user to restrict the window from publishing or from subscribing to the currently joined Channels. */ type?: "single" | "directionalSingle" | "multi" | "directionalMulti"; /** * If `true`, will allow showing the Channel Selector. */ enabled?: boolean; /** * If `true`, the Channel Selector will be visible, but the user won't be able to switch between Channels from it. */ readOnly?: boolean; /** * Name of the Channel to which the window will be joined by default when it's started. */ channelId?: string; /** * By default, users are able to modify the read and write restrictions for all Channels via the Channel Selector UI. Apps can also modify the Channel restrictions programmatically. To prevent the users and the app from being able to modify a Channel restriction, use this property. Provide a list of objects, each containing a Channel name and the Channel restrictions that you want to prevent the users and the app from modifying. */ preventModifyingRestrictionsFor?: { /** * Name of the Channel. */ name?: string; /** * Set to `false` to prevent the users and the app from modifying the Channel restriction for subscribing for data. */ read?: boolean; /** * Set to `false` to prevent the users and the app from modifying the Channel restriction for publishing data. */ write?: boolean; [k: string]: any; }[]; [k: string]: any; }; [k: string]: any; } /** * Settings for the priority with which an app will be started in the boot sequence of the platform. You can define at which stage of the boot sequence to start the app, specify whether the platform must wait for the app to initialize, and set a timeout for the app initialization. */ export interface RunPriority { /** * The name of the boot sequence stage at which the app will be started. */ stage?: "core" | "pre-sso" | "post-sso" | "user"; /** * Number determining the priority with which the app will be started at the specified stage of the boot sequence of the platform. The greater the number, the greater the priority of the app. Set to `0` for lowest priority. */ priority?: number; /** * Specifies whether the platform must wait for the app to initialize before continuing the boot sequence and the signaling mechanism that will be used to indicate the initialization completion. */ waitForInitialization?: boolean | ("interopReady" | "appSignal" | "no"); /** * Interval in milliseconds to wait for the app to initialize. */ timeout?: number; } /** * Specifies how this application will be registered as an activity window. */ export interface ActivityTarget { /** * Whether to register the application as an activity window. */ enabled: boolean; /** * Specifies the activity window type that will be associated with this application, i.e. when there is a request from the activity manager to create this type, an application instance is started. Defaults to the application name. */ windowType?: string; /** * Deprecated. Whether this activity window type can act as an independent window, i.e. to belong to any activity. */ isIndependent?: boolean; [k: string]: any; } /** * Intent definition */ export interface Intent { /** * Name of the intent */ name: string; /** * Display name used to visualize the intent */ displayName?: string; /** * The type of predefined data structures with which the app can work */ contexts?: string[]; /** * Metadata describing the return type of the callback which handles the intent */ resultType?: string; /** * Object containing custom configuration for the Intent handler provided via the app definition. */ customConfig?: { [k: string]: any; }; }