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 version | Node.js version | Support for Node.js - Status |
---|---|---|
9.0.0 or later | Node 18.x | Live. |
8.0.0 or 8.6.7 | Node 14.x | Planned to be deprecated by July 31st, 2023. Please ensure to migrate your local FDK to the latest version. |
7.0.0 - 7.5.1 | Node 12.x | Deprecated as on September 30, 2022. |
Prior to 7.0.0 | Node 10.x | Deprecated. |
Local FDK version | Create, validate, or test an app… | ||
---|---|---|---|
Built with 8.0.0 or later | Built with 6.13.0 - 7.5.1 | Prior to 6.13.0 | |
9.0.0 |
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.
|
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.
|
|
8.0.0 - 8.6.7 |
The FDK displays a warning message stating that your FDK version is deprecated (provided an upgrade check is not run in the last 24 hours). The message directs you to resources that contain information on the deprecation. The FDK displays another warning message. 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.
|
The FDK displays a warning message stating that your FDK version is deprecated (provided an upgrade check is not run in the last 24 hours). The message directs you to resources that contain information on the deprecation. The FDK displays another warning message. 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.
|
|
Any earlier FDK version - 7.5.1 |
The FDK displays a warning message stating that your FDK version is deprecated (provided an upgrade check is not run in the last 24 hours). The message directs you to resources that contain information on the deprecation. The FDK displays another warning message. 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.
|
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,
From the app’s root directory, navigate to the config folder and create a requests.json file.
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.
In your app.js or server.js files, look for the details similar to the ones mentioned in the following table and move them to appropriate sections of config/requests.json - that is, fill in the snapshot.
Details in app.js or server.js | Corresponding config/requests.json attributes to fill in | ||||||
---|---|---|---|---|---|---|---|
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:
|
|||||||
|
• Set <requestTemplateName>.schema.protocol as https • Set <requestTemplateName>.schema.host as <%= iparam.subdomain %>.freshcaller.com • Set <requestTemplateName>.schema.path as /api/v1/calls. | ||||||
|
Set <requestTemplateName>.schema.method as GET | ||||||
|
Set <requestTemplateName>.schema.headers as follows:
|
||||||
Options
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:
Request body: In the new request method, the request body is passed at runtime as part of the invokeTemplate() call and is not part of config/requests.json. So, look for options.body and use it appropriately in app.js or server.js. For more information, see App code changes. Response caching: If app.js or server.js contains options.cache and options.ttl, for information on how to migrate them to the new request method, see App code changes. |
|||||||
|
Set <requestTemplateName>.options as follows:
|
||||||
|
Set <requestTemplateName>.options as follows:
|
||||||
|
Set <requestTemplateName>.options as follows:
|
manifest.json changes
platform-version: From the app’s root directory, navigate to manifest.json. Modify the platform-version value to 2.3.
In manifest.json, remove the deprecated attribute - whitelisted-domains.
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.
Copied Copy12345"requests": { "<requestTemplateName>":{}, "<requestTemplateName1>": {} … } Note: Ensure that the <requestTemplateName> is the same as that configured in config/requests.json.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:
Copied Copy
EXPAND ↓12345678"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.
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:
Copied Copy
EXPAND ↓ For more information, see App Manifest.12345678"events": { "<eventName1>": { "handler": "<callbackFunctionName1>" }, "<eventName2>": { "handler": "<callbackFunctionName2>" } }
Sample manifest.json after all platform 2.3 changes are incorporated
For front-end apps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | { "platform-version": "2.3", "product": { "freshcaller": { "location": { "conversation_card": { "url": "template.html", "icon": "logo.svg" } "requests": { "createCall": {}, "getCalls": {} } } } }, "engines": { "node": "18.12.1", "fdk": "9.0.0" } } |
For serverless apps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | { "platform-version": "2.3", "product": { "freshcaller": { "events": { "onCallCreate": { "handler": "onCallCreateHandler" } }, "requests": { "createCall": {}, "getCalls": {} } } }, "engines": { "node": "18.12.1", "fdk": "9.0.0" } } |
For serverless SMI apps
Copied Copy1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | { "platform-version": "2.3", "product": { "freshcaller": { "location": { "conversation_card": { "url": "index.html", "icon": "styles/images/icon.svg" } }, "events": { "onCallCreate": { "handler": "onCallCreateHandler" }, "onExternalEvent": { "handler": "onExternalEventHandler" } }, "functions": { "serverMethod": { "timeout": 10 } }, "requests": { "createCall": {}, "getCalls": {} } } }, "engines": { "node": "18.12.1", "fdk": "9.0.0" } } |
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.
In the front-end HTML files (such as iparams.html), replace the existing client JS resource as follows:
Replace:
Copied Copy12<script src="https://static.freshdev.io/fdk/2.0/assets/fresh_client.js"> </script> with:
Copied Copy1<script src="{{{appclient}}}"></script> 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.
In the front-end HTML files (such as iparams.html), replace the existing client JS resource as follows:
Replace:
with:1<script src="https://static.freshdev.io/fdk/2.0/assets/fresh_client.js"></script> 1<script src="{{{appclient}}}"></script>
Details in app.js or server.js | Format to be moved to | ||||||||
---|---|---|---|---|---|---|---|---|---|
Runtime API for front-end apps | |||||||||
|
|
||||||||
Response caching options for front-end apps | |||||||||
|
|
||||||||
Runtime API for serverless apps | |||||||||
|
|
||||||||
Request body | |||||||||
|
|
Migrate to the latest FDK version
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 front-end apps. This enables using ES2020 features such as optional chaining operators in your app code.