{"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,EAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,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,iBAAiB,GAAE,OAAe,EAClC,YAAY,CAAC,EAAE,MAAM;IAyDZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,UAAU,IAAI,OAAO;IAI5B,IAAW,EAAE,IAAI,MAAM,CAEtB;IAED,IAAW,GAAG,IAAI,MAAM,CAEvB;IAEM,KAAK,IAAI,eAAe;IAIxB,IAAI,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAIvC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAIzC,IAAW,MAAM,IAAI,WAAW,CAAC,eAAe,CAAC,CAEhD;CACJ","file":"WebsocketConnection.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license.\r\n\r\nimport {\r\n    ArgumentNullError,\r\n    ConnectionEvent,\r\n    ConnectionMessage,\r\n    ConnectionOpenResponse,\r\n    ConnectionState,\r\n    createNoDashGuid,\r\n    EventSource,\r\n    IConnection,\r\n    IStringDictionary,\r\n    IWebsocketMessageFormatter,\r\n} from \"../common/Exports.js\";\r\nimport { ProxyInfo } from \"./ProxyInfo.js\";\r\nimport { WebsocketMessageAdapter } from \"./WebsocketMessageAdapter.js\";\r\n\r\nexport class WebsocketConnection implements IConnection {\r\n\r\n    private privUri: string;\r\n    private privMessageFormatter: IWebsocketMessageFormatter;\r\n    private privConnectionMessageAdapter: WebsocketMessageAdapter;\r\n    private privId: string;\r\n    private privIsDisposed: boolean = false;\r\n\r\n    public constructor(\r\n        uri: string,\r\n        queryParameters: IStringDictionary<string>,\r\n        headers: IStringDictionary<string>,\r\n        messageFormatter: IWebsocketMessageFormatter,\r\n        proxyInfo: ProxyInfo,\r\n        enableCompression: boolean = false,\r\n        connectionId?: string) {\r\n\r\n        if (!uri) {\r\n            throw new ArgumentNullError(\"uri\");\r\n        }\r\n\r\n        if (!messageFormatter) {\r\n            throw new ArgumentNullError(\"messageFormatter\");\r\n        }\r\n\r\n        this.privMessageFormatter = messageFormatter;\r\n\r\n        let queryParams = \"\";\r\n        let i = 0;\r\n\r\n        if (queryParameters) {\r\n            for (const paramName in queryParameters) {\r\n                if (paramName) {\r\n                    queryParams += ((i === 0) && (uri.indexOf(\"?\") === -1)) ? \"?\" : \"&\";\r\n\r\n                    const key = encodeURIComponent(paramName);\r\n                    queryParams += key;\r\n\r\n                    let val = queryParameters[paramName];\r\n                    if (val) {\r\n                        val = encodeURIComponent(val);\r\n                        queryParams += `=${val}`;\r\n                    }\r\n\r\n                    i++;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (headers) {\r\n            for (const headerName in headers) {\r\n                if (headerName) {\r\n                    queryParams += ((i === 0) && (uri.indexOf(\"?\") === -1)) ? \"?\" : \"&\";\r\n                    const val = encodeURIComponent(headers[headerName]);\r\n                    queryParams += `${headerName}=${val}`;\r\n                    i++;\r\n                }\r\n            }\r\n        }\r\n\r\n        this.privUri = uri + queryParams;\r\n        this.privId = connectionId ? connectionId : createNoDashGuid();\r\n\r\n        this.privConnectionMessageAdapter = new WebsocketMessageAdapter(\r\n            this.privUri,\r\n            this.id,\r\n            this.privMessageFormatter,\r\n            proxyInfo,\r\n            headers,\r\n            enableCompression);\r\n    }\r\n\r\n    public async dispose(): Promise<void> {\r\n        this.privIsDisposed = true;\r\n\r\n        if (this.privConnectionMessageAdapter) {\r\n            await this.privConnectionMessageAdapter.close();\r\n        }\r\n    }\r\n\r\n    public isDisposed(): boolean {\r\n        return this.privIsDisposed;\r\n    }\r\n\r\n    public get id(): string {\r\n        return this.privId;\r\n    }\r\n\r\n    public get uri(): string {\r\n        return this.privUri;\r\n    }\r\n\r\n    public state(): ConnectionState {\r\n        return this.privConnectionMessageAdapter.state;\r\n    }\r\n\r\n    public open(): Promise<ConnectionOpenResponse> {\r\n        return this.privConnectionMessageAdapter.open();\r\n    }\r\n\r\n    public send(message: ConnectionMessage): Promise<void> {\r\n        return this.privConnectionMessageAdapter.send(message);\r\n    }\r\n\r\n    public read(): Promise<ConnectionMessage> {\r\n        return this.privConnectionMessageAdapter.read();\r\n    }\r\n\r\n    public get events(): EventSource<ConnectionEvent> {\r\n        return this.privConnectionMessageAdapter.events;\r\n    }\r\n}\r\n"]}