postal-mime 2.1.0 → 2.1.1-patch.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.1.1](https://github.com/postalsys/postal-mime/compare/v2.1.0...v2.1.1) (2024-02-26)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **types:** Updated types for PostalMime ([bc90f6d](https://github.com/postalsys/postal-mime/commit/bc90f6d5b7d3e2475cece77bb094caf421dead97))
9
+
3
10
  ## [2.1.0](https://github.com/postalsys/postal-mime/compare/v2.0.2...v2.1.0) (2024-02-22)
4
11
 
5
12
 
package/README.md CHANGED
@@ -1,130 +1,6 @@
1
1
  # postal-mime
2
2
 
3
- Email parser for browser environments.
3
+ `postal-mime` is now `@postalsys/mime`
4
4
 
5
- PostalMime can be run in the main web thread or from Web Workers.
6
-
7
- ## Source
8
-
9
- Source code is available from [Github](https://github.com/postalsys/postal-mime).
10
-
11
- ## Demo
12
-
13
- See this [example](https://kreata.ee/postal-mime/example/).
14
-
15
- ## Usage
16
-
17
- First install the module from npm:
18
-
19
- ```
20
- $ npm install postal-mime
21
- ```
22
-
23
- next import the PostalMime class into your script:
24
-
25
- ```js
26
- import PostalMime from './node_modules/postal-mime/src/postal-mime.js';
27
- ```
28
-
29
- or when using from a Node.js app
30
-
31
- ```js
32
- import PostalMime from 'postal-mime';
33
- ```
34
-
35
- ### Promises
36
-
37
- All postal-mime methods use Promises, so you need to wait using `await` or wait for the `then()` method to fire until you get the response.
38
-
39
- #### Browser
40
-
41
- ```js
42
- import PostalMime from './node_modules/postal-mime/src/postal-mime.js';
43
-
44
- const parser = new PostalMime();
45
- const email = await parser.parse(`Subject: My awesome email 🤓
46
- Content-Type: text/html; charset=utf-8
47
-
48
- <p>Hello world 😵‍💫</p>`);
49
-
50
- console.log(email.subject);
51
- ```
52
-
53
- #### Node.js
54
-
55
- It is pretty much the same as in the browser.
56
-
57
- ```js
58
- import PostalMime from 'postal-mime';
59
- import util from 'node:util';
60
-
61
- const parser = new PostalMime();
62
- const email = await parser.parse(`Subject: My awesome email 🤓
63
- Content-Type: text/html; charset=utf-8
64
-
65
- <p>Hello world 😵‍💫</p>`);
66
-
67
- console.log(util.inspect(email, false, 22, true));
68
- ```
69
-
70
- #### Cloudflare [Email Workers](https://developers.cloudflare.com/email-routing/email-workers/)
71
-
72
- Pretty much the same as in Node.js. Use `message.raw` as the raw message for parsing.
73
-
74
- ```js
75
- import PostalMime from 'postal-mime';
76
-
77
- export default {
78
- async email(message, env, ctx) {
79
- const parser = new PostalMime();
80
- const email = await parser.parse(message.raw);
81
-
82
- console.log('Subject: ', email.subject);
83
- console.log('HTML: ', email.html);
84
- console.log('Text: ', email.text);
85
- }
86
- };
87
- ```
88
-
89
- #### parser.parse()
90
-
91
- ```js
92
- parser.parse(email) -> Promise
93
- ```
94
-
95
- Where
96
-
97
- - **email** is the rfc822 formatted email. Either a string, an ArrayBuffer, a Blob object or a Node.js Buffer
98
-
99
- > **NB** you can call `parse()` only once. If you need to parse another message, create a new _PostalMime_ object.
100
-
101
- This method parses an email message into a structured object with the following properties:
102
-
103
- - **headers** is an array of headers in the same order as found from the message (topmost headers first).
104
- - **headers[].key** is lowercase key of the header line, eg. `"dkim-signature"`
105
- - **headers[].value** is the unprocessed value of the header line
106
- - **from**, **sender**, **replyTo** includes a processed object for the corresponding headers
107
- - **from.name** is decoded name (empty string if not set)
108
- - **from.address** is the email address
109
- - **deliveredTo**, **returnPath** is the email address from the corresponding header
110
- - **to**, **cc**, **bcc** includes an array of processed objects for the corresponding headers
111
- - **to[].name** is decoded name (empty string if not set)
112
- - **to[].address** is the email address
113
- - **subject** is the email subject line
114
- - **messageId**, **inReplyTo**, **references** includes the value as found from the corresponding header without any processing
115
- - **date** is the email sending time formatted as an ISO date string (unless parsing failed and in this case the original value is used)
116
- - **html** is the HTML content of the message as a string
117
- - **text** is the plaintext content of the message as a string
118
- - **attachments** is an array that includes message attachments
119
- - **attachment[].filename** is the file name if provided
120
- - **attachment[].mimeType** is the MIME type of the attachment
121
- - **attachment[].disposition** is either "attachment", "inline" or `null` if disposition was not provided
122
- - **attachment[].related** is a boolean value that indicats if this attachment should be treated as embedded image
123
- - **attachment[].contentId** is the ID from Content-ID header
124
- - **attachment[].content** is an ArrayBuffer that contains the attachment file
125
-
126
- ## License
127
-
128
- &copy; 2021-2023 Andris Reinman
129
-
130
- `postal-mime` is licensed under the **MIT No Attribution license**
5
+ - @postalsys/mime in [Github](https://github.com/postalsys/mime)
6
+ - @postalsys/mime in [NPM](https://www.npmjs.com/package/@postalsys/mime)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postal-mime",
3
- "version": "2.1.0",
3
+ "version": "2.1.1-patch.1",
4
4
  "description": "Email parser for browser environments",
5
5
  "main": "./src/postal-mime.js",
6
6
  "exports": {
@@ -27,10 +27,11 @@
27
27
  "author": "Andris Reinman",
28
28
  "license": "MIT-0",
29
29
  "devDependencies": {
30
+ "@types/node": "20.11.20",
30
31
  "cross-blob": "3.0.2",
31
- "eslint": "8.56.0",
32
+ "cross-env": "7.0.3",
33
+ "eslint": "8.57.0",
32
34
  "eslint-cli": "1.1.1",
33
- "iframe-resizer": "4.3.9",
34
- "cross-env": "7.0.3"
35
+ "iframe-resizer": "4.3.9"
35
36
  }
36
37
  }
package/postal-mime.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type RawEmail = string | ArrayBuffer | Blob | Buffer;
1
+ export type RawEmail = string | ArrayBuffer | Uint8Array | Blob | Buffer | ReadableStream;
2
2
 
3
3
  export type Header = Record<string, string>;
4
4
 
@@ -13,7 +13,7 @@ export type Attachment = {
13
13
  disposition: "attachment" | "inline" | null;
14
14
  related?: boolean;
15
15
  contentId?: string;
16
- content: ArrayBuffer;
16
+ content: Uint8Array;
17
17
  };
18
18
 
19
19
  export type Email = {
@@ -317,30 +317,31 @@ export default class PostalMime {
317
317
  }
318
318
  this.started = true;
319
319
 
320
- // check if the input is a readable stream and resolve it into an ArrayBuffer
320
+ // Check if the input is a readable stream and resolve it into an ArrayBuffer
321
321
  if (buf && typeof buf.getReader === 'function') {
322
322
  buf = await this.resolveStream(buf);
323
323
  }
324
324
 
325
- // should it thrown on empty value instead?
325
+ // Should it throw for an empty value instead of defaulting to an empty ArrayBuffer?
326
326
  buf = buf || ArrayBuffer(0);
327
327
 
328
+ // Cast string input to Uint8Array
328
329
  if (typeof buf === 'string') {
329
- // cast string input to ArrayBuffer
330
330
  buf = textEncoder.encode(buf);
331
331
  }
332
332
 
333
+ // Cast Blob to ArrayBuffer
333
334
  if (buf instanceof Blob || Object.prototype.toString.call(buf) === '[object Blob]') {
334
- // can't process blob directly, cast to ArrayBuffer
335
335
  buf = await blobToArrayBuffer(buf);
336
336
  }
337
337
 
338
+ // Cast Node.js Buffer object or Uint8Array into ArrayBuffer
338
339
  if (buf.buffer instanceof ArrayBuffer) {
339
- // Node.js Buffer object or Uint8Array
340
340
  buf = new Uint8Array(buf).buffer;
341
341
  }
342
342
 
343
343
  this.buf = buf;
344
+
344
345
  this.av = new Uint8Array(buf);
345
346
  this.readPos = 0;
346
347