1- import { Kuzzle , WebSocket } from 'kuzzle-sdk' ;
1+ import { Http , Kuzzle , KuzzleAbstractProtocol , WebSocket } from 'kuzzle-sdk' ;
22import _Vue from 'vue' ;
33
44const LS_KEY = 'kuzzle-backend'
55const GLOBAL_NAME = 'kuzzleBackend'
66
7- interface Backend {
7+ export enum KuzzleProtocol {
8+ HTTP = 'http' ,
9+ WEBSOCKET = 'websocket'
10+ }
11+ export interface Backend {
812 host : string ;
13+ protocol : KuzzleProtocol
914 options : {
1015 port : number ;
11- sslConnection : boolean
16+ sslConnection : boolean ,
1217 }
1318}
1419
15- interface Backends {
20+ export interface Backends {
1621 [ name : string ] : Backend
1722}
1823
1924export function getBackendFromConf ( backendsConfig : Backends ) {
2025 const backends : Backends = {
2126 default : {
2227 host : process . env . VUE_APP_BACKEND_HOST || 'localhost' ,
28+ protocol : ( process . env . VUE_APP_BACKEND_PROTO as KuzzleProtocol ) || KuzzleProtocol . WEBSOCKET ,
2329 options : {
2430 port : parseInt ( process . env . VUE_APP_BACKEND_PORT || '7512' ) ,
2531 sslConnection : process . env . VUE_APP_BACKEND_SSL === 'true' || false
@@ -67,6 +73,12 @@ export function getBackendFromWindow() {
6773 return backend ;
6874}
6975
76+ /**
77+ * Instantiates the Kuzzle SDK by resolving the backend from the given config.
78+ *
79+ * @param backendsConfig
80+ * @param sdkOptions
81+ */
7082export const instantiateKuzzleSDK = ( backendsConfig : Backends , sdkOptions : any ) : Kuzzle => {
7183 const backend :Backend | null = getBackendFromLocalStorage ( ) || getBackendFromWindow ( ) || getBackendFromConf ( backendsConfig )
7284
@@ -78,9 +90,20 @@ export const instantiateKuzzleSDK = (backendsConfig: Backends, sdkOptions: any):
7890 throw new Error ( `Backend is malformed (missing host)` ) ;
7991 }
8092
81- return new Kuzzle ( new WebSocket ( backend . host , backend . options || null ) , sdkOptions ) ;
93+ return new Kuzzle ( protocolFactory ( backend ) , sdkOptions ) ;
8294} ;
8395
96+ const protocolFactory = ( backend : Backend ) : KuzzleAbstractProtocol => {
97+ switch ( backend . protocol ) {
98+ case KuzzleProtocol . HTTP :
99+ return new Http ( backend . host , backend . options )
100+
101+ case KuzzleProtocol . WEBSOCKET :
102+ default :
103+ return new WebSocket ( backend . host , backend . options )
104+ }
105+ }
106+
84107/**
85108 * The VueKuzzle plugin. Makes the Kuzzle SDK available in Vue components as
86109 * `this.$kuzzle`.
0 commit comments