@pipedream/microsoft_outlook 1.7.8 → 1.7.9
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.
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import mime from "mime-types";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import PDFDocument from "pdfkit";
|
|
5
|
+
import { PassThrough } from "stream";
|
|
6
|
+
import puppeteer from "puppeteer-core";
|
|
7
|
+
import chromium from "@sparticuz/chromium";
|
|
8
|
+
import mammoth from "mammoth";
|
|
9
|
+
import { ConfigurationError } from "@pipedream/platform";
|
|
3
10
|
import microsoftOutlook from "../../microsoft_outlook.app.mjs";
|
|
4
11
|
|
|
5
12
|
export default {
|
|
6
13
|
key: "microsoft_outlook-download-attachment",
|
|
7
14
|
name: "Download Attachment",
|
|
8
15
|
description: "Downloads an attachment to the /tmp directory. [See the documentation](https://learn.microsoft.com/en-us/graph/api/attachment-get?view=graph-rest-1.0&tabs=http)",
|
|
9
|
-
version: "0.0.
|
|
16
|
+
version: "0.0.10",
|
|
10
17
|
annotations: {
|
|
11
18
|
destructiveHint: false,
|
|
12
19
|
openWorldHint: true,
|
|
@@ -36,12 +43,71 @@ export default {
|
|
|
36
43
|
label: "Filename",
|
|
37
44
|
description: "The filename to save the attachment as in the /tmp directory",
|
|
38
45
|
},
|
|
46
|
+
convertToPdf: {
|
|
47
|
+
type: "boolean",
|
|
48
|
+
label: "Convert to PDF",
|
|
49
|
+
description: "Whether to convert the attachment to a PDF file. Supports converting image, text, HTML, and DOCX files.",
|
|
50
|
+
optional: true,
|
|
51
|
+
},
|
|
39
52
|
syncDir: {
|
|
40
53
|
type: "dir",
|
|
41
54
|
accessMode: "write",
|
|
42
55
|
sync: true,
|
|
43
56
|
},
|
|
44
57
|
},
|
|
58
|
+
methods: {
|
|
59
|
+
getAttachmentInfo({
|
|
60
|
+
messageId, attachmentId, ...args
|
|
61
|
+
}) {
|
|
62
|
+
return this.microsoftOutlook._makeRequest({
|
|
63
|
+
path: `/me/messages/${messageId}/attachments/${attachmentId}`,
|
|
64
|
+
...args,
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
async imageToPdf(imageBuffer) {
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
const doc = new PDFDocument({
|
|
70
|
+
autoFirstPage: false,
|
|
71
|
+
});
|
|
72
|
+
const stream = new PassThrough();
|
|
73
|
+
const chunks = [];
|
|
74
|
+
stream.on("error", reject);
|
|
75
|
+
doc.on("error", reject);
|
|
76
|
+
|
|
77
|
+
stream.on("data", (c) => chunks.push(c));
|
|
78
|
+
stream.on("end", () => resolve(Buffer.concat(chunks)));
|
|
79
|
+
|
|
80
|
+
doc.pipe(stream);
|
|
81
|
+
doc.addPage();
|
|
82
|
+
doc.image(imageBuffer, {
|
|
83
|
+
fit: [
|
|
84
|
+
500,
|
|
85
|
+
700,
|
|
86
|
+
],
|
|
87
|
+
align: "center",
|
|
88
|
+
});
|
|
89
|
+
doc.end();
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
async htmlToPdf(htmlBuffer) {
|
|
93
|
+
const browser = await puppeteer.launch({
|
|
94
|
+
executablePath: await chromium.executablePath(),
|
|
95
|
+
args: chromium.args,
|
|
96
|
+
headless: chromium.headless,
|
|
97
|
+
});
|
|
98
|
+
try {
|
|
99
|
+
const page = await browser.newPage();
|
|
100
|
+
await page.setContent(htmlBuffer.toString("utf8"), {
|
|
101
|
+
waitUntil: "domcontentloaded",
|
|
102
|
+
});
|
|
103
|
+
return await page.pdf({
|
|
104
|
+
format: "A4",
|
|
105
|
+
});
|
|
106
|
+
} finally {
|
|
107
|
+
await browser.close();
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
},
|
|
45
111
|
async run({ $ }) {
|
|
46
112
|
const response = await this.microsoftOutlook.getAttachment({
|
|
47
113
|
$,
|
|
@@ -50,14 +116,46 @@ export default {
|
|
|
50
116
|
responseType: "arraybuffer",
|
|
51
117
|
});
|
|
52
118
|
|
|
119
|
+
let filename = this.filename;
|
|
120
|
+
if (this.convertToPdf) {
|
|
121
|
+
const name = path.parse(filename).name;
|
|
122
|
+
filename = `${name}.pdf`;
|
|
123
|
+
}
|
|
124
|
+
|
|
53
125
|
const rawcontent = response.toString("base64");
|
|
54
|
-
|
|
55
|
-
|
|
126
|
+
let buffer = Buffer.from(rawcontent, "base64");
|
|
127
|
+
|
|
128
|
+
if (this.convertToPdf) {
|
|
129
|
+
const { contentType: mimeType } = await this.getAttachmentInfo({
|
|
130
|
+
$,
|
|
131
|
+
messageId: this.messageId,
|
|
132
|
+
attachmentId: this.attachmentId,
|
|
133
|
+
});
|
|
134
|
+
if (mimeType !== "application/pdf") {
|
|
135
|
+
if (mimeType?.startsWith("image/")) {
|
|
136
|
+
buffer = await this.imageToPdf(buffer);
|
|
137
|
+
} else if (mimeType === "text/html") {
|
|
138
|
+
buffer = await this.htmlToPdf(buffer);
|
|
139
|
+
} else if (mimeType === "text/plain") {
|
|
140
|
+
const textBuffer = Buffer.from(`<pre>${buffer.toString("utf8")}</pre>`, "utf8");
|
|
141
|
+
buffer = await this.htmlToPdf(textBuffer);
|
|
142
|
+
} else if (mimeType === "application/vnd.openxmlformats-officedocument.wordprocessingml.document") {
|
|
143
|
+
const { value: html } = await mammoth.convertToHtml({
|
|
144
|
+
buffer,
|
|
145
|
+
});
|
|
146
|
+
buffer = await this.htmlToPdf(html);
|
|
147
|
+
} else {
|
|
148
|
+
throw new ConfigurationError(`Cannot convert file type: ${mimeType} to PDF`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const downloadedFilepath = `/tmp/${filename}`;
|
|
56
154
|
fs.writeFileSync(downloadedFilepath, buffer);
|
|
57
155
|
const contentType = mime.lookup(downloadedFilepath);
|
|
58
156
|
|
|
59
157
|
return {
|
|
60
|
-
fileName:
|
|
158
|
+
fileName: filename,
|
|
61
159
|
contentType,
|
|
62
160
|
filePath: downloadedFilepath,
|
|
63
161
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pipedream/microsoft_outlook",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.9",
|
|
4
4
|
"description": "Pipedream Microsoft Outlook Components",
|
|
5
5
|
"main": "microsoft_outlook.app.mjs",
|
|
6
6
|
"keywords": [
|
|
@@ -13,10 +13,14 @@
|
|
|
13
13
|
"author": "Pipedream <support@pipedream.com> (https://pipedream.com/)",
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@pipedream/platform": "^3.1.1",
|
|
16
|
+
"@sparticuz/chromium": "^143.0.4",
|
|
16
17
|
"axios": "^0.30.2",
|
|
17
18
|
"js-base64": "^3.7.2",
|
|
19
|
+
"mammoth": "^1.11.0",
|
|
18
20
|
"md5": "^2.3.0",
|
|
19
|
-
"mime-types": "^2.1.35"
|
|
21
|
+
"mime-types": "^2.1.35",
|
|
22
|
+
"pdfkit": "^0.17.2",
|
|
23
|
+
"puppeteer-core": "^24.36.1"
|
|
20
24
|
},
|
|
21
25
|
"publishConfig": {
|
|
22
26
|
"access": "public"
|