@azure/web-pubsub 1.0.0-beta.2 → 1.0.1-alpha.20211215.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +118 -31
  3. package/dist/index.js +1315 -567
  4. package/dist/index.js.map +1 -1
  5. package/dist-esm/samples-dev/broadcasting.js +16 -16
  6. package/dist-esm/samples-dev/broadcasting.js.map +1 -1
  7. package/dist-esm/samples-dev/directMessage.js +9 -9
  8. package/dist-esm/samples-dev/directMessage.js.map +1 -1
  9. package/dist-esm/samples-dev/managingGroups.js +11 -12
  10. package/dist-esm/samples-dev/managingGroups.js.map +1 -1
  11. package/dist-esm/src/generated/generatedClient.js +23 -0
  12. package/dist-esm/src/generated/generatedClient.js.map +1 -0
  13. package/dist-esm/src/generated/generatedClientContext.js +41 -0
  14. package/dist-esm/src/generated/generatedClientContext.js.map +1 -0
  15. package/dist-esm/src/generated/index.js +10 -2
  16. package/dist-esm/src/generated/index.js.map +1 -1
  17. package/dist-esm/src/generated/models/index.js +13 -1
  18. package/dist-esm/src/generated/models/index.js.map +1 -1
  19. package/dist-esm/src/generated/models/mappers.js +368 -0
  20. package/dist-esm/src/generated/models/mappers.js.map +1 -0
  21. package/dist-esm/src/generated/models/parameters.js +124 -43
  22. package/dist-esm/src/generated/models/parameters.js.map +1 -1
  23. package/dist-esm/src/generated/operations/healthApi.js +16 -11
  24. package/dist-esm/src/generated/operations/healthApi.js.map +1 -1
  25. package/dist-esm/src/generated/operations/index.js +7 -0
  26. package/dist-esm/src/generated/operations/index.js.map +1 -1
  27. package/dist-esm/src/generated/operations/webPubSub.js +341 -175
  28. package/dist-esm/src/generated/operations/webPubSub.js.map +1 -1
  29. package/dist-esm/src/generated/operationsInterfaces/healthApi.js +9 -0
  30. package/dist-esm/src/generated/operationsInterfaces/healthApi.js.map +1 -0
  31. package/dist-esm/src/generated/operationsInterfaces/index.js +10 -0
  32. package/dist-esm/src/generated/operationsInterfaces/index.js.map +1 -0
  33. package/dist-esm/src/generated/operationsInterfaces/webPubSub.js +9 -0
  34. package/dist-esm/src/generated/operationsInterfaces/webPubSub.js.map +1 -0
  35. package/dist-esm/src/groupClient.js +74 -92
  36. package/dist-esm/src/groupClient.js.map +1 -1
  37. package/dist-esm/src/hubClient.js +280 -196
  38. package/dist-esm/src/hubClient.js.map +1 -1
  39. package/dist-esm/src/index.js.map +1 -1
  40. package/dist-esm/src/logger.js +1 -1
  41. package/dist-esm/src/logger.js.map +1 -1
  42. package/dist-esm/src/parseConnectionString.js +3 -1
  43. package/dist-esm/src/parseConnectionString.js.map +1 -1
  44. package/dist-esm/src/reverseProxyPolicy.js +21 -0
  45. package/dist-esm/src/reverseProxyPolicy.js.map +1 -0
  46. package/dist-esm/src/utils.js +8 -6
  47. package/dist-esm/src/utils.js.map +1 -1
  48. package/dist-esm/src/webPubSubCredentialPolicy.js +18 -18
  49. package/dist-esm/src/webPubSubCredentialPolicy.js.map +1 -1
  50. package/dist-esm/test/conn.spec.js +7 -8
  51. package/dist-esm/test/conn.spec.js.map +1 -1
  52. package/dist-esm/test/groups.spec.js +39 -38
  53. package/dist-esm/test/groups.spec.js.map +1 -1
  54. package/dist-esm/test/hubs.spec.js +95 -49
  55. package/dist-esm/test/hubs.spec.js.map +1 -1
  56. package/dist-esm/test/integration.spec.js +128 -0
  57. package/dist-esm/test/integration.spec.js.map +1 -0
  58. package/dist-esm/test/testEnv.js +5 -1
  59. package/dist-esm/test/testEnv.js.map +1 -1
  60. package/package.json +37 -36
  61. package/types/web-pubsub.d.ts +186 -138
  62. package/dist-esm/src/generated/azureWebPubSubServiceRestAPI.js +0 -15
  63. package/dist-esm/src/generated/azureWebPubSubServiceRestAPI.js.map +0 -1
  64. package/dist-esm/src/generated/azureWebPubSubServiceRestAPIContext.js +0 -34
  65. package/dist-esm/src/generated/azureWebPubSubServiceRestAPIContext.js.map +0 -1
  66. package/dist-esm/src/normalizeOptions.js +0 -8
  67. package/dist-esm/src/normalizeOptions.js.map +0 -1
@@ -1,26 +1,23 @@
1
- import { __awaiter } from "tslib";
2
1
  // Copyright (c) Microsoft Corporation.
3
2
  // Licensed under the MIT license.
4
3
  /* eslint-disable no-invalid-this */
5
- import { env, record } from "@azure/test-utils-recorder";
4
+ import { env, record, isLiveMode } from "@azure-tools/test-recorder";
6
5
  import { WebPubSubServiceClient, AzureKeyCredential } from "../src";
7
- import * as assert from "assert";
6
+ import { assert } from "chai";
8
7
  import environmentSetup from "./testEnv";
8
+ import { DefaultAzureCredential } from "@azure/identity";
9
+ /* eslint-disable @typescript-eslint/no-invalid-this */
9
10
  describe("HubClient", function () {
10
11
  let recorder;
11
12
  beforeEach(function () {
12
13
  recorder = record(this, environmentSetup);
13
14
  });
14
- afterEach(function () {
15
+ afterEach(async function () {
15
16
  if (recorder) {
16
- recorder.stop();
17
+ await recorder.stop();
17
18
  }
18
19
  });
19
20
  describe("Constructing a HubClient", () => {
20
- let cred;
21
- beforeEach(function () {
22
- cred = new AzureKeyCredential(env.WPS_API_KEY);
23
- });
24
21
  it("takes a connection string, hub name, and options", () => {
25
22
  assert.doesNotThrow(() => {
26
23
  new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, "test-hub", {
@@ -30,77 +27,126 @@ describe("HubClient", function () {
30
27
  });
31
28
  it("takes an endpoint, an API key, a hub name, and options", () => {
32
29
  assert.doesNotThrow(() => {
33
- new WebPubSubServiceClient(env.ENDPOINT, cred, "test-hub", {
30
+ new WebPubSubServiceClient(env.ENDPOINT, new AzureKeyCredential(env.WPS_API_KEY), "test-hub", {
31
+ retryOptions: { maxRetries: 2 }
32
+ });
33
+ });
34
+ });
35
+ it("takes an endpoint, DefaultAzureCredential, a hub name, and options", () => {
36
+ assert.doesNotThrow(() => {
37
+ new WebPubSubServiceClient(env.ENDPOINT, new DefaultAzureCredential(), "test-hub", {
34
38
  retryOptions: { maxRetries: 2 }
35
39
  });
36
40
  });
37
41
  });
38
42
  });
39
43
  describe("Working with a hub", function () {
40
- this.timeout(30000);
41
44
  let client;
45
+ let lastResponse;
46
+ function onResponse(response) {
47
+ lastResponse = response;
48
+ }
42
49
  beforeEach(function () {
43
50
  client = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, "simplechat");
44
51
  });
45
- it("can broadcast", () => __awaiter(this, void 0, void 0, function* () {
46
- let res = yield client.sendToAll("hello", { contentType: "text/plain" });
47
- assert.equal(res._response.status, 202);
48
- res = yield client.sendToAll({ x: 1, y: 2 });
49
- assert.equal(res._response.status, 202);
52
+ it("can broadcast", async () => {
53
+ await client.sendToAll("hello", { contentType: "text/plain", onResponse });
54
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
55
+ await client.sendToAll({ x: 1, y: 2 }, { onResponse });
56
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
50
57
  const binaryMessage = new Uint8Array(10);
51
- res = yield client.sendToAll(binaryMessage.buffer);
52
- assert.equal(res._response.status, 202);
53
- }));
54
- it("can send messages to a user", () => __awaiter(this, void 0, void 0, function* () {
55
- let res = yield client.sendToUser("brian", "hello", { contentType: "text/plain" });
56
- assert.equal(res._response.status, 202);
57
- res = yield client.sendToUser("brian", { x: 1, y: 2 });
58
- assert.equal(res._response.status, 202);
58
+ await client.sendToAll(binaryMessage.buffer, { onResponse });
59
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
60
+ });
61
+ it("can broadcast using the DAC", async () => {
62
+ const dacClient = new WebPubSubServiceClient(env.ENDPOINT, new DefaultAzureCredential(), "simplechat");
63
+ await dacClient.sendToAll("hello", { contentType: "text/plain", onResponse });
64
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
65
+ await dacClient.sendToAll({ x: 1, y: 2 }, { onResponse });
66
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
59
67
  const binaryMessage = new Uint8Array(10);
60
- res = yield client.sendToUser("brian", binaryMessage.buffer);
61
- assert.equal(res._response.status, 202);
62
- }));
63
- it("can send messages to a connection", () => __awaiter(this, void 0, void 0, function* () {
64
- let res = yield client.sendToConnection("xxxx", "hello", { contentType: "text/plain" });
65
- assert.equal(res._response.status, 202);
66
- res = yield client.sendToConnection("xxxx", { x: 1, y: 2 });
67
- assert.equal(res._response.status, 202);
68
+ await dacClient.sendToAll(binaryMessage.buffer, { onResponse });
69
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
70
+ });
71
+ it("can broadcast using APIM", async () => {
72
+ const apimClient = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, "simplechat", {
73
+ reverseProxyEndpoint: env.REVERSE_PROXY_ENDPOINT
74
+ });
75
+ await apimClient.sendToAll("hello", { contentType: "text/plain", onResponse });
76
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
77
+ await apimClient.sendToAll({ x: 1, y: 2 }, { onResponse });
78
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
68
79
  const binaryMessage = new Uint8Array(10);
69
- res = yield client.sendToConnection("xxxx", binaryMessage.buffer);
70
- assert.equal(res._response.status, 202);
71
- }));
72
- it("can manage users", () => __awaiter(this, void 0, void 0, function* () {
73
- const res = yield client.hasUser("foo");
80
+ await apimClient.sendToAll(binaryMessage.buffer, { onResponse });
81
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
82
+ });
83
+ it("can send messages to a user", async () => {
84
+ await client.sendToUser("brian", "hello", {
85
+ contentType: "text/plain",
86
+ onResponse
87
+ });
88
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
89
+ await client.sendToUser("brian", { x: 1, y: 2 }, { onResponse });
90
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
91
+ const binaryMessage = new Uint8Array(10);
92
+ await client.sendToUser("brian", binaryMessage.buffer, { onResponse });
93
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
94
+ });
95
+ it("can send messages to a connection", async () => {
96
+ await client.sendToConnection("xxxx", "hello", { contentType: "text/plain", onResponse });
97
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
98
+ await client.sendToConnection("xxxx", { x: 1, y: 2 }, { onResponse });
99
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
100
+ const binaryMessage = new Uint8Array(10);
101
+ await client.sendToConnection("xxxx", binaryMessage.buffer, { onResponse });
102
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 202);
103
+ });
104
+ // `removeUserFromAllGroups` always times out.
105
+ it.skip("can manage users", async () => {
106
+ this.timeout(Infinity);
107
+ const res = await client.userExists("foo");
74
108
  assert.ok(!res);
75
- const res2 = yield client.removeUserFromAllGroups("brian");
76
- assert.equal(res2._response.status, 200);
77
- }));
78
- it("can check if a connection exists", () => __awaiter(this, void 0, void 0, function* () {
79
- const res = yield client.hasConnection("xxx");
109
+ await client.removeUserFromAllGroups("brian", { onResponse });
110
+ assert.equal(lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.status, 200);
111
+ });
112
+ it("can check if a connection exists", async function () {
113
+ // likely bug in recorder for this test - recording not generating properly
114
+ if (!isLiveMode())
115
+ this.skip();
116
+ const res = await client.connectionExists("xxx");
80
117
  assert.ok(!res);
81
- }));
82
- it("can grant permissions to connections", () => __awaiter(this, void 0, void 0, function* () {
118
+ });
119
+ it("can grant permissions to connections", async () => {
83
120
  let error;
84
121
  try {
85
- yield client.grantPermission("xxx", "joinLeaveGroup", { targetName: "x" });
122
+ await client.grantPermission("xxx", "joinLeaveGroup", { targetName: "x" });
86
123
  }
87
124
  catch (e) {
88
125
  error = e;
89
126
  }
90
127
  // grantPermission validates connection ids, so we expect an error here.
91
128
  assert.equal(error.statusCode, 404);
92
- }));
93
- it("can revoke permissions from connections", () => __awaiter(this, void 0, void 0, function* () {
129
+ });
130
+ it("can revoke permissions from connections", async function () {
131
+ // likely bug in recorder for this test - recording not generating properly
132
+ if (!isLiveMode())
133
+ this.skip();
94
134
  let error;
95
135
  try {
96
- yield client.revokePermission("xxx", "joinLeaveGroup", { targetName: "x" });
136
+ await client.revokePermission("xxx", "joinLeaveGroup", { targetName: "x" });
97
137
  }
98
138
  catch (e) {
99
139
  error = e;
100
140
  }
101
141
  // grantPermission validates connection ids, so we expect an error here.
102
142
  assert.equal(error.statusCode, 404);
103
- }));
143
+ });
144
+ // service API doesn't work yet.
145
+ it.skip("can generate client tokens", async () => {
146
+ await client.getClientAccessToken({
147
+ userId: "brian"
148
+ });
149
+ });
104
150
  });
105
151
  });
106
152
  //# sourceMappingURL=hubs.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hubs.spec.js","sourceRoot":"","sources":["../../test/hubs.spec.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;AAClC,oCAAoC;AACpC,OAAO,EAAE,GAAG,EAAY,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACpE,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,gBAAgB,MAAM,WAAW,CAAC;AAEzC,QAAQ,CAAC,WAAW,EAAE;IACpB,IAAI,QAAkB,CAAC;IACvB,UAAU,CAAC;QACT,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC;QACR,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,IAAI,EAAE,CAAC;SACjB;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,IAAI,IAAwB,CAAC;QAC7B,UAAU,CAAC;YACT,IAAI,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE;gBACvB,IAAI,sBAAsB,CAAC,GAAG,CAAC,qBAAqB,EAAE,UAAU,EAAE;oBAChE,YAAY,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;iBAChC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE;gBACvB,IAAI,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;oBACzD,YAAY,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;iBAChC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,MAA8B,CAAC;QACnC,UAAU,CAAC;YACT,MAAM,GAAG,IAAI,sBAAsB,CAAC,GAAG,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,GAAS,EAAE;YAC7B,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAExC,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAExC,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;YACzC,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAS,EAAE;YAC3C,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YACnF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAExC,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAExC,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;YACzC,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAS,EAAE;YACjD,IAAI,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YACxF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAExC,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;YAEzC,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,GAAS,EAAE;YAChC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAEhB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAS,EAAE;YAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAS,EAAE;YACpD,IAAI,KAAK,CAAC;YACV,IAAI;gBACF,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;aAC5E;YAAC,OAAO,CAAC,EAAE;gBACV,KAAK,GAAG,CAAC,CAAC;aACX;YACD,wEAAwE;YACxE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAA,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAS,EAAE;YACvD,IAAI,KAAK,CAAC;YACV,IAAI;gBACF,MAAM,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;aAC7E;YAAC,OAAO,CAAC,EAAE;gBACV,KAAK,GAAG,CAAC,CAAC;aACX;YACD,wEAAwE;YACxE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC,CAAA,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/* eslint-disable no-invalid-this */\nimport { env, Recorder, record } from \"@azure/test-utils-recorder\";\nimport { WebPubSubServiceClient, AzureKeyCredential } from \"../src\";\nimport * as assert from \"assert\";\nimport environmentSetup from \"./testEnv\";\n\ndescribe(\"HubClient\", function() {\n let recorder: Recorder;\n beforeEach(function() {\n recorder = record(this, environmentSetup);\n });\n\n afterEach(function() {\n if (recorder) {\n recorder.stop();\n }\n });\n\n describe(\"Constructing a HubClient\", () => {\n let cred: AzureKeyCredential;\n beforeEach(function() {\n cred = new AzureKeyCredential(env.WPS_API_KEY);\n });\n\n it(\"takes a connection string, hub name, and options\", () => {\n assert.doesNotThrow(() => {\n new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, \"test-hub\", {\n retryOptions: { maxRetries: 2 }\n });\n });\n });\n\n it(\"takes an endpoint, an API key, a hub name, and options\", () => {\n assert.doesNotThrow(() => {\n new WebPubSubServiceClient(env.ENDPOINT, cred, \"test-hub\", {\n retryOptions: { maxRetries: 2 }\n });\n });\n });\n });\n\n describe(\"Working with a hub\", function() {\n this.timeout(30000);\n let client: WebPubSubServiceClient;\n beforeEach(function() {\n client = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, \"simplechat\");\n });\n\n it(\"can broadcast\", async () => {\n let res = await client.sendToAll(\"hello\", { contentType: \"text/plain\" });\n assert.equal(res._response.status, 202);\n\n res = await client.sendToAll({ x: 1, y: 2 });\n assert.equal(res._response.status, 202);\n\n const binaryMessage = new Uint8Array(10);\n res = await client.sendToAll(binaryMessage.buffer);\n assert.equal(res._response.status, 202);\n });\n\n it(\"can send messages to a user\", async () => {\n let res = await client.sendToUser(\"brian\", \"hello\", { contentType: \"text/plain\" });\n assert.equal(res._response.status, 202);\n\n res = await client.sendToUser(\"brian\", { x: 1, y: 2 });\n assert.equal(res._response.status, 202);\n\n const binaryMessage = new Uint8Array(10);\n res = await client.sendToUser(\"brian\", binaryMessage.buffer);\n assert.equal(res._response.status, 202);\n });\n\n it(\"can send messages to a connection\", async () => {\n let res = await client.sendToConnection(\"xxxx\", \"hello\", { contentType: \"text/plain\" });\n assert.equal(res._response.status, 202);\n\n res = await client.sendToConnection(\"xxxx\", { x: 1, y: 2 });\n assert.equal(res._response.status, 202);\n const binaryMessage = new Uint8Array(10);\n\n res = await client.sendToConnection(\"xxxx\", binaryMessage.buffer);\n assert.equal(res._response.status, 202);\n });\n\n it(\"can manage users\", async () => {\n const res = await client.hasUser(\"foo\");\n assert.ok(!res);\n\n const res2 = await client.removeUserFromAllGroups(\"brian\");\n assert.equal(res2._response.status, 200);\n });\n\n it(\"can check if a connection exists\", async () => {\n const res = await client.hasConnection(\"xxx\");\n assert.ok(!res);\n });\n\n it(\"can grant permissions to connections\", async () => {\n let error;\n try {\n await client.grantPermission(\"xxx\", \"joinLeaveGroup\", { targetName: \"x\" });\n } catch (e) {\n error = e;\n }\n // grantPermission validates connection ids, so we expect an error here.\n assert.equal(error.statusCode, 404);\n });\n\n it(\"can revoke permissions from connections\", async () => {\n let error;\n try {\n await client.revokePermission(\"xxx\", \"joinLeaveGroup\", { targetName: \"x\" });\n } catch (e) {\n error = e;\n }\n // grantPermission validates connection ids, so we expect an error here.\n assert.equal(error.statusCode, 404);\n });\n });\n});\n"]}
1
+ {"version":3,"file":"hubs.spec.js","sourceRoot":"","sources":["../../test/hubs.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/* eslint-disable no-invalid-this */\nimport { env, Recorder, record, isLiveMode } from \"@azure-tools/test-recorder\";\nimport { WebPubSubServiceClient, AzureKeyCredential } from \"../src\";\nimport { assert } from \"chai\";\nimport environmentSetup from \"./testEnv\";\nimport { FullOperationResponse } from \"@azure/core-client\";\nimport { DefaultAzureCredential } from \"@azure/identity\";\n/* eslint-disable @typescript-eslint/no-invalid-this */\n\ndescribe(\"HubClient\", function() {\n let recorder: Recorder;\n beforeEach(function() {\n recorder = record(this, environmentSetup);\n });\n\n afterEach(async function() {\n if (recorder) {\n await recorder.stop();\n }\n });\n\n describe(\"Constructing a HubClient\", () => {\n it(\"takes a connection string, hub name, and options\", () => {\n assert.doesNotThrow(() => {\n new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, \"test-hub\", {\n retryOptions: { maxRetries: 2 }\n });\n });\n });\n\n it(\"takes an endpoint, an API key, a hub name, and options\", () => {\n assert.doesNotThrow(() => {\n new WebPubSubServiceClient(\n env.ENDPOINT,\n new AzureKeyCredential(env.WPS_API_KEY),\n \"test-hub\",\n {\n retryOptions: { maxRetries: 2 }\n }\n );\n });\n });\n\n it(\"takes an endpoint, DefaultAzureCredential, a hub name, and options\", () => {\n assert.doesNotThrow(() => {\n new WebPubSubServiceClient(env.ENDPOINT, new DefaultAzureCredential(), \"test-hub\", {\n retryOptions: { maxRetries: 2 }\n });\n });\n });\n });\n\n describe(\"Working with a hub\", function() {\n let client: WebPubSubServiceClient;\n let lastResponse: FullOperationResponse | undefined;\n function onResponse(response: FullOperationResponse) {\n lastResponse = response;\n }\n beforeEach(function() {\n client = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, \"simplechat\");\n });\n\n it(\"can broadcast\", async () => {\n await client.sendToAll(\"hello\", { contentType: \"text/plain\", onResponse });\n assert.equal(lastResponse?.status, 202);\n\n await client.sendToAll({ x: 1, y: 2 }, { onResponse });\n assert.equal(lastResponse?.status, 202);\n\n const binaryMessage = new Uint8Array(10);\n await client.sendToAll(binaryMessage.buffer, { onResponse });\n assert.equal(lastResponse?.status, 202);\n });\n\n it(\"can broadcast using the DAC\", async () => {\n const dacClient = new WebPubSubServiceClient(\n env.ENDPOINT,\n new DefaultAzureCredential(),\n \"simplechat\"\n );\n\n await dacClient.sendToAll(\"hello\", { contentType: \"text/plain\", onResponse });\n assert.equal(lastResponse?.status, 202);\n\n await dacClient.sendToAll({ x: 1, y: 2 }, { onResponse });\n assert.equal(lastResponse?.status, 202);\n\n const binaryMessage = new Uint8Array(10);\n await dacClient.sendToAll(binaryMessage.buffer, { onResponse });\n assert.equal(lastResponse?.status, 202);\n });\n\n it(\"can broadcast using APIM\", async () => {\n const apimClient = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, \"simplechat\", {\n reverseProxyEndpoint: env.REVERSE_PROXY_ENDPOINT\n });\n\n await apimClient.sendToAll(\"hello\", { contentType: \"text/plain\", onResponse });\n assert.equal(lastResponse?.status, 202);\n\n await apimClient.sendToAll({ x: 1, y: 2 }, { onResponse });\n assert.equal(lastResponse?.status, 202);\n\n const binaryMessage = new Uint8Array(10);\n await apimClient.sendToAll(binaryMessage.buffer, { onResponse });\n assert.equal(lastResponse?.status, 202);\n });\n\n it(\"can send messages to a user\", async () => {\n await client.sendToUser(\"brian\", \"hello\", {\n contentType: \"text/plain\",\n onResponse\n });\n assert.equal(lastResponse?.status, 202);\n\n await client.sendToUser(\"brian\", { x: 1, y: 2 }, { onResponse });\n assert.equal(lastResponse?.status, 202);\n\n const binaryMessage = new Uint8Array(10);\n await client.sendToUser(\"brian\", binaryMessage.buffer, { onResponse });\n assert.equal(lastResponse?.status, 202);\n });\n\n it(\"can send messages to a connection\", async () => {\n await client.sendToConnection(\"xxxx\", \"hello\", { contentType: \"text/plain\", onResponse });\n assert.equal(lastResponse?.status, 202);\n\n await client.sendToConnection(\"xxxx\", { x: 1, y: 2 }, { onResponse });\n assert.equal(lastResponse?.status, 202);\n const binaryMessage = new Uint8Array(10);\n\n await client.sendToConnection(\"xxxx\", binaryMessage.buffer, { onResponse });\n assert.equal(lastResponse?.status, 202);\n });\n\n // `removeUserFromAllGroups` always times out.\n it.skip(\"can manage users\", async () => {\n this.timeout(Infinity);\n const res = await client.userExists(\"foo\");\n assert.ok(!res);\n await client.removeUserFromAllGroups(\"brian\", { onResponse });\n assert.equal(lastResponse?.status, 200);\n });\n\n it(\"can check if a connection exists\", async function() {\n // likely bug in recorder for this test - recording not generating properly\n if (!isLiveMode()) this.skip();\n const res = await client.connectionExists(\"xxx\");\n assert.ok(!res);\n });\n\n it(\"can grant permissions to connections\", async () => {\n let error;\n try {\n await client.grantPermission(\"xxx\", \"joinLeaveGroup\", { targetName: \"x\" });\n } catch (e) {\n error = e;\n }\n // grantPermission validates connection ids, so we expect an error here.\n assert.equal(error.statusCode, 404);\n });\n\n it(\"can revoke permissions from connections\", async function() {\n // likely bug in recorder for this test - recording not generating properly\n if (!isLiveMode()) this.skip();\n let error;\n try {\n await client.revokePermission(\"xxx\", \"joinLeaveGroup\", { targetName: \"x\" });\n } catch (e) {\n error = e;\n }\n // grantPermission validates connection ids, so we expect an error here.\n assert.equal(error.statusCode, 404);\n });\n\n // service API doesn't work yet.\n it.skip(\"can generate client tokens\", async () => {\n await client.getClientAccessToken({\n userId: \"brian\"\n });\n });\n });\n});\n"]}
@@ -0,0 +1,128 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /* eslint-disable no-invalid-this */
4
+ import { WebPubSubServiceClient } from "../src/index";
5
+ import { env, isLiveMode } from "@azure-tools/test-recorder";
6
+ import { assert } from "chai";
7
+ import ws from "ws";
8
+ function defer() {
9
+ let actualResolve;
10
+ let actualReject;
11
+ const promise = new Promise((resolve, reject) => {
12
+ actualResolve = resolve;
13
+ actualReject = reject;
14
+ });
15
+ return {
16
+ promise,
17
+ resolve: actualResolve,
18
+ reject: actualReject
19
+ };
20
+ }
21
+ class SimpleWebSocketFrame {
22
+ constructor(data, isBinary) {
23
+ this.data = data;
24
+ this.isBinary = isBinary;
25
+ if (!isBinary) {
26
+ this.dataAsString = data.toString();
27
+ }
28
+ }
29
+ isEndSignal() {
30
+ return (this.isBinary &&
31
+ this.data instanceof Buffer &&
32
+ this.data[0] === 5 &&
33
+ this.data[1] === 1 &&
34
+ this.data[2] === 1);
35
+ }
36
+ }
37
+ class PubSubWebSocketFrame {
38
+ constructor(data, isBinary) {
39
+ assert.isFalse(isBinary);
40
+ this.dataAsString = data.toString();
41
+ this.message = JSON.parse(this.dataAsString);
42
+ }
43
+ isEndSignal() {
44
+ return this.message.dataType === "binary" && this.message.data === "BQEB";
45
+ }
46
+ }
47
+ function getEndSignal() {
48
+ // magic number 511
49
+ const payload = new Uint8Array(3);
50
+ payload[0] = 5;
51
+ payload[1] = 1;
52
+ payload[2] = 1;
53
+ return payload;
54
+ }
55
+ describe("ServiceClient to manage the connected WebSocket connections", function () {
56
+ it("Simple clients can receive expected messages with different content types", async function () {
57
+ if (!isLiveMode())
58
+ this.skip();
59
+ const hub = "SimpleClientCanReceiveMessage";
60
+ const messages = [];
61
+ // Get token
62
+ const serviceClient = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, hub);
63
+ const token = await serviceClient.getClientAccessToken();
64
+ const endSignal = defer();
65
+ // Start simple WebSocket connections
66
+ const client = new ws.WebSocket(token.url);
67
+ client.on("message", (data, isBinary) => {
68
+ const frame = new SimpleWebSocketFrame(data, isBinary);
69
+ if (frame.isEndSignal()) {
70
+ endSignal.resolve();
71
+ client.close();
72
+ }
73
+ else {
74
+ messages.push(frame);
75
+ }
76
+ });
77
+ client.on("open", async () => {
78
+ // send to all
79
+ // Send a JSON message
80
+ await serviceClient.sendToAll({ message: "Hello world!" });
81
+ // Send a plain text message
82
+ await serviceClient.sendToAll("Hi there!", { contentType: "text/plain" });
83
+ // Send the binary end signal message
84
+ await serviceClient.sendToAll(getEndSignal());
85
+ });
86
+ await endSignal.promise;
87
+ assert.equal(messages.length, 2);
88
+ assert.equal(messages[0].dataAsString, '{"message":"Hello world!"}');
89
+ assert.equal(messages[1].dataAsString, "Hi there!");
90
+ });
91
+ it("Subprotocol clients can receive expected messages with different content types", async function () {
92
+ if (!isLiveMode())
93
+ this.skip();
94
+ const hub = "PubSubClientCanReceiveMessage";
95
+ const messages = [];
96
+ // Get token
97
+ const serviceClient = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, hub);
98
+ const token = await serviceClient.getClientAccessToken();
99
+ const endSignal = defer();
100
+ // Start simple WebSocket connections
101
+ const client = new ws.WebSocket(token.url, "json.webpubsub.azure.v1");
102
+ client.on("message", (data, isBinary) => {
103
+ const frame = new PubSubWebSocketFrame(data, isBinary);
104
+ if (frame.isEndSignal()) {
105
+ endSignal.resolve();
106
+ client.close();
107
+ }
108
+ else {
109
+ messages.push(frame);
110
+ }
111
+ });
112
+ client.on("open", async () => {
113
+ // send to all
114
+ // Send a JSON message
115
+ await serviceClient.sendToAll({ message: "Hello world!" });
116
+ // Send a plain text message
117
+ await serviceClient.sendToAll("Hi there!", { contentType: "text/plain" });
118
+ // Send the binary end signal message
119
+ await serviceClient.sendToAll(getEndSignal());
120
+ });
121
+ await endSignal.promise;
122
+ assert.equal(messages.length, 3);
123
+ assert.equal(messages[0].message.event, "connected");
124
+ assert.equal(messages[1].dataAsString, '{"type":"message","from":"server","dataType":"json","data":{"message":"Hello world!"}}');
125
+ assert.equal(messages[2].dataAsString, '{"type":"message","from":"server","dataType":"text","data":"Hi there!"}');
126
+ });
127
+ });
128
+ //# sourceMappingURL=integration.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.spec.js","sourceRoot":"","sources":["../../test/integration.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/* eslint-disable no-invalid-this */\nimport { WebPubSubServiceClient } from \"../src/index\";\nimport { env, isLiveMode } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\nimport { assert } from \"chai\";\nimport ws from \"ws\";\n\nfunction defer<T>(): {\n promise: Promise<T>;\n resolve: (t: T) => void;\n reject: (err: Error) => void;\n} {\n let actualResolve: (t: T) => void;\n let actualReject: (err: Error) => void;\n\n const promise = new Promise<T>((resolve, reject) => {\n actualResolve = resolve;\n actualReject = reject;\n });\n\n return {\n promise,\n resolve: actualResolve!,\n reject: actualReject!\n };\n}\n\nclass SimpleWebSocketFrame {\n public dataAsString: string | undefined;\n constructor(public data: Buffer | ArrayBuffer | Buffer[], public isBinary: boolean) {\n if (!isBinary) {\n this.dataAsString = data.toString();\n }\n }\n\n isEndSignal(): boolean {\n return (\n this.isBinary &&\n this.data instanceof Buffer &&\n this.data[0] === 5 &&\n this.data[1] === 1 &&\n this.data[2] === 1\n );\n }\n}\n\nclass PubSubWebSocketFrame {\n public message: any;\n public dataAsString: string;\n constructor(data: Buffer | ArrayBuffer | Buffer[], isBinary: boolean) {\n assert.isFalse(isBinary);\n this.dataAsString = data.toString();\n this.message = JSON.parse(this.dataAsString);\n }\n\n isEndSignal(): boolean {\n return this.message.dataType === \"binary\" && this.message.data === \"BQEB\";\n }\n}\n\nfunction getEndSignal(): Uint8Array {\n // magic number 511\n const payload = new Uint8Array(3);\n payload[0] = 5;\n payload[1] = 1;\n payload[2] = 1;\n return payload;\n}\n\ndescribe(\"ServiceClient to manage the connected WebSocket connections\", function() {\n it(\"Simple clients can receive expected messages with different content types\", async function(this: Context) {\n if (!isLiveMode()) this.skip();\n const hub = \"SimpleClientCanReceiveMessage\";\n\n const messages: SimpleWebSocketFrame[] = [];\n\n // Get token\n const serviceClient = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, hub);\n const token = await serviceClient.getClientAccessToken();\n const endSignal = defer<void>();\n // Start simple WebSocket connections\n const client = new ws.WebSocket(token.url);\n client.on(\"message\", (data, isBinary) => {\n const frame = new SimpleWebSocketFrame(data, isBinary);\n if (frame.isEndSignal()) {\n endSignal.resolve();\n client.close();\n } else {\n messages.push(frame);\n }\n });\n client.on(\"open\", async () => {\n // send to all\n // Send a JSON message\n await serviceClient.sendToAll({ message: \"Hello world!\" });\n\n // Send a plain text message\n await serviceClient.sendToAll(\"Hi there!\", { contentType: \"text/plain\" });\n\n // Send the binary end signal message\n await serviceClient.sendToAll(getEndSignal());\n });\n await endSignal.promise;\n\n assert.equal(messages.length, 2);\n assert.equal(messages[0].dataAsString, '{\"message\":\"Hello world!\"}');\n assert.equal(messages[1].dataAsString, \"Hi there!\");\n });\n\n it(\"Subprotocol clients can receive expected messages with different content types\", async function(this: Context) {\n if (!isLiveMode()) this.skip();\n const hub = \"PubSubClientCanReceiveMessage\";\n const messages: PubSubWebSocketFrame[] = [];\n\n // Get token\n const serviceClient = new WebPubSubServiceClient(env.WPS_CONNECTION_STRING, hub);\n const token = await serviceClient.getClientAccessToken();\n const endSignal = defer<void>();\n // Start simple WebSocket connections\n const client = new ws.WebSocket(token.url, \"json.webpubsub.azure.v1\");\n client.on(\"message\", (data, isBinary) => {\n const frame = new PubSubWebSocketFrame(data, isBinary);\n if (frame.isEndSignal()) {\n endSignal.resolve();\n client.close();\n } else {\n messages.push(frame);\n }\n });\n client.on(\"open\", async () => {\n // send to all\n // Send a JSON message\n await serviceClient.sendToAll({ message: \"Hello world!\" });\n\n // Send a plain text message\n await serviceClient.sendToAll(\"Hi there!\", { contentType: \"text/plain\" });\n\n // Send the binary end signal message\n await serviceClient.sendToAll(getEndSignal());\n });\n\n await endSignal.promise;\n\n assert.equal(messages.length, 3);\n assert.equal(messages[0].message.event, \"connected\");\n assert.equal(\n messages[1].dataAsString,\n '{\"type\":\"message\",\"from\":\"server\",\"dataType\":\"json\",\"data\":{\"message\":\"Hello world!\"}}'\n );\n assert.equal(\n messages[2].dataAsString,\n '{\"type\":\"message\",\"from\":\"server\",\"dataType\":\"text\",\"data\":\"Hi there!\"}'\n );\n });\n});\n"]}
@@ -2,7 +2,11 @@ const environmentSetup = {
2
2
  replaceableVariables: {
3
3
  WPS_CONNECTION_STRING: "Endpoint=endpoint;AccessKey=api_key;Version=1.0;",
4
4
  WPS_API_KEY: "api_key",
5
- ENDPOINT: "endpoint"
5
+ ENDPOINT: "https://endpoint",
6
+ REVERSE_PROXY_ENDPOINT: "https://rp-endpoint",
7
+ AZURE_CLIENT_ID: "azure_client_id",
8
+ AZURE_CLIENT_SECRET: "azure_client_secret",
9
+ AZURE_TENANT_ID: "azuretenantid"
6
10
  },
7
11
  customizationsOnRecordings: [],
8
12
  queryParametersToSkip: []
@@ -1 +1 @@
1
- {"version":3,"file":"testEnv.js","sourceRoot":"","sources":["../../test/testEnv.ts"],"names":[],"mappings":"AAIA,MAAM,gBAAgB,GAA6B;IACjD,oBAAoB,EAAE;QACpB,qBAAqB,EAAE,kDAAkD;QACzE,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,0BAA0B,EAAE,EAAE;IAC9B,qBAAqB,EAAE,EAAE;CAC1B,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { RecorderEnvironmentSetup } from \"@azure/test-utils-recorder\";\n\nconst environmentSetup: RecorderEnvironmentSetup = {\n replaceableVariables: {\n WPS_CONNECTION_STRING: \"Endpoint=endpoint;AccessKey=api_key;Version=1.0;\",\n WPS_API_KEY: \"api_key\",\n ENDPOINT: \"endpoint\"\n },\n customizationsOnRecordings: [],\n queryParametersToSkip: []\n};\n\nexport default environmentSetup;\n"]}
1
+ {"version":3,"file":"testEnv.js","sourceRoot":"","sources":["../../test/testEnv.ts"],"names":[],"mappings":"AAIA,MAAM,gBAAgB,GAA6B;IACjD,oBAAoB,EAAE;QACpB,qBAAqB,EAAE,kDAAkD;QACzE,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,kBAAkB;QAC5B,sBAAsB,EAAE,qBAAqB;QAC7C,eAAe,EAAE,iBAAiB;QAClC,mBAAmB,EAAE,qBAAqB;QAC1C,eAAe,EAAE,eAAe;KACjC;IACD,0BAA0B,EAAE,EAAE;IAC9B,qBAAqB,EAAE,EAAE;CAC1B,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { RecorderEnvironmentSetup } from \"@azure-tools/test-recorder\";\n\nconst environmentSetup: RecorderEnvironmentSetup = {\n replaceableVariables: {\n WPS_CONNECTION_STRING: \"Endpoint=endpoint;AccessKey=api_key;Version=1.0;\",\n WPS_API_KEY: \"api_key\",\n ENDPOINT: \"https://endpoint\",\n REVERSE_PROXY_ENDPOINT: \"https://rp-endpoint\",\n AZURE_CLIENT_ID: \"azure_client_id\",\n AZURE_CLIENT_SECRET: \"azure_client_secret\",\n AZURE_TENANT_ID: \"azuretenantid\"\n },\n customizationsOnRecordings: [],\n queryParametersToSkip: []\n};\n\nexport default environmentSetup;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure/web-pubsub",
3
- "version": "1.0.0-beta.2",
3
+ "version": "1.0.1-alpha.20211215.2",
4
4
  "description": "Azure client library for Azure Web PubSub",
5
5
  "sdk-type": "client",
6
6
  "main": "dist/index.js",
@@ -11,8 +11,8 @@
11
11
  "build:browser": "echo \"Browser is not supported.\" && exit 0",
12
12
  "build:node": "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1",
13
13
  "build:samples": "echo Obsolete.",
14
- "build:test": "tsc -p . && rollup -c rollup.test.config.js 2>&1",
15
- "build": "tsc -p . && rollup -c 2>&1 && api-extractor run --local",
14
+ "build:test": "tsc -p . && rollup -c 2>&1",
15
+ "build": "npm run clean && tsc -p . && rollup -c 2>&1 && api-extractor run --local",
16
16
  "check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
17
17
  "format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
18
18
  "clean": "rimraf dist dist-esm test-dist temp types *.tgz *.log",
@@ -22,16 +22,14 @@
22
22
  "integration-test:node": "echo skipped",
23
23
  "integration-test": "npm run integration-test:node && npm run integration-test:browser",
24
24
  "lint:fix": "eslint package.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]",
25
- "lint": "eslint package.json api-extractor.json src test --ext .ts -f html -o signalr-lintReport.html || exit 0",
25
+ "lint": "eslint package.json api-extractor.json src test --ext .ts",
26
26
  "pack": "npm pack 2>&1",
27
- "prebuild": "npm run clean",
28
27
  "test:browser": "echo \"Browser is not supported.\" && exit 0",
29
28
  "test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node",
30
29
  "test": "npm run build:test && npm run unit-test && npm run integration-test",
31
30
  "unit-test:browser": "echo \"Browser is not supported.\" && exit 0",
32
- "unit-test:node": "mocha --reporter ../../../common/tools/mocha-multi-reporter.js dist-test/index.node.js",
33
- "unit-test": "npm run unit-test:node && npm run unit-test:browser",
34
- "docs": "typedoc --excludePrivate --excludeNotExported --excludeExternals --stripInternal --mode file --out ./dist/docs ./src"
31
+ "unit-test:node": "mocha --exit -r esm --require ts-node/register --reporter ../../../common/tools/mocha-multi-reporter.js --full-trace \"test/{,!(browser)/**/}*.spec.ts\"",
32
+ "unit-test": "npm run unit-test:node && npm run unit-test:browser"
35
33
  },
36
34
  "files": [
37
35
  "dist/",
@@ -41,12 +39,24 @@
41
39
  "README.md",
42
40
  "LICENSE"
43
41
  ],
42
+ "//metadata": {
43
+ "constantPaths": [
44
+ {
45
+ "path": "src/generated/generatedClientContext.ts",
46
+ "prefix": "packageDetails"
47
+ },
48
+ {
49
+ "path": "swagger/README.md",
50
+ "prefix": "package-version"
51
+ }
52
+ ]
53
+ },
44
54
  "browser": {
45
55
  "./dist-esm/src/util/url.js": "./dist-esm/src/util/url.browser.js"
46
56
  },
47
57
  "repository": "github:Azure/azure-sdk-for-js",
48
58
  "keywords": [
49
- "Azure",
59
+ "azure",
50
60
  "cloud"
51
61
  ],
52
62
  "author": "Microsoft Corporation",
@@ -55,35 +65,31 @@
55
65
  "url": "https://github.com/Azure/azure-sdk-for-js/issues"
56
66
  },
57
67
  "engines": {
58
- "node": ">=8.0.0"
68
+ "node": ">=12.0.0"
59
69
  },
60
- "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/search/search/",
70
+ "homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/web-pubsub/web-pubsub/README.md",
61
71
  "sideEffects": false,
62
72
  "dependencies": {
63
73
  "@azure/core-auth": "^1.3.0",
64
- "@azure/core-http": "^1.2.0",
65
- "@azure/core-tracing": "1.0.0-preview.11",
74
+ "@azure/core-client": "^1.0.0",
75
+ "@azure/core-rest-pipeline": "^1.1.0",
76
+ "@azure/core-tracing": "1.0.0-preview.13",
66
77
  "@azure/logger": "^1.0.0",
67
- "tslib": "^2.0.0",
78
+ "tslib": "^2.2.0",
68
79
  "jsonwebtoken": "^8.5.1"
69
80
  },
70
81
  "devDependencies": {
71
- "@azure/dev-tool": "^1.0.0",
72
- "@azure/eslint-plugin-azure-sdk": "^3.0.0",
73
- "@azure/identity": "^1.1.0",
74
- "@azure/test-utils-recorder": "^1.0.0",
75
- "@microsoft/api-extractor": "7.7.11",
76
- "@rollup/plugin-commonjs": "11.0.2",
77
- "@rollup/plugin-json": "^4.0.0",
78
- "@rollup/plugin-multi-entry": "^3.0.0",
79
- "@rollup/plugin-node-resolve": "^8.0.0",
80
- "@rollup/plugin-replace": "^2.2.0",
82
+ "@azure/dev-tool": ">=1.0.0-alpha <1.0.0-alphb",
83
+ "@azure/eslint-plugin-azure-sdk": ">=3.0.0-alpha <3.0.0-alphb",
84
+ "@azure/identity": "^2.0.1",
85
+ "@azure-tools/test-recorder": "^1.0.0",
86
+ "@microsoft/api-extractor": "^7.18.11",
87
+ "@types/chai": "^4.1.6",
81
88
  "@types/jsonwebtoken": "~8.5.0",
82
89
  "@types/mocha": "^7.0.2",
83
- "@types/node": "^8.0.0",
84
- "@types/query-string": "6.2.0",
90
+ "@types/node": "^12.0.0",
85
91
  "@types/sinon": "^9.0.4",
86
- "assert": "^1.4.1",
92
+ "@types/ws": "^8.2.0",
87
93
  "chai": "^4.2.0",
88
94
  "cross-env": "^7.0.2",
89
95
  "dotenv": "^8.2.0",
@@ -103,21 +109,16 @@
103
109
  "karma-mocha-reporter": "^2.2.5",
104
110
  "karma-sourcemap-loader": "^0.3.8",
105
111
  "mocha": "^7.1.1",
106
- "mocha-junit-reporter": "^1.18.0",
107
- "nyc": "^14.0.0",
112
+ "mocha-junit-reporter": "^2.0.0",
113
+ "nyc": "^15.0.0",
108
114
  "prettier": "^1.16.4",
109
- "puppeteer": "^3.3.0",
110
- "query-string": "^5.0.0",
115
+ "puppeteer": "^10.2.0",
111
116
  "rimraf": "^3.0.0",
112
117
  "rollup": "^1.16.3",
113
- "rollup-plugin-shim": "^1.0.0",
114
- "rollup-plugin-sourcemaps": "^0.4.2",
115
- "rollup-plugin-terser": "^5.1.1",
116
- "rollup-plugin-visualizer": "^4.0.4",
117
118
  "sinon": "^9.0.2",
118
119
  "source-map-support": "^0.5.9",
119
120
  "typescript": "~4.2.0",
120
- "typedoc": "0.15.2"
121
+ "ws": "^8.2.0"
121
122
  },
122
123
  "//sampleConfiguration": {
123
124
  "productName": "Azure Web PubSub",