Add command menu items to people data labs (#22180)
- Adds command menu items to enrich people and companies - Improve readme ## After <img width="1039" height="584" alt="image" src="https://github.com/user-attachments/assets/9c6c3967-e905-4bf2-a3ef-307ae5bdca92" /> <img width="2560" height="332" alt="image" src="https://github.com/user-attachments/assets/4ab4ffb8-fe52-4612-99c7-282d0ffa2c94" /> <img width="2560" height="478" alt="image" src="https://github.com/user-attachments/assets/d496e21b-de18-4c52-acc7-6106afca0bb7" /> <img width="2560" height="452" alt="image" src="https://github.com/user-attachments/assets/caea4de3-5bee-4de7-a347-c5d8540fd179" /> <img width="2560" height="335" alt="image" src="https://github.com/user-attachments/assets/92bd17e3-f4b6-4fcb-84ae-d8ebc7ccce1e" /> <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/22180?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. -->
This commit is contained in:
@@ -1,77 +1,16 @@
|
||||
# People Data Labs enrichment
|
||||
# People Data Labs
|
||||
|
||||
Enriches **Person** and **Company** records with data from [People Data Labs](https://www.peopledatalabs.com/) (PDL): job and role details, location, company firmographics, funding, social profiles, and more.
|
||||
**Turn a name into a full profile — enrich any Person or Company in one click.**
|
||||
|
||||
## What it does
|
||||
## ✨ What you get
|
||||
|
||||
For each record you enrich, the app matches it against People Data Labs and writes the result back to Twenty. It fills a handful of Twenty standard fields, adds a rich set of dedicated PDL fields, and records the outcome of the last attempt.
|
||||
- **+30 rich data fields** per Person and Company — seniority, skills, firmographics, funding, socials & more
|
||||
- **Run it anywhere** — from the command menu, as a workflow step, or straight from AI chat
|
||||
- **Smart matching** — finds the right profile from a LinkedIn, email, or domain, and only writes confident matches
|
||||
|
||||
### Standard fields it can fill
|
||||
## 💳 Billing
|
||||
|
||||
- **Person:** name, emails, phone numbers, job title, and LinkedIn link. If the person has no company yet, the app also looks up (or creates) their current company and links it.
|
||||
- **Company:** name, domain name, LinkedIn link, and address.
|
||||
|
||||
Standard fields are only used to complete your existing data. By default they are filled **only when empty**, so your own values are never overwritten unless you explicitly choose to overwrite (see overwrite modes below). The existing person-to-company link is never overwritten.
|
||||
|
||||
### PDL fields it adds
|
||||
|
||||
The app adds around 30 dedicated PDL data fields on Person and 28 on Company (plus the bookkeeping fields listed below). These are always written on a match. Highlights:
|
||||
|
||||
- **Person:** seniority, job role, job title class and sub-role, industry, inferred salary, headline and summaries, years of experience, LinkedIn connections, birth date/year, skills, interests, education, work experience, certifications, languages, social profiles (GitHub, Twitter/X, Facebook), and a detailed PDL location.
|
||||
- **Company:** industry, company type, size range and employee count, founded year, funding stages and total funding (in USD), headline and summary, legal name, ticker and exchange, tags, alternative names and domains, NAICS/SIC classifications, employee counts by country, and social profiles.
|
||||
|
||||
Each object also gets bookkeeping fields: a PDL id, the raw PDL payload, the time of the last enrichment, the match likelihood (Person), and an enrichment status.
|
||||
|
||||
Two pre-built table views named **Enriched (PDL)** are added — one on People and one on Companies — to surface the enrichment fields.
|
||||
|
||||
## How matching works
|
||||
|
||||
The app matches records using the identifiers already on them, in priority order:
|
||||
|
||||
- **Person:** PDL id, LinkedIn URL, primary email, or full name paired with a company name. LinkedIn URL and email are treated as strong identifiers; a name on its own is not used.
|
||||
- **Company:** PDL id, website domain, LinkedIn URL, or company name. Website and LinkedIn are treated as strong identifiers.
|
||||
|
||||
When a record has only weak signals (for example a person's name plus company, or a company name alone), the app applies a stricter confidence threshold to reduce false positives.
|
||||
|
||||
If a record has no usable identifier, it is **skipped** (and never billed).
|
||||
|
||||
## Overwrite modes
|
||||
|
||||
When you trigger enrichment you can choose how matched data is written back:
|
||||
|
||||
- **Yes and don't overwrite** (default): writes PDL fields and fills standard fields only where they are currently empty.
|
||||
- **Yes and overwrite**: writes PDL fields and replaces existing standard field values.
|
||||
- **No**: returns the enriched data without modifying the record.
|
||||
|
||||
In all cases the dedicated PDL fields are written on a match.
|
||||
|
||||
## Enrichment status
|
||||
|
||||
The enrichment status field written to each record records the outcome of the last attempt, and can hold one of three values:
|
||||
|
||||
- **Matched** — a confident match was found and data was written.
|
||||
- **No Match** — PDL returned no confident match.
|
||||
- **Error** — the enrichment attempt failed.
|
||||
|
||||
Records that are skipped because they have no usable identifier are reported as skipped in the action's returned result and bulk summary, but no status is written back to the record (nothing is changed or billed for them).
|
||||
|
||||
## How to trigger it
|
||||
|
||||
- **Manual action:** run enrichment on a single record or on a selection of records from a People or Companies view.
|
||||
- **Workflow action:** add **Enrich Person**, **Enrich Company**, **Enrich People**, or **Enrich Companies** as a step in a workflow.
|
||||
- **AI tool:** the single-record **Enrich Person** and **Enrich Company** actions are also available to AI agents.
|
||||
|
||||
Bulk enrichment processes records in batches and reports how many were matched, not found, skipped, or errored.
|
||||
|
||||
## Billing
|
||||
|
||||
Only successful matches are billed, in Twenty credits — records that are not found, skipped, or that error are free.
|
||||
Pay only for matches, in Twenty credits — **not found and skipped records are free.**
|
||||
|
||||
- **Person match:** $0.336
|
||||
- **Company match:** $0.12
|
||||
|
||||
A match is billed based on PDL's response. In the rare case where a record matches but the write back to Twenty fails afterward, the match is still counted.
|
||||
|
||||
## Setup
|
||||
|
||||
Set the **`PDL_API_KEY`** server variable to your People Data Labs API key. This is required for the app to function.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "people-data-labs",
|
||||
"version": "0.1.0",
|
||||
"name": "@twentyhq/people-data-labs",
|
||||
"version": "1.0.0",
|
||||
"description": "People Data Labs enrichment app for Twenty",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -21,10 +21,6 @@
|
||||
"test:watch": "vitest",
|
||||
"test:unit": "vitest run --config vitest.unit.config.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"twenty-client-sdk": "2.13.0",
|
||||
"twenty-sdk": "2.13.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.7.2",
|
||||
"@types/react": "^18.2.0",
|
||||
@@ -32,8 +28,8 @@
|
||||
"oxlint": "^0.16.0",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"twenty-client-sdk": "^2.14.0",
|
||||
"twenty-sdk": "^2.14.0",
|
||||
"twenty-client-sdk": "^2.16.0",
|
||||
"twenty-sdk": "^2.16.0",
|
||||
"typescript": "^5.9.3",
|
||||
"vite-tsconfig-paths": "^4.2.1",
|
||||
"vitest": "^4.0.0"
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
import { defineCommandMenuItem, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define';
|
||||
import {
|
||||
PDL_COMMAND_MENU_ITEM_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
export default defineCommandMenuItem({
|
||||
universalIdentifier: PDL_COMMAND_MENU_ITEM_UNIVERSAL_IDENTIFIERS.enrichCompanies,
|
||||
availabilityObjectUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier,
|
||||
frontComponentUniversalIdentifier:
|
||||
PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS.enrichCompanies,
|
||||
label: 'Enrich companies',
|
||||
availabilityType: 'RECORD_SELECTION',
|
||||
});
|
||||
@@ -0,0 +1,14 @@
|
||||
import { defineCommandMenuItem, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define';
|
||||
import {
|
||||
PDL_COMMAND_MENU_ITEM_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
export default defineCommandMenuItem({
|
||||
universalIdentifier: PDL_COMMAND_MENU_ITEM_UNIVERSAL_IDENTIFIERS.enrichPeople,
|
||||
availabilityObjectUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
|
||||
frontComponentUniversalIdentifier:
|
||||
PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS.enrichPeople,
|
||||
label: 'Enrich people',
|
||||
availabilityType: 'RECORD_SELECTION',
|
||||
});
|
||||
+3
-3
@@ -18,9 +18,9 @@ import {
|
||||
APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
DEFAULT_ROLE_UNIVERSAL_IDENTIFIER,
|
||||
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS,
|
||||
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_VIEW_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_VIEW_UNIVERSAL_IDENTIFIERS
|
||||
} from 'src/constants/universal-identifiers';
|
||||
import { type SelectOptionMeta } from 'src/types/select-option-meta';
|
||||
import { normalizeEnumValue } from 'src/utils/normalize-enum-value';
|
||||
@@ -124,7 +124,7 @@ describe('universal-identifier registry', () => {
|
||||
const registryUuids = collectUuids([
|
||||
APPLICATION_UNIVERSAL_IDENTIFIER,
|
||||
DEFAULT_ROLE_UNIVERSAL_IDENTIFIER,
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS,
|
||||
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_VIEW_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
|
||||
import { PDL_LOGIC_FUNCTION_CONSTANTS } from 'src/constants/universal-identifiers';
|
||||
import { type EnrichmentWorkflowSeed } from 'src/types/enrichment-workflow-seed';
|
||||
|
||||
const ENRICHMENT_ICON = 'IconSparkles';
|
||||
@@ -11,7 +11,7 @@ export const ENRICHMENT_WORKFLOW_SEEDS: EnrichmentWorkflowSeed[] = [
|
||||
icon: ENRICHMENT_ICON,
|
||||
stepName: 'Enrich Companies',
|
||||
logicFunctionUniversalIdentifier:
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichCompanies,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS.enrichCompanies.universalIdentifier,
|
||||
logicFunctionInput: { records: '{{trigger.companies}}' },
|
||||
},
|
||||
{
|
||||
@@ -21,7 +21,7 @@ export const ENRICHMENT_WORKFLOW_SEEDS: EnrichmentWorkflowSeed[] = [
|
||||
icon: ENRICHMENT_ICON,
|
||||
stepName: 'Enrich People',
|
||||
logicFunctionUniversalIdentifier:
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichPeople,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS.enrichPeople.universalIdentifier,
|
||||
logicFunctionInput: { records: '{{trigger.people}}' },
|
||||
},
|
||||
];
|
||||
|
||||
+16
-6
@@ -4,12 +4,12 @@ export const APPLICATION_UNIVERSAL_IDENTIFIER =
|
||||
export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER =
|
||||
'abb2aa9f-8e9c-4e8b-a336-f864ee78b7cd';
|
||||
|
||||
export const PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS = {
|
||||
enrichPeople: '65356a82-6734-4fc9-8172-7d30ed1b7859',
|
||||
enrichPerson: '864ad69b-ff9f-4635-9aed-16fd0c2ad210',
|
||||
enrichCompanies: 'c769fb49-d495-469f-a58f-1a69ab90ec24',
|
||||
enrichCompany: '560bbfd9-1107-4f7f-8398-ea835e7e5bbe',
|
||||
postInstall: '9de46f15-05ec-4314-84c1-b9919b545269',
|
||||
export const PDL_LOGIC_FUNCTION_CONSTANTS = {
|
||||
enrichPeople: { universalIdentifier: '65356a82-6734-4fc9-8172-7d30ed1b7859', path: '/people-data-labs/enrich-people' },
|
||||
enrichPerson: { universalIdentifier:'864ad69b-ff9f-4635-9aed-16fd0c2ad210', path: '/people-data-labs/enrich-person' },
|
||||
enrichCompanies: { universalIdentifier:'c769fb49-d495-469f-a58f-1a69ab90ec24', path: '/people-data-labs/enrich-companies' },
|
||||
enrichCompany: { universalIdentifier:'560bbfd9-1107-4f7f-8398-ea835e7e5bbe', path: '/people-data-labs/enrich-company' },
|
||||
postInstall: { universalIdentifier:'9de46f15-05ec-4314-84c1-b9919b545269'},
|
||||
} as const;
|
||||
|
||||
export const PDL_FIELD_UNIVERSAL_IDENTIFIERS = {
|
||||
@@ -91,6 +91,16 @@ export const PDL_VIEW_UNIVERSAL_IDENTIFIERS = {
|
||||
enrichedPeople: '2866db8e-086a-4b2e-8b89-a583c4181936',
|
||||
} as const;
|
||||
|
||||
export const PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS = {
|
||||
enrichCompanies: '1061d505-6748-48c1-96e9-5dbf6fef6561',
|
||||
enrichPeople: '3f9af38b-be42-4dc8-89cc-e37566d3aecb',
|
||||
}
|
||||
|
||||
export const PDL_COMMAND_MENU_ITEM_UNIVERSAL_IDENTIFIERS = {
|
||||
enrichCompanies: 'df33eaa8-51eb-40c4-8b6c-aceeea4d8fcc',
|
||||
enrichPeople: '86b3427b-9e86-4077-ba7b-07609b2d095b',
|
||||
}
|
||||
|
||||
export const PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS = {
|
||||
personEnrichmentStatus: {
|
||||
matched: '59f2df76-5798-42e2-b647-5091b08a43f1',
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk/define';
|
||||
import { Command, useSelectedRecordIds } from 'twenty-sdk/front-component';
|
||||
import {
|
||||
PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS
|
||||
} from 'src/constants/universal-identifiers';
|
||||
import { execute } from 'src/front-components/utils/call-enrich-logic-function.utils';
|
||||
|
||||
|
||||
const Enrich = () => {
|
||||
const recordIds = useSelectedRecordIds();
|
||||
return <Command execute={() => execute({ path: PDL_LOGIC_FUNCTION_CONSTANTS.enrichCompanies.path, recordIds })} />;
|
||||
};
|
||||
|
||||
export default defineFrontComponent({
|
||||
universalIdentifier: PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS.enrichCompanies,
|
||||
name: 'enrich-companies-effect',
|
||||
description: 'Enrich companies effect',
|
||||
component: Enrich,
|
||||
isHeadless: true
|
||||
});
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import { defineFrontComponent } from 'twenty-sdk/define';
|
||||
import { Command, useSelectedRecordIds } from 'twenty-sdk/front-component';
|
||||
import {
|
||||
PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS
|
||||
} from 'src/constants/universal-identifiers';
|
||||
import { execute } from 'src/front-components/utils/call-enrich-logic-function.utils';
|
||||
|
||||
|
||||
const Enrich = () => {
|
||||
const recordIds = useSelectedRecordIds();
|
||||
return <Command execute={() => execute({ path: PDL_LOGIC_FUNCTION_CONSTANTS.enrichPeople.path, recordIds })} />;
|
||||
};
|
||||
|
||||
export default defineFrontComponent({
|
||||
universalIdentifier: PDL_FRONT_COMPONENT_UNIVERSAL_IDENTIFIERS.enrichPeople,
|
||||
name: 'enrich-people-effect',
|
||||
description: 'Enrich people effect',
|
||||
component: Enrich,
|
||||
isHeadless: true
|
||||
});
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import { RestApiClient } from 'twenty-client-sdk/rest';
|
||||
import { enqueueSnackbar } from 'twenty-sdk/front-component';
|
||||
|
||||
export const execute = async ({path, recordIds}:{ path: string; recordIds: string[] }) => {
|
||||
try {
|
||||
const client = new RestApiClient();
|
||||
|
||||
|
||||
await client.post(`/s${path}`, { recordIds });
|
||||
|
||||
await enqueueSnackbar({
|
||||
message: `Enriched ${recordIds.length > 1 ? 'records.' : 'record.'}`,
|
||||
variant: 'success',
|
||||
});
|
||||
} catch {
|
||||
await enqueueSnackbar({
|
||||
message: 'Records enrichment failed',
|
||||
variant: 'error',
|
||||
});
|
||||
}
|
||||
};
|
||||
+11
-4
@@ -1,18 +1,25 @@
|
||||
import { defineLogicFunction } from 'twenty-sdk/define';
|
||||
|
||||
import { UPDATE_FIELDS_OPTION_VALUES } from 'src/constants/update-fields-option-values';
|
||||
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
|
||||
import { PDL_LOGIC_FUNCTION_CONSTANTS } from 'src/constants/universal-identifiers';
|
||||
import { enrichCompaniesCore } from 'src/logic-functions/handlers/enrich-companies';
|
||||
import { type BulkEnrichInput } from 'src/types/bulk-enrich-input';
|
||||
import { type EnrichInput, toBulkEnrichInput } from 'src/logic-functions/utils/to-bulk-enrich-input';
|
||||
|
||||
const handler = (input: BulkEnrichInput) => enrichCompaniesCore({ input });
|
||||
const handler = (input: EnrichInput) => {
|
||||
return enrichCompaniesCore({ input: toBulkEnrichInput(input) });
|
||||
}
|
||||
|
||||
export default defineLogicFunction({
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichCompanies,
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_CONSTANTS.enrichCompanies.universalIdentifier,
|
||||
name: 'enrich-companies',
|
||||
description: 'Enrich one or more Company records with People Data Labs data',
|
||||
timeoutSeconds: 300,
|
||||
handler,
|
||||
httpRouteTriggerSettings: {
|
||||
path: PDL_LOGIC_FUNCTION_CONSTANTS.enrichCompanies.path,
|
||||
httpMethod: 'POST',
|
||||
isAuthRequired: true
|
||||
},
|
||||
workflowActionTriggerSettings: {
|
||||
label: 'Enrich Companies',
|
||||
icon: 'IconSparkles',
|
||||
|
||||
+2
-2
@@ -1,14 +1,14 @@
|
||||
import { defineLogicFunction } from 'twenty-sdk/define';
|
||||
|
||||
import { UPDATE_FIELDS_OPTION_VALUES } from 'src/constants/update-fields-option-values';
|
||||
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
|
||||
import { PDL_LOGIC_FUNCTION_CONSTANTS } from 'src/constants/universal-identifiers';
|
||||
import { enrichCompanyCore } from 'src/logic-functions/handlers/enrich-company';
|
||||
import { type SingleEnrichInput } from 'src/types/single-enrich-input';
|
||||
|
||||
const handler = (input: SingleEnrichInput) => enrichCompanyCore({ input });
|
||||
|
||||
export default defineLogicFunction({
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichCompany,
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_CONSTANTS.enrichCompany.universalIdentifier,
|
||||
name: 'enrich-company',
|
||||
description:
|
||||
'Enrich a single Company record with People Data Labs data (industry, size, funding, location, etc.) given its record id.',
|
||||
|
||||
+11
-4
@@ -1,18 +1,25 @@
|
||||
import { defineLogicFunction } from 'twenty-sdk/define';
|
||||
|
||||
import { UPDATE_FIELDS_OPTION_VALUES } from 'src/constants/update-fields-option-values';
|
||||
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
|
||||
import { PDL_LOGIC_FUNCTION_CONSTANTS } from 'src/constants/universal-identifiers';
|
||||
import { enrichPeopleCore } from 'src/logic-functions/handlers/enrich-people';
|
||||
import { type BulkEnrichInput } from 'src/types/bulk-enrich-input';
|
||||
import { type EnrichInput, toBulkEnrichInput } from 'src/logic-functions/utils/to-bulk-enrich-input';
|
||||
|
||||
const handler = (input: BulkEnrichInput) => enrichPeopleCore({ input });
|
||||
const handler = (input: EnrichInput) => {
|
||||
return enrichPeopleCore({ input: toBulkEnrichInput(input) });
|
||||
};
|
||||
|
||||
export default defineLogicFunction({
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichPeople,
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_CONSTANTS.enrichPeople.universalIdentifier,
|
||||
name: 'enrich-people',
|
||||
description: 'Enrich one or more Person records with People Data Labs data',
|
||||
timeoutSeconds: 300,
|
||||
handler,
|
||||
httpRouteTriggerSettings: {
|
||||
path: PDL_LOGIC_FUNCTION_CONSTANTS.enrichPeople.path,
|
||||
httpMethod: 'POST',
|
||||
isAuthRequired: true
|
||||
},
|
||||
workflowActionTriggerSettings: {
|
||||
label: 'Enrich People',
|
||||
icon: 'IconSparkles',
|
||||
|
||||
+2
-2
@@ -1,14 +1,14 @@
|
||||
import { defineLogicFunction } from 'twenty-sdk/define';
|
||||
|
||||
import { UPDATE_FIELDS_OPTION_VALUES } from 'src/constants/update-fields-option-values';
|
||||
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
|
||||
import { PDL_LOGIC_FUNCTION_CONSTANTS } from 'src/constants/universal-identifiers';
|
||||
import { enrichPersonCore } from 'src/logic-functions/handlers/enrich-person';
|
||||
import { type SingleEnrichInput } from 'src/types/single-enrich-input';
|
||||
|
||||
const handler = (input: SingleEnrichInput) => enrichPersonCore({ input });
|
||||
|
||||
export default defineLogicFunction({
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichPerson,
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_CONSTANTS.enrichPerson.universalIdentifier,
|
||||
name: 'enrich-person',
|
||||
description:
|
||||
'Enrich a single Person record with People Data Labs data (job, location, social profiles, etc.) given its record id.',
|
||||
|
||||
+6
-6
@@ -1,7 +1,7 @@
|
||||
import { type MetadataApiClient } from 'twenty-client-sdk/metadata';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
|
||||
import { PDL_LOGIC_FUNCTION_CONSTANTS } from 'src/constants/universal-identifiers';
|
||||
import { createCoreApiClientMock } from 'src/logic-functions/__mocks__/create-core-api-client-mock';
|
||||
import { postInstallCore } from 'src/logic-functions/handlers/post-install';
|
||||
|
||||
@@ -44,12 +44,12 @@ describe('postInstallCore', () => {
|
||||
{
|
||||
id: 'company-fn',
|
||||
universalIdentifier:
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichCompanies,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS.enrichCompanies.universalIdentifier,
|
||||
},
|
||||
{
|
||||
id: 'person-fn',
|
||||
universalIdentifier:
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichPeople,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS.enrichPeople.universalIdentifier,
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -74,7 +74,7 @@ describe('postInstallCore', () => {
|
||||
{
|
||||
id: 'company-fn',
|
||||
universalIdentifier:
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichCompanies,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS.enrichCompanies.universalIdentifier,
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -97,12 +97,12 @@ describe('postInstallCore', () => {
|
||||
{
|
||||
id: 'company-fn',
|
||||
universalIdentifier:
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichCompanies,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS.enrichCompanies.universalIdentifier,
|
||||
},
|
||||
{
|
||||
id: 'person-fn',
|
||||
universalIdentifier:
|
||||
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichPeople,
|
||||
PDL_LOGIC_FUNCTION_CONSTANTS.enrichPeople.universalIdentifier,
|
||||
},
|
||||
]);
|
||||
|
||||
|
||||
+2
-2
@@ -1,13 +1,13 @@
|
||||
import { definePostInstallLogicFunction } from 'twenty-sdk/define';
|
||||
|
||||
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
|
||||
import { PDL_LOGIC_FUNCTION_CONSTANTS } from 'src/constants/universal-identifiers';
|
||||
|
||||
const handler = async () => {
|
||||
return { seededWorkflows: [] };
|
||||
};
|
||||
|
||||
export default definePostInstallLogicFunction({
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.postInstall,
|
||||
universalIdentifier: PDL_LOGIC_FUNCTION_CONSTANTS.postInstall.universalIdentifier,
|
||||
name: 'post-install',
|
||||
description:
|
||||
'Post-install hook for the People Data Labs app (workflow seeding is not currently wired up).',
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
import { isObject } from '@sniptt/guards';
|
||||
import { type RoutePayload } from 'twenty-sdk/define';
|
||||
|
||||
import { type BulkEnrichInput } from 'src/types/bulk-enrich-input';
|
||||
|
||||
type EnrichRouteBody = { recordIds?: string[] };
|
||||
|
||||
export type EnrichInput = BulkEnrichInput | RoutePayload<EnrichRouteBody>;
|
||||
|
||||
const isRoutePayload = (input: EnrichInput): input is RoutePayload<EnrichRouteBody> =>
|
||||
isObject(input) && 'requestContext' in input;
|
||||
|
||||
export const toBulkEnrichInput = (input: EnrichInput): BulkEnrichInput =>
|
||||
isRoutePayload(input) ? { records: input.body?.recordIds ?? [] } : input;
|
||||
@@ -34,6 +34,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@emnapi/runtime@npm:^1.7.0":
|
||||
version: 1.11.1
|
||||
resolution: "@emnapi/runtime@npm:1.11.1"
|
||||
dependencies:
|
||||
tslib: "npm:^2.4.0"
|
||||
checksum: 10c0/04332fb62076afc440aa23316c04bec42f584ca8b074e5507d08e2b33a47cbe0493b1aadb8f3c1057b64ae1e17f5bde1a7bc37f7facc9d0bc25c18197cbd366f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@emnapi/wasi-threads@npm:1.2.1":
|
||||
version: 1.2.1
|
||||
resolution: "@emnapi/wasi-threads@npm:1.2.1"
|
||||
@@ -245,6 +254,233 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/colour@npm:^1.0.0":
|
||||
version: 1.1.0
|
||||
resolution: "@img/colour@npm:1.1.0"
|
||||
checksum: 10c0/2ebea2c0bbaee73b99badcefa04e1e71d83f36e5369337d3121dca841f4569533c4e2faddda6d62dd247f0d5cca143711f9446c59bcce81e427ba433a7a94a17
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-darwin-arm64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-darwin-arm64@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-darwin-arm64": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-darwin-arm64":
|
||||
optional: true
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-darwin-x64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-darwin-x64@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-darwin-x64": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-darwin-x64":
|
||||
optional: true
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-darwin-arm64@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-darwin-arm64@npm:1.2.4"
|
||||
conditions: os=darwin & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-darwin-x64@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-darwin-x64@npm:1.2.4"
|
||||
conditions: os=darwin & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-linux-arm64@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-linux-arm64@npm:1.2.4"
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-linux-arm@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-linux-arm@npm:1.2.4"
|
||||
conditions: os=linux & cpu=arm & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-linux-ppc64@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-linux-ppc64@npm:1.2.4"
|
||||
conditions: os=linux & cpu=ppc64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-linux-riscv64@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-linux-riscv64@npm:1.2.4"
|
||||
conditions: os=linux & cpu=riscv64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-linux-s390x@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-linux-s390x@npm:1.2.4"
|
||||
conditions: os=linux & cpu=s390x & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-linux-x64@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-linux-x64@npm:1.2.4"
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-linuxmusl-arm64@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.2.4"
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-libvips-linuxmusl-x64@npm:1.2.4":
|
||||
version: 1.2.4
|
||||
resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.2.4"
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-linux-arm64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-linux-arm64@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-linux-arm64": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-linux-arm64":
|
||||
optional: true
|
||||
conditions: os=linux & cpu=arm64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-linux-arm@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-linux-arm@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-linux-arm": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-linux-arm":
|
||||
optional: true
|
||||
conditions: os=linux & cpu=arm & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-linux-ppc64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-linux-ppc64@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-linux-ppc64": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-linux-ppc64":
|
||||
optional: true
|
||||
conditions: os=linux & cpu=ppc64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-linux-riscv64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-linux-riscv64@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-linux-riscv64": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-linux-riscv64":
|
||||
optional: true
|
||||
conditions: os=linux & cpu=riscv64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-linux-s390x@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-linux-s390x@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-linux-s390x": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-linux-s390x":
|
||||
optional: true
|
||||
conditions: os=linux & cpu=s390x & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-linux-x64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-linux-x64@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-linux-x64": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-linux-x64":
|
||||
optional: true
|
||||
conditions: os=linux & cpu=x64 & libc=glibc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-linuxmusl-arm64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-linuxmusl-arm64@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-linuxmusl-arm64": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-linuxmusl-arm64":
|
||||
optional: true
|
||||
conditions: os=linux & cpu=arm64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-linuxmusl-x64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-linuxmusl-x64@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/sharp-libvips-linuxmusl-x64": "npm:1.2.4"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-libvips-linuxmusl-x64":
|
||||
optional: true
|
||||
conditions: os=linux & cpu=x64 & libc=musl
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-wasm32@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-wasm32@npm:0.34.5"
|
||||
dependencies:
|
||||
"@emnapi/runtime": "npm:^1.7.0"
|
||||
conditions: cpu=wasm32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-win32-arm64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-win32-arm64@npm:0.34.5"
|
||||
conditions: os=win32 & cpu=arm64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-win32-ia32@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-win32-ia32@npm:0.34.5"
|
||||
conditions: os=win32 & cpu=ia32
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@img/sharp-win32-x64@npm:0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "@img/sharp-win32-x64@npm:0.34.5"
|
||||
conditions: os=win32 & cpu=x64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@inquirer/ansi@npm:^2.0.7":
|
||||
version: 2.0.7
|
||||
resolution: "@inquirer/ansi@npm:2.0.7"
|
||||
@@ -707,6 +943,24 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@twentyhq/people-data-labs@workspace:.":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@twentyhq/people-data-labs@workspace:."
|
||||
dependencies:
|
||||
"@types/node": "npm:^24.7.2"
|
||||
"@types/react": "npm:^18.2.0"
|
||||
"@typescript/native-preview": "npm:^7.0.0-dev.20260116.1"
|
||||
oxlint: "npm:^0.16.0"
|
||||
react: "npm:^18.2.0"
|
||||
react-dom: "npm:^18.2.0"
|
||||
twenty-client-sdk: "npm:^2.16.0"
|
||||
twenty-sdk: "npm:^2.16.0"
|
||||
typescript: "npm:^5.9.3"
|
||||
vite-tsconfig-paths: "npm:^4.2.1"
|
||||
vitest: "npm:^4.0.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@tybys/wasm-util@npm:^0.10.2":
|
||||
version: 0.10.2
|
||||
resolution: "@tybys/wasm-util@npm:0.10.2"
|
||||
@@ -741,11 +995,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:*":
|
||||
version: 25.9.1
|
||||
resolution: "@types/node@npm:25.9.1"
|
||||
version: 26.0.0
|
||||
resolution: "@types/node@npm:26.0.0"
|
||||
dependencies:
|
||||
undici-types: "npm:>=7.24.0 <7.24.7"
|
||||
checksum: 10c0/9a04682842bebbcf21a1779dfeab9aa733d7bd7bbc0a0edb641ab3a9a3d43eac543225acf669c334f458f1956443ebc072bc3c72840c543b8b356cab5c82d456
|
||||
undici-types: "npm:~8.3.0"
|
||||
checksum: 10c0/f36e21634fd8e8ded162ca486508bd8bb229d398a8d5541f6d8c1255968d4464e53327a77f403b216ef98e3b6f6956882eef83e4857d4bc2be9569dd55d37aae
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1036,14 +1290,14 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"axios@npm:^1.16.0":
|
||||
version: 1.17.0
|
||||
resolution: "axios@npm:1.17.0"
|
||||
version: 1.18.0
|
||||
resolution: "axios@npm:1.18.0"
|
||||
dependencies:
|
||||
follow-redirects: "npm:^1.16.0"
|
||||
form-data: "npm:^4.0.5"
|
||||
https-proxy-agent: "npm:^5.0.1"
|
||||
proxy-from-env: "npm:^2.1.0"
|
||||
checksum: 10c0/c4fa19ff3a3a63bde48beec03ad816b133b9a6385cccffffe172577ab18c6a70e299280d57f12c80c867fe25df41f92cb91d3a8258708a6d2be3e9e085f92650
|
||||
checksum: 10c0/f88aae13fd9dd395dea3053c7299178fee62f436f20424a1d6d79ec11ffb7656ba664b4630defbadab2c387b6ea07e29afb9f28b26d8e0e49d45be766983290d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1079,9 +1333,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"chardet@npm:^2.1.1":
|
||||
version: 2.1.1
|
||||
resolution: "chardet@npm:2.1.1"
|
||||
checksum: 10c0/d8391dd412338442b3de0d3a488aa9327f8bcf74b62b8723d6bd0b85c4084d50b731320e0a7c710edb1d44de75969995d2784b80e4c13b004a6c7a0db4c6e793
|
||||
version: 2.2.0
|
||||
resolution: "chardet@npm:2.2.0"
|
||||
checksum: 10c0/8d43a1dd3ce535aa070d04139fae62f879b4388394eb1d857364ce416675a1f0f63974fba8208e9cd11b49e1a6da3e65ea6393d0fc654a8c4217c0d74c16b1b4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1199,7 +1453,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"detect-libc@npm:^2.0.3":
|
||||
"detect-libc@npm:^2.0.3, detect-libc@npm:^2.1.2":
|
||||
version: 2.1.2
|
||||
resolution: "detect-libc@npm:2.1.2"
|
||||
checksum: 10c0/acc675c29a5649fa1fb6e255f993b8ee829e510b6b56b0910666949c80c364738833417d0edb5f90e4e46be17228b0f2b66a010513984e18b15deeeac49369c4
|
||||
@@ -1281,8 +1535,8 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"es-toolkit@npm:^1.39.10":
|
||||
version: 1.47.0
|
||||
resolution: "es-toolkit@npm:1.47.0"
|
||||
version: 1.48.1
|
||||
resolution: "es-toolkit@npm:1.48.1"
|
||||
dependenciesMeta:
|
||||
"@trivago/prettier-plugin-sort-imports@4.3.0":
|
||||
unplugged: true
|
||||
@@ -1290,7 +1544,7 @@ __metadata:
|
||||
unplugged: true
|
||||
vitepress-plugin-sandpack@1.1.4:
|
||||
unplugged: true
|
||||
checksum: 10c0/6edc9709fccc409fa4adddd318971d8a18335de9225f2dc99021aacba44fe66a2437a831923589c643865caab261a087bd974338294a60bb5a74932caa102901
|
||||
checksum: 10c0/29bfccb8aaf088f27ea91b5bf6448b8a46ef5d809139ad9335bea6919d0bc3aadc3206c957ab6c72d65864906fd75cf9ab41fbd936aaf69e58c6259d2821187d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1589,9 +1843,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"graphql@npm:^16.8.1":
|
||||
version: 16.14.0
|
||||
resolution: "graphql@npm:16.14.0"
|
||||
checksum: 10c0/baaa368fcfeb7bf2cdf94b9f31bf916e97eaa9e7e82148a7046f31cbd49b760b38190f22393b024cbdd9ca0f4f46287515de0136b6a0cc164074b36ad7b50618
|
||||
version: 16.14.2
|
||||
resolution: "graphql@npm:16.14.2"
|
||||
checksum: 10c0/a95a96961eaff55cc9fe9d31fae6f33499ac988b972d07ea5085024cb1333f515b902f376e7393a5489aa82200a8aff3eb96580e4d1b69d702ed19b6eb1ce97a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2090,24 +2344,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"people-data-labs@workspace:.":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "people-data-labs@workspace:."
|
||||
dependencies:
|
||||
"@types/node": "npm:^24.7.2"
|
||||
"@types/react": "npm:^18.2.0"
|
||||
"@typescript/native-preview": "npm:^7.0.0-dev.20260116.1"
|
||||
oxlint: "npm:^0.16.0"
|
||||
react: "npm:^18.2.0"
|
||||
react-dom: "npm:^18.2.0"
|
||||
twenty-client-sdk: "npm:^2.14.0"
|
||||
twenty-sdk: "npm:^2.14.0"
|
||||
typescript: "npm:^5.9.3"
|
||||
vite-tsconfig-paths: "npm:^4.2.1"
|
||||
vitest: "npm:^4.0.0"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"picocolors@npm:^1.1.1":
|
||||
version: 1.1.1
|
||||
resolution: "picocolors@npm:1.1.1"
|
||||
@@ -2318,6 +2554,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:7.6.3":
|
||||
version: 7.6.3
|
||||
resolution: "semver@npm:7.6.3"
|
||||
bin:
|
||||
semver: bin/semver.js
|
||||
checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:^7.3.5":
|
||||
version: 7.8.1
|
||||
resolution: "semver@npm:7.8.1"
|
||||
@@ -2327,6 +2572,99 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:^7.7.3":
|
||||
version: 7.8.5
|
||||
resolution: "semver@npm:7.8.5"
|
||||
bin:
|
||||
semver: bin/semver.js
|
||||
checksum: 10c0/b1f3127a5be8125a94f37188b361c212466c292c6910adce3ec106cff5dc211ccaedc4739c11bb70fda59d6fc1f040a9bca289f4e093451521a2372e5231fe0c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sharp@npm:^0.34.5":
|
||||
version: 0.34.5
|
||||
resolution: "sharp@npm:0.34.5"
|
||||
dependencies:
|
||||
"@img/colour": "npm:^1.0.0"
|
||||
"@img/sharp-darwin-arm64": "npm:0.34.5"
|
||||
"@img/sharp-darwin-x64": "npm:0.34.5"
|
||||
"@img/sharp-libvips-darwin-arm64": "npm:1.2.4"
|
||||
"@img/sharp-libvips-darwin-x64": "npm:1.2.4"
|
||||
"@img/sharp-libvips-linux-arm": "npm:1.2.4"
|
||||
"@img/sharp-libvips-linux-arm64": "npm:1.2.4"
|
||||
"@img/sharp-libvips-linux-ppc64": "npm:1.2.4"
|
||||
"@img/sharp-libvips-linux-riscv64": "npm:1.2.4"
|
||||
"@img/sharp-libvips-linux-s390x": "npm:1.2.4"
|
||||
"@img/sharp-libvips-linux-x64": "npm:1.2.4"
|
||||
"@img/sharp-libvips-linuxmusl-arm64": "npm:1.2.4"
|
||||
"@img/sharp-libvips-linuxmusl-x64": "npm:1.2.4"
|
||||
"@img/sharp-linux-arm": "npm:0.34.5"
|
||||
"@img/sharp-linux-arm64": "npm:0.34.5"
|
||||
"@img/sharp-linux-ppc64": "npm:0.34.5"
|
||||
"@img/sharp-linux-riscv64": "npm:0.34.5"
|
||||
"@img/sharp-linux-s390x": "npm:0.34.5"
|
||||
"@img/sharp-linux-x64": "npm:0.34.5"
|
||||
"@img/sharp-linuxmusl-arm64": "npm:0.34.5"
|
||||
"@img/sharp-linuxmusl-x64": "npm:0.34.5"
|
||||
"@img/sharp-wasm32": "npm:0.34.5"
|
||||
"@img/sharp-win32-arm64": "npm:0.34.5"
|
||||
"@img/sharp-win32-ia32": "npm:0.34.5"
|
||||
"@img/sharp-win32-x64": "npm:0.34.5"
|
||||
detect-libc: "npm:^2.1.2"
|
||||
semver: "npm:^7.7.3"
|
||||
dependenciesMeta:
|
||||
"@img/sharp-darwin-arm64":
|
||||
optional: true
|
||||
"@img/sharp-darwin-x64":
|
||||
optional: true
|
||||
"@img/sharp-libvips-darwin-arm64":
|
||||
optional: true
|
||||
"@img/sharp-libvips-darwin-x64":
|
||||
optional: true
|
||||
"@img/sharp-libvips-linux-arm":
|
||||
optional: true
|
||||
"@img/sharp-libvips-linux-arm64":
|
||||
optional: true
|
||||
"@img/sharp-libvips-linux-ppc64":
|
||||
optional: true
|
||||
"@img/sharp-libvips-linux-riscv64":
|
||||
optional: true
|
||||
"@img/sharp-libvips-linux-s390x":
|
||||
optional: true
|
||||
"@img/sharp-libvips-linux-x64":
|
||||
optional: true
|
||||
"@img/sharp-libvips-linuxmusl-arm64":
|
||||
optional: true
|
||||
"@img/sharp-libvips-linuxmusl-x64":
|
||||
optional: true
|
||||
"@img/sharp-linux-arm":
|
||||
optional: true
|
||||
"@img/sharp-linux-arm64":
|
||||
optional: true
|
||||
"@img/sharp-linux-ppc64":
|
||||
optional: true
|
||||
"@img/sharp-linux-riscv64":
|
||||
optional: true
|
||||
"@img/sharp-linux-s390x":
|
||||
optional: true
|
||||
"@img/sharp-linux-x64":
|
||||
optional: true
|
||||
"@img/sharp-linuxmusl-arm64":
|
||||
optional: true
|
||||
"@img/sharp-linuxmusl-x64":
|
||||
optional: true
|
||||
"@img/sharp-wasm32":
|
||||
optional: true
|
||||
"@img/sharp-win32-arm64":
|
||||
optional: true
|
||||
"@img/sharp-win32-ia32":
|
||||
optional: true
|
||||
"@img/sharp-win32-x64":
|
||||
optional: true
|
||||
checksum: 10c0/fd79e29df0597a7d5704b8461c51f944ead91a5243691697be6e8243b966402beda53ddc6f0a53b96ea3cb8221f0b244aa588114d3ebf8734fb4aefd41ab802f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"siginfo@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "siginfo@npm:2.0.0"
|
||||
@@ -2533,22 +2871,22 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"twenty-client-sdk@npm:2.14.0, twenty-client-sdk@npm:^2.14.0":
|
||||
version: 2.14.0
|
||||
resolution: "twenty-client-sdk@npm:2.14.0"
|
||||
"twenty-client-sdk@npm:2.16.0, twenty-client-sdk@npm:^2.16.0":
|
||||
version: 2.16.0
|
||||
resolution: "twenty-client-sdk@npm:2.16.0"
|
||||
dependencies:
|
||||
"@genql/runtime": "npm:^2.10.0"
|
||||
esbuild: "npm:^0.28.1"
|
||||
graphql: "npm:^16.8.1"
|
||||
lodash: "npm:^4.17.21"
|
||||
prettier: "npm:^3.8.3"
|
||||
checksum: 10c0/eb222a726e21fc98f3a624f9acac7d47f0c769b989911889036665dac7c7c88698ec99beb844bf51a42e1696ea0a067bae8cf47fd751965af52a3720835242f0
|
||||
checksum: 10c0/f990220bec103a04ca50dc8bb38c295e94a4e51b27a3188f4a0ae515c204b76bf87f5591739eb705b97e7aa5a9aa6a215d0d4da05297e50a0392801ea64a2234
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"twenty-sdk@npm:^2.14.0":
|
||||
version: 2.14.0
|
||||
resolution: "twenty-sdk@npm:2.14.0"
|
||||
"twenty-sdk@npm:^2.16.0":
|
||||
version: 2.16.0
|
||||
resolution: "twenty-sdk@npm:2.16.0"
|
||||
dependencies:
|
||||
"@sniptt/guards": "npm:^0.2.0"
|
||||
axios: "npm:^1.16.0"
|
||||
@@ -2564,22 +2902,24 @@ __metadata:
|
||||
preact: "npm:^10.28.3"
|
||||
react: "npm:^19.2.0"
|
||||
react-dom: "npm:^19.2.0"
|
||||
semver: "npm:7.6.3"
|
||||
sharp: "npm:^0.34.5"
|
||||
tinyglobby: "npm:^0.2.15"
|
||||
twenty-client-sdk: "npm:2.14.0"
|
||||
twenty-client-sdk: "npm:2.16.0"
|
||||
typescript: "npm:^5.9.3"
|
||||
uuid: "npm:^13.0.2"
|
||||
bin:
|
||||
twenty: dist/cli.cjs
|
||||
checksum: 10c0/c4211772f8dd2ba81074a74be5f616c4c264d6bf8a174c5724be6d1c9a8cb3ca68a2674653bb58c059dae4bf1b0f43f91991e73d6a01395807206f0ac44afb08
|
||||
checksum: 10c0/528f275f8bda022061a52c3563af514d2257f291fc5a232be90ca6011c50ff18a250984b6c68fc8e4c690644c92e1ccb0b89c511b8a19d832455c8860f2751a8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"type-fest@npm:^5.4.1":
|
||||
version: 5.6.0
|
||||
resolution: "type-fest@npm:5.6.0"
|
||||
version: 5.7.0
|
||||
resolution: "type-fest@npm:5.7.0"
|
||||
dependencies:
|
||||
tagged-tag: "npm:^1.0.0"
|
||||
checksum: 10c0/5468a8ffda7f3904e6f7bbd8069eb8b6dd4bd9156e206df7a01d09a73e28cd1afedf74ead9d0fc12841c8c90074194859feca240511c50800962fde1bd9ddcbc
|
||||
checksum: 10c0/f71ed17b753649421e419db8cc2e140f930333a1467b1d9cca2e0e4052900fd442f2360bae73f3a6bf9340d949ac46d9a1598c709b4c8089272e7624df9c8716
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -2603,13 +2943,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici-types@npm:>=7.24.0 <7.24.7":
|
||||
version: 7.24.6
|
||||
resolution: "undici-types@npm:7.24.6"
|
||||
checksum: 10c0/d9cd8befb643ac904615c280a095ba4240531f6bb4a5e75a22a7483630ca8d3f1016d2ab6ace6ceda1f63b3a2db2fe037fafe121d6917a0187573aa548ff78ca
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici-types@npm:~7.16.0":
|
||||
version: 7.16.0
|
||||
resolution: "undici-types@npm:7.16.0"
|
||||
@@ -2617,6 +2950,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici-types@npm:~8.3.0":
|
||||
version: 8.3.0
|
||||
resolution: "undici-types@npm:8.3.0"
|
||||
checksum: 10c0/c8aa7e2fbebfce519654dafadc0ece59be888d2ccaf180fb4495da875e7b536d2456345c384069c7e6f3e9c9ab7435f074957da306f142343eee86ff8048855a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"undici@npm:^6.25.0":
|
||||
version: 6.27.0
|
||||
resolution: "undici@npm:6.27.0"
|
||||
|
||||
Reference in New Issue
Block a user