@activepieces/piece-resend 0.4.2 → 0.4.4

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 (97) hide show
  1. package/package.json +7 -12
  2. package/src/index.js +14 -102
  3. package/src/index.d.ts +0 -3
  4. package/src/index.d.ts.map +0 -1
  5. package/src/index.js.map +0 -1
  6. package/src/lib/actions/cancel-scheduled-email.action.d.ts +0 -4
  7. package/src/lib/actions/cancel-scheduled-email.action.d.ts.map +0 -1
  8. package/src/lib/actions/cancel-scheduled-email.action.js +0 -33
  9. package/src/lib/actions/cancel-scheduled-email.action.js.map +0 -1
  10. package/src/lib/actions/create-audience.action.d.ts +0 -4
  11. package/src/lib/actions/create-audience.action.d.ts.map +0 -1
  12. package/src/lib/actions/create-audience.action.js +0 -34
  13. package/src/lib/actions/create-audience.action.js.map +0 -1
  14. package/src/lib/actions/create-broadcast.action.d.ts +0 -11
  15. package/src/lib/actions/create-broadcast.action.d.ts.map +0 -1
  16. package/src/lib/actions/create-broadcast.action.js +0 -84
  17. package/src/lib/actions/create-broadcast.action.js.map +0 -1
  18. package/src/lib/actions/create-contact.action.d.ts +0 -8
  19. package/src/lib/actions/create-contact.action.d.ts.map +0 -1
  20. package/src/lib/actions/create-contact.action.js +0 -47
  21. package/src/lib/actions/create-contact.action.js.map +0 -1
  22. package/src/lib/actions/create-domain.action.d.ts +0 -5
  23. package/src/lib/actions/create-domain.action.d.ts.map +0 -1
  24. package/src/lib/actions/create-domain.action.js +0 -61
  25. package/src/lib/actions/create-domain.action.js.map +0 -1
  26. package/src/lib/actions/delete-audience.action.d.ts +0 -4
  27. package/src/lib/actions/delete-audience.action.d.ts.map +0 -1
  28. package/src/lib/actions/delete-audience.action.js +0 -30
  29. package/src/lib/actions/delete-audience.action.js.map +0 -1
  30. package/src/lib/actions/delete-broadcast.action.d.ts +0 -4
  31. package/src/lib/actions/delete-broadcast.action.d.ts.map +0 -1
  32. package/src/lib/actions/delete-broadcast.action.js +0 -30
  33. package/src/lib/actions/delete-broadcast.action.js.map +0 -1
  34. package/src/lib/actions/delete-contact.action.d.ts +0 -5
  35. package/src/lib/actions/delete-contact.action.d.ts.map +0 -1
  36. package/src/lib/actions/delete-contact.action.js +0 -31
  37. package/src/lib/actions/delete-contact.action.js.map +0 -1
  38. package/src/lib/actions/delete-domain.action.d.ts +0 -4
  39. package/src/lib/actions/delete-domain.action.d.ts.map +0 -1
  40. package/src/lib/actions/delete-domain.action.js +0 -30
  41. package/src/lib/actions/delete-domain.action.js.map +0 -1
  42. package/src/lib/actions/get-email-status.action.d.ts +0 -4
  43. package/src/lib/actions/get-email-status.action.d.ts.map +0 -1
  44. package/src/lib/actions/get-email-status.action.js +0 -36
  45. package/src/lib/actions/get-email-status.action.js.map +0 -1
  46. package/src/lib/actions/list-audiences.action.d.ts +0 -2
  47. package/src/lib/actions/list-audiences.action.d.ts.map +0 -1
  48. package/src/lib/actions/list-audiences.action.js +0 -27
  49. package/src/lib/actions/list-audiences.action.js.map +0 -1
  50. package/src/lib/actions/list-broadcasts.action.d.ts +0 -2
  51. package/src/lib/actions/list-broadcasts.action.d.ts.map +0 -1
  52. package/src/lib/actions/list-broadcasts.action.js +0 -42
  53. package/src/lib/actions/list-broadcasts.action.js.map +0 -1
  54. package/src/lib/actions/list-contacts.action.d.ts +0 -4
  55. package/src/lib/actions/list-contacts.action.d.ts.map +0 -1
  56. package/src/lib/actions/list-contacts.action.js +0 -30
  57. package/src/lib/actions/list-contacts.action.js.map +0 -1
  58. package/src/lib/actions/list-domains.action.d.ts +0 -2
  59. package/src/lib/actions/list-domains.action.d.ts.map +0 -1
  60. package/src/lib/actions/list-domains.action.js +0 -38
  61. package/src/lib/actions/list-domains.action.js.map +0 -1
  62. package/src/lib/actions/list-emails.action.d.ts +0 -2
  63. package/src/lib/actions/list-emails.action.d.ts.map +0 -1
  64. package/src/lib/actions/list-emails.action.js +0 -41
  65. package/src/lib/actions/list-emails.action.js.map +0 -1
  66. package/src/lib/actions/reschedule-email.action.d.ts +0 -5
  67. package/src/lib/actions/reschedule-email.action.d.ts.map +0 -1
  68. package/src/lib/actions/reschedule-email.action.js +0 -39
  69. package/src/lib/actions/reschedule-email.action.js.map +0 -1
  70. package/src/lib/actions/send-batch-emails.action.d.ts +0 -5
  71. package/src/lib/actions/send-batch-emails.action.d.ts.map +0 -1
  72. package/src/lib/actions/send-batch-emails.action.js +0 -113
  73. package/src/lib/actions/send-batch-emails.action.js.map +0 -1
  74. package/src/lib/actions/send-broadcast.action.d.ts +0 -5
  75. package/src/lib/actions/send-broadcast.action.d.ts.map +0 -1
  76. package/src/lib/actions/send-broadcast.action.js +0 -39
  77. package/src/lib/actions/send-broadcast.action.js.map +0 -1
  78. package/src/lib/actions/send-email.d.ts +0 -12
  79. package/src/lib/actions/send-email.d.ts.map +0 -1
  80. package/src/lib/actions/send-email.js +0 -103
  81. package/src/lib/actions/send-email.js.map +0 -1
  82. package/src/lib/actions/update-contact.action.d.ts +0 -8
  83. package/src/lib/actions/update-contact.action.d.ts.map +0 -1
  84. package/src/lib/actions/update-contact.action.js +0 -54
  85. package/src/lib/actions/update-contact.action.js.map +0 -1
  86. package/src/lib/actions/verify-domain.action.d.ts +0 -4
  87. package/src/lib/actions/verify-domain.action.d.ts.map +0 -1
  88. package/src/lib/actions/verify-domain.action.js +0 -30
  89. package/src/lib/actions/verify-domain.action.js.map +0 -1
  90. package/src/lib/common/props.d.ts +0 -7
  91. package/src/lib/common/props.d.ts.map +0 -1
  92. package/src/lib/common/props.js +0 -93
  93. package/src/lib/common/props.js.map +0 -1
  94. package/src/lib/triggers/email-bounced.trigger.d.ts +0 -11
  95. package/src/lib/triggers/email-bounced.trigger.d.ts.map +0 -1
  96. package/src/lib/triggers/email-bounced.trigger.js +0 -138
  97. package/src/lib/triggers/email-bounced.trigger.js.map +0 -1
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateContact = void 0;
4
- const tslib_1 = require("tslib");
5
- const pieces_framework_1 = require("@activepieces/pieces-framework");
6
- const pieces_common_1 = require("@activepieces/pieces-common");
7
- const __1 = require("../..");
8
- const props_1 = require("../common/props");
9
- exports.updateContact = (0, pieces_framework_1.createAction)({
10
- name: 'update_contact',
11
- auth: __1.resendAuth,
12
- displayName: 'Update Contact',
13
- description: 'Update the name or subscription status of a contact in an audience',
14
- audience: 'both',
15
- aiMetadata: { description: 'Updates an existing contact\'s first name, last name, or subscribed/unsubscribed status within an audience, identified by audience ID and contact ID. Use this to change details or toggle subscription for a known contact. Idempotent — repeating with the same values leaves the contact in the same state.', idempotent: true },
16
- props: {
17
- audience_id: props_1.resendProps.audienceId,
18
- contact_id: props_1.resendProps.contactId,
19
- first_name: pieces_framework_1.Property.ShortText({ displayName: 'First Name', required: false }),
20
- last_name: pieces_framework_1.Property.ShortText({ displayName: 'Last Name', required: false }),
21
- unsubscribed: pieces_framework_1.Property.StaticDropdown({
22
- displayName: 'Subscription Status',
23
- required: false,
24
- options: {
25
- options: [
26
- { label: 'Subscribed', value: false },
27
- { label: 'Unsubscribed', value: true },
28
- ],
29
- },
30
- }),
31
- },
32
- run(_a) {
33
- return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth, propsValue }) {
34
- const body = {};
35
- if (propsValue.first_name !== undefined && propsValue.first_name !== '') {
36
- body['first_name'] = propsValue.first_name;
37
- }
38
- if (propsValue.last_name !== undefined && propsValue.last_name !== '') {
39
- body['last_name'] = propsValue.last_name;
40
- }
41
- if (propsValue.unsubscribed !== undefined && propsValue.unsubscribed !== null) {
42
- body['unsubscribed'] = propsValue.unsubscribed;
43
- }
44
- const response = yield pieces_common_1.httpClient.sendRequest({
45
- method: pieces_common_1.HttpMethod.PATCH,
46
- url: `https://api.resend.com/audiences/${propsValue.audience_id}/contacts/${propsValue.contact_id}`,
47
- authentication: { type: pieces_common_1.AuthenticationType.BEARER_TOKEN, token: auth.secret_text },
48
- body,
49
- });
50
- return response.body;
51
- });
52
- },
53
- });
54
- //# sourceMappingURL=update-contact.action.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-contact.action.js","sourceRoot":"","sources":["../../../../src/lib/actions/update-contact.action.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAyF;AACzF,6BAAmC;AACnC,2CAA8C;AAEjC,QAAA,aAAa,GAAG,IAAA,+BAAY,EAAC;IACxC,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,cAAU;IAChB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,oEAAoE;IACjF,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,EAAE,WAAW,EAAE,gTAAgT,EAAE,UAAU,EAAE,IAAI,EAAE;IAC/V,KAAK,EAAE;QACL,WAAW,EAAE,mBAAW,CAAC,UAAU;QACnC,UAAU,EAAE,mBAAW,CAAC,SAAS;QACjC,UAAU,EAAE,2BAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC9E,SAAS,EAAE,2BAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5E,YAAY,EAAE,2BAAQ,CAAC,cAAc,CAAC;YACpC,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACP,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;oBACrC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;iBACvC;aACF;SACF,CAAC;KACH;IACK,GAAG;qEAAC,EAAE,IAAI,EAAE,UAAU,EAAE;YAC5B,MAAM,IAAI,GAA4B,EAAE,CAAC;YACzC,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;gBACxE,IAAI,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC;YAC7C,CAAC;YACD,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;gBACtE,IAAI,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC;YAC3C,CAAC;YACD,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,IAAI,UAAU,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC9E,IAAI,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC;YACjD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAiC;gBAC5E,MAAM,EAAE,0BAAU,CAAC,KAAK;gBACxB,GAAG,EAAE,oCAAoC,UAAU,CAAC,WAAW,aAAa,UAAU,CAAC,UAAU,EAAE;gBACnG,cAAc,EAAE,EAAE,IAAI,EAAE,kCAAkB,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE;gBAClF,IAAI;aACL,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare const verifyDomain: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").SecretTextProperty<true>, {
2
- domain_id: import("@activepieces/pieces-framework").DropdownProperty<string, true, import("@activepieces/pieces-framework").SecretTextProperty<true>>;
3
- }>;
4
- //# sourceMappingURL=verify-domain.action.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify-domain.action.d.ts","sourceRoot":"","sources":["../../../../src/lib/actions/verify-domain.action.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY;;EAkBvB,CAAC"}
@@ -1,30 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.verifyDomain = void 0;
4
- const tslib_1 = require("tslib");
5
- const pieces_framework_1 = require("@activepieces/pieces-framework");
6
- const pieces_common_1 = require("@activepieces/pieces-common");
7
- const __1 = require("../..");
8
- const props_1 = require("../common/props");
9
- exports.verifyDomain = (0, pieces_framework_1.createAction)({
10
- name: 'verify_domain',
11
- auth: __1.resendAuth,
12
- displayName: 'Verify Domain',
13
- description: 'Trigger a DNS verification check for a domain',
14
- audience: 'both',
15
- aiMetadata: { description: 'Triggers Resend to re-check the DNS records of a domain and update its verification status, identified by domain ID. Use this after adding the required DNS records (from Create Domain) to confirm the domain is ready to send. Safe to call repeatedly — it only re-runs the check.', idempotent: true },
16
- props: {
17
- domain_id: props_1.resendProps.domainId,
18
- },
19
- run(_a) {
20
- return tslib_1.__awaiter(this, arguments, void 0, function* ({ auth, propsValue }) {
21
- const response = yield pieces_common_1.httpClient.sendRequest({
22
- method: pieces_common_1.HttpMethod.POST,
23
- url: `https://api.resend.com/domains/${propsValue.domain_id}/verify`,
24
- authentication: { type: pieces_common_1.AuthenticationType.BEARER_TOKEN, token: auth.secret_text },
25
- });
26
- return response.body;
27
- });
28
- },
29
- });
30
- //# sourceMappingURL=verify-domain.action.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify-domain.action.js","sourceRoot":"","sources":["../../../../src/lib/actions/verify-domain.action.ts"],"names":[],"mappings":";;;;AAAA,qEAA8D;AAC9D,+DAAyF;AACzF,6BAAmC;AACnC,2CAA8C;AAEjC,QAAA,YAAY,GAAG,IAAA,+BAAY,EAAC;IACvC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,cAAU;IAChB,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,+CAA+C;IAC5D,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,EAAE,WAAW,EAAE,uRAAuR,EAAE,UAAU,EAAE,IAAI,EAAE;IACtU,KAAK,EAAE;QACL,SAAS,EAAE,mBAAW,CAAC,QAAQ;KAChC;IACK,GAAG;qEAAC,EAAE,IAAI,EAAE,UAAU,EAAE;YAC5B,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAiC;gBAC5E,MAAM,EAAE,0BAAU,CAAC,IAAI;gBACvB,GAAG,EAAE,kCAAkC,UAAU,CAAC,SAAS,SAAS;gBACpE,cAAc,EAAE,EAAE,IAAI,EAAE,kCAAkB,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE;aACnF,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF,CAAC,CAAC"}
@@ -1,7 +0,0 @@
1
- export declare const resendProps: {
2
- audienceId: import("@activepieces/pieces-framework").DropdownProperty<string, true, import("@activepieces/pieces-framework").SecretTextProperty<true>>;
3
- domainId: import("@activepieces/pieces-framework").DropdownProperty<string, true, import("@activepieces/pieces-framework").SecretTextProperty<true>>;
4
- broadcastId: import("@activepieces/pieces-framework").DropdownProperty<string, true, import("@activepieces/pieces-framework").SecretTextProperty<true>>;
5
- contactId: import("@activepieces/pieces-framework").DropdownProperty<string, true, import("@activepieces/pieces-framework").SecretTextProperty<true>>;
6
- };
7
- //# sourceMappingURL=props.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../../../src/lib/common/props.ts"],"names":[],"mappings":"AA4FA,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC"}
@@ -1,93 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resendProps = void 0;
4
- const tslib_1 = require("tslib");
5
- const pieces_framework_1 = require("@activepieces/pieces-framework");
6
- const pieces_common_1 = require("@activepieces/pieces-common");
7
- const __1 = require("../..");
8
- const BASE_URL = 'https://api.resend.com';
9
- const audienceIdProp = pieces_framework_1.Property.Dropdown({
10
- displayName: 'Audience',
11
- required: true,
12
- auth: __1.resendAuth,
13
- refreshers: [],
14
- options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
15
- if (!auth) {
16
- return { disabled: true, placeholder: 'Connect your Resend account first', options: [] };
17
- }
18
- const response = yield pieces_common_1.httpClient.sendRequest({
19
- method: pieces_common_1.HttpMethod.GET,
20
- url: `${BASE_URL}/audiences`,
21
- authentication: { type: pieces_common_1.AuthenticationType.BEARER_TOKEN, token: auth.secret_text },
22
- });
23
- return { options: response.body.data.map((a) => ({ label: a.name, value: a.id })) };
24
- }),
25
- });
26
- const domainIdProp = pieces_framework_1.Property.Dropdown({
27
- displayName: 'Domain',
28
- required: true,
29
- auth: __1.resendAuth,
30
- refreshers: [],
31
- options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
32
- if (!auth) {
33
- return { disabled: true, placeholder: 'Connect your Resend account first', options: [] };
34
- }
35
- const response = yield pieces_common_1.httpClient.sendRequest({
36
- method: pieces_common_1.HttpMethod.GET,
37
- url: `${BASE_URL}/domains`,
38
- authentication: { type: pieces_common_1.AuthenticationType.BEARER_TOKEN, token: auth.secret_text },
39
- });
40
- return { options: response.body.data.map((d) => ({ label: d.name, value: d.id })) };
41
- }),
42
- });
43
- const broadcastIdProp = pieces_framework_1.Property.Dropdown({
44
- displayName: 'Broadcast',
45
- required: true,
46
- auth: __1.resendAuth,
47
- refreshers: [],
48
- options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
49
- if (!auth) {
50
- return { disabled: true, placeholder: 'Connect your Resend account first', options: [] };
51
- }
52
- const response = yield pieces_common_1.httpClient.sendRequest({
53
- method: pieces_common_1.HttpMethod.GET,
54
- url: `${BASE_URL}/broadcasts`,
55
- authentication: { type: pieces_common_1.AuthenticationType.BEARER_TOKEN, token: auth.secret_text },
56
- });
57
- return {
58
- options: response.body.data.map((b) => ({
59
- label: b.name ? `${b.name} — ${b.subject}` : b.subject,
60
- value: b.id,
61
- })),
62
- };
63
- }),
64
- });
65
- const contactIdProp = pieces_framework_1.Property.Dropdown({
66
- displayName: 'Contact',
67
- required: true,
68
- auth: __1.resendAuth,
69
- refreshers: ['audience_id'],
70
- options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth, audience_id }) {
71
- if (!auth || !audience_id) {
72
- return { disabled: true, placeholder: 'Select an audience first', options: [] };
73
- }
74
- const response = yield pieces_common_1.httpClient.sendRequest({
75
- method: pieces_common_1.HttpMethod.GET,
76
- url: `${BASE_URL}/audiences/${String(audience_id)}/contacts`,
77
- authentication: { type: pieces_common_1.AuthenticationType.BEARER_TOKEN, token: auth.secret_text },
78
- });
79
- return {
80
- options: response.body.data.map((c) => {
81
- const name = [c.first_name, c.last_name].filter(Boolean).join(' ');
82
- return { label: name ? `${name} <${c.email}>` : c.email, value: c.id };
83
- }),
84
- };
85
- }),
86
- });
87
- exports.resendProps = {
88
- audienceId: audienceIdProp,
89
- domainId: domainIdProp,
90
- broadcastId: broadcastIdProp,
91
- contactId: contactIdProp,
92
- };
93
- //# sourceMappingURL=props.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"props.js","sourceRoot":"","sources":["../../../../src/lib/common/props.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { TriggerStrategy } from '@activepieces/pieces-framework';
2
- export declare const emailBounced: import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.WEBHOOK, import("@activepieces/pieces-framework").SecretTextProperty<true>, {
3
- events: import("@activepieces/pieces-framework").StaticMultiSelectDropdownProperty<string, true>;
4
- }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.POLLING, import("@activepieces/pieces-framework").SecretTextProperty<true>, {
5
- events: import("@activepieces/pieces-framework").StaticMultiSelectDropdownProperty<string, true>;
6
- }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.MANUAL, import("@activepieces/pieces-framework").SecretTextProperty<true>, {
7
- events: import("@activepieces/pieces-framework").StaticMultiSelectDropdownProperty<string, true>;
8
- }> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.APP_WEBHOOK, import("@activepieces/pieces-framework").SecretTextProperty<true>, {
9
- events: import("@activepieces/pieces-framework").StaticMultiSelectDropdownProperty<string, true>;
10
- }>;
11
- //# sourceMappingURL=email-bounced.trigger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-bounced.trigger.d.ts","sourceRoot":"","sources":["../../../../src/lib/triggers/email-bounced.trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAY,MAAM,gCAAgC,CAAC;AA0E1F,eAAO,MAAM,YAAY;;;;;;;;EA+EvB,CAAC"}
@@ -1,138 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.emailBounced = void 0;
4
- const tslib_1 = require("tslib");
5
- const pieces_framework_1 = require("@activepieces/pieces-framework");
6
- const pieces_common_1 = require("@activepieces/pieces-common");
7
- const crypto_1 = tslib_1.__importDefault(require("crypto"));
8
- const __1 = require("../..");
9
- const BASE_URL = 'https://api.resend.com';
10
- const STORE_KEY = 'webhookData';
11
- const TIMESTAMP_TOLERANCE_SECONDS = 300;
12
- const EVENT_OPTIONS = [
13
- { label: 'Email Sent', value: 'email.sent' },
14
- { label: 'Email Delivered', value: 'email.delivered' },
15
- { label: 'Email Delivery Delayed', value: 'email.delivery_delayed' },
16
- { label: 'Email Complained', value: 'email.complained' },
17
- { label: 'Email Bounced', value: 'email.bounced' },
18
- { label: 'Email Opened', value: 'email.opened' },
19
- { label: 'Email Clicked', value: 'email.clicked' },
20
- { label: 'Email Failed', value: 'email.failed' },
21
- { label: 'Email Received', value: 'email.received' },
22
- { label: 'Email Scheduled', value: 'email.scheduled' },
23
- { label: 'Email Suppressed', value: 'email.suppressed' },
24
- { label: 'Domain Created', value: 'domain.created' },
25
- { label: 'Domain Updated', value: 'domain.updated' },
26
- { label: 'Domain Deleted', value: 'domain.deleted' },
27
- { label: 'Contact Created', value: 'contact.created' },
28
- { label: 'Contact Updated', value: 'contact.updated' },
29
- { label: 'Contact Deleted', value: 'contact.deleted' },
30
- ];
31
- function verifyResendWebhook({ rawBody, headers, signingSecret, }) {
32
- const svixId = headers['svix-id'];
33
- const svixTimestamp = headers['svix-timestamp'];
34
- const svixSignature = headers['svix-signature'];
35
- if (!svixId || !svixTimestamp || !svixSignature) {
36
- return false;
37
- }
38
- const now = Math.floor(Date.now() / 1000);
39
- if (Math.abs(now - parseInt(svixTimestamp, 10)) > TIMESTAMP_TOLERANCE_SECONDS) {
40
- return false;
41
- }
42
- const bodyString = Buffer.isBuffer(rawBody) ? rawBody.toString('utf8') : String(rawBody);
43
- const secretBytes = Buffer.from(signingSecret.replace('whsec_', ''), 'base64');
44
- const toSign = `${svixId}.${svixTimestamp}.${bodyString}`;
45
- const computed = crypto_1.default.createHmac('sha256', secretBytes).update(toSign).digest('base64');
46
- return svixSignature.split(' ').some((sig) => {
47
- const [version, sigValue] = sig.split(',');
48
- if (version !== 'v1' || !sigValue)
49
- return false;
50
- try {
51
- return crypto_1.default.timingSafeEqual(Buffer.from(sigValue, 'base64'), Buffer.from(computed, 'base64'));
52
- }
53
- catch (_a) {
54
- return false;
55
- }
56
- });
57
- }
58
- exports.emailBounced = (0, pieces_framework_1.createTrigger)({
59
- name: 'email_bounced',
60
- auth: __1.resendAuth,
61
- displayName: 'Email Event',
62
- description: 'Triggers when a selected email or contact event occurs in Resend',
63
- aiMetadata: {
64
- description: 'Fires when one of the subscribed Resend events occurs, such as an email being sent, delivered, bounced, opened, clicked, complained about, or failing, as well as domain and contact lifecycle events. The payload carries the event type and the affected email, domain, or contact. Subscribe to the specific event types you care about.',
65
- },
66
- type: pieces_framework_1.TriggerStrategy.WEBHOOK,
67
- props: {
68
- events: pieces_framework_1.Property.StaticMultiSelectDropdown({
69
- displayName: 'Events',
70
- description: 'Select one or more event types to subscribe to',
71
- required: true,
72
- options: {
73
- options: EVENT_OPTIONS,
74
- },
75
- }),
76
- },
77
- onEnable(context) {
78
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
79
- const response = yield pieces_common_1.httpClient.sendRequest({
80
- method: pieces_common_1.HttpMethod.POST,
81
- url: `${BASE_URL}/webhooks`,
82
- authentication: {
83
- type: pieces_common_1.AuthenticationType.BEARER_TOKEN,
84
- token: context.auth.secret_text,
85
- },
86
- body: {
87
- endpoint: context.webhookUrl,
88
- events: context.propsValue.events,
89
- },
90
- });
91
- yield context.store.put(STORE_KEY, {
92
- id: response.body.id,
93
- signingSecret: response.body.signing_secret,
94
- });
95
- });
96
- },
97
- onDisable(context) {
98
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
99
- const data = yield context.store.get(STORE_KEY);
100
- if (data === null || data === void 0 ? void 0 : data.id) {
101
- yield pieces_common_1.httpClient.sendRequest({
102
- method: pieces_common_1.HttpMethod.DELETE,
103
- url: `${BASE_URL}/webhooks/${data.id}`,
104
- authentication: {
105
- type: pieces_common_1.AuthenticationType.BEARER_TOKEN,
106
- token: context.auth.secret_text,
107
- },
108
- });
109
- }
110
- });
111
- },
112
- run(context) {
113
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
114
- var _a;
115
- const data = yield context.store.get(STORE_KEY);
116
- if (!verifyResendWebhook({
117
- rawBody: context.payload.rawBody,
118
- headers: context.payload.headers,
119
- signingSecret: (_a = data === null || data === void 0 ? void 0 : data.signingSecret) !== null && _a !== void 0 ? _a : '',
120
- })) {
121
- return [];
122
- }
123
- return [context.payload.body];
124
- });
125
- },
126
- sampleData: {
127
- type: 'email.bounced',
128
- created_at: '2024-03-08T09:37:40.912Z',
129
- data: {
130
- created_at: '2024-03-08T09:37:40.911Z',
131
- email_id: '562e3f00-6bad-4910-b1e3-38c2fca1e2ff',
132
- from: 'onboarding@resend.dev',
133
- to: ['john@example.com'],
134
- subject: 'Re: Follow up',
135
- },
136
- },
137
- });
138
- //# sourceMappingURL=email-bounced.trigger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-bounced.trigger.js","sourceRoot":"","sources":["../../../../src/lib/triggers/email-bounced.trigger.ts"],"names":[],"mappings":"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"}