1.135.0 • Published 3 days ago

@cs-chatbots/webchat-ui v1.135.0

Weekly downloads
575
License
UNLICENSED
Repository
-
Last release
3 days ago

Webchat-UI

Web client (widget) designed to communicate with the Webchat router. This package includes several graphic themes and language packs.

Installation

npm install @cs-chatbots/webchat-ui

George Web React Integration Example

Webchat-ui integration example as George Web React Component.

The following React example shows the initialization of the GeorgeChat Widget. You can start the conversation by pressing the "Start chat" button or by clicking on the displayed "Teaser".

import React, { useRef, useEffect } from 'react';

import GeorgeChat from '@cs-chatbots/webchat-ui/dist/georgechat';

const getCookie = (t) => {
    const e = document.cookie.match(`(^|;) ?${t}=([^;]*)(;|$)`);
    return Array.isArray(e) ? e[2] : null;
}

const supportedLanguages = ['cs', 'en'];
const maintenanceModeMessage = {
    en: 'Maintenance mode',
    cs: 'Režim údržby'
};
const sharedContext = {
    georgeCluidHashed: getCookie('csasauxid'),
    ga: getCookie('_ga'),
    externalId: getCookie('extcsasid') || '' // optional
};
const externalAuthorization = george.token;

function ChatWidget() {
    const georgechatRef = useRef();
    const onStart = () => georgechatRef.current.initResume();
    const onLogout = () => georgechatRef.current.logout();

    const onMinimize = () => georgechatRef.current.minimize();
    const onExpand = () => georgechatRef.current.expand();

    const onStateChangeHandler = (state, prevState) => {
        console.log('GeorgeChat stateChange (state, prevState):', state, prevState);
    };
    const onActivityHandler = () => {
        console.log('GeorgeChat conversation activity');
    };

    return (
        <>
            <button
                type="button"
                onClick={onStart}
            >
                Start Chat
            </button>
            <button
                type="button"
                onClick={onLogout}
            >
                Logout
            </button>

            <button
                type="button"
                onClick={onMinimize}
            >
                Minimize Chat
            </button>
            <button
                type="button"
                onClick={onExpand}
            >
                Expand Chat
            </button>

            <GeorgeChat
                ref={georgechatRef}
                apiUrl={'https://george.csast.csas.cz/api/georgechat/api'}
                wsUrl={'wss://george.csast.csas.cz/api/georgechat/'}
                channelId={'erste-welcome-genesys'}
                supportedLanguages={supportedLanguages}
                fallbackLanguage={'cs'}
                languagePackage={'george-cz'}
                sharedContext={sharedContext}
                externalAuthorization={externalAuthorization}
                onStateChange={onStateChangeHandler}
                onActivity={onActivityHandler}
                maintenanceModeMessage={maintenanceModeMessage}
            />
        </>
    );
}

export default ChatWidget;

Generic React Integration Example

Webchat-ui integration example as React Component.

The following React example shows the initialization of the Webchat Widget. You can start the conversation by pressing the "Start chat" button or by clicking on the displayed "Teaser".

import React, { useRef } from 'react';

import { Webchat } from '@cs-chatbots/webchat-ui';
import '@cs-chatbots/webchat-ui/dist/flp.css';

const supportedLanguages = ['cs', 'en'];

function ChatWidget() {
    const webchatRef = useRef();
    const onStartChat = () => webchatRef.current.postBack('start');

    return (
        <>
            <button
                type="button"
                onClick={onStartChat}
            >
                Start chat
            </button>

            <Webchat
                ref={webchatRef}
                apiUrl={'http://localhost:3000/api'}
                wsUrl={'ws://localhost:3000/'}
                channelId={'88099916-6b18-11e9-9b46-1681be663d3e'}
                theme={'flp'}
                supportedLanguages={supportedLanguages}
                fallbackLanguage={'cs'}
            />
        </>
    );
}

export default ChatWidget;

Webchat/GeorgeChat component Configuration params resp. React props

Warning: it is required to inform chat squad by email (MLChatDEVEGIT@erstegroup.com) every time you add a new parameter which may differ per country

parameterdefaultdescriptionexample
channelIdrequiredIdentifier of channel'88099916-6b18-11e9-9b46-1681be663d3e'
apiUrlrequiredOverride an API URL of widget
wsUrlrequiredOverride an websocket URL of the widget
refLinksfalseEnables ability to run certain action using a ?ref=<payload> link in navigation
inactivityTimerEnabledfalseWebchat will a postback after certain timeout
inactivityTimerTimeout20000Timeout in miliseconds
inactivityTimerPayload'user-timeout-on-page'An actions payload to be fired as inactivity postback
userDataAction'user-data-update'An action name, which will be sent as a postback and it will contain collected data about page
userDataAppIdnullApplication name used in postback by userDataUpdate
startAppIdnullApplication name used in postback by start action
tokenRefreshInterval20000Interval in miliseconds to refresh the credentials
retryInterval5000Websockets reconnect interval in miliseconds
wsAuthTokenIntervalMs60000Authorization token over Websocket interval in milliseconds. Default value 60000ms. 0 means Authorization token over Websocket will be omitted.
getStartednullOverride the action, which will occur after pressing the start button'start-elsewhere'
isTeaserActivetrueInteractive Teaser handle minimize and reveal Coversation functionality
resetSessionOnInitfalseInit with or without conversation history
onConnectionErrorHandlernullRegister function, which is called in case of Webchat connection error instead of display InitFailedOverlay
useEventsDecoratorstrueAllow display visual decorators before and after Event on click.
sharedContext{}An object or function returning an object - this object is used to extend the shared context on its initialization.
useImagesAsFullscreenOverlaytrueAllow display images as fullscreen overlay with zoom and download ability.
spinnerMode'classic'Supported values: 'classic' 'george' 'heygeorge'.'classic': The first loading screen contains a bar spinner with text underneath. Reconnecting is shown in the conversation (as a messge). Again as a bar spinner with text underneath.'george': First loading screen uses a circular spinner same as in the George, with text underneath. Reconnecting is shown as a semi-opaque overlay above the conversation. It is a circular spinner same as in the George, with text underneath.'heygeorge': It is identical to the George option, but the first loading screen / reconnecting is displayed with a spinnerDelayMs (500ms) delay and contains no text. Just a circular spinner.'classic'
spinnerDelayMs0Number of milliseconds after which the display of the connecting/reconnecting spinner will be delayed.
externalAuthorizationnullIf provided, the "external authorization token" is validated against MEP service, hashed and added to the conversation token under key "ea". If the authorization token doesn't validate or the hash doesn't match the "ea" value previously stored, the conversation gets restarted.
externalAuthorizationMethod'property'Specify a token acquisition method for the externalAuthorization property. Valid values are 'property' | 'oidc' | 'tokenExchange' | 'tokenExchangeInvalidationPost'. 'property' - the externalAuthorization property is taken into account. 'oidc' - externalAuthorization is performed by an internal OIDC process, the externalAuthorization property is ignored. 'tokenExchnage' - externalAuthorization is performed by an internal tokenExchange process, the externalAuthorization property is ignored. 'tokenExchangeInvalidationPost' - externalAuthorization is performed by an internal tokenExchange process, but the invalidation is not with DELETE method, but POST method.
externalAuthorizationAutorecoveryfalseValid only if the <GeorgeChat /> component is used. If set to true remount Webchat component and invoke start postback on error OIDC process occured.
externalAuthorizationTokenExchangeAccessTokennullTokenExchange Access Token. Value is used on externalAuthorizationMethod equals 'tokenExchange' only. Valid only if the <GeorgeChat /> component is used.
externalAuthorizationTokenExchangeUrlnullTokenExchange URL. Value is used on externalAuthorizationMethod equals 'tokenExchange' only. Valid only if the <GeorgeChat /> component is used.'https://apifat.erstebank.hr/george/v1/netbanking/hr/exchange?targetClientId=george-cc'
externalAuthorizationTokenInvalidationUrlnullOIDC/TokenExchange invalidation URL. Valid only if the <GeorgeChat /> component is used.'https://apifat.erstebank.hr/george/v1/netbanking/auth/token/invalidate'
externalAuthorizationTokenExchangeKeepAccessTokenInCookiefalseThis flag decides whether the Chat Token will be kept in cookies or not. If true, Chat Token will be saved to a browser cookies, then starts the process of checking cookies for Chat token change
showClientIdentityfalseAllow hide/show client icon in conversation. In the case of <GeorgeChat /> component is used, the parameter default value is true
useAuthenticatedFlagfalseEnable support of the authenticated feature. Each client event is extended with persona object. Authenticated client icon is decorated with the "verified" badge.true
useInvalidationWhenSessionExpiredfalseThis flag decides whether invalidation token service will be called or not, when the session have been expired
supportedLanguages['en', 'cs']An array of two-letter ISO 639-1 language codes.
fallbackLanguage'en'Two-letter ISO 639-1 language code used when detection failed. Language code detection is performed according to the attribute lang of the <html> tag.
hideOnUnsupportedLanguagetrueHide Webchat widget on unsupported language detected.
themenullIn the case of <GeorgeChat /> component is used, the parameter is ignored and its value is set to 'george'.Some graphical themes have also its own language sets.'flp'
onStateChangenullCallback handler that is called on the Widget State change. The function has two arguments: (state: string, prevState: string|null). state and prevState, both of which can take the values listed in the following table.
onActivitynullCallback handler that is called for each conversational activity.
allowBrowserTabConversationSeparationfalseIn the case of <GeorgeChat /> component is used, the parameter is ignored and its value is set to true.It is only taken into account in combination with the ignoreBrowserCookie channel setting. If allowBrowserTabConversationSeparation is set to true, sessionStorage is used to store the conversation session - this makes it possible to run separate conversations per Browser Tab. Otherwise (and by default) localStorage is used.
maintenanceModeAllowedfalseIn the case of <GeorgeChat /> component is used, the parameter is ignored and its value is set to true.Allow turn on maintenance mode.
maintenanceModeMessage{}Static maintenance mode message. Overrides language file message.{ en: "Maintenance mode", cs: "Režim údržby" }
maintenanceChatHiddenfalseAllow hide/show widget while maintenance mode is on.
expandOnMaintenanceMessagefalseExpand widget on visible maintenance message.
finishedChatBehaviour'minimize''minimize' | 'hide' | 'keepexpanded' | 'keepexpanded_on_closing_screen'. When the conversation is finished:When ('minimize') is used, the Chat Widget is minimized. Only the Teaser keeps visible.When 'hide' is used, the whole Widget (the Teaser included) gets hidden.When 'keepexpanded' is used, the whole Widget keeps expanded and the user has to press the "Start the chat" button to start a new conversation.When 'keepexpanded_on_closing_screen' is used, the whole Widget keeps expanded on closing screen. This option is suitable for use alongside 'allowClosingStatesInUrl' set to true.
languagePackageIn case no languagePackage is provided, the defaultlanguagePackage will be usedSet language-package, due to the every country specifications. Suffix -cz means which country language-pack will be usedgeorge-cz
highlightChatAllowedfalseAllow showing message alerts on a chat
showAlertsOnExpandedChatfalseShow message alert even if the chat is expanded
ignoreFocusChangeOnMinimizedChatfalseIgnore any focus changes on a chat component, when the chat is minimized. Focus changes affect showing/hiding message alerts. This flag depends on highlightChatAllowed
allowClosingStatesInUrlfalsePromote to and react on closing states changes in hash part of url. Namely closing (NPS) screen (closing-screen) and finish state (closed). Its necessary for George mobile integration. Valid values true or false.
allowChatFocusedInUrlfalsePromote to "chat focused by the User" in hash part of url. Its necessary for Hey George mobile integration. Valid values true or false.
allowChatInProgressInUrlfalsePromote to "user write some utterance" in hash part of url. Its necessary for Hey George mobile integration. Valid values true or false.
richTextDeeplinkPrefixWhen set, original link in conversation message will be encodeURIComponent and appended to {richTextDeeplinkPrefix}/open_external_link?url=. Except original link startsWith 'georgeapp'. E.g. georgeapp://cz/open_external_link?url=https%3A%2F%2Fexample.com%2Ftest%2F1%3Fkey%3Dvalue%26otherkey%3Dvalue.When set, anchor in conversation message will applied on template {richTextDeeplinkPrefix}/deeplink?path={anchor}&dataReload=true. E.g. georgeapp://cz/deeplink?path=settings/customersafe&dataReload=true'georgeapp://cz'
processAsAnchorUrlPrefixes[]String array of prefixes, wich will be used to detect URLs that will be treated as if they were anchors. And therefore will be threated as deeplinks. Note. the '#' is automatically included in the array.['https://george.fat.sparkasse.at/index.html?at=c#', 'https://george.fat.sparkasse.at/index.html?at=c&state=']
enableBodyScrollLockfalseEnables set of special behavior for mobile devices solving e.g. soft keypad problems. Usable especially for webview. Originally body-scroll-lock packages were allowed to be used here. Usable especially for webview.true
useAnonymizationfalseTurns on content anonymization. Currently only access_token in url.true
useKeepalivetrueIn some cases it is preferred to use another method of sending the event. E.g. sending the close-chat can be immediately followed by going to another browser page and it is necessary to ensure that it is sent by HTTP POST with the 'keepalive' attribute.true
enableFileUploadfalseEnable the File Upload feature. It extends the capabilities of the Composer component with the ability to attach a file to the message.true
fileUploadMaxFileCount10The maximum number of files that can be attached to each message.3
fileUploadMaxFileSizeBytes10485760Maximum number of bytes for each file separately. E.g. 10485760 means 10MiB = (10 1024 1024)B.10485760
fileUploadEnabledModeanytimeDefines when file upload feature is enabled. First of all enableFileUpload must be set to true to enable file upload feature. Valid values are anytime, onadvisor. anytime - file upload is always enable. onadvisor - file upload is enabled only in conversation with bankeranytime
enableConversationHeaderfalseEnables Conversation header with information about advisor/bot and alternative "End Chat" button. This parameter is linked to the functionality of displaying the name of the advisor/bot and the time of its message.true
conversationHeaderMode'full'Modifies the ConversationHeader functionality if enabled. Valid values: 'full', 'offlineOrAdvisorOnly', 'fullWhenUserFocusedNoneOtherwise'. The default value is 'full'.'full'
channelAvailabilityBasicAuthBase64nullDefault Channel availability Basic Authentication in BASE64. Will be used when the ConversationHeader is visible.'Y2hhbmdlbWU='
showDebugtrueEnables visualise debug messages in the conversation.false
composerMaxLength1000Max number of characters allowed enter into the Composer.3000

Widget state table

A description of the states that can come as values in the state and prevState arguments of the onStateChange handler described above.

statedescriptionwidget visual state
INITIALIZINGJust after starting the chat. The previous state can be null.The Widget is not render yet.
READYThe chat received both a token and a channel, but the conversation has not yet begun.The Widget is minimized.
OPENEDThe conversation has already begun and the Widget is visible open.The Widget is expanded.
MINIMIZEDThe conversation has already begun, the Widget is visible in a minimized state.The Widget is minimized.
MINIMIZED_WITH_NOTIFICATIONThe conversation has already begun, the Widget is visible in a minimized state. Can happen only if widget is minimized and new message received.The Widget is minimized.
FINISHEDThe user has closed the chat that has already loaded new credentials.The Widget is minimized.

The Widget states

Widget public API

The widget offers a public API, which is described in the following table.

functionargsdescription
initResume-The function only exists in the <GeorgeChat /> component. It is called in a scenario specific to GeorgeWeb. The GeorgeChat component is mounted on the page each time it is rendered. At such a moment, GeorgeChat just checks to see if a conversation session has already started. If it is, it starts normally. If not, its further initialization is suspended due to resource savings. You need to call this function to continue initialization.
postBackactionUsed to send a non-visual chat event. The 'start' value in action argument is used to start the conversation. E.g. postBack('start');
disconnectendSession = trueUsed to notify the widget that it will be unmounted so it can end performing conversation. Unmount is safe only after setting the FINISHED state. The true value in endSession argument is used when user click on Logout button. true is default value. The false value in endSession argument is used when user session expires. E.g. disconnect(false);
reset-Function used to reset the conversation and start from the very beginning. Used mostly for OAI Bot, in conclusion to a full reload, after the reset is triggered.
expand-Used to change widget state to OPENED
minimize-Used to change widget state to MINIMIZED
1.135.0

3 days ago

1.135.0-alpha

7 days ago

1.135.0-alpha-1

7 days ago

1.134.2

2 months ago

1.134.1

2 months ago

1.134.1-beta.0

2 months ago

1.134.0

2 months ago

1.133.0

3 months ago

1.132.0

5 months ago

1.131.0

5 months ago

1.126.5-beta.0

5 months ago

1.126.5-beta.1

5 months ago

1.126.5-beta.2

5 months ago

1.126.5-beta.3

5 months ago

1.131.0-beta.0

5 months ago

1.130.0

5 months ago

1.129.0

5 months ago

1.121.1-beta.0

8 months ago

1.126.3

7 months ago

1.126.2

7 months ago

1.126.4

7 months ago

1.126.1

8 months ago

1.126.0

8 months ago

1.125.0

8 months ago

1.128.0

6 months ago

1.122.0-beta.0

8 months ago

1.117.2

10 months ago

1.117.0

10 months ago

1.117.1

10 months ago

1.127.0

6 months ago

1.126.3-beta.0

7 months ago

1.116.0

10 months ago

1.122.1

8 months ago

1.122.0

8 months ago

1.119.0-beta.2

9 months ago

1.119.0-beta.1

9 months ago

1.125.0-beta.0

8 months ago

1.119.0-beta.0

9 months ago

1.125.0-beta.1

8 months ago

1.121.0

8 months ago

1.121.1

8 months ago

1.118.0-beta.0

10 months ago

1.124.0

8 months ago

1.121.0-beta.0

8 months ago

1.123.0

8 months ago

1.123.1

8 months ago

1.126.4-beta.0

7 months ago

1.117.1-beta.1

10 months ago

1.120.0

9 months ago

1.120.0-beta.10

9 months ago

1.118.1-beta.1

10 months ago

1.118.1-beta.0

10 months ago

1.117.2-beta.0

10 months ago

1.120.0-beta.0

9 months ago

1.128.0-beta.0

6 months ago

1.119.0

9 months ago

1.119.1

9 months ago

1.118.1

10 months ago

1.118.0

10 months ago

1.122.1-beta.0

8 months ago

1.115.2

10 months ago

1.115.0

10 months ago

1.115.1

10 months ago

1.115.2-beta.0

10 months ago

1.114.1-beta.11

10 months ago

1.114.1-beta.10

10 months ago

1.114.1-beta.13

10 months ago

1.114.1-beta.12

10 months ago

1.114.1-beta.15

10 months ago

1.114.1-beta.14

10 months ago

1.114.1-beta.6

10 months ago

1.114.1-beta.8

10 months ago

1.114.1-beta.7

10 months ago

1.114.1-beta.9

10 months ago

1.114.1-beta.2

10 months ago

1.114.1-beta.1

10 months ago

1.114.1-beta.4

10 months ago

1.114.1-beta.3

10 months ago

1.114.1-beta.5

10 months ago

1.114.0-beta.0

10 months ago

1.114.0-beta.1

10 months ago

1.114.0-beta.2

10 months ago

1.114.0

10 months ago

1.113.0

11 months ago

1.112.0

11 months ago

1.112.0-beta.1

11 months ago

1.112.0-beta.0

11 months ago

1.112.0-beta.3

11 months ago

1.112.0-beta.2

11 months ago

1.114.1-beta.0

10 months ago

1.103.0

1 year ago

1.102.0

1 year ago

1.105.0

1 year ago

1.103.1-beta.2

1 year ago

1.103.1-beta.1

1 year ago

1.103.1-beta.0

1 year ago

1.104.2

1 year ago

1.104.0

1 year ago

1.104.1

1 year ago

1.111.0

11 months ago

1.111.1

11 months ago

1.111.2

11 months ago

1.110.0

11 months ago

1.111.2-beta.0

11 months ago

1.104.2-beta.0

1 year ago

1.107.1

12 months ago

1.107.2

12 months ago

1.107.0

12 months ago

1.106.0

12 months ago

1.107.5

11 months ago

1.107.3

12 months ago

1.107.4

11 months ago

1.109.0

11 months ago

1.103.0-beta.0

1 year ago

1.103.0-beta.1

1 year ago

1.108.0

11 months ago

1.108.0-beta.0

11 months ago

1.101.1-beta.0

1 year ago

1.101.5

1 year ago

1.101.3

1 year ago

1.101.4

1 year ago

1.101.1

1 year ago

1.101.2

1 year ago

1.101.3-beta.0

1 year ago

1.102.0-beta.0

1 year ago

1.101.0

1 year ago

1.99.0

1 year ago

1.100.0

1 year ago

1.100.1

1 year ago

1.98.5-node18

1 year ago

1.98.4-node18

1 year ago

1.98.6-node18

1 year ago

1.97.1-node18

1 year ago

1.96.1

1 year ago

1.98.0

1 year ago

1.97.1

1 year ago

1.97.0

1 year ago

1.98.3-node18

1 year ago

1.98.2-node18

1 year ago

1.96.1-beta.0

1 year ago

1.97.1-beta.1

1 year ago

1.97.1-beta.0

1 year ago

1.98.0-beta.1

1 year ago

1.98.0-beta.0

1 year ago

1.96.2-beta.1

1 year ago

1.96.2-beta.2

1 year ago

1.96.2-beta.0

1 year ago

1.94.2

1 year ago

1.94.1

1 year ago

1.94.0

1 year ago

1.96.0

1 year ago

1.95.0-beta.0

1 year ago

1.95.2

1 year ago

1.95.1

1 year ago

1.95.0

1 year ago

1.94.2-beta.0

1 year ago

1.97.0-beta1

1 year ago

1.96.0-beta.0

1 year ago

1.96.0-beta.2

1 year ago

1.96.0-beta.1

1 year ago

1.94.0-beta.0

1 year ago

1.94.0-beta.1

1 year ago

1.95.2-beta.0

1 year ago

1.93.1

2 years ago

1.93.0

2 years ago

1.92.0-beta.1

2 years ago

1.92.0-beta.0

2 years ago

1.92.0

2 years ago

1.88.0-beta.9

2 years ago

1.88.0-beta.8

2 years ago

1.88.0-beta.3

2 years ago

1.88.0-beta.2

2 years ago

1.88.0-beta.1

2 years ago

1.88.0-beta.0

2 years ago

1.88.0-beta.7

2 years ago

1.88.0-beta.6

2 years ago

1.88.0-beta.5

2 years ago

1.88.0-beta.4

2 years ago

1.90.0-beta.0

2 years ago

1.90.0-beta.2

2 years ago

1.90.0-beta.1

2 years ago

1.89.0-beta.0

2 years ago

1.87.1

2 years ago

1.89.0

2 years ago

1.88.0

2 years ago

1.88.1

2 years ago

1.91.0-beta.0

2 years ago

1.91.0-beta.1

2 years ago

1.91.0-beta.2

2 years ago

1.90.1-beta.0

2 years ago

1.91.1-beta.0

2 years ago

1.89.0-beta.1

2 years ago

1.88.0-beta.11

2 years ago

1.90.1

2 years ago

1.90.0

2 years ago

1.88.0-beta.10

2 years ago

1.91.1

2 years ago

1.91.0

2 years ago

1.87.0

2 years ago

1.79.0

2 years ago

1.82.0

2 years ago

1.82.1

2 years ago

1.86.1-beta.0

2 years ago

1.83.0

2 years ago

1.83.1

2 years ago

1.83.2

2 years ago

1.83.3

2 years ago

1.83.1-beta.0

2 years ago

1.84.2-beta.0

2 years ago

1.82.0-beta.1

2 years ago

1.82.0-beta.0

2 years ago

1.82.0-beta.5

2 years ago

1.82.0-beta.4

2 years ago

1.82.0-beta.3

2 years ago

1.82.0-beta.2

2 years ago

1.82.0-beta.7

2 years ago

1.86.3-beta.1

2 years ago

1.84.0

2 years ago

1.84.1

2 years ago

1.85.0

2 years ago

1.85.1

2 years ago

1.80.0-beta.0

2 years ago

1.86.3-beta.0

2 years ago

1.83.0-beta.5

2 years ago

1.83.0-beta.3

2 years ago

1.83.0-beta.4

2 years ago

1.83.0-beta.1

2 years ago

1.86.0

2 years ago

1.83.0-beta.2

2 years ago

1.86.1

2 years ago

1.86.2

2 years ago

1.83.0-beta.0

2 years ago

1.86.3

2 years ago

1.86.4

2 years ago

1.86.5

2 years ago

1.83.3-beta.0

2 years ago

1.83.3-beta.1

2 years ago

1.84.1-beta.1

2 years ago

1.84.1-beta.0

2 years ago

1.80.1-beta.0

2 years ago

1.83.2-beta.0

2 years ago

1.80.0

2 years ago

1.80.1

2 years ago

1.80.1-beta.2

2 years ago

1.80.1-beta.1

2 years ago

1.80.1-beta.3

2 years ago

1.86.0-beta.7

2 years ago

1.86.0-beta.6

2 years ago

1.86.0-beta.3

2 years ago

1.81.0

2 years ago

1.86.0-beta.2

2 years ago

1.86.0-beta.5

2 years ago

1.86.2-beta.0

2 years ago

1.86.0-beta.4

2 years ago

1.86.0-beta.1

2 years ago

1.86.0-beta.0

2 years ago

1.81.0-beta.2

2 years ago

1.81.0-beta.1

2 years ago

1.81.0-beta.0

2 years ago

1.79.0-beta.0

2 years ago

1.78.0-beta4

2 years ago

1.78.0-beta3

2 years ago

1.78.0-beta5

2 years ago

1.78.0

2 years ago

1.78.0-beta2

2 years ago

1.78.0-beta1

2 years ago

1.77.0-beta.1

2 years ago

1.77.0-beta.0

2 years ago

1.74.0

2 years ago

1.75.0

2 years ago

1.75.1

2 years ago

1.75.2

2 years ago

1.77.1

2 years ago

1.77.2

2 years ago

1.76.0

2 years ago

1.77.0

2 years ago

1.73.5

2 years ago

1.73.1

2 years ago

1.73.2

2 years ago

1.73.3

2 years ago

1.73.4

2 years ago

1.73.2-beta.2

2 years ago

1.73.2-beta.3

2 years ago

1.73.2-beta.4

2 years ago

1.73.2-beta.5

2 years ago

1.73.2-beta.0

2 years ago

1.73.2-beta.1

2 years ago

1.74.0-beta.1

2 years ago

1.74.0-beta.0

2 years ago

1.73.1-beta.1

2 years ago

1.73.1-beta.0

2 years ago

1.71.0

2 years ago

1.71.1

2 years ago

1.71.2

2 years ago

1.71.0-beta.20

2 years ago

1.71.0-beta.21

2 years ago

1.71.0-beta.22

2 years ago

1.71.0-beta.23

2 years ago

1.71.0-beta.10

2 years ago

1.71.0-beta.11

2 years ago

1.71.0-beta.12

2 years ago

1.71.0-beta.13

2 years ago

1.71.0-beta.14

2 years ago

1.71.0-beta.15

2 years ago

1.71.0-beta.16

2 years ago

1.71.0-beta.17

2 years ago

1.71.0-beta.18

2 years ago

1.72.0

2 years ago

1.71.0-beta.19

2 years ago

1.72.1

2 years ago

1.72.2-beta.1

2 years ago

1.72.2-beta.2

2 years ago

1.72.2-beta.0

2 years ago

1.73.0

2 years ago

1.71.0-beta.3

2 years ago

1.71.0-beta.2

2 years ago

1.71.0-beta.5

2 years ago

1.71.0-beta.4

2 years ago

1.71.0-beta.7

2 years ago

1.71.0-beta.6

2 years ago

1.71.0-beta.9

2 years ago

1.71.0-beta.8

2 years ago

1.71.0-beta.1

2 years ago

1.71.0-beta.0

2 years ago

1.70.0

2 years ago

1.69.2-beta.0

2 years ago

1.69.2-beta.1

2 years ago

1.69.2-beta.2

2 years ago

1.69.2-beta.3

2 years ago

1.69.2-beta.4

2 years ago

1.69.2

2 years ago

1.70.0-beta.0

2 years ago

1.69.0-beta.1

2 years ago

1.69.0-beta.2

2 years ago

1.69.0-beta.0

2 years ago

1.66.3-beta.0

2 years ago

1.67.0

2 years ago

1.67.1

2 years ago

1.67.2

2 years ago

1.68.0

2 years ago

1.66.1-beta.0

2 years ago

1.69.0

2 years ago

1.69.1

2 years ago

1.67.0-beta.6

2 years ago

1.67.0-beta.5

2 years ago

1.67.0-beta.2

2 years ago

1.67.0-beta.1

2 years ago

1.67.0-beta.4

2 years ago

1.67.0-beta.3

2 years ago

1.67.0-beta.0

2 years ago

1.69.1-beta.10

2 years ago

1.69.1-beta.11

2 years ago

1.67.2-beta.0

2 years ago

1.66.2-beta.0

2 years ago

1.69.1-beta.1

2 years ago

1.68.0-beta.2

2 years ago

1.69.1-beta.0

2 years ago

1.69.1-beta.3

2 years ago

1.69.1-beta.2

2 years ago

1.66.0

2 years ago

1.66.1

2 years ago

1.66.2

2 years ago

1.66.3

2 years ago

1.66.4

2 years ago

1.69.1-beta.5

2 years ago

1.69.1-beta.4

2 years ago

1.69.1-beta.7

2 years ago

1.68.0-beta.0

2 years ago

1.68.0-beta.1

2 years ago

1.69.1-beta.9

2 years ago

1.69.1-beta.8

2 years ago

1.63.0

2 years ago

1.63.1

2 years ago

1.63.2

2 years ago

1.64.1-beta.0

2 years ago

1.65.1-beta.2

2 years ago

1.65.1-beta.1

2 years ago

1.65.1-beta.0

2 years ago

1.64.0

2 years ago

1.64.1

2 years ago

1.65.0-beta.0

2 years ago

1.65.0

2 years ago

1.62.11

2 years ago

1.62.10

2 years ago

1.63.3-beta.0

2 years ago

1.63.2-beta.0

2 years ago

1.63.1-beta.0

2 years ago

1.63.2-beta.1

2 years ago

1.62.9

2 years ago

1.63.0-beta.1

2 years ago

1.62.2

3 years ago

1.62.4

2 years ago

1.62.3

3 years ago

1.62.6

2 years ago

1.62.5

2 years ago

1.62.8

2 years ago

1.62.7

2 years ago

1.61.3

3 years ago

1.61.2

3 years ago

1.61.4

3 years ago

1.62.0

3 years ago

1.62.1

3 years ago

1.61.0-beta.0

3 years ago

1.61.1

3 years ago

1.61.0

3 years ago

1.60.2

3 years ago

1.60.3

3 years ago

1.60.1

3 years ago

1.60.0

3 years ago

1.60.0-beta.3

3 years ago

1.60.0-beta.2

3 years ago

1.60.0-beta.1

3 years ago

1.60.0-beta.0

3 years ago

1.59.7

3 years ago

1.59.7-beta.2

3 years ago

1.59.7-beta.1

3 years ago

1.59.7-beta.0

3 years ago

1.59.7-beta.3

3 years ago

1.59.6

3 years ago

1.59.5

3 years ago

1.59.2

3 years ago

1.59.4

3 years ago

1.59.3

3 years ago

1.59.4-beta.2

3 years ago

1.59.4-beta.0

3 years ago

1.59.4-beta.1

3 years ago

1.59.1

3 years ago

1.59.0

3 years ago

1.57.0

3 years ago

1.58.0

3 years ago

1.56.0

3 years ago

1.55.0-beta.1

3 years ago

1.55.0-beta.0

3 years ago

1.55.0

3 years ago

1.54.0

3 years ago

1.53.0

3 years ago

1.52.0

3 years ago

1.51.2

3 years ago

1.51.0

3 years ago

1.51.1

3 years ago

1.50.0

3 years ago

1.49.2

3 years ago

1.49.1

3 years ago

1.49.0

3 years ago

1.49.1-beta.0

3 years ago

1.49.0-beta.1

3 years ago

1.49.0-beta.0

3 years ago

1.48.0

3 years ago

1.48.2

3 years ago

1.48.1

3 years ago

1.48.0-beta.1

3 years ago

1.48.0-beta.0

3 years ago

1.46.2

3 years ago

1.46.3

3 years ago

1.47.0

3 years ago

1.46.1

3 years ago

1.46.0

3 years ago

1.45.5

3 years ago

1.45.6

3 years ago

1.45.3

3 years ago

1.45.4

3 years ago

1.45.1

3 years ago

1.45.2

3 years ago

1.45.0

3 years ago

1.44.4

3 years ago

1.44.3

3 years ago

1.44.2

3 years ago

1.44.1

3 years ago

1.44.0

3 years ago

1.43.0

3 years ago

1.40.0

3 years ago

1.42.0

3 years ago

1.42.2

3 years ago

1.42.1

3 years ago

1.42.3

3 years ago

1.41.0

3 years ago

1.39.0

3 years ago

1.38.0

3 years ago

1.38.0-logging.0

3 years ago

1.37.0

3 years ago

1.36.3

3 years ago

1.36.1

3 years ago

1.36.2

3 years ago

1.36.0

3 years ago

1.35.3

3 years ago

1.35.2

3 years ago

1.35.1

3 years ago

1.35.0

3 years ago

1.34.0

3 years ago

1.33.0

3 years ago

1.32.1-beta.0

3 years ago

1.32.0

3 years ago

1.31.0

3 years ago

1.30.5

3 years ago

1.30.2

3 years ago

1.30.3

3 years ago

1.30.0

3 years ago

1.30.1

3 years ago

1.30.4

3 years ago

1.29.3

3 years ago

1.29.2

3 years ago

1.29.1

3 years ago

1.29.0

3 years ago

1.28.0

3 years ago

1.25.0

3 years ago

1.26.0

3 years ago

1.27.0

3 years ago

1.24.0

3 years ago

1.23.0

3 years ago

1.22.0

3 years ago

1.21.0

3 years ago

1.20.0

3 years ago

1.19.0

3 years ago

1.18.0

3 years ago

1.17.0

3 years ago

1.16.0

3 years ago

1.15.0

3 years ago

1.14.2

3 years ago

1.14.1

3 years ago

1.14.0

3 years ago

1.13.0

3 years ago

1.12.0

3 years ago

1.11.1

3 years ago

1.11.0

3 years ago

1.10.1

3 years ago

1.10.0

3 years ago

1.9.0

3 years ago

1.8.1

3 years ago

1.8.0

4 years ago

1.7.0

4 years ago

1.6.1

4 years ago

1.5.1

4 years ago

1.6.0

4 years ago

1.5.0

4 years ago

1.5.0-beta.0

4 years ago

1.4.2

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.0

4 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago