Migration guide

As part of our initiatives to better our app development environment and enable developers to build secure apps, the app development platform and the FDK are constantly upgraded. Though most of the upgrades are seamless and inherently handled by the FDK, at times upgrades entail migrating an app manually. In such cases, the FDK throws warning or error messages with appropriate links to resources that help in migration.

Important:When you run Freshworks CLI commands, an upgrade check is performed only if it hasn’t been performed in the last 24 hours. If a check has run in the last 24 hours, migration or upgrade warnings are not displayed.

The migration map

FDK and compatible Node.js versions

FDK versionNode.js versionSupport for Node.js - status
9.0.0 or laterNode 18.xLive
8.0.0 - 8.6.7Node 14.xDeprecated as of December, 2023.
7.0.0 - 7.5.1Node 12.xDeprecated as on September 30, 2022.
Prior to 7.0.0Node 10.xDeprecated.

There is a major version mismatch between the Node.js version used to build the app and the current version on which the app is run.

The FDK displays a warning message (provided an upgrade check is not run in the last 24 hours). The message mentions the Node.js version on which the app is developed, the version on which the app is run currently, and prompts for continuation.

  1. Type Yes. The FDK,
    • Deletes the existing coverage folder if the app has a serverless component. The folder contains the coverage summary captured as a result of the previous fdk run. Note:The coverage folder is retained for front-end apps.
    • Deletes the existing node_modules folder. The folder contains the npm dependencies (specified in manifest.json) that were installed during the previous fdk run.
    • Includes or updates the engines attribute in manifest.json. The updated engines.node and engines.fdk values reflect the Node.js and FDK versions on which the app is validated.
    • Displays an error message stating that the earlier platform version is deprecated, if the app was built on an earlier platform version. The latest platform version is 2.3.
    • Displays an error message stating that the parameter whitelisted-domains in manifest.json is deprecated.
  2. Migrate your app to the latest platform version.
  3. Run the fdk run command to test the app. This generates the coverage folder.

Migrate to the latest platform version

Construct request templates (config/requests.json)

If your app uses the request method to make secure HTTP calls to third-party domains, you should modify the app files such that they use the latest templated request method. To perform this,

  1. From the app’s root directory, navigate to the config folder and create a requests.json file.
  2. In requests.json, provide appropriate <requestTemplateName>s and create empty snapshots for all requests that the app uses. For information on how to create a snapshot, see Configure request templates.
  3. In your app.js or server.js files, look for the details of the schema and options attributes and move them to appropriate sections of config/requests.json - that is, fill in the snapshot.

Core request attributes

In app.js or server.js, look out for properties such as headers and URL. Move the values of these properties to the corresponding attributes in config/requests.json. The mapping is as follows:

options attributes

In app.js or server.js, look out for options such as headers, maxattempts, retryDelay, and isOAuth. Move the values of these options to the corresponding attributes in config/requests.json. The mapping is as follows:

manifest.json changes

  1. platform-version: From the app’s root directory, navigate to manifest.json. Modify the platform-version value to 2.3.

  2. In manifest.json, remove the deprecated attribute - whitelisted-domains.

  3. If your app uses the request method to make secure HTTP calls to third-party domains, in manifest.json, list all request templates that the app intends to use. To do this, under product.<productName>, add a requests attribute of the following format.

    "requests": {
      "<requestTemplateName>":{},
      "<requestTemplateName1>": {}
    }

    Note:Ensure that the <requestTemplateName> is the same as that configured in config/requests.json.

  4. To migrate a serverless SMI app built on FDK versions prior to 6.13.0, in manifest.json under product.<productName>, allow list all SMI functions/methods defined in the serverless component of the SMI app. To do this, in manifest.json, add an attribute - functions of the following format and list all SMI functions (server methods) defined in the exports code block of the app’s server.js file:

      "functions": {
        "<serverMethodName1>": {
          "timeout": 10
        },
        "<serverMethodName2>": {
          "timeout": 15
        }
      }

    timeout (integer): Time in seconds beyond which the app execution times out, if the SMI function does not return a valid response to the front-end component. You can specify an appropriate timeout value based on the SMI function.

    Valid values: 5, 10, 15, and 20

    Notes:
    • If the SMI function does not return a response within the stipulated time, the app execution times out and an error message is displayed.
    • If an invalid timeout value is specified, the fdk run or fdk validate commands display the error message Timeout should be one of the allowed values.
  5. To migrate a serverless app built on FDK versions prior to 6.13.0, in manifest.json, under product.<productName> register all the serverless events defined in server.js and the corresponding callback methods. To do this, in manifest.json, add an attribute - events of the following format and list all serverless methods defined in the exports code block of the app’s server.js file:

      "functions": {
        "<serverMethodName1>": {
          "timeout": 10
        },
        "<serverMethodName2>": {
          "timeout": 15
        }
      }

    For more information, see App Manifest.

App code changes

  1. The latest FDK version supports app creation, testing, validation, and packing in a local developer environment that is based on Node.js 18. In your app code, ensure that the app code doesn’t contain any Node.js features that are deprecated.
  2. In the front-end HTML files (such as iparams.html), replace the existing client JS resource as follows:
    Replace:
    <script src="https://static.freshdev.io/fdk/2.0/assets/fresh_client.js"></script>
    with:
    <script src="{{{appclient}}}"></script>
  3. If your app uses the request method to make secure HTTP calls to third-party domains, you should modify the app.js file such that it uses the latest templated request method. To do this, look for the details similar to the ones mentioned in the following table and move them to the appropriate specified format.

Migrate to the latest FDK version

  1. Install Node.
  2. Install the Freshworks CLI. This upgrades your local FDK version to the latest FDK version. Important:The latest FDK version supports app creation, testing, validation, and packing in a local developer environment that is based on Node.js 18. Ensure that the app code doesn’t contain any Node.js features that are deprecated. Note:The latest FDK version contains support for the use of ES2020 features when building apps. This enables using ES2020 features such as optional chaining operators in your app code.