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:
martmull
2026-06-25 17:12:30 +02:00
committed by GitHub
parent aabffc427a
commit 1cf1c33899
18 changed files with 567 additions and 163 deletions
@@ -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"
@@ -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',
});
@@ -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,
@@ -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}}' },
},
];
@@ -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',
@@ -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
});
@@ -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
});
@@ -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',
});
}
};
@@ -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',
@@ -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.',
@@ -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',
@@ -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.',
@@ -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,
},
]);
@@ -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).',
@@ -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"