@azure/web-pubsub 1.0.0-beta.3 → 1.0.1-alpha.20220103.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/README.md +107 -33
- package/dist/index.js +1048 -233
- package/dist/index.js.map +1 -1
- package/dist-esm/samples-dev/directMessage.js +1 -1
- package/dist-esm/samples-dev/directMessage.js.map +1 -1
- package/dist-esm/src/generated/generatedClient.js +3 -3
- package/dist-esm/src/generated/generatedClient.js.map +1 -1
- package/dist-esm/src/generated/generatedClientContext.js +8 -8
- package/dist-esm/src/generated/generatedClientContext.js.map +1 -1
- package/dist-esm/src/generated/models/index.js +6 -1
- package/dist-esm/src/generated/models/index.js.map +1 -1
- package/dist-esm/src/generated/models/mappers.js +368 -0
- package/dist-esm/src/generated/models/mappers.js.map +1 -0
- package/dist-esm/src/generated/models/parameters.js +105 -23
- package/dist-esm/src/generated/models/parameters.js.map +1 -1
- package/dist-esm/src/generated/operations/healthApi.js +4 -3
- package/dist-esm/src/generated/operations/healthApi.js.map +1 -1
- package/dist-esm/src/generated/operations/webPubSub.js +315 -59
- package/dist-esm/src/generated/operations/webPubSub.js.map +1 -1
- package/dist-esm/src/generated/operationsInterfaces/webPubSub.js.map +1 -1
- package/dist-esm/src/groupClient.js +32 -21
- package/dist-esm/src/groupClient.js.map +1 -1
- package/dist-esm/src/hubClient.js +162 -107
- package/dist-esm/src/hubClient.js.map +1 -1
- package/dist-esm/src/index.js +1 -1
- package/dist-esm/src/index.js.map +1 -1
- package/dist-esm/src/logger.js +1 -1
- package/dist-esm/src/logger.js.map +1 -1
- package/dist-esm/src/parseConnectionString.js +3 -1
- package/dist-esm/src/parseConnectionString.js.map +1 -1
- package/dist-esm/src/reverseProxyPolicy.js +21 -0
- package/dist-esm/src/reverseProxyPolicy.js.map +1 -0
- package/dist-esm/src/tracing.js +1 -1
- package/dist-esm/src/tracing.js.map +1 -1
- package/dist-esm/src/utils.js +2 -0
- package/dist-esm/src/utils.js.map +1 -1
- package/dist-esm/src/webPubSubCredentialPolicy.js +2 -2
- package/dist-esm/src/webPubSubCredentialPolicy.js.map +1 -1
- package/dist-esm/test/conn.spec.js +2 -2
- package/dist-esm/test/conn.spec.js.map +1 -1
- package/dist-esm/test/groups.spec.js +14 -6
- package/dist-esm/test/groups.spec.js.map +1 -1
- package/dist-esm/test/hubs.spec.js +53 -10
- package/dist-esm/test/hubs.spec.js.map +1 -1
- package/dist-esm/test/integration.spec.js +128 -0
- package/dist-esm/test/integration.spec.js.map +1 -0
- package/dist-esm/test/testEnv.js +6 -2
- package/dist-esm/test/testEnv.js.map +1 -1
- package/package.json +32 -32
- package/types/web-pubsub.d.ts +165 -109
- package/dist-esm/src/normalizeOptions.js +0 -8
- package/dist-esm/src/normalizeOptions.js.map +0 -1
| @@ -3,28 +3,30 @@ | |
| 3 3 | 
             
            import { RestError } from "@azure/core-rest-pipeline";
         | 
| 4 4 | 
             
            import { GeneratedClient } from "./generated/generatedClient";
         | 
| 5 5 | 
             
            import { WebPubSubGroupImpl } from "./groupClient";
         | 
| 6 | 
            -
            import  | 
| 6 | 
            +
            import { isTokenCredential } from "@azure/core-auth";
         | 
| 7 7 | 
             
            import { webPubSubKeyCredentialPolicy } from "./webPubSubCredentialPolicy";
         | 
| 8 8 | 
             
            import { createSpan } from "./tracing";
         | 
| 9 9 | 
             
            import { logger } from "./logger";
         | 
| 10 10 | 
             
            import { parseConnectionString } from "./parseConnectionString";
         | 
| 11 11 | 
             
            import jwt from "jsonwebtoken";
         | 
| 12 12 | 
             
            import { getPayloadForMessage } from "./utils";
         | 
| 13 | 
            +
            import { webPubSubReverseProxyPolicy } from "./reverseProxyPolicy";
         | 
| 13 14 | 
             
            /**
         | 
| 14 15 | 
             
             * Client for connecting to a Web PubSub hub
         | 
| 15 16 | 
             
             */
         | 
| 16 17 | 
             
            export class WebPubSubServiceClient {
         | 
| 17 18 | 
             
                constructor(endpointOrConnectionString, credsOrHubName, hubNameOrOpts, opts) {
         | 
| 19 | 
            +
                    var _a, _b;
         | 
| 18 20 | 
             
                    /**
         | 
| 19 21 | 
             
                     * The Web PubSub API version being used by this client
         | 
| 20 22 | 
             
                     */
         | 
| 21 | 
            -
                    this.apiVersion = " | 
| 23 | 
            +
                    this.apiVersion = "2021-10-01";
         | 
| 22 24 | 
             
                    // unpack constructor arguments
         | 
| 23 | 
            -
                    if (typeof credsOrHubName === "object" | 
| 25 | 
            +
                    if (typeof credsOrHubName === "object") {
         | 
| 24 26 | 
             
                        this.endpoint = endpointOrConnectionString;
         | 
| 25 | 
            -
                        this.credential = credsOrHubName;
         | 
| 26 27 | 
             
                        this.hubName = hubNameOrOpts;
         | 
| 27 28 | 
             
                        this.clientOptions = opts;
         | 
| 29 | 
            +
                        this.credential = credsOrHubName;
         | 
| 28 30 | 
             
                    }
         | 
| 29 31 | 
             
                    else {
         | 
| 30 32 | 
             
                        const parsedCs = parseConnectionString(endpointOrConnectionString);
         | 
| @@ -33,52 +35,34 @@ export class WebPubSubServiceClient { | |
| 33 35 | 
             
                        this.hubName = credsOrHubName;
         | 
| 34 36 | 
             
                        this.clientOptions = hubNameOrOpts;
         | 
| 35 37 | 
             
                    }
         | 
| 36 | 
            -
                    const internalPipelineOptions = Object.assign(Object.assign({}, this.clientOptions), {
         | 
| 38 | 
            +
                    const internalPipelineOptions = Object.assign(Object.assign(Object.assign({}, this.clientOptions), {
         | 
| 39 | 
            +
                        apiVersion: this.apiVersion,
         | 
| 37 40 | 
             
                        loggingOptions: {
         | 
| 38 | 
            -
                            logger: logger.info
         | 
| 41 | 
            +
                            logger: logger.info,
         | 
| 42 | 
            +
                        },
         | 
| 43 | 
            +
                    }), (isTokenCredential(this.credential)
         | 
| 44 | 
            +
                        ? {
         | 
| 45 | 
            +
                            credential: this.credential,
         | 
| 46 | 
            +
                            credentialScopes: ["https://webpubsub.azure.com/.default"],
         | 
| 39 47 | 
             
                        }
         | 
| 40 | 
            -
             | 
| 48 | 
            +
                        : {}));
         | 
| 41 49 | 
             
                    this.client = new GeneratedClient(this.endpoint, internalPipelineOptions);
         | 
| 42 | 
            -
                     | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
                async getAuthenticationToken(options) {
         | 
| 49 | 
            -
                    const endpoint = this.endpoint.endsWith("/") ? this.endpoint : this.endpoint + "/";
         | 
| 50 | 
            -
                    const key = this.credential.key;
         | 
| 51 | 
            -
                    const hub = this.hubName;
         | 
| 52 | 
            -
                    const clientEndpoint = endpoint.replace(/(http)(s?:\/\/)/gi, "ws$2");
         | 
| 53 | 
            -
                    const clientUrl = `${clientEndpoint}client/hubs/${hub}`;
         | 
| 54 | 
            -
                    const audience = `${endpoint}client/hubs/${hub}`;
         | 
| 55 | 
            -
                    const payload = { role: options === null || options === void 0 ? void 0 : options.roles };
         | 
| 56 | 
            -
                    const signOptions = {
         | 
| 57 | 
            -
                        audience: audience,
         | 
| 58 | 
            -
                        expiresIn: (options === null || options === void 0 ? void 0 : options.ttl) === undefined ? "1h" : `${options.ttl}m`,
         | 
| 59 | 
            -
                        algorithm: "HS256"
         | 
| 60 | 
            -
                    };
         | 
| 61 | 
            -
                    if (options === null || options === void 0 ? void 0 : options.userId) {
         | 
| 62 | 
            -
                        signOptions.subject = options === null || options === void 0 ? void 0 : options.userId;
         | 
| 63 | 
            -
                    }
         | 
| 64 | 
            -
                    const token = jwt.sign(payload, key, signOptions);
         | 
| 65 | 
            -
                    const url = `${clientUrl}?access_token=${token}`;
         | 
| 66 | 
            -
                    return {
         | 
| 67 | 
            -
                        baseUrl: clientUrl,
         | 
| 68 | 
            -
                        token: jwt.sign(payload, key, signOptions),
         | 
| 69 | 
            -
                        url: url
         | 
| 70 | 
            -
                    };
         | 
| 50 | 
            +
                    if (!isTokenCredential(this.credential)) {
         | 
| 51 | 
            +
                        this.client.pipeline.addPolicy(webPubSubKeyCredentialPolicy(this.credential));
         | 
| 52 | 
            +
                    }
         | 
| 53 | 
            +
                    if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.reverseProxyEndpoint) {
         | 
| 54 | 
            +
                        this.client.pipeline.addPolicy(webPubSubReverseProxyPolicy((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.reverseProxyEndpoint));
         | 
| 55 | 
            +
                    }
         | 
| 71 56 | 
             
                }
         | 
| 72 57 | 
             
                /**
         | 
| 73 58 | 
             
                 * Get a client for a group
         | 
| 74 | 
            -
                 * @param groupName The name of the group to connect to.
         | 
| 59 | 
            +
                 * @param groupName - The name of the group to connect to.
         | 
| 75 60 | 
             
                 */
         | 
| 76 61 | 
             
                group(groupName) {
         | 
| 77 62 | 
             
                    return new WebPubSubGroupImpl(this.client, this.hubName, groupName);
         | 
| 78 63 | 
             
                }
         | 
| 79 64 | 
             
                async sendToAll(message, options = {}) {
         | 
| 80 | 
            -
                    const  | 
| 81 | 
            -
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-sendToAll", normalizedOptions);
         | 
| 65 | 
            +
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-sendToAll", options);
         | 
| 82 66 | 
             
                    const { contentType, payload } = getPayloadForMessage(message, updatedOptions);
         | 
| 83 67 | 
             
                    try {
         | 
| 84 68 | 
             
                        return await this.client.webPubSub.sendToAll(this.hubName, contentType, payload, updatedOptions);
         | 
| @@ -110,32 +94,32 @@ export class WebPubSubServiceClient { | |
| 110 94 | 
             
                /**
         | 
| 111 95 | 
             
                 * Check if a specific connection is connected to this hub
         | 
| 112 96 | 
             
                 *
         | 
| 113 | 
            -
                 * @param connectionId Connection id to check
         | 
| 114 | 
            -
                 * @param options Additional options
         | 
| 97 | 
            +
                 * @param connectionId - Connection id to check
         | 
| 98 | 
            +
                 * @param options - Additional options
         | 
| 115 99 | 
             
                 */
         | 
| 116 | 
            -
                async  | 
| 100 | 
            +
                async connectionExists(connectionId, options = {}) {
         | 
| 117 101 | 
             
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-hasConnection", options);
         | 
| 118 | 
            -
                     | 
| 119 | 
            -
             | 
| 120 | 
            -
                         | 
| 121 | 
            -
             | 
| 122 | 
            -
                             | 
| 123 | 
            -
                                updatedOptions.onResponse(rawResponse, flatResponse);
         | 
| 124 | 
            -
                            }
         | 
| 102 | 
            +
                    let response;
         | 
| 103 | 
            +
                    function onResponse(rawResponse, flatResponse) {
         | 
| 104 | 
            +
                        response = rawResponse;
         | 
| 105 | 
            +
                        if (updatedOptions.onResponse) {
         | 
| 106 | 
            +
                            updatedOptions.onResponse(rawResponse, flatResponse);
         | 
| 125 107 | 
             
                        }
         | 
| 108 | 
            +
                    }
         | 
| 109 | 
            +
                    try {
         | 
| 126 110 | 
             
                        await this.client.webPubSub.connectionExists(this.hubName, connectionId, Object.assign(Object.assign({}, updatedOptions), { onResponse }));
         | 
| 127 | 
            -
                        if ( | 
| 111 | 
            +
                        if (response.status === 200) {
         | 
| 128 112 | 
             
                            return true;
         | 
| 129 113 | 
             
                        }
         | 
| 130 | 
            -
                        else if ( | 
| 114 | 
            +
                        else if (response.status === 404) {
         | 
| 131 115 | 
             
                            return false;
         | 
| 132 116 | 
             
                        }
         | 
| 133 117 | 
             
                        else {
         | 
| 134 118 | 
             
                            // this is sad - wish this was handled by autorest.
         | 
| 135 | 
            -
                            throw new RestError(response | 
| 119 | 
            +
                            throw new RestError(response.bodyAsText, {
         | 
| 136 120 | 
             
                                statusCode: response === null || response === void 0 ? void 0 : response.status,
         | 
| 137 121 | 
             
                                request: response === null || response === void 0 ? void 0 : response.request,
         | 
| 138 | 
            -
                                response: response
         | 
| 122 | 
            +
                                response: response,
         | 
| 139 123 | 
             
                            });
         | 
| 140 124 | 
             
                        }
         | 
| 141 125 | 
             
                    }
         | 
| @@ -146,13 +130,42 @@ export class WebPubSubServiceClient { | |
| 146 130 | 
             
                /**
         | 
| 147 131 | 
             
                 * Close a specific connection to this hub
         | 
| 148 132 | 
             
                 *
         | 
| 149 | 
            -
                 * @param connectionId Connection id to close
         | 
| 150 | 
            -
                 * @param options Additional options
         | 
| 133 | 
            +
                 * @param connectionId - Connection id to close
         | 
| 134 | 
            +
                 * @param options - Additional options
         | 
| 151 135 | 
             
                 */
         | 
| 152 136 | 
             
                async closeConnection(connectionId, options = {}) {
         | 
| 153 | 
            -
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub- | 
| 137 | 
            +
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-closeConnection", options);
         | 
| 138 | 
            +
                    try {
         | 
| 139 | 
            +
                        return await this.client.webPubSub.closeConnection(this.hubName, connectionId, updatedOptions);
         | 
| 140 | 
            +
                    }
         | 
| 141 | 
            +
                    finally {
         | 
| 142 | 
            +
                        span.end();
         | 
| 143 | 
            +
                    }
         | 
| 144 | 
            +
                }
         | 
| 145 | 
            +
                /**
         | 
| 146 | 
            +
                 * Close all connections to this hub
         | 
| 147 | 
            +
                 *
         | 
| 148 | 
            +
                 * @param options - Additional options
         | 
| 149 | 
            +
                 */
         | 
| 150 | 
            +
                async closeAllConnections(options = {}) {
         | 
| 151 | 
            +
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-closeAllConnections", options);
         | 
| 152 | 
            +
                    try {
         | 
| 153 | 
            +
                        return await this.client.webPubSub.closeAllConnections(this.hubName, updatedOptions);
         | 
| 154 | 
            +
                    }
         | 
| 155 | 
            +
                    finally {
         | 
| 156 | 
            +
                        span.end();
         | 
| 157 | 
            +
                    }
         | 
| 158 | 
            +
                }
         | 
| 159 | 
            +
                /**
         | 
| 160 | 
            +
                 * Close all connections with the given user id
         | 
| 161 | 
            +
                 *
         | 
| 162 | 
            +
                 * @param user - User id to close
         | 
| 163 | 
            +
                 * @param options - Additional options
         | 
| 164 | 
            +
                 */
         | 
| 165 | 
            +
                async closeUserConnections(userId, options = {}) {
         | 
| 166 | 
            +
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-closeUserConnections", options);
         | 
| 154 167 | 
             
                    try {
         | 
| 155 | 
            -
                        return await this.client.webPubSub. | 
| 168 | 
            +
                        return await this.client.webPubSub.closeUserConnections(this.hubName, userId, updatedOptions);
         | 
| 156 169 | 
             
                    }
         | 
| 157 170 | 
             
                    finally {
         | 
| 158 171 | 
             
                        span.end();
         | 
| @@ -160,8 +173,8 @@ export class WebPubSubServiceClient { | |
| 160 173 | 
             
                }
         | 
| 161 174 | 
             
                /**
         | 
| 162 175 | 
             
                 * Remove a specific user from all groups they are joined to
         | 
| 163 | 
            -
                 * @param userId The user id to remove from all groups
         | 
| 164 | 
            -
                 * @param options Additional options
         | 
| 176 | 
            +
                 * @param userId - The user id to remove from all groups
         | 
| 177 | 
            +
                 * @param options - Additional options
         | 
| 165 178 | 
             
                 */
         | 
| 166 179 | 
             
                async removeUserFromAllGroups(userId, options = {}) {
         | 
| 167 180 | 
             
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-removeUserFromAllGroups", options);
         | 
| @@ -175,31 +188,31 @@ export class WebPubSubServiceClient { | |
| 175 188 | 
             
                /**
         | 
| 176 189 | 
             
                 * Check if a particular group exists (i.e. has active connections).
         | 
| 177 190 | 
             
                 *
         | 
| 178 | 
            -
                 * @param groupName The group name to check for
         | 
| 179 | 
            -
                 * @param options Additional options
         | 
| 191 | 
            +
                 * @param groupName - The group name to check for
         | 
| 192 | 
            +
                 * @param options - Additional options
         | 
| 180 193 | 
             
                 */
         | 
| 181 | 
            -
                async  | 
| 194 | 
            +
                async groupExists(groupName, options = {}) {
         | 
| 182 195 | 
             
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-hasGroup", options);
         | 
| 183 | 
            -
                     | 
| 184 | 
            -
             | 
| 185 | 
            -
                         | 
| 186 | 
            -
             | 
| 187 | 
            -
                             | 
| 188 | 
            -
                                updatedOptions.onResponse(rawResponse, flatResponse);
         | 
| 189 | 
            -
                            }
         | 
| 196 | 
            +
                    let response;
         | 
| 197 | 
            +
                    function onResponse(rawResponse, flatResponse) {
         | 
| 198 | 
            +
                        response = rawResponse;
         | 
| 199 | 
            +
                        if (updatedOptions.onResponse) {
         | 
| 200 | 
            +
                            updatedOptions.onResponse(rawResponse, flatResponse);
         | 
| 190 201 | 
             
                        }
         | 
| 202 | 
            +
                    }
         | 
| 203 | 
            +
                    try {
         | 
| 191 204 | 
             
                        await this.client.webPubSub.groupExists(this.hubName, groupName, Object.assign(Object.assign({}, updatedOptions), { onResponse }));
         | 
| 192 | 
            -
                        if ( | 
| 205 | 
            +
                        if (response.status === 200) {
         | 
| 193 206 | 
             
                            return true;
         | 
| 194 207 | 
             
                        }
         | 
| 195 | 
            -
                        else if ( | 
| 208 | 
            +
                        else if (response.status === 404) {
         | 
| 196 209 | 
             
                            return false;
         | 
| 197 210 | 
             
                        }
         | 
| 198 211 | 
             
                        else {
         | 
| 199 | 
            -
                            throw new RestError(response | 
| 212 | 
            +
                            throw new RestError(response.bodyAsText, {
         | 
| 200 213 | 
             
                                statusCode: response === null || response === void 0 ? void 0 : response.status,
         | 
| 201 214 | 
             
                                request: response === null || response === void 0 ? void 0 : response.request,
         | 
| 202 | 
            -
                                response: response
         | 
| 215 | 
            +
                                response: response,
         | 
| 203 216 | 
             
                            });
         | 
| 204 217 | 
             
                        }
         | 
| 205 218 | 
             
                    }
         | 
| @@ -210,32 +223,32 @@ export class WebPubSubServiceClient { | |
| 210 223 | 
             
                /**
         | 
| 211 224 | 
             
                 * Check if a particular user is connected to this hub.
         | 
| 212 225 | 
             
                 *
         | 
| 213 | 
            -
                 * @param username The user name to check for
         | 
| 214 | 
            -
                 * @param options Additional options
         | 
| 226 | 
            +
                 * @param username - The user name to check for
         | 
| 227 | 
            +
                 * @param options - Additional options
         | 
| 215 228 | 
             
                 */
         | 
| 216 | 
            -
                async  | 
| 229 | 
            +
                async userExists(username, options = {}) {
         | 
| 217 230 | 
             
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-hasUser", options);
         | 
| 218 | 
            -
                     | 
| 219 | 
            -
             | 
| 220 | 
            -
                         | 
| 221 | 
            -
             | 
| 222 | 
            -
                             | 
| 223 | 
            -
                                updatedOptions.onResponse(rawResponse, flatResponse);
         | 
| 224 | 
            -
                            }
         | 
| 231 | 
            +
                    let response;
         | 
| 232 | 
            +
                    function onResponse(rawResponse, flatResponse) {
         | 
| 233 | 
            +
                        response = rawResponse;
         | 
| 234 | 
            +
                        if (updatedOptions.onResponse) {
         | 
| 235 | 
            +
                            updatedOptions.onResponse(rawResponse, flatResponse);
         | 
| 225 236 | 
             
                        }
         | 
| 237 | 
            +
                    }
         | 
| 238 | 
            +
                    try {
         | 
| 226 239 | 
             
                        await this.client.webPubSub.userExists(this.hubName, username, Object.assign(Object.assign({}, updatedOptions), { onResponse }));
         | 
| 227 | 
            -
                        if ( | 
| 240 | 
            +
                        if (response.status === 200) {
         | 
| 228 241 | 
             
                            return true;
         | 
| 229 242 | 
             
                        }
         | 
| 230 | 
            -
                        else if ( | 
| 243 | 
            +
                        else if (response.status === 404) {
         | 
| 231 244 | 
             
                            return false;
         | 
| 232 245 | 
             
                        }
         | 
| 233 246 | 
             
                        else {
         | 
| 234 247 | 
             
                            // this is sad - wish this was handled by autorest.
         | 
| 235 | 
            -
                            throw new RestError(response | 
| 248 | 
            +
                            throw new RestError(response.bodyAsText, {
         | 
| 236 249 | 
             
                                statusCode: response === null || response === void 0 ? void 0 : response.status,
         | 
| 237 250 | 
             
                                request: response === null || response === void 0 ? void 0 : response.request,
         | 
| 238 | 
            -
                                response: response
         | 
| 251 | 
            +
                                response: response,
         | 
| 239 252 | 
             
                            });
         | 
| 240 253 | 
             
                        }
         | 
| 241 254 | 
             
                    }
         | 
| @@ -246,9 +259,9 @@ export class WebPubSubServiceClient { | |
| 246 259 | 
             
                /**
         | 
| 247 260 | 
             
                 * Grant permissions to a connection
         | 
| 248 261 | 
             
                 *
         | 
| 249 | 
            -
                 * @param connectionId The connection id to grant permissions to
         | 
| 250 | 
            -
                 * @param Permission The permission to grant
         | 
| 251 | 
            -
                 * @param options Additional options
         | 
| 262 | 
            +
                 * @param connectionId - The connection id to grant permissions to
         | 
| 263 | 
            +
                 * @param Permission - The permission to grant
         | 
| 264 | 
            +
                 * @param options - Additional options
         | 
| 252 265 | 
             
                 */
         | 
| 253 266 | 
             
                async grantPermission(connectionId, permission, options = {}) {
         | 
| 254 267 | 
             
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-grantPermission", options);
         | 
| @@ -262,9 +275,9 @@ export class WebPubSubServiceClient { | |
| 262 275 | 
             
                /**
         | 
| 263 276 | 
             
                 * Revoke permissions from a connection
         | 
| 264 277 | 
             
                 *
         | 
| 265 | 
            -
                 * @param connectionId The connection id to revoke permissions from
         | 
| 266 | 
            -
                 * @param Permission The permission to revoke
         | 
| 267 | 
            -
                 * @param options Additional options
         | 
| 278 | 
            +
                 * @param connectionId - The connection id to revoke permissions from
         | 
| 279 | 
            +
                 * @param Permission - The permission to revoke
         | 
| 280 | 
            +
                 * @param options - Additional options
         | 
| 268 281 | 
             
                 */
         | 
| 269 282 | 
             
                async revokePermission(connectionId, permission, options = {}) {
         | 
| 270 283 | 
             
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-revokePermission", options);
         | 
| @@ -278,33 +291,33 @@ export class WebPubSubServiceClient { | |
| 278 291 | 
             
                /**
         | 
| 279 292 | 
             
                 * Check if the connection has the specified permission
         | 
| 280 293 | 
             
                 *
         | 
| 281 | 
            -
                 * @param connectionId The connection id to check permission
         | 
| 282 | 
            -
                 * @param Permission The permission to check
         | 
| 283 | 
            -
                 * @param options Additional options
         | 
| 294 | 
            +
                 * @param connectionId - The connection id to check permission
         | 
| 295 | 
            +
                 * @param Permission - The permission to check
         | 
| 296 | 
            +
                 * @param options - Additional options
         | 
| 284 297 | 
             
                 */
         | 
| 285 298 | 
             
                async hasPermission(connectionId, permission, options = {}) {
         | 
| 286 299 | 
             
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-hasPermission", options);
         | 
| 287 | 
            -
                     | 
| 288 | 
            -
             | 
| 289 | 
            -
                         | 
| 290 | 
            -
             | 
| 291 | 
            -
                             | 
| 292 | 
            -
                                updatedOptions.onResponse(rawResponse, flatResponse);
         | 
| 293 | 
            -
                            }
         | 
| 300 | 
            +
                    let response;
         | 
| 301 | 
            +
                    function onResponse(rawResponse, flatResponse) {
         | 
| 302 | 
            +
                        response = rawResponse;
         | 
| 303 | 
            +
                        if (updatedOptions.onResponse) {
         | 
| 304 | 
            +
                            updatedOptions.onResponse(rawResponse, flatResponse);
         | 
| 294 305 | 
             
                        }
         | 
| 306 | 
            +
                    }
         | 
| 307 | 
            +
                    try {
         | 
| 295 308 | 
             
                        await this.client.webPubSub.checkPermission(this.hubName, permission, connectionId, Object.assign(Object.assign({}, updatedOptions), { onResponse }));
         | 
| 296 | 
            -
                        if ( | 
| 309 | 
            +
                        if (response.status === 200) {
         | 
| 297 310 | 
             
                            return true;
         | 
| 298 311 | 
             
                        }
         | 
| 299 | 
            -
                        else if ( | 
| 312 | 
            +
                        else if (response.status === 404) {
         | 
| 300 313 | 
             
                            return false;
         | 
| 301 314 | 
             
                        }
         | 
| 302 315 | 
             
                        else {
         | 
| 303 316 | 
             
                            // this is sad - wish this was handled by autorest.
         | 
| 304 | 
            -
                            throw new RestError(response | 
| 317 | 
            +
                            throw new RestError(response.bodyAsText, {
         | 
| 305 318 | 
             
                                statusCode: response === null || response === void 0 ? void 0 : response.status,
         | 
| 306 319 | 
             
                                request: response === null || response === void 0 ? void 0 : response.request,
         | 
| 307 | 
            -
                                response: response
         | 
| 320 | 
            +
                                response: response,
         | 
| 308 321 | 
             
                            });
         | 
| 309 322 | 
             
                        }
         | 
| 310 323 | 
             
                    }
         | 
| @@ -312,5 +325,47 @@ export class WebPubSubServiceClient { | |
| 312 325 | 
             
                        span.end();
         | 
| 313 326 | 
             
                    }
         | 
| 314 327 | 
             
                }
         | 
| 328 | 
            +
                /**
         | 
| 329 | 
            +
                 * Generate a token for a client to connect to the Azure Web PubSub service.
         | 
| 330 | 
            +
                 *
         | 
| 331 | 
            +
                 * @param options - Additional options
         | 
| 332 | 
            +
                 */
         | 
| 333 | 
            +
                async getClientAccessToken(options = {}) {
         | 
| 334 | 
            +
                    const { span, updatedOptions } = createSpan("WebPubSubServiceClient-hub-generateClientToken", options);
         | 
| 335 | 
            +
                    try {
         | 
| 336 | 
            +
                        const endpoint = this.endpoint.endsWith("/") ? this.endpoint : this.endpoint + "/";
         | 
| 337 | 
            +
                        const clientEndpoint = endpoint.replace(/(http)(s?:\/\/)/gi, "ws$2");
         | 
| 338 | 
            +
                        const baseUrl = `${clientEndpoint}client/hubs/${this.hubName}`;
         | 
| 339 | 
            +
                        let token;
         | 
| 340 | 
            +
                        if (isTokenCredential(this.credential)) {
         | 
| 341 | 
            +
                            const response = await this.client.webPubSub.generateClientToken(this.hubName, updatedOptions);
         | 
| 342 | 
            +
                            token = response.token;
         | 
| 343 | 
            +
                        }
         | 
| 344 | 
            +
                        else {
         | 
| 345 | 
            +
                            const key = this.credential.key;
         | 
| 346 | 
            +
                            const audience = `${endpoint}client/hubs/${this.hubName}`;
         | 
| 347 | 
            +
                            const payload = { role: options === null || options === void 0 ? void 0 : options.roles };
         | 
| 348 | 
            +
                            const signOptions = {
         | 
| 349 | 
            +
                                audience: audience,
         | 
| 350 | 
            +
                                expiresIn: (options === null || options === void 0 ? void 0 : options.expirationTimeInMinutes) === undefined
         | 
| 351 | 
            +
                                    ? "1h"
         | 
| 352 | 
            +
                                    : `${options.expirationTimeInMinutes}m`,
         | 
| 353 | 
            +
                                algorithm: "HS256",
         | 
| 354 | 
            +
                            };
         | 
| 355 | 
            +
                            if (options === null || options === void 0 ? void 0 : options.userId) {
         | 
| 356 | 
            +
                                signOptions.subject = options === null || options === void 0 ? void 0 : options.userId;
         | 
| 357 | 
            +
                            }
         | 
| 358 | 
            +
                            token = jwt.sign(payload, key, signOptions);
         | 
| 359 | 
            +
                        }
         | 
| 360 | 
            +
                        return {
         | 
| 361 | 
            +
                            token,
         | 
| 362 | 
            +
                            baseUrl,
         | 
| 363 | 
            +
                            url: `${baseUrl}?access_token=${token}`,
         | 
| 364 | 
            +
                        };
         | 
| 365 | 
            +
                    }
         | 
| 366 | 
            +
                    finally {
         | 
| 367 | 
            +
                        span.end();
         | 
| 368 | 
            +
                    }
         | 
| 369 | 
            +
                }
         | 
| 315 370 | 
             
            }
         | 
| 316 371 | 
             
            //# sourceMappingURL=hubClient.js.map
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"hubClient.js","sourceRoot":"","sources":["../../src/hubClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { CommonClientOptions, FullOperationResponse, OperationOptions } from \"@azure/core-client\";\nimport { InternalPipelineOptions, RestError, RequestBodyType } from \"@azure/core-rest-pipeline\";\nimport { GeneratedClient } from \"./generated/generatedClient\";\nimport { WebPubSubGroup, WebPubSubGroupImpl } from \"./groupClient\";\nimport normalizeSendToAllOptions from \"./normalizeOptions\";\nimport { AzureKeyCredential } from \"@azure/core-auth\";\nimport { webPubSubKeyCredentialPolicy } from \"./webPubSubCredentialPolicy\";\nimport { createSpan } from \"./tracing\";\nimport { logger } from \"./logger\";\nimport { parseConnectionString } from \"./parseConnectionString\";\nimport jwt from \"jsonwebtoken\";\nimport { getPayloadForMessage } from \"./utils\";\n\n/**\n * Options for closing a connection to a hub.\n */\nexport interface CloseConnectionOptions extends OperationOptions {\n  /**\n   * Reason the connection is being closed.\n   */\n  reason?: string;\n}\n\n/**\n * Options for sending messages to hubs.\n */\nexport interface HubSendToAllOptions extends OperationOptions {\n  /**\n   * Connection ids to exclude from receiving this message.\n   */\n  excludedConnections?: string[];\n}\n\n/**\n * Options for sending text messages to hubs.\n */\nexport interface HubSendTextToAllOptions extends HubSendToAllOptions {\n  contentType: \"text/plain\";\n}\n\n/**\n * Types which can be serialized and sent as JSON.\n */\nexport type JSONTypes = string | number | boolean | object;\n\n/**\n * Options for constructing a HubAdmin client.\n */\nexport interface HubAdminClientOptions extends CommonClientOptions {}\n\n/**\n * Options for checking if a connection exists.\n */\nexport interface HasConnectionOptions extends OperationOptions {}\n\n/**\n * Options for checking if a group exists.\n */\nexport interface HubHasGroupOptions extends OperationOptions {}\n\n/**\n * Options for checking if a user exists.\n */\nexport interface HubHasUserOptions extends OperationOptions {}\n\n/**\n * Options for removing a user from all groups.\n */\nexport interface HubRemoveUserFromAllGroupsOptions extends CloseConnectionOptions {}\n\n/**\n * Options for sending a message to a specific connection.\n */\nexport interface HubSendToConnectionOptions extends OperationOptions {}\n\n/**\n * Options for sending a text message to a connection.\n */\nexport interface HubSendTextToConnectionOptions extends HubSendToConnectionOptions {\n  contentType: \"text/plain\";\n}\n\n/**\n * Options for sending a message to a user.\n */\nexport interface HubSendToUserOptions extends OperationOptions {}\n\n/**\n * Options for sending a text message to a user.\n */\nexport interface HubSendTextToUserOptions extends HubSendToUserOptions {\n  contentType: \"text/plain\";\n}\n\n/**\n * Options for auth a client\n */\nexport interface GetAuthenticationTokenOptions {\n  /**\n   * The userId for the client\n   */\n  userId?: string;\n  /**\n   * The roles the client have.\n   * Roles give the client initial permissions to leave, join, or publish to groups when using PubSub subprotocol\n   * * `webpubsub.joinLeaveGroup`: the client can join or leave any group\n   * * `webpubsub.sendToGroup`: the client can send messages to any group\n   * * `webpubsub.joinLeaveGroup.<group>`: the client can join or leave group `<group>`\n   * * `webpubsub.sendToGroup.<group>`: the client can send messages to group `<group>`\n   *\n   * {@link https://azure.github.io/azure-webpubsub/references/pubsub-websocket-subprotocol#permissions}\n   */\n  roles?: string[];\n  /**\n   * The time-to-live minutes for the access token. If not set, the default value is 60 minutes.\n   */\n  ttl?: number;\n}\n\n/**\n * Response for the authed client, including the url and the jwt token\n */\nexport interface GetAuthenticationTokenResponse {\n  /**\n   * The URL client connects to\n   */\n  baseUrl: string;\n\n  /**\n   * The JWT token the client uses to connect\n   */\n  token: string;\n\n  /**\n   * The URL client connects to with access_token query string\n   */\n  url: string;\n}\n\nexport type Permission = \"joinLeaveGroup\" | \"sendToGroup\";\n\n/**\n * Options for grant permissions to a connection\n */\nexport interface HubGrantPermissionOptions extends OperationOptions {\n  /**\n   * The meaning of the target depends on the specific permission.\n   * For joinLeaveGroup and sendToGroup, targetName is a required parameter standing for the group name.\n   */\n  targetName?: string;\n}\n\n/**\n * Options for revoke permissions from a connection\n */\nexport interface HubRevokePermissionOptions extends OperationOptions {\n  /**\n   * The meaning of the target depends on the specific permission.\n   * For joinLeaveGroup and sendToGroup, targetName is a required parameter standing for the group name.\n   */\n  targetName?: string;\n}\n\n/**\n * Options for check if a connection has the specified permission\n */\nexport interface HubHasPermissionOptions extends OperationOptions {\n  /**\n   * The meaning of the target depends on the specific permission.\n   * For joinLeaveGroup and sendToGroup, targetName is a required parameter standing for the group name.\n   */\n  targetName?: string;\n}\n\n/**\n * Client for connecting to a Web PubSub hub\n */\nexport class WebPubSubServiceClient {\n  private readonly client: GeneratedClient;\n  private credential!: AzureKeyCredential;\n  private readonly clientOptions?: HubAdminClientOptions;\n\n  /**\n   * The name of the hub this client is connected to\n   */\n  public readonly hubName: string;\n  /**\n   * The Web PubSub API version being used by this client\n   */\n  public readonly apiVersion: string = \"2020-10-01\";\n\n  /**\n   * The Web PubSub endpoint this client is connected to\n   */\n  public endpoint!: string;\n\n  /**\n   * Creates an instance of a WebPubSubServiceClient for sending messages and managing groups, connections, and users.\n   *\n   * Example usage:\n   * ```ts\n   * import { WebPubSubServiceClient } from \"@azure/web-pubsub\";\n   * const connectionString = process.env['WEB_PUBSUB_CONNECTION_STRING'];\n   * const client = new WebPubSubServiceClient(connectionString, 'chat');\n   * ```\n   *\n   * @param connectionString The connection string\n   * @param hubName The name of the hub to connect to. If omitted, '_default' is used.\n   * @param options Options to configure the http pipeline\n   */\n  constructor(connectionString: string, hubName: string, options?: HubAdminClientOptions);\n\n  /**\n   * Creates an instance of a WebPubSubServiceClient for sending messages and managing groups, connections, and users.\n   *\n   * Example usage:\n   * ```ts\n   * import { WebPubSubServiceClient, AzureKeyCredential } from \"@azure/web-pubsub\";\n   * const cred = new AzureKeyCredential(\"<your web pubsub api key>\");\n   * const endpoint = \"https://xxxx.webpubsubdev.azure.com\"\n   * const client = new WebPubSubServiceClient(endpoint, cred, 'chat');\n   * ```\n   *\n   * @param endpoint The endpoint to connect to\n   * @param credential An AzureKeyCredential holding your service key\n   * @param hubName The name of the hub to connect to.\n   * @param options Options to configure the http pipeline\n   */\n  constructor(\n    endpoint: string,\n    credential: AzureKeyCredential,\n    hubName: string,\n    options?: HubAdminClientOptions\n  );\n  constructor(\n    endpointOrConnectionString: string,\n    credsOrHubName?: AzureKeyCredential | string,\n    hubNameOrOpts?: string | HubAdminClientOptions,\n    opts?: HubAdminClientOptions\n  ) {\n    // unpack constructor arguments\n    if (typeof credsOrHubName === \"object\" && \"key\" in credsOrHubName) {\n      this.endpoint = endpointOrConnectionString;\n      this.credential = credsOrHubName;\n      this.hubName = hubNameOrOpts as string;\n      this.clientOptions = opts;\n    } else {\n      const parsedCs = parseConnectionString(endpointOrConnectionString);\n      this.endpoint = parsedCs.endpoint;\n      this.credential = parsedCs.credential;\n      this.hubName = credsOrHubName as string;\n      this.clientOptions = hubNameOrOpts as HubAdminClientOptions;\n    }\n\n    const internalPipelineOptions: InternalPipelineOptions = {\n      ...this.clientOptions,\n      ...{\n        loggingOptions: {\n          logger: logger.info\n        }\n      }\n    };\n\n    this.client = new GeneratedClient(this.endpoint, internalPipelineOptions);\n    this.client.pipeline.addPolicy(webPubSubKeyCredentialPolicy(this.credential));\n  }\n\n  /**\n   * Auth the client connection with userId and custom claims if any\n   * @param options The options that the client has\n   */\n  public async getAuthenticationToken(\n    options?: GetAuthenticationTokenOptions\n  ): Promise<GetAuthenticationTokenResponse> {\n    const endpoint = this.endpoint.endsWith(\"/\") ? this.endpoint : this.endpoint + \"/\";\n    const key = this.credential.key;\n    const hub = this.hubName;\n    const clientEndpoint = endpoint.replace(/(http)(s?:\\/\\/)/gi, \"ws$2\");\n    const clientUrl = `${clientEndpoint}client/hubs/${hub}`;\n    const audience = `${endpoint}client/hubs/${hub}`;\n    const payload = { role: options?.roles };\n    const signOptions: jwt.SignOptions = {\n      audience: audience,\n      expiresIn: options?.ttl === undefined ? \"1h\" : `${options.ttl}m`,\n      algorithm: \"HS256\"\n    };\n    if (options?.userId) {\n      signOptions.subject = options?.userId;\n    }\n    const token = jwt.sign(payload, key, signOptions);\n    const url = `${clientUrl}?access_token=${token}`;\n    return {\n      baseUrl: clientUrl,\n      token: jwt.sign(payload, key, signOptions),\n      url: url\n    };\n  }\n\n  /**\n   * Get a client for a group\n   * @param groupName The name of the group to connect to.\n   */\n  public group(groupName: string): WebPubSubGroup {\n    return new WebPubSubGroupImpl(this.client, this.hubName, groupName);\n  }\n\n  /**\n   * Broadcast a text message to all connections on this hub.\n   *\n   * @param message The text message to send\n   * @param options Additional options\n   */\n  public async sendToAll(message: string, options: HubSendTextToAllOptions): Promise<void>;\n  /**\n   * Broadcast a JSON message to all connections on this hub.\n   *\n   * @param message The JSON message to send\n   * @param options Additional options\n   */\n  public async sendToAll(message: JSONTypes, options?: HubSendToAllOptions): Promise<void>;\n  /**\n   * Broadcast a binary message to all connections on this hub.\n   *\n   * @param message The message to send\n   * @param options Additional options\n   */\n  public async sendToAll(message: RequestBodyType, options?: HubSendToAllOptions): Promise<void>;\n\n  public async sendToAll(\n    message: RequestBodyType | JSONTypes,\n    options: HubSendToAllOptions | HubSendTextToAllOptions = {}\n  ): Promise<void> {\n    const normalizedOptions = normalizeSendToAllOptions(options);\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-sendToAll\",\n      normalizedOptions\n    );\n\n    const { contentType, payload } = getPayloadForMessage(message, updatedOptions);\n\n    try {\n      return await this.client.webPubSub.sendToAll(\n        this.hubName,\n        contentType,\n        payload as any,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Send a text message to a specific user\n   *\n   * @param username User name to send to\n   * @param message The text message to send\n   * @param options Additional options\n   */\n  public async sendToUser(\n    username: string,\n    message: string,\n    options: HubSendTextToUserOptions\n  ): Promise<void>;\n\n  /**\n   * Send a JSON message to a specific user\n   *\n   * @param username User name to send to\n   * @param message The josn message to send\n   * @param options Additional options\n   */\n  public async sendToUser(\n    username: string,\n    message: JSONTypes,\n    options?: HubSendToUserOptions\n  ): Promise<void>;\n\n  /**\n   * Send a binary message to a specific user\n   *\n   * @param username The user name to send to\n   * @param message The binary message to send\n   * @param options Additional options\n   */\n  public async sendToUser(\n    username: string,\n    message: RequestBodyType,\n    options?: HubSendToUserOptions | HubSendTextToUserOptions\n  ): Promise<void>;\n  public async sendToUser(\n    username: string,\n    message: RequestBodyType | JSONTypes,\n    options: HubSendToUserOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\"WebPubSubServiceClient-hub-sendToUser\", options);\n\n    const { contentType, payload } = getPayloadForMessage(message, updatedOptions);\n    try {\n      return await this.client.webPubSub.sendToUser(\n        this.hubName,\n        username,\n        contentType,\n        payload as any,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Send a text message to a specific connection\n   *\n   * @param connectionId Connection id to send to\n   * @param message The text message\n   * @param options Additional options\n   */\n  public async sendToConnection(\n    connectionId: string,\n    message: string,\n    options: HubSendTextToConnectionOptions\n  ): Promise<void>;\n\n  /**\n   * Send a binary message to a specific connection\n   *\n   * @param connectionId Connection id to send to\n   * @param message The JSON message\n   * @param options Additional options\n   */\n  public async sendToConnection(\n    connectionId: string,\n    message: JSONTypes,\n    options?: HubSendToConnectionOptions\n  ): Promise<void>;\n\n  /**\n   * Send a binary message to a specific connection\n   *\n   * @param connectionId Connection id to send to\n   * @param message The binary message\n   * @param options Additional options\n   */\n  public async sendToConnection(\n    connectionId: string,\n    message: RequestBodyType,\n    options?: HubSendToConnectionOptions | HubSendTextToConnectionOptions\n  ): Promise<void>;\n  public async sendToConnection(\n    connectionId: string,\n    message: RequestBodyType | JSONTypes,\n    options: HubSendToConnectionOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-sendToConnection\",\n      options\n    );\n    const { contentType, payload } = getPayloadForMessage(message, updatedOptions);\n\n    try {\n      return await this.client.webPubSub.sendToConnection(\n        this.hubName,\n        connectionId,\n        contentType,\n        payload as any,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Check if a specific connection is connected to this hub\n   *\n   * @param connectionId Connection id to check\n   * @param options Additional options\n   */\n  public async hasConnection(\n    connectionId: string,\n    options: HasConnectionOptions = {}\n  ): Promise<boolean> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-hasConnection\",\n      options\n    );\n\n    try {\n      let response: FullOperationResponse | undefined;\n      function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n        response = rawResponse;\n        if (updatedOptions.onResponse) {\n          updatedOptions.onResponse(rawResponse, flatResponse);\n        }\n      }\n\n      await this.client.webPubSub.connectionExists(this.hubName, connectionId, {\n        ...updatedOptions,\n        onResponse\n      });\n\n      if (response?.status === 200) {\n        return true;\n      } else if (response?.status === 404) {\n        return false;\n      } else {\n        // this is sad - wish this was handled by autorest.\n        throw new RestError(response?.bodyAsText!, {\n          statusCode: response?.status,\n          request: response?.request,\n          response: response\n        });\n      }\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Close a specific connection to this hub\n   *\n   * @param connectionId Connection id to close\n   * @param options Additional options\n   */\n  public async closeConnection(\n    connectionId: string,\n    options: CloseConnectionOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-removeConnection\",\n      options\n    );\n\n    try {\n      return await this.client.webPubSub.closeClientConnection(\n        this.hubName,\n        connectionId,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Remove a specific user from all groups they are joined to\n   * @param userId The user id to remove from all groups\n   * @param options Additional options\n   */\n  public async removeUserFromAllGroups(\n    userId: string,\n    options: CloseConnectionOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-removeUserFromAllGroups\",\n      options\n    );\n\n    try {\n      await this.client.webPubSub.removeUserFromAllGroups(this.hubName, userId, updatedOptions);\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Check if a particular group exists (i.e. has active connections).\n   *\n   * @param groupName The group name to check for\n   * @param options Additional options\n   */\n  public async hasGroup(groupName: string, options: HubHasGroupOptions = {}): Promise<boolean> {\n    const { span, updatedOptions } = createSpan(\"WebPubSubServiceClient-hub-hasGroup\", options);\n\n    try {\n      let response: FullOperationResponse | undefined;\n      function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n        response = rawResponse;\n        if (updatedOptions.onResponse) {\n          updatedOptions.onResponse(rawResponse, flatResponse);\n        }\n      }\n      await this.client.webPubSub.groupExists(this.hubName, groupName, {\n        ...updatedOptions,\n        onResponse\n      });\n\n      if (response?.status === 200) {\n        return true;\n      } else if (response?.status === 404) {\n        return false;\n      } else {\n        throw new RestError(response?.bodyAsText!, {\n          statusCode: response?.status,\n          request: response?.request,\n          response: response\n        });\n      }\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Check if a particular user is connected to this hub.\n   *\n   * @param username The user name to check for\n   * @param options Additional options\n   */\n  public async hasUser(username: string, options: HubHasUserOptions = {}): Promise<boolean> {\n    const { span, updatedOptions } = createSpan(\"WebPubSubServiceClient-hub-hasUser\", options);\n\n    try {\n      let response: FullOperationResponse | undefined;\n      function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n        response = rawResponse;\n        if (updatedOptions.onResponse) {\n          updatedOptions.onResponse(rawResponse, flatResponse);\n        }\n      }\n      await this.client.webPubSub.userExists(this.hubName, username, {\n        ...updatedOptions,\n        onResponse\n      });\n\n      if (response?.status === 200) {\n        return true;\n      } else if (response?.status === 404) {\n        return false;\n      } else {\n        // this is sad - wish this was handled by autorest.\n        throw new RestError(response?.bodyAsText!, {\n          statusCode: response?.status,\n          request: response?.request,\n          response: response\n        });\n      }\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Grant permissions to a connection\n   *\n   * @param connectionId The connection id to grant permissions to\n   * @param Permission The permission to grant\n   * @param options Additional options\n   */\n  public async grantPermission(\n    connectionId: string,\n    permission: Permission,\n    options: HubGrantPermissionOptions = {}\n  ) {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-grantPermission\",\n      options\n    );\n\n    try {\n      return await this.client.webPubSub.grantPermission(\n        this.hubName,\n        permission,\n        connectionId,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Revoke permissions from a connection\n   *\n   * @param connectionId The connection id to revoke permissions from\n   * @param Permission The permission to revoke\n   * @param options Additional options\n   */\n  public async revokePermission(\n    connectionId: string,\n    permission: Permission,\n    options: HubRevokePermissionOptions = {}\n  ) {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-revokePermission\",\n      options\n    );\n\n    try {\n      return await this.client.webPubSub.revokePermission(\n        this.hubName,\n        permission,\n        connectionId,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Check if the connection has the specified permission\n   *\n   * @param connectionId The connection id to check permission\n   * @param Permission The permission to check\n   * @param options Additional options\n   */\n  public async hasPermission(\n    connectionId: string,\n    permission: Permission,\n    options: HubHasPermissionOptions = {}\n  ): Promise<boolean> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-hasPermission\",\n      options\n    );\n\n    try {\n      let response: FullOperationResponse | undefined;\n      function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n        response = rawResponse;\n        if (updatedOptions.onResponse) {\n          updatedOptions.onResponse(rawResponse, flatResponse);\n        }\n      }\n      await this.client.webPubSub.checkPermission(this.hubName, permission, connectionId, {\n        ...updatedOptions,\n        onResponse\n      });\n\n      if (response?.status === 200) {\n        return true;\n      } else if (response?.status === 404) {\n        return false;\n      } else {\n        // this is sad - wish this was handled by autorest.\n        throw new RestError(response?.bodyAsText!, {\n          statusCode: response?.status,\n          request: response?.request,\n          response: response\n        });\n      }\n    } finally {\n      span.end();\n    }\n  }\n}\n"]}
         | 
| 1 | 
            +
            {"version":3,"file":"hubClient.js","sourceRoot":"","sources":["../../src/hubClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,SAAS,EAAmB,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAkB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAuC,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AA6LnE;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAyDjC,YACE,0BAAkC,EAClC,cAA8D,EAC9D,aAAsD,EACtD,IAAoC;;QApDtC;;WAEG;QACa,eAAU,GAAW,YAAY,CAAC;QAmDhD,+BAA+B;QAC/B,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;YACtC,IAAI,CAAC,QAAQ,GAAG,0BAA0B,CAAC;YAC3C,IAAI,CAAC,OAAO,GAAG,aAAuB,CAAC;YACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC;SAClC;aAAM;YACL,MAAM,QAAQ,GAAG,qBAAqB,CAAC,0BAA0B,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,cAAwB,CAAC;YACxC,IAAI,CAAC,aAAa,GAAG,aAA8C,CAAC;SACrE;QAED,MAAM,uBAAuB,iDACxB,IAAI,CAAC,aAAa,GAClB;YACD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE;gBACd,MAAM,EAAE,MAAM,CAAC,IAAI;aACpB;SACF,GACE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;YACpC,CAAC,CAAC;gBACE,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,gBAAgB,EAAE,CAAC,sCAAsC,CAAC;aAC3D;YACH,CAAC,CAAC,EAAE,CAAC,CACR,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAE1E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,4BAA4B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;SAC/E;QAED,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,oBAAoB,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAC5B,2BAA2B,CAAC,MAAA,IAAI,CAAC,aAAa,0CAAE,oBAAoB,CAAC,CACtE,CAAC;SACH;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAiB;QAC5B,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtE,CAAC;IAyBM,KAAK,CAAC,SAAS,CACpB,OAAoC,EACpC,UAAyD,EAAE;QAE3D,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,sCAAsC,EAAE,OAAO,CAAC,CAAC;QAE7F,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE/E,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAC1C,IAAI,CAAC,OAAO,EACZ,WAAW,EACX,OAAc,EACd,cAAc,CACf,CAAC;SACH;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAyCM,KAAK,CAAC,UAAU,CACrB,QAAgB,EAChB,OAAoC,EACpC,UAAgC,EAAE;QAElC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,uCAAuC,EAAE,OAAO,CAAC,CAAC;QAE9F,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/E,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAC3C,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,WAAW,EACX,OAAc,EACd,cAAc,CACf,CAAC;SACH;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAyCM,KAAK,CAAC,gBAAgB,CAC3B,YAAoB,EACpB,OAAoC,EACpC,UAAsC,EAAE;QAExC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,6CAA6C,EAC7C,OAAO,CACR,CAAC;QACF,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE/E,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CACjD,IAAI,CAAC,OAAO,EACZ,YAAY,EACZ,WAAW,EACX,OAAc,EACd,cAAc,CACf,CAAC;SACH;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,gBAAgB,CAC3B,YAAoB,EACpB,UAAgC,EAAE;QAElC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,0CAA0C,EAC1C,OAAO,CACR,CAAC;QAEF,IAAI,QAA2C,CAAC;QAChD,SAAS,UAAU,CAAC,WAAkC,EAAE,YAAqB;YAC3E,QAAQ,GAAG,WAAW,CAAC;YACvB,IAAI,cAAc,CAAC,UAAU,EAAE;gBAC7B,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;aACtD;QACH,CAAC;QAED,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,kCAClE,cAAc,KACjB,UAAU,IACV,CAAC;YAEH,IAAI,QAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC5B,OAAO,IAAI,CAAC;aACb;iBAAM,IAAI,QAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBACnC,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,mDAAmD;gBACnD,MAAM,IAAI,SAAS,CAAC,QAAS,CAAC,UAAW,EAAE;oBACzC,UAAU,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM;oBAC5B,OAAO,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO;oBAC1B,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;aACJ;SACF;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,eAAe,CAC1B,YAAoB,EACpB,UAAqC,EAAE;QAEvC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,4CAA4C,EAC5C,OAAO,CACR,CAAC;QAEF,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAChD,IAAI,CAAC,OAAO,EACZ,YAAY,EACZ,cAAc,CACf,CAAC;SACH;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,mBAAmB,CAAC,UAAyC,EAAE;QAC1E,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,gDAAgD,EAChD,OAAO,CACR,CAAC;QAEF,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;SACtF;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,oBAAoB,CAC/B,MAAc,EACd,UAA0C,EAAE;QAE5C,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,iDAAiD,EACjD,OAAO,CACR,CAAC;QAEF,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;SAC/F;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,uBAAuB,CAClC,MAAc,EACd,UAAqC,EAAE;QAEvC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,oDAAoD,EACpD,OAAO,CACR,CAAC;QAEF,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;SAC3F;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,UAA8B,EAAE;QAC1E,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC;QAC5F,IAAI,QAA2C,CAAC;QAChD,SAAS,UAAU,CAAC,WAAkC,EAAE,YAAqB;YAC3E,QAAQ,GAAG,WAAW,CAAC;YACvB,IAAI,cAAc,CAAC,UAAU,EAAE;gBAC7B,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;aACtD;QACH,CAAC;QAED,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,kCAC1D,cAAc,KACjB,UAAU,IACV,CAAC;YAEH,IAAI,QAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC5B,OAAO,IAAI,CAAC;aACb;iBAAM,IAAI,QAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBACnC,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,MAAM,IAAI,SAAS,CAAC,QAAS,CAAC,UAAW,EAAE;oBACzC,UAAU,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM;oBAC5B,OAAO,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO;oBAC1B,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;aACJ;SACF;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,UAA6B,EAAE;QACvE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;QAE3F,IAAI,QAA2C,CAAC;QAChD,SAAS,UAAU,CAAC,WAAkC,EAAE,YAAqB;YAC3E,QAAQ,GAAG,WAAW,CAAC;YACvB,IAAI,cAAc,CAAC,UAAU,EAAE;gBAC7B,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;aACtD;QACH,CAAC;QAED,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,kCACxD,cAAc,KACjB,UAAU,IACV,CAAC;YAEH,IAAI,QAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC5B,OAAO,IAAI,CAAC;aACb;iBAAM,IAAI,QAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBACnC,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,mDAAmD;gBACnD,MAAM,IAAI,SAAS,CAAC,QAAS,CAAC,UAAW,EAAE;oBACzC,UAAU,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM;oBAC5B,OAAO,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO;oBAC1B,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;aACJ;SACF;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,eAAe,CAC1B,YAAoB,EACpB,UAAsB,EACtB,UAAqC,EAAE;QAEvC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,4CAA4C,EAC5C,OAAO,CACR,CAAC;QAEF,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAChD,IAAI,CAAC,OAAO,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,CACf,CAAC;SACH;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,gBAAgB,CAC3B,YAAoB,EACpB,UAAsB,EACtB,UAAsC,EAAE;QAExC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,6CAA6C,EAC7C,OAAO,CACR,CAAC;QAEF,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CACjD,IAAI,CAAC,OAAO,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,CACf,CAAC;SACH;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,aAAa,CACxB,YAAoB,EACpB,UAAsB,EACtB,UAAmC,EAAE;QAErC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,0CAA0C,EAC1C,OAAO,CACR,CAAC;QACF,IAAI,QAA2C,CAAC;QAChD,SAAS,UAAU,CAAC,WAAkC,EAAE,YAAqB;YAC3E,QAAQ,GAAG,WAAW,CAAC;YACvB,IAAI,cAAc,CAAC,UAAU,EAAE;gBAC7B,cAAc,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;aACtD;QACH,CAAC;QAED,IAAI;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,kCAC7E,cAAc,KACjB,UAAU,IACV,CAAC;YAEH,IAAI,QAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC5B,OAAO,IAAI,CAAC;aACb;iBAAM,IAAI,QAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBACnC,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,mDAAmD;gBACnD,MAAM,IAAI,SAAS,CAAC,QAAS,CAAC,UAAW,EAAE;oBACzC,UAAU,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM;oBAC5B,OAAO,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO;oBAC1B,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;aACJ;SACF;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,oBAAoB,CAC/B,UAAsC,EAAE;QAExC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CACzC,gDAAgD,EAChD,OAAO,CACR,CAAC;QAEF,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YACnF,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,GAAG,cAAc,eAAe,IAAI,CAAC,OAAO,EAAE,CAAC;YAE/D,IAAI,KAAa,CAAC;YAClB,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAC9D,IAAI,CAAC,OAAO,EACZ,cAAc,CACf,CAAC;gBACF,KAAK,GAAG,QAAQ,CAAC,KAAM,CAAC;aACzB;iBAAM;gBACL,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAChC,MAAM,QAAQ,GAAG,GAAG,QAAQ,eAAe,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1D,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,CAAC;gBACzC,MAAM,WAAW,GAAoB;oBACnC,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EACP,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,uBAAuB,MAAK,SAAS;wBAC5C,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,GAAG,OAAO,CAAC,uBAAuB,GAAG;oBAC3C,SAAS,EAAE,OAAO;iBACnB,CAAC;gBACF,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;oBACnB,WAAW,CAAC,OAAO,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;iBACvC;gBACD,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;aAC7C;YAED,OAAO;gBACL,KAAK;gBACL,OAAO;gBACP,GAAG,EAAE,GAAG,OAAO,iBAAiB,KAAK,EAAE;aACxC,CAAC;SACH;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { CommonClientOptions, FullOperationResponse, OperationOptions } from \"@azure/core-client\";\nimport { RestError, RequestBodyType } from \"@azure/core-rest-pipeline\";\nimport { GeneratedClient } from \"./generated/generatedClient\";\nimport { WebPubSubGroup, WebPubSubGroupImpl } from \"./groupClient\";\nimport { AzureKeyCredential, TokenCredential, isTokenCredential } from \"@azure/core-auth\";\nimport { webPubSubKeyCredentialPolicy } from \"./webPubSubCredentialPolicy\";\nimport { createSpan } from \"./tracing\";\nimport { logger } from \"./logger\";\nimport { parseConnectionString } from \"./parseConnectionString\";\nimport jwt from \"jsonwebtoken\";\nimport { getPayloadForMessage } from \"./utils\";\nimport { GeneratedClientOptionalParams } from \"./generated\";\nimport { webPubSubReverseProxyPolicy } from \"./reverseProxyPolicy\";\n\n/**\n * Options for closing a connection to a hub.\n */\nexport interface HubCloseConnectionOptions extends OperationOptions {\n  /**\n   * Reason the connection is being closed.\n   */\n  reason?: string;\n}\n\n/**\n * Options for closing all connections to a hub.\n */\nexport interface HubCloseAllConnectionsOptions extends OperationOptions {\n  /**\n   * Reason the connection is being closed.\n   */\n  reason?: string;\n}\n\n/**\n * Options for closing all of a user's connections to a hub.\n */\nexport interface HubCloseUserConnectionsOptions extends OperationOptions {\n  /**\n   * Reason the connection is being closed.\n   */\n  reason?: string;\n}\n\n/**\n * Options for sending messages to hubs.\n */\nexport interface HubSendToAllOptions extends OperationOptions {\n  /**\n   * Connection ids to exclude from receiving this message.\n   */\n  excludedConnections?: string[];\n}\n\n/**\n * Options for sending text messages to hubs.\n */\nexport interface HubSendTextToAllOptions extends HubSendToAllOptions {\n  contentType: \"text/plain\";\n}\n\n/**\n * Types which can be serialized and sent as JSON.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type JSONTypes = string | number | boolean | object;\n\n/**\n * Options for constructing a HubAdmin client.\n */\nexport interface WebPubSubServiceClientOptions extends CommonClientOptions {\n  /**\n   * Reverse proxy endpoint (for example, your Azure API management endpoint)\n   */\n  reverseProxyEndpoint?: string;\n}\n\n/**\n * Options for checking if a connection exists.\n */\nexport interface HasConnectionOptions extends OperationOptions {}\n\n/**\n * Options for checking if a group exists.\n */\nexport interface HubHasGroupOptions extends OperationOptions {}\n\n/**\n * Options for checking if a user exists.\n */\nexport interface HubHasUserOptions extends OperationOptions {}\n\n/**\n * Options for removing a user from all groups.\n */\nexport interface HubRemoveUserFromAllGroupsOptions extends HubCloseConnectionOptions {}\n\n/**\n * Options for sending a message to a specific connection.\n */\nexport interface HubSendToConnectionOptions extends OperationOptions {}\n\n/**\n * Options for sending a text message to a connection.\n */\nexport interface HubSendTextToConnectionOptions extends HubSendToConnectionOptions {\n  contentType: \"text/plain\";\n}\n\n/**\n * Options for sending a message to a user.\n */\nexport interface HubSendToUserOptions extends OperationOptions {}\n\n/**\n * Options for sending a text message to a user.\n */\nexport interface HubSendTextToUserOptions extends HubSendToUserOptions {\n  contentType: \"text/plain\";\n}\n\nexport type Permission = \"joinLeaveGroup\" | \"sendToGroup\";\n\n/**\n * Options for grant permissions to a connection\n */\nexport interface HubGrantPermissionOptions extends OperationOptions {\n  /**\n   * The meaning of the target depends on the specific permission.\n   * For joinLeaveGroup and sendToGroup, targetName is a required parameter standing for the group name.\n   */\n  targetName?: string;\n}\n\n/**\n * Options for revoke permissions from a connection\n */\nexport interface HubRevokePermissionOptions extends OperationOptions {\n  /**\n   * The meaning of the target depends on the specific permission.\n   * For joinLeaveGroup and sendToGroup, targetName is a required parameter standing for the group name.\n   */\n  targetName?: string;\n}\n\n/**\n * Options for checking if a connection has the specified permission\n */\nexport interface HubHasPermissionOptions extends OperationOptions {\n  /**\n   * The meaning of the target depends on the specific permission.\n   * For joinLeaveGroup and sendToGroup, targetName is a required parameter standing for the group name.\n   */\n  targetName?: string;\n}\n\n/**\n * Options for generating a token to connect a client to the Azure Web Pubsub service.\n */\nexport interface GenerateClientTokenOptions extends OperationOptions {\n  /**\n   * The userId for the client.\n   */\n  userId?: string;\n\n  /**\n   * The roles that the connection with the generated token will have.\n   * Roles give the client initial permissions to leave, join, or publish to groups when using PubSub subprotocol\n   * * `webpubsub.joinLeaveGroup`: the client can join or leave any group\n   * * `webpubsub.sendToGroup`: the client can send messages to any group\n   * * `webpubsub.joinLeaveGroup.<group>`: the client can join or leave group `<group>`\n   * * `webpubsub.sendToGroup.<group>`: the client can send messages to group `<group>`\n   *\n   * {@link https://azure.github.io/azure-webpubsub/references/pubsub-websocket-subprotocol#permissions}\n   */\n  roles?: string[];\n\n  /**\n   * Minutes until the token expires.\n   */\n  expirationTimeInMinutes?: number;\n}\n\n/**\n * A response containing the client token.\n */\nexport interface ClientTokenResponse {\n  /**\n   * The client token.\n   */\n  token: string;\n  /**\n   * The URL client connects to\n   */\n  baseUrl: string;\n  /**\n   * The URL client connects to with access_token query string\n   */\n  url: string;\n}\n\n/**\n * Client for connecting to a Web PubSub hub\n */\nexport class WebPubSubServiceClient {\n  private readonly client: GeneratedClient;\n  private credential!: AzureKeyCredential | TokenCredential;\n  private readonly clientOptions?: WebPubSubServiceClientOptions;\n\n  /**\n   * The name of the hub this client is connected to\n   */\n  public readonly hubName: string;\n  /**\n   * The Web PubSub API version being used by this client\n   */\n  public readonly apiVersion: string = \"2021-10-01\";\n\n  /**\n   * The Web PubSub endpoint this client is connected to\n   */\n  public endpoint!: string;\n\n  /**\n   * Creates an instance of a WebPubSubServiceClient for sending messages and managing groups, connections, and users.\n   *\n   * Example usage:\n   * ```ts\n   * import { WebPubSubServiceClient } from \"@azure/web-pubsub\";\n   * const connectionString = process.env['WEB_PUBSUB_CONNECTION_STRING'];\n   * const client = new WebPubSubServiceClient(connectionString, 'chat');\n   * ```\n   *\n   * @param connectionString - The connection string\n   * @param hubName - The name of the hub to connect to. If omitted, '_default' is used.\n   * @param options - Options to configure the http pipeline\n   */\n  constructor(connectionString: string, hubName: string, options?: WebPubSubServiceClientOptions);\n\n  /**\n   * Creates an instance of a WebPubSubServiceClient for sending messages and managing groups, connections, and users.\n   *\n   * Example usage:\n   * ```ts\n   * import { WebPubSubServiceClient, AzureKeyCredential } from \"@azure/web-pubsub\";\n   * const cred = new AzureKeyCredential(\"<your web pubsub api key>\");\n   * const endpoint = \"https://xxxx.webpubsubdev.azure.com\"\n   * const client = new WebPubSubServiceClient(endpoint, cred, 'chat');\n   * ```\n   *\n   * @param endpoint - The endpoint to connect to\n   * @param credential - An AzureKeyCredential holding your service key\n   * @param hubName - The name of the hub to connect to.\n   * @param options - Options to configure the http pipeline\n   */\n  constructor(\n    endpoint: string,\n    credential: AzureKeyCredential | TokenCredential,\n    hubName: string,\n    options?: WebPubSubServiceClientOptions\n  );\n  constructor(\n    endpointOrConnectionString: string,\n    credsOrHubName?: AzureKeyCredential | TokenCredential | string,\n    hubNameOrOpts?: string | WebPubSubServiceClientOptions,\n    opts?: WebPubSubServiceClientOptions\n  ) {\n    // unpack constructor arguments\n    if (typeof credsOrHubName === \"object\") {\n      this.endpoint = endpointOrConnectionString;\n      this.hubName = hubNameOrOpts as string;\n      this.clientOptions = opts;\n      this.credential = credsOrHubName;\n    } else {\n      const parsedCs = parseConnectionString(endpointOrConnectionString);\n      this.endpoint = parsedCs.endpoint;\n      this.credential = parsedCs.credential;\n      this.hubName = credsOrHubName as string;\n      this.clientOptions = hubNameOrOpts as WebPubSubServiceClientOptions;\n    }\n\n    const internalPipelineOptions: GeneratedClientOptionalParams = {\n      ...this.clientOptions,\n      ...{\n        apiVersion: this.apiVersion,\n        loggingOptions: {\n          logger: logger.info,\n        },\n      },\n      ...(isTokenCredential(this.credential)\n        ? {\n            credential: this.credential,\n            credentialScopes: [\"https://webpubsub.azure.com/.default\"],\n          }\n        : {}),\n    };\n\n    this.client = new GeneratedClient(this.endpoint, internalPipelineOptions);\n\n    if (!isTokenCredential(this.credential)) {\n      this.client.pipeline.addPolicy(webPubSubKeyCredentialPolicy(this.credential));\n    }\n\n    if (this.clientOptions?.reverseProxyEndpoint) {\n      this.client.pipeline.addPolicy(\n        webPubSubReverseProxyPolicy(this.clientOptions?.reverseProxyEndpoint)\n      );\n    }\n  }\n\n  /**\n   * Get a client for a group\n   * @param groupName - The name of the group to connect to.\n   */\n  public group(groupName: string): WebPubSubGroup {\n    return new WebPubSubGroupImpl(this.client, this.hubName, groupName);\n  }\n\n  /**\n   * Broadcast a text message to all connections on this hub.\n   *\n   * @param message - The text message to send\n   * @param options - Additional options\n   */\n  // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n  public async sendToAll(message: string, options: HubSendTextToAllOptions): Promise<void>;\n  /**\n   * Broadcast a JSON message to all connections on this hub.\n   *\n   * @param message - The JSON message to send\n   * @param options - Additional options\n   */\n  public async sendToAll(message: JSONTypes, options?: HubSendToAllOptions): Promise<void>;\n  /**\n   * Broadcast a binary message to all connections on this hub.\n   *\n   * @param message - The message to send\n   * @param options - Additional options\n   */\n  public async sendToAll(message: RequestBodyType, options?: HubSendToAllOptions): Promise<void>;\n\n  public async sendToAll(\n    message: RequestBodyType | JSONTypes,\n    options: HubSendToAllOptions | HubSendTextToAllOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\"WebPubSubServiceClient-hub-sendToAll\", options);\n\n    const { contentType, payload } = getPayloadForMessage(message, updatedOptions);\n\n    try {\n      return await this.client.webPubSub.sendToAll(\n        this.hubName,\n        contentType,\n        payload as any,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Send a text message to a specific user\n   *\n   * @param username - User name to send to\n   * @param message - The text message to send\n   * @param options - Additional options\n   */\n  public async sendToUser(\n    username: string,\n    message: string,\n    // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n    options: HubSendTextToUserOptions\n  ): Promise<void>;\n\n  /**\n   * Send a JSON message to a specific user\n   *\n   * @param username - User name to send to\n   * @param message - The josn message to send\n   * @param options - Additional options\n   */\n  public async sendToUser(\n    username: string,\n    message: JSONTypes,\n    options?: HubSendToUserOptions\n  ): Promise<void>;\n\n  /**\n   * Send a binary message to a specific user\n   *\n   * @param username - The user name to send to\n   * @param message - The binary message to send\n   * @param options - Additional options\n   */\n  public async sendToUser(\n    username: string,\n    message: RequestBodyType,\n    options?: HubSendToUserOptions | HubSendTextToUserOptions\n  ): Promise<void>;\n  public async sendToUser(\n    username: string,\n    message: RequestBodyType | JSONTypes,\n    options: HubSendToUserOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\"WebPubSubServiceClient-hub-sendToUser\", options);\n\n    const { contentType, payload } = getPayloadForMessage(message, updatedOptions);\n    try {\n      return await this.client.webPubSub.sendToUser(\n        this.hubName,\n        username,\n        contentType,\n        payload as any,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Send a text message to a specific connection\n   *\n   * @param connectionId - Connection id to send to\n   * @param message - The text message\n   * @param options - Additional options\n   */\n  public async sendToConnection(\n    connectionId: string,\n    message: string,\n    // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n    options: HubSendTextToConnectionOptions\n  ): Promise<void>;\n\n  /**\n   * Send a binary message to a specific connection\n   *\n   * @param connectionId - Connection id to send to\n   * @param message - The JSON message\n   * @param options - Additional options\n   */\n  public async sendToConnection(\n    connectionId: string,\n    message: JSONTypes,\n    options?: HubSendToConnectionOptions\n  ): Promise<void>;\n\n  /**\n   * Send a binary message to a specific connection\n   *\n   * @param connectionId - Connection id to send to\n   * @param message - The binary message\n   * @param options - Additional options\n   */\n  public async sendToConnection(\n    connectionId: string,\n    message: RequestBodyType,\n    options?: HubSendToConnectionOptions | HubSendTextToConnectionOptions\n  ): Promise<void>;\n  public async sendToConnection(\n    connectionId: string,\n    message: RequestBodyType | JSONTypes,\n    options: HubSendToConnectionOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-sendToConnection\",\n      options\n    );\n    const { contentType, payload } = getPayloadForMessage(message, updatedOptions);\n\n    try {\n      return await this.client.webPubSub.sendToConnection(\n        this.hubName,\n        connectionId,\n        contentType,\n        payload as any,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Check if a specific connection is connected to this hub\n   *\n   * @param connectionId - Connection id to check\n   * @param options - Additional options\n   */\n  public async connectionExists(\n    connectionId: string,\n    options: HasConnectionOptions = {}\n  ): Promise<boolean> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-hasConnection\",\n      options\n    );\n\n    let response: FullOperationResponse | undefined;\n    function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n      response = rawResponse;\n      if (updatedOptions.onResponse) {\n        updatedOptions.onResponse(rawResponse, flatResponse);\n      }\n    }\n\n    try {\n      await this.client.webPubSub.connectionExists(this.hubName, connectionId, {\n        ...updatedOptions,\n        onResponse,\n      });\n\n      if (response!.status === 200) {\n        return true;\n      } else if (response!.status === 404) {\n        return false;\n      } else {\n        // this is sad - wish this was handled by autorest.\n        throw new RestError(response!.bodyAsText!, {\n          statusCode: response?.status,\n          request: response?.request,\n          response: response,\n        });\n      }\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Close a specific connection to this hub\n   *\n   * @param connectionId - Connection id to close\n   * @param options - Additional options\n   */\n  public async closeConnection(\n    connectionId: string,\n    options: HubCloseConnectionOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-closeConnection\",\n      options\n    );\n\n    try {\n      return await this.client.webPubSub.closeConnection(\n        this.hubName,\n        connectionId,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Close all connections to this hub\n   *\n   * @param options - Additional options\n   */\n  public async closeAllConnections(options: HubCloseAllConnectionsOptions = {}): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-closeAllConnections\",\n      options\n    );\n\n    try {\n      return await this.client.webPubSub.closeAllConnections(this.hubName, updatedOptions);\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Close all connections with the given user id\n   *\n   * @param user - User id to close\n   * @param options - Additional options\n   */\n  public async closeUserConnections(\n    userId: string,\n    options: HubCloseUserConnectionsOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-closeUserConnections\",\n      options\n    );\n\n    try {\n      return await this.client.webPubSub.closeUserConnections(this.hubName, userId, updatedOptions);\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Remove a specific user from all groups they are joined to\n   * @param userId - The user id to remove from all groups\n   * @param options - Additional options\n   */\n  public async removeUserFromAllGroups(\n    userId: string,\n    options: HubCloseConnectionOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-removeUserFromAllGroups\",\n      options\n    );\n\n    try {\n      await this.client.webPubSub.removeUserFromAllGroups(this.hubName, userId, updatedOptions);\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Check if a particular group exists (i.e. has active connections).\n   *\n   * @param groupName - The group name to check for\n   * @param options - Additional options\n   */\n  public async groupExists(groupName: string, options: HubHasGroupOptions = {}): Promise<boolean> {\n    const { span, updatedOptions } = createSpan(\"WebPubSubServiceClient-hub-hasGroup\", options);\n    let response: FullOperationResponse | undefined;\n    function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n      response = rawResponse;\n      if (updatedOptions.onResponse) {\n        updatedOptions.onResponse(rawResponse, flatResponse);\n      }\n    }\n\n    try {\n      await this.client.webPubSub.groupExists(this.hubName, groupName, {\n        ...updatedOptions,\n        onResponse,\n      });\n\n      if (response!.status === 200) {\n        return true;\n      } else if (response!.status === 404) {\n        return false;\n      } else {\n        throw new RestError(response!.bodyAsText!, {\n          statusCode: response?.status,\n          request: response?.request,\n          response: response,\n        });\n      }\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Check if a particular user is connected to this hub.\n   *\n   * @param username - The user name to check for\n   * @param options - Additional options\n   */\n  public async userExists(username: string, options: HubHasUserOptions = {}): Promise<boolean> {\n    const { span, updatedOptions } = createSpan(\"WebPubSubServiceClient-hub-hasUser\", options);\n\n    let response: FullOperationResponse | undefined;\n    function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n      response = rawResponse;\n      if (updatedOptions.onResponse) {\n        updatedOptions.onResponse(rawResponse, flatResponse);\n      }\n    }\n\n    try {\n      await this.client.webPubSub.userExists(this.hubName, username, {\n        ...updatedOptions,\n        onResponse,\n      });\n\n      if (response!.status === 200) {\n        return true;\n      } else if (response!.status === 404) {\n        return false;\n      } else {\n        // this is sad - wish this was handled by autorest.\n        throw new RestError(response!.bodyAsText!, {\n          statusCode: response?.status,\n          request: response?.request,\n          response: response,\n        });\n      }\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Grant permissions to a connection\n   *\n   * @param connectionId - The connection id to grant permissions to\n   * @param Permission - The permission to grant\n   * @param options - Additional options\n   */\n  public async grantPermission(\n    connectionId: string,\n    permission: Permission,\n    options: HubGrantPermissionOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-grantPermission\",\n      options\n    );\n\n    try {\n      return await this.client.webPubSub.grantPermission(\n        this.hubName,\n        permission,\n        connectionId,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Revoke permissions from a connection\n   *\n   * @param connectionId - The connection id to revoke permissions from\n   * @param Permission - The permission to revoke\n   * @param options - Additional options\n   */\n  public async revokePermission(\n    connectionId: string,\n    permission: Permission,\n    options: HubRevokePermissionOptions = {}\n  ): Promise<void> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-revokePermission\",\n      options\n    );\n\n    try {\n      return await this.client.webPubSub.revokePermission(\n        this.hubName,\n        permission,\n        connectionId,\n        updatedOptions\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Check if the connection has the specified permission\n   *\n   * @param connectionId - The connection id to check permission\n   * @param Permission - The permission to check\n   * @param options - Additional options\n   */\n  public async hasPermission(\n    connectionId: string,\n    permission: Permission,\n    options: HubHasPermissionOptions = {}\n  ): Promise<boolean> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-hasPermission\",\n      options\n    );\n    let response: FullOperationResponse | undefined;\n    function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n      response = rawResponse;\n      if (updatedOptions.onResponse) {\n        updatedOptions.onResponse(rawResponse, flatResponse);\n      }\n    }\n\n    try {\n      await this.client.webPubSub.checkPermission(this.hubName, permission, connectionId, {\n        ...updatedOptions,\n        onResponse,\n      });\n\n      if (response!.status === 200) {\n        return true;\n      } else if (response!.status === 404) {\n        return false;\n      } else {\n        // this is sad - wish this was handled by autorest.\n        throw new RestError(response!.bodyAsText!, {\n          statusCode: response?.status,\n          request: response?.request,\n          response: response,\n        });\n      }\n    } finally {\n      span.end();\n    }\n  }\n\n  /**\n   * Generate a token for a client to connect to the Azure Web PubSub service.\n   *\n   * @param options - Additional options\n   */\n  public async getClientAccessToken(\n    options: GenerateClientTokenOptions = {}\n  ): Promise<ClientTokenResponse> {\n    const { span, updatedOptions } = createSpan(\n      \"WebPubSubServiceClient-hub-generateClientToken\",\n      options\n    );\n\n    try {\n      const endpoint = this.endpoint.endsWith(\"/\") ? this.endpoint : this.endpoint + \"/\";\n      const clientEndpoint = endpoint.replace(/(http)(s?:\\/\\/)/gi, \"ws$2\");\n      const baseUrl = `${clientEndpoint}client/hubs/${this.hubName}`;\n\n      let token: string;\n      if (isTokenCredential(this.credential)) {\n        const response = await this.client.webPubSub.generateClientToken(\n          this.hubName,\n          updatedOptions\n        );\n        token = response.token!;\n      } else {\n        const key = this.credential.key;\n        const audience = `${endpoint}client/hubs/${this.hubName}`;\n        const payload = { role: options?.roles };\n        const signOptions: jwt.SignOptions = {\n          audience: audience,\n          expiresIn:\n            options?.expirationTimeInMinutes === undefined\n              ? \"1h\"\n              : `${options.expirationTimeInMinutes}m`,\n          algorithm: \"HS256\",\n        };\n        if (options?.userId) {\n          signOptions.subject = options?.userId;\n        }\n        token = jwt.sign(payload, key, signOptions);\n      }\n\n      return {\n        token,\n        baseUrl,\n        url: `${baseUrl}?access_token=${token}`,\n      };\n    } finally {\n      span.end();\n    }\n  }\n}\n"]}
         | 
    
        package/dist-esm/src/index.js
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            // Copyright (c) Microsoft Corporation.
         | 
| 2 2 | 
             
            // Licensed under the MIT license.
         | 
| 3 3 | 
             
            export { AzureKeyCredential } from "@azure/core-auth";
         | 
| 4 | 
            -
            export { WebPubSubServiceClient } from "./hubClient";
         | 
| 4 | 
            +
            export { WebPubSubServiceClient, } from "./hubClient";
         | 
| 5 5 | 
             
            //# sourceMappingURL=index.js.map
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,sBAAsB, | 
| 1 | 
            +
            {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,sBAAsB,GAsBvB,MAAM,aAAa,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nexport { AzureKeyCredential } from \"@azure/core-auth\";\nexport {\n  WebPubSubServiceClient,\n  HubSendToAllOptions,\n  ClientTokenResponse,\n  HubCloseConnectionOptions,\n  HubCloseAllConnectionsOptions,\n  HubCloseUserConnectionsOptions,\n  GenerateClientTokenOptions,\n  HasConnectionOptions,\n  HubHasGroupOptions,\n  HubHasUserOptions,\n  WebPubSubServiceClientOptions,\n  HubRemoveUserFromAllGroupsOptions,\n  HubSendToConnectionOptions,\n  HubSendToUserOptions,\n  HubGrantPermissionOptions,\n  HubRevokePermissionOptions,\n  HubHasPermissionOptions,\n  HubSendTextToAllOptions,\n  HubSendTextToConnectionOptions,\n  HubSendTextToUserOptions,\n  JSONTypes,\n  Permission,\n} from \"./hubClient\";\nexport {\n  WebPubSubGroup,\n  GroupAddConnectionOptions,\n  GroupCloseAllConnectionsOptions,\n  GroupAddUserOptions,\n  GroupAdminClientOptions,\n  GroupHasUserOptions,\n  GroupRemoveConnectionOptions,\n  GroupRemoveUserOptions,\n  GroupSendTextToAllOptions,\n  GroupSendToAllOptions,\n} from \"./groupClient\";\n"]}
         | 
    
        package/dist-esm/src/logger.js
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            // Licensed under the MIT license.
         | 
| 3 3 | 
             
            import { createClientLogger } from "@azure/logger";
         | 
| 4 4 | 
             
            /**
         | 
| 5 | 
            -
             * The  | 
| 5 | 
            +
             * The `@azure/logger` configuration for this package.
         | 
| 6 6 | 
             
             */
         | 
| 7 7 | 
             
            export const logger = createClientLogger("web-pubsub");
         | 
| 8 8 | 
             
            //# sourceMappingURL=logger.js.map
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createClientLogger } from \"@azure/logger\";\n\n/**\n * The  | 
| 1 | 
            +
            {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { createClientLogger } from \"@azure/logger\";\n\n/**\n * The `@azure/logger` configuration for this package.\n */\nexport const logger = createClientLogger(\"web-pubsub\");\n"]}
         | 
| @@ -1,7 +1,9 @@ | |
| 1 | 
            +
            // Copyright (c) Microsoft Corporation.
         | 
| 2 | 
            +
            // Licensed under the MIT license.
         | 
| 1 3 | 
             
            import { AzureKeyCredential } from "@azure/core-auth";
         | 
| 2 4 | 
             
            import { URL } from "./util/url";
         | 
| 3 5 | 
             
            export function parseConnectionString(conn) {
         | 
| 4 | 
            -
                 | 
| 6 | 
            +
                const parsed = {};
         | 
| 5 7 | 
             
                conn.split(";").forEach((i) => {
         | 
| 6 8 | 
             
                    const assignmentPos = i.indexOf("=");
         | 
| 7 9 | 
             
                    if (assignmentPos === -1)
         |