@azure/communication-email 1.0.0-alpha.20220524.1 → 1.0.0-alpha.20220630.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +15 -21
  2. package/dist/index.js +138 -76
  3. package/dist/index.js.map +1 -1
  4. package/dist-esm/samples-dev/checkMessageStatus.js +1 -6
  5. package/dist-esm/samples-dev/checkMessageStatus.js.map +1 -1
  6. package/dist-esm/samples-dev/sendEmailMultipleRecipients.js +5 -20
  7. package/dist-esm/samples-dev/sendEmailMultipleRecipients.js.map +1 -1
  8. package/dist-esm/samples-dev/sendEmailSingleRecipient.js +1 -6
  9. package/dist-esm/samples-dev/sendEmailSingleRecipient.js.map +1 -1
  10. package/dist-esm/samples-dev/sendEmailWithAttachments.js +1 -6
  11. package/dist-esm/samples-dev/sendEmailWithAttachments.js.map +1 -1
  12. package/dist-esm/src/emailClient.js +4 -16
  13. package/dist-esm/src/emailClient.js.map +1 -1
  14. package/dist-esm/src/generated/src/emailRestApiClient.js +53 -10
  15. package/dist-esm/src/generated/src/emailRestApiClient.js.map +1 -1
  16. package/dist-esm/src/generated/src/index.js +11 -0
  17. package/dist-esm/src/generated/src/index.js.map +1 -0
  18. package/dist-esm/src/generated/src/models/index.js +80 -1
  19. package/dist-esm/src/generated/src/models/index.js.map +1 -1
  20. package/dist-esm/src/generated/src/models/mappers.js +69 -10
  21. package/dist-esm/src/generated/src/models/mappers.js.map +1 -1
  22. package/dist-esm/src/generated/src/models/parameters.js +11 -0
  23. package/dist-esm/src/generated/src/models/parameters.js.map +1 -1
  24. package/dist-esm/src/generated/src/operations/email.js +10 -17
  25. package/dist-esm/src/generated/src/operations/email.js.map +1 -1
  26. package/dist-esm/src/generated/src/operationsInterfaces/email.js +9 -0
  27. package/dist-esm/src/generated/src/operationsInterfaces/email.js.map +1 -0
  28. package/dist-esm/src/generated/src/operationsInterfaces/index.js +9 -0
  29. package/dist-esm/src/generated/src/operationsInterfaces/index.js.map +1 -0
  30. package/dist-esm/src/models.js.map +1 -1
  31. package/dist-esm/test/public/emailClient.spec.js +122 -127
  32. package/dist-esm/test/public/emailClient.spec.js.map +1 -1
  33. package/dist-esm/test/public/utils/recordedClient.js +49 -31
  34. package/dist-esm/test/public/utils/recordedClient.js.map +1 -1
  35. package/package.json +10 -7
  36. package/types/communication-email.d.ts +84 -101
  37. package/dist-esm/src/constants.js +0 -4
  38. package/dist-esm/src/constants.js.map +0 -1
  39. package/dist-esm/src/generated/src/emailRestApiClientContext.js +0 -38
  40. package/dist-esm/src/generated/src/emailRestApiClientContext.js.map +0 -1
@@ -1,137 +1,132 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  import { env } from "@azure-tools/test-recorder";
4
- import { createRecordedEmailClientWithConnectionString, createRecordedEmailClientWithKeyCredential, } from "./utils/recordedClient";
5
4
  import { assert } from "chai";
6
- import { matrix } from "@azure/test-utils";
7
- matrix([[true, false]], async function (useKeyCredential) {
8
- describe(`EmailClient [Playback/Live]${useKeyCredential ? " [KeyCredential]" : " [ConnectionString]"}`, () => {
9
- let recorder;
10
- let client;
11
- beforeEach(function () {
12
- if (useKeyCredential) {
13
- ({ client, recorder } = createRecordedEmailClientWithKeyCredential(this));
14
- }
15
- else {
16
- ({ client, recorder } = createRecordedEmailClientWithConnectionString(this));
17
- }
18
- });
19
- afterEach(async function () {
20
- var _a;
21
- if (!((_a = this.currentTest) === null || _a === void 0 ? void 0 : _a.isPending())) {
22
- await recorder.stop();
23
- }
24
- });
25
- it("successfully sends an email to a single recipient", async function () {
26
- const emailMessage = {
27
- sender: env.SENDER_ADDRESS,
28
- recipients: {
29
- to: [
30
- {
31
- email: env.RECIPIENT_ADDRESS,
32
- displayName: "someRecipient",
33
- },
34
- ],
35
- },
36
- content: {
37
- subject: "someSubject",
38
- plainText: "somePlainTextBody",
39
- html: "<html><h1>someHtmlBody</html>",
40
- },
41
- };
42
- const response = await client.send(emailMessage);
43
- assert.isNotNull(response.messageId);
44
- }).timeout(5000);
45
- it("successfully sends an email to multiple types of recipients", async function () {
46
- const emailMessage = {
47
- sender: env.SENDER_ADDRESS,
48
- recipients: {
49
- to: [
50
- {
51
- email: env.RECIPIENT_ADDRESS,
52
- displayName: "someRecipient",
53
- },
54
- {
55
- email: env.RECIPIENT_ADDRESS,
56
- displayName: "someRecipient",
57
- },
58
- ],
59
- cC: [
60
- {
61
- email: env.RECIPIENT_ADDRESS,
62
- displayName: "someRecipient",
63
- },
64
- ],
65
- bCC: [
66
- {
67
- email: env.RECIPIENT_ADDRESS,
68
- displayName: "someRecipient",
69
- },
70
- ],
71
- },
72
- content: {
73
- subject: "someSubject",
74
- plainText: "somePlainTextBody",
75
- html: "<html><h1>someHtmlBody</html>",
76
- },
77
- };
78
- const response = await client.send(emailMessage);
79
- assert.isNotNull(response.messageId);
80
- }).timeout(5000);
81
- it("successfully sends an email with an attachment", async function () {
82
- const emailMessage = {
83
- sender: env.SENDER_ADDRESS,
84
- recipients: {
85
- to: [
86
- {
87
- email: env.RECIPIENT_ADDRESS,
88
- displayName: "someRecipient",
89
- },
90
- ],
91
- },
92
- content: {
93
- subject: "someSubject",
94
- plainText: "somePlainTextBody",
95
- html: "<html><h1>someHtmlBody</html>",
96
- },
97
- attachments: [
5
+ import { createRecordedEmailClientWithConnectionString } from "./utils/recordedClient";
6
+ describe(`EmailClient [Playback/Live]`, () => {
7
+ let recorder;
8
+ let client;
9
+ beforeEach(async function () {
10
+ ({ client, recorder } = await createRecordedEmailClientWithConnectionString(this));
11
+ });
12
+ afterEach(async function () {
13
+ var _a;
14
+ if (!((_a = this.currentTest) === null || _a === void 0 ? void 0 : _a.isPending())) {
15
+ await recorder.stop();
16
+ }
17
+ });
18
+ it("successfully sends an email to a single recipient", async function () {
19
+ const emailMessage = {
20
+ sender: env.SENDER_ADDRESS || "",
21
+ recipients: {
22
+ to: [
98
23
  {
99
- name: "readme.txt",
100
- attachmentType: "txt",
101
- contentBytesBase64: "ZW1haWwgdGVzdCBhdHRhY2htZW50",
24
+ email: env.RECIPIENT_ADDRESS || "",
25
+ displayName: "someRecipient",
102
26
  },
103
27
  ],
104
- };
105
- const response = await client.send(emailMessage);
106
- assert.isNotNull(response.messageId);
107
- }).timeout(5000);
108
- it("successfully retrieves the email status with the returned message id", async function () {
109
- const emailMessage = {
110
- sender: env.SENDER_ADDRESS,
111
- recipients: {
112
- to: [
113
- {
114
- email: env.RECIPIENT_ADDRESS,
115
- displayName: "someRecipient",
116
- },
117
- ],
118
- },
119
- content: {
120
- subject: "someSubject",
121
- plainText: "somePlainTextBody",
122
- html: "<html><h1>someHtmlBody</html>",
28
+ },
29
+ content: {
30
+ subject: "someSubject",
31
+ plainText: "somePlainTextBody",
32
+ html: "<html><h1>someHtmlBody</html>",
33
+ },
34
+ };
35
+ const response = await client.send(emailMessage);
36
+ assert.isNotNull(response.messageId);
37
+ }).timeout(5000);
38
+ it("successfully sends an email to multiple types of recipients", async function () {
39
+ var _a, _b, _c, _d, _e;
40
+ const emailMessage = {
41
+ sender: (_a = env.SENDER_ADDRESS) !== null && _a !== void 0 ? _a : "",
42
+ recipients: {
43
+ to: [
44
+ {
45
+ email: (_b = env.RECIPIENT_ADDRESS) !== null && _b !== void 0 ? _b : "",
46
+ displayName: "someRecipient",
47
+ },
48
+ {
49
+ email: (_c = env.RECIPIENT_ADDRESS) !== null && _c !== void 0 ? _c : "",
50
+ displayName: "someRecipient",
51
+ },
52
+ ],
53
+ cc: [
54
+ {
55
+ email: (_d = env.RECIPIENT_ADDRESS) !== null && _d !== void 0 ? _d : "",
56
+ displayName: "someRecipient",
57
+ },
58
+ ],
59
+ bcc: [
60
+ {
61
+ email: (_e = env.RECIPIENT_ADDRESS) !== null && _e !== void 0 ? _e : "",
62
+ displayName: "someRecipient",
63
+ },
64
+ ],
65
+ },
66
+ content: {
67
+ subject: "someSubject",
68
+ plainText: "somePlainTextBody",
69
+ html: "<html><h1>someHtmlBody</html>",
70
+ },
71
+ };
72
+ const response = await client.send(emailMessage);
73
+ assert.isNotNull(response.messageId);
74
+ }).timeout(5000);
75
+ it("successfully sends an email with an attachment", async function () {
76
+ var _a, _b;
77
+ const emailMessage = {
78
+ sender: (_a = env.SENDER_ADDRESS) !== null && _a !== void 0 ? _a : "",
79
+ recipients: {
80
+ to: [
81
+ {
82
+ email: (_b = env.RECIPIENT_ADDRESS) !== null && _b !== void 0 ? _b : "",
83
+ displayName: "someRecipient",
84
+ },
85
+ ],
86
+ },
87
+ content: {
88
+ subject: "someSubject",
89
+ plainText: "somePlainTextBody",
90
+ html: "<html><h1>someHtmlBody</html>",
91
+ },
92
+ attachments: [
93
+ {
94
+ name: "readme.txt",
95
+ attachmentType: "txt",
96
+ contentBytesBase64: "ZW1haWwgdGVzdCBhdHRhY2htZW50",
123
97
  },
124
- };
125
- const response = await client.send(emailMessage);
126
- const messageId = response.messageId;
127
- if (messageId) {
128
- const messageStatusResponse = await client.getSendStatus(messageId);
129
- assert.isNotNull(messageStatusResponse.status);
130
- }
131
- else {
132
- assert.fail();
133
- }
134
- }).timeout(5000);
135
- });
98
+ ],
99
+ };
100
+ const response = await client.send(emailMessage);
101
+ assert.isNotNull(response.messageId);
102
+ }).timeout(5000);
103
+ it("successfully retrieves the email status with the returned message id", async function () {
104
+ var _a, _b;
105
+ const emailMessage = {
106
+ sender: (_a = env.SENDER_ADDRESS) !== null && _a !== void 0 ? _a : "",
107
+ recipients: {
108
+ to: [
109
+ {
110
+ email: (_b = env.RECIPIENT_ADDRESS) !== null && _b !== void 0 ? _b : "",
111
+ displayName: "someRecipient",
112
+ },
113
+ ],
114
+ },
115
+ content: {
116
+ subject: "someSubject",
117
+ plainText: "somePlainTextBody",
118
+ html: "<html><h1>someHtmlBody</html>",
119
+ },
120
+ };
121
+ const response = await client.send(emailMessage);
122
+ const messageId = response.messageId;
123
+ if (messageId) {
124
+ const messageStatusResponse = await client.getSendStatus(messageId);
125
+ assert.isNotNull(messageStatusResponse.status);
126
+ }
127
+ else {
128
+ assert.fail();
129
+ }
130
+ }).timeout(5000);
136
131
  });
137
132
  //# sourceMappingURL=emailClient.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emailClient.spec.js","sourceRoot":"","sources":["../../../test/public/emailClient.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { EmailClient, EmailMessage } from \"../../src\";\nimport { Recorder, env } from \"@azure-tools/test-recorder\";\nimport {\n createRecordedEmailClientWithConnectionString,\n createRecordedEmailClientWithKeyCredential,\n} from \"./utils/recordedClient\";\nimport { Context } from \"mocha\";\nimport { assert } from \"chai\";\nimport { matrix } from \"@azure/test-utils\";\n\nmatrix([[true, false]], async function (useKeyCredential) {\n describe(`EmailClient [Playback/Live]${\n useKeyCredential ? \" [KeyCredential]\" : \" [ConnectionString]\"\n }`, () => {\n let recorder: Recorder;\n let client: EmailClient;\n\n beforeEach(function (this: Context) {\n if (useKeyCredential) {\n ({ client, recorder } = createRecordedEmailClientWithKeyCredential(this));\n } else {\n ({ client, recorder } = createRecordedEmailClientWithConnectionString(this));\n }\n });\n\n afterEach(async function (this: Context) {\n if (!this.currentTest?.isPending()) {\n await recorder.stop();\n }\n });\n\n it(\"successfully sends an email to a single recipient\", async function () {\n const emailMessage: EmailMessage = {\n sender: env.SENDER_ADDRESS,\n recipients: {\n to: [\n {\n email: env.RECIPIENT_ADDRESS,\n displayName: \"someRecipient\",\n },\n ],\n },\n content: {\n subject: \"someSubject\",\n plainText: \"somePlainTextBody\",\n html: \"<html><h1>someHtmlBody</html>\",\n },\n };\n\n const response = await client.send(emailMessage);\n assert.isNotNull(response.messageId);\n }).timeout(5000);\n\n it(\"successfully sends an email to multiple types of recipients\", async function () {\n const emailMessage: EmailMessage = {\n sender: env.SENDER_ADDRESS,\n recipients: {\n to: [\n {\n email: env.RECIPIENT_ADDRESS,\n displayName: \"someRecipient\",\n },\n {\n email: env.RECIPIENT_ADDRESS,\n displayName: \"someRecipient\",\n },\n ],\n cC: [\n {\n email: env.RECIPIENT_ADDRESS,\n displayName: \"someRecipient\",\n },\n ],\n bCC: [\n {\n email: env.RECIPIENT_ADDRESS,\n displayName: \"someRecipient\",\n },\n ],\n },\n content: {\n subject: \"someSubject\",\n plainText: \"somePlainTextBody\",\n html: \"<html><h1>someHtmlBody</html>\",\n },\n };\n\n const response = await client.send(emailMessage);\n assert.isNotNull(response.messageId);\n }).timeout(5000);\n\n it(\"successfully sends an email with an attachment\", async function () {\n const emailMessage: EmailMessage = {\n sender: env.SENDER_ADDRESS,\n recipients: {\n to: [\n {\n email: env.RECIPIENT_ADDRESS,\n displayName: \"someRecipient\",\n },\n ],\n },\n content: {\n subject: \"someSubject\",\n plainText: \"somePlainTextBody\",\n html: \"<html><h1>someHtmlBody</html>\",\n },\n attachments: [\n {\n name: \"readme.txt\",\n attachmentType: \"txt\",\n contentBytesBase64: \"ZW1haWwgdGVzdCBhdHRhY2htZW50\",\n },\n ],\n };\n\n const response = await client.send(emailMessage);\n assert.isNotNull(response.messageId);\n }).timeout(5000);\n\n it(\"successfully retrieves the email status with the returned message id\", async function () {\n const emailMessage: EmailMessage = {\n sender: env.SENDER_ADDRESS,\n recipients: {\n to: [\n {\n email: env.RECIPIENT_ADDRESS,\n displayName: \"someRecipient\",\n },\n ],\n },\n content: {\n subject: \"someSubject\",\n plainText: \"somePlainTextBody\",\n html: \"<html><h1>someHtmlBody</html>\",\n },\n };\n\n const response = await client.send(emailMessage);\n const messageId = response.messageId;\n if (messageId) {\n const messageStatusResponse = await client.getSendStatus(messageId);\n assert.isNotNull(messageStatusResponse.status);\n } else {\n assert.fail();\n }\n }).timeout(5000);\n });\n});\n"]}
1
+ {"version":3,"file":"emailClient.spec.js","sourceRoot":"","sources":["../../../test/public/emailClient.spec.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAY,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,6CAA6C,EAAE,MAAM,wBAAwB,CAAC;AAEvF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,QAAkB,CAAC;IACvB,IAAI,MAAmB,CAAC;IAExB,UAAU,CAAC,KAAK;QACd,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,6CAA6C,CAAC,IAAI,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK;;QACb,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,SAAS,EAAE,CAAA,EAAE;YAClC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;SACvB;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK;QAC3D,MAAM,YAAY,GAAiB;YACjC,MAAM,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE;YAChC,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF;wBACE,KAAK,EAAE,GAAG,CAAC,iBAAiB,IAAI,EAAE;wBAClC,WAAW,EAAE,eAAe;qBAC7B;iBACF;aACF;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,aAAa;gBACtB,SAAS,EAAE,mBAAmB;gBAC9B,IAAI,EAAE,+BAA+B;aACtC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,EAAE,CAAC,6DAA6D,EAAE,KAAK;;QACrE,MAAM,YAAY,GAAiB;YACjC,MAAM,EAAE,MAAA,GAAG,CAAC,cAAc,mCAAI,EAAE;YAChC,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF;wBACE,KAAK,EAAE,MAAA,GAAG,CAAC,iBAAiB,mCAAI,EAAE;wBAClC,WAAW,EAAE,eAAe;qBAC7B;oBACD;wBACE,KAAK,EAAE,MAAA,GAAG,CAAC,iBAAiB,mCAAI,EAAE;wBAClC,WAAW,EAAE,eAAe;qBAC7B;iBACF;gBACD,EAAE,EAAE;oBACF;wBACE,KAAK,EAAE,MAAA,GAAG,CAAC,iBAAiB,mCAAI,EAAE;wBAClC,WAAW,EAAE,eAAe;qBAC7B;iBACF;gBACD,GAAG,EAAE;oBACH;wBACE,KAAK,EAAE,MAAA,GAAG,CAAC,iBAAiB,mCAAI,EAAE;wBAClC,WAAW,EAAE,eAAe;qBAC7B;iBACF;aACF;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,aAAa;gBACtB,SAAS,EAAE,mBAAmB;gBAC9B,IAAI,EAAE,+BAA+B;aACtC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,EAAE,CAAC,gDAAgD,EAAE,KAAK;;QACxD,MAAM,YAAY,GAAiB;YACjC,MAAM,EAAE,MAAA,GAAG,CAAC,cAAc,mCAAI,EAAE;YAChC,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF;wBACE,KAAK,EAAE,MAAA,GAAG,CAAC,iBAAiB,mCAAI,EAAE;wBAClC,WAAW,EAAE,eAAe;qBAC7B;iBACF;aACF;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,aAAa;gBACtB,SAAS,EAAE,mBAAmB;gBAC9B,IAAI,EAAE,+BAA+B;aACtC;YACD,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,YAAY;oBAClB,cAAc,EAAE,KAAK;oBACrB,kBAAkB,EAAE,8BAA8B;iBACnD;aACF;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,EAAE,CAAC,sEAAsE,EAAE,KAAK;;QAC9E,MAAM,YAAY,GAAiB;YACjC,MAAM,EAAE,MAAA,GAAG,CAAC,cAAc,mCAAI,EAAE;YAChC,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF;wBACE,KAAK,EAAE,MAAA,GAAG,CAAC,iBAAiB,mCAAI,EAAE;wBAClC,WAAW,EAAE,eAAe;qBAC7B;iBACF;aACF;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,aAAa;gBACtB,SAAS,EAAE,mBAAmB;gBAC9B,IAAI,EAAE,+BAA+B;aACtC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,IAAI,SAAS,EAAE;YACb,MAAM,qBAAqB,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;SAChD;aAAM;YACL,MAAM,CAAC,IAAI,EAAE,CAAC;SACf;IACH,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { EmailClient, EmailMessage } from \"../../src\";\nimport { Recorder, env } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\nimport { assert } from \"chai\";\nimport { createRecordedEmailClientWithConnectionString } from \"./utils/recordedClient\";\n\ndescribe(`EmailClient [Playback/Live]`, () => {\n let recorder: Recorder;\n let client: EmailClient;\n\n beforeEach(async function (this: Context) {\n ({ client, recorder } = await createRecordedEmailClientWithConnectionString(this));\n });\n\n afterEach(async function (this: Context) {\n if (!this.currentTest?.isPending()) {\n await recorder.stop();\n }\n });\n\n it(\"successfully sends an email to a single recipient\", async function () {\n const emailMessage: EmailMessage = {\n sender: env.SENDER_ADDRESS || \"\",\n recipients: {\n to: [\n {\n email: env.RECIPIENT_ADDRESS || \"\",\n displayName: \"someRecipient\",\n },\n ],\n },\n content: {\n subject: \"someSubject\",\n plainText: \"somePlainTextBody\",\n html: \"<html><h1>someHtmlBody</html>\",\n },\n };\n\n const response = await client.send(emailMessage);\n assert.isNotNull(response.messageId);\n }).timeout(5000);\n\n it(\"successfully sends an email to multiple types of recipients\", async function () {\n const emailMessage: EmailMessage = {\n sender: env.SENDER_ADDRESS ?? \"\",\n recipients: {\n to: [\n {\n email: env.RECIPIENT_ADDRESS ?? \"\",\n displayName: \"someRecipient\",\n },\n {\n email: env.RECIPIENT_ADDRESS ?? \"\",\n displayName: \"someRecipient\",\n },\n ],\n cc: [\n {\n email: env.RECIPIENT_ADDRESS ?? \"\",\n displayName: \"someRecipient\",\n },\n ],\n bcc: [\n {\n email: env.RECIPIENT_ADDRESS ?? \"\",\n displayName: \"someRecipient\",\n },\n ],\n },\n content: {\n subject: \"someSubject\",\n plainText: \"somePlainTextBody\",\n html: \"<html><h1>someHtmlBody</html>\",\n },\n };\n\n const response = await client.send(emailMessage);\n assert.isNotNull(response.messageId);\n }).timeout(5000);\n\n it(\"successfully sends an email with an attachment\", async function () {\n const emailMessage: EmailMessage = {\n sender: env.SENDER_ADDRESS ?? \"\",\n recipients: {\n to: [\n {\n email: env.RECIPIENT_ADDRESS ?? \"\",\n displayName: \"someRecipient\",\n },\n ],\n },\n content: {\n subject: \"someSubject\",\n plainText: \"somePlainTextBody\",\n html: \"<html><h1>someHtmlBody</html>\",\n },\n attachments: [\n {\n name: \"readme.txt\",\n attachmentType: \"txt\",\n contentBytesBase64: \"ZW1haWwgdGVzdCBhdHRhY2htZW50\",\n },\n ],\n };\n\n const response = await client.send(emailMessage);\n assert.isNotNull(response.messageId);\n }).timeout(5000);\n\n it(\"successfully retrieves the email status with the returned message id\", async function () {\n const emailMessage: EmailMessage = {\n sender: env.SENDER_ADDRESS ?? \"\",\n recipients: {\n to: [\n {\n email: env.RECIPIENT_ADDRESS ?? \"\",\n displayName: \"someRecipient\",\n },\n ],\n },\n content: {\n subject: \"someSubject\",\n plainText: \"somePlainTextBody\",\n html: \"<html><h1>someHtmlBody</html>\",\n },\n };\n\n const response = await client.send(emailMessage);\n const messageId = response.messageId;\n if (messageId) {\n const messageStatusResponse = await client.getSendStatus(messageId);\n assert.isNotNull(messageStatusResponse.status);\n } else {\n assert.fail();\n }\n }).timeout(5000);\n});\n"]}
@@ -1,45 +1,63 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
- import * as dotenv from "dotenv";
4
- import { env, record } from "@azure-tools/test-recorder";
3
+ import { Recorder, env } from "@azure-tools/test-recorder";
5
4
  import { EmailClient } from "../../../src";
6
- import { isNode } from "@azure/core-http";
7
- import { parseConnectionString } from "@azure/communication-common";
8
- if (isNode) {
9
- dotenv.config();
10
- }
11
- const replaceableVariables = {
5
+ const envSetupForPlayback = {
12
6
  COMMUNICATION_CONNECTION_STRING: "endpoint=https://someEndpoint/;accesskey=someAccessKeyw==",
13
7
  SENDER_ADDRESS: "someSender@contoso.com",
14
8
  RECIPIENT_ADDRESS: "someRecipient@domain.com",
15
9
  };
16
- export const environmentSetup = {
17
- replaceableVariables: replaceableVariables,
18
- customizationsOnRecordings: [
19
- (recording) => recording.replace(/(https:\/\/)([^/',]*)/, "$1someEndpoint"),
20
- (recording) => recording.replace(/("sender":)("(.*?)")/, "$1" + '"someSender@contoso.com"'),
21
- (recording) => recording.replace(/("email":)("(.*?)")/g, "$1" + '"someRecipient@domain.com"'),
22
- (recording) => recording.replace(/('Operation-Location',[\r\n] {2})'(.*?)'/, "$1" + '"someOperationLocation"'),
23
- (recording) => recording.replace(/"operation-location"\s?:\s?"[^"]*"/g, '"operation-location": "someOperationLocation"'),
24
- (recording) => recording.replace(/('x-ms-request-id',[\r\n] {2})'(.*?)'/, "$1" + '"someRequestId"'),
25
- (recording) => recording.replace(/"x-ms-request-id"\s?:\s?"[^"]*"/g, '"x-ms-request-id": "someRequestId"'),
26
- (recording) => recording.replace(/("messageId":)("(.*?)")/g, "$1" + '"someRequestId"'),
27
- (recording) => recording.replace(/emails\/[^"']*/g, "emails/someRequestId/status"),
10
+ const sanitizerOptions = {
11
+ connectionStringSanitizers: [
12
+ {
13
+ actualConnString: env.COMMUNICATION_CONNECTION_STRING,
14
+ fakeConnString: envSetupForPlayback["COMMUNICATION_CONNECTION_STRING"],
15
+ },
16
+ ],
17
+ headerSanitizers: [
18
+ { key: "repeatability-first-sent", value: "Sanitized" },
19
+ { key: "repeatability-request-id", value: "Sanitized" },
20
+ { key: "x-ms-client-request-id", value: "Sanitized" },
21
+ { key: "x-ms-date", value: "Sanitized" },
22
+ { key: "Date", value: "Sanitized" },
23
+ { key: "Date", value: "Sanitized" },
24
+ { key: "X-Azure-Ref", value: "Sanitized" },
25
+ { key: "x-ms-request-id", value: "Sanitized" },
26
+ { key: "Operation-Location", value: "https://someEndpoint/emails/someMessageId/status" },
27
+ ],
28
+ uriSanitizers: [
29
+ {
30
+ regex: true,
31
+ target: `emails/.*/status`,
32
+ value: "emails/Sanitized/status",
33
+ },
34
+ ],
35
+ bodySanitizers: [
36
+ {
37
+ regex: true,
38
+ target: `"messageId"\\s?:\\s?"[^"]*"`,
39
+ value: `"messageId":"Sanitized"`,
40
+ },
28
41
  ],
29
- queryParametersToSkip: [],
30
42
  };
31
- export function createRecordedEmailClientWithConnectionString(context) {
32
- const recorder = record(context, environmentSetup);
33
- return {
34
- client: new EmailClient(env.COMMUNICATION_CONNECTION_STRING),
35
- recorder,
36
- };
43
+ export async function createRecorder(context) {
44
+ const recorder = new Recorder(context);
45
+ await recorder.start({ envSetupForPlayback });
46
+ await recorder.addSanitizers(sanitizerOptions, ["record", "playback"]);
47
+ await recorder.setMatcher("CustomDefaultMatcher", {
48
+ excludedHeaders: [
49
+ "Accept-Language",
50
+ "x-ms-content-sha256", // This is dependent on the current datetime
51
+ ],
52
+ });
53
+ return recorder;
37
54
  }
38
- export function createRecordedEmailClientWithKeyCredential(context) {
39
- const recorder = record(context, environmentSetup);
40
- const { endpoint, credential } = parseConnectionString(env.COMMUNICATION_CONNECTION_STRING);
55
+ export async function createRecordedEmailClientWithConnectionString(context) {
56
+ var _a;
57
+ const recorder = await createRecorder(context.currentTest);
58
+ const client = new EmailClient((_a = env.COMMUNICATION_CONNECTION_STRING) !== null && _a !== void 0 ? _a : "", recorder.configureClientOptions({}));
41
59
  return {
42
- client: new EmailClient(endpoint, credential),
60
+ client: client,
43
61
  recorder,
44
62
  };
45
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recordedClient.js","sourceRoot":"","sources":["../../../../test/public/utils/recordedClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAsC,GAAG,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,IAAI,MAAM,EAAE;IACV,MAAM,CAAC,MAAM,EAAE,CAAC;CACjB;AAOD,MAAM,oBAAoB,GAA4B;IACpD,+BAA+B,EAAE,2DAA2D;IAC5F,cAAc,EAAE,wBAAwB;IACxC,iBAAiB,EAAE,0BAA0B;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD,oBAAoB,EAAE,oBAAoB;IAC1C,0BAA0B,EAAE;QAC1B,CAAC,SAAiB,EAAU,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;QAC3F,CAAC,SAAiB,EAAU,EAAE,CAC5B,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,GAAG,0BAA0B,CAAC;QAC9E,CAAC,SAAiB,EAAU,EAAE,CAC5B,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,GAAG,4BAA4B,CAAC;QAChF,CAAC,SAAiB,EAAU,EAAE,CAC5B,SAAS,CAAC,OAAO,CACf,0CAA0C,EAC1C,IAAI,GAAG,yBAAyB,CACjC;QACH,CAAC,SAAiB,EAAU,EAAE,CAC5B,SAAS,CAAC,OAAO,CACf,qCAAqC,EACrC,+CAA+C,CAChD;QACH,CAAC,SAAiB,EAAU,EAAE,CAC5B,SAAS,CAAC,OAAO,CAAC,uCAAuC,EAAE,IAAI,GAAG,iBAAiB,CAAC;QACtF,CAAC,SAAiB,EAAU,EAAE,CAC5B,SAAS,CAAC,OAAO,CAAC,kCAAkC,EAAE,oCAAoC,CAAC;QAC7F,CAAC,SAAiB,EAAU,EAAE,CAC5B,SAAS,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,GAAG,iBAAiB,CAAC;QACzE,CAAC,SAAiB,EAAU,EAAE,CAC5B,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;KACtE;IACD,qBAAqB,EAAE,EAAE;CAC1B,CAAC;AAEF,MAAM,UAAU,6CAA6C,CAC3D,OAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEnD,OAAO;QACL,MAAM,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC,+BAA+B,CAAC;QAC5D,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0CAA0C,CAAC,OAAgB;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEnD,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,qBAAqB,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE5F,OAAO;QACL,MAAM,EAAE,IAAI,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC7C,QAAQ;KACT,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport * as dotenv from \"dotenv\";\nimport { Recorder, RecorderEnvironmentSetup, env, record } from \"@azure-tools/test-recorder\";\nimport { Context } from \"mocha\";\nimport { EmailClient } from \"../../../src\";\nimport { isNode } from \"@azure/core-http\";\nimport { parseConnectionString } from \"@azure/communication-common\";\n\nif (isNode) {\n dotenv.config();\n}\n\nexport interface RecordedEmailClient {\n client: EmailClient;\n recorder: Recorder;\n}\n\nconst replaceableVariables: { [k: string]: string } = {\n COMMUNICATION_CONNECTION_STRING: \"endpoint=https://someEndpoint/;accesskey=someAccessKeyw==\",\n SENDER_ADDRESS: \"someSender@contoso.com\",\n RECIPIENT_ADDRESS: \"someRecipient@domain.com\",\n};\n\nexport const environmentSetup: RecorderEnvironmentSetup = {\n replaceableVariables: replaceableVariables,\n customizationsOnRecordings: [\n (recording: string): string => recording.replace(/(https:\\/\\/)([^/',]*)/, \"$1someEndpoint\"),\n (recording: string): string =>\n recording.replace(/(\"sender\":)(\"(.*?)\")/, \"$1\" + '\"someSender@contoso.com\"'),\n (recording: string): string =>\n recording.replace(/(\"email\":)(\"(.*?)\")/g, \"$1\" + '\"someRecipient@domain.com\"'),\n (recording: string): string =>\n recording.replace(\n /('Operation-Location',[\\r\\n] {2})'(.*?)'/,\n \"$1\" + '\"someOperationLocation\"'\n ),\n (recording: string): string =>\n recording.replace(\n /\"operation-location\"\\s?:\\s?\"[^\"]*\"/g,\n '\"operation-location\": \"someOperationLocation\"'\n ),\n (recording: string): string =>\n recording.replace(/('x-ms-request-id',[\\r\\n] {2})'(.*?)'/, \"$1\" + '\"someRequestId\"'),\n (recording: string): string =>\n recording.replace(/\"x-ms-request-id\"\\s?:\\s?\"[^\"]*\"/g, '\"x-ms-request-id\": \"someRequestId\"'),\n (recording: string): string =>\n recording.replace(/(\"messageId\":)(\"(.*?)\")/g, \"$1\" + '\"someRequestId\"'),\n (recording: string): string =>\n recording.replace(/emails\\/[^\"']*/g, \"emails/someRequestId/status\"),\n ],\n queryParametersToSkip: [],\n};\n\nexport function createRecordedEmailClientWithConnectionString(\n context: Context\n): RecordedEmailClient {\n const recorder = record(context, environmentSetup);\n\n return {\n client: new EmailClient(env.COMMUNICATION_CONNECTION_STRING),\n recorder,\n };\n}\n\nexport function createRecordedEmailClientWithKeyCredential(context: Context): RecordedEmailClient {\n const recorder = record(context, environmentSetup);\n\n const { endpoint, credential } = parseConnectionString(env.COMMUNICATION_CONNECTION_STRING);\n\n return {\n client: new EmailClient(endpoint, credential),\n recorder,\n };\n}\n"]}
1
+ {"version":3,"file":"recordedClient.js","sourceRoot":"","sources":["../../../../test/public/utils/recordedClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,QAAQ,EAAoB,GAAG,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,MAAM,mBAAmB,GAA4B;IACnD,+BAA+B,EAAE,2DAA2D;IAC5F,cAAc,EAAE,wBAAwB;IACxC,iBAAiB,EAAE,0BAA0B;CAC9C,CAAC;AAEF,MAAM,gBAAgB,GAAqB;IACzC,0BAA0B,EAAE;QAC1B;YACE,gBAAgB,EAAE,GAAG,CAAC,+BAA+B;YACrD,cAAc,EAAE,mBAAmB,CAAC,iCAAiC,CAAC;SACvE;KACF;IACD,gBAAgB,EAAE;QAChB,EAAE,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,WAAW,EAAE;QACvD,EAAE,GAAG,EAAE,0BAA0B,EAAE,KAAK,EAAE,WAAW,EAAE;QACvD,EAAE,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,WAAW,EAAE;QACrD,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;QACxC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;QACnC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE;QACnC,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE;QAC1C,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE;QAC9C,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,kDAAkD,EAAE;KACzF;IACD,aAAa,EAAE;QACb;YACE,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,kBAAkB;YAC1B,KAAK,EAAE,yBAAyB;SACjC;KACF;IACD,cAAc,EAAE;QACd;YACE,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,6BAA6B;YACrC,KAAK,EAAE,yBAAyB;SACjC;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAyB;IAC5D,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,CAAC,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,MAAM,QAAQ,CAAC,UAAU,CAAC,sBAAsB,EAAE;QAChD,eAAe,EAAE;YACf,iBAAiB;YACjB,qBAAqB,EAAE,4CAA4C;SACpE;KACF,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6CAA6C,CACjE,OAAgB;;IAEhB,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,WAAW,CAC5B,MAAA,GAAG,CAAC,+BAA+B,mCAAI,EAAE,EACzC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,CACpC,CAAC;IACF,OAAO;QACL,MAAM,EAAE,MAAM;QACd,QAAQ;KACT,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { Context, Test } from \"mocha\";\nimport { Recorder, SanitizerOptions, env } from \"@azure-tools/test-recorder\";\nimport { EmailClient } from \"../../../src\";\n\nexport interface RecordedEmailClient {\n client: EmailClient;\n recorder: Recorder;\n}\n\nconst envSetupForPlayback: { [k: string]: string } = {\n COMMUNICATION_CONNECTION_STRING: \"endpoint=https://someEndpoint/;accesskey=someAccessKeyw==\",\n SENDER_ADDRESS: \"someSender@contoso.com\",\n RECIPIENT_ADDRESS: \"someRecipient@domain.com\",\n};\n\nconst sanitizerOptions: SanitizerOptions = {\n connectionStringSanitizers: [\n {\n actualConnString: env.COMMUNICATION_CONNECTION_STRING,\n fakeConnString: envSetupForPlayback[\"COMMUNICATION_CONNECTION_STRING\"],\n },\n ],\n headerSanitizers: [\n { key: \"repeatability-first-sent\", value: \"Sanitized\" },\n { key: \"repeatability-request-id\", value: \"Sanitized\" },\n { key: \"x-ms-client-request-id\", value: \"Sanitized\" },\n { key: \"x-ms-date\", value: \"Sanitized\" },\n { key: \"Date\", value: \"Sanitized\" },\n { key: \"Date\", value: \"Sanitized\" },\n { key: \"X-Azure-Ref\", value: \"Sanitized\" },\n { key: \"x-ms-request-id\", value: \"Sanitized\" },\n { key: \"Operation-Location\", value: \"https://someEndpoint/emails/someMessageId/status\" },\n ],\n uriSanitizers: [\n {\n regex: true,\n target: `emails/.*/status`,\n value: \"emails/Sanitized/status\",\n },\n ],\n bodySanitizers: [\n {\n regex: true,\n target: `\"messageId\"\\\\s?:\\\\s?\"[^\"]*\"`,\n value: `\"messageId\":\"Sanitized\"`,\n },\n ],\n};\n\nexport async function createRecorder(context: Test | undefined): Promise<Recorder> {\n const recorder = new Recorder(context);\n await recorder.start({ envSetupForPlayback });\n await recorder.addSanitizers(sanitizerOptions, [\"record\", \"playback\"]);\n await recorder.setMatcher(\"CustomDefaultMatcher\", {\n excludedHeaders: [\n \"Accept-Language\", // This is env-dependent\n \"x-ms-content-sha256\", // This is dependent on the current datetime\n ],\n });\n return recorder;\n}\n\nexport async function createRecordedEmailClientWithConnectionString(\n context: Context\n): Promise<RecordedEmailClient> {\n const recorder = await createRecorder(context.currentTest);\n\n const client = new EmailClient(\n env.COMMUNICATION_CONNECTION_STRING ?? \"\",\n recorder.configureClientOptions({})\n );\n return {\n client: client,\n recorder,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure/communication-email",
3
- "version": "1.0.0-alpha.20220524.1",
3
+ "version": "1.0.0-alpha.20220630.1",
4
4
  "description": "The is the JS Client SDK for email. This SDK enables users to send emails and get the status of sent email message.",
5
5
  "author": "Microsoft Corporation",
6
6
  "license": "MIT",
@@ -18,8 +18,9 @@
18
18
  "execute:samples": "dev-tool samples run samples-dev",
19
19
  "extract-api": "tsc -p . && api-extractor run --local",
20
20
  "format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
21
- "integration-test:browser": "karma start --single-run",
22
- "integration-test:node": "nyc mocha -r esm --require source-map-support/register --reporter ../../../common/tools/mocha-multi-reporter.js --full-trace -t 300000 dist-esm/test/public/*.spec.js dist-esm/test/public/node/*.spec.js",
21
+ "generate:client": "autorest --typescript ./swagger/README.md && rushx format",
22
+ "integration-test:browser": "dev-tool run test:browser",
23
+ "integration-test:node": "dev-tool run test:node-js-input -- --timeout 5000000 'dist-esm/test/**/*.spec.js'",
23
24
  "integration-test": "npm run integration-test:node && npm run integration-test:browser",
24
25
  "lint:fix": "eslint package.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]",
25
26
  "lint": "eslint package.json api-extractor.json src test --ext .ts",
@@ -27,8 +28,8 @@
27
28
  "test": "npm run build:test && npm run unit-test && npm run integration-test",
28
29
  "test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
29
30
  "test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node",
30
- "unit-test:browser": "karma start --single-run",
31
- "unit-test:node": "mocha -r esm -r ts-node/register --reporter ../../../common/tools/mocha-multi-reporter.js --full-trace --exclude \"test/**/browser/*.spec.ts\" \"test/**/*.spec.ts\"",
31
+ "unit-test:browser": "dev-tool run test:browser",
32
+ "unit-test:node": "dev-tool run test:node-ts-input -- --timeout 1200000 --exclude 'test/**/browser/*.spec.ts' 'test/**/*.spec.ts'",
32
33
  "unit-test": "npm run unit-test:node && npm run unit-test:browser"
33
34
  },
34
35
  "files": [
@@ -47,8 +48,10 @@
47
48
  ],
48
49
  "dependencies": {
49
50
  "@azure/core-auth": "^1.3.0",
51
+ "@azure/core-client": "^1.3.2",
50
52
  "@azure/core-http": "^2.0.0",
51
- "@azure/communication-common": "^1.1.0",
53
+ "@azure/core-rest-pipeline": "^1.3.2",
54
+ "@azure/communication-common": ">=2.1.0-alpha <2.1.0-alphb",
52
55
  "@azure/logger": "^1.0.0",
53
56
  "tslib": "^1.9.3",
54
57
  "uuid": "^8.3.2"
@@ -57,7 +60,7 @@
57
60
  "@azure/dev-tool": ">=1.0.0-alpha <1.0.0-alphb",
58
61
  "@azure/eslint-plugin-azure-sdk": ">=3.0.0-alpha <3.0.0-alphb",
59
62
  "@azure/test-utils": ">=1.0.0-alpha <1.0.0-alphb",
60
- "@azure-tools/test-recorder": "^1.0.0",
63
+ "@azure-tools/test-recorder": "^2.0.0",
61
64
  "@microsoft/api-extractor": "7.18.11",
62
65
  "@types/node": "^12.0.0",
63
66
  "@types/uuid": "^8.3.2",