diff --git a/packages/pieces/community/apollo/package.json b/packages/pieces/community/apollo/package.json index 9dc5777b45..dd4e66ebb1 100644 --- a/packages/pieces/community/apollo/package.json +++ b/packages/pieces/community/apollo/package.json @@ -1,4 +1,4 @@ { "name": "@activepieces/piece-apollo", - "version": "0.0.2" + "version": "0.0.3" } diff --git a/packages/pieces/community/apollo/src/lib/actions/enrich-company.ts b/packages/pieces/community/apollo/src/lib/actions/enrich-company.ts index 7b6f7bdd08..3c6397aa1a 100644 --- a/packages/pieces/community/apollo/src/lib/actions/enrich-company.ts +++ b/packages/pieces/community/apollo/src/lib/actions/enrich-company.ts @@ -1,5 +1,5 @@ import { apolloAuth } from '../../'; -import { Property, createAction } from '@activepieces/pieces-framework'; +import { Property, StoreScope, createAction } from '@activepieces/pieces-framework'; import { HttpMethod, httpClient, @@ -15,12 +15,20 @@ export const enrichCompany = createAction({ description: '', required: true, }), + cacheResponse: Property.Checkbox({ + displayName: 'Cache Response', + description: 'Store the response in the project store for future use.', + required: false, + defaultValue: true, + }), }, auth: apolloAuth, async run({ propsValue, auth, store }) { - const cachedResult = await store.get(`_apollo_org_${propsValue.domain}`) - if (cachedResult) { - return cachedResult; + if (propsValue.cacheResponse) { + const cachedResult = await store.get(`_apollo_org_${propsValue.domain}`, StoreScope.PROJECT); + if (cachedResult) { + return cachedResult; + } } const result = await httpClient.sendRequest<{ organization: Record }>({ method: HttpMethod.GET, @@ -30,7 +38,10 @@ export const enrichCompany = createAction({ }, }); const resultOrg = result.body.organization || {}; - await store.put(`_apollo_org_${propsValue.domain}`, resultOrg); + if (propsValue.cacheResponse) { + await store.put(`_apollo_org_${propsValue.domain}`, resultOrg, StoreScope.PROJECT); + + } return resultOrg; }, }); diff --git a/packages/pieces/community/apollo/src/lib/actions/match-person.ts b/packages/pieces/community/apollo/src/lib/actions/match-person.ts index eaedfbdc51..01667a898f 100644 --- a/packages/pieces/community/apollo/src/lib/actions/match-person.ts +++ b/packages/pieces/community/apollo/src/lib/actions/match-person.ts @@ -1,6 +1,6 @@ import { apolloAuth } from '../../'; import { HttpMethod, httpClient } from '@activepieces/pieces-common'; -import { Property, createAction } from '@activepieces/pieces-framework'; +import { Property, StoreScope, createAction } from '@activepieces/pieces-framework'; export const matchPerson = createAction({ name: 'matchPerson', @@ -11,13 +11,21 @@ export const matchPerson = createAction({ displayName: 'Email', description: '', required: true, - }) + }), + cacheResponse: Property.Checkbox({ + displayName: 'Cache Response', + description: 'Store the response in the project store for future use.', + required: false, + defaultValue: true, + }), }, auth: apolloAuth, async run({ propsValue, auth, store }) { - const cachedResult = await store.get(`_apollo_person_${propsValue.email}`) - if (cachedResult) { - return cachedResult; + if (propsValue.cacheResponse) { + const cachedResult = await store.get(`_apollo_person_${propsValue.email}`, StoreScope.PROJECT); + if (cachedResult) { + return cachedResult; + } } const result = await httpClient.sendRequest<{ person: Record }>({ method: HttpMethod.POST, @@ -31,7 +39,9 @@ export const matchPerson = createAction({ } }); const personResult = result.body.person || {}; - await store.put(`_apollo_person_${propsValue.email}`, personResult); + if (propsValue.cacheResponse) { + await store.put(`_apollo_person_${propsValue.email}`, personResult, StoreScope.PROJECT); + } return personResult; }, }); diff --git a/packages/pieces/community/zerobounce/.eslintrc.json b/packages/pieces/community/zerobounce/.eslintrc.json new file mode 100644 index 0000000000..4a4e695c54 --- /dev/null +++ b/packages/pieces/community/zerobounce/.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/zerobounce/README.md b/packages/pieces/community/zerobounce/README.md new file mode 100644 index 0000000000..facaf23fca --- /dev/null +++ b/packages/pieces/community/zerobounce/README.md @@ -0,0 +1,7 @@ +# pieces-zerobounce + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build pieces-zerobounce` to build the library. diff --git a/packages/pieces/community/zerobounce/package.json b/packages/pieces/community/zerobounce/package.json new file mode 100644 index 0000000000..54b2a6c328 --- /dev/null +++ b/packages/pieces/community/zerobounce/package.json @@ -0,0 +1,4 @@ +{ + "name": "@activepieces/piece-zerobounce", + "version": "0.0.1" +} diff --git a/packages/pieces/community/zerobounce/project.json b/packages/pieces/community/zerobounce/project.json new file mode 100644 index 0000000000..ce7913c726 --- /dev/null +++ b/packages/pieces/community/zerobounce/project.json @@ -0,0 +1,38 @@ +{ + "name": "pieces-zerobounce", + "$schema": "../../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/pieces/community/zerobounce/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/packages/pieces/community/zerobounce", + "tsConfig": "packages/pieces/community/zerobounce/tsconfig.lib.json", + "packageJson": "packages/pieces/community/zerobounce/package.json", + "main": "packages/pieces/community/zerobounce/src/index.ts", + "assets": [ + "packages/pieces/community/zerobounce/*.md" + ], + "buildableProjectDepsInPackageJsonType": "dependencies", + "updateBuildableProjectDepsInPackageJson": true + } + }, + "publish": { + "command": "node tools/scripts/publish.mjs pieces-zerobounce {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/zerobounce/src/index.ts b/packages/pieces/community/zerobounce/src/index.ts new file mode 100644 index 0000000000..b38a1203a9 --- /dev/null +++ b/packages/pieces/community/zerobounce/src/index.ts @@ -0,0 +1,19 @@ + +import { createPiece, PieceAuth } from "@activepieces/pieces-framework"; +import { validateEmail } from "./lib/actions/validate-email"; + +export const zerobounceAuth = PieceAuth.SecretText({ + displayName: 'API Key', + required: true, +}); + +export const zerobounce = createPiece({ + displayName: "ZeroBounce", + auth: zerobounceAuth, + description: "ZeroBounce is an email validation service that helps you reduce bounces, improve email deliverability and increase email marketing ROI.", + minimumSupportedRelease: '0.20.0', + logoUrl: "https://cdn.activepieces.com/pieces/zerobounce.png", + authors: ["abuaboud"], + actions: [validateEmail], + triggers: [], +}); diff --git a/packages/pieces/community/zerobounce/src/lib/actions/validate-email.ts b/packages/pieces/community/zerobounce/src/lib/actions/validate-email.ts new file mode 100644 index 0000000000..015e759e9a --- /dev/null +++ b/packages/pieces/community/zerobounce/src/lib/actions/validate-email.ts @@ -0,0 +1,40 @@ +import { zerobounceAuth } from '../..'; +import { createAction, Property, StoreScope } from '@activepieces/pieces-framework'; +import { httpClient, HttpMethod } from '@activepieces/pieces-common'; +import { isNil } from '@activepieces/shared'; + +export const validateEmail = createAction({ + name: 'validateEmail', + displayName: 'Validate Email', + description: '', + props: { + email: Property.ShortText({ + displayName: 'Email', + required: true, + }), + cacheResponse: Property.Checkbox({ + displayName: 'Cache Response', + description: 'Store the response in the project store for future use.', + required: false, + defaultValue: true, + }), + }, + auth: zerobounceAuth, + async run({ store, propsValue, auth }) { + const key = `_zerobounce_${propsValue.email}`; + if (propsValue.cacheResponse) { + const cachedResponse = await store.get(key, StoreScope.PROJECT); + if (!isNil(cachedResponse)) { + return cachedResponse + } + } + const res = await httpClient.sendRequest({ + method: HttpMethod.GET, + url: `https://api.zerobounce.net/v2/validate?email=${propsValue.email}&api_key=${auth}`, + }); + if (propsValue.cacheResponse) { + await store.put(key, res.body, StoreScope.PROJECT); + } + return res.body; + }, +}); diff --git a/packages/pieces/community/zerobounce/tsconfig.json b/packages/pieces/community/zerobounce/tsconfig.json new file mode 100644 index 0000000000..059cd81661 --- /dev/null +++ b/packages/pieces/community/zerobounce/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/zerobounce/tsconfig.lib.json b/packages/pieces/community/zerobounce/tsconfig.lib.json new file mode 100644 index 0000000000..28369ef762 --- /dev/null +++ b/packages/pieces/community/zerobounce/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"] +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 26f182408f..acf980862d 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -572,6 +572,9 @@ "@activepieces/piece-zendesk": [ "packages/pieces/community/zendesk/src/index.ts" ], + "@activepieces/piece-zerobounce": [ + "packages/pieces/community/zerobounce/src/index.ts" + ], "@activepieces/piece-zoho-crm": [ "packages/pieces/community/zoho-crm/src/index.ts" ],