# Quick-Migration Guide

{% hint style="warning" %}
Sample code uses ES6 language features such as arrow functions and promises. For compatibility with IE11, code written with these features must be either transpiled using tools like `Babel` or refactored accordingly using callbacks.
{% endhint %}

## Introduction

Migration from the v2 to the v3 of the Trust1Connector can be done in 2 ways;

1. Integration of the API
2. Integration via the deprecated Javascript SDK

Both are viable integrations but we strongly suggest to integrate via the API since the JS SDK does not include all features, only the ones which were available in the v2. When integrating via the API you have more control over the Javascript packages used.

The Javascript SDK has the following packages as dependencies;

```
"@types/lodash": "^4.14.150",
"Base64": "^1.1.0",
"axios": "^0.19.2",
"jsencrypt": "^3.0.0-rc.1",
"lodash": "^4.17.15",
"logger-bootstrap": "^2.0.0-alpha2",
"semver": "^7.3.2",
"sha256": "^0.2.0",
"store2": "^2.11.1",
"uuid": "^8.0.0"
```

## Update a v2 application to v3

For updating your web application first of all you need to use the new Javascript SDK. After this there are some differences in using the SDK from the v2.

### Configuration

The configuration from the v2 has changed, we simplified this.

The v2 had the following configuration options;

```javascript
export class GCLConfigOptions {
    constructor(public gclUrl?: string,
                public gwOrProxyUrl?: string,
                public apiKey?: string,
                public gwJwt?: string,
                public tokenExchangeContextPath?: string,
                public ocvContextPath?: string,
                public dsContextPath?: string,
                public dsFileContextPath?: string,
                public pkcs11Config?: Pkcs11ModuleConfig,
                public agentPort?: number,
                public implicitDownload?: boolean,
                public forceHardwarePinpad?: boolean,
                public sessionTimeout?: number,
                public consentDuration?: number,
                public consentTimeout?: number,
                public syncManaged?: boolean,
                public osPinDialog?: boolean,
                public containerDownloadTimeout?: number,
                public localTestMode?: boolean,
                public lang?: string,
                public providedContainers?: T1CContainerid[]) {
    }
}
```

With the v3 this is significantly simplified to the following;

```javascript
export class T1CConfigOptions {
  constructor(
    public t1cApiUrl?: string,
    public t1cApiPort?: string,
    public t1cProxyUrl?: string,
    public t1cProxyPort?: string,
    public jwt?: string
  ) {}
}
```

{% hint style="warning" %}
Some of the config options of the v3 are still in review and can be removed up until the final release of the v3, in the table below you will find more information
{% endhint %}

| V2 config option         | V3 config option | Description                                                                                                                                    |
| ------------------------ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| gclUrl                   | t1cApiUrl        | in the V2 this was https://localhost:10443 while in the V3 this will be https://t1c.t1t.io (for T1T)                                           |
|                          | t1cApiPort       | is the port where the webserver is listening on, in the v2 this is 10443 but in the v3 by default(T1T) this is 51983                           |
|                          | t1cProxyPort     | This value represents the port where the Proxy webserver is listening on. By default this is 51983                                             |
| gwOrProxyUrl             | t1cProxyUrl      | Similar to the api url this is the URL where the proxy used in shared environment is running on. This is by default the same as the API url    |
| apiKey                   | /                |                                                                                                                                                |
| gwJwt                    | jwt              | JWT token used for authentication of the web application towards the Trust1Connector. This must be retrieved from the web applications backend |
| tokenExchangeContextPath | /                |                                                                                                                                                |
| ocvContextPath           | /                |                                                                                                                                                |
| dsContextPath            | /                | in v2 this was the context path for the DS based on the gwOrProxyUrl                                                                           |
| dsFileContextPath        | /                |                                                                                                                                                |
| pkcs11Config             | /                |                                                                                                                                                |
| agentPort                | /                |                                                                                                                                                |
| implicitDownload         | /                |                                                                                                                                                |
| forceHardwarePinpad      | /                |                                                                                                                                                |
| sessionTimeout           | /                |                                                                                                                                                |
| consentDuration          | /                |                                                                                                                                                |
| syncManaged              | /                |                                                                                                                                                |
| osPinDialog              | /                | boolean which depicts the default os pin dialog value                                                                                          |
| containerDownloadTimeout | /                |                                                                                                                                                |
| localTestMode            | /                |                                                                                                                                                |
| lang                     | /                |                                                                                                                                                |
| providedContainers       | /                |                                                                                                                                                |

### Initialisation

After you've created your configuration object you can do the initialisation of the Trust1Connector SDK. This has largely remained the same except for the error codes.

V2 example:

```javascript
config = new GCLLib.GCLConfig(configoptions);
    GCLLib.GCLClient.initialize(config).then(res => {
        client = res;
        core = client.core();
        console.log("GCLClient: ", res)
    }, err => {
        console.log("GCL error:", err)
    })
```

V3 example;

```javascript
config = new T1CSdk.T1CConfig(configoptions);
T1CSdk.T1CClient.initialize(config).then(res => {
    client = res;
    console.log("Client config: ", client.localConfig)
    core = client.core();

}, err => {
    errorHandler(err);
});
```

