{"version":3,"sources":["src/common.browser/WebsocketConnection.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EAEf,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBAAa,mBAAoB,YAAW,WAAW;IAEnD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,4BAA4B,CAA0B;IAC9D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAkB;gBAGpC,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAC1C,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAClC,gBAAgB,EAAE,0BAA0B,EAC5C,SAAS,EAAE,SAAS,EACpB,YAAY,CAAC,EAAE,MAAM;IAgDlB,OAAO,aAMb;IAEM,UAAU,gBAEhB;aAEU,EAAE,EAAI,MAAM;IAIhB,KAAK,wBAEX;IAEM,IAAI,wCAEV;IAEM,IAAI,mDAEV;IAEM,IAAI,mCAEV;aAEU,MAAM,EAAI,WAAW,CAAC,eAAe,CAAC;CAGpD","file":"WebsocketConnection.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\n\nimport {\n    ArgumentNullError,\n    ConnectionEvent,\n    ConnectionMessage,\n    ConnectionOpenResponse,\n    ConnectionState,\n    createNoDashGuid,\n    EventSource,\n    IConnection,\n    IStringDictionary,\n    IWebsocketMessageFormatter,\n    Promise,\n} from \"../common/Exports\";\nimport { ProxyInfo } from \"./ProxyInfo\";\nimport { WebsocketMessageAdapter } from \"./WebsocketMessageAdapter\";\n\nexport class WebsocketConnection implements IConnection {\n\n    private privUri: string;\n    private privMessageFormatter: IWebsocketMessageFormatter;\n    private privConnectionMessageAdapter: WebsocketMessageAdapter;\n    private privId: string;\n    private privIsDisposed: boolean = false;\n\n    public constructor(\n        uri: string,\n        queryParameters: IStringDictionary<string>,\n        headers: IStringDictionary<string>,\n        messageFormatter: IWebsocketMessageFormatter,\n        proxyInfo: ProxyInfo,\n        connectionId?: string) {\n\n        if (!uri) {\n            throw new ArgumentNullError(\"uri\");\n        }\n\n        if (!messageFormatter) {\n            throw new ArgumentNullError(\"messageFormatter\");\n        }\n\n        this.privMessageFormatter = messageFormatter;\n\n        let queryParams = \"\";\n        let i = 0;\n\n        if (queryParameters) {\n            for (const paramName in queryParameters) {\n                if (paramName) {\n                    queryParams += ((i === 0) && (uri.indexOf(\"?\") === -1)) ? \"?\" : \"&\";\n                    const val = encodeURIComponent(queryParameters[paramName]);\n                    queryParams += `${paramName}=${val}`;\n                    i++;\n                }\n            }\n        }\n\n        if (headers) {\n            for (const headerName in headers) {\n                if (headerName) {\n                    queryParams += i === 0 ? \"?\" : \"&\";\n                    const val = encodeURIComponent(headers[headerName]);\n                    queryParams += `${headerName}=${val}`;\n                    i++;\n                }\n            }\n        }\n\n        this.privUri = uri + queryParams;\n        this.privId = connectionId ? connectionId : createNoDashGuid();\n\n        this.privConnectionMessageAdapter = new WebsocketMessageAdapter(\n            this.privUri,\n            this.id,\n            this.privMessageFormatter,\n            proxyInfo,\n            headers);\n    }\n\n    public dispose = (): void => {\n        this.privIsDisposed = true;\n\n        if (this.privConnectionMessageAdapter) {\n            this.privConnectionMessageAdapter.close();\n        }\n    }\n\n    public isDisposed = (): boolean => {\n        return this.privIsDisposed;\n    }\n\n    public get id(): string {\n        return this.privId;\n    }\n\n    public state = (): ConnectionState => {\n        return this.privConnectionMessageAdapter.state;\n    }\n\n    public open = (): Promise<ConnectionOpenResponse> => {\n        return this.privConnectionMessageAdapter.open();\n    }\n\n    public send = (message: ConnectionMessage): Promise<boolean> => {\n        return this.privConnectionMessageAdapter.send(message);\n    }\n\n    public read = (): Promise<ConnectionMessage> => {\n        return this.privConnectionMessageAdapter.read();\n    }\n\n    public get events(): EventSource<ConnectionEvent> {\n        return this.privConnectionMessageAdapter.events;\n    }\n}\n"]}