Changelog

io.Connect Desktop 9.7.1

Release date: 11.02.2025

Components Version
Electron 33.1.0
Chromium 130.0.6723.91
Node.js 20.18.0

New Features

Retrieving System Paths

To retrieve any of the system paths used by io.Connect Desktop, use the getPath() method of the iodesktop object injected in the global window object and pass one of the following string values:

Value Description
"home" Retrieves the profile directory for the current user (e.g., C:\Users\<username>).
"appData" Retrieves the io.Connect Desktop working directory (e.g., C:\Users\<username>\AppData\Local\interop.io\io.Connect Desktop\Desktop).
"userData" Retrieves the user data directory for the current environment and region in which io.Connect Desktop is running (e.g., C:\Users\<username>\AppData\Local\interop.io\io.Connect Desktop\UserData\<ENV>-<REG>).
"temp" Retrieves the temporary directory for the current user (e.g., C:\Users\<username>\AppData\Local\Temp).
"exe" Retrieves the path to the io.Connect Desktop executable file (e.g., C:\Users\<username>\AppData\Local\interop.io\io.Connect Desktop\Desktop\io-connect-desktop-inner.exe).
"desktop" Retrieves the desktop directory for the current user (e.g., C:\Users\<username>\Desktop).
"documents" Retrieves the documents directory for the current user (e.g., C:\Users\<username>\Documents).
"downloads" Retrieves the downloads directory for the current user (e.g., C:\Users\<username>Downloads).
"music" Retrieves the music directory for the current user (e.g., C:\Users\<username>\Music).
"pictures" Retrieves the pictures directory for the current user (e.g., C:\Users\<username>\Pictures).
"videos" Retrieves the videos directory for the current user (e.g., C:\Users\<username>\Videos).
"recent" Retrieves the recent files directory for the current user (e.g., C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent).

The following example demonstrates retrieving the desktop directory for the current user:

const desktopDir = await iodesktop.getPath("desktop");

Handling Attempts for Starting Additional Platform Instances

To prevent focusing the shell app or to define a custom behavior when the user attempts to start a second platform instance in the same environment and region, register an Interop method named "T42.GD.SecondInstance". io.Connect Desktop will invoke this method without arguments each time this situation occurs.

If you want to prevent focusing the shell app, the method must return an object with a prevent property set to true:

const methodName = "T42.GD.SecondInstance";
const handler = () => {
    return { prevent: true };
};

await io.interop.register(methodName, handler);

If you want to define a custom behavior, provide your custom implementation for the method:

const methodName = "T42.GD.SecondInstance";
const handler = async () => {
    const win = io.windows.find("window-to-focus");

    await win.focus();
};

await io.interop.register(methodName, handler);

Credentials Prefill via Environment Variables

For testing and PoC purposes, you can now set the IO_CD_BASIC_AUTH_USERNAME and IO_CD_BASIC_AUTH_PASSWORD environment variables with default username and password to be used for authentication. If these variables are set, io.Connect Desktop will extract their values and pass them to the login screen displayed by the SSO app and to all interop-enabled apps that require basic authentication. The username and password fields will be prepopulated with the extracted values and the user will be automatically authenticated.

The following example demonstrates setting the IO_CD_BASIC_AUTH_USERNAME and IO_CD_BASIC_AUTH_PASSWORD environment variables for the io.Connect platform process:

set "IO_CD_BASIC_AUTH_USERNAME=my-username" && set "IO_CD_BASIC_AUTH_PASSWORD=my-password" && io-connect-desktop.exe

Improvements & Bug Fixes

  • Improved the behavior when dragging and dropping Workspace windows with custom tab elements.

  • Improved tracking metrics for native apps.

  • Improved handling of inactive apps that require heavy CPU usage.

  • Improved platform stability via a global handler for unhandled rejections.

  • Fixed the behavior for combining the taskbar icons of window groups with the same icon.

  • Fixed a crash caused by users closing web group windows during a Layout save operation.

  • Fixed the behavior of the allowWorkspaceDrop flag for child windows of native apps.

Application Adapters

Bloomberg Intraday Tick Request

To create an Intraday Tick request to the Bloomberg Market Data Feed service, use the createIntraDayTickRequest() method of the io.Connect BBG Market Data API.

It's required to specify a security and eventType. Also, startDateTime and endDateTime points in UTC must be specified. A range of other options can be specified in the IntraDayTickRequestArguments object:

const requestArgs: IntraDayTickRequestArguments = {
    security: "IBM US Equity",
    // This can be a list of all event types.
    eventTypes: [IntraDayEventType.ASK, IntraDayEventType.BID],
    startDateTime: "2019-01-01T13:00:00",
    endDateTime: "2019-01-31T13:00:00"
};

// Creating the request.
const request: IntraDayTickRequest = bbgMarketData.createIntraDayTickRequest(requestArgs);

request.onData(function handleResponse(
    response: ResponseData<IntraDayTickData>
): void {
    if (response.isLast) {
        // Handle the final response.
    } else {
        // Handle partial responses.
    }
});

// Sending the request to a Bloomberg service.
request.open();