- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
85 lines
2.9 KiB
TypeScript
85 lines
2.9 KiB
TypeScript
import { createPiece, PieceAuth } from '@activepieces/pieces-framework';
|
|
import { addLeads } from './lib/actions/add-leads';
|
|
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
|
import { campaignCompleted } from './lib/triggers/campaign-completed';
|
|
import { emailBounced } from './lib/triggers/email-bounced';
|
|
import { emailOpened } from './lib/triggers/email-opened';
|
|
import { emailSent } from './lib/triggers/email-sent';
|
|
import { leadInterested } from './lib/triggers/lead-interested';
|
|
import { leadNotInterested } from './lib/triggers/lead-not-interested';
|
|
import { replyReceived } from './lib/triggers/reply-received';
|
|
import { addBlocklist } from './lib/actions/add-blocklist';
|
|
import { addEmail } from './lib/actions/add-email';
|
|
import { enableWarmup } from './lib/actions/enable-warmup';
|
|
import { getCampaignAnalytics } from './lib/actions/get-campaign-analytics';
|
|
import { getSummary } from './lib/actions/get-summary';
|
|
import { pauseCampaign } from './lib/actions/pause-campaign';
|
|
import { pauseWarmup } from './lib/actions/pause-warmup';
|
|
import { removeEmail } from './lib/actions/remove-email';
|
|
import { setSchedule } from './lib/actions/set-schedule';
|
|
import { startCampaign } from './lib/actions/start-campaign';
|
|
import { updateLead } from './lib/actions/update-lead';
|
|
import { PieceCategory } from '@activepieces/shared';
|
|
|
|
/**
|
|
* Define the API Key authentication using PieceAuth.SecretText
|
|
*/
|
|
|
|
export const ReachinboxAuth = PieceAuth.SecretText({
|
|
displayName: 'API Key',
|
|
description: 'Enter your ReachInbox API key',
|
|
required: true,
|
|
validate: async ({ auth }) => {
|
|
// Validate the API key format (UUID pattern: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
|
|
const uuidRegex =
|
|
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
if (uuidRegex.test(auth)) {
|
|
return { valid: true };
|
|
}
|
|
return {
|
|
valid: false,
|
|
error:
|
|
'Invalid API Key. It should follow the UUID format (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).',
|
|
};
|
|
},
|
|
});
|
|
|
|
export const reachinbox = createPiece({
|
|
displayName: 'Reachinbox',
|
|
auth: ReachinboxAuth,
|
|
minimumSupportedRelease: '0.30.0',
|
|
logoUrl: 'https://cdn.activepieces.com/pieces/reachinbox.png',
|
|
categories: [PieceCategory.MARKETING],
|
|
authors: ['support@reachinbox.ai', 'ManojKumard', 'Mitrajit'],
|
|
actions: [
|
|
addLeads,
|
|
addBlocklist,
|
|
addEmail,
|
|
enableWarmup,
|
|
getCampaignAnalytics,
|
|
getSummary,
|
|
pauseCampaign,
|
|
pauseWarmup,
|
|
removeEmail,
|
|
setSchedule,
|
|
startCampaign,
|
|
updateLead,
|
|
createCustomApiCallAction({
|
|
baseUrl: () => 'https://api.reachinbox.ai/api/v1/',
|
|
auth: ReachinboxAuth,
|
|
authMapping: async (auth) => ({
|
|
Authorization: `Bearer ${auth.secret_text}`,
|
|
}),
|
|
}),
|
|
],
|
|
triggers: [
|
|
campaignCompleted,
|
|
emailBounced,
|
|
emailOpened,
|
|
emailSent,
|
|
leadInterested,
|
|
leadNotInterested,
|
|
replyReceived,
|
|
],
|
|
});
|