Add Activepieces integration for workflow automation

- 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>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,33 @@
{
"extends": [
"../../../../.eslintrc.base.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-village
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-village` to build the library.

View File

@@ -0,0 +1,4 @@
{
"name": "@activepieces/piece-village",
"version": "0.2.1"
}

View File

@@ -0,0 +1,65 @@
{
"name": "pieces-village",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/village/src",
"projectType": "library",
"release": {
"version": {
"currentVersionResolver": "git-tag",
"preserveLocalDependencyProtocols": false,
"manifestRootsToUpdate": [
"dist/{projectRoot}"
]
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/village",
"tsConfig": "packages/pieces/community/village/tsconfig.lib.json",
"packageJson": "packages/pieces/community/village/package.json",
"main": "packages/pieces/community/village/src/index.ts",
"assets": [
"packages/pieces/community/village/*.md",
{
"input": "packages/pieces/community/village/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/village",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
}
}

View File

@@ -0,0 +1,49 @@
{
"The Social Capital API": "Die Social Capital API",
"Your Village API Key": "Dein Dorf-API-Schlüssel",
"Get Person Paths": "Personen-Pfade erhalten",
"Sort People": "Personen sortieren",
"Enrich Email": "Enrich Email",
"Enrich Profile": "Profil bereichern",
"Enrich Profile - Bulk": "Profil bereichern - Masse",
"Enrich Emails (Bulk)": "E-Mails bereichern (Bulk)",
"Get Company Paths": "Unternehmenspfade abrufen",
"Sort Companies": "Firmen sortieren",
"Enrich Company": "Firma bereichern",
"Enrich Company - Bulk": "Unternehmen bereichern - Masse",
"Returns connection paths and warmth score to a LinkedIn profile": "Stellt Verbindungspfade und Warmpunktzahl zu einem LinkedIn-Profil zurück",
"Sort a list of LinkedIn profiles by relationship strength with the user": "Liste der LinkedIn-Profile nach Beziehungsstärke mit dem Benutzer sortieren",
"Enrich a single LinkedIn profile or Village ID with an email address": "Ein einzelnes LinkedIn-Profil oder Dorfkennung mit einer E-Mail-Adresse bereichern",
"Enrich a single person profile with basic professional information and work history": "Erweitern Sie ein Einzelperson-Profil mit grundlegenden beruflichen Informationen und Arbeitsgeschichten",
"Enrich multiple person profiles (max 10) with basic professional information and work history.": "Erweitern Sie mehrere Personenprofile (max. 10) mit grundlegenden beruflichen Informationen und Arbeitsgeschichte.",
"Enrich multiple LinkedIn profiles or Village IDs with email addresses": "Mehrere LinkedIn-Profile oder Dorfausweise mit E-Mail-Adressen erweitern",
"Returns connection paths to a company using either its LinkedIn URL or domain URL": "Gibt Verbindungspfade über LinkedIn-URL oder Domain-URL an ein Unternehmen zurück",
"Sort a list of companies by relationship strength with the user": "Liste der Unternehmen nach Beziehungsstärke mit dem Benutzer sortieren",
"Enrich a single company profile with basic information including employee size, industry, and founding details": "Erweitern Sie ein einzelnes Unternehmensprofil mit grundlegenden Informationen wie Mitarbeitergröße, Industrie und Gründungsdetails",
"Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.": "Erweitern Sie mehrere Unternehmensprofile (max. 10) mit grundlegenden Informationen wie Mitarbeitergröße, Industrie und Gründungsdetails.",
"LinkedIn URL": "LinkedIn URL",
"User Identifier": "Benutzerkennung",
"People URLs": "Personen URLs",
"Identifier": "Identifier",
"Village ID": "Dorfkennung",
"Email": "E-Mail",
"Identifiers": "Bezeichner",
"Company URL": "Firmen-URL",
"Company URLs": "Firmen-URLs",
"Domain": "Domäne",
"LinkedIn URL of the target person": "LinkedIn URL der Zielperson",
"Specify the user making the request. This identifier should match the one you used when integrating the user with Village.": "Geben Sie den Benutzer an, der die Anfrage stellt. Dieser Identifikator sollte dem entsprechen, den Sie bei der Integration des Benutzers in das Dorf verwendet haben.",
"Array of LinkedIn URLs": "Anordnung der LinkedIn-URLs",
"LinkedIn URL or Village ID": "LinkedIn URL oder Dorfnummer",
"Village internal user ID": "Interne Dorfbenutzer-ID",
"LinkedIn profile URL": "LinkedIn profile URL",
"Email address": "E-Mail-Adresse",
"Add people to enrich (max 10)": "Personen zur Bereicherung hinzufügen (max. 10)",
"Semicolon-separated list of LinkedIn URLs or Village IDs": "Semikolon-getrennte Liste von LinkedIn-URLs oder Dorfkennungen",
"LinkedIn URL or domain URL of the target company (URL encoded)": "LinkedIn-URL oder Domain-URL der Zielfirma (URL-kodiert)",
"Array of company LinkedIn URLs or domain URLs": "Array der Firma LinkedIn-URLs oder Domain-URLs",
"Village internal company ID": "Dorfinterne Firmen-ID",
"Company domain name": "Firmendomänenname",
"LinkedIn company page URL": "LinkedIn Firmen-URL",
"Add companies to enrich (max 10)": "Unternehmen zur Bereicherung hinzufügen (max. 10)"
}

View File

@@ -0,0 +1,49 @@
{
"The Social Capital API": "La API de capital social",
"Your Village API Key": "Clave API de tu aldea",
"Get Person Paths": "Obtener rutas de la persona",
"Sort People": "Ordenar personas",
"Enrich Email": "Enrich Email",
"Enrich Profile": "Enriquecer perfil",
"Enrich Profile - Bulk": "Enriquecer Perfil - Masivo",
"Enrich Emails (Bulk)": "Enriquecer correos (grande)",
"Get Company Paths": "Obtener rutas de la empresa",
"Sort Companies": "Ordenar empresas",
"Enrich Company": "Enriquecer empresa",
"Enrich Company - Bulk": "Enrich Company - Masivo",
"Returns connection paths and warmth score to a LinkedIn profile": "Devuelve rutas de conexión y puntuación de calor a un perfil de LinkedIn",
"Sort a list of LinkedIn profiles by relationship strength with the user": "Ordenar una lista de perfiles de LinkedIn por intensidad de relación con el usuario",
"Enrich a single LinkedIn profile or Village ID with an email address": "Enriquece un único perfil o ID de la aldea con una dirección de correo electrónico",
"Enrich a single person profile with basic professional information and work history": "Enriquece un perfil de una sola persona con información profesional básica e historial de trabajo",
"Enrich multiple person profiles (max 10) with basic professional information and work history.": "Enriquece múltiples perfiles de personas (máximo 10) con información profesional básica e historia laboral.",
"Enrich multiple LinkedIn profiles or Village IDs with email addresses": "Enriquecer múltiples perfiles de LinkedIn o IDs de la aldea con direcciones de correo electrónico",
"Returns connection paths to a company using either its LinkedIn URL or domain URL": "Devuelve rutas de conexión a una empresa utilizando su URL de LinkedIn o URL de dominio",
"Sort a list of companies by relationship strength with the user": "Ordenar una lista de empresas por fuerza de relación con el usuario",
"Enrich a single company profile with basic information including employee size, industry, and founding details": "Enriquece un perfil de una sola empresa con información básica incluyendo el tamaño de los empleados, la industria y los detalles fundacionales",
"Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.": "Enriquezca múltiples perfiles de la empresa (máximo 10) con información básica, incluyendo el tamaño de los empleados, la industria y los detalles fundadores.",
"LinkedIn URL": "LinkedIn URL",
"User Identifier": "Identificador de usuario",
"People URLs": "URLs de personas",
"Identifier": "Identifier",
"Village ID": "ID de Aldea",
"Email": "E-mail",
"Identifiers": "Identificadores",
"Company URL": "URL de la empresa",
"Company URLs": "URL de la empresa",
"Domain": "Dominio",
"LinkedIn URL of the target person": "URL de LinkedIn de la persona a la que se dirige",
"Specify the user making the request. This identifier should match the one you used when integrating the user with Village.": "Especifique el usuario que realiza la solicitud. Este identificador debe coincidir con el que usaste al integrar el usuario con la Aldea.",
"Array of LinkedIn URLs": "Matriz de URLs de LinkedIn",
"LinkedIn URL or Village ID": "URL de LinkedIn o ID de la aldea",
"Village internal user ID": "ID de usuario interno de la aldea",
"LinkedIn profile URL": "LinkedIn profile URL",
"Email address": "Dirección de email",
"Add people to enrich (max 10)": "Añadir personas a enriquecer (máx. 10)",
"Semicolon-separated list of LinkedIn URLs or Village IDs": "Lista separada por punto y coma de las URLs de LinkedIn o IDs de la aldea",
"LinkedIn URL or domain URL of the target company (URL encoded)": "URL de LinkedIn o URL de dominio de la empresa de destino (URL codificada)",
"Array of company LinkedIn URLs or domain URLs": "Arreglo de las URL LinkedIn de la empresa o URL de dominio",
"Village internal company ID": "ID de empresa interna de la aldea",
"Company domain name": "Nombre de dominio de la empresa",
"LinkedIn company page URL": "URL de la página de la empresa de LinkedIn",
"Add companies to enrich (max 10)": "Añadir empresas a enriquecer (máx. 10)"
}

View File

@@ -0,0 +1,49 @@
{
"The Social Capital API": "L'API du capital social",
"Your Village API Key": "Votre clé API Village",
"Get Person Paths": "Récupérer les Chemins de la Personne",
"Sort People": "Trier les personnes",
"Enrich Email": "Enrich Email",
"Enrich Profile": "Enrichir le profil",
"Enrich Profile - Bulk": "Enrichir le profil - en vrac",
"Enrich Emails (Bulk)": "Enrichir les E-mails (Groupe)",
"Get Company Paths": "Obtenir les Chemins de la Société",
"Sort Companies": "Trier les entreprises",
"Enrich Company": "Enrichir la société",
"Enrich Company - Bulk": "Entreprise Enrich - En vrac",
"Returns connection paths and warmth score to a LinkedIn profile": "Renvoie les chemins de connexion et le score de chaleur à un profil LinkedIn",
"Sort a list of LinkedIn profiles by relationship strength with the user": "Trier une liste de profils LinkedIn par rapport à la force de la relation avec l'utilisateur",
"Enrich a single LinkedIn profile or Village ID with an email address": "Enrichissez un seul profil LinkedIn ou ID de village avec une adresse e-mail",
"Enrich a single person profile with basic professional information and work history": "Enrichissez un profil de personne avec des informations professionnelles de base et un historique de travail",
"Enrich multiple person profiles (max 10) with basic professional information and work history.": "Enrichissez les profils de personnes multiples (max 10) avec des informations professionnelles de base et des antécédents professionnels.",
"Enrich multiple LinkedIn profiles or Village IDs with email addresses": "Enrichissez plusieurs profils LinkedIn ou IDs de village avec des adresses e-mail",
"Returns connection paths to a company using either its LinkedIn URL or domain URL": "Renvoie les chemins de connexion à une entreprise en utilisant son URL LinkedIn ou son URL de domaine",
"Sort a list of companies by relationship strength with the user": "Trier une liste d'entreprises par force de relation avec l'utilisateur",
"Enrich a single company profile with basic information including employee size, industry, and founding details": "Enrichissez un profil d'entreprise unique avec des informations de base, y compris la taille des employés, l'industrie et les détails fondateurs",
"Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.": "Enrichissez les profils de plusieurs entreprises (max 10) avec des informations de base, y compris la taille des employés, l'industrie et les détails fondateurs.",
"LinkedIn URL": "LinkedIn URL",
"User Identifier": "Identifiant de l'utilisateur",
"People URLs": "URL des personnes",
"Identifier": "Identifier",
"Village ID": "ID du village",
"Email": "Courriel",
"Identifiers": "Identifiants",
"Company URL": "URL de la société",
"Company URLs": "URL de la société",
"Domain": "Domaine",
"LinkedIn URL of the target person": "URL LinkedIn de la personne cible",
"Specify the user making the request. This identifier should match the one you used when integrating the user with Village.": "Spécifiez l'utilisateur qui fait la demande. Cet identifiant doit correspondre à celui que vous avez utilisé lors de l'intégration de l'utilisateur avec Village.",
"Array of LinkedIn URLs": "Tableau des URLs LinkedIn",
"LinkedIn URL or Village ID": "URL LinkedIn ou ID de village",
"Village internal user ID": "ID de l'utilisateur interne du village",
"LinkedIn profile URL": "LinkedIn profile URL",
"Email address": "Adresse e-mail",
"Add people to enrich (max 10)": "Ajouter des personnes à enrichir (max 10)",
"Semicolon-separated list of LinkedIn URLs or Village IDs": "Liste d'URLs LinkedIn séparées par des virgules ou IDs de village",
"LinkedIn URL or domain URL of the target company (URL encoded)": "URL LinkedIn ou URL de domaine de la société cible (URL encodée)",
"Array of company LinkedIn URLs or domain URLs": "Tableau de la société LinkedIn URL ou URL de domaine",
"Village internal company ID": "ID de la société interne du village",
"Company domain name": "Nom de domaine de la société",
"LinkedIn company page URL": "URL de la page de l'entreprise LinkedIn",
"Add companies to enrich (max 10)": "Ajouter des entreprises pour enrichir (max 10)"
}

View File

@@ -0,0 +1,49 @@
{
"The Social Capital API": "Social Capital API",
"Your Village API Key": "村のAPIキー",
"Get Person Paths": "パスを取得する",
"Sort People": "人を並び替え",
"Enrich Email": "Enrich Email",
"Enrich Profile": "プロフィールを拡大",
"Enrich Profile - Bulk": "プロファイルの拡大 - 一括表示",
"Enrich Emails (Bulk)": "Enrich emails (Bulk)",
"Get Company Paths": "会社パスを取得",
"Sort Companies": "会社の並び替え",
"Enrich Company": "Enrich Company",
"Enrich Company - Bulk": "Enrich Company - Bulk",
"Returns connection paths and warmth score to a LinkedIn profile": "LinkedIn プロフィールに接続パスと暖かさスコアを返します。",
"Sort a list of LinkedIn profiles by relationship strength with the user": "ユーザとの関係強度でLinkedInプロフィールの一覧をソート",
"Enrich a single LinkedIn profile or Village ID with an email address": "LinkedInのプロフィールまたは村のIDをメールアドレスで強化する",
"Enrich a single person profile with basic professional information and work history": "基本的なプロ情報と仕事歴を持つ一人のプロフィールを豊かにする",
"Enrich multiple person profiles (max 10) with basic professional information and work history.": "基本的な専門的情報と仕事の履歴で複数の個人プロファイル(最大10)を豊かにします。",
"Enrich multiple LinkedIn profiles or Village IDs with email addresses": "メールアドレスで複数の LinkedIn プロフィールまたは村の ID を豊かにする",
"Returns connection paths to a company using either its LinkedIn URL or domain URL": "LinkedIn URLまたはドメインURLを使用して会社への接続パスを返します",
"Sort a list of companies by relationship strength with the user": "ユーザとの関係強度で会社一覧をソート",
"Enrich a single company profile with basic information including employee size, industry, and founding details": "従業員の規模、業界、設立の詳細などの基本情報を含む単一の会社プロフィールを充実させます",
"Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.": "従業員の規模、業界、設立の詳細などの基本情報を複数の会社プロファイル(最大10件)に充実させます。",
"LinkedIn URL": "LinkedIn URL",
"User Identifier": "ユーザー識別子",
"People URLs": "ユーザーのURL",
"Identifier": "Identifier",
"Village ID": "村のID",
"Email": "Eメールアドレス",
"Identifiers": "識別子",
"Company URL": "会社URL",
"Company URLs": "会社URL",
"Domain": "ドメイン",
"LinkedIn URL of the target person": "対象者の LinkedIn URL",
"Specify the user making the request. This identifier should match the one you used when integrating the user with Village.": "リクエストを行うユーザーを指定します。この識別子は、Villageとユーザーを統合するときに使用した識別子と一致する必要があります。",
"Array of LinkedIn URLs": "LinkedIn URLの配列",
"LinkedIn URL or Village ID": "LinkedIn URL または Village ID",
"Village internal user ID": "村の内部ユーザーID",
"LinkedIn profile URL": "LinkedIn profile URL",
"Email address": "メールアドレス",
"Add people to enrich (max 10)": "人をエンリッチに追加最大10人",
"Semicolon-separated list of LinkedIn URLs or Village IDs": "LinkedIn URLまたは村IDのセミコロン区切りリスト",
"LinkedIn URL or domain URL of the target company (URL encoded)": "ターゲット会社のLinkedIn URLまたはドメインURLURLエンコード",
"Array of company LinkedIn URLs or domain URLs": "会社の LinkedIn URL またはドメインの URL の配列",
"Village internal company ID": "村の社内会社ID",
"Company domain name": "会社のドメイン名",
"LinkedIn company page URL": "LinkedIn company page URL",
"Add companies to enrich (max 10)": "エンリッチする会社を追加する最大10"
}

View File

@@ -0,0 +1,49 @@
{
"The Social Capital API": "De Social Capital API",
"Your Village API Key": "Uw Dorp API Sleutel",
"Get Person Paths": "Verkrijg Person-paden",
"Sort People": "Sorteer personen",
"Enrich Email": "Enrich Email",
"Enrich Profile": "Verrijk profiel",
"Enrich Profile - Bulk": "Profiel verrijken - Bulk",
"Enrich Emails (Bulk)": "Emails verrijken (Bulk)",
"Get Company Paths": "Bedrijfspaden ophalen",
"Sort Companies": "Sorteer bedrijven",
"Enrich Company": "Bedrijf verrijken",
"Enrich Company - Bulk": "Bedrijf rijk - Bulk",
"Returns connection paths and warmth score to a LinkedIn profile": "Geeft de verbindingspaden en warmtescore terug naar een LinkedIn-profiel",
"Sort a list of LinkedIn profiles by relationship strength with the user": "Sorteer een lijst van LinkedIn profielen op relatie sterkte met de gebruiker",
"Enrich a single LinkedIn profile or Village ID with an email address": "rijk een enkel LinkedIn-profiel of Village ID met een e-mailadres",
"Enrich a single person profile with basic professional information and work history": "Verrijk een enkel persoonprofiel met professionele informatie en werkgeschiedenis",
"Enrich multiple person profiles (max 10) with basic professional information and work history.": "Verrijk meerdere persoonprofielen (max 10) met professionele basisinformatie en werkgeschiedenis.",
"Enrich multiple LinkedIn profiles or Village IDs with email addresses": "Meerdere LinkedIn-profielen of Village IDs met e-mailadressen verrijken",
"Returns connection paths to a company using either its LinkedIn URL or domain URL": "Geeft verbindingspaden terug naar een bedrijf via de LinkedIn URL of domein-URL",
"Sort a list of companies by relationship strength with the user": "Sorteer een lijst van bedrijven op relatiesterkte met de gebruiker",
"Enrich a single company profile with basic information including employee size, industry, and founding details": "Onderrijk een enkel bedrijfsprofiel met basisinformatie inclusief werknemersgrootte, industrie en oprichtingsgegevens",
"Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.": "Meerdere bedrijfsprofielen (max 10) verrijken met basisinformatie zoals werknemersgrootte, industrie en oprichtingsgegevens.",
"LinkedIn URL": "LinkedIn URL",
"User Identifier": "Gebruikers-id",
"People URLs": "Personen URLs",
"Identifier": "Identifier",
"Village ID": "Dorp ID",
"Email": "E-mail",
"Identifiers": "Identificeerders",
"Company URL": "Bedrijfs URL",
"Company URLs": "Bedrijfs URL's",
"Domain": "Domein",
"LinkedIn URL of the target person": "LinkedIn URL van de doelpersoon",
"Specify the user making the request. This identifier should match the one you used when integrating the user with Village.": "Geef de gebruiker aan die het verzoek doet. Deze identificatie moet overeenkomen met degene die u hebt gebruikt bij het integreren van de gebruiker met Village.",
"Array of LinkedIn URLs": "Array of LinkedIn URLs",
"LinkedIn URL or Village ID": "LinkedIn URL of Dorp ID",
"Village internal user ID": "Dorp interne gebruiker ID",
"LinkedIn profile URL": "LinkedIn profile URL",
"Email address": "E-mail adres",
"Add people to enrich (max 10)": "Voeg mensen toe aan verrijking (max 10)",
"Semicolon-separated list of LinkedIn URLs or Village IDs": "Puntkomma-gescheiden lijst van LinkedIn URL's of Village ID's",
"LinkedIn URL or domain URL of the target company (URL encoded)": "LinkedIn URL of domein URL van het doelbedrijf (URL gecodeerd)",
"Array of company LinkedIn URLs or domain URLs": "Array van het bedrijf LinkedIn URL's of domein URL's",
"Village internal company ID": "Dorp interne bedrijfs-ID",
"Company domain name": "Domein van bedrijf",
"LinkedIn company page URL": "LinkedIn bedrijfspagina URL",
"Add companies to enrich (max 10)": "Voeg bedrijven toe aan verrijking (max 10)"
}

View File

@@ -0,0 +1,49 @@
{
"The Social Capital API": "A API de Capital Social",
"Your Village API Key": "Sua chave API da Village",
"Get Person Paths": "Obter caminhos de pessoa",
"Sort People": "Ordenar pessoas",
"Enrich Email": "Enrich Email",
"Enrich Profile": "Enriquecer Perfil",
"Enrich Profile - Bulk": "Enrich Perfil - Bulk",
"Enrich Emails (Bulk)": "Enriquecer E-mails (Brak)",
"Get Company Paths": "Obter caminhos da empresa",
"Sort Companies": "Ordenar Empresas",
"Enrich Company": "Enriquecer empresa",
"Enrich Company - Bulk": "Companhia Enrich - Bulk",
"Returns connection paths and warmth score to a LinkedIn profile": "Retorna caminhos de conexão e pontuação de calor para um perfil do LinkedIn",
"Sort a list of LinkedIn profiles by relationship strength with the user": "Ordenar uma lista de perfis do LinkedIn pela força da relação com o usuário",
"Enrich a single LinkedIn profile or Village ID with an email address": "Enriquecer um único perfil do LinkedIn ou ID da Vila com um endereço de e-mail",
"Enrich a single person profile with basic professional information and work history": "Enriquecer um perfil de pessoa com informação profissional básica e histórico de trabalho",
"Enrich multiple person profiles (max 10) with basic professional information and work history.": "Enriquecer perfis de pessoas (máx. 10) com informação profissional básica e histórico de trabalho.",
"Enrich multiple LinkedIn profiles or Village IDs with email addresses": "Enriqueça vários perfis LinkedIn ou ID da Village com endereços de e-mail",
"Returns connection paths to a company using either its LinkedIn URL or domain URL": "Retorna caminhos de conexão para uma empresa usando a sua URL LinkedIn ou URL de domínio",
"Sort a list of companies by relationship strength with the user": "Ordenar uma lista de empresas pela relação forte com o usuário",
"Enrich a single company profile with basic information including employee size, industry, and founding details": "Enrich um único perfil de empresa com informações básicas, incluindo o tamanho dos funcionários, indústria e detalhes fundadores",
"Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.": "Enrich vários perfis da empresa (máx. 10) com informações básicas, incluindo o tamanho do funcionário, a indústria e os detalhes fundadores.",
"LinkedIn URL": "LinkedIn URL",
"User Identifier": "Identificador do usuário",
"People URLs": "URLs de pessoas",
"Identifier": "Identifier",
"Village ID": "ID da Vila",
"Email": "e-mail",
"Identifiers": "Identificadores",
"Company URL": "URL da empresa",
"Company URLs": "URLs da empresa",
"Domain": "Domínio",
"LinkedIn URL of the target person": "URL do LinkedIn da pessoa alvo",
"Specify the user making the request. This identifier should match the one you used when integrating the user with Village.": "Especifique o usuário que está fazendo a solicitação. Este identificador deve corresponder ao que você usou ao integrar o usuário com a Village.",
"Array of LinkedIn URLs": "Array de URLs LinkedIn",
"LinkedIn URL or Village ID": "URL LinkedIn ou ID da Vila",
"Village internal user ID": "ID interno da Vila",
"LinkedIn profile URL": "LinkedIn profile URL",
"Email address": "Endereço de e-mail",
"Add people to enrich (max 10)": "Adicionar pessoas ao enrich (máx. 10)",
"Semicolon-separated list of LinkedIn URLs or Village IDs": "Lista separada por URLs LinkedIn ou IDs de Village",
"LinkedIn URL or domain URL of the target company (URL encoded)": "URL LinkedIn ou URL de domínio da empresa-alvo (URL codificada)",
"Array of company LinkedIn URLs or domain URLs": "Array de URLs do LinkedIn da empresa ou de URLs de domínio",
"Village internal company ID": "ID interno da Vila",
"Company domain name": "Nome de domínio empresarial",
"LinkedIn company page URL": "URL da página da empresa LinkedIn",
"Add companies to enrich (max 10)": "Adicionar empresas para enriquecer (máx. 10)"
}

View File

@@ -0,0 +1,17 @@
{
"Village": "Деревня",
"The Social Capital API": "API соц. капитала",
"Your Village API Key": "Ваш ключ API деревни",
"Find Person Paths": "Найти пути человека",
"Find Company Paths": "Найти пути компании",
"Enrich a person record with all available intro paths": "Пополните запись пользователя со всеми доступными интро дорожками",
"Enrich a company record with all people that have available intro paths": "Улучшить запись компании со всеми людьми, которые имеют доступные интро пути",
"User Identifier": "Идентификатор пользователя",
"Person Linkedin URL": "URL пользователя Linkedin",
"Company Domain URL": "URL-адрес домена компании",
"Company Linkedin URL": "URL-адрес компании Linkedin",
"If you're a Village Partner, use this field that identifies your user": "Если вы являетесь партнером деревни, используйте это поле, которое идентифицирует вашего пользователя",
"The Linkedin URL of the person you're trying to find paths to.": "URL-адрес Linkedin человека, к которому вы пытаетесь найти пути.",
"The Company Domain URL of the company you're trying to find paths to. E.g. https://openai.com/": "URL домена компании в которой вы пытаетесь найти пути. Например, https://openai.com/",
"The Company Linkedin URL of the company you're trying to find paths to. E.g. https://www.linkedin.com/company/openai/": "URL-адрес компании Linkedin, к которому вы пытаетесь найти пути. Например, https://www.linkedin.com/company/openai/"
}

View File

@@ -0,0 +1,49 @@
{
"The Social Capital API": "The Social Capital API",
"Your Village API Key": "Your Village API Key",
"Get Person Paths": "Get Person Paths",
"Sort People": "Sort People",
"Enrich Email": "Enrich Email",
"Enrich Profile": "Enrich Profile",
"Enrich Profile - Bulk": "Enrich Profile - Bulk",
"Enrich Emails (Bulk)": "Enrich Emails (Bulk)",
"Get Company Paths": "Get Company Paths",
"Sort Companies": "Sort Companies",
"Enrich Company": "Enrich Company",
"Enrich Company - Bulk": "Enrich Company - Bulk",
"Returns connection paths and warmth score to a LinkedIn profile": "Returns connection paths and warmth score to a LinkedIn profile",
"Sort a list of LinkedIn profiles by relationship strength with the user": "Sort a list of LinkedIn profiles by relationship strength with the user",
"Enrich a single LinkedIn profile or Village ID with an email address": "Enrich a single LinkedIn profile or Village ID with an email address",
"Enrich a single person profile with basic professional information and work history": "Enrich a single person profile with basic professional information and work history",
"Enrich multiple person profiles (max 10) with basic professional information and work history.": "Enrich multiple person profiles (max 10) with basic professional information and work history.",
"Enrich multiple LinkedIn profiles or Village IDs with email addresses": "Enrich multiple LinkedIn profiles or Village IDs with email addresses",
"Returns connection paths to a company using either its LinkedIn URL or domain URL": "Returns connection paths to a company using either its LinkedIn URL or domain URL",
"Sort a list of companies by relationship strength with the user": "Sort a list of companies by relationship strength with the user",
"Enrich a single company profile with basic information including employee size, industry, and founding details": "Enrich a single company profile with basic information including employee size, industry, and founding details",
"Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.": "Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.",
"LinkedIn URL": "LinkedIn URL",
"User Identifier": "User Identifier",
"People URLs": "People URLs",
"Identifier": "Identifier",
"Village ID": "Village ID",
"Email": "Email",
"Identifiers": "Identifiers",
"Company URL": "Company URL",
"Company URLs": "Company URLs",
"Domain": "Domain",
"LinkedIn URL of the target person": "LinkedIn URL of the target person",
"Specify the user making the request. This identifier should match the one you used when integrating the user with Village.": "Specify the user making the request. This identifier should match the one you used when integrating the user with Village.",
"Array of LinkedIn URLs": "Array of LinkedIn URLs",
"LinkedIn URL or Village ID": "LinkedIn URL or Village ID",
"Village internal user ID": "Village internal user ID",
"LinkedIn profile URL": "LinkedIn profile URL",
"Email address": "Email address",
"Add people to enrich (max 10)": "Add people to enrich (max 10)",
"Semicolon-separated list of LinkedIn URLs or Village IDs": "Semicolon-separated list of LinkedIn URLs or Village IDs",
"LinkedIn URL or domain URL of the target company (URL encoded)": "LinkedIn URL or domain URL of the target company (URL encoded)",
"Array of company LinkedIn URLs or domain URLs": "Array of company LinkedIn URLs or domain URLs",
"Village internal company ID": "Village internal company ID",
"Company domain name": "Company domain name",
"LinkedIn company page URL": "LinkedIn company page URL",
"Add companies to enrich (max 10)": "Add companies to enrich (max 10)"
}

View File

@@ -0,0 +1,17 @@
{
"Village": "Village",
"The Social Capital API": "The Social Capital API",
"Your Village API Key": "Your Village API Key",
"Find Person Paths": "Find Person Paths",
"Find Company Paths": "Find Company Paths",
"Enrich a person record with all available intro paths": "Enrich a person record with all available intro paths",
"Enrich a company record with all people that have available intro paths": "Enrich a company record with all people that have available intro paths",
"User Identifier": "User Identifier",
"Person Linkedin URL": "Person Linkedin URL",
"Company Domain URL": "Company Domain URL",
"Company Linkedin URL": "Company Linkedin URL",
"If you're a Village Partner, use this field that identifies your user": "If you're a Village Partner, use this field that identifies your user",
"The Linkedin URL of the person you're trying to find paths to.": "The Linkedin URL of the person you're trying to find paths to.",
"The Company Domain URL of the company you're trying to find paths to. E.g. https://openai.com/": "The Company Domain URL of the company you're trying to find paths to. E.g. https://openai.com/",
"The Company Linkedin URL of the company you're trying to find paths to. E.g. https://www.linkedin.com/company/openai/": "The Company Linkedin URL of the company you're trying to find paths to. E.g. https://www.linkedin.com/company/openai/"
}

View File

@@ -0,0 +1,49 @@
{
"The Social Capital API": "The Social Capital API",
"Your Village API Key": "Your Village API Key",
"Get Person Paths": "Get Person Paths",
"Sort People": "Sort People",
"Enrich Email": "Enrich Email",
"Enrich Profile": "Enrich Profile",
"Enrich Profile - Bulk": "Enrich Profile - Bulk",
"Enrich Emails (Bulk)": "Enrich Emails (Bulk)",
"Get Company Paths": "Get Company Paths",
"Sort Companies": "Sort Companies",
"Enrich Company": "Enrich Company",
"Enrich Company - Bulk": "Enrich Company - Bulk",
"Returns connection paths and warmth score to a LinkedIn profile": "Returns connection paths and warmth score to a LinkedIn profile",
"Sort a list of LinkedIn profiles by relationship strength with the user": "Sort a list of LinkedIn profiles by relationship strength with the user",
"Enrich a single LinkedIn profile or Village ID with an email address": "Enrich a single LinkedIn profile or Village ID with an email address",
"Enrich a single person profile with basic professional information and work history": "Enrich a single person profile with basic professional information and work history",
"Enrich multiple person profiles (max 10) with basic professional information and work history.": "Enrich multiple person profiles (max 10) with basic professional information and work history.",
"Enrich multiple LinkedIn profiles or Village IDs with email addresses": "Enrich multiple LinkedIn profiles or Village IDs with email addresses",
"Returns connection paths to a company using either its LinkedIn URL or domain URL": "Returns connection paths to a company using either its LinkedIn URL or domain URL",
"Sort a list of companies by relationship strength with the user": "Sort a list of companies by relationship strength with the user",
"Enrich a single company profile with basic information including employee size, industry, and founding details": "Enrich a single company profile with basic information including employee size, industry, and founding details",
"Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.": "Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.",
"LinkedIn URL": "LinkedIn URL",
"User Identifier": "User Identifier",
"People URLs": "People URLs",
"Identifier": "Identifier",
"Village ID": "Village ID",
"Email": "电子邮件地址",
"Identifiers": "Identifiers",
"Company URL": "Company URL",
"Company URLs": "Company URLs",
"Domain": "Domain",
"LinkedIn URL of the target person": "LinkedIn URL of the target person",
"Specify the user making the request. This identifier should match the one you used when integrating the user with Village.": "Specify the user making the request. This identifier should match the one you used when integrating the user with Village.",
"Array of LinkedIn URLs": "Array of LinkedIn URLs",
"LinkedIn URL or Village ID": "LinkedIn URL or Village ID",
"Village internal user ID": "Village internal user ID",
"LinkedIn profile URL": "LinkedIn profile URL",
"Email address": "Email address",
"Add people to enrich (max 10)": "Add people to enrich (max 10)",
"Semicolon-separated list of LinkedIn URLs or Village IDs": "Semicolon-separated list of LinkedIn URLs or Village IDs",
"LinkedIn URL or domain URL of the target company (URL encoded)": "LinkedIn URL or domain URL of the target company (URL encoded)",
"Array of company LinkedIn URLs or domain URLs": "Array of company LinkedIn URLs or domain URLs",
"Village internal company ID": "Village internal company ID",
"Company domain name": "Company domain name",
"LinkedIn company page URL": "LinkedIn company page URL",
"Add companies to enrich (max 10)": "Add companies to enrich (max 10)"
}

View File

@@ -0,0 +1,50 @@
import { createPiece, PieceAuth } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
// People actions
import { getPersonPaths } from './lib/actions/people/get-person-paths';
import { sortPeople } from './lib/actions/people/sort-people';
import { enrichEmail } from './lib/actions/people/enrich-email';
import { enrichPersonBasic } from './lib/actions/people/enrich-person-basic';
import { enrichPersonBasicBulk } from './lib/actions/people/enrich-person-basic-bulk';
import { enrichEmailsBulk } from './lib/actions/people/enrich-emails-bulk';
// Company actions
import { getCompanyPaths } from './lib/actions/companies/get-company-paths';
import { sortCompanies } from './lib/actions/companies/sort-companies';
import { enrichCompanyBasic } from './lib/actions/companies/enrich-company-basic';
import { enrichCompanyBasicBulk } from './lib/actions/companies/enrich-company-basic-bulk';
export const villageAuth = PieceAuth.SecretText({
displayName: 'API Key',
required: true,
description: 'Your Village API Key',
});
export const village = createPiece({
displayName: 'Village',
description: 'The Social Capital API',
auth: villageAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/village.png',
categories: [
PieceCategory.PRODUCTIVITY,
PieceCategory.SALES_AND_CRM,
],
authors: ['rafaelmuttoni'],
actions: [
// People actions
getPersonPaths,
sortPeople,
enrichEmail,
enrichPersonBasic,
enrichPersonBasicBulk,
enrichEmailsBulk,
// Company actions
getCompanyPaths,
sortCompanies,
enrichCompanyBasic,
enrichCompanyBasicBulk,
],
triggers: [],
});

View File

@@ -0,0 +1,76 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const enrichCompanyBasicBulk = createAction({
name: 'enrichCompanyBasicBulk',
auth: villageAuth,
displayName: 'Enrich Company - Bulk',
description: 'Enrich multiple company profiles (max 10) with basic information including employee size, industry, and founding details.',
props: {
identifiers: Property.Array({
displayName: 'Identifiers',
description: 'Add companies to enrich (max 10)',
properties: {
identifierType: Property.StaticDropdown({
displayName: 'Identifier Type',
required: true,
options: {
options: [
{ label: 'Village ID', value: 'village_id' },
{ label: 'LinkedIn URL', value: 'linkedin_url' },
{ label: 'Domain', value: 'domain' },
],
},
}),
identifierValue: Property.ShortText({
displayName: 'Identifier Value',
description: 'Enter the Village ID, LinkedIn URL, or Domain',
required: true,
}),
},
required: true,
defaultValue: [],
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { identifiers, user_identifier } = context.propsValue;
if (!identifiers || identifiers.length === 0) {
throw new Error('At least one identifier is required');
}
if (identifiers.length > 10) {
throw new Error('Maximum of 10 identifiers allowed per request');
}
// Transform the array data to match API format
const formattedIdentifiers = identifiers.map((item: any) => ({
[item.identifierType]: item.identifierValue
}));
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
const res = await httpClient.sendRequest({
method: HttpMethod.POST,
url: 'https://api.village.do/v1/companies/enrich/basic/bulk',
headers,
body: {
identifiers: formattedIdentifiers,
},
});
return res.body;
},
});

View File

@@ -0,0 +1,62 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const enrichCompanyBasic = createAction({
name: 'enrichCompanyBasic',
auth: villageAuth,
displayName: 'Enrich Company',
description: 'Enrich a single company profile with basic information including employee size, industry, and founding details',
props: {
village_id: Property.ShortText({
displayName: 'Village ID',
description: 'Village internal company ID',
required: false,
}),
domain: Property.ShortText({
displayName: 'Domain',
description: 'Company domain name',
required: false,
}),
linkedin_url: Property.ShortText({
displayName: 'LinkedIn URL',
description: 'LinkedIn company page URL',
required: false,
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { village_id, domain, linkedin_url, user_identifier } = context.propsValue;
// At least one identifier is required
if (!village_id && !domain && !linkedin_url) {
throw new Error('At least one identifier (village_id, domain, or linkedin_url) is required');
}
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
// Build query parameters
const queryParams = new URLSearchParams();
if (village_id) queryParams.append('village_id', village_id);
if (domain) queryParams.append('domain', domain);
if (linkedin_url) queryParams.append('linkedin_url', linkedin_url);
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.village.do/v1/companies/enrich/basic?${queryParams.toString()}`,
headers,
});
return res.body;
},
});

View File

@@ -0,0 +1,44 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const getCompanyPaths = createAction({
name: 'getCompanyPaths',
auth: villageAuth,
displayName: 'Get Company Paths',
description: 'Returns connection paths to a company using either its LinkedIn URL or domain URL',
props: {
company_url: Property.ShortText({
displayName: 'Company URL',
description: 'LinkedIn URL or domain URL of the target company (URL encoded)',
required: true,
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { company_url, user_identifier } = context.propsValue;
// Encode the URL for use in the path
const encodedUrl = encodeURIComponent(company_url);
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.village.do/v1/companies/paths/${encodedUrl}`,
headers,
});
return res.body;
},
});

View File

@@ -0,0 +1,44 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const sortCompanies = createAction({
name: 'sortCompanies',
auth: villageAuth,
displayName: 'Sort Companies',
description: 'Sort a list of companies by relationship strength with the user',
props: {
companies: Property.Array({
displayName: 'Company URLs',
description: 'Array of company LinkedIn URLs or domain URLs',
required: true,
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { companies, user_identifier } = context.propsValue;
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
const res = await httpClient.sendRequest({
method: HttpMethod.POST,
url: 'https://api.village.do/v1/companies/sort',
headers,
body: {
companies,
},
});
return res.body;
},
});

View File

@@ -0,0 +1,44 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const enrichEmail = createAction({
name: 'enrichEmail',
auth: villageAuth,
displayName: 'Enrich Email',
description: 'Enrich a single LinkedIn profile or Village ID with an email address',
props: {
identifier: Property.ShortText({
displayName: 'Identifier',
description: 'LinkedIn URL or Village ID',
required: true,
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { identifier, user_identifier } = context.propsValue;
// Encode the identifier for use in the path
const encodedIdentifier = encodeURIComponent(identifier);
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.village.do/v1/people/enrich/emails/${encodedIdentifier}`,
headers,
});
return res.body;
},
});

View File

@@ -0,0 +1,49 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const enrichEmailsBulk = createAction({
name: 'enrichEmailsBulk',
auth: villageAuth,
displayName: 'Enrich Emails (Bulk)',
description: 'Enrich multiple LinkedIn profiles or Village IDs with email addresses',
props: {
identifiers: Property.Array({
displayName: 'Identifiers',
description: 'Semicolon-separated list of LinkedIn URLs or Village IDs',
required: true,
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { identifiers, user_identifier } = context.propsValue;
if (!identifiers || identifiers.length === 0) {
throw new Error('At least one identifier is required');
}
// Join identifiers with semicolon and encode for URL
const identifiersString = identifiers.join(';');
const encodedIdentifiers = encodeURIComponent(identifiersString);
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.village.do/v1/people/enrich/emails/bulk/${encodedIdentifiers}`,
headers,
});
return res.body;
},
});

View File

@@ -0,0 +1,76 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const enrichPersonBasicBulk = createAction({
name: 'enrichPersonBasicBulk',
auth: villageAuth,
displayName: 'Enrich Profile - Bulk',
description: 'Enrich multiple person profiles (max 10) with basic professional information and work history.',
props: {
identifiers: Property.Array({
displayName: 'Identifiers',
description: 'Add people to enrich (max 10)',
properties: {
identifierType: Property.StaticDropdown({
displayName: 'Identifier Type',
required: true,
options: {
options: [
{ label: 'Village ID', value: 'village_id' },
{ label: 'LinkedIn URL', value: 'linkedin_url' },
{ label: 'Email', value: 'email' },
],
},
}),
identifierValue: Property.ShortText({
displayName: 'Identifier Value',
description: 'Enter the Village ID, LinkedIn URL, or Email',
required: true,
}),
},
required: true,
defaultValue: [],
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { identifiers, user_identifier } = context.propsValue;
if (!identifiers || identifiers.length === 0) {
throw new Error('At least one identifier is required');
}
if (identifiers.length > 10) {
throw new Error('Maximum of 10 identifiers allowed per request');
}
// Transform the array data to match API format
const formattedIdentifiers = identifiers.map((item: any) => ({
[item.identifierType]: item.identifierValue
}));
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
const res = await httpClient.sendRequest({
method: HttpMethod.POST,
url: 'https://api.village.do/v1/people/enrich/basic/bulk',
headers,
body: {
identifiers: formattedIdentifiers,
},
});
return res.body;
},
});

View File

@@ -0,0 +1,62 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const enrichPersonBasic = createAction({
name: 'enrichPersonBasic',
auth: villageAuth,
displayName: 'Enrich Profile',
description: 'Enrich a single person profile with basic professional information and work history',
props: {
village_id: Property.ShortText({
displayName: 'Village ID',
description: 'Village internal user ID',
required: false,
}),
linkedin_url: Property.ShortText({
displayName: 'LinkedIn URL',
description: 'LinkedIn profile URL',
required: false,
}),
email: Property.ShortText({
displayName: 'Email',
description: 'Email address',
required: false,
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { village_id, linkedin_url, email, user_identifier } = context.propsValue;
// At least one identifier is required
if (!village_id && !linkedin_url && !email) {
throw new Error('At least one identifier (village_id, linkedin_url, or email) is required');
}
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
// Build query parameters
const queryParams = new URLSearchParams();
if (village_id) queryParams.append('village_id', village_id);
if (linkedin_url) queryParams.append('linkedin_url', linkedin_url);
if (email) queryParams.append('email', email);
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.village.do/v1/people/enrich/basic?${queryParams.toString()}`,
headers,
});
return res.body;
},
});

View File

@@ -0,0 +1,44 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const getPersonPaths = createAction({
name: 'getPersonPaths',
auth: villageAuth,
displayName: 'Get Person Paths',
description: 'Returns connection paths and warmth score to a LinkedIn profile',
props: {
linkedin_url: Property.ShortText({
displayName: 'LinkedIn URL',
description: 'LinkedIn URL of the target person',
required: true,
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { linkedin_url, user_identifier } = context.propsValue;
// Encode the URL for use in the path
const encodedUrl = encodeURIComponent(linkedin_url);
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.village.do/v1/people/paths/${encodedUrl}`,
headers,
});
return res.body;
},
});

View File

@@ -0,0 +1,44 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { villageAuth } from '../../..';
export const sortPeople = createAction({
name: 'sortPeople',
auth: villageAuth,
displayName: 'Sort People',
description: 'Sort a list of LinkedIn profiles by relationship strength with the user',
props: {
people: Property.Array({
displayName: 'People URLs',
description: 'Array of LinkedIn URLs',
required: true,
}),
user_identifier: Property.ShortText({
displayName: 'User Identifier',
description: 'Specify the user making the request. This identifier should match the one you used when integrating the user with Village.',
required: false,
}),
},
async run(context) {
const { people, user_identifier } = context.propsValue;
const headers: Record<string, string> = {
'secret-key': context.auth.secret_text,
};
if (user_identifier) {
headers['user-identifier'] = user_identifier;
}
const res = await httpClient.sendRequest({
method: HttpMethod.POST,
url: 'https://api.village.do/v1/people/sort',
headers,
body: {
people,
},
});
return res.body;
},
});

View File

@@ -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"
}
]
}

View File

@@ -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"]
}