@unchainedshop/plugins 4.0.0-rc.19 → 4.0.0-rc.20

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 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/worker/email.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,6BAA6B,eAEzC,CAAC"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/worker/email.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,6BAA6B,eAEzC,CAAC"}
@@ -1,5 +1,9 @@
1
1
  import { WorkerDirector, WorkerAdapter } from '@unchainedshop/core';
2
2
  import nodemailer from 'nodemailer';
3
+ import { spawn } from 'node:child_process';
4
+ import { writeFile, mkdtemp } from 'node:fs/promises';
5
+ import { tmpdir } from 'node:os';
6
+ import { join } from 'node:path';
3
7
  export const checkEmailInterceptionEnabled = () => {
4
8
  return process.env.NODE_ENV !== 'production' && !process.env.UNCHAINED_DISABLE_EMAIL_INTERCEPTION;
5
9
  };
@@ -16,9 +20,14 @@ const buildLink = async ({ filename, content, href, contentType, encoding, path
16
20
  return '';
17
21
  };
18
22
  const openInBrowser = async (options) => {
19
- // eslint-disable-next-line
20
- // @ts-ignore
21
- const { default: open, apps } = await import('open');
23
+ const command = {
24
+ darwin: 'open',
25
+ win32: 'explorer.exe',
26
+ linux: 'xdg-open',
27
+ }[process.platform];
28
+ if (!command) {
29
+ return false;
30
+ }
22
31
  const messageBody = options.html || options.text.replace(/(\r\n|\n|\r)/gm, '<br/>');
23
32
  const attachmentLinks = await Promise.all((options.attachments || []).map(buildLink));
24
33
  const content = `
@@ -41,10 +50,19 @@ const openInBrowser = async (options) => {
41
50
  ${messageBody}
42
51
  </body>
43
52
  </html>`;
44
- const base64 = Buffer.from(content).toString('base64');
45
- const dataUri = `data:text/html;base64,${base64}`;
46
- await open(dataUri, { app: [{ name: apps.chrome }, { name: apps.firefox }, { name: apps.browser }] });
47
- return true;
53
+ // Create a temporary directory and file
54
+ const tempDir = await mkdtemp(join(tmpdir(), 'unchained-email-'));
55
+ const tempFile = join(tempDir, 'email-preview.html');
56
+ await writeFile(tempFile, content, 'utf8');
57
+ return new Promise((resolve) => {
58
+ const child = spawn(command, [tempFile], {
59
+ detached: true,
60
+ stdio: 'ignore',
61
+ });
62
+ child.unref();
63
+ // Resolve immediately after spawning since process is detached
64
+ resolve(true);
65
+ });
48
66
  };
49
67
  const EmailWorkerPlugin = {
50
68
  ...WorkerAdapter,
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/worker/email.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/worker/email.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/plugins",
3
- "version": "4.0.0-rc.19",
3
+ "version": "4.0.0-rc.20",
4
4
  "main": "lib/plugins-index.js",
5
5
  "types": "lib/plugins-index.d.ts",
6
6
  "exports": {
@@ -34,18 +34,18 @@
34
34
  },
35
35
  "homepage": "https://github.com/unchainedshop/unchained#readme",
36
36
  "dependencies": {
37
- "@unchainedshop/api": "^4.0.0-rc.19",
38
- "@unchainedshop/core-delivery": "^4.0.0-rc.19",
39
- "@unchainedshop/core-enrollments": "^4.0.0-rc.19",
40
- "@unchainedshop/core-orders": "^4.0.0-rc.19",
41
- "@unchainedshop/core-payment": "^4.0.0-rc.19",
42
- "@unchainedshop/core-products": "^4.0.0-rc.19",
43
- "@unchainedshop/core-warehousing": "^4.0.0-rc.19",
44
- "@unchainedshop/core-worker": "^4.0.0-rc.19",
45
- "@unchainedshop/events": "^4.0.0-rc.19",
46
- "@unchainedshop/file-upload": "^4.0.0-rc.19",
47
- "@unchainedshop/logger": "^4.0.0-rc.19",
48
- "@unchainedshop/utils": "^4.0.0-rc.19"
37
+ "@unchainedshop/api": "^4.0.0-rc.20",
38
+ "@unchainedshop/core-delivery": "^4.0.0-rc.20",
39
+ "@unchainedshop/core-enrollments": "^4.0.0-rc.20",
40
+ "@unchainedshop/core-orders": "^4.0.0-rc.20",
41
+ "@unchainedshop/core-payment": "^4.0.0-rc.20",
42
+ "@unchainedshop/core-products": "^4.0.0-rc.20",
43
+ "@unchainedshop/core-warehousing": "^4.0.0-rc.20",
44
+ "@unchainedshop/core-worker": "^4.0.0-rc.20",
45
+ "@unchainedshop/events": "^4.0.0-rc.20",
46
+ "@unchainedshop/file-upload": "^4.0.0-rc.20",
47
+ "@unchainedshop/logger": "^4.0.0-rc.20",
48
+ "@unchainedshop/utils": "^4.0.0-rc.20"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@aws-sdk/client-eventbridge": ">= 3.714 < 4",
@@ -60,7 +60,6 @@
60
60
  "fastify": ">= 5.2 < 6",
61
61
  "minio": "8.x",
62
62
  "nodemailer": ">= 6.9 < 8",
63
- "open": "10.x",
64
63
  "p-memoize": "8.x",
65
64
  "stripe": ">= 19 < 20",
66
65
  "web-push": ">= 3.6 <4",
@@ -100,9 +99,6 @@
100
99
  "nodemailer": {
101
100
  "optional": true
102
101
  },
103
- "open": {
104
- "optional": true
105
- },
106
102
  "p-memoize": {
107
103
  "optional": true
108
104
  },
@@ -130,7 +126,6 @@
130
126
  "fastify": "^5.4.0",
131
127
  "minio": "^8.0.5",
132
128
  "nodemailer": "^7.0.5",
133
- "open": "^10.1.2",
134
129
  "p-memoize": "^8.0.0",
135
130
  "stripe": "^19.1.0",
136
131
  "tsx": "^4.20.3",
@@ -1,5 +1,9 @@
1
1
  import { WorkerDirector, WorkerAdapter, IWorkerAdapter } from '@unchainedshop/core';
2
2
  import nodemailer from 'nodemailer';
3
+ import { spawn } from 'node:child_process';
4
+ import { writeFile, mkdtemp } from 'node:fs/promises';
5
+ import { tmpdir } from 'node:os';
6
+ import { join } from 'node:path';
3
7
 
4
8
  export const checkEmailInterceptionEnabled = () => {
5
9
  return process.env.NODE_ENV !== 'production' && !process.env.UNCHAINED_DISABLE_EMAIL_INTERCEPTION;
@@ -18,10 +22,16 @@ const buildLink = async ({ filename, content, href, contentType, encoding, path
18
22
  return '';
19
23
  };
20
24
 
21
- const openInBrowser = async (options) => {
22
- // eslint-disable-next-line
23
- // @ts-ignore
24
- const { default: open, apps } = await import('open');
25
+ const openInBrowser = async (options): Promise<boolean> => {
26
+ const command = {
27
+ darwin: 'open',
28
+ win32: 'explorer.exe',
29
+ linux: 'xdg-open',
30
+ }[process.platform];
31
+
32
+ if (!command) {
33
+ return false;
34
+ }
25
35
 
26
36
  const messageBody = options.html || options.text.replace(/(\r\n|\n|\r)/gm, '<br/>');
27
37
  const attachmentLinks = await Promise.all((options.attachments || []).map(buildLink));
@@ -46,11 +56,23 @@ const openInBrowser = async (options) => {
46
56
  </body>
47
57
  </html>`;
48
58
 
49
- const base64 = Buffer.from(content).toString('base64');
50
- const dataUri = `data:text/html;base64,${base64}`;
59
+ // Create a temporary directory and file
60
+ const tempDir = await mkdtemp(join(tmpdir(), 'unchained-email-'));
61
+ const tempFile = join(tempDir, 'email-preview.html');
62
+
63
+ await writeFile(tempFile, content, 'utf8');
64
+
65
+ return new Promise((resolve) => {
66
+ const child = spawn(command, [tempFile], {
67
+ detached: true,
68
+ stdio: 'ignore',
69
+ });
70
+
71
+ child.unref();
51
72
 
52
- await open(dataUri, { app: [{ name: apps.chrome }, { name: apps.firefox }, { name: apps.browser }] });
53
- return true;
73
+ // Resolve immediately after spawning since process is detached
74
+ resolve(true);
75
+ });
54
76
  };
55
77
 
56
78
  const EmailWorkerPlugin: IWorkerAdapter<