From 7e089ad5d0c8f0d8e0c2730a2d9beb1465a0e03b Mon Sep 17 00:00:00 2001 From: Christian Schab Date: Wed, 1 May 2024 09:43:33 +0200 Subject: [PATCH 1/4] feat(mailjet): implementing mailjet piece --- .../pieces/community/mailjet/.eslintrc.json | 33 +++++++ packages/pieces/community/mailjet/README.md | 7 ++ .../pieces/community/mailjet/package.json | 4 + .../pieces/community/mailjet/project.json | 38 ++++++++ .../pieces/community/mailjet/src/index.ts | 28 ++++++ .../mailjet/src/lib/actions/send-email.ts | 90 +++++++++++++++++++ .../pieces/community/mailjet/tsconfig.json | 19 ++++ .../community/mailjet/tsconfig.lib.json | 11 +++ 8 files changed, 230 insertions(+) create mode 100644 packages/pieces/community/mailjet/.eslintrc.json create mode 100644 packages/pieces/community/mailjet/README.md create mode 100644 packages/pieces/community/mailjet/package.json create mode 100644 packages/pieces/community/mailjet/project.json create mode 100644 packages/pieces/community/mailjet/src/index.ts create mode 100644 packages/pieces/community/mailjet/src/lib/actions/send-email.ts create mode 100644 packages/pieces/community/mailjet/tsconfig.json create mode 100644 packages/pieces/community/mailjet/tsconfig.lib.json diff --git a/packages/pieces/community/mailjet/.eslintrc.json b/packages/pieces/community/mailjet/.eslintrc.json new file mode 100644 index 0000000000..4a4e695c54 --- /dev/null +++ b/packages/pieces/community/mailjet/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": [ + "../../../../.eslintrc.base.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} \ No newline at end of file diff --git a/packages/pieces/community/mailjet/README.md b/packages/pieces/community/mailjet/README.md new file mode 100644 index 0000000000..7e924513ff --- /dev/null +++ b/packages/pieces/community/mailjet/README.md @@ -0,0 +1,7 @@ +# pieces-mailjet + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build pieces-mailjet` to build the library. diff --git a/packages/pieces/community/mailjet/package.json b/packages/pieces/community/mailjet/package.json new file mode 100644 index 0000000000..a0b935e91b --- /dev/null +++ b/packages/pieces/community/mailjet/package.json @@ -0,0 +1,4 @@ +{ + "name": "@activepieces/piece-mailjet", + "version": "0.0.1" +} diff --git a/packages/pieces/community/mailjet/project.json b/packages/pieces/community/mailjet/project.json new file mode 100644 index 0000000000..81cf8c0664 --- /dev/null +++ b/packages/pieces/community/mailjet/project.json @@ -0,0 +1,38 @@ +{ + "name": "pieces-mailjet", + "$schema": "../../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/pieces/community/mailjet/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/packages/pieces/community/mailjet", + "tsConfig": "packages/pieces/community/mailjet/tsconfig.lib.json", + "packageJson": "packages/pieces/community/mailjet/package.json", + "main": "packages/pieces/community/mailjet/src/index.ts", + "assets": [ + "packages/pieces/community/mailjet/*.md" + ], + "buildableProjectDepsInPackageJsonType": "dependencies", + "updateBuildableProjectDepsInPackageJson": true + } + }, + "publish": { + "command": "node tools/scripts/publish.mjs pieces-mailjet {args.ver} {args.tag}", + "dependsOn": [ + "build" + ] + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": [ + "{options.outputFile}" + ] + } + }, + "tags": [] +} \ No newline at end of file diff --git a/packages/pieces/community/mailjet/src/index.ts b/packages/pieces/community/mailjet/src/index.ts new file mode 100644 index 0000000000..aacc6e9917 --- /dev/null +++ b/packages/pieces/community/mailjet/src/index.ts @@ -0,0 +1,28 @@ +import { createPiece, PieceAuth } from '@activepieces/pieces-framework'; +import { PieceCategory } from '@activepieces/shared'; +import { sendEmail } from './lib/actions/send-email'; + +const mailjetAuth = PieceAuth.BasicAuth({ + description: 'Enter your api credentials', + required: true, + username: { + displayName: 'API Key', + description: 'Enter your API Key here' + }, + password: { + displayName: 'API Secret', + description: 'Enter your API Secret here' + } +}); + +export const mailjet = createPiece({ + displayName: 'Mailjet', + description: 'Email delivery service for sending transactional and marketing emails', + auth: mailjetAuth, + minimumSupportedRelease: '0.20.0', + logoUrl: 'https://assets.mailjet.com/lib/images/mailjetLogo/mj_logo_only_icon_color.svg', + categories: [PieceCategory.COMMUNICATION], + authors: ['christian-schab'], + actions: [sendEmail], + triggers: [] +}); diff --git a/packages/pieces/community/mailjet/src/lib/actions/send-email.ts b/packages/pieces/community/mailjet/src/lib/actions/send-email.ts new file mode 100644 index 0000000000..43b7bd7a7f --- /dev/null +++ b/packages/pieces/community/mailjet/src/lib/actions/send-email.ts @@ -0,0 +1,90 @@ +import { createAction, Property } from '@activepieces/pieces-framework'; +import { AuthenticationType, httpClient, HttpMethod, HttpRequest } from '@activepieces/pieces-common'; + +export const sendEmail = createAction({ + name: 'send_email', + displayName: 'Send Email', + description: 'Send a text, HTML or template email through Mailjet', + props: { + fromEmail: Property.ShortText({ + displayName: 'From (Email)', + description: 'Sender email, must be verified in Mailjet', + required: true + }), + fromName: Property.ShortText({ + displayName: 'From (Name)', + required: false + }), + toEmails: Property.Array({ + displayName: 'Emails of recipients', + required: true + }), + subject: Property.ShortText({ + displayName: 'Subject', + description: undefined, + required: true + }), + textPart: Property.LongText({ + displayName: 'Text part', + description: undefined, + required: false + }), + htmlPart: Property.LongText({ + displayName: 'HTML part', + description: undefined, + required: false + }), + templateId: Property.Number({ + displayName: 'Template Id', + description: 'Template Id (number) defined in Mailjet', + required: false + }), + templateVariables: Property.Object({ + displayName: 'Template variables', + description: undefined, + required: false + }) + }, + async run(configValue) { + // Action logic here + console.log(`ConfigValue: `, configValue); + const auth = configValue.auth as { username: string; password: string; }; + const { propsValue } = configValue; + if (!auth) throw new Error(`Credentials not found!`); + + const message = { + From: { + Email: propsValue.fromEmail, + Name: propsValue.fromName || propsValue.fromEmail + }, + To: propsValue.toEmails.map(to => ({ + Email: to, + Name: to + })), + Subject: propsValue.subject, + TextPart: propsValue.textPart, + TemplateID: propsValue.templateId, + TemplateLanguage: !!propsValue.templateId, + Variables: propsValue.templateVariables + }; + const request: HttpRequest = { + method: HttpMethod.POST, + url: `https://api.mailjet.com/v3.1/send`, + body: JSON.stringify({ messages: [message] }), + authentication: { + type: AuthenticationType.BASIC, + username: auth.username, + password: auth.password + }, + queryParams: {} + }; + + const response = await httpClient.sendRequest(request); + + if (response.status !== 200) { + throw new Error(`Failed to communicate with Mailjet`); + } else { + return response.body.Messages[0]; + } + } +}); diff --git a/packages/pieces/community/mailjet/tsconfig.json b/packages/pieces/community/mailjet/tsconfig.json new file mode 100644 index 0000000000..059cd81661 --- /dev/null +++ b/packages/pieces/community/mailjet/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/packages/pieces/community/mailjet/tsconfig.lib.json b/packages/pieces/community/mailjet/tsconfig.lib.json new file mode 100644 index 0000000000..28369ef762 --- /dev/null +++ b/packages/pieces/community/mailjet/tsconfig.lib.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "../../../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} From e92e87f9d611bbb636a8a209bc2f72fbd155129b Mon Sep 17 00:00:00 2001 From: Christian Schab Date: Thu, 2 May 2024 09:35:39 +0200 Subject: [PATCH 2/4] feat(mailjet): remove logging --- packages/pieces/community/mailjet/src/lib/actions/send-email.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/pieces/community/mailjet/src/lib/actions/send-email.ts b/packages/pieces/community/mailjet/src/lib/actions/send-email.ts index 43b7bd7a7f..e5bb7fd088 100644 --- a/packages/pieces/community/mailjet/src/lib/actions/send-email.ts +++ b/packages/pieces/community/mailjet/src/lib/actions/send-email.ts @@ -46,8 +46,6 @@ export const sendEmail = createAction({ }) }, async run(configValue) { - // Action logic here - console.log(`ConfigValue: `, configValue); const auth = configValue.auth as { username: string; password: string; }; const { propsValue } = configValue; if (!auth) throw new Error(`Credentials not found!`); From 09a1bbdc6b233a5e2307e1efb2df6b0b7de6779b Mon Sep 17 00:00:00 2001 From: Christian Schab Date: Thu, 2 May 2024 09:36:58 +0200 Subject: [PATCH 3/4] feat(mailjet): update logoUrl for mailjet piece to activepieces cdn --- packages/pieces/community/mailjet/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pieces/community/mailjet/src/index.ts b/packages/pieces/community/mailjet/src/index.ts index aacc6e9917..6ad0f07e18 100644 --- a/packages/pieces/community/mailjet/src/index.ts +++ b/packages/pieces/community/mailjet/src/index.ts @@ -20,7 +20,7 @@ export const mailjet = createPiece({ description: 'Email delivery service for sending transactional and marketing emails', auth: mailjetAuth, minimumSupportedRelease: '0.20.0', - logoUrl: 'https://assets.mailjet.com/lib/images/mailjetLogo/mj_logo_only_icon_color.svg', + logoUrl: 'https://cdn.activepieces.com/pieces/mailjet.svg', categories: [PieceCategory.COMMUNICATION], authors: ['christian-schab'], actions: [sendEmail], From cd039b68fb9dd9f5b1f445a7906c3617e493c114 Mon Sep 17 00:00:00 2001 From: Christian Schab Date: Thu, 2 May 2024 09:41:29 +0200 Subject: [PATCH 4/4] feat(mailjet): add mailjetAuth to sendEmail action --- packages/pieces/community/mailjet/src/index.ts | 2 +- .../pieces/community/mailjet/src/lib/actions/send-email.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/pieces/community/mailjet/src/index.ts b/packages/pieces/community/mailjet/src/index.ts index 6ad0f07e18..9d1625abc4 100644 --- a/packages/pieces/community/mailjet/src/index.ts +++ b/packages/pieces/community/mailjet/src/index.ts @@ -2,7 +2,7 @@ import { createPiece, PieceAuth } from '@activepieces/pieces-framework'; import { PieceCategory } from '@activepieces/shared'; import { sendEmail } from './lib/actions/send-email'; -const mailjetAuth = PieceAuth.BasicAuth({ +export const mailjetAuth = PieceAuth.BasicAuth({ description: 'Enter your api credentials', required: true, username: { diff --git a/packages/pieces/community/mailjet/src/lib/actions/send-email.ts b/packages/pieces/community/mailjet/src/lib/actions/send-email.ts index e5bb7fd088..412668d3cc 100644 --- a/packages/pieces/community/mailjet/src/lib/actions/send-email.ts +++ b/packages/pieces/community/mailjet/src/lib/actions/send-email.ts @@ -1,7 +1,9 @@ import { createAction, Property } from '@activepieces/pieces-framework'; import { AuthenticationType, httpClient, HttpMethod, HttpRequest } from '@activepieces/pieces-common'; +import { mailjetAuth } from '../../'; export const sendEmail = createAction({ + auth: mailjetAuth, name: 'send_email', displayName: 'Send Email', description: 'Send a text, HTML or template email through Mailjet', @@ -46,9 +48,7 @@ export const sendEmail = createAction({ }) }, async run(configValue) { - const auth = configValue.auth as { username: string; password: string; }; - const { propsValue } = configValue; - if (!auth) throw new Error(`Credentials not found!`); + const { propsValue, auth } = configValue; const message = { From: {