@social-mail/shared 1.0.3

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 (69) hide show
  1. package/.gitlab-ci.yml +16 -0
  2. package/.vscode/launch.json +21 -0
  3. package/.vscode/settings.json +55 -0
  4. package/README.md +3 -0
  5. package/dist/QueryIterator.js +28 -0
  6. package/dist/QueryIterator.js.map +1 -0
  7. package/dist/mime-parser/AttachmentFile.js +21 -0
  8. package/dist/mime-parser/AttachmentFile.js.map +1 -0
  9. package/dist/mime-parser/HeaderContentDisposition.js +32 -0
  10. package/dist/mime-parser/HeaderContentDisposition.js.map +1 -0
  11. package/dist/mime-parser/HeaderContentType.js +33 -0
  12. package/dist/mime-parser/HeaderContentType.js.map +1 -0
  13. package/dist/mime-parser/MimeMessage.js +99 -0
  14. package/dist/mime-parser/MimeMessage.js.map +1 -0
  15. package/dist/mime-parser/MimeNode.js +406 -0
  16. package/dist/mime-parser/MimeNode.js.map +1 -0
  17. package/dist/mime-parser/encoder/RawBuffer.js +57 -0
  18. package/dist/mime-parser/encoder/RawBuffer.js.map +1 -0
  19. package/dist/mime-parser/encoder/base64-to-blob.js +30 -0
  20. package/dist/mime-parser/encoder/base64-to-blob.js.map +1 -0
  21. package/dist/mime-parser/encoder/quoted-printable.js +71 -0
  22. package/dist/mime-parser/encoder/quoted-printable.js.map +1 -0
  23. package/dist/mime-parser/encoder/word-encoding.js +45 -0
  24. package/dist/mime-parser/encoder/word-encoding.js.map +1 -0
  25. package/dist/mime-parser/parsePairs.js +40 -0
  26. package/dist/mime-parser/parsePairs.js.map +1 -0
  27. package/dist/mime-parser/stream/LineStream.js +99 -0
  28. package/dist/mime-parser/stream/LineStream.js.map +1 -0
  29. package/dist/mime-parser/stream/TextWriter.js +36 -0
  30. package/dist/mime-parser/stream/TextWriter.js.map +1 -0
  31. package/dist/mime-parser/tokenizer.js +46 -0
  32. package/dist/mime-parser/tokenizer.js.map +1 -0
  33. package/dist/tests/mime/lines-test.js +19 -0
  34. package/dist/tests/mime/lines-test.js.map +1 -0
  35. package/dist/tests/mime/message1.js +58 -0
  36. package/dist/tests/mime/message1.js.map +1 -0
  37. package/dist/tests/mime/message2.js +77 -0
  38. package/dist/tests/mime/message2.js.map +1 -0
  39. package/dist/tests/mime/pairs.js +33 -0
  40. package/dist/tests/mime/pairs.js.map +1 -0
  41. package/dist/tests/mime/parse-headers.js +104 -0
  42. package/dist/tests/mime/parse-headers.js.map +1 -0
  43. package/dist/tests/mime/word-encoding-test.js +21 -0
  44. package/dist/tests/mime/word-encoding-test.js.map +1 -0
  45. package/dist/tsconfig.tsbuildinfo +1 -0
  46. package/index.js +4 -0
  47. package/package.json +17 -0
  48. package/src/QueryIterator.js +33 -0
  49. package/src/mime-parser/AttachmentFile.js +29 -0
  50. package/src/mime-parser/HeaderContentDisposition.js +32 -0
  51. package/src/mime-parser/HeaderContentType.js +34 -0
  52. package/src/mime-parser/MimeMessage.js +100 -0
  53. package/src/mime-parser/MimeNode.js +435 -0
  54. package/src/mime-parser/encoder/RawBuffer.js +60 -0
  55. package/src/mime-parser/encoder/base64-to-blob.js +26 -0
  56. package/src/mime-parser/encoder/quoted-printable.js +118 -0
  57. package/src/mime-parser/encoder/word-encoding.js +43 -0
  58. package/src/mime-parser/parsePairs.js +34 -0
  59. package/src/mime-parser/stream/LineStream.js +85 -0
  60. package/src/mime-parser/stream/TextWriter.js +27 -0
  61. package/src/mime-parser/tokenizer.js +37 -0
  62. package/src/tests/mime/lines-test.js +17 -0
  63. package/src/tests/mime/message1.js +46 -0
  64. package/src/tests/mime/message2.js +73 -0
  65. package/src/tests/mime/pairs.js +38 -0
  66. package/src/tests/mime/parse-headers.js +90 -0
  67. package/src/tests/mime/word-encoding-test.js +13 -0
  68. package/test.js +70 -0
  69. package/tsconfig.json +16 -0
@@ -0,0 +1,90 @@
1
+ import { MimeNode } from "../../mime-parser/MimeNode.js";
2
+ import { StringLineStream } from "../../mime-parser/stream/LineStream.js";
3
+
4
+ export default async function() {
5
+ const root = new MimeNode();
6
+ await root.parse(new StringLineStream(data));
7
+
8
+ const line = root.header("List-Unsubscribe");
9
+ console.log(line);
10
+ }
11
+
12
+ const data = `Delivered-To: ackava@gmail.com
13
+ Received: by 2002:ab3:fb12:0:b0:55d:606f:316e with SMTP id n18csp110497qnc;
14
+ Tue, 16 Jul 2024 00:23:51 -0700 (PDT)
15
+ X-Google-Smtp-Source: AGHT+IG1SNKA212/w5wgGPhsGwDhteJcLZxIoFYt5++EY6fqJsoA8eG3YioEOhn33fp7b/Ii1kTy
16
+ X-Received: by 2002:a05:6512:b84:b0:52c:95d1:87ae with SMTP id 2adb3069b0e04-52edef0e8acmr721947e87.12.1721114631113;
17
+ Tue, 16 Jul 2024 00:23:51 -0700 (PDT)
18
+ ARC-Seal: i=1; a=rsa-sha256; t=1721114631; cv=none;
19
+ d=google.com; s=arc-20160816;
20
+ b=h5iWpTD67iJQIPQ2rISbEeCRpR5O6TndQGDDEF3fiDa/oeu+TrOZ1HqC/ItpAW8DPM
21
+ uhHYiizYmwW55CqmX9WBz1ZXW/7UonlaueovDvS53gE2z7JZJTOYQ+0A2a5UOW1uUT20
22
+ gOtIDijsIJWslFbUHhylDntEYuKqhilu8CmPKq7JV9u0kvGmfu9o2nAlvAF9YTFoQWKg
23
+ oI64yIdppcVBKvrtY8IBErpSTdFLjTE8+gmyecrqSckiu8iVut98rCToLapPqJEPHqlk
24
+ SfJvj6GVm+uxrvibo7ZAp47t0SRolim2bmf98WyTP5cQNH8ArljitYXpPcR4pwjaRr09
25
+ ldVQ==
26
+ ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
27
+ h=content-transfer-encoding:dkim-signature:date:mime-version
28
+ :message-id:feedback-id:list-unsubscribe-post:list-unsubscribe
29
+ :reply-to:to:from:subject:dkim-signature;
30
+ bh=0maos44Zuz8flcClsVew9ePIYSOCt14KoDH/LV+EAnU=;
31
+ fh=DKA8qbEmJrBdLQCfJ+uCkMwAeFQdRJbQdCs9kin0cIA=;
32
+ b=PQr4Z7hlUhnUUAZO7jTDPUWNy56d+ftqg2UnFkjLonrj3Fnvmp0k/VC4bajuvrl1q0
33
+ eC8b8LB1TVEwgakQRRdXBTx5Bavf6Hz+U5ma4ODhyB4h/ElvouY9jc+YfAVghMaaI7Xt
34
+ gz66knjcQEpomwIkiRPdrcqOFRUocGPCgkfSLMPHooT2xlH2ygGcM7OpF1d0apeLb06Y
35
+ xnHCp33ogJY1tOsNMcaq+CWIyA5JwIivTW9UDjxv6IEe+grgulh3ZGWH5OKNXjyIwkNn
36
+ FLWh64LGxGV8VkmwQz8irsNiSnleYiJ6DCWf0xLjbYWoRZdq0PCBmdbditGCwLI1hwgy
37
+ 76EQ==;
38
+ dara=google.com
39
+ ARC-Authentication-Results: i=1; mx.google.com;
40
+ dkim=pass header.i=@mailer.dellyranks.com header.s=dellymail header.b=tXYXEFDD;
41
+ dkim=pass header.i=@mailer.dellyranks.com header.s=mailer header.b=qzKwQCsc;
42
+ spf=pass (google.com: domain of info@mailer.dellyranks.com designates 198.244.191.107 as permitted sender) smtp.mailfrom=info@mailer.dellyranks.com;
43
+ dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mailer.dellyranks.com
44
+ Return-Path: <info@mailer.dellyranks.com>
45
+ Received: from mailer.dellyranks.com (mailer.dellyranks.com. [198.244.191.107])
46
+ by mx.google.com with ESMTPS id 2adb3069b0e04-52ed25289b1si2008285e87.128.2024.07.16.00.23.50
47
+ for <ackava@gmail.com>
48
+ (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256);
49
+ Tue, 16 Jul 2024 00:23:51 -0700 (PDT)
50
+ Received-SPF: pass (google.com: domain of info@mailer.dellyranks.com designates 198.244.191.107 as permitted sender) client-ip=198.244.191.107;
51
+ Authentication-Results: mx.google.com;
52
+ dkim=pass header.i=@mailer.dellyranks.com header.s=dellymail header.b=tXYXEFDD;
53
+ dkim=pass header.i=@mailer.dellyranks.com header.s=mailer header.b=qzKwQCsc;
54
+ spf=pass (google.com: domain of info@mailer.dellyranks.com designates 198.244.191.107 as permitted sender) smtp.mailfrom=info@mailer.dellyranks.com;
55
+ dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mailer.dellyranks.com
56
+ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=dellymail; d=mailer.dellyranks.com;
57
+ h=Subject:From:To:Reply-To:List-Unsubscribe:Feedback-ID:Message-ID:
58
+ MIME-Version:Date:Content-Type:Content-Transfer-Encoding;
59
+ i=info@mailer.dellyranks.com;
60
+ bh=0maos44Zuz8flcClsVew9ePIYSOCt14KoDH/LV+EAnU=;
61
+ b=tXYXEFDDK2TGnvSi537/Pze7NQn3mklPdoqeRogFSGXg2l/tCTeyLkg2cI119e6PmE7UTJo2LBK9
62
+ dTatP6Xnjl1SAbgxNccD5NONXQKJ1GOi8GhE7j7kkvRE+O7Jy3Cm2r7OO/6+MDjrcO2I5Kj1pjgD
63
+ 6Omfmv14dAZBNlLdH0p45b4+afS5qkvkqH+13HCKLFwTi11KjAfR6MkMjkle0H5ml/1e8/FAATMN
64
+ pyakbrzNIlgEBKv6/y7332SlGxzdqcUcnMQ+iGV1Tzh4ViBtH+urwzZS7wmtvtW3MOqPFA/LFof7
65
+ Yz5fOGWkFJsNgPsfvcrMwEtNnFQC3IYBdWHbkA==
66
+ Subject: Lacoste Mega Clearance SALE =?utf-8?Q?=E2=9A=A1=EF=B8=8FUpto?= 50%
67
+ Off - Clothing, Shoes & Accessories -ackava@gmail.com
68
+ From: Lacoste IN <info@mailer.dellyranks.com>
69
+ To: "ackava@gmail.com" <ackava@gmail.com>
70
+ Reply-To: Lacoste IN <info@mailer.dellyranks.com>
71
+ List-Unsubscribe: <https://link.dellyranks.com/lists/aw175zeewnfff/unsubscribe/qp668otfdm9ff/ws6198a3vqfea?source=email-client-unsubscribe-button>,
72
+ <mailto:info@mailer.dellyranks.com?subject=Campaign-Uid%3Aws6198a3vqfea%20%2F%20Subscriber-Uid%3Aqp668otfdm9ff%20-%20Unsubscribe%20request&body=Please%20unsubscribe%20me%21>
73
+ List-Unsubscribe-Post: List-Unsubscribe=One-Click
74
+ Feedback-ID: ws6198a3vqfea:qp668otfdm9ff:aw175zeewnfff:xn945frfr4287
75
+ Message-ID: <520e90e95b74def5565ce1eaed5919f0a7e0b522@mailer.dellyranks.com>
76
+ MIME-Version: 1.0
77
+ Date: Tue, 16 Jul 2024 07:17:09 +0000
78
+ DKIM-Signature: v=1; q=dns/txt; a=rsa-sha256;
79
+ bh=0maos44Zuz8flcClsVew9ePIYSOCt14KoDH/LV+EAnU=; d=mailer.dellyranks.com;
80
+ h=Subject: From: To: Reply-To: List-Unsubscribe: List-Unsubscribe-Post:
81
+ Feedback-ID: MIME-Version: Date; i=@mailer.dellyranks.com; s=mailer;
82
+ t=1721114229; c=relaxed/relaxed;
83
+ b=qzKwQCscDn5GjAKWc23SZtiYeUTXP64pd/kwdbCojwmmfNv5Q4BjUmcVy/54VRPIKrnjjge2+
84
+ 9LKgZeux4arQaWolfvqrhdpquWTLQv+H7Li08sQOGbiFXGtF+jBFKVUn5bHXog8u2/ysBggrj
85
+ VHbURpr3goUXxuQrsTaiUnmvsLxH0C1YzbPgzJf28gO49Eld5HgvJJwVl8CeFMwe1x9g1cVMN
86
+ os3CW3FqYLfxFymJxch24Vmsr2NjNX0yRZQ4TNhIV1PgiiQowGa29GfkCKZ1Sp/pUV55NIsZh
87
+ uCkrMcHF4Cdy8XTRe1eHz6H8CVjQR9hNQVlDEK4gE2G07KtXCQ==
88
+ Content-Type: text/html; charset=utf-8
89
+ Content-Transfer-Encoding: quoted-printable
90
+ `;
@@ -0,0 +1,13 @@
1
+ import assert from "assert";
2
+ import { wordEncoding } from "../../mime-parser/encoder/word-encoding.js";
3
+
4
+ export default function () {
5
+
6
+ assert.equal("a", wordEncoding.decode("a"));
7
+ assert.equal("Captives (1080 × 1080 px).png", wordEncoding.decode("=?UTF-8?B?Q2FwdGl2ZXMgKDEwODAgw5cgMTA4MCBweCkucG5n?="));
8
+ assert.equal("Captives (1080 × 1080 px).png", wordEncoding.decode(`=?UTF-8?B?Q2FwdGl2ZXMgKDEwODAgw5cgMTA4MCBweCk=?=
9
+ =?UTF-8?B?LnBuZw==?=`));
10
+
11
+
12
+ assert.equal("サンプルa b", wordEncoding.decode("=?UTF-8?Q?=E3=82=B5=E3=83=B3=E3=83=97=E3=83=ABa_b?="));
13
+ }
package/test.js ADDED
@@ -0,0 +1,70 @@
1
+ import { readdir } from "fs/promises";
2
+ import path from "path";
3
+
4
+ const results = [];
5
+
6
+ class TestRunner {
7
+
8
+ /**
9
+ *
10
+ * @param {string} name
11
+ */
12
+ static async runTest(name, thisParam) {
13
+ const moduleExports = await import(name);
14
+ const { default: d } = moduleExports;
15
+ if (!d) {
16
+ return;
17
+ }
18
+ try {
19
+
20
+ const r = d.call(thisParam);
21
+ if (r?.then) {
22
+ await r;
23
+ }
24
+ results.push({ name });
25
+ } catch (error) {
26
+ results.unshift({ name, error });
27
+ }
28
+ }
29
+
30
+ static async runAll(dir, db) {
31
+ const items = await readdir(dir, { withFileTypes: true });
32
+ const tasks = [];
33
+ for (const iterator of items) {
34
+ const next = dir + "/" + iterator.name;
35
+ if (iterator.isDirectory()) {
36
+ tasks.push(this.runAll(next, db));
37
+ continue;
38
+ }
39
+ if (iterator.name.endsWith(".js")) {
40
+ tasks.push(this.runTest(next, { }));
41
+ }
42
+ }
43
+ await Promise.all(tasks);
44
+ }
45
+
46
+ }
47
+
48
+ await TestRunner.runAll( "./dist/tests");
49
+
50
+ let exitCode = 0;
51
+ let failed = 0;
52
+
53
+ for (const { error, name } of results) {
54
+ if (error) {
55
+ exitCode = 1;
56
+ failed++;
57
+ console.error(`${name} failed`);
58
+ console.error(error?.stack ?? error);
59
+ continue;
60
+ }
61
+ console.log(`${name} executed.`);
62
+ }
63
+
64
+ if (exitCode === 0) {
65
+ console.log(`${results.length} tests ran successfully.`);
66
+ } else {
67
+ console.log(`${failed} Tests out of ${results.length} failed.`);
68
+ }
69
+
70
+ process.exit(exitCode);
package/tsconfig.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "compilerOptions": {
3
+ "allowJs": true,
4
+ "skipLibCheck": true,
5
+ "skipDefaultLibCheck": true,
6
+ "outDir": "dist",
7
+ "target": "ES6",
8
+ "module": "ES2022",
9
+ "sourceMap": true,
10
+ "incremental": true,
11
+ "moduleResolution": "Bundler"
12
+ },
13
+ "include": [
14
+ "src/**/*"
15
+ ]
16
+ }