# io.Connect Desktop 9.7.1

Source: https://docs.interop.io/desktop/getting-started/changelog/platform/9-7-1/index.html

## io.Connect Desktop 9.7.1

*Release date: 12.02.2025*

| Components | Version |
|------------|---------|
| Electron | [33.1.0](https://releases.electronjs.org/release/v33.1.0) |
| Chromium | 130.0.6723.91 |
| Node.js | 20.18.0 |

The following libraries are bundled with **io.Connect Desktop** 9.7.1 and will be used for [auto injection](https://docs.interop.io/desktop/getting-started/how-to/interop-enable-your-apps/javascript/index.md#auto_injection):

| Injected Library | Version |
|------------------|---------|
| [`@interopio/desktop`](https://www.npmjs.com/package/@interopio/desktop) | [6.10](https://docs.interop.io/desktop/getting-started/changelog/libraries/interopio-desktop/index.md#610-6100) |
| [`@interopio/fdc3`](https://www.npmjs.com/package/@interopio/fdc3) | 2.5 |

## New Features

> ### Retrieving System Paths
>
>To [retrieve any of the system paths](https://docs.interop.io/desktop/capabilities/more/apis/index.md#retrieving_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](https://docs.interop.io/desktop/developers/configuration/system/index.md#folders) 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:
>
> ```javascript
> 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](https://docs.interop.io/desktop/capabilities/more/features/index.md#multiple_instances-handling_attempts_for_starting_additional_instances) 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`:
>
> ```javascript
> 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:
>
> ```javascript
> 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](https://docs.interop.io/desktop/getting-started/how-to/rebrand-io-connect/functionality/index.md) 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:
>
> ```cmd
> 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 Windows 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](https://docs.interop.io/adapters/bloomberg/market-data/javascript/index.md#request_types-intraday_tick) to the Bloomberg Market Data Feed service, use the `createIntraDayTickRequest()` method of the io.Connect [BBG Market Data](https://www.npmjs.com/package/@glue42/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:
>
> ```javascript
> 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();
> ```
