From cd2cf61467b4be7c0e4f6506337cf17862cd056b Mon Sep 17 00:00:00 2001 From: Chenyang Liu Date: Mon, 30 Jan 2023 11:27:03 +0800 Subject: [PATCH] Add client pubsub sample with client sdk --- .../javascript/clientpubsub-client-sdk/.env | 1 + .../clientpubsub-client-sdk/Readme.md | 36 + .../publisher/package-lock.json | 864 ++++++++++++++++++ .../publisher/package.json | 24 + .../publisher/src/index.ts | 51 ++ .../publisher/tsconfig.json | 17 + .../subscriber/package-lock.json | 864 ++++++++++++++++++ .../subscriber/package.json | 24 + .../subscriber/src/index.ts | 61 ++ .../subscriber/tsconfig.json | 17 + 10 files changed, 1959 insertions(+) create mode 100644 samples/javascript/clientpubsub-client-sdk/.env create mode 100644 samples/javascript/clientpubsub-client-sdk/Readme.md create mode 100644 samples/javascript/clientpubsub-client-sdk/publisher/package-lock.json create mode 100644 samples/javascript/clientpubsub-client-sdk/publisher/package.json create mode 100644 samples/javascript/clientpubsub-client-sdk/publisher/src/index.ts create mode 100644 samples/javascript/clientpubsub-client-sdk/publisher/tsconfig.json create mode 100644 samples/javascript/clientpubsub-client-sdk/subscriber/package-lock.json create mode 100644 samples/javascript/clientpubsub-client-sdk/subscriber/package.json create mode 100644 samples/javascript/clientpubsub-client-sdk/subscriber/src/index.ts create mode 100644 samples/javascript/clientpubsub-client-sdk/subscriber/tsconfig.json diff --git a/samples/javascript/clientpubsub-client-sdk/.env b/samples/javascript/clientpubsub-client-sdk/.env new file mode 100644 index 000000000..90447b0a3 --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/.env @@ -0,0 +1 @@ +WPS_CONNECTION_STRING="" \ No newline at end of file diff --git a/samples/javascript/clientpubsub-client-sdk/Readme.md b/samples/javascript/clientpubsub-client-sdk/Readme.md new file mode 100644 index 000000000..8f456df11 --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/Readme.md @@ -0,0 +1,36 @@ +# Client pub-sub with `@azure/web-pubsub-client` and typescript + +## Prerequisites + +1. [Node.js](https://nodejs.org) +2. Create an Azure Web PubSub resource + +## Overview + +The sample demonstrate client pub-sub with `@azure/web-pubsub-client` library and typescript. + +## Setup + +Copy **Connection String** from **Keys** tab of the created Azure Web PubSub service, and open the `.env` file and replace the `""` with the value of your **Connection String**. + +![Connection String](./../../../docs/images/portal_conn.png) + +1. Start Client subscriber + +```bash +cd subscriber +npm install +npm run start +``` + +The preceding commands started a subscriber that subscribed to a group and print all message received from the group. + +2. Start Client publisher + +```bash +cd publisher +npm install +npm run start +``` + +The preceding commands started a publisher and you can type messages and press Enter to send. Then you can see these messages are transferred to the client subscriber in real-time. \ No newline at end of file diff --git a/samples/javascript/clientpubsub-client-sdk/publisher/package-lock.json b/samples/javascript/clientpubsub-client-sdk/publisher/package-lock.json new file mode 100644 index 000000000..1dc20f86a --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/publisher/package-lock.json @@ -0,0 +1,864 @@ +{ + "name": "clientpubsub-client-sdk", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "clientpubsub-client-sdk", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@azure/web-pubsub": "^1.1.0", + "@azure/web-pubsub-client": "^1.0.0-beta.1", + "dotenv": "^16.0.3", + "events": "latest" + }, + "devDependencies": { + "@types/node": "^14.0.0", + "typescript": "~4.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha1-eI7nhFelWvihrTQqyxgjg9IRkkk=", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.4.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-auth/-/core-auth-1.4.0.tgz", + "integrity": "sha1-b6lmHBcFhXgg28IW31ulZlrDap4=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.7.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-client/-/core-client-1.7.0.tgz", + "integrity": "sha1-7q8ob1kuCRJFK9+WYWRYq6vsHRw=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.10.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", + "integrity": "sha1-NIKQhHyjG57s+c9d51GarM3TCWg=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "form-data": "^4.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "tslib": "^2.2.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-tracing/-/core-tracing-1.0.1.tgz", + "integrity": "sha1-NSo4y+pDjEqDyGsxT0gBfXC6lQM=", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.1.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-util/-/core-util-1.1.1.tgz", + "integrity": "sha1-j4ez3UaHld8PCEnZ8JbD57KUUsE=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha1-bjZwSqUb59ShuuJHMepYCDYpPJY=", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/web-pubsub": { + "version": "1.1.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/web-pubsub/-/web-pubsub-1.1.1.tgz", + "integrity": "sha1-OlMyOXjoosbRpz1NhZjZ4TBZ3Bs=", + "license": "MIT", + "dependencies": { + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.0.0", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/logger": "^1.0.0", + "jsonwebtoken": "^9.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/web-pubsub-client": { + "version": "1.0.0-beta.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/web-pubsub-client/-/web-pubsub-client-1.0.0-beta.1.tgz", + "integrity": "sha1-1QlGxL271rdXt+HGlSzUYgRB+a4=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.1", + "@azure/logger": "^1.0.0", + "buffer": "^6.0.0", + "tslib": "^2.2.0", + "ws": "^7.4.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha1-9UShSNOrNYAcH2M6dEH9h8LkhL8=", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/node": { + "version": "14.18.36", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@types/node/-/node-14.18.36.tgz", + "integrity": "sha1-xBQFLLnUP6tn1nnV88ZBvpEfWDU=", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha1-Ks5XhFnMj74qcKqo9S7mO2p0xsY=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "license": "BSD-3-Clause" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/debug/-/debug-4.3.4.tgz", + "integrity": "sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU=", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha1-EVrsQrrFBT2zxFbbMMwkOlqDagc=", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/events/-/events-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha1-USmAAgNSDUNPFCvHj/PBcIAPK0M=", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha1-xZ7yJKBP6LdU89sAY6Jeow0ABdY=", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha1-0Pr5uhzDpWJV/knAlhpn5SDBkm0=", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jws/-/jws-3.2.2.tgz", + "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ms/-/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/semver/-/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha1-Qr/thvV4eutB0DGGbI9AJCng/d8=", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha1-xGSryhWWaVl75flriUNQCyOOYOY=", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ws/-/ws-7.5.9.tgz", + "integrity": "sha1-VPp9sp9MfOxosd3TqJ3gmZQrtZE=", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "license": "ISC" + } + }, + "dependencies": { + "@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha1-eI7nhFelWvihrTQqyxgjg9IRkkk=", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/core-auth": { + "version": "1.4.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-auth/-/core-auth-1.4.0.tgz", + "integrity": "sha1-b6lmHBcFhXgg28IW31ulZlrDap4=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-client": { + "version": "1.7.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-client/-/core-client-1.7.0.tgz", + "integrity": "sha1-7q8ob1kuCRJFK9+WYWRYq6vsHRw=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-rest-pipeline": { + "version": "1.10.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", + "integrity": "sha1-NIKQhHyjG57s+c9d51GarM3TCWg=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "form-data": "^4.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "tslib": "^2.2.0", + "uuid": "^8.3.0" + } + }, + "@azure/core-tracing": { + "version": "1.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-tracing/-/core-tracing-1.0.1.tgz", + "integrity": "sha1-NSo4y+pDjEqDyGsxT0gBfXC6lQM=", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/core-util": { + "version": "1.1.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-util/-/core-util-1.1.1.tgz", + "integrity": "sha1-j4ez3UaHld8PCEnZ8JbD57KUUsE=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/logger": { + "version": "1.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha1-bjZwSqUb59ShuuJHMepYCDYpPJY=", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/web-pubsub": { + "version": "1.1.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/web-pubsub/-/web-pubsub-1.1.1.tgz", + "integrity": "sha1-OlMyOXjoosbRpz1NhZjZ4TBZ3Bs=", + "requires": { + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.0.0", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/logger": "^1.0.0", + "jsonwebtoken": "^9.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/web-pubsub-client": { + "version": "1.0.0-beta.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/web-pubsub-client/-/web-pubsub-client-1.0.0-beta.1.tgz", + "integrity": "sha1-1QlGxL271rdXt+HGlSzUYgRB+a4=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.1", + "@azure/logger": "^1.0.0", + "buffer": "^6.0.0", + "tslib": "^2.2.0", + "ws": "^7.4.5" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha1-9UShSNOrNYAcH2M6dEH9h8LkhL8=" + }, + "@types/node": { + "version": "14.18.36", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@types/node/-/node-14.18.36.tgz", + "integrity": "sha1-xBQFLLnUP6tn1nnV88ZBvpEfWDU=", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", + "requires": { + "debug": "4" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=" + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha1-Ks5XhFnMj74qcKqo9S7mO2p0xsY=", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/debug/-/debug-4.3.4.tgz", + "integrity": "sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU=", + "requires": { + "ms": "2.1.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha1-EVrsQrrFBT2zxFbbMMwkOlqDagc=" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "events": { + "version": "3.3.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/events/-/events-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha1-USmAAgNSDUNPFCvHj/PBcIAPK0M=", + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha1-xZ7yJKBP6LdU89sAY6Jeow0ABdY=", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=" + }, + "jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha1-0Pr5uhzDpWJV/knAlhpn5SDBkm0=", + "requires": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jws/-/jws-3.2.2.tgz", + "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "requires": { + "yallist": "^4.0.0" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", + "requires": { + "mime-db": "1.52.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ms/-/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + }, + "semver": { + "version": "7.3.8", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/semver/-/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha1-Qr/thvV4eutB0DGGbI9AJCng/d8=" + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha1-xGSryhWWaVl75flriUNQCyOOYOY=", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=" + }, + "ws": { + "version": "7.5.9", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ws/-/ws-7.5.9.tgz", + "integrity": "sha1-VPp9sp9MfOxosd3TqJ3gmZQrtZE=", + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" + } + } +} diff --git a/samples/javascript/clientpubsub-client-sdk/publisher/package.json b/samples/javascript/clientpubsub-client-sdk/publisher/package.json new file mode 100644 index 000000000..c6fa28bb0 --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/publisher/package.json @@ -0,0 +1,24 @@ +{ + "name": "clientpubsub-client-sdk", + "version": "1.0.0", + "description": "Client publisher with client SDK", + "main": "index.js", + "engines": { + "node": ">=14.0.0" + }, + "scripts": { + "start": "tsc && node dist/index.js" + }, + "author": "chenyl", + "license": "MIT", + "dependencies": { + "@azure/web-pubsub": "^1.1.0", + "@azure/web-pubsub-client": "^1.0.0-beta.1", + "dotenv": "^16.0.3", + "events": "latest" + }, + "devDependencies": { + "@types/node": "^14.0.0", + "typescript": "~4.8.0" + } +} diff --git a/samples/javascript/clientpubsub-client-sdk/publisher/src/index.ts b/samples/javascript/clientpubsub-client-sdk/publisher/src/index.ts new file mode 100644 index 000000000..3bb44a7ce --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/publisher/src/index.ts @@ -0,0 +1,51 @@ +import { + WebPubSubClient, + WebPubSubClientCredential, + SendToGroupOptions, + GetClientAccessUrlOptions, +} from "@azure/web-pubsub-client"; +import { WebPubSubServiceClient } from "@azure/web-pubsub"; +import readline from "readline"; +require('dotenv').config({ path: '../.env' }); + +const hubName = "sample_chat"; +const groupName = "testGroup"; +const serviceClient = new WebPubSubServiceClient(process.env.WPS_CONNECTION_STRING!, hubName); + +const fetchClientAccessUrl = async (_: GetClientAccessUrlOptions) => { + return ( + await serviceClient.getClientAccessToken({ + roles: [`webpubsub.joinLeaveGroup.${groupName}`, `webpubsub.sendToGroup.${groupName}`], + }) + ).url; +}; + +async function main() { + let client = new WebPubSubClient({ + getClientAccessUrl: fetchClientAccessUrl, + } as WebPubSubClientCredential); + + client.on("connected", (e) => { + console.log(`Connection ${e.connectionId} is connected.`); + }); + + client.on("disconnected", (e) => { + console.log(`Connection disconnected: ${e.message}`); + }); + + await client.start(); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + rl.on('line', async data => { + await client.sendToGroup(groupName, data, "text"); + }) +} + +main().catch((e) => { + console.error("Sample encountered an error", e); + process.exit(1); +}); diff --git a/samples/javascript/clientpubsub-client-sdk/publisher/tsconfig.json b/samples/javascript/clientpubsub-client-sdk/publisher/tsconfig.json new file mode 100644 index 000000000..e26ce2a6d --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/publisher/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "moduleResolution": "node", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "alwaysStrict": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": [ + "src/**.ts" + ] +} diff --git a/samples/javascript/clientpubsub-client-sdk/subscriber/package-lock.json b/samples/javascript/clientpubsub-client-sdk/subscriber/package-lock.json new file mode 100644 index 000000000..1dc20f86a --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/subscriber/package-lock.json @@ -0,0 +1,864 @@ +{ + "name": "clientpubsub-client-sdk", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "clientpubsub-client-sdk", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@azure/web-pubsub": "^1.1.0", + "@azure/web-pubsub-client": "^1.0.0-beta.1", + "dotenv": "^16.0.3", + "events": "latest" + }, + "devDependencies": { + "@types/node": "^14.0.0", + "typescript": "~4.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha1-eI7nhFelWvihrTQqyxgjg9IRkkk=", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.4.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-auth/-/core-auth-1.4.0.tgz", + "integrity": "sha1-b6lmHBcFhXgg28IW31ulZlrDap4=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.7.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-client/-/core-client-1.7.0.tgz", + "integrity": "sha1-7q8ob1kuCRJFK9+WYWRYq6vsHRw=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.10.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", + "integrity": "sha1-NIKQhHyjG57s+c9d51GarM3TCWg=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "form-data": "^4.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "tslib": "^2.2.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-tracing/-/core-tracing-1.0.1.tgz", + "integrity": "sha1-NSo4y+pDjEqDyGsxT0gBfXC6lQM=", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.1.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-util/-/core-util-1.1.1.tgz", + "integrity": "sha1-j4ez3UaHld8PCEnZ8JbD57KUUsE=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha1-bjZwSqUb59ShuuJHMepYCDYpPJY=", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/web-pubsub": { + "version": "1.1.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/web-pubsub/-/web-pubsub-1.1.1.tgz", + "integrity": "sha1-OlMyOXjoosbRpz1NhZjZ4TBZ3Bs=", + "license": "MIT", + "dependencies": { + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.0.0", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/logger": "^1.0.0", + "jsonwebtoken": "^9.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/web-pubsub-client": { + "version": "1.0.0-beta.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/web-pubsub-client/-/web-pubsub-client-1.0.0-beta.1.tgz", + "integrity": "sha1-1QlGxL271rdXt+HGlSzUYgRB+a4=", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.1", + "@azure/logger": "^1.0.0", + "buffer": "^6.0.0", + "tslib": "^2.2.0", + "ws": "^7.4.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha1-9UShSNOrNYAcH2M6dEH9h8LkhL8=", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/node": { + "version": "14.18.36", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@types/node/-/node-14.18.36.tgz", + "integrity": "sha1-xBQFLLnUP6tn1nnV88ZBvpEfWDU=", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha1-Ks5XhFnMj74qcKqo9S7mO2p0xsY=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "license": "BSD-3-Clause" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/debug/-/debug-4.3.4.tgz", + "integrity": "sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU=", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha1-EVrsQrrFBT2zxFbbMMwkOlqDagc=", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/events/-/events-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha1-USmAAgNSDUNPFCvHj/PBcIAPK0M=", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha1-xZ7yJKBP6LdU89sAY6Jeow0ABdY=", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha1-0Pr5uhzDpWJV/knAlhpn5SDBkm0=", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jws/-/jws-3.2.2.tgz", + "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ms/-/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/semver/-/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha1-Qr/thvV4eutB0DGGbI9AJCng/d8=", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha1-xGSryhWWaVl75flriUNQCyOOYOY=", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ws/-/ws-7.5.9.tgz", + "integrity": "sha1-VPp9sp9MfOxosd3TqJ3gmZQrtZE=", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "license": "ISC" + } + }, + "dependencies": { + "@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha1-eI7nhFelWvihrTQqyxgjg9IRkkk=", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/core-auth": { + "version": "1.4.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-auth/-/core-auth-1.4.0.tgz", + "integrity": "sha1-b6lmHBcFhXgg28IW31ulZlrDap4=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-client": { + "version": "1.7.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-client/-/core-client-1.7.0.tgz", + "integrity": "sha1-7q8ob1kuCRJFK9+WYWRYq6vsHRw=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-rest-pipeline": { + "version": "1.10.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", + "integrity": "sha1-NIKQhHyjG57s+c9d51GarM3TCWg=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "form-data": "^4.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "tslib": "^2.2.0", + "uuid": "^8.3.0" + } + }, + "@azure/core-tracing": { + "version": "1.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-tracing/-/core-tracing-1.0.1.tgz", + "integrity": "sha1-NSo4y+pDjEqDyGsxT0gBfXC6lQM=", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/core-util": { + "version": "1.1.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/core-util/-/core-util-1.1.1.tgz", + "integrity": "sha1-j4ez3UaHld8PCEnZ8JbD57KUUsE=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/logger": { + "version": "1.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha1-bjZwSqUb59ShuuJHMepYCDYpPJY=", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/web-pubsub": { + "version": "1.1.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/web-pubsub/-/web-pubsub-1.1.1.tgz", + "integrity": "sha1-OlMyOXjoosbRpz1NhZjZ4TBZ3Bs=", + "requires": { + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.0.0", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/logger": "^1.0.0", + "jsonwebtoken": "^9.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/web-pubsub-client": { + "version": "1.0.0-beta.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@azure/web-pubsub-client/-/web-pubsub-client-1.0.0-beta.1.tgz", + "integrity": "sha1-1QlGxL271rdXt+HGlSzUYgRB+a4=", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.1", + "@azure/logger": "^1.0.0", + "buffer": "^6.0.0", + "tslib": "^2.2.0", + "ws": "^7.4.5" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha1-9UShSNOrNYAcH2M6dEH9h8LkhL8=" + }, + "@types/node": { + "version": "14.18.36", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/@types/node/-/node-14.18.36.tgz", + "integrity": "sha1-xBQFLLnUP6tn1nnV88ZBvpEfWDU=", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", + "requires": { + "debug": "4" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=" + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha1-Ks5XhFnMj74qcKqo9S7mO2p0xsY=", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/debug/-/debug-4.3.4.tgz", + "integrity": "sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU=", + "requires": { + "ms": "2.1.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha1-EVrsQrrFBT2zxFbbMMwkOlqDagc=" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "events": { + "version": "3.3.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/events/-/events-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha1-USmAAgNSDUNPFCvHj/PBcIAPK0M=", + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha1-xZ7yJKBP6LdU89sAY6Jeow0ABdY=", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=" + }, + "jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha1-0Pr5uhzDpWJV/knAlhpn5SDBkm0=", + "requires": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/jws/-/jws-3.2.2.tgz", + "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "requires": { + "yallist": "^4.0.0" + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", + "requires": { + "mime-db": "1.52.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ms/-/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + }, + "semver": { + "version": "7.3.8", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/semver/-/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha1-Qr/thvV4eutB0DGGbI9AJCng/d8=" + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha1-xGSryhWWaVl75flriUNQCyOOYOY=", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=" + }, + "ws": { + "version": "7.5.9", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/ws/-/ws-7.5.9.tgz", + "integrity": "sha1-VPp9sp9MfOxosd3TqJ3gmZQrtZE=", + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://msazure.pkgs.visualstudio.com/_packaging/AzurePortal/npm/registry/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" + } + } +} diff --git a/samples/javascript/clientpubsub-client-sdk/subscriber/package.json b/samples/javascript/clientpubsub-client-sdk/subscriber/package.json new file mode 100644 index 000000000..4faa977f4 --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/subscriber/package.json @@ -0,0 +1,24 @@ +{ + "name": "clientpubsub-client-sdk", + "version": "1.0.0", + "description": "Client subscriber with client SDK", + "main": "index.js", + "engines": { + "node": ">=14.0.0" + }, + "scripts": { + "start": "tsc && node dist/index.js" + }, + "author": "chenyl", + "license": "MIT", + "dependencies": { + "@azure/web-pubsub": "^1.1.0", + "@azure/web-pubsub-client": "^1.0.0-beta.1", + "dotenv": "^16.0.3", + "events": "latest" + }, + "devDependencies": { + "@types/node": "^14.0.0", + "typescript": "~4.8.0" + } +} diff --git a/samples/javascript/clientpubsub-client-sdk/subscriber/src/index.ts b/samples/javascript/clientpubsub-client-sdk/subscriber/src/index.ts new file mode 100644 index 000000000..350f06894 --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/subscriber/src/index.ts @@ -0,0 +1,61 @@ +import { + WebPubSubClient, + WebPubSubClientCredential, + SendToGroupOptions, + GetClientAccessUrlOptions, +} from "@azure/web-pubsub-client"; +import { WebPubSubServiceClient } from "@azure/web-pubsub"; +import readline from "readline"; +require('dotenv').config({ path: '../.env' }); + +const hubName = "sample_chat"; +const groupName = "testGroup"; +const serviceClient = new WebPubSubServiceClient(process.env.WPS_CONNECTION_STRING!, hubName); + +const fetchClientAccessUrl = async (_: GetClientAccessUrlOptions) => { + return ( + await serviceClient.getClientAccessToken({ + roles: [`webpubsub.joinLeaveGroup.${groupName}`, `webpubsub.sendToGroup.${groupName}`], + }) + ).url; +}; + +async function main() { + let client = new WebPubSubClient({ + getClientAccessUrl: fetchClientAccessUrl, + } as WebPubSubClientCredential); + + client.on("connected", (e) => { + console.log(`Connection ${e.connectionId} is connected.`); + }); + + client.on("disconnected", (e) => { + console.log(`Connection disconnected: ${e.message}`); + }); + + client.on("group-message", (e) => { + if (e.message.data instanceof ArrayBuffer) { + console.log( + `Received message from ${e.message.group} ${Buffer.from(e.message.data).toString("base64")}` + ); + } else { + console.log(`Received message from ${e.message.group} ${e.message.data}`); + } + }); + + await client.start(); + await client.joinGroup(groupName); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + rl.on('line', _ => { + }) +} + +main().catch((e) => { + console.error("Sample encountered an error", e); + process.exit(1); +}); diff --git a/samples/javascript/clientpubsub-client-sdk/subscriber/tsconfig.json b/samples/javascript/clientpubsub-client-sdk/subscriber/tsconfig.json new file mode 100644 index 000000000..e26ce2a6d --- /dev/null +++ b/samples/javascript/clientpubsub-client-sdk/subscriber/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "moduleResolution": "node", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "alwaysStrict": true, + "outDir": "dist", + "rootDir": "src" + }, + "include": [ + "src/**.ts" + ] +}