@teleporthq/teleport-plugin-next-workflows 0.44.9 → 0.44.11
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/__tests__/ai-error-contract.test.ts +10 -0
- package/__tests__/continue-on-error.test.ts +27 -0
- package/__tests__/email-node-recipients.test.ts +288 -0
- package/__tests__/security-runtime-shadow.test.ts +2 -1
- package/__tests__/sent-email-log-module.test.ts +54 -0
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +4 -1
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailersend.js +55 -48
- package/dist/cjs/nodes/email/email-mailersend.js.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-mailgun.js +44 -32
- package/dist/cjs/nodes/email/email-mailgun.js.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-postmark.js +44 -31
- package/dist/cjs/nodes/email/email-postmark.js.map +1 -1
- package/dist/cjs/nodes/email/email-recipients.d.ts +28 -0
- package/dist/cjs/nodes/email/email-recipients.d.ts.map +1 -0
- package/dist/cjs/nodes/email/email-recipients.js +74 -0
- package/dist/cjs/nodes/email/email-recipients.js.map +1 -0
- package/dist/cjs/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-resend.js +42 -28
- package/dist/cjs/nodes/email/email-resend.js.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/cjs/nodes/email/email-sendgrid.js +56 -41
- package/dist/cjs/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/cjs/nodes/general/general-custom-js.js +2 -1
- package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
- package/dist/cjs/security-scanner.d.ts +1 -1
- package/dist/cjs/security-scanner.d.ts.map +1 -1
- package/dist/cjs/security-scanner.js +1 -0
- package/dist/cjs/security-scanner.js.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.js +17 -1
- package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +4 -1
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailersend.js +55 -48
- package/dist/esm/nodes/email/email-mailersend.js.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-mailgun.js +44 -32
- package/dist/esm/nodes/email/email-mailgun.js.map +1 -1
- package/dist/esm/nodes/email/email-postmark.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-postmark.js +44 -31
- package/dist/esm/nodes/email/email-postmark.js.map +1 -1
- package/dist/esm/nodes/email/email-recipients.d.ts +28 -0
- package/dist/esm/nodes/email/email-recipients.d.ts.map +1 -0
- package/dist/esm/nodes/email/email-recipients.js +71 -0
- package/dist/esm/nodes/email/email-recipients.js.map +1 -0
- package/dist/esm/nodes/email/email-resend.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-resend.js +42 -28
- package/dist/esm/nodes/email/email-resend.js.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.d.ts.map +1 -1
- package/dist/esm/nodes/email/email-sendgrid.js +56 -41
- package/dist/esm/nodes/email/email-sendgrid.js.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
- package/dist/esm/nodes/general/general-custom-js.js +2 -1
- package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
- package/dist/esm/security-scanner.d.ts +1 -1
- package/dist/esm/security-scanner.d.ts.map +1 -1
- package/dist/esm/security-scanner.js +1 -0
- package/dist/esm/security-scanner.js.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts.map +1 -1
- package/dist/esm/sent-email-log/sent-email-log-code.js +17 -1
- package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/executor-generator.ts +4 -1
- package/src/nodes/email/email-mailersend.ts +72 -55
- package/src/nodes/email/email-mailgun.ts +51 -36
- package/src/nodes/email/email-postmark.ts +51 -35
- package/src/nodes/email/email-recipients.ts +86 -0
- package/src/nodes/email/email-resend.ts +49 -31
- package/src/nodes/email/email-sendgrid.ts +63 -44
- package/src/nodes/general/general-custom-js.ts +2 -1
- package/src/security-scanner.ts +1 -0
- package/src/sent-email-log/sent-email-log-code.ts +17 -1
|
@@ -1,69 +1,84 @@
|
|
|
1
1
|
import { EmailSender } from '@teleporthq/teleport-shared'
|
|
2
2
|
import { NodeHandlerGenerator, handlerToString } from '../types'
|
|
3
3
|
import { assertHandlerHasNoModuleRefs } from '../analytics/commerce-tracking'
|
|
4
|
+
import { EMAIL_RECIPIENTS_HELPER_SOURCE, EmailDeliveriesPlan } from './email-recipients'
|
|
4
5
|
|
|
5
6
|
// Ambient, not imported: a serialized handler has no module scope, so
|
|
6
|
-
// generateHandler appends the
|
|
7
|
+
// generateHandler appends the helpers' source (EmailSender from teleport-shared,
|
|
8
|
+
// the recipients helper beside this file).
|
|
7
9
|
declare function __emailSender(sender: EmailSender.EmailSenderInput): EmailSender.EmailSenderParts
|
|
10
|
+
declare function __emailRecipients(to: unknown): unknown[]
|
|
11
|
+
declare function __emailDeliveries(plan: EmailDeliveriesPlan): Promise<unknown>
|
|
8
12
|
|
|
9
13
|
async function email_sendgrid(config: any, context: Record<string, unknown>) {
|
|
10
14
|
const apiKey = config.apiKey
|
|
11
15
|
const from = config.from
|
|
12
16
|
const fromName = config.fromName
|
|
13
|
-
const to = config.to
|
|
14
17
|
const subject = config.subject
|
|
15
18
|
const body = config.body
|
|
16
19
|
const replyTo = config.replyTo
|
|
17
20
|
const cc = config.cc
|
|
18
21
|
const bcc = config.bcc
|
|
22
|
+
const recipients = __emailRecipients(config.to)
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
async function sendTo(to: unknown) {
|
|
25
|
+
try {
|
|
26
|
+
const __nodeRequire =
|
|
27
|
+
typeof __non_webpack_require__ !== 'undefined' ? __non_webpack_require__ : require
|
|
28
|
+
const MailService = __nodeRequire('@sendgrid/mail').MailService
|
|
29
|
+
const sgMail = new MailService()
|
|
30
|
+
sgMail.setApiKey(apiKey)
|
|
26
31
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
// SendGrid reads a "Name <email>" string's name verbatim, quotes included,
|
|
33
|
+
// so a named sender goes as its two parts.
|
|
34
|
+
const sender = __emailSender({ from, name: fromName })
|
|
35
|
+
const msg: Record<string, any> = {
|
|
36
|
+
to: [to],
|
|
37
|
+
from: sender.name ? { email: sender.email, name: sender.name } : sender.email,
|
|
38
|
+
subject,
|
|
39
|
+
html: body,
|
|
40
|
+
}
|
|
36
41
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
if (replyTo) {
|
|
43
|
+
msg.replyTo = replyTo
|
|
44
|
+
}
|
|
45
|
+
if (cc) {
|
|
46
|
+
msg.cc = Array.isArray(cc) ? cc : [cc]
|
|
47
|
+
}
|
|
48
|
+
if (bcc) {
|
|
49
|
+
msg.bcc = Array.isArray(bcc) ? bcc : [bcc]
|
|
50
|
+
}
|
|
46
51
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
const response = await sgMail.send(msg)
|
|
53
|
+
const statusCode = response && response[0] && response[0].statusCode
|
|
54
|
+
const messageId =
|
|
55
|
+
(response && response[0] && response[0].headers && response[0].headers['x-message-id']) ||
|
|
56
|
+
''
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
return { messageId, success: statusCode === 202 || statusCode === 200 }
|
|
59
|
+
} catch (err: unknown) {
|
|
60
|
+
const error = err as any
|
|
61
|
+
let message = 'Failed to send email'
|
|
62
|
+
if (error.response && error.response.body && error.response.body.errors) {
|
|
63
|
+
message = error.response.body.errors
|
|
64
|
+
.map(function (e: any) {
|
|
65
|
+
return e.message
|
|
66
|
+
})
|
|
67
|
+
.join(', ')
|
|
68
|
+
} else if (error.message) {
|
|
69
|
+
message = error.message
|
|
70
|
+
}
|
|
71
|
+
return { messageId: '', success: false, error: message }
|
|
64
72
|
}
|
|
65
|
-
return { messageId: '', success: false, error: message }
|
|
66
73
|
}
|
|
74
|
+
|
|
75
|
+
if (recipients.length === 0) {
|
|
76
|
+
return { messageId: '', success: false, error: 'No recipient' }
|
|
77
|
+
}
|
|
78
|
+
if (recipients.length === 1) {
|
|
79
|
+
return sendTo(recipients[0])
|
|
80
|
+
}
|
|
81
|
+
return __emailDeliveries({ recipients, send: sendTo, idKey: 'messageId' })
|
|
67
82
|
}
|
|
68
83
|
export const emailSendgrid: NodeHandlerGenerator = {
|
|
69
84
|
nodeType: 'email-sendgrid',
|
|
@@ -73,7 +88,11 @@ export const emailSendgrid: NodeHandlerGenerator = {
|
|
|
73
88
|
},
|
|
74
89
|
generateHandler(): string {
|
|
75
90
|
return assertHandlerHasNoModuleRefs(
|
|
76
|
-
handlerToString(email_sendgrid) +
|
|
91
|
+
handlerToString(email_sendgrid) +
|
|
92
|
+
'\n' +
|
|
93
|
+
EmailSender.generateEmailSenderHelperCode() +
|
|
94
|
+
'\n' +
|
|
95
|
+
EMAIL_RECIPIENTS_HELPER_SOURCE,
|
|
77
96
|
'email-sendgrid'
|
|
78
97
|
)
|
|
79
98
|
},
|
|
@@ -367,7 +367,8 @@ async function general_custom_js(config: any, context: Record<string, unknown>)
|
|
|
367
367
|
'"PDF_SERVICE_URL":1,' +
|
|
368
368
|
'"PDF_SERVICE_API_KEY":1,' +
|
|
369
369
|
'"TELEPORT_CRON_SECRET":1,' +
|
|
370
|
-
'"TELEPORT_CRON_SECRET_PREVIOUS":1' +
|
|
370
|
+
'"TELEPORT_CRON_SECRET_PREVIOUS":1,' +
|
|
371
|
+
'"TELEPORT_WALL_SECRET":1' +
|
|
371
372
|
'};\n' +
|
|
372
373
|
// The merchant's payment credentials (see PROTECTED_ENV_NAME_PATTERN in
|
|
373
374
|
// security-scanner.ts), whatever number a second save gave them.
|
package/src/security-scanner.ts
CHANGED
|
@@ -348,6 +348,19 @@ function __entryFromNode(nodeType, config, result, error) {
|
|
|
348
348
|
};
|
|
349
349
|
}
|
|
350
350
|
|
|
351
|
+
// A node that reached several recipients one provider call each reports a
|
|
352
|
+
// delivery per recipient; the ledger then says who got the email and who was
|
|
353
|
+
// refused, one row per address. Any other result is one row for the node run.
|
|
354
|
+
function __entriesFromNode(nodeType, config, result) {
|
|
355
|
+
var deliveries = result && Array.isArray(result.deliveries) ? result.deliveries : [];
|
|
356
|
+
if (deliveries.length === 0) return [__entryFromNode(nodeType, config, result, null)];
|
|
357
|
+
return deliveries.map(function (delivery) {
|
|
358
|
+
var entry = __entryFromNode(nodeType, config, delivery, null);
|
|
359
|
+
entry.to = delivery.to;
|
|
360
|
+
return entry;
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
|
|
351
364
|
/**
|
|
352
365
|
* Wraps a server node handler so every send is recorded. The record is
|
|
353
366
|
* registered on the workflow context's fire-and-forget queue — the same one
|
|
@@ -368,7 +381,10 @@ function wrapEmailNodeHandler(nodeType, handler) {
|
|
|
368
381
|
__register(context, recordSentEmail(__entryFromNode(nodeType, config, null, err)));
|
|
369
382
|
throw err;
|
|
370
383
|
}
|
|
371
|
-
|
|
384
|
+
var entries = __entriesFromNode(nodeType, config, result);
|
|
385
|
+
for (var i = 0; i < entries.length; i++) {
|
|
386
|
+
__register(context, recordSentEmail(entries[i]));
|
|
387
|
+
}
|
|
372
388
|
return result;
|
|
373
389
|
};
|
|
374
390
|
}
|