diff --git a/apis/PackageManager/IAppPackageManager.h b/apis/PackageManager/IAppPackageManager.h
index 6c7d7d31..999229ad 100644
--- a/apis/PackageManager/IAppPackageManager.h
+++ b/apis/PackageManager/IAppPackageManager.h
@@ -124,22 +124,22 @@ namespace Exchange {
// @param fileLocator: FileLocator
virtual Core::hresult Delete(const string &fileLocator) = 0;
- struct Percent {
- uint8_t percent;
+ struct ProgressInfo {
+ uint8_t progress;
};
- // @brief Delete
+ // @brief Progress
// @text progress
// @param downloadId: Download id
virtual Core::hresult Progress(
const string &downloadId,
- Percent &percent /* @out */) = 0;
+ ProgressInfo &progress /* @out */) = 0;
// @brief GetStorageDetails
// @text getStorageDetails
virtual Core::hresult GetStorageDetails(
- uint32_t "aKb /* @out */,
- uint32_t &usedKb /* @out */) = 0;
+ string "aKb /* @out */,
+ string &usedKb /* @out */) = 0;
// @brief RateLimit
// @text rateLimit
diff --git a/docs/apis/PackageDownloaderAPI.md b/docs/apis/PackageDownloaderAPI.md
new file mode 100644
index 00000000..0fd4cb51
--- /dev/null
+++ b/docs/apis/PackageDownloaderAPI.md
@@ -0,0 +1,498 @@
+
+
+# PackageDownloader API
+
+**Version: 1.0.0**
+
+**Status: :black_circle::white_circle::white_circle:**
+
+PackageDownloader interface for Thunder framework.
+
+(Defined with IPackageDownloader in [IAppPackageManager.h](https://github.com/rdkcentral/ThunderInterfaces/blob/master/interfaces/IAppPackageManager.h))
+
+### Table of Contents
+
+- [Introduction](#head_Introduction)
+- [Description](#head_Description)
+- [Methods](#head_Methods)
+- [Notifications](#head_Notifications)
+
+
+# Introduction
+
+
+## Scope
+
+This document describes purpose and functionality of the PackageDownloader interface (version 1.0.0). It includes detailed specification about its methods provided and notifications sent.
+
+
+## Case Sensitivity
+
+All identifiers of the interfaces described in this document are case-sensitive. Thus, unless stated otherwise, all keywords, entities, properties, relations and actions should be treated as such.
+
+
+## Acronyms, Abbreviations and Terms
+
+The table below provides and overview of acronyms used in this document and their definitions.
+
+| Acronym | Description |
+| :-------- | :-------- |
+| API | Application Programming Interface |
+| HTTP | Hypertext Transfer Protocol |
+| JSON | JavaScript Object Notation; a data interchange format |
+| JSON-RPC | A remote procedure call protocol encoded in JSON |
+
+The table below provides and overview of terms and abbreviations used in this document and their definitions.
+
+| Term | Description |
+| :-------- | :-------- |
+| callsign | The name given to an instance of a plugin. One plugin can be instantiated multiple times, but each instance the instance name, callsign, must be unique. |
+
+
+## References
+
+| Ref ID | Description |
+| :-------- | :-------- |
+| [HTTP](http://www.w3.org/Protocols) | HTTP specification |
+| [JSON-RPC](https://www.jsonrpc.org/specification) | JSON-RPC 2.0 specification |
+| [JSON](http://www.json.org/) | JSON specification |
+| [Thunder](https://github.com/WebPlatformForEmbedded/Thunder/blob/master/doc/WPE%20-%20API%20-%20WPEFramework.docx) | Thunder API Reference |
+
+
+# Description
+
+PackageDownloader JSON-RPC interface.
+
+
+# Methods
+
+The following methods are provided by the PackageDownloader interface:
+
+PackageDownloader interface methods:
+
+| Method | Description |
+| :-------- | :-------- |
+| [download](#method_download) | Download |
+| [pause](#method_pause) | Pause |
+| [resume](#method_resume) | Resume |
+| [cancel](#method_cancel) | Cancel |
+| [delete](#method_delete) | Delete |
+| [progress](#method_progress) | Delete |
+| [getStorageDetails](#method_getStorageDetails) | GetStorageDetails |
+| [rateLimit](#method_rateLimit) | RateLimit |
+
+
+## *download [method](#head_Methods)*
+
+Download.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.url | string | mandatory | Download url |
+| params.options | object | mandatory | Download options |
+| params.options.priority | boolean | mandatory | Priority |
+| params.options.retries | integer | mandatory | Retries |
+| params.options.rateLimit | integer | mandatory | RateLimit |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | object | mandatory | |
+| result.downloadId | string | mandatory | |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.download",
+ "params": {
+ "url": "...",
+ "options": {
+ "priority": false,
+ "retries": 0,
+ "rateLimit": 0
+ }
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": {
+ "downloadId": "..."
+ }
+}
+```
+
+
+## *pause [method](#head_Methods)*
+
+Pause.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.downloadId | string | mandatory | Download id |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | null | mandatory | Always null |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.pause",
+ "params": {
+ "downloadId": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": null
+}
+```
+
+
+## *resume [method](#head_Methods)*
+
+Resume.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.downloadId | string | mandatory | Download id |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | null | mandatory | Always null |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.resume",
+ "params": {
+ "downloadId": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": null
+}
+```
+
+
+## *cancel [method](#head_Methods)*
+
+Cancel.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.downloadId | string | mandatory | Download id |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | null | mandatory | Always null |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.cancel",
+ "params": {
+ "downloadId": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": null
+}
+```
+
+
+## *delete [method](#head_Methods)*
+
+Delete.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.fileLocator | string | mandatory | FileLocator |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | null | mandatory | Always null |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.delete",
+ "params": {
+ "fileLocator": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": null
+}
+```
+
+
+## *progress [method](#head_Methods)*
+
+Delete.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.downloadId | string | mandatory | Download id |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | object | mandatory | |
+| result.progress | integer | mandatory | |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.progress",
+ "params": {
+ "downloadId": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": {
+ "progress": 0
+ }
+}
+```
+
+
+## *getStorageDetails [method](#head_Methods)*
+
+GetStorageDetails.
+
+### Parameters
+
+This method takes no parameters.
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | object | mandatory | |
+| result.quotaKb | string | mandatory | |
+| result.usedKb | string | mandatory | |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.getStorageDetails"
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": {
+ "quotaKb": "...",
+ "usedKb": "..."
+ }
+}
+```
+
+
+## *rateLimit [method](#head_Methods)*
+
+RateLimit.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.downloadId | string | mandatory | Download id |
+| params.limit | integer | mandatory | Limit |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | null | mandatory | Always null |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.rateLimit",
+ "params": {
+ "downloadId": "...",
+ "limit": 0
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": null
+}
+```
+
+
+# Notifications
+
+Notifications are autonomous events triggered by the internals of the implementation and broadcasted via JSON-RPC to all registered observers. Refer to [[Thunder](#ref.Thunder)] for information on how to register for a notification.
+
+The following events are provided by the PackageDownloader interface:
+
+PackageDownloader interface events:
+
+| Notification | Description |
+| :-------- | :-------- |
+| [onAppDownloadStatus](#notification_onAppDownloadStatus) | Signal changes on the status |
+
+
+## *onAppDownloadStatus [notification](#head_Notifications)*
+
+Signal changes on the status.
+
+### Notification Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.jsonresponse | string | mandatory | |
+
+### Example
+
+#### Registration
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.register",
+ "params": {
+ "event": "onAppDownloadStatus",
+ "id": "myid"
+ }
+}
+```
+
+#### Notification
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "myid.onAppDownloadStatus",
+ "params": {
+ "jsonresponse": "..."
+ }
+}
+```
+
+> The *client ID* parameter is passed within the notification designator, i.e. ``.onAppDownloadStatus``.
+
diff --git a/docs/apis/PackageHandlerAPI.md b/docs/apis/PackageHandlerAPI.md
new file mode 100644
index 00000000..14cdfbb6
--- /dev/null
+++ b/docs/apis/PackageHandlerAPI.md
@@ -0,0 +1,330 @@
+
+
+# PackageHandler API
+
+**Version: 1.0.0**
+
+**Status: :black_circle::white_circle::white_circle:**
+
+PackageHandler interface for Thunder framework.
+
+(Defined with IPackageHandler in [IAppPackageManager.h](https://github.com/rdkcentral/ThunderInterfaces/blob/master/interfaces/IAppPackageManager.h))
+
+### Table of Contents
+
+- [Introduction](#head_Introduction)
+- [Description](#head_Description)
+- [Methods](#head_Methods)
+
+
+# Introduction
+
+
+## Scope
+
+This document describes purpose and functionality of the PackageHandler interface (version 1.0.0). It includes detailed specification about its methods provided.
+
+
+## Case Sensitivity
+
+All identifiers of the interfaces described in this document are case-sensitive. Thus, unless stated otherwise, all keywords, entities, properties, relations and actions should be treated as such.
+
+
+## Acronyms, Abbreviations and Terms
+
+The table below provides and overview of acronyms used in this document and their definitions.
+
+| Acronym | Description |
+| :-------- | :-------- |
+| API | Application Programming Interface |
+| HTTP | Hypertext Transfer Protocol |
+| JSON | JavaScript Object Notation; a data interchange format |
+| JSON-RPC | A remote procedure call protocol encoded in JSON |
+
+The table below provides and overview of terms and abbreviations used in this document and their definitions.
+
+| Term | Description |
+| :-------- | :-------- |
+| callsign | The name given to an instance of a plugin. One plugin can be instantiated multiple times, but each instance the instance name, callsign, must be unique. |
+
+
+## References
+
+| Ref ID | Description |
+| :-------- | :-------- |
+| [HTTP](http://www.w3.org/Protocols) | HTTP specification |
+| [JSON-RPC](https://www.jsonrpc.org/specification) | JSON-RPC 2.0 specification |
+| [JSON](http://www.json.org/) | JSON specification |
+| [Thunder](https://github.com/WebPlatformForEmbedded/Thunder/blob/master/doc/WPE%20-%20API%20-%20WPEFramework.docx) | Thunder API Reference |
+
+
+# Description
+
+PackageHandler JSON-RPC interface.
+
+
+# Methods
+
+The following methods are provided by the PackageHandler interface:
+
+PackageHandler interface methods:
+
+| Method | Description |
+| :-------- | :-------- |
+| [lock](#method_lock) | Lock |
+| [unlock](#method_unlock) | Unlock |
+| [getLockedInfo](#method_getLockedInfo) | GetLockedInfo |
+
+
+## *lock [method](#head_Methods)*
+
+Lock.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.packageId | string | mandatory | Package Id |
+| params.version | string | mandatory | Version |
+| params.lockReason | string | mandatory | LockReason (must be one of the following: *LAUNCH, SYSTEM_APP*) |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | object | mandatory | |
+| result.lockId | integer | mandatory | Lock Id |
+| result.unpackedPath | string | mandatory | Unpacked Path |
+| result.configMetadata | object | mandatory | Config Metadata |
+| result.configMetadata.dial | boolean | mandatory | |
+| result.configMetadata.wanLanAccess | boolean | mandatory | |
+| result.configMetadata.thunder | boolean | mandatory | |
+| result.configMetadata.systemMemoryLimit | integer | mandatory | |
+| result.configMetadata.gpuMemoryLimit | integer | mandatory | |
+| result.configMetadata.envVariables | string | mandatory | |
+| result.configMetadata.userId | integer | mandatory | |
+| result.configMetadata.groupId | integer | mandatory | |
+| result.configMetadata.dataImageSize | integer | mandatory | |
+| result.configMetadata.resourceManagerClientEnabled | boolean | mandatory | |
+| result.configMetadata.dialId | string | mandatory | |
+| result.configMetadata.command | string | mandatory | |
+| result.configMetadata.appType | string | mandatory | |
+| result.configMetadata.appPath | string | mandatory | |
+| result.configMetadata.runtimePath | string | mandatory | |
+| result.configMetadata.logFilePath | string | mandatory | |
+| result.configMetadata.logFileMaxSize | integer | mandatory | |
+| result.configMetadata.logLevels | string | mandatory | |
+| result.configMetadata.mapi | boolean | mandatory | |
+| result.configMetadata.fkpsFiles | string | mandatory | |
+| result.configMetadata.fireboltVersion | string | mandatory | |
+| result.configMetadata.enableDebugger | boolean | mandatory | |
+| result.appMetadata | array | mandatory | App Metadata |
+| result.appMetadata[#] | object | mandatory | |
+| result.appMetadata[#].packageId | string | mandatory | PackageId |
+| result.appMetadata[#].version | string | mandatory | Version |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.lock",
+ "params": {
+ "packageId": "...",
+ "version": "...",
+ "lockReason": "LAUNCH"
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": {
+ "lockId": 0,
+ "unpackedPath": "...",
+ "configMetadata": {
+ "dial": false,
+ "wanLanAccess": false,
+ "thunder": false,
+ "systemMemoryLimit": 0,
+ "gpuMemoryLimit": 0,
+ "envVariables": "...",
+ "userId": 0,
+ "groupId": 0,
+ "dataImageSize": 0,
+ "resourceManagerClientEnabled": false,
+ "dialId": "...",
+ "command": "...",
+ "appType": "...",
+ "appPath": "...",
+ "runtimePath": "...",
+ "logFilePath": "...",
+ "logFileMaxSize": 0,
+ "logLevels": "...",
+ "mapi": false,
+ "fkpsFiles": "...",
+ "fireboltVersion": "...",
+ "enableDebugger": false
+ },
+ "appMetadata": [
+ {
+ "packageId": "...",
+ "version": "..."
+ }
+ ]
+ }
+}
+```
+
+
+## *unlock [method](#head_Methods)*
+
+Unlock.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.packageId | string | mandatory | Package Id |
+| params.version | string | mandatory | Version |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | null | mandatory | Always null |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.unlock",
+ "params": {
+ "packageId": "...",
+ "version": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": null
+}
+```
+
+
+## *getLockedInfo [method](#head_Methods)*
+
+GetLockedInfo.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.packageId | string | mandatory | Package Id |
+| params.version | string | mandatory | Version |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | object | mandatory | |
+| result.unpackedPath | string | mandatory | |
+| result.configMetadata | object | mandatory | |
+| result.configMetadata.dial | boolean | mandatory | |
+| result.configMetadata.wanLanAccess | boolean | mandatory | |
+| result.configMetadata.thunder | boolean | mandatory | |
+| result.configMetadata.systemMemoryLimit | integer | mandatory | |
+| result.configMetadata.gpuMemoryLimit | integer | mandatory | |
+| result.configMetadata.envVariables | string | mandatory | |
+| result.configMetadata.userId | integer | mandatory | |
+| result.configMetadata.groupId | integer | mandatory | |
+| result.configMetadata.dataImageSize | integer | mandatory | |
+| result.configMetadata.resourceManagerClientEnabled | boolean | mandatory | |
+| result.configMetadata.dialId | string | mandatory | |
+| result.configMetadata.command | string | mandatory | |
+| result.configMetadata.appType | string | mandatory | |
+| result.configMetadata.appPath | string | mandatory | |
+| result.configMetadata.runtimePath | string | mandatory | |
+| result.configMetadata.logFilePath | string | mandatory | |
+| result.configMetadata.logFileMaxSize | integer | mandatory | |
+| result.configMetadata.logLevels | string | mandatory | |
+| result.configMetadata.mapi | boolean | mandatory | |
+| result.configMetadata.fkpsFiles | string | mandatory | |
+| result.configMetadata.fireboltVersion | string | mandatory | |
+| result.configMetadata.enableDebugger | boolean | mandatory | |
+| result.gatewayMetadataPath | string | mandatory | |
+| result.locked | boolean | mandatory | |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.getLockedInfo",
+ "params": {
+ "packageId": "...",
+ "version": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": {
+ "unpackedPath": "...",
+ "configMetadata": {
+ "dial": false,
+ "wanLanAccess": false,
+ "thunder": false,
+ "systemMemoryLimit": 0,
+ "gpuMemoryLimit": 0,
+ "envVariables": "...",
+ "userId": 0,
+ "groupId": 0,
+ "dataImageSize": 0,
+ "resourceManagerClientEnabled": false,
+ "dialId": "...",
+ "command": "...",
+ "appType": "...",
+ "appPath": "...",
+ "runtimePath": "...",
+ "logFilePath": "...",
+ "logFileMaxSize": 0,
+ "logLevels": "...",
+ "mapi": false,
+ "fkpsFiles": "...",
+ "fireboltVersion": "...",
+ "enableDebugger": false
+ },
+ "gatewayMetadataPath": "...",
+ "locked": false
+ }
+}
+```
+
diff --git a/docs/apis/PackageInstallerAPI.md b/docs/apis/PackageInstallerAPI.md
new file mode 100644
index 00000000..7b5f1bb5
--- /dev/null
+++ b/docs/apis/PackageInstallerAPI.md
@@ -0,0 +1,421 @@
+
+
+# PackageInstaller API
+
+**Version: 1.0.0**
+
+**Status: :black_circle::white_circle::white_circle:**
+
+PackageInstaller interface for Thunder framework.
+
+(Defined with IPackageInstaller in [IAppPackageManager.h](https://github.com/rdkcentral/ThunderInterfaces/blob/master/interfaces/IAppPackageManager.h))
+
+### Table of Contents
+
+- [Introduction](#head_Introduction)
+- [Description](#head_Description)
+- [Methods](#head_Methods)
+- [Notifications](#head_Notifications)
+
+
+# Introduction
+
+
+## Scope
+
+This document describes purpose and functionality of the PackageInstaller interface (version 1.0.0). It includes detailed specification about its methods provided and notifications sent.
+
+
+## Case Sensitivity
+
+All identifiers of the interfaces described in this document are case-sensitive. Thus, unless stated otherwise, all keywords, entities, properties, relations and actions should be treated as such.
+
+
+## Acronyms, Abbreviations and Terms
+
+The table below provides and overview of acronyms used in this document and their definitions.
+
+| Acronym | Description |
+| :-------- | :-------- |
+| API | Application Programming Interface |
+| HTTP | Hypertext Transfer Protocol |
+| JSON | JavaScript Object Notation; a data interchange format |
+| JSON-RPC | A remote procedure call protocol encoded in JSON |
+
+The table below provides and overview of terms and abbreviations used in this document and their definitions.
+
+| Term | Description |
+| :-------- | :-------- |
+| callsign | The name given to an instance of a plugin. One plugin can be instantiated multiple times, but each instance the instance name, callsign, must be unique. |
+
+
+## References
+
+| Ref ID | Description |
+| :-------- | :-------- |
+| [HTTP](http://www.w3.org/Protocols) | HTTP specification |
+| [JSON-RPC](https://www.jsonrpc.org/specification) | JSON-RPC 2.0 specification |
+| [JSON](http://www.json.org/) | JSON specification |
+| [Thunder](https://github.com/WebPlatformForEmbedded/Thunder/blob/master/doc/WPE%20-%20API%20-%20WPEFramework.docx) | Thunder API Reference |
+
+
+# Description
+
+PackageInstaller JSON-RPC interface.
+
+
+# Methods
+
+The following methods are provided by the PackageInstaller interface:
+
+PackageInstaller interface methods:
+
+| Method | Description |
+| :-------- | :-------- |
+| [install](#method_install) | Install |
+| [uninstall](#method_uninstall) | Uninstall |
+| [listPackages](#method_listPackages) | ListPackages |
+| [config](#method_config) | Config |
+| [packageState](#method_packageState) | PackageState |
+
+
+## *install [method](#head_Methods)*
+
+Install.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.packageId | string | mandatory | Package Id |
+| params.version | string | mandatory | Version |
+| params.additionalMetadata | array | mandatory | Additional Metadata |
+| params.additionalMetadata[#] | object | mandatory | |
+| params.additionalMetadata[#].name | string | mandatory | Name |
+| params.additionalMetadata[#].value | string | mandatory | Value |
+| params.fileLocator | string | mandatory | File Locator |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | string | mandatory | (must be one of the following: *INVALID_METADATA_FAILURE, NONE, PACKAGE_MISMATCH_FAILURE, PERSISTENCE_FAILURE, SIGNATURE_VERIFICATION_FAILURE*) |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.install",
+ "params": {
+ "packageId": "...",
+ "version": "...",
+ "additionalMetadata": [
+ {
+ "name": "...",
+ "value": "..."
+ }
+ ],
+ "fileLocator": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": "SIGNATURE_VERIFICATION_FAILURE"
+}
+```
+
+
+## *uninstall [method](#head_Methods)*
+
+Uninstall.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.packageId | string | mandatory | Package Id |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | string | mandatory | |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.uninstall",
+ "params": {
+ "packageId": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": "..."
+}
+```
+
+
+## *listPackages [method](#head_Methods)*
+
+ListPackages.
+
+### Parameters
+
+This method takes no parameters.
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | array | mandatory | |
+| result[#] | object | mandatory | |
+| result[#].packageId | string | mandatory | PackageId |
+| result[#].version | string | mandatory | Version |
+| result[#].state | string | mandatory | State (must be one of the following: *INSTALLATION_BLOCKED, INSTALLED, INSTALLING, INSTALL_FAILURE, UNINSTALLED, UNINSTALLING, UNINSTALL_FAILURE*) |
+| result[#].digest | string | mandatory | Digest |
+| result[#].sizeKb | integer | mandatory | SizeKb |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.listPackages"
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": [
+ {
+ "packageId": "...",
+ "version": "...",
+ "state": "INSTALLATION_BLOCKED",
+ "digest": "...",
+ "sizeKb": 0
+ }
+ ]
+}
+```
+
+
+## *config [method](#head_Methods)*
+
+Config.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.packageId | string | mandatory | Package Id |
+| params.version | string | mandatory | Version |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | object | mandatory | |
+| result.dial | boolean | mandatory | |
+| result.wanLanAccess | boolean | mandatory | |
+| result.thunder | boolean | mandatory | |
+| result.systemMemoryLimit | integer | mandatory | |
+| result.gpuMemoryLimit | integer | mandatory | |
+| result.envVariables | string | mandatory | |
+| result.userId | integer | mandatory | |
+| result.groupId | integer | mandatory | |
+| result.dataImageSize | integer | mandatory | |
+| result.resourceManagerClientEnabled | boolean | mandatory | |
+| result.dialId | string | mandatory | |
+| result.command | string | mandatory | |
+| result.appType | string | mandatory | |
+| result.appPath | string | mandatory | |
+| result.runtimePath | string | mandatory | |
+| result.logFilePath | string | mandatory | |
+| result.logFileMaxSize | integer | mandatory | |
+| result.logLevels | string | mandatory | |
+| result.mapi | boolean | mandatory | |
+| result.fkpsFiles | string | mandatory | |
+| result.fireboltVersion | string | mandatory | |
+| result.enableDebugger | boolean | mandatory | |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.config",
+ "params": {
+ "packageId": "...",
+ "version": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": {
+ "dial": false,
+ "wanLanAccess": false,
+ "thunder": false,
+ "systemMemoryLimit": 0,
+ "gpuMemoryLimit": 0,
+ "envVariables": "...",
+ "userId": 0,
+ "groupId": 0,
+ "dataImageSize": 0,
+ "resourceManagerClientEnabled": false,
+ "dialId": "...",
+ "command": "...",
+ "appType": "...",
+ "appPath": "...",
+ "runtimePath": "...",
+ "logFilePath": "...",
+ "logFileMaxSize": 0,
+ "logLevels": "...",
+ "mapi": false,
+ "fkpsFiles": "...",
+ "fireboltVersion": "...",
+ "enableDebugger": false
+ }
+}
+```
+
+
+## *packageState [method](#head_Methods)*
+
+PackageState.
+
+### Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.packageId | string | mandatory | Package Id |
+| params.version | string | mandatory | Version |
+
+### Result
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| result | string | mandatory | (must be one of the following: *INSTALLATION_BLOCKED, INSTALLED, INSTALLING, INSTALL_FAILURE, UNINSTALLED, UNINSTALLING, UNINSTALL_FAILURE*) |
+
+### Example
+
+#### Request
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.packageState",
+ "params": {
+ "packageId": "...",
+ "version": "..."
+ }
+}
+```
+
+#### Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "result": "INSTALLATION_BLOCKED"
+}
+```
+
+
+# Notifications
+
+Notifications are autonomous events triggered by the internals of the implementation and broadcasted via JSON-RPC to all registered observers. Refer to [[Thunder](#ref.Thunder)] for information on how to register for a notification.
+
+The following events are provided by the PackageInstaller interface:
+
+PackageInstaller interface events:
+
+| Notification | Description |
+| :-------- | :-------- |
+| [onAppInstallationStatus](#notification_onAppInstallationStatus) | Signal changes on the status |
+
+
+## *onAppInstallationStatus [notification](#head_Notifications)*
+
+Signal changes on the status.
+
+### Notification Parameters
+
+| Name | Type | M/O | Description |
+| :-------- | :-------- | :-------- | :-------- |
+| params | object | mandatory | |
+| params.jsonresponse | string | mandatory | |
+
+### Example
+
+#### Registration
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 42,
+ "method": ".1.register",
+ "params": {
+ "event": "onAppInstallationStatus",
+ "id": "myid"
+ }
+}
+```
+
+#### Notification
+
+```json
+{
+ "jsonrpc": "2.0",
+ "method": "myid.onAppInstallationStatus",
+ "params": {
+ "jsonresponse": "..."
+ }
+}
+```
+
+> The *client ID* parameter is passed within the notification designator, i.e. ``.onAppInstallationStatus``.
+