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

Sign up to get free protection for your applications and to get access to all the features.
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 +11 -8
  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":"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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 { 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.20220803.3",
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",
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",
@@ -82,7 +85,7 @@
82
85
  "mocha": "^7.1.1",
83
86
  "mocha-junit-reporter": "^2.0.0",
84
87
  "nyc": "^15.0.0",
85
- "typescript": "~4.2.0",
88
+ "typescript": "~4.6.0",
86
89
  "prettier": "^2.5.1",
87
90
  "rimraf": "^3.0.0"
88
91
  },