From 2a3c759928772acb54d29177488a4c0f4c60c682 Mon Sep 17 00:00:00 2001 From: Weiko Date: Fri, 24 Apr 2026 15:50:08 +0200 Subject: [PATCH] Removing community apps in favor of npm-distributed apps (#20029) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Context With the registry pattern around `Twenty Applications` and the upcoming marketplace, app distribution can be decoupled from the core repo. Pulling apps from npm instead of shipping them in-tree means: - Contributors don't clone / index / build code for apps they'll never touch - Each app can version, release, and iterate independently of the core cadence - We stop carrying apps that are effectively unmaintained in the monorepo ## How This PR removes the 11 community apps from `packages/twenty-apps/community/` ## Note - **Marketplace apps** must be published on npm and pulled from there — no app code living in this repo just to be distributed - **Showcase / example apps** stay as living examples of what the SDK can do under `example/` - **Officially-maintained marketplace apps** (like the new `github-connector`?) stay in the repo under `internal/`. Some may be pre-installed on new workspaces alongside the Standard app --- .../community/activity-summary/.env.example | 6 - .../community/activity-summary/.gitignore | 2 - .../community/activity-summary/.yarnrc.yml | 1 - .../community/activity-summary/README.md | 108 - .../activity-summary/application.config.ts | 45 - .../community/activity-summary/package.json | 17 - .../summarise-and-send/src/index.ts | 80 - .../src/opportunity-creation-summariser.ts | 28 - .../src/people-creation-summariser.ts | 38 - .../summarise-and-send/src/senders.ts | 172 - .../src/task-creation-summariser.ts | 89 - .../summarise-and-send/src/utils.ts | 13 - .../community/activity-summary/tsconfig.json | 26 - .../community/activity-summary/yarn.lock | 38 - .../ai-meeting-transcript/.env.example | 19 - .../ai-meeting-transcript/.gitignore | 2 - .../ai-meeting-transcript/.yarnrc.yml | 1 - .../community/ai-meeting-transcript/README.md | 159 - .../application.config.ts | 30 - .../ai-meeting-transcript/package.json | 19 - .../ai-meeting-transcriptor/src/index.ts | 306 - .../ai-meeting-transcript/tsconfig.json | 26 - .../community/ai-meeting-transcript/yarn.lock | 435 -- .../community/apollo-enrich/.gitignore | 38 - .../community/apollo-enrich/.nvmrc | 1 - .../community/apollo-enrich/.oxlintrc.json | 38 - .../community/apollo-enrich/.yarnrc.yml | 1 - .../community/apollo-enrich/LLMS.md | 13 - .../community/apollo-enrich/README.md | 51 - .../community/apollo-enrich/package.json | 26 - .../apollo-enrich/src/application-config.ts | 54 - .../src/fields/apollo-founded-year.field.ts | 12 - .../src/fields/apollo-industry.field.ts | 12 - .../fields/apollo-short-description.field.ts | 12 - .../src/fields/apollo-total-funding.field.ts | 12 - .../src/front-components/apollo-oauth-cta.tsx | 220 - .../get-authentication-token-pairs.ts | 96 - .../get-oauth-application-variables.ts | 32 - .../src/logic-functions/get-verify-page.ts | 90 - .../src/logic-functions/on-company-updated.ts | 223 - .../src/logic-functions/post-install.ts | 13 - .../src/logic-functions/pre-install.ts | 13 - .../apollo-enrich/src/roles/default-role.ts | 15 - .../community/apollo-enrich/tsconfig.json | 31 - .../community/apollo-enrich/yarn.lock | 6522 ----------------- .../community/fireflies/.env.example | 109 - .../community/fireflies/.gitignore | 1 - .../community/fireflies/.oxlintrc.json | 40 - .../community/fireflies/.yarnrc.yml | 1 - .../community/fireflies/CHANGELOG.md | 167 - .../twenty-apps/community/fireflies/README.md | 331 - .../community/fireflies/application.config.ts | 81 - .../community/fireflies/jest.config.mjs | 23 - .../community/fireflies/package.json | 32 - .../community/fireflies/project.json | 31 - .../fireflies/scripts/add-meeting-fields.ts | 494 -- .../fireflies/scripts/debug-meeting.ts | 81 - .../fireflies/scripts/delete-meeting.ts | 59 - .../fireflies/scripts/fetch-all-meetings.ts | 221 - .../fireflies/scripts/ingest-meeting.ts | 93 - .../fireflies/scripts/test-webhook.ts | 241 - .../receive-fireflies-notes/src/index.ts | 11 - .../src/__tests__/fireflies-webhook.spec.ts | 718 -- .../src/__tests__/historical-importer.spec.ts | 83 - .../fireflies/src/__tests__/setup.ts | 17 - .../__tests__/webhook-handler-logging.spec.ts | 40 - .../fireflies/src/fireflies-api-client.ts | 823 --- .../community/fireflies/src/formatters.ts | 259 - .../fireflies/src/historical-importer.ts | 160 - .../community/fireflies/src/index.ts | 31 - .../community/fireflies/src/logger.ts | 142 - .../community/fireflies/src/objects/index.ts | 2 - .../fireflies/src/objects/meeting.ts | 14 - .../fireflies/src/receive-fireflies-notes.ts | 29 - .../fireflies/src/twenty-crm-service.ts | 577 -- .../community/fireflies/src/types.ts | 235 - .../community/fireflies/src/utils.ts | 41 - .../fireflies/src/webhook-handler.ts | 382 - .../fireflies/src/webhook-validator.ts | 54 - .../community/fireflies/tsconfig.json | 26 - .../twenty-apps/community/fireflies/yarn.lock | 5505 -------------- .../last-email-interaction/.gitignore | 38 - .../community/last-email-interaction/.nvmrc | 1 - .../last-email-interaction/.oxlintrc.json | 19 - .../last-email-interaction/.yarnrc.yml | 1 - .../last-email-interaction/README.md | 19 - .../last-email-interaction/package.json | 31 - .../src/application.config.ts | 10 - .../src/fields/company-interaction-status.ts | 41 - .../src/fields/company-last-interaction.ts | 10 - .../src/fields/person-interaction-status.ts | 41 - .../src/fields/person-last-interaction.ts | 10 - .../src/logic-functions/on-cron-job.ts | 126 - .../src/logic-functions/on-message-created.ts | 139 - .../src/logic-functions/on-message-updated.ts | 139 - .../src/shared/calculate-status.ts | 13 - .../last-email-interaction/tsconfig.json | 26 - .../last-email-interaction/tsconfig.spec.json | 17 - .../last-email-interaction/yarn.lock | 4623 ------------ .../application/.env.example | 2 - .../application/.gitignore | 2 - .../application/.yarnrc.yml | 1 - .../application/README.md | 113 - .../application/application.config.ts | 23 - .../application/package.json | 17 - .../create-company/src/index.ts | 34 - .../create-person/src/index.ts | 40 - .../get-company/src/index.ts | 28 - .../get-person/src/index.ts | 28 - .../application/tsconfig.json | 26 - .../application/yarn.lock | 30 - .../browser-extension/.env.example | 2 - .../browser-extension/.gitignore | 26 - .../browser-extension/.oxlintrc.json | 54 - .../browser-extension/README.md | 158 - .../browser-extension/package.json | 22 - .../browser-extension/project.json | 48 - .../browser-extension/public/icon/128.png | Bin 3074 -> 0 bytes .../browser-extension/public/icon/16.png | Bin 559 -> 0 bytes .../browser-extension/public/icon/32.png | Bin 916 -> 0 bytes .../browser-extension/public/icon/48.png | Bin 1334 -> 0 bytes .../browser-extension/public/icon/96.png | Bin 2366 -> 0 bytes .../browser-extension/public/wxt.svg | 15 - .../browser-extension/src/assets/react.svg | 1 - .../src/common/constants/index.ts | 2 - .../src/common/constants/linkedin.ts | 5 - .../browser-extension/src/common/index.ts | 2 - .../entrypoints/add-company.content/index.tsx | 73 - .../entrypoints/add-company.content/main.tsx | 13 - .../entrypoints/add-person.content/index.tsx | 66 - .../entrypoints/add-person.content/main.tsx | 13 - .../src/entrypoints/background/index.ts | 70 - .../src/entrypoints/popup/app.tsx | 77 - .../src/entrypoints/popup/index.html | 24 - .../src/entrypoints/popup/main.tsx | 13 - .../src/entrypoints/popup/style.css | 5 - .../src/ui/components/button.tsx | 50 - .../src/ui/theme/context/ThemeContext.tsx | 12 - .../src/ui/theme/context/index.ts | 1 - .../browser-extension/src/utils/messaging.ts | 13 - .../browser-extension/tsconfig.json | 10 - .../browser-extension/vite.config.ts | 12 - .../browser-extension/wxt.config.ts | 13 - .../mailchimp-synchronizer/.yarnrc.yml | 1 - .../mailchimp-synchronizer/README.md | 32 - .../application.config.ts | 61 - .../mailchimp-synchronizer/package.json | 27 - .../mailchimp-synchronizer/src/index.ts | 442 -- .../mailchimp-synchronizer/tsconfig.json | 26 - .../mailchimp-synchronizer/yarn.lock | 2100 ------ .../community/meeting-transcript/.env.example | 15 - .../community/meeting-transcript/.gitignore | 2 - .../community/meeting-transcript/.yarnrc.yml | 1 - .../community/meeting-transcript/README.md | 182 - .../meeting-transcript/application.config.ts | 46 - .../community/meeting-transcript/package.json | 25 - .../process-transcript/src/index.ts | 872 --- .../meeting-transcript/tsconfig.json | 26 - .../community/meeting-transcript/yarn.lock | 464 -- .../community/rollup-engine/README.md | 107 - .../rollup-engine/application.config.ts | 32 - .../templates/opportunity-to-company.json | 79 - .../community/rollup-engine/package.json | 23 - .../rollup-engine/scripts/run-rollup-smoke.ts | 165 - .../scripts/setup-company-rollup-fields.mjs | 138 - .../calculaterollups/src/aggregations.ts | 143 - .../calculaterollups/src/client.ts | 347 - .../calculaterollups/src/config.ts | 205 - .../calculaterollups/src/filtering.ts | 149 - .../calculaterollups/src/index.ts | 257 - .../calculaterollups/src/rollupConfig.ts | 81 - .../calculaterollups/src/types.ts | 49 - .../community/rollup-engine/tsconfig.json | 27 - .../community/rollup-engine/yarn.lock | 1169 --- .../community/stripe-synchronizer/.yarnrc.yml | 1 - .../community/stripe-synchronizer/README.md | 37 - .../stripe-synchronizer/application.config.ts | 27 - .../stripe-synchronizer/package.json | 27 - .../stripe-synchronizer/src/index.ts | 505 -- .../stripe-synchronizer/src/types.ts | 37 - .../stripe-synchronizer/tsconfig.json | 27 - .../community/stripe-synchronizer/yarn.lock | 2100 ------ .../community/webmetic/.env.example | 4 - .../community/webmetic/.yarnrc.yml | 1 - .../twenty-apps/community/webmetic/README.md | 237 - .../community/webmetic/application.config.ts | 33 - .../community/webmetic/package.json | 18 - .../sync-visitor-data/src/index.ts | 521 -- .../sync-visitor-data/src/schemaSetup.ts | 325 - .../sync-visitor-data/src/types.ts | 51 - .../community/webmetic/tsconfig.json | 27 - .../twenty-apps/community/webmetic/yarn.lock | 273 - 192 files changed, 38331 deletions(-) delete mode 100644 packages/twenty-apps/community/activity-summary/.env.example delete mode 100644 packages/twenty-apps/community/activity-summary/.gitignore delete mode 100644 packages/twenty-apps/community/activity-summary/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/activity-summary/README.md delete mode 100644 packages/twenty-apps/community/activity-summary/application.config.ts delete mode 100644 packages/twenty-apps/community/activity-summary/package.json delete mode 100644 packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/index.ts delete mode 100644 packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/opportunity-creation-summariser.ts delete mode 100644 packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/people-creation-summariser.ts delete mode 100644 packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/senders.ts delete mode 100644 packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/task-creation-summariser.ts delete mode 100644 packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/utils.ts delete mode 100644 packages/twenty-apps/community/activity-summary/tsconfig.json delete mode 100644 packages/twenty-apps/community/activity-summary/yarn.lock delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/.env.example delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/.gitignore delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/README.md delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/application.config.ts delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/package.json delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/serverlessFunctions/ai-meeting-transcriptor/src/index.ts delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/tsconfig.json delete mode 100644 packages/twenty-apps/community/ai-meeting-transcript/yarn.lock delete mode 100644 packages/twenty-apps/community/apollo-enrich/.gitignore delete mode 100644 packages/twenty-apps/community/apollo-enrich/.nvmrc delete mode 100644 packages/twenty-apps/community/apollo-enrich/.oxlintrc.json delete mode 100644 packages/twenty-apps/community/apollo-enrich/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/apollo-enrich/LLMS.md delete mode 100644 packages/twenty-apps/community/apollo-enrich/README.md delete mode 100644 packages/twenty-apps/community/apollo-enrich/package.json delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/application-config.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/fields/apollo-founded-year.field.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/fields/apollo-industry.field.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/fields/apollo-short-description.field.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/fields/apollo-total-funding.field.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/front-components/apollo-oauth-cta.tsx delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-authentication-token-pairs.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-oauth-application-variables.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-verify-page.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/logic-functions/on-company-updated.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/logic-functions/post-install.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/logic-functions/pre-install.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/src/roles/default-role.ts delete mode 100644 packages/twenty-apps/community/apollo-enrich/tsconfig.json delete mode 100644 packages/twenty-apps/community/apollo-enrich/yarn.lock delete mode 100644 packages/twenty-apps/community/fireflies/.env.example delete mode 100644 packages/twenty-apps/community/fireflies/.gitignore delete mode 100644 packages/twenty-apps/community/fireflies/.oxlintrc.json delete mode 100644 packages/twenty-apps/community/fireflies/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/fireflies/CHANGELOG.md delete mode 100644 packages/twenty-apps/community/fireflies/README.md delete mode 100644 packages/twenty-apps/community/fireflies/application.config.ts delete mode 100644 packages/twenty-apps/community/fireflies/jest.config.mjs delete mode 100644 packages/twenty-apps/community/fireflies/package.json delete mode 100644 packages/twenty-apps/community/fireflies/project.json delete mode 100644 packages/twenty-apps/community/fireflies/scripts/add-meeting-fields.ts delete mode 100644 packages/twenty-apps/community/fireflies/scripts/debug-meeting.ts delete mode 100644 packages/twenty-apps/community/fireflies/scripts/delete-meeting.ts delete mode 100644 packages/twenty-apps/community/fireflies/scripts/fetch-all-meetings.ts delete mode 100644 packages/twenty-apps/community/fireflies/scripts/ingest-meeting.ts delete mode 100644 packages/twenty-apps/community/fireflies/scripts/test-webhook.ts delete mode 100644 packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/index.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/__tests__/fireflies-webhook.spec.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/__tests__/historical-importer.spec.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/__tests__/setup.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/__tests__/webhook-handler-logging.spec.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/fireflies-api-client.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/formatters.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/historical-importer.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/index.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/logger.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/objects/index.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/objects/meeting.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/receive-fireflies-notes.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/twenty-crm-service.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/types.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/utils.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/webhook-handler.ts delete mode 100644 packages/twenty-apps/community/fireflies/src/webhook-validator.ts delete mode 100644 packages/twenty-apps/community/fireflies/tsconfig.json delete mode 100644 packages/twenty-apps/community/fireflies/yarn.lock delete mode 100644 packages/twenty-apps/community/last-email-interaction/.gitignore delete mode 100644 packages/twenty-apps/community/last-email-interaction/.nvmrc delete mode 100644 packages/twenty-apps/community/last-email-interaction/.oxlintrc.json delete mode 100644 packages/twenty-apps/community/last-email-interaction/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/last-email-interaction/README.md delete mode 100644 packages/twenty-apps/community/last-email-interaction/package.json delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/application.config.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/fields/company-interaction-status.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/fields/company-last-interaction.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/fields/person-interaction-status.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/fields/person-last-interaction.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-cron-job.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-message-created.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-message-updated.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/src/shared/calculate-status.ts delete mode 100644 packages/twenty-apps/community/last-email-interaction/tsconfig.json delete mode 100644 packages/twenty-apps/community/last-email-interaction/tsconfig.spec.json delete mode 100644 packages/twenty-apps/community/last-email-interaction/yarn.lock delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/.env.example delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/.gitignore delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/README.md delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/application.config.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/package.json delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/create-company/src/index.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/create-person/src/index.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/get-company/src/index.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/get-person/src/index.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/tsconfig.json delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/application/yarn.lock delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.env.example delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.gitignore delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.oxlintrc.json delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/README.md delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/package.json delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/project.json delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/128.png delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/16.png delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/32.png delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/48.png delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/96.png delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/wxt.svg delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/assets/react.svg delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/constants/index.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/constants/linkedin.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/index.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-company.content/index.tsx delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-company.content/main.tsx delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-person.content/index.tsx delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-person.content/main.tsx delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/background/index.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/app.tsx delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/index.html delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/main.tsx delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/style.css delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/components/button.tsx delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/theme/context/ThemeContext.tsx delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/theme/context/index.ts delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/utils/messaging.ts delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/tsconfig.json delete mode 100644 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/vite.config.ts delete mode 100755 packages/twenty-apps/community/linkedin-browser-extension/browser-extension/wxt.config.ts delete mode 100644 packages/twenty-apps/community/mailchimp-synchronizer/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/mailchimp-synchronizer/README.md delete mode 100644 packages/twenty-apps/community/mailchimp-synchronizer/application.config.ts delete mode 100644 packages/twenty-apps/community/mailchimp-synchronizer/package.json delete mode 100644 packages/twenty-apps/community/mailchimp-synchronizer/src/index.ts delete mode 100644 packages/twenty-apps/community/mailchimp-synchronizer/tsconfig.json delete mode 100644 packages/twenty-apps/community/mailchimp-synchronizer/yarn.lock delete mode 100644 packages/twenty-apps/community/meeting-transcript/.env.example delete mode 100644 packages/twenty-apps/community/meeting-transcript/.gitignore delete mode 100644 packages/twenty-apps/community/meeting-transcript/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/meeting-transcript/README.md delete mode 100644 packages/twenty-apps/community/meeting-transcript/application.config.ts delete mode 100644 packages/twenty-apps/community/meeting-transcript/package.json delete mode 100644 packages/twenty-apps/community/meeting-transcript/serverlessFunctions/process-transcript/src/index.ts delete mode 100644 packages/twenty-apps/community/meeting-transcript/tsconfig.json delete mode 100644 packages/twenty-apps/community/meeting-transcript/yarn.lock delete mode 100644 packages/twenty-apps/community/rollup-engine/README.md delete mode 100644 packages/twenty-apps/community/rollup-engine/application.config.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/config/templates/opportunity-to-company.json delete mode 100644 packages/twenty-apps/community/rollup-engine/package.json delete mode 100644 packages/twenty-apps/community/rollup-engine/scripts/run-rollup-smoke.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/scripts/setup-company-rollup-fields.mjs delete mode 100644 packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/aggregations.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/client.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/config.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/filtering.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/index.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/rollupConfig.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/types.ts delete mode 100644 packages/twenty-apps/community/rollup-engine/tsconfig.json delete mode 100644 packages/twenty-apps/community/rollup-engine/yarn.lock delete mode 100644 packages/twenty-apps/community/stripe-synchronizer/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/stripe-synchronizer/README.md delete mode 100644 packages/twenty-apps/community/stripe-synchronizer/application.config.ts delete mode 100644 packages/twenty-apps/community/stripe-synchronizer/package.json delete mode 100644 packages/twenty-apps/community/stripe-synchronizer/src/index.ts delete mode 100644 packages/twenty-apps/community/stripe-synchronizer/src/types.ts delete mode 100644 packages/twenty-apps/community/stripe-synchronizer/tsconfig.json delete mode 100644 packages/twenty-apps/community/stripe-synchronizer/yarn.lock delete mode 100644 packages/twenty-apps/community/webmetic/.env.example delete mode 100644 packages/twenty-apps/community/webmetic/.yarnrc.yml delete mode 100644 packages/twenty-apps/community/webmetic/README.md delete mode 100644 packages/twenty-apps/community/webmetic/application.config.ts delete mode 100644 packages/twenty-apps/community/webmetic/package.json delete mode 100644 packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/index.ts delete mode 100644 packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/schemaSetup.ts delete mode 100644 packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/types.ts delete mode 100644 packages/twenty-apps/community/webmetic/tsconfig.json delete mode 100644 packages/twenty-apps/community/webmetic/yarn.lock diff --git a/packages/twenty-apps/community/activity-summary/.env.example b/packages/twenty-apps/community/activity-summary/.env.example deleted file mode 100644 index 29a03e65bb..0000000000 --- a/packages/twenty-apps/community/activity-summary/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -TWENTY_API_KEY= -DAYS_AGO= -DISCORD_WEBHOOK_URL= -FB_GRAPH_TOKEN= -WHATSAPP_RECIPIENT_PHONE_NUMBER= -SLACK_HOOK_URL= diff --git a/packages/twenty-apps/community/activity-summary/.gitignore b/packages/twenty-apps/community/activity-summary/.gitignore deleted file mode 100644 index 4f0e650be6..0000000000 --- a/packages/twenty-apps/community/activity-summary/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.yarn/install-state.gz -.env diff --git a/packages/twenty-apps/community/activity-summary/.yarnrc.yml b/packages/twenty-apps/community/activity-summary/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/activity-summary/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/activity-summary/README.md b/packages/twenty-apps/community/activity-summary/README.md deleted file mode 100644 index 812699492f..0000000000 --- a/packages/twenty-apps/community/activity-summary/README.md +++ /dev/null @@ -1,108 +0,0 @@ -# Twenty CRM Activity Reporter �� - -A TypeScript-based reporting bot that summarizes activity from your Twenty CRM workspace and sends daily/periodic reports to Slack, Discord, and WhatsApp. Meet Kylian Mbaguette, your friendly CRM activity reporter! - -## Features - -- šŸ§‘ā€šŸ’» **People & Company Tracking**: Summarizes newly created people and companies -- šŸŽÆ **Opportunity Monitoring**: Reports on new opportunities created, broken down by stage -- āœ… **Task Analytics**: - - Tracks task creation - - Calculates on-time completion rates - - Identifies team members with the most overdue tasks (the "slackers") -- šŸ”” **Multi-Platform Notifications**: Send reports to Slack, Discord, and/or WhatsApp -- ā° **Configurable Time Range**: Look back any number of days - -## Prerequisites - -- Node.js (v14 or higher recommended) -- TypeScript -- A [Twenty CRM](https://twenty.com) account with API access -- Optional: Slack webhook, Discord webhook, and/or WhatsApp Business API access - -## Installing dependencies -```bash -# Install dependencies -yarn install -``` - -### Environment Variables - -| Variable | Required | Description | -|----------|----------|-------------| -| `TWENTY_API_KEY` | āœ… Yes | Your Twenty CRM API key | -| `DAYS_AGO` | āœ… Yes | Number of days to look back for the report | -| `SLACK_HOOK_URL` | āŒ No | Slack incoming webhook URL | -| `DISCORD_WEBHOOK_URL` | āŒ No | Discord webhook URL | -| `FB_GRAPH_TOKEN` | āŒ No | Facebook Graph API token for WhatsApp | -| `WHATSAPP_RECIPIENT_PHONE_NUMBER` | āŒ No | WhatsApp recipient phone number (with country code) | - -## Project Structure -``` -. -ā”œā”€ā”€ index.ts # Main entry point -ā”œā”€ā”€ people-creation-summariser.ts # Summarizes people/company creation -ā”œā”€ā”€ opportunity-creation-summariser.ts # Summarizes opportunity creation -ā”œā”€ā”€ task-creation-summariser.ts # Summarizes task creation & completion -ā”œā”€ā”€ senders.ts # Handles sending to Slack/Discord/WhatsApp -ā”œā”€ā”€ utils.ts # API request utility -└── README.md -``` - -## How It Works - -1. **Data Collection**: The bot queries the Twenty CRM API for activities within the specified time range -2. **Analysis**: - - Counts new people and companies - - Categorizes opportunities by stage - - Calculates task completion rates and identifies overdue tasks -3. **Reporting**: Formats the data into friendly messages -4. **Distribution**: Sends reports to configured platforms (Slack, Discord, WhatsApp) - -## Report Format - -Each report includes: -``` -Bonjour! šŸ„– Je m'appelle Kylian Mbaguette. Over the last X days: - -šŸ§‘ā€šŸ’» People & Companies -- X People and Y Companies were added - -šŸŽÆ Opportunities -- X Opportunities were added: Y in NEW, Z in PROPOSAL - -šŸ“‹ Tasks -- X Tasks were created -- Y% Tasks were completed on time -- [Name] slacked the most with Z Tasks overdue -``` - -## API Integration - -This bot uses the [Twenty CRM REST API](https://api.twenty.com/rest/). The following endpoints are used: - -- `GET /people` - Fetch people data -- `GET /opportunities` - Fetch opportunity data -- `GET /tasks` - Fetch task data -- `GET /workspaceMembers/{id}` - Fetch workspace member details - -## Notes - -- The "slacker" detection is lighthearted and identifies team members with the most overdue tasks -- At least one messaging platform must be configured for the bot to send reports -- The bot uses ISO date format (YYYY-MM-DD) for date filtering -- Task completion percentage only considers incomplete tasks (excludes already completed tasks from the calculation) - -## Troubleshooting - -**Issue**: No messages being sent -- **Solution**: Ensure at least one messaging platform is configured with valid credentials - -**Issue**: API authentication errors -- **Solution**: Verify your `TWENTY_API_KEY` is correct and has necessary permissions - -**Issue**: WhatsApp messages not sending -- **Solution**: Ensure both `FB_GRAPH_TOKEN` and `WHATSAPP_RECIPIENT_PHONE_NUMBER` are set correctly - -## Contributing -Built with ā¤ļø and šŸ„– by Azmat, Ali and Mike from 9dots diff --git a/packages/twenty-apps/community/activity-summary/application.config.ts b/packages/twenty-apps/community/activity-summary/application.config.ts deleted file mode 100644 index 386d40db05..0000000000 --- a/packages/twenty-apps/community/activity-summary/application.config.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/application'; - -const config: ApplicationConfig = { - universalIdentifier: 'b53627f5-ca60-478c-bc43-c7ab4904e34a', - displayName: 'Activity Summary', - description: - 'A TypeScript-based reporting bot that summarizes activity from your Twenty CRM workspace and sends daily/periodic reports to Slack, Discord, and WhatsApp. Meet Kylian Mbaguette, your friendly CRM activity reporter!', - applicationVariables: { - TWENTY_API_KEY: { - universalIdentifier: '304b7d5d-e2bb-4444-9b04-6b3ae8b73730', - description: 'Twenty API Key', - isSecret: true, - }, - DAYS_AGO: { - universalIdentifier: '040a3097-9cee-4f74-b957-c2f9bf636c3f', - description: - 'How far back into the past we want to summarise – defaults to the past 7 days', - value: '7', - isSecret: false, - }, - SLACK_HOOK_URL: { - universalIdentifier: 'fd16e370-934c-4267-83b4-7d88259bf7e1', - description: 'Slack hook URL for sending message to channel', - isSecret: true, - }, - DISCORD_WEBHOOK_URL: { - universalIdentifier: 'f3741075-d525-4988-ba42-55d519c6fd76', - description: - 'Discord webhook URL for sending message to channel of a server', - isSecret: true, - }, - FB_GRAPH_TOKEN: { - universalIdentifier: 'fb907f49-74ac-4aa5-ba45-cfc9250ecc44', - description: 'For Facebook auth', - isSecret: true, - }, - WHATSAPP_RECIPIENT_PHONE_NUMBER: { - universalIdentifier: 'c856ee5d-44bf-42f4-9a39-2553a94af518', - description: 'Phone number for receiving WhatsApp message', - isSecret: true, - }, - }, -}; - -export default config; diff --git a/packages/twenty-apps/community/activity-summary/package.json b/packages/twenty-apps/community/activity-summary/package.json deleted file mode 100644 index 732afd7af0..0000000000 --- a/packages/twenty-apps/community/activity-summary/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "activity-summary", - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "dependencies": { - "twenty-sdk": "0.0.3" - }, - "devDependencies": { - "@types/node": "^24.7.2" - } -} diff --git a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/index.ts b/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/index.ts deleted file mode 100644 index 90f371c5b4..0000000000 --- a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/index.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { summariseOpportunityCreation } from './opportunity-creation-summariser'; -import { summarisePeopleCreation } from './people-creation-summariser'; -import { sendToDiscord, sendToSlack, sendToWhatsApp } from './senders'; -import { summariseTaskCreation } from './task-creation-summariser'; -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -export const main = async (): Promise => { - let date: string | Date = new Date(); - date.setDate(new Date().getDate() - Number(process.env.DAYS_AGO)); - date = date.toISOString().substring(0, 10); - const peopleCreationSummary = await summarisePeopleCreation(date); - const opportunityCreationSummary = await summariseOpportunityCreation(date); - const taskCreationSummary = await summariseTaskCreation(date); - - let body = { - daysAgo: Number(process.env.DAYS_AGO), - peopleCreationSummary, - opportunityCreationSummary, - taskCreationSummary, - discord: {}, - whatsapp: {}, - slack: {}, - }; - - if (process.env.SLACK_HOOK_URL) { - const slackBody = await sendToSlack({ - peopleCreationSummary, - opportunityCreationSummary, - taskCreationSummary, - }); - - body = { - ...body, - slack: slackBody, - }; - } - - if (process.env.DISCORD_WEBHOOK_URL) { - const discordBody = await sendToDiscord({ - peopleCreationSummary, - opportunityCreationSummary, - taskCreationSummary, - }); - - body = { - ...body, - discord: discordBody, - }; - } - - if ( - process.env.FB_GRAPH_TOKEN && - process.env.WHATSAPP_RECIPIENT_PHONE_NUMBER - ) { - const whatsappBody = await sendToWhatsApp({ - peopleCreationSummary, - opportunityCreationSummary, - taskCreationSummary, - }); - - body = { - ...body, - whatsapp: whatsappBody, - }; - } - - return body; -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: 'c5b0e3f7-cbbd-4bd6-b01c-150d52cf2ce9', - name: 'summarise-and-send', - triggers: [ - { - universalIdentifier: '36e1c4c7-8664-4d6d-a88f-ac56f1bd0651', - type: 'cron', - pattern: '0 9 * * *', - }, - ], -}; diff --git a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/opportunity-creation-summariser.ts b/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/opportunity-creation-summariser.ts deleted file mode 100644 index 88230c8657..0000000000 --- a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/opportunity-creation-summariser.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { request } from "./utils" - -type Opportunity = { - stage: 'NEW' | 'PROPOSAL' -} - -export const summariseOpportunityCreation = async (date: string) => { - const { opportunities }: { opportunities: Opportunity[] } = await request( - `opportunities?filter=createdAt[gte]:${date}`, - ) - - if (opportunities.length === 0) { - return `- No Opportunities were added` - } - - const stageSummary = Object.entries( - opportunities.reduce((hash: Record, opportunity) => { - if (!hash[opportunity.stage]) { - hash[opportunity.stage] = 0 - } - - hash[opportunity.stage] += 1 - return hash - }, {}) - ).map(([stage, value]) => `${value} in ${stage}`).join(', ') - - return `- ${opportunities.length} Opportunities were added: ${stageSummary}` -} diff --git a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/people-creation-summariser.ts b/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/people-creation-summariser.ts deleted file mode 100644 index 3c4c6cd598..0000000000 --- a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/people-creation-summariser.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { request } from "./utils" - -type Person = { - companyId: string - company: Company -} - -type Company = { - id: string - accountOwnerId: string -} - -export const summarisePeopleCreation = async (date: string) => { - const { people }: { people: Person[] } = await request( - `people?depth=1&filter=createdAt[gte]:${date}`, - ) - - if (people.length === 0) { - return '- No People were added' - } - - let createdForCompanies: Record = {} - let numberOfAccountOwnerlessCompanies = 0 - - for (const person of people) { - const isCompanyTracked = createdForCompanies[person.companyId] - if (person.companyId && !isCompanyTracked) { - createdForCompanies[person.company.id] = person.company - - if (!person?.company?.accountOwnerId) { - numberOfAccountOwnerlessCompanies += 1 - } - } - } - - return `- ${people.length} People were added for ${Object.keys(createdForCompanies).length} Companies -- Out of those, ${numberOfAccountOwnerlessCompanies} Companies don't have account owners yet` -} diff --git a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/senders.ts b/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/senders.ts deleted file mode 100644 index 618cec6cac..0000000000 --- a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/senders.ts +++ /dev/null @@ -1,172 +0,0 @@ -export const sendToSlack = async (params: { - peopleCreationSummary: string; - opportunityCreationSummary: string; - taskCreationSummary: string; -}) => { - const { - peopleCreationSummary, - opportunityCreationSummary, - taskCreationSummary, - } = params; - - const slackMessage = { - blocks: [ - { - type: 'header', - text: { - type: 'plain_text', - text: `Bonjour! šŸ„– Je m'appelle Kylian Mbaguette. Over the last ${process.env.DAYS_AGO} days`, - emoji: true, - }, - }, - { - type: 'header', - text: { - type: 'plain_text', - text: 'šŸ§‘ā€šŸ’» People & Companies', - emoji: true, - }, - }, - { - type: 'section', - text: { - type: 'plain_text', - text: peopleCreationSummary, - emoji: true, - }, - }, - { - type: 'header', - text: { - type: 'plain_text', - text: 'šŸŽÆ Opportunities', - emoji: true, - }, - }, - { - type: 'section', - text: { - type: 'plain_text', - text: opportunityCreationSummary, - emoji: true, - }, - }, - { - type: 'header', - text: { - type: 'plain_text', - text: 'šŸ“‹ Tasks', - emoji: true, - }, - }, - { - type: 'section', - text: { - type: 'plain_text', - text: taskCreationSummary, - emoji: true, - }, - }, - ], - }; - - const response = await fetch(process.env.SLACK_HOOK_URL ?? '', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(slackMessage), - }); - - return { - formattedMessage: slackMessage, - webhookStatus: response.status, - }; -}; - -export const sendToDiscord = async (params: { - peopleCreationSummary: string; - opportunityCreationSummary: string; - taskCreationSummary: string; -}) => { - const { - peopleCreationSummary, - opportunityCreationSummary, - taskCreationSummary, - } = params; - const formattedMessage = `Bonjour! šŸ„– Je m'appelle Kylian Mbaguette. Over the last ${process.env.DAYS_AGO} days: - -**šŸ§‘ā€šŸ’» People & Companies** -${peopleCreationSummary} - -**šŸŽÆ Opportunities** -${opportunityCreationSummary} - -**šŸ“‹ Tasks** -${taskCreationSummary}`; - - const body = { - username: 'Twenty Bot', - content: formattedMessage, - }; - - const response = await fetch(process.env.DISCORD_WEBHOOK_URL ?? '', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(body), - }); - - return { - formattedMessage, - webhookStatus: response.status, - }; -}; - -export const sendToWhatsApp = async (params: { - peopleCreationSummary: string; - opportunityCreationSummary: string; - taskCreationSummary: string; -}): Promise => { - const { - peopleCreationSummary, - opportunityCreationSummary, - taskCreationSummary, - } = params; - const formattedMessage = `Bonjour! šŸ„– Je m'appelle Kylian Mbaguette. Over the last ${process.env.DAYS_AGO} days: - -*šŸ§‘ā€šŸ’» People & Companies* -${peopleCreationSummary} - -*šŸŽÆ Opportunities* -${opportunityCreationSummary} - -*šŸ“‹ Tasks* -${taskCreationSummary}`; - - const response = await fetch( - 'https://graph.facebook.com/v22.0/828771160324576/messages', - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${process.env.FB_GRAPH_TOKEN}`, - }, - body: JSON.stringify({ - messaging_product: 'whatsapp', - recipient_type: 'individual', - to: process.env.WHATSAPP_RECIPIENT_PHONE_NUMBER, - type: 'text', - text: { - preview_url: true, - body: formattedMessage, - }, - }), - }, - ); - - const responseBody = await response.json(); - - return { - formattedMessage, - webhookStatus: response.status, - webhookResponse: responseBody, - }; -}; diff --git a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/task-creation-summariser.ts b/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/task-creation-summariser.ts deleted file mode 100644 index 47530df2da..0000000000 --- a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/task-creation-summariser.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { request } from "./utils" - -type Task = { - status: string - dueAt: string - createdBy: { - workspaceMemberId: string - } -} - -export const summariseTaskCreation = async (date: string) => { - const { tasks }: { tasks: Task[] } = await request( - `tasks?filter=createdAt[gte]:${date}`, - ) - if (tasks.length === 0) { - return '- No Tasks were added' - } - - const presentDateISOString = new Date().toISOString() - const workspaceMemberIdsDueDateCounter: Record = {} - let workspaceMembers = [] - - tasks.forEach((task) => { - if (task.status === 'DONE') { - return - } - - if (presentDateISOString >= task.dueAt) { - if (!workspaceMemberIdsDueDateCounter[task.createdBy.workspaceMemberId]) { - workspaceMemberIdsDueDateCounter[task.createdBy.workspaceMemberId] = 0 - } - - workspaceMemberIdsDueDateCounter[task.createdBy.workspaceMemberId] += 1 - } - }) - - for (const { userId, count } of findMaxIncompleteKeys(workspaceMemberIdsDueDateCounter)) { - const data = await request(`workspaceMembers/${userId}`) - if (data.workspaceMember) { - workspaceMembers.push({ - ...data.workspaceMember, - slackCount: count - }) - } - } - - let slackerMessage = workspaceMembers.length > 0 ? workspaceMembers.reduce((text, member, index) => { - if (index === 0 && workspaceMembers.length === 1) { - return `${member.name.firstName} slacked the most with ${member.slackCount} Tasks overdue` - } - - if (index !== workspaceMembers.length - 1) { - return text.concat(`, ${member.name.firstName}`) - } - - if (index === workspaceMembers.length - 1) { - return text.concat(`, and ${member.name.firstName} slacked the most with ${member.slackCount} Tasks overdue`) - } - }, '') : 'No one was caught slacking!' - - const tasksCompletedOnTime = tasks.filter( - task => task.status === 'DONE' && task.dueAt >= presentDateISOString - ) - - const taskCompletionPercentage = tasksCompletedOnTime.length > 0 - ? (tasksCompletedOnTime.length / tasks.length) * 100 - : NaN - - const taskCompletionMessage = isNaN(taskCompletionPercentage) - ? 'No completed Tasks yet' - : `${taskCompletionPercentage.toFixed(2)}% of Tasks were completed on time` - - return `- ${tasks.length} Tasks were created -- ${taskCompletionMessage} -- ${slackerMessage}` -} - -/** - * @description This is generated by AI - */ -const findMaxIncompleteKeys = (workspaceMemberIdsDueDateCounter: Record) => { - // Get the maximum incomplete count - const max = Math.max(...Object.values(workspaceMemberIdsDueDateCounter)); - - // Filter keys that match the maximum value - return Object.entries(workspaceMemberIdsDueDateCounter) - .filter(([_, count]) => count === max) - .map(([userId, count]) => ({ userId, count })) -}; diff --git a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/utils.ts b/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/utils.ts deleted file mode 100644 index 37ad723df1..0000000000 --- a/packages/twenty-apps/community/activity-summary/serverlessFunctions/summarise-and-send/src/utils.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const request = async (route: string, authToken?: string) => { - const response = await fetch( - `https://api.twenty.com/rest/${route}`, - { - headers: { - Authorization: `Bearer ${process.env.TWENTY_API_KEY}` - }, - } - ) - - const json = await response.json() - return json.data -} diff --git a/packages/twenty-apps/community/activity-summary/tsconfig.json b/packages/twenty-apps/community/activity-summary/tsconfig.json deleted file mode 100644 index 17d258af13..0000000000 --- a/packages/twenty-apps/community/activity-summary/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/activity-summary/yarn.lock b/packages/twenty-apps/community/activity-summary/yarn.lock deleted file mode 100644 index c7fe0bbc4c..0000000000 --- a/packages/twenty-apps/community/activity-summary/yarn.lock +++ /dev/null @@ -1,38 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@types/node@npm:^24.7.2": - version: 24.9.2 - resolution: "@types/node@npm:24.9.2" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/7905d43f65cee72ef475fe76316e10bbf6ac5d08a7f0f6c38f2b6285d7ca3009e8fcafc8f8a1d2bf3f55889c9c278dbb203a9081fd0cf2d6d62161703924c6fa - languageName: node - linkType: hard - -"activity-summary@workspace:.": - version: 0.0.0-use.local - resolution: "activity-summary@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - twenty-sdk: "npm:0.0.3" - languageName: unknown - linkType: soft - -"twenty-sdk@npm:0.0.3": - version: 0.0.3 - resolution: "twenty-sdk@npm:0.0.3" - checksum: 10c0/0a3c85c27edb22fb50f7eb0da4f9770e85729fce05e9e0118ad0cdfc36e42425c93340a6cd1c276daf30aeeaa612db0cd905831c0a8287a31bff3da5be9b0562 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/ai-meeting-transcript/.env.example b/packages/twenty-apps/community/ai-meeting-transcript/.env.example deleted file mode 100644 index 1d58ed0916..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/.env.example +++ /dev/null @@ -1,19 +0,0 @@ -# Set environment values for your application here. -# Use the format: KEY=value -# -# These variables are automatically loaded when running your serverless functions. -# You can access them directly in your code using: -# const myValue = process.env.KEY; -# -# To make these variables available to your application, -# add them to package.json "env" key. This "env" key defines all -# environment variables that will be provided to your serverless -# functions at runtime. -# -# Example: -# API_TOKEN=your-api-token -# TIMEOUT_MS=3000 - -TWENTY_API_URL= -TWENTY_API_KEY= -OPENAI_API_KEY= diff --git a/packages/twenty-apps/community/ai-meeting-transcript/.gitignore b/packages/twenty-apps/community/ai-meeting-transcript/.gitignore deleted file mode 100644 index 4f0e650be6..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.yarn/install-state.gz -.env diff --git a/packages/twenty-apps/community/ai-meeting-transcript/.yarnrc.yml b/packages/twenty-apps/community/ai-meeting-transcript/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/ai-meeting-transcript/README.md b/packages/twenty-apps/community/ai-meeting-transcript/README.md deleted file mode 100644 index 4d5158a5a3..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/README.md +++ /dev/null @@ -1,159 +0,0 @@ -# AI Meeting Transcript - -Automatically process meeting transcripts to extract insights, action items, and follow-ups using AI. - -## Features - -- **Automatic Transcript Processing**: Receives meeting transcripts via webhook from Granola or similar transcription tools -- **AI-Powered Analysis**: Uses OpenAI to extract: - - Meeting summary - - Key discussion points - - Action items with assignees and due dates - - Commitments made by participants -- **Rich Note Creation**: Creates formatted notes in Twenty with summary and key points -- **Task Generation**: Automatically creates tasks for action items and commitments, linked to the meeting note - -## Requirements - -- `twenty-cli` - Install globally: `npm install -g twenty-cli` -- `apiKey` - Go to `https://twenty.com/settings/api-webhooks` to generate one -- `OpenAI API Key` - Get your API key from [OpenAI](https://platform.openai.com/api-keys) - -## Installation - -1. Copy the environment file: - -```bash -cp .env.example .env -``` - -2. Edit `.env` and replace the placeholders: - - `` with your Twenty API key - - `` with your OpenAI API key - -3. Install dependencies: - -```bash -yarn install -``` - -4. Sync the app to your Twenty workspace: - -```bash -twenty auth login -twenty app sync -``` - -## Configuration - -After syncing, configure the environment variables in your Twenty workspace: -1. Go to Settings → Apps → AI Meeting Transcript -2. Set the following environment variables: - - `TWENTY_API_KEY` - Your Twenty API key - - `TWENTY_API_URL` - Your Twenty instance URL (e.g., `https://api.twenty.com` or `http://localhost:3000` for local development) - - `OPENAI_API_KEY` - Your OpenAI API key - -**Important**: `TWENTY_API_URL` is required and must be set to your Twenty instance URL. For local development, use `http://localhost:3000`. For production, use your actual Twenty instance URL. - -## Usage - -### Webhook Endpoint - -The app exposes a public serverless route trigger. -``` -POST /s/webhook/transcript -``` - -Examples: -- Local: `POST http://localhost:3000/s/webhook/transcript` -- Hosted: `POST https://your-twenty-instance.com/s/webhook/transcript` - -### Webhook Payload Format - -Send a POST request with the following JSON structure: - -```json -{ - "transcript": "Full meeting transcript text here...", - "meetingTitle": "Q4 Planning Meeting", - "meetingDate": "2024-01-15", - "participants": ["John Doe", "Jane Smith"], - "metadata": { - "duration": "45 minutes", - "location": "Conference Room A" - } -} -``` - -**Required Fields:** -- `transcript` (string): The full meeting transcript text - -**Optional Fields:** -- `meetingTitle` (string): Title of the meeting -- `meetingDate` (string): Date of the meeting (ISO format or readable date) -- `participants` (string[]): List of meeting participants -- `metadata` (object): Additional metadata about the meeting - -### Example Webhook Call - -```bash -curl -X POST https://your-twenty-instance.com/s/webhook/transcript \ - -H "Content-Type: application/json" \ - -d '{ - "transcript": "John: Let'\''s start the meeting. Today we need to discuss Q4 goals. Jane: I agree. We should focus on customer retention. John: Great point. Can you prepare a report by Friday? Jane: Yes, I will have it ready.", - "meetingTitle": "Q4 Planning Meeting", - "meetingDate": "2024-01-15" - }' -``` - -### What Happens - -1. **Transcript Analysis**: The transcript is sent to OpenAI for analysis -2. **Note Creation**: A formatted note is created in Twenty with: - - Meeting summary - - Key discussion points - - Reference to the transcript source -3. **Task Creation**: Tasks are automatically created for: - - Each action item identified - - Each commitment made by participants - - Tasks include a reference to the meeting note ID in their description - -## Development - -Run dev mode to see application updates on your workspace instantly: - -```bash -twenty app dev -``` - -## Integration with Granola - -To integrate with Granola or similar transcription tools: - -1. Set up a webhook in your transcription service -2. Configure it to POST to: `https://your-twenty-instance.com/s/webhook/transcript` -3. Map the transcription service's payload format to the expected format above - -### Granola Webhook Setup - -If using Granola, configure the webhook to send: -- `transcript` field with the transcript text -- Optionally include meeting metadata fields - -## API Response - -The webhook returns a JSON response: - -```json -{ - "success": true, - "noteId": "uuid-of-created-note", - "taskIds": ["uuid-of-task-1", "uuid-of-task-2"], - "summary": { - "noteCreated": true, - "tasksCreated": 2, - "actionItemsProcessed": 1, - "commitmentsProcessed": 1 - } -} -``` diff --git a/packages/twenty-apps/community/ai-meeting-transcript/application.config.ts b/packages/twenty-apps/community/ai-meeting-transcript/application.config.ts deleted file mode 100644 index 7357f6602f..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/application.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/application'; - -const config: ApplicationConfig = { - universalIdentifier: '028754f1-3235-43b9-9427-fa6a62dbd473', - displayName: 'AI Meeting Transcript', - description: - 'Automatically process meeting transcripts to extract insights, action items, and follow-ups', - applicationVariables: { - TWENTY_API_KEY: { - universalIdentifier: '1359d05c-4947-4673-809f-abd55bede365', - isSecret: true, - value: '', - description: 'Twenty API key', - }, - TWENTY_API_URL: { - universalIdentifier: 'dbe83355-b574-445c-92c0-5c2b94a61ddb', - isSecret: true, - value: '', - description: 'Twenty API URL', - }, - OPENAI_API_KEY: { - universalIdentifier: '9559470d-15eb-4bc2-9cbc-3bc5c869d1fd', - isSecret: true, - value: '', - description: 'OpenAI API key for transcript analysis', - }, - }, -}; - -export default config; diff --git a/packages/twenty-apps/community/ai-meeting-transcript/package.json b/packages/twenty-apps/community/ai-meeting-transcript/package.json deleted file mode 100644 index a50b565ad9..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "ai-meeting-transcript", - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "dependencies": { - "axios": "^1.12.2", - "openai": "^4.28.0", - "twenty-sdk": "0.0.3" - }, - "devDependencies": { - "@types/node": "^24.7.2" - } -} diff --git a/packages/twenty-apps/community/ai-meeting-transcript/serverlessFunctions/ai-meeting-transcriptor/src/index.ts b/packages/twenty-apps/community/ai-meeting-transcript/serverlessFunctions/ai-meeting-transcriptor/src/index.ts deleted file mode 100644 index 16b637776e..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/serverlessFunctions/ai-meeting-transcriptor/src/index.ts +++ /dev/null @@ -1,306 +0,0 @@ -import axios from 'axios'; -import OpenAI from 'openai'; -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -type TranscriptWebhookPayload = { - transcript: string; - meetingTitle?: string; - meetingDate?: string; - participants?: string[]; - metadata?: Record; -}; - -type ActionItem = { - title: string; - description: string; - assignee?: string; - dueDate?: string; -}; - -type Commitment = { - person: string; - commitment: string; - dueDate?: string; -}; - -type AnalysisResult = { - summary: string; - keyPoints: string[]; - actionItems: ActionItem[]; - commitments: Commitment[]; -}; - -type RichTextData = { - markdown: string; - blocknote: null; -}; - -type TwentyApiResponse = { - id: string; -}; - -const OPENAI_MODEL = 'gpt-4o-mini'; -const OPENAI_TEMPERATURE = 0.3; - -const analyzeTranscript = async ( - transcript: string, - openaiApiKey: string, -): Promise => { - const openai = new OpenAI({ apiKey: openaiApiKey }); - - const prompt = `Analyze the following meeting transcript and extract: -1. A concise summary (2-3 sentences) -2. Key discussion points (bullet list) -3. Action items with titles, descriptions, and any mentioned assignees or due dates -4. Commitments made by participants with names and any mentioned due dates - -Return the response as a JSON object with this structure: -{ - "summary": "string", - "keyPoints": ["string"], - "actionItems": [{"title": "string", "description": "string", "assignee": "string (optional)", "dueDate": "string (optional)"}], - "commitments": [{"person": "string", "commitment": "string", "dueDate": "string (optional)"}] -} - -Transcript: -${transcript}`; - - const completion = await openai.chat.completions.create({ - model: OPENAI_MODEL, - messages: [ - { - role: 'system', - content: - 'You are a meeting analysis assistant. Extract key insights, action items, and commitments from meeting transcripts. Always return valid JSON.', - }, - { - role: 'user', - content: prompt, - }, - ], - response_format: { type: 'json_object' }, - temperature: OPENAI_TEMPERATURE, - }); - - const content = completion.choices[0]?.message?.content; - if (!content) { - throw new Error('No response from OpenAI'); - } - - return JSON.parse(content) as AnalysisResult; -}; - -const getTwentyApiConfig = () => { - const apiKey = process.env.TWENTY_API_KEY; - if (!apiKey) { - throw new Error('TWENTY_API_KEY environment variable is not set'); - } - - const baseUrl = process.env.TWENTY_API_URL; - - return { apiKey, baseUrl }; -}; - -const formatNoteBody = (summary: string, keyPoints: string[]): string => { - const keyPointsList = keyPoints.map((point) => `- ${point}`).join('\n'); - return `## Summary\n\n${summary}\n\n## Key Points\n\n${keyPointsList}\n\n*Generated from meeting transcript*`; -}; - -const createNoteInTwenty = async ( - summary: string, - keyPoints: string[], - meetingTitle?: string, - meetingDate?: string, -): Promise => { - const { apiKey, baseUrl } = getTwentyApiConfig(); - const noteTitle = - meetingTitle || - `Meeting Notes - ${meetingDate || new Date().toLocaleDateString()}`; - const noteBodyMarkdown = formatNoteBody(summary, keyPoints); - - const requestData = { - title: noteTitle, - bodyV2: { - markdown: noteBodyMarkdown, - blocknote: null, - } satisfies RichTextData, - }; - - try { - const { data } = await axios.post( - `${baseUrl}/rest/notes`, - requestData, - { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - }, - ); - return data; - } catch (error) { - if (axios.isAxiosError(error)) { - const errorMessage = error.response?.data - ? JSON.stringify(error.response.data, null, 2) - : error.message; - const status = error.response?.status; - throw new Error( - `Failed to create note: ${errorMessage}. Status: ${status}`, - ); - } - throw error; - } -}; - -const createTaskInTwenty = async ( - actionItem: ActionItem, -): Promise => { - const { apiKey, baseUrl } = getTwentyApiConfig(); - - const taskData: { - title: string; - bodyV2: RichTextData; - dueAt?: string; - } = { - title: actionItem.title, - bodyV2: { - markdown: actionItem.description, - blocknote: null, - }, - }; - - if (actionItem.dueDate) { - taskData.dueAt = new Date(actionItem.dueDate).toISOString(); - } - - try { - const { data } = await axios.post( - `${baseUrl}/rest/tasks`, - taskData, - { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - }, - ); - return data; - } catch (error) { - if (axios.isAxiosError(error)) { - const errorMessage = error.response?.data - ? JSON.stringify(error.response.data, null, 2) - : error.message; - const status = error.response?.status; - throw new Error( - `Failed to create task "${actionItem.title}": ${errorMessage}. Status: ${status}`, - ); - } - throw error; - } -}; - -const createTasksFromActionItems = async ( - actionItems: ActionItem[], - noteId: string, -): Promise => { - const taskIds: string[] = []; - - for (const actionItem of actionItems) { - try { - const taskDescription = `${actionItem.description}\n\n*Related to meeting note: ${noteId}*`; - const task = await createTaskInTwenty({ - ...actionItem, - description: taskDescription, - }); - taskIds.push(task.id); - } catch (error) { - // Task creation failed, continue with next task - } - } - - return taskIds; -}; - -const createTasksFromCommitments = async ( - commitments: Commitment[], - noteId: string, -): Promise => { - const taskIds: string[] = []; - - for (const commitment of commitments) { - try { - const taskDescription = `Commitment from ${commitment.person}: ${commitment.commitment}\n\n*Related to meeting note: ${noteId}*`; - const task = await createTaskInTwenty({ - title: `Follow up: ${commitment.commitment}`, - description: taskDescription, - dueDate: commitment.dueDate, - }); - taskIds.push(task.id); - } catch (error) { - // Commitment task creation failed, continue with next commitment - } - } - - return taskIds; -}; - -export const main = async ( - params: TranscriptWebhookPayload, -): Promise => { - const { transcript, meetingTitle, meetingDate } = params; - - if (!transcript || typeof transcript !== 'string') { - throw new Error('Transcript is required and must be a string'); - } - - const openaiApiKey = process.env.OPENAI_API_KEY; - if (!openaiApiKey) { - throw new Error('OPENAI_API_KEY environment variable is not set'); - } - - const analysis = await analyzeTranscript(transcript, openaiApiKey); - - const note = await createNoteInTwenty( - analysis.summary, - analysis.keyPoints, - meetingTitle, - meetingDate, - ); - - const actionItemTaskIds = await createTasksFromActionItems( - analysis.actionItems, - note.id, - ); - const commitmentTaskIds = await createTasksFromCommitments( - analysis.commitments, - note.id, - ); - - const allTaskIds = [...actionItemTaskIds, ...commitmentTaskIds]; - - return { - success: true, - noteId: note.id, - taskIds: allTaskIds, - summary: { - noteCreated: true, - tasksCreated: allTaskIds.length, - actionItemsProcessed: analysis.actionItems.length, - commitmentsProcessed: analysis.commitments.length, - }, - }; -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: 'dae52ab2-174f-4f81-a031-604ee2e81eba', - name: 'ai-meeting-transcriptor', - triggers: [ - { - universalIdentifier: 'b011303d-2c24-44d4-9923-55eb060a1ff6', - type: 'route', - path: '/webhook/transcript', - httpMethod: 'POST', - isAuthRequired: false, - }, - ], -}; diff --git a/packages/twenty-apps/community/ai-meeting-transcript/tsconfig.json b/packages/twenty-apps/community/ai-meeting-transcript/tsconfig.json deleted file mode 100644 index 17d258af13..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/ai-meeting-transcript/yarn.lock b/packages/twenty-apps/community/ai-meeting-transcript/yarn.lock deleted file mode 100644 index 14ed9e5e7b..0000000000 --- a/packages/twenty-apps/community/ai-meeting-transcript/yarn.lock +++ /dev/null @@ -1,435 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@types/node-fetch@npm:^2.6.4": - version: 2.6.13 - resolution: "@types/node-fetch@npm:2.6.13" - dependencies: - "@types/node": "npm:*" - form-data: "npm:^4.0.4" - checksum: 10c0/6313c89f62c50bd0513a6839cdff0a06727ac5495ccbb2eeda51bb2bbbc4f3c0a76c0393a491b7610af703d3d2deb6cf60e37e59c81ceeca803ffde745dbf309 - languageName: node - linkType: hard - -"@types/node@npm:*, @types/node@npm:^24.7.2": - version: 24.9.2 - resolution: "@types/node@npm:24.9.2" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/7905d43f65cee72ef475fe76316e10bbf6ac5d08a7f0f6c38f2b6285d7ca3009e8fcafc8f8a1d2bf3f55889c9c278dbb203a9081fd0cf2d6d62161703924c6fa - languageName: node - linkType: hard - -"@types/node@npm:^18.11.18": - version: 18.19.130 - resolution: "@types/node@npm:18.19.130" - dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/22ba2bc9f8863101a7e90a56aaeba1eb3ebdc51e847cef4a6d188967ab1acbce9b4f92251372fd0329ecb924bbf610509e122c3dfe346c04dbad04013d4ad7d0 - languageName: node - linkType: hard - -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: "npm:^5.0.0" - checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": - version: 4.6.0 - resolution: "agentkeepalive@npm:4.6.0" - dependencies: - humanize-ms: "npm:^1.2.1" - checksum: 10c0/235c182432f75046835b05f239708107138a40103deee23b6a08caee5136873709155753b394ec212e49e60e94a378189562cb01347765515cff61b692c69187 - languageName: node - linkType: hard - -"ai-meeting-transcript@workspace:.": - version: 0.0.0-use.local - resolution: "ai-meeting-transcript@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - axios: "npm:^1.12.2" - openai: "npm:^4.28.0" - twenty-sdk: "npm:^0.0.2" - languageName: unknown - linkType: soft - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"axios@npm:^1.12.2": - version: 1.13.1 - resolution: "axios@npm:1.13.1" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/de9c3c6de43d3ee1146d3afe78645f19450cac6a5d7235bef8b8e8eeb705c2e47e2d231dea99cecaec4dae1897c521118ca9413b9d474063c719c4d94c5b9adc - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"form-data-encoder@npm:1.7.2": - version: 1.7.2 - resolution: "form-data-encoder@npm:1.7.2" - checksum: 10c0/56553768037b6d55d9de524f97fe70555f0e415e781cb56fc457a68263de3d40fadea2304d4beef2d40b1a851269bd7854e42c362107071892cb5238debe9464 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"formdata-node@npm:^4.3.2": - version: 4.4.1 - resolution: "formdata-node@npm:4.4.1" - dependencies: - node-domexception: "npm:1.0.0" - web-streams-polyfill: "npm:4.0.0-beta.3" - checksum: 10c0/74151e7b228ffb33b565cec69182694ad07cc3fdd9126a8240468bb70a8ba66e97e097072b60bcb08729b24c7ce3fd3e0bd7f1f80df6f9f662b9656786e76f6a - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.6": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: "npm:^2.0.0" - checksum: 10c0/f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"ms@npm:^2.0.0": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"node-domexception@npm:1.0.0": - version: 1.0.0 - resolution: "node-domexception@npm:1.0.0" - checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.7": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"openai@npm:^4.28.0": - version: 4.104.0 - resolution: "openai@npm:4.104.0" - dependencies: - "@types/node": "npm:^18.11.18" - "@types/node-fetch": "npm:^2.6.4" - abort-controller: "npm:^3.0.0" - agentkeepalive: "npm:^4.2.1" - form-data-encoder: "npm:1.7.2" - formdata-node: "npm:^4.3.2" - node-fetch: "npm:^2.6.7" - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true - bin: - openai: bin/cli - checksum: 10c0/c4f2e837684ed96b8cec58c65a584646d667c69918f29052775e2e8c05ff5c860d8b58214a7770bc6895ca8602480420c1db6a5392dd250179eb0b91c2b19a2f - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"twenty-sdk@npm:^0.0.2": - version: 0.0.2 - resolution: "twenty-sdk@npm:0.0.2" - checksum: 10c0/99e6fe86059d847b548c1f03e0f0c59a4d540caf1d28dd4500f1f5f0094196985ded955801274de9e72ff03e3d1f41e9a509b4c2c5a02ffc8a027277b1e35d8e - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"web-streams-polyfill@npm:4.0.0-beta.3": - version: 4.0.0-beta.3 - resolution: "web-streams-polyfill@npm:4.0.0-beta.3" - checksum: 10c0/a9596779db2766990117ed3a158e0b0e9f69b887a6d6ba0779940259e95f99dc3922e534acc3e5a117b5f5905300f527d6fbf8a9f0957faf1d8e585ce3452e8e - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/apollo-enrich/.gitignore b/packages/twenty-apps/community/apollo-enrich/.gitignore deleted file mode 100644 index 001e091528..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.* -.yarn - -# codegen -generated - -# testing -/coverage - -# dev -/dist/ - -.twenty/* -!.twenty/output/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# env files (can opt-in for committing if needed) -.env* - -# typescript -*.tsbuildinfo diff --git a/packages/twenty-apps/community/apollo-enrich/.nvmrc b/packages/twenty-apps/community/apollo-enrich/.nvmrc deleted file mode 100644 index 341cb50613..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -24.5.0 diff --git a/packages/twenty-apps/community/apollo-enrich/.oxlintrc.json b/packages/twenty-apps/community/apollo-enrich/.oxlintrc.json deleted file mode 100644 index 460199b1e6..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/.oxlintrc.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["typescript", "import", "unicorn"], - "categories": { - "correctness": "off" - }, - "ignorePatterns": ["node_modules"], - "rules": { - "func-style": ["error", "declaration", { "allowArrowFunctions": true }], - "no-console": ["warn", { "allow": ["group", "groupCollapsed", "groupEnd"] }], - "no-control-regex": "off", - "no-debugger": "error", - "no-duplicate-imports": "error", - "no-undef": "off", - "no-unused-vars": "off", - "no-redeclare": "off", - "import/no-duplicates": "error", - "typescript/no-redeclare": "error", - "typescript/ban-ts-comment": "error", - "typescript/consistent-type-imports": ["error", { - "prefer": "type-imports", - "fixStyle": "inline-type-imports" - }], - "typescript/explicit-function-return-type": "off", - "typescript/explicit-module-boundary-types": "off", - "typescript/no-empty-object-type": ["error", { - "allowInterfaces": "with-single-extends" - }], - "typescript/no-empty-function": "off", - "typescript/no-explicit-any": "off", - "typescript/no-unused-vars": ["warn", { - "vars": "all", - "varsIgnorePattern": "^_", - "args": "after-used", - "argsIgnorePattern": "^_" - }] - } -} diff --git a/packages/twenty-apps/community/apollo-enrich/.yarnrc.yml b/packages/twenty-apps/community/apollo-enrich/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/apollo-enrich/LLMS.md b/packages/twenty-apps/community/apollo-enrich/LLMS.md deleted file mode 100644 index e218993207..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/LLMS.md +++ /dev/null @@ -1,13 +0,0 @@ -## Base documentation - -- Documentation: https://docs.twenty.com/developers/extend/capabilities/apps -- Rich app example: https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/fixtures/rich-app - -## UUID requirement -- All generated UUIDs must be valid UUID v4. - -## Common Pitfalls - -- Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it. -- Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar. -- Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab. diff --git a/packages/twenty-apps/community/apollo-enrich/README.md b/packages/twenty-apps/community/apollo-enrich/README.md deleted file mode 100644 index 19e6b99201..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/README.md +++ /dev/null @@ -1,51 +0,0 @@ -This is a [Twenty](https://twenty.com) application project bootstrapped with [`create-twenty-app`](https://www.npmjs.com/package/create-twenty-app). - -## Getting Started - -First, authenticate to your workspace: - -```bash -yarn twenty remote add http://localhost:2020 --as local -``` - -Then, start development mode to sync your app and watch for changes: - -```bash -yarn twenty dev -``` - -Open your Twenty instance and go to `/settings/applications` section to see the result. - -## Available Commands - -Run `yarn twenty help` to list all available commands. Common commands: - -```bash -# Remotes & Authentication -yarn twenty remote add http://localhost:2020 --as local # Authenticate with Twenty -yarn twenty remote status # Check auth status -yarn twenty remote switch # Switch default remote -yarn twenty remote list # List all configured remotes -yarn twenty remote remove # Remove a remote - -# Application -yarn twenty dev # Start dev mode (watch, build, sync, and auto-generate typed client) -yarn twenty add # Add a new entity (object, field, function, front-component, role, view, navigation-menu-item) -yarn twenty logs # Stream function logs -yarn twenty exec # Execute a function with JSON payload -yarn twenty uninstall # Uninstall app from workspace -``` - -## LLMs instructions - -Main docs and pitfalls are available in LLMS.md file. - -## Learn More - -To learn more about Twenty applications, take a look at the following resources: - -- [twenty-sdk](https://www.npmjs.com/package/twenty-sdk) - learn about `twenty-sdk` tool. -- [Twenty doc](https://docs.twenty.com/) - Twenty's documentation. -- Join our [Discord](https://discord.gg/cx5n4Jzs57) - -You can check out [the Twenty GitHub repository](https://github.com/twentyhq/twenty) - your feedback and contributions are welcome! diff --git a/packages/twenty-apps/community/apollo-enrich/package.json b/packages/twenty-apps/community/apollo-enrich/package.json deleted file mode 100644 index 0b5ca58b8a..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "apollo-enrich", - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "scripts": { - "twenty": "twenty", - "lint": "oxlint -c .oxlintrc.json .", - "lint:fix": "oxlint --fix -c .oxlintrc.json ." - }, - "dependencies": { - "twenty-sdk": "latest" - }, - "devDependencies": { - "@types/node": "^24.7.2", - "@types/react": "^18.2.0", - "oxlint": "^0.16.0", - "react": "^18.2.0", - "typescript": "^5.9.3" - } -} diff --git a/packages/twenty-apps/community/apollo-enrich/src/application-config.ts b/packages/twenty-apps/community/apollo-enrich/src/application-config.ts deleted file mode 100644 index 733ea0bfd7..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/application-config.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { DEFAULT_ROLE_UNIVERSAL_IDENTIFIER } from 'src/roles/default-role'; -import { defineApplication } from 'twenty-sdk/define'; - -export default defineApplication({ - universalIdentifier: 'ac1d2ed1-8835-4bd4-9043-28b46fdda465', - displayName: 'Apollo enrichment', - description: 'Data enrichment with Apollo to keep your data accurate', - defaultRoleUniversalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, - settingsCustomTabFrontComponentUniversalIdentifier: '50d59f7c-eada-4731-aacd-8e45371e1040', - applicationVariables: { - APOLLO_CLIENT_ID: { - universalIdentifier: '5852219e-7757-463e-9e7c-80980203794c', - isSecret: true, - value: '', - description: 'Apollo Client ID', - }, - APOLLO_CLIENT_SECRET: { - universalIdentifier: 'a032349d-9458-4381-8505-82547276434a', - isSecret: true, - value: '', - description: 'Apollo Client Secret', - }, - APOLLO_OAUTH_URL: { - universalIdentifier: '1d42411c-5809-4093-873a-8121b1302475', - isSecret: false, - value: '', - description: 'Apollo OAuth URL', - }, - APOLLO_REDIRECT_URI: { - universalIdentifier: 'c8d9e0f1-2a3b-4c5d-6e7f-8a9b0c1d2e3f', - isSecret: false, - value: '', - description: 'Apollo OAuth redirect URI', - }, - APOLLO_REGISTERED_URL: { - universalIdentifier: '672a6fce-5565-43bc-9a3b-7f2c33620770', - isSecret: false, - value: '', - description: 'Apollo registered URL', - }, - APOLLO_ACCESS_TOKEN: { - universalIdentifier: '672a6fce-5565-43bc-9a3b-7f2c33620771', - isSecret: true, - value: '', - description: 'Apollo access token', - }, - APOLLO_REFRESH_TOKEN: { - universalIdentifier: '672a6fce-5565-43bc-9a3b-7f2c33620772', - isSecret: true, - value: '', - description: 'Apollo refresh token', - }, - }, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-founded-year.field.ts b/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-founded-year.field.ts deleted file mode 100644 index b65627ebfe..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-founded-year.field.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineField, FieldType, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; - -export default defineField({ - universalIdentifier: 'da15cfc6-3657-457d-8757-4ba11b5bb6e1', - objectUniversalIdentifier: - STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier, - type: FieldType.NUMBER, - name: 'apolloFoundedYear', - label: 'Founded Year', - description: 'Year the company was founded, from Apollo enrichment', - icon: 'IconCalendar', -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-industry.field.ts b/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-industry.field.ts deleted file mode 100644 index 7225113d08..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-industry.field.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineField, FieldType, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; - -export default defineField({ - universalIdentifier: '505532f5-1fc5-4a58-8074-ba9b48650dbc', - objectUniversalIdentifier: - STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier, - type: FieldType.TEXT, - name: 'apolloIndustry', - label: 'Apollo Industry', - description: 'Industry classification from Apollo enrichment', - icon: 'IconBuildingFactory', -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-short-description.field.ts b/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-short-description.field.ts deleted file mode 100644 index 6e551434be..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-short-description.field.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineField, FieldType, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; - -export default defineField({ - universalIdentifier: 'be15e062-b065-48b4-979c-65b9a50e0cb1', - objectUniversalIdentifier: - STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier, - type: FieldType.TEXT, - name: 'apolloShortDescription', - label: 'Apollo Description', - description: 'Short company description from Apollo enrichment', - icon: 'IconFileDescription', -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-total-funding.field.ts b/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-total-funding.field.ts deleted file mode 100644 index 2997e97155..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/fields/apollo-total-funding.field.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineField, FieldType, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; - -export default defineField({ - universalIdentifier: 'c90ae72d-4ddf-4f22-882f-eef98c91e40e', - objectUniversalIdentifier: - STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier, - type: FieldType.CURRENCY, - name: 'apolloTotalFunding', - label: 'Total Funding', - description: 'Total funding raised by the company, from Apollo enrichment', - icon: 'IconCash', -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/front-components/apollo-oauth-cta.tsx b/packages/twenty-apps/community/apollo-enrich/src/front-components/apollo-oauth-cta.tsx deleted file mode 100644 index 7f98b1c3ec..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/front-components/apollo-oauth-cta.tsx +++ /dev/null @@ -1,220 +0,0 @@ -import styled from '@emotion/styled'; -import { useEffect, useState } from 'react'; -import { OAuthApplicationVariables } from 'src/logic-functions/get-oauth-application-variables'; -import { VERIFY_PAGE_PATH } from 'src/logic-functions/get-verify-page'; -import { defineFrontComponent } from 'twenty-sdk/define'; - -const StyledContainer = styled.div` - display: flex; - flex-direction: column; - gap: 8px; - width: 100%; -`; - -const StyledSectionTitle = styled.h3` - color: #333; - font-family: 'Inter', sans-serif; - font-size: 15px; - font-weight: 600; - margin: 0 0 4px 0; -`; - -const StyledSectionSubtitle = styled.p` - color: #818181; - font-family: 'Inter', sans-serif; - font-size: 13px; - font-weight: 400; - margin: 0 0 12px 0; -`; - -const StyledCard = styled.div` - align-items: center; - background: #fff; - border: 1px solid #ebebeb; - border-radius: 8px; - display: flex; - gap: 12px; - padding: 16px; -`; - -const StyledIconContainer = styled.div` - align-items: center; - background: #f5f5f5; - border-radius: 8px; - color: #666; - display: flex; - flex-shrink: 0; - height: 40px; - justify-content: center; - width: 40px; -`; - -const StyledTextContainer = styled.div` - display: flex; - flex: 1; - flex-direction: column; - gap: 2px; - min-width: 0; -`; - -const StyledTitle = styled.span` - color: #333; - font-family: 'Inter', sans-serif; - font-size: 14px; - font-weight: 500; -`; - -const StyledDescription = styled.span` - color: #818181; - font-family: 'Inter', sans-serif; - font-size: 13px; -`; - -const StyledLink = styled.a` - align-items: center; - background: #5e5adb; - border: 1px solid rgba(0, 0, 0, 0.04); - border-radius: 4px; - box-sizing: border-box; - color: #fafafa; - cursor: pointer; - display: inline-flex; - flex-shrink: 0; - font-family: 'Inter', sans-serif; - font-size: 13px; - font-weight: 500; - gap: 4px; - height: 32px; - justify-content: center; - padding: 0 12px; - text-decoration: none; - transition: background 0.1s ease; - white-space: nowrap; - - &:hover { - background: #4b47b8; - } - - &:active { - background: #3c3996; - } - - &:focus { - outline: none; - } -`; - -const StyledConnectedStatus = styled.span` - align-items: center; - background: #10b981; - border-radius: 4px; - color: #fff; - display: inline-flex; - flex-shrink: 0; - font-family: 'Inter', sans-serif; - font-size: 13px; - font-weight: 500; - gap: 6px; - height: 32px; - padding: 0 12px; - white-space: nowrap; -`; - -const StyledIcon = styled.img` - height: 24px; - width: 24px; -`; - -const APOLLO_ICON_URL = 'https://twenty-icons.com/apollo.io'; - -const fetchOAuthApplicationVariables = async (): Promise => { - const backEndUrl = `${process.env.TWENTY_API_URL}/s/oauth/application-variables`; - const response = await fetch(backEndUrl, { - method: 'GET', - }); - const data = await response.json(); - - return data; -}; - -const buildOAuthUrl = (oauthApplicationVariables: OAuthApplicationVariables): string => { - const { apolloOAuthUrl, apolloClientId, apolloRegisteredUrl } = oauthApplicationVariables; - const redirectUri = `${apolloRegisteredUrl}auth/oauth-propagator/callback`; - const state = encodeURIComponent(`${process.env.TWENTY_API_URL}/s${VERIFY_PAGE_PATH}`); - return `${apolloOAuthUrl}?client_id=${apolloClientId}&redirect_uri=${redirectUri}&state=${state}&response_type=code`; -}; - -const ApolloOAuthCta = () => { - const [oauthApplicationVariables, setOAuthApplicationVariables] = - useState(null); - const [isLoading, setIsLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - fetchOAuthApplicationVariables() - .then(setOAuthApplicationVariables) - .catch(setError) - .finally(() => setIsLoading(false)); - }, []); - - if (isLoading) { - return ( - - Connect to Apollo - Enrich your contacts with Apollo data - - - - - - Apollo OAuth - Loading... - - - - ); - } - - if (error || !oauthApplicationVariables) { - return null; - } - - const isConnected = Boolean(oauthApplicationVariables.apolloAccessToken); - const oauthUrl = buildOAuthUrl(oauthApplicationVariables); - - return ( - - Connect to Apollo - Enrich your contacts with Apollo data - - - - - - Apollo OAuth - - {isConnected - ? 'Your Apollo account is connected' - : 'Connect your Apollo account to enrich contacts'} - - - {isConnected ? ( - - āœ“ Connected - - ) : ( - - Connect - - )} - - - ); -}; - -export default defineFrontComponent({ - universalIdentifier: '50d59f7c-eada-4731-aacd-8e45371e1040', - name: 'apollo-oauth-cta', - description: 'CTA button to connect to Apollo Enrichment via OAuth', - component: ApolloOAuthCta, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-authentication-token-pairs.ts b/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-authentication-token-pairs.ts deleted file mode 100644 index 86bd90ace9..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-authentication-token-pairs.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { defineLogicFunction, RoutePayload } from "twenty-sdk/define"; -import { MetadataApiClient } from 'twenty-sdk/clients'; - -export const OAUTH_TOKEN_PAIRS_PATH = '/oauth/token-pairs'; - -type ApolloTokenResponse = { - access_token: string; - token_type: string; - expires_in: number; - refresh_token: string; - scope: string; - created_at: number; -}; - -const getAuthenticationTokenPairs = async ( - code: string, - clientId: string, - clientSecret: string, -): Promise => { - const formData = new URLSearchParams({ - grant_type: 'authorization_code', - client_id: clientId, - client_secret: clientSecret, - code: code, - redirect_uri: 'https://hjsm0q38-3000.uks1.devtunnels.ms/auth/oauth-propagator/callback', - }); - - const response = await fetch('https://app.apollo.io/api/v1/oauth/token', { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: formData.toString(), - }); - - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`Failed to exchange code for tokens: ${response.status} - ${errorText}`); - } - - return response.json(); -}; - -const handler = async (event: RoutePayload): Promise => { - const { queryStringParameters: { code } } = event; - - if (!code) { - throw new Error('Code is required'); - } - - const apolloClientId = process.env.APOLLO_CLIENT_ID ?? ''; - const apolloClientSecret = process.env.APOLLO_CLIENT_SECRET ?? ''; - const applicationId = process.env.APPLICATION_ID ?? ''; - - const metadataClient = new MetadataApiClient({}); - - const tokenPairs = await getAuthenticationTokenPairs( - code, - apolloClientId, - apolloClientSecret, - ); - - await metadataClient.mutation({ - updateOneApplicationVariable: { - __args: { - key: 'APOLLO_ACCESS_TOKEN', - value: tokenPairs.access_token, - applicationId, - }, - }, - }); - - await metadataClient.mutation({ - updateOneApplicationVariable: { - __args: { - key: 'APOLLO_REFRESH_TOKEN', - value: tokenPairs.refresh_token, - applicationId, - }, - }, - }); - return {tokenPairs}; -}; - -export default defineLogicFunction({ - universalIdentifier: '7ccc63a7-ece1-44c0-adbe-805a1baea03a', - name: 'get-authentication-token-pairs', - description: 'Returns the Apollo authentication token pairs', - timeoutSeconds: 10, - handler, - httpRouteTriggerSettings: { - path: OAUTH_TOKEN_PAIRS_PATH, - httpMethod: 'GET', - isAuthRequired: false, - }, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-oauth-application-variables.ts b/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-oauth-application-variables.ts deleted file mode 100644 index c2e1bc72d1..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-oauth-application-variables.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { defineLogicFunction } from 'twenty-sdk/define'; - -export type OAuthApplicationVariables = { - apolloClientId: string; - apolloRegisteredUrl: string; - apolloOAuthUrl: string; - apolloAccessToken: string; - apolloRefreshToken: string; -}; - -const handler = async (): Promise => { - const apolloClientId = process.env.APOLLO_CLIENT_ID ?? ''; - const apolloRegisteredUrl = process.env.APOLLO_REGISTERED_URL ?? ''; - const apolloOAuthUrl = process.env.APOLLO_OAUTH_URL ?? ''; - const apolloAccessToken = process.env.APOLLO_ACCESS_TOKEN ?? ''; - const apolloRefreshToken = process.env.APOLLO_REFRESH_TOKEN ?? ''; - - return { apolloClientId, apolloRegisteredUrl, apolloOAuthUrl, apolloAccessToken, apolloRefreshToken }; -}; - -export default defineLogicFunction({ - universalIdentifier: 'b7c3e8f1-9d4a-4e2b-8f6c-1a5d3e7b9c2f', - name: 'get-oauth-application-variables', - description: 'Returns the Apollo OAuth authorization URL', - timeoutSeconds: 10, - handler, - httpRouteTriggerSettings: { - path: '/oauth/application-variables', - httpMethod: 'GET', - isAuthRequired: false, - }, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-verify-page.ts b/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-verify-page.ts deleted file mode 100644 index 4bd114a1e5..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/get-verify-page.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { defineLogicFunction } from "twenty-sdk/define"; - -export const VERIFY_PAGE_PATH = '/oauth/verify'; - -const buildVerifyPageHtml = (applicationId: string): string => ` - - - Apollo OAuth - Verifying... - - - - -
-

Connecting to Apollo...

-

Please wait while we complete the connection.

- -`; - -const handler = async (): Promise => { - const applicationId = process.env.APPLICATION_ID ?? ''; - - return buildVerifyPageHtml(applicationId); -}; - -export default defineLogicFunction({ - universalIdentifier: '4d74950a-d9c1-4c66-a799-89c1aea4e6b0', - name: 'get-verify-page', - description: 'Returns the Apollo OAuth verify page', - timeoutSeconds: 10, - handler, - httpRouteTriggerSettings: { - path: VERIFY_PAGE_PATH, - httpMethod: 'GET', - isAuthRequired: false, - }, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/on-company-updated.ts b/packages/twenty-apps/community/apollo-enrich/src/logic-functions/on-company-updated.ts deleted file mode 100644 index b5f4a3fd72..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/on-company-updated.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { defineLogicFunction, type DatabaseEventPayload, type ObjectRecordUpdateEvent } from 'twenty-sdk/define'; -import { CoreApiClient } from 'twenty-sdk/clients'; - -type CompanyRecord = { - id: string; - name?: string; - domainName?: { - primaryLinkUrl?: string; - primaryLinkLabel?: string; - }; -}; - -type ApolloOrganization = { - name?: string; - website_url?: string; - linkedin_url?: string; - twitter_url?: string; - estimated_num_employees?: number; - annual_revenue?: number; - total_funding?: number; - street_address?: string; - city?: string; - state?: string; - postal_code?: string; - country?: string; - short_description?: string; - industry?: string; - founded_year?: number; -}; - -type ApolloEnrichResponse = { - organization?: ApolloOrganization; -}; - -const extractDomain = ( - domainName?: CompanyRecord['domainName'], -): string | undefined => { - const url = domainName?.primaryLinkUrl; - - if (!url) { - return undefined; - } - - try { - const hostname = new URL( - url.startsWith('http') ? url : `https://${url}`, - ).hostname; - - return hostname.replace(/^www\./, ''); - } catch { - return url.replace(/^(https?:\/\/)?(www\.)?/, '').split('/')[0]; - } -}; - -const fetchApolloEnrichment = async ( - domain: string, -): Promise => { - const response = await fetch( - `https://api.apollo.io/api/v1/organizations/enrich?domain=${encodeURIComponent(domain)}`, - { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${process.env.APOLLO_ACCESS_TOKEN ?? ''}`, - }, - }, - ); - - const data: ApolloEnrichResponse = await response.json(); - - return data.organization; -}; - -const buildCompanyUpdateData = ( - apolloOrganization: ApolloOrganization, -): Record => { - const updateData: Record = {}; - - if (apolloOrganization.name) { - updateData.name = apolloOrganization.name; - } - - if (apolloOrganization.estimated_num_employees) { - updateData.employees = apolloOrganization.estimated_num_employees; - } - - if (apolloOrganization.linkedin_url) { - updateData.linkedinLink = { - primaryLinkUrl: apolloOrganization.linkedin_url, - primaryLinkLabel: 'LinkedIn', - }; - } - - if (apolloOrganization.twitter_url) { - updateData.xLink = { - primaryLinkUrl: apolloOrganization.twitter_url, - primaryLinkLabel: 'X', - }; - } - - if (apolloOrganization.annual_revenue) { - updateData.annualRecurringRevenue = { - amountMicros: apolloOrganization.annual_revenue * 1_000_000, - currencyCode: 'USD', - }; - } - - const hasAddress = - apolloOrganization.street_address || - apolloOrganization.city || - apolloOrganization.state || - apolloOrganization.country; - - if (hasAddress) { - updateData.address = { - addressStreet1: apolloOrganization.street_address ?? '', - addressCity: apolloOrganization.city ?? '', - addressState: apolloOrganization.state ?? '', - addressPostcode: apolloOrganization.postal_code ?? '', - addressCountry: apolloOrganization.country ?? '', - }; - } - - if (apolloOrganization.industry) { - updateData.apolloIndustry = apolloOrganization.industry; - } - - if (apolloOrganization.short_description) { - updateData.apolloShortDescription = apolloOrganization.short_description; - } - - if (apolloOrganization.founded_year) { - updateData.apolloFoundedYear = apolloOrganization.founded_year; - } - - if (apolloOrganization.total_funding) { - updateData.apolloTotalFunding = { - amountMicros: apolloOrganization.total_funding * 1_000_000, - currencyCode: 'USD', - }; - } - - return updateData; -}; - -const updateCompanyInTwenty = async ( - companyId: string, - updateData: Record, -): Promise => { - const client = new CoreApiClient(); - - const result = await client.mutation({ - updateCompany: { - __args: { - id: companyId, - data: updateData, - }, - id: true, - }, - }); - - if (!result.updateCompany) { - throw new Error(`Failed to update company ${companyId}: no result`); - } -}; - -type CompanyUpdateEvent = DatabaseEventPayload< - ObjectRecordUpdateEvent ->; - -const handler = async ( - event: CompanyUpdateEvent, -): Promise => { - - const { recordId, properties } = event; - const { after: companyAfter } = properties; - - const domain = extractDomain(companyAfter?.domainName); - - if (!domain) { - return { skipped: true, reason: 'no domain found on company' }; - } - - const apolloOrganization = await fetchApolloEnrichment(domain); - - if (!apolloOrganization) { - return { - skipped: true, - reason: `no Apollo data found for ${domain}`, - }; - } - - const updateData = buildCompanyUpdateData(apolloOrganization); - - if (Object.keys(updateData).length === 0) { - return { skipped: true, reason: 'no enrichment data to apply' }; - } - - await updateCompanyInTwenty(recordId, updateData); - - const result = { - enriched: true, - companyId: recordId, - domain, - updatedFields: Object.keys(updateData), - }; - - return result; - -}; - -export default defineLogicFunction({ - universalIdentifier: '6248b3fe-a8af-404a-8e38-19df98f73d81', - name: 'on-company-updated', - description: - 'Enriches company data from Apollo when the company domain is updated', - timeoutSeconds: 30, - handler, - databaseEventTriggerSettings: { - eventName: 'company.updated', - updatedFields: ['domainName'], - }, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/post-install.ts b/packages/twenty-apps/community/apollo-enrich/src/logic-functions/post-install.ts deleted file mode 100644 index 38f3c71459..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/post-install.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { definePostInstallLogicFunction, type InstallLogicFunctionPayload } from 'twenty-sdk/define'; - -const handler = async (payload: InstallLogicFunctionPayload): Promise => { - console.log('Post install logic function executed successfully!', payload.previousVersion); -}; - -export default definePostInstallLogicFunction({ - universalIdentifier: '08292efc-d7ba-4ec3-ab95-e7c33bd3a3bc', - name: 'post-install', - description: 'Runs after installation to set up the application.', - timeoutSeconds: 300, - handler, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/pre-install.ts b/packages/twenty-apps/community/apollo-enrich/src/logic-functions/pre-install.ts deleted file mode 100644 index 0f2fe52200..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/logic-functions/pre-install.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { definePreInstallLogicFunction, type InstallLogicFunctionPayload } from 'twenty-sdk/define'; - -const handler = async (payload: InstallLogicFunctionPayload): Promise => { - console.log('Pre install logic function executed successfully!', payload.previousVersion); -}; - -export default definePreInstallLogicFunction({ - universalIdentifier: 'af7cd86e-149e-466a-8d60-312b6e46d604', - name: 'pre-install', - description: 'Runs before installation to prepare the application.', - timeoutSeconds: 300, - handler, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/src/roles/default-role.ts b/packages/twenty-apps/community/apollo-enrich/src/roles/default-role.ts deleted file mode 100644 index 3b9ab67273..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/src/roles/default-role.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { defineRole } from 'twenty-sdk/define'; - -export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER = - 'b8faae3f-e174-43fa-ab94-715712ae26cb'; - -export default defineRole({ - universalIdentifier: DEFAULT_ROLE_UNIVERSAL_IDENTIFIER, - label: 'Apollo enrich default function role', - description: 'Apollo enrich default function role', - canReadAllObjectRecords: true, - canUpdateAllObjectRecords: true, - canSoftDeleteAllObjectRecords: true, - canDestroyAllObjectRecords: false, - canUpdateAllSettings: true, -}); diff --git a/packages/twenty-apps/community/apollo-enrich/tsconfig.json b/packages/twenty-apps/community/apollo-enrich/tsconfig.json deleted file mode 100644 index 3816867c05..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "jsx": "react-jsx", - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "allowUnreachableCode": false, - "strict": true, - "alwaysStrict": true, - "noImplicitAny": true, - "strictBindCallApply": false, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true, - "paths": { - "src/*": ["./src/*"], - "~/*": ["./*"] - } - }, - "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"] -} diff --git a/packages/twenty-apps/community/apollo-enrich/yarn.lock b/packages/twenty-apps/community/apollo-enrich/yarn.lock deleted file mode 100644 index 6c2a6317e2..0000000000 --- a/packages/twenty-apps/community/apollo-enrich/yarn.lock +++ /dev/null @@ -1,6522 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@alcalzone/ansi-tokenize@npm:^0.1.3": - version: 0.1.3 - resolution: "@alcalzone/ansi-tokenize@npm:0.1.3" - dependencies: - ansi-styles: "npm:^6.2.1" - is-fullwidth-code-point: "npm:^4.0.0" - checksum: 10c0/b88c5708271bb64ce132fc80dac8d5b87fc1699bf3abfdf10ecae40dbb56ab82460818f5746ecdd9870a00be9854e039d5cb3a121b808d0ff6f5bc7d0146cb38 - languageName: node - linkType: hard - -"@ark-ui/react@npm:^5.31.0": - version: 5.32.0 - resolution: "@ark-ui/react@npm:5.32.0" - dependencies: - "@internationalized/date": "npm:3.11.0" - "@zag-js/accordion": "npm:1.34.1" - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/angle-slider": "npm:1.34.1" - "@zag-js/async-list": "npm:1.34.1" - "@zag-js/auto-resize": "npm:1.34.1" - "@zag-js/avatar": "npm:1.34.1" - "@zag-js/carousel": "npm:1.34.1" - "@zag-js/cascade-select": "npm:1.34.1" - "@zag-js/checkbox": "npm:1.34.1" - "@zag-js/clipboard": "npm:1.34.1" - "@zag-js/collapsible": "npm:1.34.1" - "@zag-js/collection": "npm:1.34.1" - "@zag-js/color-picker": "npm:1.34.1" - "@zag-js/color-utils": "npm:1.34.1" - "@zag-js/combobox": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/date-picker": "npm:1.34.1" - "@zag-js/date-utils": "npm:1.34.1" - "@zag-js/dialog": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/drawer": "npm:1.34.1" - "@zag-js/editable": "npm:1.34.1" - "@zag-js/file-upload": "npm:1.34.1" - "@zag-js/file-utils": "npm:1.34.1" - "@zag-js/floating-panel": "npm:1.34.1" - "@zag-js/focus-trap": "npm:1.34.1" - "@zag-js/highlight-word": "npm:1.34.1" - "@zag-js/hover-card": "npm:1.34.1" - "@zag-js/i18n-utils": "npm:1.34.1" - "@zag-js/image-cropper": "npm:1.34.1" - "@zag-js/json-tree-utils": "npm:1.34.1" - "@zag-js/listbox": "npm:1.34.1" - "@zag-js/marquee": "npm:1.34.1" - "@zag-js/menu": "npm:1.34.1" - "@zag-js/navigation-menu": "npm:1.34.1" - "@zag-js/number-input": "npm:1.34.1" - "@zag-js/pagination": "npm:1.34.1" - "@zag-js/password-input": "npm:1.34.1" - "@zag-js/pin-input": "npm:1.34.1" - "@zag-js/popover": "npm:1.34.1" - "@zag-js/presence": "npm:1.34.1" - "@zag-js/progress": "npm:1.34.1" - "@zag-js/qr-code": "npm:1.34.1" - "@zag-js/radio-group": "npm:1.34.1" - "@zag-js/rating-group": "npm:1.34.1" - "@zag-js/react": "npm:1.34.1" - "@zag-js/scroll-area": "npm:1.34.1" - "@zag-js/select": "npm:1.34.1" - "@zag-js/signature-pad": "npm:1.34.1" - "@zag-js/slider": "npm:1.34.1" - "@zag-js/splitter": "npm:1.34.1" - "@zag-js/steps": "npm:1.34.1" - "@zag-js/switch": "npm:1.34.1" - "@zag-js/tabs": "npm:1.34.1" - "@zag-js/tags-input": "npm:1.34.1" - "@zag-js/timer": "npm:1.34.1" - "@zag-js/toast": "npm:1.34.1" - "@zag-js/toggle": "npm:1.34.1" - "@zag-js/toggle-group": "npm:1.34.1" - "@zag-js/tooltip": "npm:1.34.1" - "@zag-js/tour": "npm:1.34.1" - "@zag-js/tree-view": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - peerDependencies: - react: ">=18.0.0" - react-dom: ">=18.0.0" - checksum: 10c0/d05aaa0152124b5a9424bcb2050550fb7aec5b7a914c9cd5bc1405222fb79d23fcfa67b0a9a10535c2f744f64bdd6f1690aac17561c4d4101340728266f97af5 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0": - version: 7.29.0 - resolution: "@babel/code-frame@npm:7.29.0" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.28.5" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.1.1" - checksum: 10c0/d34cc504e7765dfb576a663d97067afb614525806b5cad1a5cc1a7183b916fec8ff57fa233585e3926fd5a9e6b31aae6df91aa81ae9775fb7a28f658d3346f0d - languageName: node - linkType: hard - -"@babel/generator@npm:^7.29.0": - version: 7.29.1 - resolution: "@babel/generator@npm:7.29.1" - dependencies: - "@babel/parser": "npm:^7.29.0" - "@babel/types": "npm:^7.29.0" - "@jridgewell/gen-mapping": "npm:^0.3.12" - "@jridgewell/trace-mapping": "npm:^0.3.28" - jsesc: "npm:^3.0.2" - checksum: 10c0/349086e6876258ef3fb2823030fee0f6c0eb9c3ebe35fc572e16997f8c030d765f636ddc6299edae63e760ea6658f8ee9a2edfa6d6b24c9a80c917916b973551 - languageName: node - linkType: hard - -"@babel/helper-globals@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/helper-globals@npm:7.28.0" - checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.16.7": - version: 7.28.6 - resolution: "@babel/helper-module-imports@npm:7.28.6" - dependencies: - "@babel/traverse": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - checksum: 10c0/b49d8d8f204d9dbfd5ac70c54e533e5269afb3cea966a9d976722b13e9922cc773a653405f53c89acb247d5aebdae4681d631a3ae3df77ec046b58da76eda2ac - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-validator-identifier@npm:7.28.5" - checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": - version: 7.29.0 - resolution: "@babel/parser@npm:7.29.0" - dependencies: - "@babel/types": "npm:^7.29.0" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/333b2aa761264b91577a74bee86141ef733f9f9f6d4fc52548e4847dc35dfbf821f58c46832c637bfa761a6d9909d6a68f7d1ed59e17e4ffbb958dc510c17b62 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3": - version: 7.28.6 - resolution: "@babel/runtime@npm:7.28.6" - checksum: 10c0/358cf2429992ac1c466df1a21c1601d595c46930a13c1d4662fde908d44ee78ec3c183aaff513ecb01ef8c55c3624afe0309eeeb34715672dbfadb7feedb2c0d - languageName: node - linkType: hard - -"@babel/template@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/template@npm:7.28.6" - dependencies: - "@babel/code-frame": "npm:^7.28.6" - "@babel/parser": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - checksum: 10c0/66d87225ed0bc77f888181ae2d97845021838c619944877f7c4398c6748bcf611f216dfd6be74d39016af502bca876e6ce6873db3c49e4ac354c56d34d57e9f5 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.28.6": - version: 7.29.0 - resolution: "@babel/traverse@npm:7.29.0" - dependencies: - "@babel/code-frame": "npm:^7.29.0" - "@babel/generator": "npm:^7.29.0" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.29.0" - "@babel/template": "npm:^7.28.6" - "@babel/types": "npm:^7.29.0" - debug: "npm:^4.3.1" - checksum: 10c0/f63ef6e58d02a9fbf3c0e2e5f1c877da3e0bc57f91a19d2223d53e356a76859cbaf51171c9211c71816d94a0e69efa2732fd27ffc0e1bbc84b636e60932333eb - languageName: node - linkType: hard - -"@babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0": - version: 7.29.0 - resolution: "@babel/types@npm:7.29.0" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.28.5" - checksum: 10c0/23cc3466e83bcbfab8b9bd0edaafdb5d4efdb88b82b3be6728bbade5ba2f0996f84f63b1c5f7a8c0d67efded28300898a5f930b171bb40b311bca2029c4e9b4f - languageName: node - linkType: hard - -"@chakra-ui/react@npm:^3.33.0": - version: 3.33.0 - resolution: "@chakra-ui/react@npm:3.33.0" - dependencies: - "@ark-ui/react": "npm:^5.31.0" - "@emotion/is-prop-valid": "npm:^1.4.0" - "@emotion/serialize": "npm:^1.3.3" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" - "@emotion/utils": "npm:^1.4.2" - "@pandacss/is-valid-prop": "npm:^1.4.2" - csstype: "npm:^3.2.3" - peerDependencies: - "@emotion/react": ">=11" - react: ">=18" - react-dom: ">=18" - checksum: 10c0/eeaab4f785098f19999c315e72a63c2fca9b6e96fa7ca46970e78079794d79e7cb78131c60e571488a47e768215892409c2dd667027bbcf8472830a2ff2976dd - languageName: node - linkType: hard - -"@emotion/babel-plugin@npm:^11.13.5": - version: 11.13.5 - resolution: "@emotion/babel-plugin@npm:11.13.5" - dependencies: - "@babel/helper-module-imports": "npm:^7.16.7" - "@babel/runtime": "npm:^7.18.3" - "@emotion/hash": "npm:^0.9.2" - "@emotion/memoize": "npm:^0.9.0" - "@emotion/serialize": "npm:^1.3.3" - babel-plugin-macros: "npm:^3.1.0" - convert-source-map: "npm:^1.5.0" - escape-string-regexp: "npm:^4.0.0" - find-root: "npm:^1.1.0" - source-map: "npm:^0.5.7" - stylis: "npm:4.2.0" - checksum: 10c0/8ccbfec7defd0e513cb8a1568fa179eac1e20c35fda18aed767f6c59ea7314363ebf2de3e9d2df66c8ad78928dc3dceeded84e6fa8059087cae5c280090aeeeb - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.14.0": - version: 11.14.0 - resolution: "@emotion/cache@npm:11.14.0" - dependencies: - "@emotion/memoize": "npm:^0.9.0" - "@emotion/sheet": "npm:^1.4.0" - "@emotion/utils": "npm:^1.4.2" - "@emotion/weak-memoize": "npm:^0.4.0" - stylis: "npm:4.2.0" - checksum: 10c0/3fa3e7a431ab6f8a47c67132a00ac8358f428c1b6c8421d4b20de9df7c18e95eec04a5a6ff5a68908f98d3280044f247b4965ac63df8302d2c94dba718769724 - languageName: node - linkType: hard - -"@emotion/hash@npm:^0.9.2": - version: 0.9.2 - resolution: "@emotion/hash@npm:0.9.2" - checksum: 10c0/0dc254561a3cc0a06a10bbce7f6a997883fd240c8c1928b93713f803a2e9153a257a488537012efe89dbe1246f2abfe2add62cdb3471a13d67137fcb808e81c2 - languageName: node - linkType: hard - -"@emotion/is-prop-valid@npm:^1.4.0": - version: 1.4.0 - resolution: "@emotion/is-prop-valid@npm:1.4.0" - dependencies: - "@emotion/memoize": "npm:^0.9.0" - checksum: 10c0/5f857814ec7d8c7e727727346dfb001af6b1fb31d621a3ce9c3edf944a484d8b0d619546c30899ae3ade2f317c76390ba4394449728e9bf628312defc2c41ac3 - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.9.0": - version: 0.9.0 - resolution: "@emotion/memoize@npm:0.9.0" - checksum: 10c0/13f474a9201c7f88b543e6ea42f55c04fb2fdc05e6c5a3108aced2f7e7aa7eda7794c56bba02985a46d8aaa914fcdde238727a98341a96e2aec750d372dadd15 - languageName: node - linkType: hard - -"@emotion/react@npm:^11.14.0": - version: 11.14.0 - resolution: "@emotion/react@npm:11.14.0" - dependencies: - "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.13.5" - "@emotion/cache": "npm:^11.14.0" - "@emotion/serialize": "npm:^1.3.3" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" - "@emotion/utils": "npm:^1.4.2" - "@emotion/weak-memoize": "npm:^0.4.0" - hoist-non-react-statics: "npm:^3.3.1" - peerDependencies: - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10c0/d0864f571a9f99ec643420ef31fde09e2006d3943a6aba079980e4d5f6e9f9fecbcc54b8f617fe003c00092ff9d5241179149ffff2810cb05cf72b4620cfc031 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.3.3": - version: 1.3.3 - resolution: "@emotion/serialize@npm:1.3.3" - dependencies: - "@emotion/hash": "npm:^0.9.2" - "@emotion/memoize": "npm:^0.9.0" - "@emotion/unitless": "npm:^0.10.0" - "@emotion/utils": "npm:^1.4.2" - csstype: "npm:^3.0.2" - checksum: 10c0/b28cb7de59de382021de2b26c0c94ebbfb16967a1b969a56fdb6408465a8993df243bfbd66430badaa6800e1834724e84895f5a6a9d97d0d224de3d77852acb4 - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.4.0": - version: 1.4.0 - resolution: "@emotion/sheet@npm:1.4.0" - checksum: 10c0/3ca72d1650a07d2fbb7e382761b130b4a887dcd04e6574b2d51ce578791240150d7072a9bcb4161933abbcd1e38b243a6fb4464a7fe991d700c17aa66bb5acc7 - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.10.0": - version: 0.10.0 - resolution: "@emotion/unitless@npm:0.10.0" - checksum: 10c0/150943192727b7650eb9a6851a98034ddb58a8b6958b37546080f794696141c3760966ac695ab9af97efe10178690987aee4791f9f0ad1ff76783cdca83c1d49 - languageName: node - linkType: hard - -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.2.0" - peerDependencies: - react: ">=16.8.0" - checksum: 10c0/074dbc92b96bdc09209871070076e3b0351b6b47efefa849a7d9c37ab142130767609ca1831da0055988974e3b895c1de7606e4c421fecaa27c3e56a2afd3b08 - languageName: node - linkType: hard - -"@emotion/utils@npm:^1.4.2": - version: 1.4.2 - resolution: "@emotion/utils@npm:1.4.2" - checksum: 10c0/7d0010bf60a2a8c1a033b6431469de4c80e47aeb8fd856a17c1d1f76bbc3a03161a34aeaa78803566e29681ca551e7bf9994b68e9c5f5c796159923e44f78d9a - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.4.0": - version: 0.4.0 - resolution: "@emotion/weak-memoize@npm:0.4.0" - checksum: 10c0/64376af11f1266042d03b3305c30b7502e6084868e33327e944b539091a472f089db307af69240f7188f8bc6b319276fd7b141a36613f1160d73d12a60f6ca1a - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/aix-ppc64@npm:0.25.12" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/aix-ppc64@npm:0.27.3" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm64@npm:0.25.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/android-arm64@npm:0.27.3" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm@npm:0.25.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/android-arm@npm:0.27.3" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-x64@npm:0.25.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/android-x64@npm:0.27.3" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-arm64@npm:0.25.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/darwin-arm64@npm:0.27.3" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-x64@npm:0.25.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/darwin-x64@npm:0.27.3" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-arm64@npm:0.25.12" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/freebsd-arm64@npm:0.27.3" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-x64@npm:0.25.12" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/freebsd-x64@npm:0.27.3" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm64@npm:0.25.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-arm64@npm:0.27.3" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm@npm:0.25.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-arm@npm:0.27.3" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ia32@npm:0.25.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-ia32@npm:0.27.3" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-loong64@npm:0.25.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-loong64@npm:0.27.3" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-mips64el@npm:0.25.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-mips64el@npm:0.27.3" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ppc64@npm:0.25.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-ppc64@npm:0.27.3" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-riscv64@npm:0.25.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-riscv64@npm:0.27.3" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-s390x@npm:0.25.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-s390x@npm:0.27.3" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-x64@npm:0.25.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/linux-x64@npm:0.27.3" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-arm64@npm:0.25.12" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/netbsd-arm64@npm:0.27.3" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-x64@npm:0.25.12" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/netbsd-x64@npm:0.27.3" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-arm64@npm:0.25.12" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/openbsd-arm64@npm:0.27.3" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-x64@npm:0.25.12" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/openbsd-x64@npm:0.27.3" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openharmony-arm64@npm:0.25.12" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/openharmony-arm64@npm:0.27.3" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/sunos-x64@npm:0.25.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/sunos-x64@npm:0.27.3" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-arm64@npm:0.25.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/win32-arm64@npm:0.27.3" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-ia32@npm:0.25.12" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/win32-ia32@npm:0.27.3" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-x64@npm:0.25.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.27.3": - version: 0.27.3 - resolution: "@esbuild/win32-x64@npm:0.27.3" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^2.0.0": - version: 2.1.1 - resolution: "@fastify/busboy@npm:2.1.1" - checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 - languageName: node - linkType: hard - -"@floating-ui/core@npm:^1.7.4": - version: 1.7.4 - resolution: "@floating-ui/core@npm:1.7.4" - dependencies: - "@floating-ui/utils": "npm:^0.2.10" - checksum: 10c0/b1175d92c0edbd0053c4ba014ad1f798ccc107de87a43a099e97af6265610cc25ef600f2b15d3763d39a79f7d36db11fcb84d0c28027beb3317e13a7ba197516 - languageName: node - linkType: hard - -"@floating-ui/dom@npm:^1.7.5": - version: 1.7.5 - resolution: "@floating-ui/dom@npm:1.7.5" - dependencies: - "@floating-ui/core": "npm:^1.7.4" - "@floating-ui/utils": "npm:^0.2.10" - checksum: 10c0/94bd262127fbf1177e542f4908cb07c17392782b1ca0ab9f2dfd7e102cabcc77b4de807847304dcb4c864d4b48e8ba292b27cdcfaca3ad4e3525ab397b766a3a - languageName: node - linkType: hard - -"@floating-ui/utils@npm:^0.2.10": - version: 0.2.10 - resolution: "@floating-ui/utils@npm:0.2.10" - checksum: 10c0/e9bc2a1730ede1ee25843937e911ab6e846a733a4488623cd353f94721b05ec2c9ec6437613a2ac9379a94c2fd40c797a2ba6fa1df2716f5ce4aa6ddb1cf9ea4 - languageName: node - linkType: hard - -"@gar/promise-retry@npm:^1.0.0": - version: 1.0.2 - resolution: "@gar/promise-retry@npm:1.0.2" - dependencies: - retry: "npm:^0.13.1" - checksum: 10c0/748a84fb0ab962f7867966f21dc24d1872c53c1656dd3352320fe69ad3b2043f2dfdb3be024c7636ce4904c5ba1da22d0f3558e489c3de578f5bb520f062d0fd - languageName: node - linkType: hard - -"@genql/cli@npm:^3.0.3": - version: 3.0.5 - resolution: "@genql/cli@npm:3.0.5" - dependencies: - "@graphql-tools/graphql-file-loader": "npm:^7.5.11" - "@graphql-tools/load": "npm:^7.8.6" - fs-extra: "npm:^10.1.0" - graphql: "npm:^16.6.0" - kleur: "npm:^4.1.5" - listr: "npm:^0.14.3" - lodash: "npm:^4.17.21" - mkdirp: "npm:^0.5.1" - native-fetch: "npm:^4.0.2" - prettier: "npm:^2.8.0" - qs: "npm:^6.11.0" - rimraf: "npm:^2.6.3" - undici: "npm:^5.18.0" - yargs: "npm:^15.3.1" - bin: - genql: dist/cli.js - checksum: 10c0/646d4da8986741a8f1b610bd8cfb5bc26cd9a856de671461e4ca87fb05443f37dd0edfb3b30ceaa34cd049077873afa07febfd4714dd2e0681fb07484e19a080 - languageName: node - linkType: hard - -"@genql/runtime@npm:^2.10.0": - version: 2.10.0 - resolution: "@genql/runtime@npm:2.10.0" - dependencies: - "@types/qs": "npm:^6.9.0" - "@types/ws": "npm:^6.0.1" - graphql-query-batcher: "npm:^1.0.1" - isomorphic-unfetch: "npm:^3.0.0" - lodash: "npm:^4.17.20" - subscriptions-transport-ws: "npm:^0.9.16" - tslib: "npm:^2.0.0" - utility-types: "npm:^3.10.0" - ws: "npm:^6.1.4" - zen-observable-ts: "npm:^0.8.21" - peerDependencies: - graphql: "*" - checksum: 10c0/e2a886c2469c933681e2b0ddd6a5b7f4cb12932251ba460e3cf2db4246817da79313ea4ba9769ec7cbe53ab9c1cb81ad8fcce6a969cd241185b79398d2a4f3c6 - languageName: node - linkType: hard - -"@graphql-tools/graphql-file-loader@npm:^7.5.11": - version: 7.5.17 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" - dependencies: - "@graphql-tools/import": "npm:6.7.18" - "@graphql-tools/utils": "npm:^9.2.1" - globby: "npm:^11.0.3" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/f737f14357731ad01da57755e1cf26ce375b475209d6ab7e4b656b56191a8979d2ab7dd5d1c54a1f11e04374f7a373fa95ea5ec6a001d0cef913ea208fadc65b - languageName: node - linkType: hard - -"@graphql-tools/import@npm:6.7.18": - version: 6.7.18 - resolution: "@graphql-tools/import@npm:6.7.18" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - resolve-from: "npm:5.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/d33e37a1879dd43ac2851c9bac2f2873c58bb3687f1c06e159760dbb5e540ef074d688df70cc6dbd3ee5de48d437878df8f65a7c65ae80bd025bf98f2d615732 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^7.8.6": - version: 7.8.14 - resolution: "@graphql-tools/load@npm:7.8.14" - dependencies: - "@graphql-tools/schema": "npm:^9.0.18" - "@graphql-tools/utils": "npm:^9.2.1" - p-limit: "npm:3.1.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/1fa036ac596ccf48f350aa545d108c173184d9b53247f9e21c0d4ba96c5cba4a0b44281f9154f122e1e8e9d9d6eab93a5b2618ca8a797969bde1e75c1d45e786 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:^8.4.1": - version: 8.4.2 - resolution: "@graphql-tools/merge@npm:8.4.2" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/2df55222b48e010e683572f456cf265aabae5748c59f7c1260c66dec9794b7a076d3706f04da969b77f0a32c7ccb4551fee30125931d3fe9c98a8806aae9a3f4 - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:^9.0.18": - version: 9.0.19 - resolution: "@graphql-tools/schema@npm:9.0.19" - dependencies: - "@graphql-tools/merge": "npm:^8.4.1" - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/42fd8ca8d3c8d60b583077c201980518482ff0cd5ed0c1f14bd9b835a2689ad41d02cbd3478f7d7dea7aec1227f7639fd5deb5e6360852a2e542b96b44bfb7a4 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^9.2.1": - version: 9.2.1 - resolution: "@graphql-tools/utils@npm:9.2.1" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.1.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/37a7bd7e14d28ff1bacc007dca84bc6cef2d7d7af9a547b5dbe52fcd134afddd6d4a7b2148cfbaff5ddba91a868453d597da77bd0457fb0be15928f916901606 - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:^3.1.1": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/94e9d75c1f178bbae8d874f5a9361708a3350c8def7eaeb6920f2c820e82403b7d4f55b3735856d68e145e86c85cbfe2adc444fdc25519cd51f108697e99346c - languageName: node - linkType: hard - -"@inquirer/checkbox@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/checkbox@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 - languageName: node - linkType: hard - -"@inquirer/confirm@npm:^3.2.0": - version: 3.2.0 - resolution: "@inquirer/confirm@npm:3.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/a2cbfc8ae9c880bba4cce1993f5c399fb0d12741fdd574917c87fceb40ece62ffa60e35aaadf4e62d7c114f54008e45aee5d6d90497bb62d493996c02725d243 - languageName: node - linkType: hard - -"@inquirer/core@npm:^9.1.0": - version: 9.2.1 - resolution: "@inquirer/core@npm:9.2.1" - dependencies: - "@inquirer/figures": "npm:^1.0.6" - "@inquirer/type": "npm:^2.0.0" - "@types/mute-stream": "npm:^0.0.4" - "@types/node": "npm:^22.5.5" - "@types/wrap-ansi": "npm:^3.0.0" - ansi-escapes: "npm:^4.3.2" - cli-width: "npm:^4.1.0" - mute-stream: "npm:^1.0.0" - signal-exit: "npm:^4.1.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^6.2.0" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 - languageName: node - linkType: hard - -"@inquirer/editor@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/editor@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - external-editor: "npm:^3.1.0" - checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee - languageName: node - linkType: hard - -"@inquirer/expand@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/expand@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 - languageName: node - linkType: hard - -"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6": - version: 1.0.15 - resolution: "@inquirer/figures@npm:1.0.15" - checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 - languageName: node - linkType: hard - -"@inquirer/input@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/input@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f - languageName: node - linkType: hard - -"@inquirer/number@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/number@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 - languageName: node - linkType: hard - -"@inquirer/password@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/password@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f - languageName: node - linkType: hard - -"@inquirer/prompts@npm:^5.5.0": - version: 5.5.0 - resolution: "@inquirer/prompts@npm:5.5.0" - dependencies: - "@inquirer/checkbox": "npm:^2.5.0" - "@inquirer/confirm": "npm:^3.2.0" - "@inquirer/editor": "npm:^2.2.0" - "@inquirer/expand": "npm:^2.3.0" - "@inquirer/input": "npm:^2.3.0" - "@inquirer/number": "npm:^1.1.0" - "@inquirer/password": "npm:^2.2.0" - "@inquirer/rawlist": "npm:^2.3.0" - "@inquirer/search": "npm:^1.1.0" - "@inquirer/select": "npm:^2.5.0" - checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 - languageName: node - linkType: hard - -"@inquirer/rawlist@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/rawlist@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 - languageName: node - linkType: hard - -"@inquirer/search@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/search@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 - languageName: node - linkType: hard - -"@inquirer/select@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/select@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c - languageName: node - linkType: hard - -"@inquirer/type@npm:^1.5.3": - version: 1.5.5 - resolution: "@inquirer/type@npm:1.5.5" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 - languageName: node - linkType: hard - -"@inquirer/type@npm:^2.0.0": - version: 2.0.0 - resolution: "@inquirer/type@npm:2.0.0" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a - languageName: node - linkType: hard - -"@internationalized/date@npm:3.11.0": - version: 3.11.0 - resolution: "@internationalized/date@npm:3.11.0" - dependencies: - "@swc/helpers": "npm:^0.5.0" - checksum: 10c0/05dfa06806cb0c58c51a99ae3ccae2eebeafb645f8d55f2956b448db21996b9eef61c3da0f8b2256e76cd457bfd0efd1ef62f987e547d75611c2fb6ae3dd2bef - languageName: node - linkType: hard - -"@internationalized/number@npm:3.6.5": - version: 3.6.5 - resolution: "@internationalized/number@npm:3.6.5" - dependencies: - "@swc/helpers": "npm:^0.5.0" - checksum: 10c0/f87d710863a8dbf057aac311193c82f3c42e862abdd99e5b71034f1022926036552620eab5dd00c23e975f28b9e41e830cb342ba0264436749d9cdc5ae031d44 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: "npm:^7.0.4" - checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.12": - version: 0.3.13 - resolution: "@jridgewell/gen-mapping@npm:0.3.13" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/9a7d65fb13bd9aec1fbab74cda08496839b7e2ceb31f5ab922b323e94d7c481ce0fc4fd7e12e2610915ed8af51178bdc61e168e92a8c8b8303b030b03489b13b - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.5 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" - checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28": - version: 0.3.31 - resolution: "@jridgewell/trace-mapping@npm:0.3.31" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/agent@npm:4.0.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^11.2.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/f7b5ce0f3dd42c3f8c6546e8433573d8049f67ef11ec22aa4704bc41483122f68bf97752e06302c455ead667af5cb753e6a09bff06632bc465c1cfd4c4b75a53 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^5.0.0": - version: 5.0.0 - resolution: "@npmcli/fs@npm:5.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/26e376d780f60ff16e874a0ac9bc3399186846baae0b6e1352286385ac134d900cc5dafaded77f38d77f86898fc923ae1cee9d7399f0275b1aa24878915d722b - languageName: node - linkType: hard - -"@oxlint/darwin-arm64@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/darwin-arm64@npm:0.16.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@oxlint/darwin-x64@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/darwin-x64@npm:0.16.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@oxlint/linux-arm64-gnu@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/linux-arm64-gnu@npm:0.16.12" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@oxlint/linux-arm64-musl@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/linux-arm64-musl@npm:0.16.12" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@oxlint/linux-x64-gnu@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/linux-x64-gnu@npm:0.16.12" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@oxlint/linux-x64-musl@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/linux-x64-musl@npm:0.16.12" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@oxlint/win32-arm64@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/win32-arm64@npm:0.16.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@oxlint/win32-x64@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/win32-x64@npm:0.16.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@pandacss/is-valid-prop@npm:^1.4.2": - version: 1.8.2 - resolution: "@pandacss/is-valid-prop@npm:1.8.2" - checksum: 10c0/95f36a01b75ae43813ed81c53e1d6963ea5a27b5433df6a807114e2c1273fdc87412db701c06435c7996f3bc758ab8789328dc039a5dba33465f3f1b888a4086 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@preact/signals-core@npm:^1.8.0": - version: 1.13.0 - resolution: "@preact/signals-core@npm:1.13.0" - checksum: 10c0/25f536b90f5dbd116e037a27b51f5ca69914a957b5fa3c1d8af2857d145257fdb106e86cb6e1d5d22bc6feb1215d4448bf208482d2349f832720548bc788ca08 - languageName: node - linkType: hard - -"@quilted/events@npm:^2.1.3": - version: 2.1.3 - resolution: "@quilted/events@npm:2.1.3" - dependencies: - "@preact/signals-core": "npm:^1.8.0" - checksum: 10c0/7f0906c7f15d956f0e9aaa7e736c97b0a130e7cf651efb3b64ffc5868b352197d029acfd55787a36abf41064608421c5653de958b1490e6fb00948a942ee829d - languageName: node - linkType: hard - -"@quilted/threads@npm:^4.0.1": - version: 4.0.1 - resolution: "@quilted/threads@npm:4.0.1" - dependencies: - "@quilted/events": "npm:^2.1.3" - peerDependencies: - "@preact/signals-core": ^1.8.0 - peerDependenciesMeta: - "@preact/signals-core": - optional: true - checksum: 10c0/6156b008e82aeb41aac101777f61da17911e75380acb11fa823155828fa51f4d1f7563b801ffdbb72acff64915be9204e404d5fd8c739a03d90f6593ae75caed - languageName: node - linkType: hard - -"@remote-dom/core@npm:^1.10.1, @remote-dom/core@npm:^1.7.0": - version: 1.10.1 - resolution: "@remote-dom/core@npm:1.10.1" - dependencies: - "@remote-dom/polyfill": "npm:^1.5.1" - htm: "npm:^3.1.1" - peerDependencies: - "@preact/signals-core": ^1.3.0 - peerDependenciesMeta: - "@preact/signals-core": - optional: true - preact: - optional: true - checksum: 10c0/53db62196471f8201665accfad2bc1ca8db4b305d2485bdd57cd700975e93d1ce02f0abf95a90ad1d36dd8c06ff91e81e153bb9dd2ab487a5e7a6f827b3b8145 - languageName: node - linkType: hard - -"@remote-dom/polyfill@npm:^1.5.1": - version: 1.5.1 - resolution: "@remote-dom/polyfill@npm:1.5.1" - checksum: 10c0/753836a286214e9ac8d6246501d4d7824fe600ae4b49c3fe6ac5467934b5a15aeb0f80e773f7c7219f829ac5758be077468ede6da9a5de14260f3627ffcd6e1f - languageName: node - linkType: hard - -"@remote-dom/react@npm:^1.2.2": - version: 1.2.2 - resolution: "@remote-dom/react@npm:1.2.2" - dependencies: - "@remote-dom/core": "npm:^1.7.0" - "@types/react": "npm:^18.0.0" - htm: "npm:^3.1.1" - peerDependencies: - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - react: - optional: true - checksum: 10c0/87883e06dab4a2a52cf9aa6f397166a25054aebf0a9f401bfb67831038dac59fb549754054a297617ba7ca8f33c8967765570fed3cf27a280d921d8f73d2dd64 - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.59.0" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-android-arm64@npm:4.59.0" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-darwin-arm64@npm:4.59.0" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-darwin-x64@npm:4.59.0" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-arm64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.59.0" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-freebsd-x64@npm:4.59.0" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.59.0" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.59.0" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.59.0" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.59.0" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.59.0" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-loong64-musl@npm:4.59.0" - conditions: os=linux & cpu=loong64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.59.0" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.59.0" - conditions: os=linux & cpu=ppc64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.59.0" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.59.0" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.59.0" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.59.0" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.59.0" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-openbsd-x64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-openbsd-x64@npm:4.59.0" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-openharmony-arm64@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.59.0" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.59.0" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.59.0" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-gnu@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.59.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.59.0": - version: 4.59.0 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.59.0" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@samverschueren/stream-to-observable@npm:^0.3.0": - version: 0.3.1 - resolution: "@samverschueren/stream-to-observable@npm:0.3.1" - dependencies: - any-observable: "npm:^0.3.0" - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true - checksum: 10c0/0d874453f6bc2460d71783292291f52feb36c2a75314b1072a6ffe6206562f33e9d664a554348d565a6b54da9041d75070371052545bc329caaa52f64216987f - languageName: node - linkType: hard - -"@sniptt/guards@npm:^0.2.0": - version: 0.2.0 - resolution: "@sniptt/guards@npm:0.2.0" - checksum: 10c0/749bb0f550d1ddd4abdb23dc1076cba26e977659922b73d000bceeb253c09270aaced0d18e92f09d4ce2fdaae33e55f60f2142f5359bc90ba505422af0873526 - languageName: node - linkType: hard - -"@swc/helpers@npm:^0.5.0": - version: 0.5.19 - resolution: "@swc/helpers@npm:0.5.19" - dependencies: - tslib: "npm:^2.8.0" - checksum: 10c0/30317ee644d390c88dd975b11b5260f7c70602bfb81ec386b3807d97a763215df7f501e43b0246e0773150fcfd835349bcdcb3b220d121e485ee528a72b5fd79 - languageName: node - linkType: hard - -"@types/estree@npm:1.0.8": - version: 1.0.8 - resolution: "@types/estree@npm:1.0.8" - checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 - languageName: node - linkType: hard - -"@types/mute-stream@npm:^0.0.4": - version: 0.0.4 - resolution: "@types/mute-stream@npm:0.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/944730fd7b398c5078de3c3d4d0afeec8584283bc694da1803fdfca14149ea385e18b1b774326f1601baf53898ce6d121a952c51eb62d188ef6fcc41f725c0dc - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 25.3.1 - resolution: "@types/node@npm:25.3.1" - dependencies: - undici-types: "npm:~7.18.0" - checksum: 10c0/f4714e3f2c393434cdefbf207f3fe470bcf4d6c5717298c3fc9239e362a57cd25e59603c60e9c956e7d5d0dfb97cf2e037b37cf6dc2f3876f6a963146f7adc6d - languageName: node - linkType: hard - -"@types/node@npm:^22.5.5": - version: 22.19.12 - resolution: "@types/node@npm:22.19.12" - dependencies: - undici-types: "npm:~6.21.0" - checksum: 10c0/562cd3da33ddbe36b753e02e5e7158d44878edf78cc5389d16ff626b5afb5e5d8c0baeec56a08650d8c0581696a209271ca9920ab510c510e315aa6e5cad6c06 - languageName: node - linkType: hard - -"@types/node@npm:^24.7.2": - version: 24.10.14 - resolution: "@types/node@npm:24.10.14" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/d26224c654bb028ec9f917152a4e9e562e589b321c1433d5445bc0f742575822ecb9c7aa6a4d90a73a85971369e4daee05e4101d31741ba1745f27139c0d3fe8 - languageName: node - linkType: hard - -"@types/parse-json@npm:^4.0.0": - version: 4.0.2 - resolution: "@types/parse-json@npm:4.0.2" - checksum: 10c0/b1b863ac34a2c2172fbe0807a1ec4d5cb684e48d422d15ec95980b81475fac4fdb3768a8b13eef39130203a7c04340fc167bae057c7ebcafd7dec9fe6c36aeb1 - languageName: node - linkType: hard - -"@types/prop-types@npm:*": - version: 15.7.15 - resolution: "@types/prop-types@npm:15.7.15" - checksum: 10c0/b59aad1ad19bf1733cf524fd4e618196c6c7690f48ee70a327eb450a42aab8e8a063fbe59ca0a5701aebe2d92d582292c0fb845ea57474f6a15f6994b0e260b2 - languageName: node - linkType: hard - -"@types/qs@npm:^6.9.0": - version: 6.14.0 - resolution: "@types/qs@npm:6.14.0" - checksum: 10c0/5b3036df6e507483869cdb3858201b2e0b64b4793dc4974f188caa5b5732f2333ab9db45c08157975054d3b070788b35088b4bc60257ae263885016ee2131310 - languageName: node - linkType: hard - -"@types/react@npm:^18.0.0, @types/react@npm:^18.2.0": - version: 18.3.28 - resolution: "@types/react@npm:18.3.28" - dependencies: - "@types/prop-types": "npm:*" - csstype: "npm:^3.2.2" - checksum: 10c0/683e19cd12b5c691215529af2e32b5ffbaccae3bf0ba93bfafa0e460e8dfee18423afed568be2b8eadf4b837c3749dd296a4f64e2d79f68fa66962c05f5af661 - languageName: node - linkType: hard - -"@types/wrap-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/wrap-ansi@npm:3.0.0" - checksum: 10c0/8d8f53363f360f38135301a06b596c295433ad01debd082078c33c6ed98b05a5c8fe8853a88265432126096084f4a135ec1564e3daad631b83296905509f90b3 - languageName: node - linkType: hard - -"@types/ws@npm:^6.0.1": - version: 6.0.4 - resolution: "@types/ws@npm:6.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/fa958e64596ca9487c3ed6012834de70b47f25d971f1950cfb8e6a99cb77ff340ae82ac7627744e01b58010674ef8ede07d5a2ac29ca9ad0d67a430fcc69ae14 - languageName: node - linkType: hard - -"@zag-js/accordion@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/accordion@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/2e8aa73867890ceb4ebc32d64d95492f0edf1470deec81e9a1921a69cd75404c7bab04ee3c8837862eb2e88222f49691ff1542a915377acc43f6af25eb028851 - languageName: node - linkType: hard - -"@zag-js/anatomy@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/anatomy@npm:1.34.1" - checksum: 10c0/de99d93e11832cad56a23a215bf1a95ca66e78cf22b4c90b2295a02f5cf7d77334747f5d09d2dc2d5493a63e20bd7c371090e70cf1f7dde03cefdecc8b9d58b5 - languageName: node - linkType: hard - -"@zag-js/angle-slider@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/angle-slider@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/rect-utils": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/95c4a27ff6e0cdb7f8e6bdce09030eec2d64fbfcdfa8f64e9bcce1b4c710c57422724deec09ed6672b7a359bfd3cbe104aeaf3a6695a1c9e7ed3aaad7ebe1b9d - languageName: node - linkType: hard - -"@zag-js/aria-hidden@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/aria-hidden@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - checksum: 10c0/22cdd4eeb4f55406cc2de4f3d575e8616fccf09345d2242f841104ccd96bdc7181dc41fdc6bf66e0a2bba5871067e0c524f4d0dc8dde02010c29a3b73fb9d8ed - languageName: node - linkType: hard - -"@zag-js/async-list@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/async-list@npm:1.34.1" - dependencies: - "@zag-js/core": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/2d89fa1aa74698e720078e6b9f1739b8cc316a9c645dabe6af9444e0a40d7eb53b7dbfce3af95da315f920888c41be4946c7ec047ac7d9cdec2ea6f02b57caef - languageName: node - linkType: hard - -"@zag-js/auto-resize@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/auto-resize@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - checksum: 10c0/9c66699a4521b040ecb3456c212ae40f9a998b411fbe63ff15fd8b80052d0885634560928bbe0da4a7849437a120e3225aec9989180546894dcc262e362514fe - languageName: node - linkType: hard - -"@zag-js/avatar@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/avatar@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/047dac69c4f56ff6d8be6bc026b2832b5d7c251b6dd83b258427cf90693cf6722fd9b4a1164dd17c838d7abed33e30c0cd91bb50d861c1f9c2405f0d2a6290c4 - languageName: node - linkType: hard - -"@zag-js/carousel@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/carousel@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/scroll-snap": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/854dde56d81e45f5736fa386c4a3acf001424c074a75b39bc6ef94c86d447bbe2eac034f481678172b159befbed7731688bf78516e706c4d01d17d066c5e14c5 - languageName: node - linkType: hard - -"@zag-js/cascade-select@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/cascade-select@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/collection": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/rect-utils": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/0f7e397c0576313b7646646db010da175e5cffd78bbae7f6a2823ca68704d5dfff3172bf4041aa405ec469d2f0e47bd37a5f84485d3306fbe4a8f716345f42e5 - languageName: node - linkType: hard - -"@zag-js/checkbox@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/checkbox@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/069216b55073ae5c594c455fe5f95a0b7290e954ce4e002ff408520a8ab3abea8de20fa6c2185a0255e9e8f10e5f0a500c263cc869fc09691eb8a6532bebf162 - languageName: node - linkType: hard - -"@zag-js/clipboard@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/clipboard@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/983fd15aea7d8e38e0dfd0a99c38f899cfc3f20b4db79491d47312f4da6b98e34f211aa0bd8b12b9b6775499d8361951b08290c5e015f5a9867224c83dfde733 - languageName: node - linkType: hard - -"@zag-js/collapsible@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/collapsible@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/747e3b3ebde4187289cbfd2df664cb7d49384e6f7246fe13f9f136da62e53aa375a4593a1c72c9fc57fff890894f76c527f0ac19cd395e6bfb29c1f4ebc0ceaf - languageName: node - linkType: hard - -"@zag-js/collection@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/collection@npm:1.34.1" - dependencies: - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/f5143c13aa541352bfda1a0407b44df1b5a836094f84b9a365433963d4584fa8a8095d5bed6e48345c6b072795d5d7067a93b3c012fa633e34ce09128a4f6ad4 - languageName: node - linkType: hard - -"@zag-js/color-picker@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/color-picker@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/color-utils": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/86a6f05e5538d3782ed7d3fdccd1d047966140eae2438144e3cda26ae92eeeb4a969704cefeb48ecadd52f1103b452867f6a2343a87a77b0bd789146baeb6f11 - languageName: node - linkType: hard - -"@zag-js/color-utils@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/color-utils@npm:1.34.1" - dependencies: - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/c55d11d71d97de8f57dcf50b9c362c0df4a91ac3ff73a4e7c28ed185738aa303d608ad3245a36ce1efb81545c9b14ff08eb014b6ebafa42e36073a7a668c9959 - languageName: node - linkType: hard - -"@zag-js/combobox@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/combobox@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/aria-hidden": "npm:1.34.1" - "@zag-js/collection": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/c7906db9f544ac67f3f2d1801072bbdd395a9aa74b8cce65eab13a9b26a2909f7d62687bc611895b37b073d8adbd9643524915f649280235f22ed7ee92227f5a - languageName: node - linkType: hard - -"@zag-js/core@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/core@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/f51e985a68aee46deff5bd526a5336bd3623624b8cc50acc3ef2bd61544ba49066135445e6b330ec634cb56a981219e73acc8ac7efc250198750b70441edad0e - languageName: node - linkType: hard - -"@zag-js/date-picker@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/date-picker@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/date-utils": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/live-region": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - peerDependencies: - "@internationalized/date": ">=3.0.0" - checksum: 10c0/c691ec37210934dae046a204b08545a69c9646447dd7d16366d356f5339465b2d7d829076d994bf50d61d42ba51c5a894341dabfcc7dcc86cf6134cd803e60ac - languageName: node - linkType: hard - -"@zag-js/date-utils@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/date-utils@npm:1.34.1" - peerDependencies: - "@internationalized/date": ">=3.0.0" - checksum: 10c0/fa6ee2b8989822af068f911a585fc9d9b20e1026b78a6aab0824a99c226fd68a41bf350e47cbea3029477d9dd1d625f46b2de4257502ed0d2423c6669c6ad0fd - languageName: node - linkType: hard - -"@zag-js/dialog@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/dialog@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/aria-hidden": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-trap": "npm:1.34.1" - "@zag-js/remove-scroll": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/ca33802ea4fd5b7bec660a1f2563fe1488ed9e53f7a501d556766fbc79753354f73d55072dc0719649774379e990e6ceb43632509a49bd54cd9f9f17c0745847 - languageName: node - linkType: hard - -"@zag-js/dismissable@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/dismissable@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/interact-outside": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/e0ff57df3861b9f4d4b5db3c81cc3e21a02dea754c18fc8d82d34741c891674378d208febcfc0f6621092dc25dea436e7afde95128adcf0c423c4133b1c559f0 - languageName: node - linkType: hard - -"@zag-js/dom-query@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/dom-query@npm:1.34.1" - dependencies: - "@zag-js/types": "npm:1.34.1" - checksum: 10c0/5864707250a929b31c650b69801f43267bb0b789dc61990b7d961776da668af2ffb7ee0b2738941e6d77ef6c38158eef46f4916fd0f8f93cef1b0f44a7527e9b - languageName: node - linkType: hard - -"@zag-js/drawer@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/drawer@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/aria-hidden": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-trap": "npm:1.34.1" - "@zag-js/remove-scroll": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/1cce6cff32c09db15192550c31c0133cd395e376f188b96b0a18f7f4bec0725f517ff4a5949692648c963d3e44208fc662e54ccc59b3ac573deb4c8fc61d8235 - languageName: node - linkType: hard - -"@zag-js/editable@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/editable@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/interact-outside": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/c25973a26bf1b0a72d8976167c07dba263d06dbbb635e0acb5f02c44fef6230bb8c70e6877207d0fc3051604bca53d615858df2f1ff5211bf234946205855474 - languageName: node - linkType: hard - -"@zag-js/file-upload@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/file-upload@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/file-utils": "npm:1.34.1" - "@zag-js/i18n-utils": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/3c787e53b228f5d6809b56b679dac6b2f76fa2fa578578c4f376480cc035ab1c4a7319713e0604afe9f80db750ebdecc474890e755459ad023ec2d1f118a7ef1 - languageName: node - linkType: hard - -"@zag-js/file-utils@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/file-utils@npm:1.34.1" - dependencies: - "@zag-js/i18n-utils": "npm:1.34.1" - checksum: 10c0/3ed42100edc08aa7b4f5928e99fddafddf615589b63107df77dc396f70943b1801e35889e83bf99b66ff59b55ed9e396a0e77d336dbc894bf0e08cd6586563b7 - languageName: node - linkType: hard - -"@zag-js/floating-panel@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/floating-panel@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/rect-utils": "npm:1.34.1" - "@zag-js/store": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/f592328ff468b264bafcf8a0dfedeae705b9c6d59145d983640fd8f1efc191dd1168fa5658e93bf6626518138a437c3d6a6de07dcb09310837336ad572d45fd6 - languageName: node - linkType: hard - -"@zag-js/focus-trap@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/focus-trap@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - checksum: 10c0/21f5a058e7a2426f4dbb4f338c513202677b8708bfa12c3aa1fffd99cdf1dc7f0239cfe017b57ca4a5cf04987caf7891e2bab1f3404204ec38742c60a079e1f7 - languageName: node - linkType: hard - -"@zag-js/focus-visible@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/focus-visible@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - checksum: 10c0/3320cd4730475fc20ee4faf6d0aa1884ed9459724f46be4303e1be23d7e1bb41e681b693b393126ea3b9e2a6da4228111c9c99272f220a02c6bdb9c4fd615082 - languageName: node - linkType: hard - -"@zag-js/highlight-word@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/highlight-word@npm:1.34.1" - checksum: 10c0/57451ab7c67794b03cdba30f3f8da33e0984722bfdb0b2f188d38f72bee4cfc064e38c4de6966c57295e8ea22fc8d4094289faf26e6dc2fe48455c7ac10b38f8 - languageName: node - linkType: hard - -"@zag-js/hover-card@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/hover-card@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/90d04d2454d2a66c8d5f2b875000cb01d729e5cfbeaae18a982ba0745fca99c7c1aed3369a9ca241711be294504e654531c45df733b0d75bbb41b035aae7f51f - languageName: node - linkType: hard - -"@zag-js/i18n-utils@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/i18n-utils@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - checksum: 10c0/71ab310cfd296442c25c33b9c582b895ba8375b78f122af4a688cdb0199fc1ad54be1df12f49ba34a027a5f526c19fdf8ace2d915f25327085735da74d29e4b8 - languageName: node - linkType: hard - -"@zag-js/image-cropper@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/image-cropper@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/599f35524e230f3d977bdf729b1313a8ea7e2c37ba425a9ea0dcec90fc9698b20733eed312de3daf6e80cc3731a4fcaf09b3848e2b9c23fe63787c52d4a6b891 - languageName: node - linkType: hard - -"@zag-js/interact-outside@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/interact-outside@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/a10773d760802673ba010a29d1f88552473bf4aad06eff4c99408776ff145a22a5d6e1b04b3a18ad2d977d01688a64febb1f82cc5d79ef2fe8338b2d983bad92 - languageName: node - linkType: hard - -"@zag-js/json-tree-utils@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/json-tree-utils@npm:1.34.1" - checksum: 10c0/8372fdc61e6701a4f192389a11028b8495dc5fa2d4fcb7439df3511d5db4fc95a396e9db78d25f16c7f506f72535f8ac7ac4de75a7d7d7ae699f5923caf0159b - languageName: node - linkType: hard - -"@zag-js/listbox@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/listbox@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/collection": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/34fcef510804ac083be4c8a65eee434ed63953134a6e21288628526a7ecf87737efa07c24fbfb66217e13ae00dd17f37cc8ebeb4ac031fa8f2e6e90c093fddd7 - languageName: node - linkType: hard - -"@zag-js/live-region@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/live-region@npm:1.34.1" - checksum: 10c0/e32e85ffd5bde1be61892535c9e0001ada54450802a725968bd762befee382d6a017b5861803922ad5fcb952e65f7599d0a9c518764e75fc900825687c4e8537 - languageName: node - linkType: hard - -"@zag-js/marquee@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/marquee@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/a446658e46f91ea54db0da4d55ef40331ff01ec38e8376e03d8d5fc8ceb9d799fc835e8febb3aa1d8459a74a7a7993bb0d38e9d0a58a348e82678bf3224a22b5 - languageName: node - linkType: hard - -"@zag-js/menu@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/menu@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/rect-utils": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/2172a3925216a40e35ac34789c85a42e8d8cf8886cf4b76b9b927640a2cc60e7fab011b68bc1d078eced745f0139f04bf3c634deda988382bc92e3db7c051398 - languageName: node - linkType: hard - -"@zag-js/navigation-menu@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/navigation-menu@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/28010fecc20f2c68577ae091a591d2445e553657fd7fe2020063da512c35ea98156b1cc43b511c6ac460bf65f43ec9e064a59e151de91e7950091dea174f4c61 - languageName: node - linkType: hard - -"@zag-js/number-input@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/number-input@npm:1.34.1" - dependencies: - "@internationalized/number": "npm:3.6.5" - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/024a8c4a23183d1196d3ee14e346f4189111ab079033af14035761a14bc5e07402511edf67e9f71fa4d79b6927543f17bcc79bf75ef3dad1a5418a45f0561272 - languageName: node - linkType: hard - -"@zag-js/pagination@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/pagination@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/57ea7760d2091e635208e466b72a2ac62411cf711ad427ff7c879d22d9f10cc2c143e1debd655c95a6266fbcfc9d42109cc9ea0c46fae607eb19ad229f8bb1d5 - languageName: node - linkType: hard - -"@zag-js/password-input@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/password-input@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/c424d8ca8de2da243b64935ce4eaccab9ed0e0a573ab6e40b472a225a6618136466b43d4b32082e32927d2ce55e3111af4f9fb79cfd8b6eb80298a9f049073bb - languageName: node - linkType: hard - -"@zag-js/pin-input@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/pin-input@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/c6a274daddfb979ca9147488fc72fbd1ec7ca141867ed3098e8bdf0ddd1a3b23576b9b88cc3d3d1707d8abc32189692dc5c66846ab08dd20ff9aeeccfdf6d5b6 - languageName: node - linkType: hard - -"@zag-js/popover@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/popover@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/aria-hidden": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-trap": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/remove-scroll": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/d5795aa80046506688023d536ef030da6b139f71ff55619aadd6a6d0b2c15efa5e31e1f687cf102cf514cb73118e8be39192c3667a8e0d3fc17fff0f2f6d10d0 - languageName: node - linkType: hard - -"@zag-js/popper@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/popper@npm:1.34.1" - dependencies: - "@floating-ui/dom": "npm:^1.7.5" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/7651e3e29066f83cf6398d947bb03bfc0e03dfbfdffc811ff166cd9551dc01a5c995dd1caaad2ce54173fa50880e6553af7aa18fc3ecea2eea3b8ed7158a3e5f - languageName: node - linkType: hard - -"@zag-js/presence@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/presence@npm:1.34.1" - dependencies: - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - checksum: 10c0/fd2b1aba4ec552517462a5e69a4915b7157b0cdece760d301b9d167946dd5c1c104674487ca90010160b3ce293a31c6ec8a8c4b4764e31c53c2b995a9ba13283 - languageName: node - linkType: hard - -"@zag-js/progress@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/progress@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/5e9382921bcf2fe7eb1ce21988d092ff8a89202e713601683829bcb5bb9fa67279bafb56d30908bb858c1d7ed7fb5487140b5f49fdd3541b7a9405d5d4e3899e - languageName: node - linkType: hard - -"@zag-js/qr-code@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/qr-code@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - proxy-memoize: "npm:3.0.1" - uqr: "npm:0.1.2" - checksum: 10c0/d8402461275457caf588b1c827c2c62cbb243ab2dece9c384cb59993801d2cb7127030eb17e4dc348f8f9cdcb60cb2aa3fc79cb903c4008505fbfa018222c1f0 - languageName: node - linkType: hard - -"@zag-js/radio-group@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/radio-group@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/26e844354fdcd011ef86dbe6b58f70941a0d2005b6ac9e8a7b0f18531ee8851f41516e64f6c95fa59ee70d1e49ac66a27f7180b566b672169131c55307e22643 - languageName: node - linkType: hard - -"@zag-js/rating-group@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/rating-group@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/9ded465a11a4d8af8bfde6c8ec51d22d422f2d1df8dc83261c1f63088a4cc44869dd65102aeeb726b41cf7d2056d22331768ab5254b31d73bc7479dfa0937dd5 - languageName: node - linkType: hard - -"@zag-js/react@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/react@npm:1.34.1" - dependencies: - "@zag-js/core": "npm:1.34.1" - "@zag-js/store": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - peerDependencies: - react: ">=18.0.0" - react-dom: ">=18.0.0" - checksum: 10c0/6b40d050e1d9d0c669be14332261830530be3b97fdd792aa0d21a9251753ba2d0789d2673c4e0795ab8f6ad77301964819696c7d2141273f8a232669aee0cfbb - languageName: node - linkType: hard - -"@zag-js/rect-utils@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/rect-utils@npm:1.34.1" - checksum: 10c0/0cd912c7567e6fa1e8ed3b0e52ac1a18010558098801b145556c28c57b3a6a5889c0c3d7a0b6da5ae28ff582bb4e95eadf74cf7f9381cdaef707813af90831e5 - languageName: node - linkType: hard - -"@zag-js/remove-scroll@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/remove-scroll@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - checksum: 10c0/bb7d0421fc566739c09ce2fe13ab3c386fb6b1fa5f5b3691cb84b0b4a249f1cce842dd669e65762ef0c5b3ce00cc22b4ce897a5809926323d5de5575640f34e6 - languageName: node - linkType: hard - -"@zag-js/scroll-area@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/scroll-area@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/b92d825bd39e55518c783ece02b0d15ac33858fd111aa6a8aafb0c2d3be3ea7a7da96fd99fa9f9f39b783a53cbaa5541255abe9d53b12a910e6530853b36abe6 - languageName: node - linkType: hard - -"@zag-js/scroll-snap@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/scroll-snap@npm:1.34.1" - dependencies: - "@zag-js/dom-query": "npm:1.34.1" - checksum: 10c0/3d269f339a1576be69bd3f68a2c94ff7893b062496d8fb6ca5bfa7d0ada902e8ffdfd34c9ba6b08bbbcd8602ccdbfd7f9348bf2f7cbf489363d03fac34666c07 - languageName: node - linkType: hard - -"@zag-js/select@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/select@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/collection": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/bf6b1cc48fa3fc110ac8540de1e762b5e16b7b72a6c1988f78852d196516328d8f27fbc16afc5c0174e988e94974f022448045f1e03656bdbbbcd9293587197a - languageName: node - linkType: hard - -"@zag-js/signature-pad@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/signature-pad@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - perfect-freehand: "npm:^1.2.2" - checksum: 10c0/ed501b87f36a8045c575e059153a16dbc2f96c23ed54f3eecc07871aed7b99dee4ac26729371816837aa5e6bb31df30945ce4d35a18fdca4fadf92ad2a2a9ab5 - languageName: node - linkType: hard - -"@zag-js/slider@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/slider@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/bb224d22abbdf618a057a534d4fc57eba31cd5757a0c703ab0b478231c68eab89848d4c076c9e3251ac4e5cbf47598647735fb5d0c644490f8fc0b6bb4906120 - languageName: node - linkType: hard - -"@zag-js/splitter@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/splitter@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/0be8c39d003638c22cc9823dd108da2d6305bac7d112d86dbafa503cd5d28fa51e3bd0523f98e61b7dd0922e54d94d415c2eb2280b4508b33feca1e2ca321fc9 - languageName: node - linkType: hard - -"@zag-js/steps@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/steps@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/47c06d606c4b6a6308ceb5ee347a51097615d978db9463590a719abfc3abfa65fddab398f26a7fd701c3484afad268a842fb17b0125f0462f3733b500d051cb6 - languageName: node - linkType: hard - -"@zag-js/store@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/store@npm:1.34.1" - dependencies: - proxy-compare: "npm:3.0.1" - checksum: 10c0/3588d2d1ebdc396089476ea714e72ebd6a84076697a9a114d6189fee9d4ef2cc57a2ec1187742263eff3c2a2feba3c6a986c6e464172f315d96fbfa270d47672 - languageName: node - linkType: hard - -"@zag-js/switch@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/switch@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/1d02859d353469692b861a944db206cc98f4bfa1bfa073324876c2245a8cac7f097e2ba4a458e53b3c91a7671a1357c059210cdfb2f2c5efb3a1f65b63b16019 - languageName: node - linkType: hard - -"@zag-js/tabs@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/tabs@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/5dae58e810d4d23223155540afe4aca0425bb87ea59aaf005e1ae0e90b2d34755cece2fe34b6c24007eb6315172f1a8c2195602665abaf1b257d6df33f5488c0 - languageName: node - linkType: hard - -"@zag-js/tags-input@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/tags-input@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/auto-resize": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/interact-outside": "npm:1.34.1" - "@zag-js/live-region": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/56c4a8641ea6d208a13ec2bdabf36a0f7d85596143613b534ea9c7e638fe4cc7c3c931410497f0c6f744ca658c0887129db391e31f2c16a40f163325f6de1c24 - languageName: node - linkType: hard - -"@zag-js/timer@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/timer@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/8d09d5be391647a05139a2b0c57a66e37a20a5b7452f86c46cd9a89d5f8017c8c2d99c7484e21ea2eede17c461da9e84de16681937bd917bb2355dbb117a4244 - languageName: node - linkType: hard - -"@zag-js/toast@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/toast@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/4ea9b4a25b73abf395a38338a73a7f4c538de7e4e5d751afc1245a8dc1588a8348105134358d9483e49837b76e3f001b7a7fbbdf37c2ac6d44e1a8601e0f184e - languageName: node - linkType: hard - -"@zag-js/toggle-group@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/toggle-group@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/5c8f38300de5a8dc18945f33365b775f856884a8285f372819b425333a2c32844c0a80fa5532a6ab0e490d8e88ca323e1e2d04d49812d417a9416d83c14fdc4e - languageName: node - linkType: hard - -"@zag-js/toggle@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/toggle@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/cd8a4e9446916bef42375c7e220a2575736372c907f18815d10b2f8d92392d2862d3fa51dccde7fb9158cd622d600cfedc3aba9f948af903c15183c14a056393 - languageName: node - linkType: hard - -"@zag-js/tooltip@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/tooltip@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-visible": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/1a7e5747de770656ccfe92a2dd5e9c3d494004ada2f476525791d5e5ec0b4c5820a29e585a97fe9f728fc1eb51c8023f9a855101725b25162a09be807aa6e852 - languageName: node - linkType: hard - -"@zag-js/tour@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/tour@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dismissable": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/focus-trap": "npm:1.34.1" - "@zag-js/interact-outside": "npm:1.34.1" - "@zag-js/popper": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/cf0138be57908523b03d9aabbd4207009996d1be177982b99644c87e173fc465849d85a2777aeef277ad066b6fe8f03785c561d7667e42e5ae605ec6934d83e5 - languageName: node - linkType: hard - -"@zag-js/tree-view@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/tree-view@npm:1.34.1" - dependencies: - "@zag-js/anatomy": "npm:1.34.1" - "@zag-js/collection": "npm:1.34.1" - "@zag-js/core": "npm:1.34.1" - "@zag-js/dom-query": "npm:1.34.1" - "@zag-js/types": "npm:1.34.1" - "@zag-js/utils": "npm:1.34.1" - checksum: 10c0/7996b10878ca55bd194d66ff96d3a80a1670793527d62fc58720abef9bb67ae41cbef95dd929d035d671c19d8440c712e926f4107bd6afa6bafd557bef95fd4c - languageName: node - linkType: hard - -"@zag-js/types@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/types@npm:1.34.1" - dependencies: - csstype: "npm:3.2.3" - checksum: 10c0/caa3eb64ee0408cb7ec9a745b096b59cf1aca2e1d77cc32fc5e93210066cd32a985f797e84efbae7864c32705206cdc7f61dd78b4dd1d5463bb4e6d67156ae57 - languageName: node - linkType: hard - -"@zag-js/utils@npm:1.34.1": - version: 1.34.1 - resolution: "@zag-js/utils@npm:1.34.1" - checksum: 10c0/7b034f4420102422c4fb8c70ee5b22e536f7bfa21e433a61dac6f2da42bee7655f20109b9193bdd3d9c220531fdb8eaa9cb0f9e18df68481c1448ac1fbf8bfc4 - languageName: node - linkType: hard - -"abbrev@npm:^4.0.0": - version: 4.0.0 - resolution: "abbrev@npm:4.0.0" - checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 - languageName: node - linkType: hard - -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: "npm:^5.0.0" - checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.4 - resolution: "agent-base@npm:7.1.4" - checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe - languageName: node - linkType: hard - -"ansi-escapes@npm:^3.0.0": - version: 3.2.0 - resolution: "ansi-escapes@npm:3.2.0" - checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 - languageName: node - linkType: hard - -"ansi-escapes@npm:^7.0.0": - version: 7.3.0 - resolution: "ansi-escapes@npm:7.3.0" - dependencies: - environment: "npm:^1.0.0" - checksum: 10c0/068961d99f0ef28b661a4a9f84a5d645df93ccf3b9b93816cc7d46bbe1913321d4cdf156bb842a4e1e4583b7375c631fa963efb43001c4eb7ff9ab8f78fc0679 - languageName: node - linkType: hard - -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.2.2": - version: 6.2.2 - resolution: "ansi-regex@npm:6.2.2" - checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f - languageName: node - linkType: hard - -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": - version: 6.2.3 - resolution: "ansi-styles@npm:6.2.3" - checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 - languageName: node - linkType: hard - -"any-observable@npm:^0.3.0": - version: 0.3.0 - resolution: "any-observable@npm:0.3.0" - checksum: 10c0/104c2b79c2ac7e6c75b35f8fd62babf73015668f22bd25336c6f848350d91f9e7daf2fddbf1c1b76fe795e89fbc91b49f70a2aec5c69f1acf0562c344f36042b - languageName: node - linkType: hard - -"apollo-enrich@workspace:.": - version: 0.0.0-use.local - resolution: "apollo-enrich@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - "@types/react": "npm:^18.2.0" - oxlint: "npm:^0.16.0" - react: "npm:^18.2.0" - twenty-sdk: "npm:latest" - typescript: "npm:^5.9.3" - languageName: unknown - linkType: soft - -"archiver-utils@npm:^5.0.0, archiver-utils@npm:^5.0.2": - version: 5.0.2 - resolution: "archiver-utils@npm:5.0.2" - dependencies: - glob: "npm:^10.0.0" - graceful-fs: "npm:^4.2.0" - is-stream: "npm:^2.0.1" - lazystream: "npm:^1.0.0" - lodash: "npm:^4.17.15" - normalize-path: "npm:^3.0.0" - readable-stream: "npm:^4.0.0" - checksum: 10c0/3782c5fa9922186aa1a8e41ed0c2867569faa5f15c8e5e6418ea4c1b730b476e21bd68270b3ea457daf459ae23aaea070b2b9f90cf90a59def8dc79b9e4ef538 - languageName: node - linkType: hard - -"archiver@npm:^7.0.1": - version: 7.0.1 - resolution: "archiver@npm:7.0.1" - dependencies: - archiver-utils: "npm:^5.0.2" - async: "npm:^3.2.4" - buffer-crc32: "npm:^1.0.0" - readable-stream: "npm:^4.0.0" - readdir-glob: "npm:^1.1.2" - tar-stream: "npm:^3.0.0" - zip-stream: "npm:^6.0.1" - checksum: 10c0/02afd87ca16f6184f752db8e26884e6eff911c476812a0e7f7b26c4beb09f06119807f388a8e26ed2558aa8ba9db28646ebd147a4f99e46813b8b43158e1438e - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 - languageName: node - linkType: hard - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"async-limiter@npm:~1.0.0": - version: 1.0.1 - resolution: "async-limiter@npm:1.0.1" - checksum: 10c0/0693d378cfe86842a70d4c849595a0bb50dc44c11649640ca982fa90cbfc74e3cc4753b5a0847e51933f2e9c65ce8e05576e75e5e1fd963a086e673735b35969 - languageName: node - linkType: hard - -"async@npm:^3.2.4": - version: 3.2.6 - resolution: "async@npm:3.2.6" - checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"auto-bind@npm:^5.0.1": - version: 5.0.1 - resolution: "auto-bind@npm:5.0.1" - checksum: 10c0/a703375350ea7b6e92405d8e6bcc6dbfb84b0d7c7172b33e5788a7593929a18227999ff9aa9c32436741d06d021e6672457b1cec73287efe3fab95cff6627eaf - languageName: node - linkType: hard - -"axios@npm:^1.13.5": - version: 1.13.5 - resolution: "axios@npm:1.13.5" - dependencies: - follow-redirects: "npm:^1.15.11" - form-data: "npm:^4.0.5" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/abf468c34f2d145f3dc7dbc0f1be67e520630624307bda69a41bbe8d386bd672d87b4405c4ee77f9ff54b235ab02f96a9968fb00e75b13ce64706e352a3068fd - languageName: node - linkType: hard - -"b4a@npm:^1.6.4": - version: 1.8.0 - resolution: "b4a@npm:1.8.0" - peerDependencies: - react-native-b4a: "*" - peerDependenciesMeta: - react-native-b4a: - optional: true - checksum: 10c0/27eab5c50ea1f1314f36256f160d2e6d6950f55f02ee4942732ecafd8bcc4b3a2ed209fab532b288770d41df2befa97a2745175c06471875b716eb87abf31519 - languageName: node - linkType: hard - -"babel-plugin-macros@npm:^3.1.0": - version: 3.1.0 - resolution: "babel-plugin-macros@npm:3.1.0" - dependencies: - "@babel/runtime": "npm:^7.12.5" - cosmiconfig: "npm:^7.0.0" - resolve: "npm:^1.19.0" - checksum: 10c0/c6dfb15de96f67871d95bd2e8c58b0c81edc08b9b087dc16755e7157f357dc1090a8dc60ebab955e92587a9101f02eba07e730adc253a1e4cf593ca3ebd3839c - languageName: node - linkType: hard - -"backo2@npm:^1.0.2": - version: 1.0.2 - resolution: "backo2@npm:1.0.2" - checksum: 10c0/a9e825a6a38a6d1c4a94476eabc13d6127dfaafb0967baf104affbb67806ae26abbb58dab8d572d2cd21ef06634ff57c3ad48dff14b904e18de1474cc2f22bf3 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"balanced-match@npm:^4.0.2": - version: 4.0.4 - resolution: "balanced-match@npm:4.0.4" - checksum: 10c0/07e86102a3eb2ee2a6a1a89164f29d0dbaebd28f2ca3f5ca786f36b8b23d9e417eb3be45a4acf754f837be5ac0a2317de90d3fcb7f4f4dc95720a1f36b26a17b - languageName: node - linkType: hard - -"bare-events@npm:^2.7.0": - version: 2.8.2 - resolution: "bare-events@npm:2.8.2" - peerDependencies: - bare-abort-controller: "*" - peerDependenciesMeta: - bare-abort-controller: - optional: true - checksum: 10c0/53fef240cf2cdcca62f78b6eead90ddb5a59b0929f414b13a63764c2b4f9de98ea8a578d033b04d64bb7b86dfbc402e937984e69950855cc3754c7b63da7db21 - languageName: node - linkType: hard - -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.2 - resolution: "brace-expansion@npm:2.0.2" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf - languageName: node - linkType: hard - -"brace-expansion@npm:^5.0.2": - version: 5.0.3 - resolution: "brace-expansion@npm:5.0.3" - dependencies: - balanced-match: "npm:^4.0.2" - checksum: 10c0/e474d300e581ec56851b3863ff1cf18573170c6d06deb199ccbd03b2119c36975f6ce2abc7b770f5bebddc1ab022661a9fea9b4d56f33315d7bef54d8793869e - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"buffer-crc32@npm:^1.0.0": - version: 1.0.0 - resolution: "buffer-crc32@npm:1.0.0" - checksum: 10c0/8b86e161cee4bb48d5fa622cbae4c18f25e4857e5203b89e23de59e627ab26beb82d9d7999f2b8de02580165f61f83f997beaf02980cdf06affd175b651921ab - languageName: node - linkType: hard - -"buffer@npm:^6.0.3": - version: 6.0.3 - resolution: "buffer@npm:6.0.3" - dependencies: - base64-js: "npm:^1.3.1" - ieee754: "npm:^1.2.1" - checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 - languageName: node - linkType: hard - -"cacache@npm:^20.0.1": - version: 20.0.3 - resolution: "cacache@npm:20.0.3" - dependencies: - "@npmcli/fs": "npm:^5.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^13.0.0" - lru-cache: "npm:^11.1.0" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^7.0.2" - ssri: "npm:^13.0.0" - unique-filename: "npm:^5.0.0" - checksum: 10c0/c7da1ca694d20e8f8aedabd21dc11518f809a7d2b59aa76a1fc655db5a9e62379e465c157ddd2afe34b19230808882288effa6911b2de26a088a6d5645123462 - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2": - version: 1.0.4 - resolution: "call-bound@npm:1.0.4" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - get-intrinsic: "npm:^1.3.0" - checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - -"chalk@npm:^1.0.0, chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - dependencies: - ansi-styles: "npm:^2.2.1" - escape-string-regexp: "npm:^1.0.2" - has-ansi: "npm:^2.0.0" - strip-ansi: "npm:^3.0.0" - supports-color: "npm:^2.0.0" - checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 - languageName: node - linkType: hard - -"chalk@npm:^2.4.1": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:^5.3.0": - version: 5.6.2 - resolution: "chalk@npm:5.6.2" - checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d - languageName: node - linkType: hard - -"chokidar@npm:^4.0.0": - version: 4.0.3 - resolution: "chokidar@npm:4.0.3" - dependencies: - readdirp: "npm:^4.0.1" - checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 - languageName: node - linkType: hard - -"cli-boxes@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-boxes@npm:3.0.0" - checksum: 10c0/4db3e8fbfaf1aac4fb3a6cbe5a2d3fa048bee741a45371b906439b9ffc821c6e626b0f108bdcd3ddf126a4a319409aedcf39a0730573ff050fdd7b6731e99fb9 - languageName: node - linkType: hard - -"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-cursor@npm:2.1.0" - dependencies: - restore-cursor: "npm:^2.0.0" - checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda - languageName: node - linkType: hard - -"cli-cursor@npm:^4.0.0": - version: 4.0.0 - resolution: "cli-cursor@npm:4.0.0" - dependencies: - restore-cursor: "npm:^4.0.0" - checksum: 10c0/e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c - languageName: node - linkType: hard - -"cli-truncate@npm:^0.2.1": - version: 0.2.1 - resolution: "cli-truncate@npm:0.2.1" - dependencies: - slice-ansi: "npm:0.0.4" - string-width: "npm:^1.0.1" - checksum: 10c0/c6caa5e2b70d841c42f4a2270d6fc7129df915f8911e4afa90c79231ccc857cd819a2c90e0707fde04e51ce56b4d71646b843f6cbaff4f7cdcb3b91ed51f6e89 - languageName: node - linkType: hard - -"cli-truncate@npm:^4.0.0": - version: 4.0.0 - resolution: "cli-truncate@npm:4.0.0" - dependencies: - slice-ansi: "npm:^5.0.0" - string-width: "npm:^7.0.0" - checksum: 10c0/d7f0b73e3d9b88cb496e6c086df7410b541b56a43d18ade6a573c9c18bd001b1c3fba1ad578f741a4218fdc794d042385f8ac02c25e1c295a2d8b9f3cb86eb4c - languageName: node - linkType: hard - -"cli-width@npm:^4.1.0": - version: 4.1.0 - resolution: "cli-width@npm:4.1.0" - checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^6.2.0" - checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 - languageName: node - linkType: hard - -"code-excerpt@npm:^4.0.0": - version: 4.0.0 - resolution: "code-excerpt@npm:4.0.0" - dependencies: - convert-to-spaces: "npm:^2.0.1" - checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 - languageName: node - linkType: hard - -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"commander@npm:^12.0.0": - version: 12.1.0 - resolution: "commander@npm:12.1.0" - checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 - languageName: node - linkType: hard - -"compress-commons@npm:^6.0.2": - version: 6.0.2 - resolution: "compress-commons@npm:6.0.2" - dependencies: - crc-32: "npm:^1.2.0" - crc32-stream: "npm:^6.0.0" - is-stream: "npm:^2.0.1" - normalize-path: "npm:^3.0.0" - readable-stream: "npm:^4.0.0" - checksum: 10c0/2347031b7c92c8ed5011b07b93ec53b298fa2cd1800897532ac4d4d1aeae06567883f481b6e35f13b65fc31b190c751df6635434d525562f0203fde76f1f0814 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"convert-source-map@npm:^1.5.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: 10c0/281da55454bf8126cbc6625385928c43479f2060984180c42f3a86c8b8c12720a24eac260624a7d1e090004028d2dee78602330578ceec1a08e27cb8bb0a8a5b - languageName: node - linkType: hard - -"convert-to-spaces@npm:^2.0.1": - version: 2.0.1 - resolution: "convert-to-spaces@npm:2.0.1" - checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 - languageName: node - linkType: hard - -"cosmiconfig@npm:^7.0.0": - version: 7.1.0 - resolution: "cosmiconfig@npm:7.1.0" - dependencies: - "@types/parse-json": "npm:^4.0.0" - import-fresh: "npm:^3.2.1" - parse-json: "npm:^5.0.0" - path-type: "npm:^4.0.0" - yaml: "npm:^1.10.0" - checksum: 10c0/b923ff6af581638128e5f074a5450ba12c0300b71302398ea38dbeabd33bbcaa0245ca9adbedfcf284a07da50f99ede5658c80bb3e39e2ce770a99d28a21ef03 - languageName: node - linkType: hard - -"crc-32@npm:^1.2.0": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" - bin: - crc32: bin/crc32.njs - checksum: 10c0/11dcf4a2e77ee793835d49f2c028838eae58b44f50d1ff08394a610bfd817523f105d6ae4d9b5bef0aad45510f633eb23c903e9902e4409bed1ce70cb82b9bf0 - languageName: node - linkType: hard - -"crc32-stream@npm:^6.0.0": - version: 6.0.0 - resolution: "crc32-stream@npm:6.0.0" - dependencies: - crc-32: "npm:^1.2.0" - readable-stream: "npm:^4.0.0" - checksum: 10c0/bf9c84571ede2d119c2b4f3a9ef5eeb9ff94b588493c0d3862259af86d3679dcce1c8569dd2b0a6eff2f35f5e2081cc1263b846d2538d4054da78cf34f262a3d - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.6": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 - languageName: node - linkType: hard - -"csstype@npm:3.2.3, csstype@npm:^3.0.2, csstype@npm:^3.2.2, csstype@npm:^3.2.3": - version: 3.2.3 - resolution: "csstype@npm:3.2.3" - checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce - languageName: node - linkType: hard - -"date-fns@npm:^1.27.2": - version: 1.30.1 - resolution: "date-fns@npm:1.30.1" - checksum: 10c0/bad6ad7c15180121e15d61ad62a4a214c108d66f35b35f5eeb6ade837a3c29aa4444b9528a93a5374b95ba11231c142276351bf52f4d168676f9a1e17ce3726a - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": - version: 4.4.3 - resolution: "debug@npm:4.4.3" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 - languageName: node - linkType: hard - -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"dotenv@npm:^16.4.0": - version: 16.6.1 - resolution: "dotenv@npm:16.6.1" - checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"elegant-spinner@npm:^1.0.1": - version: 1.0.1 - resolution: "elegant-spinner@npm:1.0.1" - checksum: 10c0/df607c83c20fc3ce56c514175dd5d1ee7f667da00cee13d04d32c70d55e76555091fa236689e691cf7dedba17b0020fec635e499cdde84dbea2ef8639314e5f8 - languageName: node - linkType: hard - -"emoji-regex@npm:^10.3.0": - version: 10.6.0 - resolution: "emoji-regex@npm:10.6.0" - checksum: 10c0/1e4aa097bb007301c3b4b1913879ae27327fdc48e93eeefefe3b87e495eb33c5af155300be951b4349ff6ac084f4403dc9eff970acba7c1c572d89396a9a32d7 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"environment@npm:^1.0.0": - version: 1.1.0 - resolution: "environment@npm:1.1.0" - checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.4 - resolution: "error-ex@npm:1.3.4" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10c0/b9e34ff4778b8f3b31a8377e1c654456f4c41aeaa3d10a1138c3b7635d8b7b2e03eb2475d46d8ae055c1f180a1063e100bffabf64ea7e7388b37735df5328664 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"es-toolkit@npm:^1.22.0": - version: 1.44.0 - resolution: "es-toolkit@npm:1.44.0" - dependenciesMeta: - "@trivago/prettier-plugin-sort-imports@4.3.0": - unplugged: true - prettier-plugin-sort-re-exports@0.0.1: - unplugged: true - checksum: 10c0/b80ff52ddc85ba26914cda57c9d4e46379ccc38c60dc097ef0d065cc0b20f95a16cf8d537969eea600b51c6687b5900a6cce67489db16d5ccc14d47597a29c34 - languageName: node - linkType: hard - -"esbuild@npm:^0.25.0": - version: 0.25.12 - resolution: "esbuild@npm:0.25.12" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.12" - "@esbuild/android-arm": "npm:0.25.12" - "@esbuild/android-arm64": "npm:0.25.12" - "@esbuild/android-x64": "npm:0.25.12" - "@esbuild/darwin-arm64": "npm:0.25.12" - "@esbuild/darwin-x64": "npm:0.25.12" - "@esbuild/freebsd-arm64": "npm:0.25.12" - "@esbuild/freebsd-x64": "npm:0.25.12" - "@esbuild/linux-arm": "npm:0.25.12" - "@esbuild/linux-arm64": "npm:0.25.12" - "@esbuild/linux-ia32": "npm:0.25.12" - "@esbuild/linux-loong64": "npm:0.25.12" - "@esbuild/linux-mips64el": "npm:0.25.12" - "@esbuild/linux-ppc64": "npm:0.25.12" - "@esbuild/linux-riscv64": "npm:0.25.12" - "@esbuild/linux-s390x": "npm:0.25.12" - "@esbuild/linux-x64": "npm:0.25.12" - "@esbuild/netbsd-arm64": "npm:0.25.12" - "@esbuild/netbsd-x64": "npm:0.25.12" - "@esbuild/openbsd-arm64": "npm:0.25.12" - "@esbuild/openbsd-x64": "npm:0.25.12" - "@esbuild/openharmony-arm64": "npm:0.25.12" - "@esbuild/sunos-x64": "npm:0.25.12" - "@esbuild/win32-arm64": "npm:0.25.12" - "@esbuild/win32-ia32": "npm:0.25.12" - "@esbuild/win32-x64": "npm:0.25.12" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b - languageName: node - linkType: hard - -"esbuild@npm:^0.27.0": - version: 0.27.3 - resolution: "esbuild@npm:0.27.3" - dependencies: - "@esbuild/aix-ppc64": "npm:0.27.3" - "@esbuild/android-arm": "npm:0.27.3" - "@esbuild/android-arm64": "npm:0.27.3" - "@esbuild/android-x64": "npm:0.27.3" - "@esbuild/darwin-arm64": "npm:0.27.3" - "@esbuild/darwin-x64": "npm:0.27.3" - "@esbuild/freebsd-arm64": "npm:0.27.3" - "@esbuild/freebsd-x64": "npm:0.27.3" - "@esbuild/linux-arm": "npm:0.27.3" - "@esbuild/linux-arm64": "npm:0.27.3" - "@esbuild/linux-ia32": "npm:0.27.3" - "@esbuild/linux-loong64": "npm:0.27.3" - "@esbuild/linux-mips64el": "npm:0.27.3" - "@esbuild/linux-ppc64": "npm:0.27.3" - "@esbuild/linux-riscv64": "npm:0.27.3" - "@esbuild/linux-s390x": "npm:0.27.3" - "@esbuild/linux-x64": "npm:0.27.3" - "@esbuild/netbsd-arm64": "npm:0.27.3" - "@esbuild/netbsd-x64": "npm:0.27.3" - "@esbuild/openbsd-arm64": "npm:0.27.3" - "@esbuild/openbsd-x64": "npm:0.27.3" - "@esbuild/openharmony-arm64": "npm:0.27.3" - "@esbuild/sunos-x64": "npm:0.27.3" - "@esbuild/win32-arm64": "npm:0.27.3" - "@esbuild/win32-ia32": "npm:0.27.3" - "@esbuild/win32-x64": "npm:0.27.3" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/fdc3f87a3f08b3ef98362f37377136c389a0d180fda4b8d073b26ba930cf245521db0a368f119cc7624bc619248fff1439f5811f062d853576f8ffa3df8ee5f1 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 - languageName: node - linkType: hard - -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b - languageName: node - linkType: hard - -"eventemitter3@npm:^3.1.0": - version: 3.1.2 - resolution: "eventemitter3@npm:3.1.2" - checksum: 10c0/c67262eccbf85848b7cc6d4abb6c6e34155e15686db2a01c57669fd0d44441a574a19d44d25948b442929e065774cbe5003d8e77eed47674fbf876ac77887793 - languageName: node - linkType: hard - -"events-universal@npm:^1.0.0": - version: 1.0.1 - resolution: "events-universal@npm:1.0.1" - dependencies: - bare-events: "npm:^2.7.0" - checksum: 10c0/a1d9a5e9f95843650f8ec240dd1221454c110189a9813f32cdf7185759b43f1f964367ac7dca4ebc69150b59043f2d77c7e122b0d03abf7c25477ea5494785a5 - languageName: node - linkType: hard - -"events@npm:^3.3.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.3 - resolution: "exponential-backoff@npm:3.1.3" - checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 - languageName: node - linkType: hard - -"external-editor@npm:^3.1.0": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 - languageName: node - linkType: hard - -"fast-fifo@npm:^1.2.0, fast-fifo@npm:^1.3.2": - version: 1.3.2 - resolution: "fast-fifo@npm:1.3.2" - checksum: 10c0/d53f6f786875e8b0529f784b59b4b05d4b5c31c651710496440006a398389a579c8dbcd2081311478b5bf77f4b0b21de69109c5a4eabea9d8e8783d1eb864e4c - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.20.1 - resolution: "fastq@npm:1.20.1" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e - languageName: node - linkType: hard - -"fdir@npm:^6.5.0": - version: 6.5.0 - resolution: "fdir@npm:6.5.0" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f - languageName: node - linkType: hard - -"figures@npm:^1.7.0": - version: 1.7.0 - resolution: "figures@npm:1.7.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - object-assign: "npm:^4.1.0" - checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 - languageName: node - linkType: hard - -"figures@npm:^2.0.0": - version: 2.0.0 - resolution: "figures@npm:2.0.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "find-root@npm:1.1.0" - checksum: 10c0/1abc7f3bf2f8d78ff26d9e00ce9d0f7b32e5ff6d1da2857bcdf4746134c422282b091c672cde0572cac3840713487e0a7a636af9aa1b74cb11894b447a521efa - languageName: node - linkType: hard - -"find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.11": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.1 - resolution: "foreground-child@npm:3.3.1" - dependencies: - cross-spawn: "npm:^7.0.6" - signal-exit: "npm:^4.0.1" - checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 - languageName: node - linkType: hard - -"form-data@npm:^4.0.5": - version: 4.0.5 - resolution: "form-data@npm:4.0.5" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b - languageName: node - linkType: hard - -"fs-extra@npm:^10.1.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-extra@npm:^11.2.0": - version: 11.3.3 - resolution: "fs-extra@npm:11.3.3" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/984924ff4104e3e9f351b658a864bf3b354b2c90429f57aec0acd12d92c4e6b762cbacacdffb4e745b280adce882e1f980c485d9f02c453f769ab4e7fc646ce3 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.1": - version: 1.5.0 - resolution: "get-east-asian-width@npm:1.5.0" - checksum: 10c0/bff8bbc8d81790b9477f7aa55b1806b9f082a8dc1359fff7bd8b96939622c86b729685afc2bfeb22def1fc6ef1e5228e4d87dd4e6da60bc43a5edfb03c4ee167 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:^10.0.0": - version: 10.5.0 - resolution: "glob@npm:10.5.0" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/100705eddbde6323e7b35e1d1ac28bcb58322095bd8e63a7d0bef1a2cdafe0d0f7922a981b2b48369a4f8c1b077be5c171804534c3509dfe950dde15fbe6d828 - languageName: node - linkType: hard - -"glob@npm:^13.0.0": - version: 13.0.6 - resolution: "glob@npm:13.0.6" - dependencies: - minimatch: "npm:^10.2.2" - minipass: "npm:^7.1.3" - path-scurry: "npm:^2.0.2" - checksum: 10c0/269c236f11a9b50357fe7a8c6aadac667e01deb5242b19c84975628f05f4438d8ee1354bb62c5d6c10f37fd59911b54d7799730633a2786660d8c69f1d18120a - languageName: node - linkType: hard - -"glob@npm:^7.1.3": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"globby@npm:^11.0.3": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 - languageName: node - linkType: hard - -"globrex@npm:^0.1.2": - version: 0.1.2 - resolution: "globrex@npm:0.1.2" - checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1 - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphql-query-batcher@npm:^1.0.1": - version: 1.0.1 - resolution: "graphql-query-batcher@npm:1.0.1" - checksum: 10c0/804d0f4064721a2116a16b9eac422e9233e85f4ab5b250cb8f83662725658ffde35779a8ae8211037f3dd2f9717de8cb63b394ad8057ce22171a83db2471196a - languageName: node - linkType: hard - -"graphql-sse@npm:^2.5.4": - version: 2.6.0 - resolution: "graphql-sse@npm:2.6.0" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 10c0/e05f0b5c8539d61e5ce34af8e0bb418c02bf922d6a7f9232a9abd53c77df5654684ca14f674ac771645c8fba9c37ce666c5d06f46eef54ea07e63653468065b0 - languageName: node - linkType: hard - -"graphql@npm:^16.6.0, graphql@npm:^16.8.1": - version: 16.13.0 - resolution: "graphql@npm:16.13.0" - checksum: 10c0/c20e7909c6c8d405a30f8caeae5aaf604b9f949bdcdf80bdb3d3561123e6099181c39eae697cf4fcdc5dd301ab215363b8def0aa0ff51f03cc7e4b48a8c2c2b1 - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"hoist-non-react-statics@npm:^3.3.1": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: "npm:^16.7.0" - checksum: 10c0/fe0889169e845d738b59b64badf5e55fa3cf20454f9203d1eb088df322d49d4318df774828e789898dcb280e8a5521bb59b3203385662ca5e9218a6ca5820e74 - languageName: node - linkType: hard - -"htm@npm:^3.1.1": - version: 3.1.1 - resolution: "htm@npm:3.1.1" - checksum: 10c0/0de4c8fff2b8e76c162235ae80dbf93ca5eef1575bd50596a06ce9bebf1a6da5efc467417c53034a9ffa2ab9ecff819cbec041dc9087894b2b900ad4de26c7e7 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.2.0 - resolution: "http-cache-semantics@npm:4.2.0" - checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:4" - checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac - languageName: node - linkType: hard - -"iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.7.2": - version: 0.7.2 - resolution: "iconv-lite@npm:0.7.2" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/3c228920f3bd307f56bf8363706a776f4a060eb042f131cd23855ceca962951b264d0997ab38a1ad340e1c5df8499ed26e1f4f0db6b2a2ad9befaff22f14b722 - languageName: node - linkType: hard - -"ieee754@npm:^1.2.1": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1": - version: 3.3.1 - resolution: "import-fresh@npm:3.3.1" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"indent-string@npm:^3.0.0": - version: 3.2.0 - resolution: "indent-string@npm:3.2.0" - checksum: 10c0/91b6d61621d24944c5c4d365d6f1ff4a490264ccaf1162a602faa0d323e69231db2180ad4ccc092c2f49cf8888cdb3da7b73e904cc0fdeec40d0bfb41ceb9478 - languageName: node - linkType: hard - -"indent-string@npm:^5.0.0": - version: 5.0.0 - resolution: "indent-string@npm:5.0.0" - checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:~2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"ink@npm:^5.1.1": - version: 5.2.1 - resolution: "ink@npm:5.2.1" - dependencies: - "@alcalzone/ansi-tokenize": "npm:^0.1.3" - ansi-escapes: "npm:^7.0.0" - ansi-styles: "npm:^6.2.1" - auto-bind: "npm:^5.0.1" - chalk: "npm:^5.3.0" - cli-boxes: "npm:^3.0.0" - cli-cursor: "npm:^4.0.0" - cli-truncate: "npm:^4.0.0" - code-excerpt: "npm:^4.0.0" - es-toolkit: "npm:^1.22.0" - indent-string: "npm:^5.0.0" - is-in-ci: "npm:^1.0.0" - patch-console: "npm:^2.0.0" - react-reconciler: "npm:^0.29.0" - scheduler: "npm:^0.23.0" - signal-exit: "npm:^3.0.7" - slice-ansi: "npm:^7.1.0" - stack-utils: "npm:^2.0.6" - string-width: "npm:^7.2.0" - type-fest: "npm:^4.27.0" - widest-line: "npm:^5.0.0" - wrap-ansi: "npm:^9.0.0" - ws: "npm:^8.18.0" - yoga-layout: "npm:~3.2.1" - peerDependencies: - "@types/react": ">=18.0.0" - react: ">=18.0.0" - react-devtools-core: ^4.19.1 - peerDependenciesMeta: - "@types/react": - optional: true - react-devtools-core: - optional: true - checksum: 10c0/0e2607712783353fbe99438ca4220db3d5874c7ae1a07e2b232f7539489b13a9db929b3046eedeccf318a3ffa222a572287dbe2307c848b8e7f6ec4bba39e550 - languageName: node - linkType: hard - -"inquirer@npm:^10.0.0": - version: 10.2.2 - resolution: "inquirer@npm:10.2.2" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/prompts": "npm:^5.5.0" - "@inquirer/type": "npm:^1.5.3" - "@types/mute-stream": "npm:^0.0.4" - ansi-escapes: "npm:^4.3.2" - mute-stream: "npm:^1.0.0" - run-async: "npm:^3.0.0" - rxjs: "npm:^7.8.1" - checksum: 10c0/09bcff887a968ce29d3a8cba749ef35b6531b7fb7bf5b28aaf3e10aebae07af2494dd3ec67ae6f1dabe76da1064cfe4514098d4c7658fcaf3fd480b2975d7163 - languageName: node - linkType: hard - -"ip-address@npm:^10.0.1": - version: 10.1.0 - resolution: "ip-address@npm:10.1.0" - checksum: 10c0/0103516cfa93f6433b3bd7333fa876eb21263912329bfa47010af5e16934eeeff86f3d2ae700a3744a137839ddfad62b900c7a445607884a49b5d1e32a3d7566 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 - languageName: node - linkType: hard - -"is-core-module@npm:^2.16.1": - version: 2.16.1 - resolution: "is-core-module@npm:2.16.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: "npm:^1.0.0" - checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^4.0.0": - version: 4.0.0 - resolution: "is-fullwidth-code-point@npm:4.0.0" - checksum: 10c0/df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^5.0.0": - version: 5.1.0 - resolution: "is-fullwidth-code-point@npm:5.1.0" - dependencies: - get-east-asian-width: "npm:^1.3.1" - checksum: 10c0/c1172c2e417fb73470c56c431851681591f6a17233603a9e6f94b7ba870b2e8a5266506490573b607fb1081318589372034aa436aec07b465c2029c0bc7f07a4 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-in-ci@npm:^1.0.0": - version: 1.0.0 - resolution: "is-in-ci@npm:1.0.0" - bin: - is-in-ci: cli.js - checksum: 10c0/98f9cec4c35aece4cf731abf35ebf28359a9b0324fac810da05b842515d9ccb33b8999c1d9a679f0362e1a4df3292065c38d7f86327b1387fa667bc0150f4898 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-observable@npm:^1.1.0": - version: 1.1.0 - resolution: "is-observable@npm:1.1.0" - dependencies: - symbol-observable: "npm:^1.1.0" - checksum: 10c0/cf3166b0822f70ad06e7851e09430166ce658349d54aaa64c93a03320420b9285735821b23164bdce741ff83a86730ac3e53035ce4e2511ed843dbff4105bfa2 - languageName: node - linkType: hard - -"is-promise@npm:^2.1.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"is-stream@npm:^2.0.1": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 - languageName: node - linkType: hard - -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^4.0.0": - version: 4.0.0 - resolution: "isexe@npm:4.0.0" - checksum: 10c0/5884815115bceac452877659a9c7726382531592f43dc29e5d48b7c4100661aed54018cb90bd36cb2eaeba521092570769167acbb95c18d39afdccbcca06c5ce - languageName: node - linkType: hard - -"isomorphic-unfetch@npm:^3.0.0": - version: 3.1.0 - resolution: "isomorphic-unfetch@npm:3.1.0" - dependencies: - node-fetch: "npm:^2.6.1" - unfetch: "npm:^4.2.0" - checksum: 10c0/d3b61fca06304db692b7f76bdfd3a00f410e42cfa7403c3b250546bf71589d18cf2f355922f57198e4cc4a9872d3647b20397a5c3edf1a347c90d57c83cf2a89 - languageName: node - linkType: hard - -"iterall@npm:^1.2.1": - version: 1.3.0 - resolution: "iterall@npm:1.3.0" - checksum: 10c0/40de624e5fe937c4c0e511981b91caea9ff2142bfc0316cccc8506eaa03aa253820cc17c5bc5f0a98706c7268a373e5ebee9af9a0c8a359730cf7c05938b57b5 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"jsesc@npm:^3.0.2": - version: 3.1.0 - resolution: "jsesc@npm:3.1.0" - bin: - jsesc: bin/jsesc - checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 - languageName: node - linkType: hard - -"jsonc-parser@npm:^3.2.0": - version: 3.3.1 - resolution: "jsonc-parser@npm:3.3.1" - checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.2.0 - resolution: "jsonfile@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d - languageName: node - linkType: hard - -"kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a - languageName: node - linkType: hard - -"lazystream@npm:^1.0.0": - version: 1.0.1 - resolution: "lazystream@npm:1.0.1" - dependencies: - readable-stream: "npm:^2.0.5" - checksum: 10c0/ea4e509a5226ecfcc303ba6782cc269be8867d372b9bcbd625c88955df1987ea1a20da4643bf9270336415a398d33531ebf0d5f0d393b9283dc7c98bfcbd7b69 - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d - languageName: node - linkType: hard - -"listr-silent-renderer@npm:^1.1.1": - version: 1.1.1 - resolution: "listr-silent-renderer@npm:1.1.1" - checksum: 10c0/a13e08ebf863516a757bce4887f05290070772113d89095e9f51a07cf0b11a43a7563a67ff3b287c752c08f6d781fdb2123b02957534e3e0675fb564f2a42e1b - languageName: node - linkType: hard - -"listr-update-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-update-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^1.1.3" - cli-truncate: "npm:^0.2.1" - elegant-spinner: "npm:^1.0.1" - figures: "npm:^1.7.0" - indent-string: "npm:^3.0.0" - log-symbols: "npm:^1.0.2" - log-update: "npm:^2.3.0" - strip-ansi: "npm:^3.0.1" - peerDependencies: - listr: ^0.14.2 - checksum: 10c0/8ade44bf3dc6146c8e0178000619439e8889792c4689b66be6ce82bd459f5fe462ecb34b05147fb206a8ad60e6d4e6f34c9f48038e18366f867fd972688b8edc - languageName: node - linkType: hard - -"listr-verbose-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-verbose-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^2.4.1" - cli-cursor: "npm:^2.1.0" - date-fns: "npm:^1.27.2" - figures: "npm:^2.0.0" - checksum: 10c0/041cd1e82da7054f27ae0a914e98b40d15faf9f950ef850578fc6241d3fff3c2d7158a4f6226006e566b4c47bf445be2d254dd1ce5c16569a3a5dcd575bec656 - languageName: node - linkType: hard - -"listr@npm:^0.14.3": - version: 0.14.3 - resolution: "listr@npm:0.14.3" - dependencies: - "@samverschueren/stream-to-observable": "npm:^0.3.0" - is-observable: "npm:^1.1.0" - is-promise: "npm:^2.1.0" - is-stream: "npm:^1.1.0" - listr-silent-renderer: "npm:^1.1.1" - listr-update-renderer: "npm:^0.5.0" - listr-verbose-renderer: "npm:^0.5.0" - p-map: "npm:^2.0.0" - rxjs: "npm:^6.3.3" - checksum: 10c0/753d518218c423f46bee8eeacccecadfd2e414ba9c0f602e7f85fe3f6fa18404dfab0812433aeda4683ee2548358488f597ac1a3d321196baec5d3149b200b10 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 - languageName: node - linkType: hard - -"lodash.camelcase@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.camelcase@npm:4.3.0" - checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 - languageName: node - linkType: hard - -"lodash.kebabcase@npm:^4.1.1": - version: 4.1.1 - resolution: "lodash.kebabcase@npm:4.1.1" - checksum: 10c0/da5d8f41dbb5bc723d4bf9203d5096ca8da804d6aec3d2b56457156ba6c8d999ff448d347ebd97490da853cb36696ea4da09a431499f1ee8deb17b094ecf4e33 - languageName: node - linkType: hard - -"lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21": - version: 4.17.23 - resolution: "lodash@npm:4.17.23" - checksum: 10c0/1264a90469f5bb95d4739c43eb6277d15b6d9e186df4ac68c3620443160fc669e2f14c11e7d8b2ccf078b81d06147c01a8ccced9aab9f9f63d50dcf8cace6bf6 - languageName: node - linkType: hard - -"log-symbols@npm:^1.0.2": - version: 1.0.2 - resolution: "log-symbols@npm:1.0.2" - dependencies: - chalk: "npm:^1.0.0" - checksum: 10c0/c64e1fe41d0d043840f8b592d043b8607a836b846506f525a53d99d578561f02f97b2cba1d2b3c30bae5311d64b308d5a392a9930d252b906a9042fc2877da7a - languageName: node - linkType: hard - -"log-update@npm:^2.3.0": - version: 2.3.0 - resolution: "log-update@npm:2.3.0" - dependencies: - ansi-escapes: "npm:^3.0.0" - cli-cursor: "npm:^2.0.0" - wrap-ansi: "npm:^3.0.1" - checksum: 10c0/9bf21b138801ab4770a2bfa735161cf005b869360eaf5003a84ba64ddc5f5c3ce7217f4f1fa79d9c1f510d792213b2c9800327228e94df05859d19b716215d90 - languageName: node - linkType: hard - -"loose-envify@npm:^1.1.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: "npm:^3.0.0 || ^4.0.0" - bin: - loose-envify: cli.js - checksum: 10c0/655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e - languageName: node - linkType: hard - -"lru-cache@npm:^10.2.0": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": - version: 11.2.6 - resolution: "lru-cache@npm:11.2.6" - checksum: 10c0/73bbffb298760e71b2bfe8ebc16a311c6a60ceddbba919cfedfd8635c2d125fbfb5a39b71818200e67973b11f8d59c5a9e31d6f90722e340e90393663a66e5cd - languageName: node - linkType: hard - -"make-fetch-happen@npm:^15.0.0": - version: 15.0.4 - resolution: "make-fetch-happen@npm:15.0.4" - dependencies: - "@gar/promise-retry": "npm:^1.0.0" - "@npmcli/agent": "npm:^4.0.0" - cacache: "npm:^20.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^5.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^6.0.0" - ssri: "npm:^13.0.0" - checksum: 10c0/b874bf6879fc0b8ef3a3cafdddadea4d956acf94790f8dede1a9d3c74c7886b6cd3eb992616b8e5935e6fd550016a465f10ba51bf6723a0c6f4d98883ae2926b - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mimic-fn@npm:^1.0.0": - version: 1.2.0 - resolution: "mimic-fn@npm:1.2.0" - checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 - languageName: node - linkType: hard - -"minimatch@npm:^10.2.2": - version: 10.2.4 - resolution: "minimatch@npm:10.2.4" - dependencies: - brace-expansion: "npm:^5.0.2" - checksum: 10c0/35f3dfb7b99b51efd46afd378486889f590e7efb10e0f6a10ba6800428cf65c9a8dedb74427d0570b318d749b543dc4e85f06d46d2858bc8cac7e1eb49a95945 - languageName: node - linkType: hard - -"minimatch@npm:^3.1.1": - version: 3.1.5 - resolution: "minimatch@npm:3.1.5" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/2ecbdc0d33f07bddb0315a8b5afbcb761307a8778b48f0b312418ccbced99f104a2d17d8aca7573433c70e8ccd1c56823a441897a45e384ea76ef401a26ace70 - languageName: node - linkType: hard - -"minimatch@npm:^5.1.0": - version: 5.1.9 - resolution: "minimatch@npm:5.1.9" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/4202718683815a7288b13e470160a4f9560cf392adef4f453927505817e01ef6b3476ecde13cfcaed17e7326dd3b69ad44eb2daeb19a217c5500f9277893f1d6 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.4": - version: 9.0.8 - resolution: "minimatch@npm:9.0.8" - dependencies: - brace-expansion: "npm:^5.0.2" - checksum: 10c0/963e435e30546a5dd09900f916c785efa78aea3b416f0c7b3f5876b23538fecd8056c619b8b00ab545c1bcedbc385566e46735461e45a44e864710f86ed4ed23 - languageName: node - linkType: hard - -"minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^5.0.0": - version: 5.0.2 - resolution: "minipass-fetch@npm:5.0.2" - dependencies: - iconv-lite: "npm:^0.7.2" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^2.0.0" - minizlib: "npm:^3.0.1" - dependenciesMeta: - iconv-lite: - optional: true - checksum: 10c0/ce4ab9f21cfabaead2097d95dd33f485af8072fbc6b19611bce694965393453a1639d641c2bcf1c48f2ea7d41ea7fab8278373f1d0bee4e63b0a5b2cdd0ef649 - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^2.0.0": - version: 2.0.0 - resolution: "minipass-sized@npm:2.0.0" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/f9201696a6f6d68610d04c9c83e3d2e5cb9c026aae1c8cbf7e17f386105cb79c1bb088dbc21bf0b1eb4f3fb5df384fd1e7aa3bf1f33868c416ae8c8a92679db8 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3": - version: 7.1.3 - resolution: "minipass@npm:7.1.3" - checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": - version: 3.1.0 - resolution: "minizlib@npm:3.1.0" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec - languageName: node - linkType: hard - -"mkdirp@npm:^0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 - languageName: node - linkType: hard - -"ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c - languageName: node - linkType: hard - -"nanoid@npm:^3.3.11": - version: 3.3.11 - resolution: "nanoid@npm:3.3.11" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b - languageName: node - linkType: hard - -"native-fetch@npm:^4.0.2": - version: 4.0.2 - resolution: "native-fetch@npm:4.0.2" - peerDependencies: - undici: "*" - checksum: 10c0/e3b824721daaa628086d9dcd02e8eb12f0a6c5e13a1d182682bae238d80c9bbf3dfd6314a94692ebe20316aa354476804b4df148201d066b46fc552a5794cfab - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.1": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 12.2.0 - resolution: "node-gyp@npm:12.2.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^15.0.0" - nopt: "npm:^9.0.0" - proc-log: "npm:^6.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.5.4" - tinyglobby: "npm:^0.2.12" - which: "npm:^6.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/3ed046746a5a7d90950cd8b0547332b06598443f31fe213ef4332a7174c7b7d259e1704835feda79b87d3f02e59d7791842aac60642ede4396ab25fdf0f8f759 - languageName: node - linkType: hard - -"nopt@npm:^9.0.0": - version: 9.0.0 - resolution: "nopt@npm:9.0.0" - dependencies: - abbrev: "npm:^4.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: "npm:^1.0.1" - checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.0": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3": - version: 1.13.4 - resolution: "object-inspect@npm:1.13.4" - checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"onetime@npm:^2.0.0": - version: 2.0.1 - resolution: "onetime@npm:2.0.1" - dependencies: - mimic-fn: "npm:^1.0.0" - checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 - languageName: node - linkType: hard - -"onetime@npm:^5.1.0": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: "npm:^2.1.0" - checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 - languageName: node - linkType: hard - -"oxlint@npm:^0.16.0": - version: 0.16.12 - resolution: "oxlint@npm:0.16.12" - dependencies: - "@oxlint/darwin-arm64": "npm:0.16.12" - "@oxlint/darwin-x64": "npm:0.16.12" - "@oxlint/linux-arm64-gnu": "npm:0.16.12" - "@oxlint/linux-arm64-musl": "npm:0.16.12" - "@oxlint/linux-x64-gnu": "npm:0.16.12" - "@oxlint/linux-x64-musl": "npm:0.16.12" - "@oxlint/win32-arm64": "npm:0.16.12" - "@oxlint/win32-x64": "npm:0.16.12" - dependenciesMeta: - "@oxlint/darwin-arm64": - optional: true - "@oxlint/darwin-x64": - optional: true - "@oxlint/linux-arm64-gnu": - optional: true - "@oxlint/linux-arm64-musl": - optional: true - "@oxlint/linux-x64-gnu": - optional: true - "@oxlint/linux-x64-musl": - optional: true - "@oxlint/win32-arm64": - optional: true - "@oxlint/win32-x64": - optional: true - bin: - oxc_language_server: bin/oxc_language_server - oxlint: bin/oxlint - checksum: 10c0/209c3484039c4f1fdd340689e81be93a70fdf74e8c111731e70d81580d223b0029439107c95fa4118cec3c9b03ba6c56624d3dcb8cdc79af222da3561122b3e7 - languageName: node - linkType: hard - -"p-limit@npm:3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 - languageName: node - linkType: hard - -"p-map@npm:^2.0.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.4 - resolution: "p-map@npm:7.0.4" - checksum: 10c0/a5030935d3cb2919d7e89454d1ce82141e6f9955413658b8c9403cfe379283770ed3048146b44cde168aa9e8c716505f196d5689db0ae3ce9a71521a2fef3abd - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": "npm:^7.0.0" - error-ex: "npm:^1.3.1" - json-parse-even-better-errors: "npm:^2.3.0" - lines-and-columns: "npm:^1.1.6" - checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 - languageName: node - linkType: hard - -"patch-console@npm:^2.0.0": - version: 2.0.0 - resolution: "patch-console@npm:2.0.0" - checksum: 10c0/486602591a0af7af8d4c76d8eea42cad32b6de7200488819c6383c75e43733ca7bdc80e30f2e68ce05f06a1607cce1683a1706c6672ca27dada1921b366e8f1c - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"path-scurry@npm:^2.0.2": - version: 2.0.2 - resolution: "path-scurry@npm:2.0.2" - dependencies: - lru-cache: "npm:^11.0.0" - minipass: "npm:^7.1.2" - checksum: 10c0/b35ad37cf6557a87fd057121ce2be7695380c9138d93e87ae928609da259ea0a170fac6f3ef1eb3ece8a068e8b7f2f3adf5bb2374cf4d4a57fe484954fcc9482 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"perfect-freehand@npm:^1.2.2": - version: 1.2.3 - resolution: "perfect-freehand@npm:1.2.3" - checksum: 10c0/89005beef0bd99258eb924046927201e26cafd0bd9c47eb30f4559d31be966d69c01382d1bdd09757a2912ff446f6bf0eadc87a1d53425aff07b449b3cb151fa - languageName: node - linkType: hard - -"picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - -"picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 - languageName: node - linkType: hard - -"postcss@npm:^8.5.6": - version: 8.5.6 - resolution: "postcss@npm:8.5.6" - dependencies: - nanoid: "npm:^3.3.11" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/5127cc7c91ed7a133a1b7318012d8bfa112da9ef092dddf369ae699a1f10ebbd89b1b9f25f3228795b84585c72aabd5ced5fc11f2ba467eedf7b081a66fad024 - languageName: node - linkType: hard - -"preact@npm:^10.28.3": - version: 10.28.4 - resolution: "preact@npm:10.28.4" - checksum: 10c0/712384e92d6c676c8f4c230eab81329a66acfecf700390aebfe5fc46168fa3686345d47f2292068dcc0a6d86425a3d9a3d743730e356e867a8402442afb989db - languageName: node - linkType: hard - -"prettier@npm:^2.8.0": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a - languageName: node - linkType: hard - -"proc-log@npm:^6.0.0": - version: 6.1.0 - resolution: "proc-log@npm:6.1.0" - checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 - languageName: node - linkType: hard - -"process@npm:^0.11.10": - version: 0.11.10 - resolution: "process@npm:0.11.10" - checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 - languageName: node - linkType: hard - -"proxy-compare@npm:3.0.1, proxy-compare@npm:^3.0.0": - version: 3.0.1 - resolution: "proxy-compare@npm:3.0.1" - checksum: 10c0/1e3631ef32603d4de263860ce02d84b48384dce9b62238b2148b3c58a4e4ec5b06644615dcc196a339f73b9695443317099d55a9173e02ce8492088c9330c00b - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"proxy-memoize@npm:3.0.1": - version: 3.0.1 - resolution: "proxy-memoize@npm:3.0.1" - dependencies: - proxy-compare: "npm:^3.0.0" - checksum: 10c0/cfdd442365fb7081dcba427ded75a8a9b68af17e72eef8098aa2e6d625914ac4152021832c631f071660d2f61ec18aaaa07ec77142abaa50b12dcaa845de8e4c - languageName: node - linkType: hard - -"qs@npm:^6.11.0": - version: 6.15.0 - resolution: "qs@npm:6.15.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/ff341078a78a991d8a48b4524d52949211447b4b1ad907f489cac0770cbc346a28e47304455c0320e5fb000f8762d64b03331e3b71865f663bf351bcba8cdb4b - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"react-dom@npm:^18.2.0": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" - peerDependencies: - react: ^18.3.1 - checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 - languageName: node - linkType: hard - -"react-is@npm:^16.7.0": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 - languageName: node - linkType: hard - -"react-reconciler@npm:^0.29.0": - version: 0.29.2 - resolution: "react-reconciler@npm:0.29.2" - dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" - peerDependencies: - react: ^18.3.1 - checksum: 10c0/94f48ddc348a974256cf13c859f5a94efdb0cd72e04c51b1a4d5c72a8b960ccd35df2196057ee6a4cbcb26145e12b01e3f9ba3b183fddb901414db36a07cbf43 - languageName: node - linkType: hard - -"react@npm:^18.2.0": - version: 18.3.1 - resolution: "react@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 - languageName: node - linkType: hard - -"readable-stream@npm:^2.0.5": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: "npm:~1.0.0" - inherits: "npm:~2.0.3" - isarray: "npm:~1.0.0" - process-nextick-args: "npm:~2.0.0" - safe-buffer: "npm:~5.1.1" - string_decoder: "npm:~1.1.1" - util-deprecate: "npm:~1.0.1" - checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa - languageName: node - linkType: hard - -"readable-stream@npm:^4.0.0": - version: 4.7.0 - resolution: "readable-stream@npm:4.7.0" - dependencies: - abort-controller: "npm:^3.0.0" - buffer: "npm:^6.0.3" - events: "npm:^3.3.0" - process: "npm:^0.11.10" - string_decoder: "npm:^1.3.0" - checksum: 10c0/fd86d068da21cfdb10f7a4479f2e47d9c0a9b0c862fc0c840a7e5360201580a55ac399c764b12a4f6fa291f8cee74d9c4b7562e0d53b3c4b2769f2c98155d957 - languageName: node - linkType: hard - -"readdir-glob@npm:^1.1.2": - version: 1.1.3 - resolution: "readdir-glob@npm:1.1.3" - dependencies: - minimatch: "npm:^5.1.0" - checksum: 10c0/a37e0716726650845d761f1041387acd93aa91b28dd5381950733f994b6c349ddc1e21e266ec7cc1f9b92e205a7a972232f9b89d5424d07361c2c3753d5dbace - languageName: node - linkType: hard - -"readdirp@npm:^4.0.1": - version: 4.1.2 - resolution: "readdirp@npm:4.1.2" - checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 - languageName: node - linkType: hard - -"resolve@npm:^1.19.0": - version: 1.22.11 - resolution: "resolve@npm:1.22.11" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": - version: 1.22.11 - resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 - languageName: node - linkType: hard - -"restore-cursor@npm:^2.0.0": - version: 2.0.0 - resolution: "restore-cursor@npm:2.0.0" - dependencies: - onetime: "npm:^2.0.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 - languageName: node - linkType: hard - -"restore-cursor@npm:^4.0.0": - version: 4.0.0 - resolution: "restore-cursor@npm:4.0.0" - dependencies: - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 - languageName: node - linkType: hard - -"retry@npm:^0.13.1": - version: 0.13.1 - resolution: "retry@npm:0.13.1" - checksum: 10c0/9ae822ee19db2163497e074ea919780b1efa00431d197c7afdb950e42bf109196774b92a49fc9821f0b8b328a98eea6017410bfc5e8a0fc19c85c6d11adb3772 - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.1.0 - resolution: "reusify@npm:1.1.0" - checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa - languageName: node - linkType: hard - -"rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 - languageName: node - linkType: hard - -"rollup@npm:^4.43.0": - version: 4.59.0 - resolution: "rollup@npm:4.59.0" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.59.0" - "@rollup/rollup-android-arm64": "npm:4.59.0" - "@rollup/rollup-darwin-arm64": "npm:4.59.0" - "@rollup/rollup-darwin-x64": "npm:4.59.0" - "@rollup/rollup-freebsd-arm64": "npm:4.59.0" - "@rollup/rollup-freebsd-x64": "npm:4.59.0" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.59.0" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.59.0" - "@rollup/rollup-linux-arm64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-arm64-musl": "npm:4.59.0" - "@rollup/rollup-linux-loong64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-loong64-musl": "npm:4.59.0" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-ppc64-musl": "npm:4.59.0" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-riscv64-musl": "npm:4.59.0" - "@rollup/rollup-linux-s390x-gnu": "npm:4.59.0" - "@rollup/rollup-linux-x64-gnu": "npm:4.59.0" - "@rollup/rollup-linux-x64-musl": "npm:4.59.0" - "@rollup/rollup-openbsd-x64": "npm:4.59.0" - "@rollup/rollup-openharmony-arm64": "npm:4.59.0" - "@rollup/rollup-win32-arm64-msvc": "npm:4.59.0" - "@rollup/rollup-win32-ia32-msvc": "npm:4.59.0" - "@rollup/rollup-win32-x64-gnu": "npm:4.59.0" - "@rollup/rollup-win32-x64-msvc": "npm:4.59.0" - "@types/estree": "npm:1.0.8" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loong64-gnu": - optional: true - "@rollup/rollup-linux-loong64-musl": - optional: true - "@rollup/rollup-linux-ppc64-gnu": - optional: true - "@rollup/rollup-linux-ppc64-musl": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-riscv64-musl": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-openbsd-x64": - optional: true - "@rollup/rollup-openharmony-arm64": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-gnu": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/f38742da34cfee5e899302615fa157aa77cb6a2a1495e5e3ce4cc9c540d3262e235bbe60caa31562bbfe492b01fdb3e7a8c43c39d842d3293bcf843123b766fc - languageName: node - linkType: hard - -"run-async@npm:^3.0.0": - version: 3.0.0 - resolution: "run-async@npm:3.0.0" - checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"rxjs@npm:^6.3.3": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: "npm:^1.9.0" - checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe - languageName: node - linkType: hard - -"rxjs@npm:^7.8.1": - version: 7.8.2 - resolution: "rxjs@npm:7.8.2" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 - languageName: node - linkType: hard - -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 - languageName: node - linkType: hard - -"safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"scheduler@npm:^0.23.0, scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 - languageName: node - linkType: hard - -"semver@npm:^7.3.5": - version: 7.7.4 - resolution: "semver@npm:7.7.4" - bin: - semver: bin/semver.js - checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - side-channel-map: "npm:^1.0.1" - checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 - languageName: node - linkType: hard - -"side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - side-channel-list: "npm:^1.0.0" - side-channel-map: "npm:^1.0.1" - side-channel-weakmap: "npm:^1.0.2" - checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - -"slice-ansi@npm:0.0.4": - version: 0.0.4 - resolution: "slice-ansi@npm:0.0.4" - checksum: 10c0/997d4cc73e34aa8c0f60bdb71701b16c062cc4acd7a95e3b10e8c05d790eb5e735d9b470270dc6f443b1ba21492db7ceb849d5c93011d1256061bf7ed7216c7a - languageName: node - linkType: hard - -"slice-ansi@npm:^5.0.0": - version: 5.0.0 - resolution: "slice-ansi@npm:5.0.0" - dependencies: - ansi-styles: "npm:^6.0.0" - is-fullwidth-code-point: "npm:^4.0.0" - checksum: 10c0/2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f - languageName: node - linkType: hard - -"slice-ansi@npm:^7.1.0": - version: 7.1.2 - resolution: "slice-ansi@npm:7.1.2" - dependencies: - ansi-styles: "npm:^6.2.1" - is-fullwidth-code-point: "npm:^5.0.0" - checksum: 10c0/36742f2eb0c03e2e81a38ed14d13a64f7b732fe38c3faf96cce0599788a345011e840db35f1430ca606ea3f8db2abeb92a8d25c2753a819e3babaa10c2e289a2 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.7 - resolution: "socks@npm:2.8.7" - dependencies: - ip-address: "npm:^10.0.1" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2 - languageName: node - linkType: hard - -"source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf - languageName: node - linkType: hard - -"source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 - languageName: node - linkType: hard - -"ssri@npm:^13.0.0": - version: 13.0.1 - resolution: "ssri@npm:13.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/cf6408a18676c57ff2ed06b8a20dc64bb3e748e5c7e095332e6aecaa2b8422b1e94a739a8453bf65156a8a47afe23757ba4ab52d3ea3b62322dc40875763e17a - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.6": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: "npm:^2.0.0" - checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a - languageName: node - linkType: hard - -"streamx@npm:^2.15.0": - version: 2.23.0 - resolution: "streamx@npm:2.23.0" - dependencies: - events-universal: "npm:^1.0.0" - fast-fifo: "npm:^1.3.2" - text-decoder: "npm:^1.1.0" - checksum: 10c0/15708ce37818d588632fe1104e8febde573e33e8c0868bf583fce0703f3faf8d2a063c278e30df2270206811b69997f64eb78792099933a1fe757e786fbcbd44 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: "npm:^1.0.0" - is-fullwidth-code-point: "npm:^1.0.0" - strip-ansi: "npm:^3.0.0" - checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e - languageName: node - linkType: hard - -"string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"string-width@npm:^7.0.0, string-width@npm:^7.2.0": - version: 7.2.0 - resolution: "string-width@npm:7.2.0" - dependencies: - emoji-regex: "npm:^10.3.0" - get-east-asian-width: "npm:^1.0.0" - strip-ansi: "npm:^7.1.0" - checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 - languageName: node - linkType: hard - -"string_decoder@npm:^1.3.0": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: "npm:~5.2.0" - checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: "npm:~5.1.0" - checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: "npm:^3.0.0" - checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": - version: 7.2.0 - resolution: "strip-ansi@npm:7.2.0" - dependencies: - ansi-regex: "npm:^6.2.2" - checksum: 10c0/544d13b7582f8254811ea97db202f519e189e59d35740c46095897e254e4f1aa9fe1524a83ad6bc5ad67d4dd6c0281d2e0219ed62b880a6238a16a17d375f221 - languageName: node - linkType: hard - -"stylis@npm:4.2.0": - version: 4.2.0 - resolution: "stylis@npm:4.2.0" - checksum: 10c0/a7128ad5a8ed72652c6eba46bed4f416521bc9745a460ef5741edc725252cebf36ee45e33a8615a7057403c93df0866ab9ee955960792db210bb80abd5ac6543 - languageName: node - linkType: hard - -"subscriptions-transport-ws@npm:^0.9.16": - version: 0.9.19 - resolution: "subscriptions-transport-ws@npm:0.9.19" - dependencies: - backo2: "npm:^1.0.2" - eventemitter3: "npm:^3.1.0" - iterall: "npm:^1.2.1" - symbol-observable: "npm:^1.0.4" - ws: "npm:^5.2.0 || ^6.0.0 || ^7.0.0" - peerDependencies: - graphql: ">=0.10.0" - checksum: 10c0/6f2ade56865f0ba291d3ff82c79781b051c2374873bac853286fedfdbc05001b8c4018ab7cba44af667ead7f573e48d18892d58a8f9ca8d90dfb4bff5c125045 - languageName: node - linkType: hard - -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - -"symbol-observable@npm:^1.0.4, symbol-observable@npm:^1.1.0": - version: 1.2.0 - resolution: "symbol-observable@npm:1.2.0" - checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc - languageName: node - linkType: hard - -"tar-stream@npm:^3.0.0": - version: 3.1.7 - resolution: "tar-stream@npm:3.1.7" - dependencies: - b4a: "npm:^1.6.4" - fast-fifo: "npm:^1.2.0" - streamx: "npm:^2.15.0" - checksum: 10c0/a09199d21f8714bd729993ac49b6c8efcb808b544b89f23378ad6ffff6d1cb540878614ba9d4cfec11a64ef39e1a6f009a5398371491eb1fda606ffc7f70f718 - languageName: node - linkType: hard - -"tar@npm:^7.5.4": - version: 7.5.9 - resolution: "tar@npm:7.5.9" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.1.0" - yallist: "npm:^5.0.0" - checksum: 10c0/e870beb1b2477135ca2abe86b2d18f7b35d0a4e3a37bbc523d3b8f7adca268dfab543f26528a431d569897f8c53a7cac745cdfbc4411c2f89aeeacc652b81b0a - languageName: node - linkType: hard - -"text-decoder@npm:^1.1.0": - version: 1.2.7 - resolution: "text-decoder@npm:1.2.7" - dependencies: - b4a: "npm:^1.6.4" - checksum: 10c0/929938ed154fbadb660a7f3d1aca30b7e53649a731af7583168fcfba0c158046325d35d945926e2a512bb62d1a49a7818151c987ea38b48853f01e1615722fc5 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.15": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" - dependencies: - fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.3" - checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"tsconfck@npm:^3.0.3": - version: 3.1.6 - resolution: "tsconfck@npm:3.1.6" - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - bin: - tsconfck: bin/tsconfck.js - checksum: 10c0/269c3c513540be44844117bb9b9258fe6f8aeab026d32aeebf458d5299125f330711429dbb556dbf125a0bc25f4a81e6c24ac96de2740badd295c3fb400f66c4 - languageName: node - linkType: hard - -"tslib@npm:^1.9.0, tslib@npm:^1.9.3": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - -"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.8.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"twenty-sdk@npm:latest": - version: 0.6.2 - resolution: "twenty-sdk@npm:0.6.2" - dependencies: - "@chakra-ui/react": "npm:^3.33.0" - "@emotion/react": "npm:^11.14.0" - "@genql/cli": "npm:^3.0.3" - "@genql/runtime": "npm:^2.10.0" - "@quilted/threads": "npm:^4.0.1" - "@remote-dom/core": "npm:^1.10.1" - "@remote-dom/react": "npm:^1.2.2" - "@sniptt/guards": "npm:^0.2.0" - archiver: "npm:^7.0.1" - axios: "npm:^1.13.5" - chalk: "npm:^5.3.0" - chokidar: "npm:^4.0.0" - commander: "npm:^12.0.0" - dotenv: "npm:^16.4.0" - esbuild: "npm:^0.25.0" - fast-glob: "npm:^3.3.0" - fs-extra: "npm:^11.2.0" - graphql: "npm:^16.8.1" - graphql-sse: "npm:^2.5.4" - ink: "npm:^5.1.1" - inquirer: "npm:^10.0.0" - jsonc-parser: "npm:^3.2.0" - lodash.camelcase: "npm:^4.3.0" - lodash.kebabcase: "npm:^4.1.1" - preact: "npm:^10.28.3" - react: "npm:^18.2.0" - react-dom: "npm:^18.2.0" - typescript: "npm:^5.9.2" - uuid: "npm:^13.0.0" - vite: "npm:^7.0.0" - vite-tsconfig-paths: "npm:^4.2.1" - zod: "npm:^4.1.11" - bin: - twenty: dist/cli.cjs - checksum: 10c0/7c18973fe1a193475c88b00c6f2603b75020139c899a59d3997d044831c45a102c37eb9b87085691adcc46f6f38b22f5c25526f9c6fa1362b3e02670799838b0 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 - languageName: node - linkType: hard - -"type-fest@npm:^4.27.0": - version: 4.41.0 - resolution: "type-fest@npm:4.41.0" - checksum: 10c0/f5ca697797ed5e88d33ac8f1fec21921839871f808dc59345c9cf67345bfb958ce41bd821165dbf3ae591cedec2bf6fe8882098dfdd8dc54320b859711a2c1e4 - languageName: node - linkType: hard - -"typescript@npm:^5.9.2, typescript@npm:^5.9.3": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 - languageName: node - linkType: hard - -"undici-types@npm:~6.21.0": - version: 6.21.0 - resolution: "undici-types@npm:6.21.0" - checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"undici-types@npm:~7.18.0": - version: 7.18.2 - resolution: "undici-types@npm:7.18.2" - checksum: 10c0/85a79189113a238959d7a647368e4f7c5559c3a404ebdb8fc4488145ce9426fcd82252a844a302798dfc0e37e6fb178ff481ed03bc4caf634c5757d9ef43521d - languageName: node - linkType: hard - -"undici@npm:^5.18.0": - version: 5.29.0 - resolution: "undici@npm:5.29.0" - dependencies: - "@fastify/busboy": "npm:^2.0.0" - checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b - languageName: node - linkType: hard - -"unfetch@npm:^4.2.0": - version: 4.2.0 - resolution: "unfetch@npm:4.2.0" - checksum: 10c0/a5c0a896a6f09f278b868075aea65652ad185db30e827cb7df45826fe5ab850124bf9c44c4dafca4bf0c55a0844b17031e8243467fcc38dd7a7d435007151f1b - languageName: node - linkType: hard - -"unique-filename@npm:^5.0.0": - version: 5.0.0 - resolution: "unique-filename@npm:5.0.0" - dependencies: - unique-slug: "npm:^6.0.0" - checksum: 10c0/afb897e9cf4c2fb622ea716f7c2bb462001928fc5f437972213afdf1cc32101a230c0f1e9d96fc91ee5185eca0f2feb34127145874975f347be52eb91d6ccc2c - languageName: node - linkType: hard - -"unique-slug@npm:^6.0.0": - version: 6.0.0 - resolution: "unique-slug@npm:6.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/da7ade4cb04eb33ad0499861f82fe95ce9c7c878b7139dc54d140ecfb6a6541c18a5c8dac16188b8b379fe62c0c1f1b710814baac910cde5f4fec06212126c6a - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unixify@npm:^1.0.0": - version: 1.0.0 - resolution: "unixify@npm:1.0.0" - dependencies: - normalize-path: "npm:^2.1.1" - checksum: 10c0/8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e - languageName: node - linkType: hard - -"uqr@npm:0.1.2": - version: 0.1.2 - resolution: "uqr@npm:0.1.2" - checksum: 10c0/40cd81b4c13f1764d52ec28da2d58e60816e6fae54d4eb75b32fbf3137937f438eff16c766139fb0faec5d248a5314591f5a0dbd694e569d419eed6f3bd80242 - languageName: node - linkType: hard - -"util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 - languageName: node - linkType: hard - -"utility-types@npm:^3.10.0": - version: 3.11.0 - resolution: "utility-types@npm:3.11.0" - checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 - languageName: node - linkType: hard - -"uuid@npm:^13.0.0": - version: 13.0.0 - resolution: "uuid@npm:13.0.0" - bin: - uuid: dist-node/bin/uuid - checksum: 10c0/950e4c18d57fef6c69675344f5700a08af21e26b9eff2bf2180427564297368c538ea11ac9fb2e6528b17fc3966a9fd2c5049361b0b63c7d654f3c550c9b3d67 - languageName: node - linkType: hard - -"value-or-promise@npm:^1.0.12": - version: 1.0.12 - resolution: "value-or-promise@npm:1.0.12" - checksum: 10c0/b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 - languageName: node - linkType: hard - -"vite-tsconfig-paths@npm:^4.2.1": - version: 4.3.2 - resolution: "vite-tsconfig-paths@npm:4.3.2" - dependencies: - debug: "npm:^4.1.1" - globrex: "npm:^0.1.2" - tsconfck: "npm:^3.0.3" - peerDependencies: - vite: "*" - peerDependenciesMeta: - vite: - optional: true - checksum: 10c0/f390ac1d1c3992fc5ac50f9274c1090f8b55ab34a89ea88893db9a6924a3b26c9f64bc1163615150ad100749db73b6b2cf1d57f6cd60df6e762ceb5b8ad30024 - languageName: node - linkType: hard - -"vite@npm:^7.0.0": - version: 7.3.1 - resolution: "vite@npm:7.3.1" - dependencies: - esbuild: "npm:^0.27.0" - fdir: "npm:^6.5.0" - fsevents: "npm:~2.3.3" - picomatch: "npm:^4.0.3" - postcss: "npm:^8.5.6" - rollup: "npm:^4.43.0" - tinyglobby: "npm:^0.2.15" - peerDependencies: - "@types/node": ^20.19.0 || >=22.12.0 - jiti: ">=1.21.0" - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: ">=0.54.8" - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/5c7548f5f43a23533e53324304db4ad85f1896b1bfd3ee32ae9b866bac2933782c77b350eb2b52a02c625c8ad1ddd4c000df077419410650c982cd97fde8d014 - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^6.0.0": - version: 6.0.1 - resolution: "which@npm:6.0.1" - dependencies: - isexe: "npm:^4.0.0" - bin: - node-which: bin/which.js - checksum: 10c0/7e710e54ea36d2d6183bee2f9caa27a3b47b9baf8dee55a199b736fcf85eab3b9df7556fca3d02b50af7f3dfba5ea3a45644189836df06267df457e354da66d5 - languageName: node - linkType: hard - -"widest-line@npm:^5.0.0": - version: 5.0.0 - resolution: "widest-line@npm:5.0.0" - dependencies: - string-width: "npm:^7.0.0" - checksum: 10c0/6bd6cca8cda502ef50e05353fd25de0df8c704ffc43ada7e0a9cf9a5d4f4e12520485d80e0b77cec8a21f6c3909042fcf732aa9281e5dbb98cc9384a138b2578 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "wrap-ansi@npm:3.0.1" - dependencies: - string-width: "npm:^2.1.1" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/ad6fed8f242c26755badaf452da154122d0d862f8b7aab56e758466857f230efafdc5fbffca026650b947ac3fc0eb563df5c05b9e2190a52a4a68f4eef3d4555 - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"wrap-ansi@npm:^9.0.0": - version: 9.0.2 - resolution: "wrap-ansi@npm:9.0.2" - dependencies: - ansi-styles: "npm:^6.2.1" - string-width: "npm:^7.0.0" - strip-ansi: "npm:^7.1.0" - checksum: 10c0/3305839b9a0d6fb930cb63a52f34d3936013d8b0682ff3ec133c9826512620f213800ffa19ea22904876d5b7e9a3c1f40682f03597d986a4ca881fa7b033688c - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0": - version: 7.5.10 - resolution: "ws@npm:7.5.10" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d - languageName: node - linkType: hard - -"ws@npm:^6.1.4": - version: 6.2.3 - resolution: "ws@npm:6.2.3" - dependencies: - async-limiter: "npm:~1.0.0" - checksum: 10c0/56a35b9799993cea7ce2260197e7879f21bbbb194a967f31acbbda6f7f46ecda4365951966fb062044c95197e19fb2f053be6f65c172435455186835f494de41 - languageName: node - linkType: hard - -"ws@npm:^8.18.0": - version: 8.19.0 - resolution: "ws@npm:8.19.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10c0/4741d9b9bc3f9c791880882414f96e36b8b254e34d4b503279d6400d9a4b87a033834856dbdd94ee4b637944df17ea8afc4bce0ff4a1560d2166be8855da5b04 - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 - languageName: node - linkType: hard - -"yaml@npm:^1.10.0": - version: 1.10.2 - resolution: "yaml@npm:1.10.2" - checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 - languageName: node - linkType: hard - -"yargs@npm:^15.3.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: "npm:^6.0.0" - decamelize: "npm:^1.2.0" - find-up: "npm:^4.1.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^4.2.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^18.1.2" - checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard - -"yoctocolors-cjs@npm:^2.1.2": - version: 2.1.3 - resolution: "yoctocolors-cjs@npm:2.1.3" - checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 - languageName: node - linkType: hard - -"yoga-layout@npm:~3.2.1": - version: 3.2.1 - resolution: "yoga-layout@npm:3.2.1" - checksum: 10c0/9001e51be993c85e03757e5a04a2b61b8b30c9e5a7865d0156ca87a6431a3b717d51eb4990bfe588189fcfeac688dd9c3de707bbd50d1c344a84e63974cc54a8 - languageName: node - linkType: hard - -"zen-observable-ts@npm:^0.8.21": - version: 0.8.21 - resolution: "zen-observable-ts@npm:0.8.21" - dependencies: - tslib: "npm:^1.9.3" - zen-observable: "npm:^0.8.0" - checksum: 10c0/fe4a02f862b5f7e8ae0f86230c37b84c7d5611f5c206981afb4043e732d04cf7067a6cbe1ba82d20f18b735a3387937195a12542158a631d308ae3959a1d93c4 - languageName: node - linkType: hard - -"zen-observable@npm:^0.8.0": - version: 0.8.15 - resolution: "zen-observable@npm:0.8.15" - checksum: 10c0/71cc2f2bbb537300c3f569e25693d37b3bc91f225cefce251a71c30bc6bb3e7f8e9420ca0eb57f2ac9e492b085b8dfa075fd1e8195c40b83c951dd59c6e4fbf8 - languageName: node - linkType: hard - -"zip-stream@npm:^6.0.1": - version: 6.0.1 - resolution: "zip-stream@npm:6.0.1" - dependencies: - archiver-utils: "npm:^5.0.0" - compress-commons: "npm:^6.0.2" - readable-stream: "npm:^4.0.0" - checksum: 10c0/50f2fb30327fb9d09879abf7ae2493705313adf403e794b030151aaae00009162419d60d0519e807673ec04d442e140c8879ca14314df0a0192de3b233e8f28b - languageName: node - linkType: hard - -"zod@npm:^4.1.11": - version: 4.3.6 - resolution: "zod@npm:4.3.6" - checksum: 10c0/860d25a81ab41d33aa25f8d0d07b091a04acb426e605f396227a796e9e800c44723ed96d0f53a512b57be3d1520f45bf69c0cb3b378a232a00787a2609625307 - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/fireflies/.env.example b/packages/twenty-apps/community/fireflies/.env.example deleted file mode 100644 index 9c6771103c..0000000000 --- a/packages/twenty-apps/community/fireflies/.env.example +++ /dev/null @@ -1,109 +0,0 @@ -# Fireflies Integration Environment Variables -# Copy this file to .env and fill in your actual values - -# ============================================================================= -# REQUIRED: Authentication & API Keys -# ============================================================================= - -# Secret key for HMAC signature verification of Fireflies webhooks -# This must match the secret configured in your Fireflies webhook settings -# Get this from: https://app.fireflies.ai/settings#DeveloperSettings -FIREFLIES_WEBHOOK_SECRET=your_webhook_secret_here - -# Fireflies API key for fetching meeting data from GraphQL API -# Get this from: https://app.fireflies.ai/settings#DeveloperSettings -FIREFLIES_API_KEY=your_fireflies_api_key_here - -# Fireflies plan level - affects which fields are available -# Options: free, pro, business, enterprise -# This controls which GraphQL fields are requested to avoid 403 errors -FIREFLIES_PLAN=free - -# Twenty CRM API key for authentication -# Generate this from your Twenty instance: Settings > Developers > API Keys -TWENTY_API_KEY=your_twenty_api_key_here - -# ============================================================================= -# Server Configuration -# ============================================================================= - -# Twenty CRM server URL -# Use http://localhost:3000 for local development -# Use your production URL for deployed instances -SERVER_URL=http://localhost:3000 - -# ============================================================================= -# Contact Management -# ============================================================================= - -# Automatically create contacts for unknown participants (true/false) -# If true, new Person records will be created for meeting participants not found in CRM -# If false, only meetings with existing contacts will be fully processed -AUTO_CREATE_CONTACTS=true - -# ============================================================================= -# Summary Processing Configuration -# ============================================================================= - -# Strategy for handling async summary generation -# Options: -# - immediate_with_retry: Attempts immediate fetch with retry logic (RECOMMENDED) -# - delayed_polling: Schedules background polling for summaries -# - basic_only: Creates records without waiting for summaries -FIREFLIES_SUMMARY_STRATEGY=immediate_with_retry - -# Number of retry attempts when fetching summary data -# Used with immediate_with_retry strategy -# Recommended: 3-5 attempts (summaries can take up to 10 minutes but rate limit is low) -FIREFLIES_RETRY_ATTEMPTS=5 - -# Delay in milliseconds between retry attempts (with exponential backoff) -# Each retry will wait: RETRY_DELAY * attempt_number -# Example: 120000ms means 2min, 4min, 6min... for extended backoff -# Total max time with 5 attempts: ~15 minutes -FIREFLIES_RETRY_DELAY=120000 - -# Polling interval in milliseconds for delayed_polling strategy -# How often to check if summary is ready -# Recommended: 60000 (60 seconds) for extended processing -FIREFLIES_POLL_INTERVAL=120000 - -# Maximum number of polling attempts for delayed_polling strategy -# Total max time = POLL_INTERVAL * MAX_POLLS -# Example: 2min * 5 = 10 minutes maximum -FIREFLIES_MAX_POLLS=5 - -# ============================================================================= -# Debugging & Logging -# ============================================================================= - -# Log level: silent, error, warn, info, debug (default: error) -# Controls verbosity of console output -# - silent: No console output -# - error: Only errors (production default) -# - warn: Warnings and errors -# - info: Info, warnings, and errors -# - debug: All logs including detailed debugging -LOG_LEVEL=error - -# ============================================================================= -# Configuration Notes -# ============================================================================= -# -# Webhook Setup: -# 1. Configure your Fireflies webhook at: https://app.fireflies.ai/settings#DeveloperSettings -# 2. Webhook URL: https://your-twenty-instance.com/s/webhook/fireflies -# 3. Event Type: "Transcription completed" -# 4. Secret: Same value as FIREFLIES_WEBHOOK_SECRET above, genereate it there -# -# Summary Strategy Guide: -# - immediate_with_retry: Best for most use cases - fast with reliability -# - delayed_polling: Use if your server is heavily loaded -# - basic_only: Use if you only need transcript links without AI summaries -# -# Performance Tuning: -# - Fireflies summaries can take 5-15 minutes to generate after transcription -# - Use 30+ retry attempts with 30s delay for 15-minute coverage -# - Consider delayed_polling strategy for heavily loaded servers -# - Monitor DEBUG_LOGS to tune timing for your Fireflies account -# diff --git a/packages/twenty-apps/community/fireflies/.gitignore b/packages/twenty-apps/community/fireflies/.gitignore deleted file mode 100644 index 61c3bc75a0..0000000000 --- a/packages/twenty-apps/community/fireflies/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.yarn diff --git a/packages/twenty-apps/community/fireflies/.oxlintrc.json b/packages/twenty-apps/community/fireflies/.oxlintrc.json deleted file mode 100644 index 74ff27224d..0000000000 --- a/packages/twenty-apps/community/fireflies/.oxlintrc.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["typescript", "import", "unicorn"], - "categories": { - "correctness": "off" - }, - "ignorePatterns": ["node_modules"], - "rules": { - "func-style": ["error", "declaration", { "allowArrowFunctions": true }], - "no-console": ["warn", { "allow": ["group", "groupCollapsed", "groupEnd"] }], - "no-control-regex": "off", - "no-debugger": "error", - "no-duplicate-imports": "error", - "no-undef": "off", - "no-unused-vars": "off", - "no-redeclare": "off", - - "import/no-duplicates": "error", - - "typescript/no-redeclare": "error", - "typescript/ban-ts-comment": "error", - "typescript/consistent-type-imports": ["error", { - "prefer": "type-imports", - "fixStyle": "inline-type-imports" - }], - "typescript/explicit-function-return-type": "off", - "typescript/explicit-module-boundary-types": "off", - "typescript/no-empty-object-type": ["error", { - "allowInterfaces": "with-single-extends" - }], - "typescript/no-empty-function": "off", - "typescript/no-explicit-any": "off", - "typescript/no-unused-vars": ["warn", { - "vars": "all", - "varsIgnorePattern": "^_", - "args": "after-used", - "argsIgnorePattern": "^_" - }] - } -} diff --git a/packages/twenty-apps/community/fireflies/.yarnrc.yml b/packages/twenty-apps/community/fireflies/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/fireflies/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/fireflies/CHANGELOG.md b/packages/twenty-apps/community/fireflies/CHANGELOG.md deleted file mode 100644 index 675a2453c9..0000000000 --- a/packages/twenty-apps/community/fireflies/CHANGELOG.md +++ /dev/null @@ -1,167 +0,0 @@ -# Changelog - -## [0.3.1] - 2025-12-08 - -Import all - -### Added -- Historical import CLI: `yarn meeting:all` to fetch and insert historical Fireflies meetings with filters (date range, organizers, participants, channel, mine) and dry-run support. -- Fireflies transcripts listing with pagination and date filtering to support bulk imports. - -### Changed -- Deduplication now checks `firefliesMeetingId` before creating meetings (webhook + bulk). -- Shared historical importer pipeline reusing existing note/meeting formatting. - -## [0.3.0] - 2025-12-08 - -Subscription-based query / Full transcript and AI notes for Pro+ / More - -### Added -- **Full transcript capture**: Meeting object now stores the complete meeting transcript with speaker names and timestamps (`transcript` field) -- **Rich AI meeting notes**: Captures detailed AI-generated meeting notes from Fireflies (`notes` field with 7,000+ char summaries) -- **Expanded summary fields**: Now fetches all available Fireflies summary data: - - `notes` - Detailed AI-generated meeting notes with timestamps and section headers - - `bullet_gist` - Emoji-enhanced bullet point summaries - - `outline` / `shorthand_bullet` - Timestamped meeting outline - - `gist` - One-sentence meeting summary - - `short_summary` - Single paragraph summary - - `short_overview` - Brief overview -- **New Meeting fields**: - - `transcript` - Full meeting transcript with speaker attribution - - `notes` - AI-generated detailed notes - - `audioUrl` - Link to audio recording (Pro+) - - `videoUrl` - Link to video recording (Business+) - - `meetingLink` - Original meeting link - - `neutralPercent` - Neutral sentiment percentage -- **Meeting delete utility**: New `yarn meeting:delete ` script for cleanup and re-import -- **Debug meeting utility**: New `scripts/debug-meeting.ts` to inspect raw Fireflies API responses - -### Changed -- **Plan-based GraphQL queries**: Completely redesigned query system with three tiers: - - **Free**: Basic fields only (title, date, duration, participants, transcript_url, meeting_link) - - **Pro**: Adds full transcript (`sentences`), summary fields, speakers, audio_url - - **Business+**: Adds analytics, video_url, speaker stats, meeting metrics -- **Action items parsing**: Fixed parsing of `action_items` which Fireflies returns as newline-separated string, not array -- **Note body format**: Enhanced with Meeting Notes, Outline, Key Points sections from rich Fireflies data -- **Import status**: Added `PARTIAL` status for imports missing summary/analytics data - -### Fixed -- Missing `notes` and `bullet_gist` fields in data transform (were fetched but not passed through) -- Proper fallback: Uses `shorthand_bullet` when `outline` is empty (Fireflies stores outline content there) -- Summary readiness detection now checks `notes` field in addition to `overview` and `action_items` - -### Documentation -- Updated README with complete API access comparison table by subscription plan -- Documented all available Fireflies summary fields and their plan requirements - -## [0.2.3] - 2025-12-06 - -### Added -- **Meeting ingest utility**: New `yarn meeting:ingest ` script to manually fetch and import specific Fireflies meetings into Twenty -- **Plan-based field selection**: Added `FIREFLIES_PLAN` configuration to control which GraphQL fields are requested based on subscription level (free, pro, business, enterprise) -- **Main entry point**: New `src/index.ts` centralizing all exports for cleaner imports - -### Changed -- **Auth configuration**: Disabled authentication requirement for webhook route (`isAuthRequired: false`) to support serverless deployments -- **Signature verification fallback**: Webhook handler now supports signature in payload body as fallback when HTTP headers aren't forwarded to serverless functions (production doesn't work for Fireflies webhook) -- **Improved type safety**: Replaced `any` types with proper TypeScript types throughout codebase - -### Enhanced -- **Webhook debugging**: Added detailed debug output including param keys, header info, and signature comparison details -- **Test webhook script**: Includes signature in both header and payload, with diagnostic output for header forwarding status -- **Documentation**: Added README sections on current twenty headers forward limitations and utility scripts - -## [0.2.2] - 2025-11-04 - -### Added -- **Enhanced logging system**: Introduced configurable `AppLogger` class with log level support (debug, info, warn, error, silent) - - Environment-based log level configuration via `LOG_LEVEL` environment variable - - Test environment detection to prevent log noise during testing - - Context-aware logging with proper prefixes for better debugging -- **Improved error handling**: Enhanced webhook signature verification with detailed debug logging -- **Better debugging capabilities**: Added comprehensive logging throughout webhook processing pipeline - -### Enhanced -- **Webhook signature verification**: Improved signature validation with detailed logging for troubleshooting -- **Error messages**: More descriptive error logging for failed operations and security violations -- **Development experience**: Better debugging information for webhook processing and API interactions - - -## [0.2.1] - 2025-11-03 - -### Added -- **Import status tracking**: Added four new meeting fields to track import status and failure handling: - - `importStatus` (SELECT) - Tracks SUCCESS, FAILED, PENDING, RETRYING states - - `importError` (TEXT) - Stores error messages when imports fail - - `lastImportAttempt` (DATE_TIME) - Timestamp of the last import attempt - - `importAttempts` (NUMBER) - Counter for number of import attempts -- **Automatic failure tracking**: Enhanced webhook handler to automatically create failed meeting records when processing fails -- **Failed meeting formatter**: Added `toFailedMeetingCreateInput()` method to create standardized failed meeting records - -### Enhanced -- **Meeting type definition**: Extended `MeetingCreateInput` type with import tracking fields -- **Success status tracking**: Successful meeting imports now automatically set `importStatus: 'SUCCESS'` and track timestamps -- **Error handling**: Webhook processing failures are now captured and stored as meeting records for visibility and potential retry - -## [0.2.0] - 2025-11-03 - -### Changed -- **Major refactoring**: Split monolithic `receive-fireflies-notes.ts` into modular architecture: - - `fireflies-api-client.ts` - Fireflies GraphQL API integration with retry logic - - `twenty-crm-service.ts` - Twenty CRM operations (contacts, notes, meetings) - - `formatters.ts` - Meeting and note body formatting - - `webhook-handler.ts` - Main webhook orchestration - - `webhook-validator.ts` - HMAC signature verification - - `utils.ts` - Shared utility functions - - `types.ts` - Centralized type definitions -- **Schema update**: Changed Meeting `notes` field from `RICH_TEXT` to `RELATION` type linking to Note object -- Enhanced participant extraction from multiple Fireflies API data sources (participants, meeting_attendees, speakers, meeting_attendance) -- Improved organizer email matching with name-based heuristics -- Updated note creation to use `bodyV2.markdown` format instead of legacy `body` field -- Modernized Meeting object schema with proper link field types for transcriptUrl and recordingUrl -- Enhanced test suite with improved mocking for new modular structure -- **Configuration optimization**: Reduced default retry attempts from 30 to 5 with increased delay (120s) to better respect Fireflies API rate limits (50 requests/day for free/pro plans) -- Updated field setup script to support relation field creation with Note object -- Restructured exports: types now exported from `types.ts`, runtime functions from `index.ts` -- Updated import paths in action handlers to use centralized index exports -- Added TypeScript path mappings for `twenty-sdk` in workspace configuration - -### Added -- `createNoteTarget` method for linking notes to multiple participants -- Support for extracting participants from extended Fireflies API response formats -- Better organizer identification logic matching email usernames to speaker names -- `axios` dependency for improved HTTP client capabilities -- API subscription plan documentation highlighting rate limit differences (50/day vs 60/minute) -- Enhanced README with rate limiting guidance and configuration documentation -- Relation field creation support in field provisioning script - -### Fixed -- Note linking now properly associates a single note with multiple participants in 1:1 meetings -- Participant extraction handles missing email addresses gracefully -- Improved handling of various Fireflies participant data structures -- Test mocks updated to use string format for participants (`"Name "`) matching Fireflies API response format -- Test assertions updated to validate `bodyV2.markdown` instead of deprecated `body` field - -## [0.1.0] - 2025-11-02 - -### Added -- HMAC SHA-256 signature verification for incoming Fireflies webhooks -- Fireflies GraphQL client with retry logic, timeout handling, and summary readiness detection -- Summary-focused meeting processing that extracts action items, sentiment, keywords, and transcript/recording links -- Scripted custom field provisioning via `yarn setup:fields` -- Local webhook testing workflow via `yarn test:webhook` -- Comprehensive Jest suite (15 tests) covering authentication, API integration, summary strategies, and error handling - -### Changed -- Replaced legacy JSON manifests with TypeScript configuration: - - `application.config.ts` now declares app metadata and configuration variables - - `src/objects/meeting.ts` defines the Meeting object via `@ObjectMetadata` - - `src/actions/receive-fireflies-notes.ts` exports the Fireflies webhook action plus its runtime config -- Updated documentation (README, Deployment Guide, Testing) to reflect the new project layout and workflows -- Switched utility scripts to `tsx` and aligned package management with the hello-world example - -### Fixed -- Resolved real-world Fireflies payload mismatch by adopting the minimal webhook schema -- Replaced body-based secrets with header-driven HMAC verification -- Ensured graceful degradation when summaries are pending or Fireflies is temporarily unavailable - diff --git a/packages/twenty-apps/community/fireflies/README.md b/packages/twenty-apps/community/fireflies/README.md deleted file mode 100644 index 55fed80621..0000000000 --- a/packages/twenty-apps/community/fireflies/README.md +++ /dev/null @@ -1,331 +0,0 @@ -# Fireflies - -Automatically captures meeting notes with AI-generated summaries and insights from Fireflies.ai into your Twenty CRM. - -### Current Status -- Doesn't work with Fireflies webhook yet due to missing headers forwarding in twenty serverless func -- Meeting ingestion utility scripts are available for individual meeting insertion and historical meetings with filters with yarn meeting:all - -## Integration Overview - -**Fireflies webhook → Fireflies API → Twenty CRM with summary-focused insights** - -- **Summary-first approach** - Prioritizes action items, keywords, and sentiment over raw transcripts -- **HMAC signature verification** - Secure webhook authentication -- **Two-phase architecture** - Webhook notification → API data fetch → CRM record creation -- **Contact identification** - Matches participants to existing contacts or creates new ones -- **One-on-one meetings** (2 people) → Individual notes linked to each contact -- **Multi-party meetings** (3+ people) → Meeting records with all attendees -- **Business intelligence extraction** - Action items, sentiment scores, topics, meeting types -- **Smart retry logic** - Handles async summary generation with exponential backoff -- **Links transcripts and recordings** - Easy access to full Fireflies content -- **Duplicate prevention** - Checks for existing meetings by title - -## API Access by Subscription Plan - -Fireflies API access varies by subscription tier. This integration automatically adapts queries based on your plan and falls back gracefully if restrictions are encountered. - -### Plan Comparison - -| Feature | Free | Pro | Business | Enterprise | -|---------|:----:|:---:|:--------:|:----------:| -| **API Rate Limit** | 50/day | 50/day | 60/min | 60/min | -| **Basic Data** (title, date, duration) | āœ… | āœ… | āœ… | āœ… | -| **Participants List** | āœ… | āœ… | āœ… | āœ… | -| **Transcript URL** | āœ… | āœ… | āœ… | āœ… | -| **Speakers** | āŒ | āœ… | āœ… | āœ… | -| **Summary** (overview, keywords) | āŒ | āœ… | āœ… | āœ… | -| **Audio URL** | āŒ | āœ… | āœ… | āœ… | -| **Action Items** | āŒ | āŒ | āœ… | āœ… | -| **Topics Discussed** | āŒ | āŒ | āœ… | āœ… | -| **Video URL** | āŒ | āŒ | āœ… | āœ… | -| **Sentiment Analytics** | āŒ | āŒ | āœ… | āœ… | -| **Meeting Attendees (detailed)** | āŒ | āŒ | āœ… | āœ… | - -### What You'll Get Per Plan - -**Free Plan:** -- Meeting title, date, duration -- Participant names/emails (basic) -- Link to transcript - -**Pro Plan:** -- Everything in Free, plus: -- Speaker identification -- AI summary (overview + keywords) -- Audio recording URL - -**Business Plan:** -- Everything in Pro, plus: -- Action items extraction -- Topics discussed -- Sentiment analysis (positive/negative/neutral %) -- Video recording URL -- Detailed meeting attendee info - -### Configuration - -Set your plan in `.env`: -```bash -FIREFLIES_PLAN=free # Options: free, pro, business, enterprise -``` - -**Rate Limiting:** Free/Pro plans are limited to 50 API calls/day. The integration uses conservative retry settings by default to stay within limits. - -## What Gets Captured - -### Summary & Insights -- **Action Items** - Concrete next steps and commitments -- **Keywords** - Key topics and themes discussed -- **Overview** - Executive summary of the meeting -- **Topics Discussed** - Main discussion points -- **Meeting Type** - Context (sales call, standup, demo, etc.) - -### Analytics -- **Sentiment Analysis** - Positive/negative/neutral percentages for deal health -- **Engagement Metrics** - Participation levels (future) - -### Resources -- **Transcript Link** - Quick access to full Fireflies transcript -- **Recording Link** - Video/audio recording when available - -## Quick Start - -### Installation - -```bash -# Step 1: Authenticate with Twenty -npx twenty-cli auth login - -# Step 2: Sync the app to create Meeting object -npx twenty-cli app sync packages/twenty-apps/fireflies - -# Step 3: Install dependencies -yarn install - -# Step 4: Add custom fields -yarn setup:fields -``` - -(TODO: change when fields setup internal support) - -### Configuration - -āš ļø **Important**: The integration uses **conservative retry settings** to respect Fireflies' 50 requests/day API limit with free/pro plans. You may increase for more reactivity with higher plans. - -**Required Environment Variables:** -```bash -FIREFLIES_API_KEY=your_api_key # From Fireflies settings -TWENTY_API_KEY=your_api_key # From Twenty CRM settings -SERVER_URL=https://your-domain.twenty.com -``` - -**Optional (Recommended):** -```bash -FIREFLIES_WEBHOOK_SECRET=your_secret # For webhook security -``` - -šŸ“– **For detailed configuration, troubleshooting, and rate limit management**, see [WEBHOOK_CONFIGURATION.md](./WEBHOOK_CONFIGURATION.md) - -### What Gets Created - -#### Basic Installation (Step 2) -The `app sync` command creates: -- āœ… Meeting object with basic `name` field -- āœ… Webhook endpoint at `/s/webhook/fireflies` - -#### After Custom Fields Setup (Step 4) -The `setup:fields` script adds 13 custom fields to store rich Fireflies data: - -| Field Name | Type | Label | Description | -|------------|------|-------|-------------| -| `notes` | RICH_TEXT | Meeting Notes | AI-generated summary with overview, topics, action items, and insights | -| `meetingDate` | DATE_TIME | Meeting Date | Date and time when the meeting occurred | -| `duration` | NUMBER | Duration (minutes) | Meeting duration in minutes | -| `meetingType` | TEXT | Meeting Type | Type of meeting (e.g., Sales Call, Sprint Planning, 1:1) | -| `keywords` | TEXT | Keywords | Key topics and themes discussed (comma-separated) | -| `sentimentScore` | NUMBER | Sentiment Score | Overall meeting sentiment (0-1 scale, 1 = most positive) | -| `positivePercent` | NUMBER | Positive % | Percentage of positive sentiment in conversation | -| `negativePercent` | NUMBER | Negative % | Percentage of negative sentiment in conversation | -| `actionItemsCount` | NUMBER | Action Items | Number of action items identified | -| `transcriptUrl` | LINKS | Transcript URL | Link to full transcript in Fireflies | -| `recordingUrl` | LINKS | Recording URL | Link to video/audio recording in Fireflies | -| `firefliesMeetingId` | TEXT | Fireflies Meeting ID | Unique identifier from Fireflies | -| `organizerEmail` | TEXT | Organizer Email | Email address of the meeting organizer | - -**Note:** Without custom fields, meetings will be created with just the title. The rich summary data will only be stored in Notes for 1-on-1 meetings. - -## Configuration - -### Required Environment Variables - -Check [.env.example](./.env.example) - -### Summary Processing Strategies - -| Strategy | Description | Use Case | -|----------|-------------|----------| -| `immediate_only` | Single fetch attempt, no retries | Fast processing, accept missing summaries if not ready | -| `immediate_with_retry` | Attempts immediate fetch, retries with backoff | **Recommended** - Balances speed and reliability | -| `delayed_polling` | Schedules background polling | For heavily loaded systems | -| `basic_only` | Creates records without waiting for summaries | For basic transcript archival only | - -## Webhook Setup - -### Step 1: Get Your Webhook URL - -Your webhook endpoint will be: -``` -https://your-twenty-instance.com/s/webhook/fireflies -``` - -### Step 2: Configure Fireflies Webhook - -1. Log into Fireflies.ai -2. https://app.fireflies.ai/settings#DeveloperSettings -4. Enter your webhook URL -5. Set **Secret**: Generate from there and set value of `FIREFLIES_WEBHOOK_SECRET` -6. Save configuration - -### Step 3: Verify Webhook - -The integration uses **HMAC SHA-256 signature verification**: -- Fireflies sends `x-hub-signature` header -- Twenty verifies signature using your webhook secret -- Invalid signatures are rejected immediately - -### Current Platform Limitation (Headers) - -- Twenty serverless route triggers currently do **not forward HTTP headers** to functions. Fireflies signatures sent in headers are stripped, so header-based verification does not work in production. -- Workaround: the provided test script also includes the signature inside the payload; the handler falls back to that payload signature. Use this only for testing until header forwarding is supported. - -## Utilities for meeting insertion (workarounds) - -- Ingest a specific Fireflies meeting into Twenty: -`yarn meeting:ingest ` or `MEETING_ID=... yarn meeting:ingest` - -- Fetch all/historical Fireflies meetings into Twenty: -`yarn meeting:all [--from 2024-01-01] [--to 2024-02-01] [--organizer a@x.com] [--participant b@x.com] [--channel ] [--mine] [--dry-run]` - - - Filters (combine as needed): - - `--from` / `--to`: ISO or date string range filter - - `--organizer` / `--participant`: comma-separated emails - - `--channel`: Fireflies channel id - - `--mine`: only meetings for the current Fireflies user - - Controls: - - `--dry-run`: list and transform without writing to Twenty - - `--page-size`: pagination size (default 50) - - `--max-records`: stop after N transcripts (default 500) - -## Development - -```bash -# Run tests -npm test - -# Run tests in watch mode -npm run test -- --watch - -# Development mode with live sync -npx twenty-cli app dev - -# Type checking -npx tsgo --noEmit -``` - -## Testing - -The integration includes comprehensive test coverage: - -```bash -# Run all tests -npm test - -# Run specific test suite -npm test -- fireflies-webhook.spec.ts - -# Run with coverage -npm test -- --coverage -``` - -### Test Coverage - -- HMAC signature verification -- Fireflies GraphQL API integration -- Summary processing with retry logic -- Summary-focused CRM record creation -- One-on-one vs multi-party meeting detection -- Contact matching and creation -- Duplicate prevention -- Error handling and resilience - -## CRM Record Structure - -### One-on-One Meeting Note Example - -```markdown -# Meeting: Product Demo with Client (Sales Call) - -**Date:** Monday, November 2, 2024, 02:00 PM -**Duration:** 30 minutes -**Participants:** Sarah Sales, John Client - -## Overview -Successful product demonstration with positive client feedback. -Client expressed strong interest in the enterprise plan. - -## Key Topics -- product features -- pricing discussion -- integration capabilities -- support options - -## Action Items -- Follow up with pricing proposal by Friday -- Schedule technical deep-dive next week -- Share case studies from similar clients - -## Insights -**Keywords:** product demo, pricing, technical requirements, integration -**Sentiment:** 75% positive, 10% negative, 15% neutral -**Meeting Type:** Sales Call - -## Resources -[View Full Transcript](https://app.fireflies.ai/transcript/xxx) -[Watch Recording](https://app.fireflies.ai/recording/xxx) -``` - -### Multi-Party Meeting Record - -- Meeting object with title, date, and all attendees -- Summary stored as meeting notes (structure same as above) -- Action items potentially converted to separate tasks (future) -- Keywords as tags/categories (future) - -## Future Implementation Opportunities - -Next iterations would enhance the **intelligence layer** to: - -### AI-Powered Insights -- **Extract pain points, objections & buying signals** automatically from transcripts -- **Calculate deal health scores** based on conversation sentiment trends -- **Auto-create contextualized tasks** with AI-suggested next steps and priorities -- **Proactively flag at-risk deals** when negative signals appear -- **Track conversation patterns** that correlate with deal success - -### Enhanced Analytics -- **Action item completion tracking** across deals -- **Sentiment trend analysis** over time for account health -- **Speaking time analysis** for meeting engagement insights -- **Topic clustering** for product/feature interest patterns - -### Workflow Automation -- **Auto-assign follow-up tasks** based on action items -- **Smart notifications** for urgent follow-ups -- **Deal stage progression** based on meeting outcomes -- **Competitive intelligence** extraction from conversations - -**Integration**: Fireflies webhook → AI processing layer → Enhanced Twenty records - -*This would require the current MVP to be stabilized and discussions about intelligence layer architecture and data privacy considerations.* - diff --git a/packages/twenty-apps/community/fireflies/application.config.ts b/packages/twenty-apps/community/fireflies/application.config.ts deleted file mode 100644 index 6272c836e3..0000000000 --- a/packages/twenty-apps/community/fireflies/application.config.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/define'; - -const config: ApplicationConfig = { - universalIdentifier: 'a4df0c0f-c65e-44e5-8436-24814182d4ac', - displayName: 'Fireflies', - description: 'Sync Fireflies meeting summaries, sentiment, and action items into Twenty.', - icon: 'IconMicrophone', - applicationVariables: { - FIREFLIES_WEBHOOK_SECRET: { - universalIdentifier: 'f51f7646-be9f-4ba9-9b75-160dd288cd0c', - description: 'Secret key for verifying Fireflies webhook signatures', - //isSecret: true, - value: '', - }, - FIREFLIES_API_KEY: { - universalIdentifier: 'faa41f07-b28e-4500-b1c0-ce4b3d27924c', - description: 'Fireflies GraphQL API key used to fetch meeting summaries', - //isSecret: true, - value: '', - }, - FIREFLIES_PLAN: { - universalIdentifier: '57dbb73c-aac5-4247-9fcc-a070bb669f16', - description: 'Fireflies plan: free, pro, business, enterprise', - value: 'free', - }, - TWENTY_API_KEY: { - universalIdentifier: '02756551-5bf7-4fb2-8e08-1f622008d305', - description: 'Twenty API key used when running scripts locally', - //isSecret: true, - value: '', - }, - SERVER_URL: { - universalIdentifier: '9b3a5e8e-5973-4e6b-a059-2966075652aa', - description: 'Base URL for the Twenty workspace (default: http://localhost:3000)', - value: 'http://localhost:3000', - }, - AUTO_CREATE_CONTACTS: { - universalIdentifier: 'c4fa946e-e06b-4d54-afb6-288b0ac75bdf', - description: 'Whether to auto-create contacts for unknown participants', - value: 'true', - }, - LOG_LEVEL: { - universalIdentifier: '2b019cf1-d198-48dd-943e-110571aa541e', - description: 'Log level: silent, error, warn, info, debug (default: error)', - value: 'error', - }, - CAPTURE_LOGS: { - universalIdentifier: 'adbcc267-309d-49b2-af71-76f1299d863e', - description: 'Capture logs in webhook response for debugging (true/false)', - value: 'true', - }, - FIREFLIES_SUMMARY_STRATEGY: { - universalIdentifier: '562b43d9-cd47-4ec1-ae16-5cc7ebc9729b', - description: 'Summary fetch strategy: immediate_only, immediate_with_retry, delayed_polling, or basic_only', - value: 'immediate_with_retry', - }, - FIREFLIES_RETRY_ATTEMPTS: { - universalIdentifier: '670ca203-01ce-4ae8-8294-eb38b29434f2', - description: 'Number of retry attempts when fetching summaries', - value: '3', - }, - FIREFLIES_RETRY_DELAY: { - universalIdentifier: '2e8ccb82-9390-47ba-b628-ca2726931bce', - description: 'Delay in milliseconds between retry attempts', - value: '5000', - }, - FIREFLIES_POLL_INTERVAL: { - universalIdentifier: '904538f7-7bec-4ee6-9bac-5d43c619b667', - description: 'Polling interval (ms) when using delayed polling strategy', - value: '30000', - }, - FIREFLIES_MAX_POLLS: { - universalIdentifier: '84d54c97-5572-4c01-9039-764ab3aa87b8', - description: 'Maximum number of polling attempts when waiting for summaries', - value: '10', - }, - }, -}; - -export default config; - diff --git a/packages/twenty-apps/community/fireflies/jest.config.mjs b/packages/twenty-apps/community/fireflies/jest.config.mjs deleted file mode 100644 index 9efddcba47..0000000000 --- a/packages/twenty-apps/community/fireflies/jest.config.mjs +++ /dev/null @@ -1,23 +0,0 @@ -const jestConfig = { - displayName: 'fireflies', - preset: 'ts-jest', - testEnvironment: 'node', - moduleFileExtensions: ['ts', 'js'], - transform: { - '^.+\\.ts$': 'ts-jest', - }, - testMatch: [ - '/src/**/__tests__/**/*.(test|spec).{js,ts}', - '/src/**/?(*.)(test|spec).{js,ts}', - ], - setupFilesAfterEnv: [ - '/src/__tests__/setup.ts' - ], - collectCoverageFrom: [ - 'src/**/*.{ts,js}', - '!src/**/*.d.ts', - ], - coverageDirectory: './coverage', -}; - -export default jestConfig; \ No newline at end of file diff --git a/packages/twenty-apps/community/fireflies/package.json b/packages/twenty-apps/community/fireflies/package.json deleted file mode 100644 index 3a326042b6..0000000000 --- a/packages/twenty-apps/community/fireflies/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "fireflies", - "version": "0.3.0", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "scripts": { - "test": "jest", - "setup:fields": "tsx scripts/add-meeting-fields.ts", - "test:webhook": "tsx scripts/test-webhook.ts", - "meeting:ingest": "tsx scripts/ingest-meeting.ts", - "meeting:delete": "tsx scripts/delete-meeting.ts", - "meeting:all": "tsx scripts/fetch-all-meetings.ts" - }, - "dependencies": { - "axios": "^1.13.1", - "dotenv": "^17.2.3", - "twenty-sdk": "0.1.3" - }, - "devDependencies": { - "@types/jest": "^29.5.5", - "@types/node": "^24.9.2", - "jest": "^29.7.0", - "ts-jest": "^29.1.1", - "tsx": "^4.19.3", - "typescript": "^5.9.3" - } -} diff --git a/packages/twenty-apps/community/fireflies/project.json b/packages/twenty-apps/community/fireflies/project.json deleted file mode 100644 index ab3c52ed18..0000000000 --- a/packages/twenty-apps/community/fireflies/project.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "fireflies", - "$schema": "../../../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "packages/twenty-apps/community/fireflies/src", - "projectType": "application", - "tags": [ - "scope:apps" - ], - "targets": { - "test": { - "executor": "@nx/jest:jest", - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}" - ], - "options": { - "jestConfig": "packages/twenty-apps/community/fireflies/jest.config.mjs", - "passWithNoTests": true - }, - "configurations": { - "ci": { - "ci": true, - "coverageReporters": ["text"] - } - } - }, - "typecheck": { - "dependsOn": ["^build"] - }, - "lint": {} - } -} diff --git a/packages/twenty-apps/community/fireflies/scripts/add-meeting-fields.ts b/packages/twenty-apps/community/fireflies/scripts/add-meeting-fields.ts deleted file mode 100644 index 8147b54cef..0000000000 --- a/packages/twenty-apps/community/fireflies/scripts/add-meeting-fields.ts +++ /dev/null @@ -1,494 +0,0 @@ -/** - * Migration script to add custom fields to the Meeting object - * Run this after: npx twenty-cli app sync packages/twenty-apps/fireflies - * - * Usage: yarn setup:fields - */ - -/* oxlint-disable no-console */ - -import * as dotenv from 'dotenv'; -import * as path from 'path'; -import { fileURLToPath } from 'url'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -// Load environment variables -dotenv.config({ path: path.join(__dirname, '../.env') }); - -const SERVER_URL = process.env.SERVER_URL || 'http://localhost:3000'; -const API_KEY = process.env.TWENTY_API_KEY; - -if (!API_KEY) { - console.error('āŒ Error: TWENTY_API_KEY not found in .env file'); - process.exit(1); -} - -interface RelationCreationPayload { - targetObjectMetadataId: string; - targetFieldLabel: string; - targetFieldIcon: string; - type: 'ONE_TO_MANY' | 'MANY_TO_ONE'; -} - -interface FieldOption { - value: string; - label: string; - position: number; - color: string; -} - -interface FieldDefinition { - type: string; - name: string; - label: string; - description: string; - icon?: string; - isNullable?: boolean; - relationCreationPayload?: RelationCreationPayload; - options?: FieldOption[]; -} - -// Meeting fields based on Fireflies GraphQL API transcript schema -// See: https://docs.fireflies.ai/graphql-api/query/transcript -// Note: Some fields require higher plans (Pro, Business, Enterprise) -const MEETING_FIELDS: FieldDefinition[] = [ - // === Internal Twenty Relations === - { - type: 'RELATION', - name: 'note', - label: 'Meeting Note', - description: 'Related note with detailed meeting content', - icon: 'IconNotes', - isNullable: true, - }, - - // === Basic Fields (All Plans) === - { - type: 'TEXT', - name: 'firefliesMeetingId', - label: 'Fireflies ID', - description: 'Unique transcript ID from Fireflies (maps to: id)', - icon: 'IconKey', - isNullable: true, - }, - { - type: 'DATE_TIME', - name: 'meetingDate', - label: 'Meeting Date', - description: 'When the meeting occurred (maps to: date)', - icon: 'IconCalendar', - isNullable: true, - }, - { - type: 'NUMBER', - name: 'duration', - label: 'Duration (minutes)', - description: 'Meeting duration in minutes (maps to: duration)', - icon: 'IconClock', - isNullable: true, - }, - { - type: 'TEXT', - name: 'organizerEmail', - label: 'Organizer Email', - description: 'Meeting organizer email (maps to: organizer_email)', - icon: 'IconMail', - isNullable: true, - }, - { - type: 'LINKS', - name: 'transcriptUrl', - label: 'Transcript URL', - description: 'Link to full transcript (maps to: transcript_url)', - icon: 'IconFileText', - isNullable: true, - }, - { - type: 'LINKS', - name: 'meetingLink', - label: 'Meeting Link', - description: 'Original meeting link (maps to: meeting_link)', - icon: 'IconLink', - isNullable: true, - }, - - // === Pro+ Fields (summary, speakers, audio_url, transcript) === - { - type: 'TEXT', - name: 'transcript', - label: 'Full Transcript', - description: 'Full meeting transcript with speaker names and timestamps [Pro+]', - icon: 'IconFileText', - isNullable: true, - }, - { - type: 'TEXT', - name: 'overview', - label: 'Overview', - description: 'AI-generated meeting summary (maps to: summary.overview) [Pro+]', - icon: 'IconFileDescription', - isNullable: true, - }, - { - type: 'TEXT', - name: 'notes', - label: 'AI Notes', - description: 'Detailed AI-generated meeting notes (maps to: summary.notes) [Pro+]', - icon: 'IconNotes', - isNullable: true, - }, - { - type: 'TEXT', - name: 'keywords', - label: 'Keywords', - description: 'Key topics extracted (maps to: summary.keywords) [Pro+]', - icon: 'IconTags', - isNullable: true, - }, - { - type: 'LINKS', - name: 'audioUrl', - label: 'Audio URL', - description: 'Link to audio recording (maps to: audio_url) [Pro+]', - icon: 'IconHeadphones', - isNullable: true, - }, - - // === Business+ Fields (analytics, video_url, full summary) === - { - type: 'TEXT', - name: 'meetingType', - label: 'Meeting Type', - description: 'AI-detected meeting type (maps to: summary.meeting_type) [Business+]', - icon: 'IconTag', - isNullable: true, - }, - { - type: 'TEXT', - name: 'topics', - label: 'Topics Discussed', - description: 'Topics covered in meeting (maps to: summary.topics_discussed) [Business+]', - icon: 'IconListDetails', - isNullable: true, - }, - { - type: 'NUMBER', - name: 'actionItemsCount', - label: 'Action Items', - description: 'Number of action items (count of: summary.action_items) [Business+]', - icon: 'IconCheckbox', - isNullable: true, - }, - { - type: 'NUMBER', - name: 'positivePercent', - label: 'Positive %', - description: 'Positive sentiment % (maps to: analytics.sentiments.positive_pct) [Business+]', - icon: 'IconThumbUp', - isNullable: true, - }, - { - type: 'NUMBER', - name: 'negativePercent', - label: 'Negative %', - description: 'Negative sentiment % (maps to: analytics.sentiments.negative_pct) [Business+]', - icon: 'IconThumbDown', - isNullable: true, - }, - { - type: 'NUMBER', - name: 'neutralPercent', - label: 'Neutral %', - description: 'Neutral sentiment % (maps to: analytics.sentiments.neutral_pct) [Business+]', - icon: 'IconMoodNeutral', - isNullable: true, - }, - { - type: 'LINKS', - name: 'videoUrl', - label: 'Video URL', - description: 'Link to video recording (maps to: video_url) [Business+]', - icon: 'IconVideo', - isNullable: true, - }, - - // === Import Tracking Fields (Internal) === - { - type: 'SELECT', - name: 'importStatus', - label: 'Import Status', - description: 'Status of the Fireflies import', - icon: 'IconCheck', - isNullable: true, - options: [ - { value: 'SUCCESS', label: 'Success', position: 0, color: 'green' }, - { value: 'PARTIAL', label: 'Partial', position: 1, color: 'blue' }, - { value: 'FAILED', label: 'Failed', position: 2, color: 'red' }, - { value: 'PENDING', label: 'Pending', position: 3, color: 'yellow' }, - { value: 'RETRYING', label: 'Retrying', position: 4, color: 'orange' }, - ], - }, - { - type: 'TEXT', - name: 'importError', - label: 'Import Error', - description: 'Error message if import failed', - icon: 'IconAlertTriangle', - isNullable: true, - }, - { - type: 'DATE_TIME', - name: 'lastImportAttempt', - label: 'Last Import Attempt', - description: 'When import was last attempted', - icon: 'IconClock', - isNullable: true, - }, - { - type: 'NUMBER', - name: 'importAttempts', - label: 'Import Attempts', - description: 'Number of import attempts', - icon: 'IconRepeat', - isNullable: true, - }, -]; - -const graphqlRequest = async (query: string, variables: Record = {}) => { - const response = await fetch(`${SERVER_URL}/metadata`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${API_KEY}`, - }, - body: JSON.stringify({ query, variables }), - }); - - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`GraphQL request failed (${response.status}): ${errorText}`); - } - - const json = await response.json(); - - if (json.errors) { - throw new Error(`GraphQL errors: ${JSON.stringify(json.errors, null, 2)}`); - } - - return json.data; -}; - -const findMeetingObject = async () => { - const query = ` - query FindMeetingObject { - objects(paging: { first: 200 }) { - edges { - node { - id - nameSingular - labelSingular - labelPlural - fields { - edges { - node { - id - name - label - type - } - } - } - } - } - } - } - `; - - const data = await graphqlRequest(query); - const edges = data.objects?.edges || []; - const meetingEdge = edges.find( - (edge: any) => edge?.node?.nameSingular === 'meeting', - ); - - if (!meetingEdge) { - throw new Error('Meeting object not found. Please run "npx twenty-cli app sync" first.'); - } - - return meetingEdge.node; -}; - -const findNoteObject = async () => { - const query = ` - query FindObjects { - objects(paging: { first: 100 }) { - edges { - node { - id - nameSingular - labelSingular - } - } - } - } - `; - - const data = await graphqlRequest(query); - const edges = data.objects?.edges || []; - const noteEdge = edges.find( - (edge: any) => edge?.node?.nameSingular === 'note', - ); - - if (!noteEdge) { - throw new Error('Note object not found.'); - } - - return noteEdge.node; -}; - -const createField = async (objectId: string, field: FieldDefinition) => { - const mutation = ` - mutation CreateField($input: CreateOneFieldMetadataInput!) { - createOneField(input: $input) { - id - name - label - type - description - } - } - `; - - const input = { - field: { - type: field.type, - name: field.name, - label: field.label, - description: field.description, - icon: field.icon || 'IconAbc', - isNullable: field.isNullable !== false, - isActive: true, - isCustom: true, - objectMetadataId: objectId, - ...(field.relationCreationPayload && { - relationCreationPayload: field.relationCreationPayload, - }), - ...(field.options && { - options: field.options, - }), - }, - }; - - try { - const data = await graphqlRequest(mutation, { input }); - return data.createOneField; - } catch (error) { - if (error instanceof Error) { - const message = error.message; - if ( - message.includes('already exists') || - message.includes('not available') || - message.includes('Duplicating') - ) { - return null; - } - } - throw error; - } -}; - -const main = async () => { - console.log('šŸš€ Adding custom fields to Meeting object...\n'); - - try { - // Step 1: Find Meeting and Note objects - console.log('šŸ“‹ Finding Meeting object...'); - const meetingObject = await findMeetingObject(); - console.log(`āœ… Found Meeting object: ${meetingObject.labelSingular ?? meetingObject.nameSingular ?? 'Meeting'} (ID: ${meetingObject.id})\n`); - - console.log('šŸ“‹ Finding Note object...'); - const noteObject = await findNoteObject(); - console.log(`āœ… Found Note object: ${noteObject.labelSingular ?? noteObject.nameSingular ?? 'Note'} (ID: ${noteObject.id})\n`); - - // Step 2: Update note field with relationCreationPayload - const fieldsToCreate = MEETING_FIELDS.map(field => { - if (field.name === 'note' && field.type === 'RELATION') { - return { - ...field, - relationCreationPayload: { - targetObjectMetadataId: noteObject.id, - targetFieldLabel: 'Meeting', - targetFieldIcon: 'IconCalendarEvent', - type: 'MANY_TO_ONE' as const, - }, - }; - } - return field; - }); - - // Step 3: Check existing fields - const existingFields = meetingObject.fields?.edges?.map((edge: any) => edge.node.name) || []; - console.log(`šŸ“Œ Existing fields: ${existingFields.join(', ')}\n`); - - // Step 4: Create custom fields - console.log('āž• Creating custom fields...\n'); - - let createdCount = 0; - let failedCount = 0; - let skippedCount = 0; - - for (const field of fieldsToCreate) { - try { - if (existingFields.includes(field.name)) { - console.log(` ā­ļø ${field.name} - already exists`); - skippedCount++; - continue; - } - - const result = await createField(meetingObject.id, field); - - if (result) { - console.log(` āœ… ${field.name} - created successfully`); - createdCount++; - } else { - console.log(` ā­ļø ${field.name} - skipped (already exists)`); - skippedCount++; - } - } catch (error) { - console.error(` āŒ ${field.name} - failed: ${error instanceof Error ? error.message : String(error)}`); - failedCount++; - } - } - - // Step 4: Summary - console.log('\n' + '='.repeat(60)); - console.log('šŸ“Š Summary:'); - console.log(` āœ… Created: ${createdCount} fields`); - console.log(` ā­ļø Skipped: ${skippedCount} fields`); - console.log(` āŒ Failed: ${failedCount} fields`); - console.log('='.repeat(60)); - - if (failedCount > 0) { - console.log('\nāš ļø Some fields failed to create. Please check the errors above.'); - process.exit(1); - } - - if (createdCount === 0 && skippedCount === MEETING_FIELDS.length) { - console.log('\n✨ All fields already exist. Nothing to do!\n'); - } else if (createdCount > 0) { - console.log('\n✨ Custom fields added successfully!\n'); - } - - } catch (error) { - console.error('\nāŒ Error:', error instanceof Error ? error.message : String(error)); - process.exit(1); - } -} - -// Run the script -main().catch((error) => { - console.error('Fatal error:', error); - process.exit(1); -}); - diff --git a/packages/twenty-apps/community/fireflies/scripts/debug-meeting.ts b/packages/twenty-apps/community/fireflies/scripts/debug-meeting.ts deleted file mode 100644 index fb8356e0a1..0000000000 --- a/packages/twenty-apps/community/fireflies/scripts/debug-meeting.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* oxlint-disable no-console */ -import * as dotenv from 'dotenv'; -import * as path from 'path'; -import { fileURLToPath } from 'url'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -dotenv.config({ path: path.join(__dirname, '../.env') }); - -const FIREFLIES_API_KEY = process.env.FIREFLIES_API_KEY; -const meetingId = process.argv[2] || '01KBMR1ZYQ34YP8D2KB4B16QPH'; - -const main = async (): Promise => { - if (!FIREFLIES_API_KEY) { - console.error('āŒ FIREFLIES_API_KEY is required'); - process.exit(1); - } - - const query = ` - query GetTranscript($transcriptId: String!) { - transcript(id: $transcriptId) { - id - title - summary { - overview - notes - gist - bullet_gist - short_summary - short_overview - outline - shorthand_bullet - action_items - keywords - topics_discussed - meeting_type - transcript_chapters - } - } - } - `; - - const response = await fetch('https://api.fireflies.ai/graphql', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${FIREFLIES_API_KEY}`, - }, - body: JSON.stringify({ query, variables: { transcriptId: meetingId } }), - }); - - if (!response.ok) { - const errorText = await response.text(); - console.error(`āŒ API request failed with status ${response.status}`); - console.error(errorText); - process.exit(1); - } - - const json = await response.json(); - console.log('=== Fireflies API Response ===\n'); - console.log(JSON.stringify(json, null, 2)); - - if (json.data?.transcript?.summary) { - const s = json.data.transcript.summary; - console.log('\n=== Summary Fields Status ==='); - console.log('overview:', s.overview ? `āœ“ (${s.overview.length} chars)` : 'āœ— empty'); - console.log('notes:', s.notes ? `āœ“ (${s.notes.length} chars)` : 'āœ— empty'); - console.log('gist:', s.gist ? `āœ“ (${s.gist.length} chars)` : 'āœ— empty'); - console.log('bullet_gist:', s.bullet_gist ? `āœ“ (${s.bullet_gist.length} chars)` : 'āœ— empty'); - console.log('outline:', s.outline ? `āœ“ (${s.outline.length} chars)` : 'āœ— empty'); - console.log('action_items:', s.action_items?.length || 0, 'items'); - console.log('topics_discussed:', s.topics_discussed?.length || 0, 'topics'); - console.log('keywords:', s.keywords?.length || 0, 'keywords'); - } -}; - -main().catch((error) => { - console.error('āŒ Failed to fetch meeting'); - console.error(error instanceof Error ? error.message : String(error)); - process.exit(1); -}); diff --git a/packages/twenty-apps/community/fireflies/scripts/delete-meeting.ts b/packages/twenty-apps/community/fireflies/scripts/delete-meeting.ts deleted file mode 100644 index df0fc15cf7..0000000000 --- a/packages/twenty-apps/community/fireflies/scripts/delete-meeting.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* oxlint-disable no-console */ -import * as dotenv from 'dotenv'; -import * as path from 'path'; -import { fileURLToPath } from 'url'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -dotenv.config({ path: path.join(__dirname, '../.env') }); - -const SERVER_URL = process.env.SERVER_URL || 'http://localhost:3000'; -const API_KEY = process.env.TWENTY_API_KEY; -const meetingId = process.argv[2]; - -const main = async (): Promise => { - if (!API_KEY) { - console.error('āŒ TWENTY_API_KEY is required'); - process.exit(1); - } - - if (!meetingId) { - console.error('Usage: yarn delete:meeting '); - process.exit(1); - } - - const response = await fetch(`${SERVER_URL}/graphql`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${API_KEY}`, - }, - body: JSON.stringify({ - query: `mutation DeleteMeeting($id: UUID!) { deleteMeeting(id: $id) { id } }`, - variables: { id: meetingId }, - }), - }); - - if (!response.ok) { - const errorText = await response.text(); - console.error(`āŒ Delete failed (status ${response.status})`); - console.error(errorText); - process.exit(1); - } - - const result = await response.json(); - const deletedId = result.data?.deleteMeeting?.id; - if (result.errors || !deletedId) { - const message = result.errors?.[0]?.message || 'deleteMeeting returned null'; - console.error('āŒ Error:', message); - process.exit(1); - } - - console.log('āœ… Deleted meeting:', deletedId); -}; - -main().catch((error) => { - console.error('āŒ Failed to delete meeting'); - console.error(error instanceof Error ? error.message : String(error)); - process.exit(1); -}); diff --git a/packages/twenty-apps/community/fireflies/scripts/fetch-all-meetings.ts b/packages/twenty-apps/community/fireflies/scripts/fetch-all-meetings.ts deleted file mode 100644 index 8043c7f17a..0000000000 --- a/packages/twenty-apps/community/fireflies/scripts/fetch-all-meetings.ts +++ /dev/null @@ -1,221 +0,0 @@ -/* oxlint-disable no-console */ -/** - * Fetch historical Fireflies meetings and insert into Twenty. - * - * Usage: - * yarn meeting:all [--from 2024-01-01] [--to 2024-02-01] [--organizer alice@x.com] [--participant bob@x.com] [--channel ] [--mine] [--dry-run] [--page-size 50] [--max-records 200] - * - * Required env: - * FIREFLIES_API_KEY - * TWENTY_API_KEY - * - * Optional env: - * SERVER_URL (defaults to http://localhost:3000) - * FIREFLIES_PLAN (free|pro|business|enterprise) - * AUTO_CREATE_CONTACTS (true|false) - * FIREFLIES_* retry settings (see README) - */ - -import * as dotenv from 'dotenv'; -import { existsSync } from 'fs'; -import { dirname, join } from 'path'; -import { fileURLToPath } from 'url'; - -import { FirefliesApiClient } from '../src/fireflies-api-client'; -import { type HistoricalImportFilters, HistoricalImporter } from '../src/historical-importer'; -import { createLogger } from '../src/logger'; -import { TwentyCrmService } from '../src/twenty-crm-service'; -import { - getApiUrl, - getFirefliesPlan, - getSummaryFetchConfig, - shouldAutoCreateContacts, -} from '../src/utils'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -const envPath = join(__dirname, '..', '.env'); -if (existsSync(envPath)) { - dotenv.config({ path: envPath }); -} - -const logger = createLogger('cli:meeting:all'); - -type CliArgs = { - from?: string; - to?: string; - organizer?: string[]; - participant?: string[]; - channel?: string; - host?: string; - mine?: boolean; - dryRun?: boolean; - pageSize?: number; - maxRecords?: number; - limit?: number; -}; - -const parseArgs = (argv: string[]): CliArgs => { - const args: CliArgs = {}; - - const parseNumberArg = (value?: string): number | undefined => { - if (!value) return undefined; - const parsed = Number.parseInt(value, 10); - return Number.isNaN(parsed) ? undefined : parsed; - }; - - for (let i = 0; i < argv.length; i += 1) { - const current = argv[i]; - const next = argv[i + 1]; - switch (current) { - case '--from': - args.from = next; - i += 1; - break; - case '--to': - args.to = next; - i += 1; - break; - case '--organizer': - args.organizer = next ? next.split(',') : []; - i += 1; - break; - case '--participant': - args.participant = next ? next.split(',') : []; - i += 1; - break; - case '--channel': - args.channel = next; - i += 1; - break; - case '--host': - args.host = next; - i += 1; - break; - case '--mine': - args.mine = true; - break; - case '--dry-run': - args.dryRun = true; - break; - case '--page-size': - args.pageSize = parseNumberArg(next); - i += 1; - break; - case '--max-records': - args.maxRecords = parseNumberArg(next); - i += 1; - break; - case '--limit': - args.limit = parseNumberArg(next); - i += 1; - break; - default: - break; - } - } - - return args; -}; - -const parseDate = (value?: string): number | undefined => { - if (!value) { - return undefined; - } - const parsed = Date.parse(value); - return Number.isNaN(parsed) ? undefined : parsed; -}; - -const main = async (): Promise => { - const args = parseArgs(process.argv.slice(2)); - - const firefliesApiKey = process.env.FIREFLIES_API_KEY || ''; - const twentyApiKey = process.env.TWENTY_API_KEY || ''; - - if (!firefliesApiKey) { - console.error('āŒ FIREFLIES_API_KEY is required'); - process.exit(1); - } - - if (!twentyApiKey) { - console.error('āŒ TWENTY_API_KEY is required'); - process.exit(1); - } - - const fromDate = parseDate(args.from); - const toDate = parseDate(args.to); - - const filters: HistoricalImportFilters = { - fromDate, - toDate, - organizers: args.organizer, - participants: args.participant, - channelId: args.channel, - hostEmail: args.host, - mine: args.mine, - limit: args.limit, - pageSize: args.pageSize, - maxRecords: args.maxRecords, - }; - - const summaryConfig = getSummaryFetchConfig(); - const plan = getFirefliesPlan(); - const autoCreateContacts = shouldAutoCreateContacts(); - - logger.info( - `Starting historical import (dryRun=${Boolean(args.dryRun)}, plan=${plan}, pageSize=${filters.pageSize ?? 50})`, - ); - - const firefliesClient = new FirefliesApiClient(firefliesApiKey); - const twentyService = new TwentyCrmService(twentyApiKey, getApiUrl()); - const importer = new HistoricalImporter(firefliesClient, twentyService); - - const result = await importer.run(filters, { - dryRun: args.dryRun, - autoCreateContacts, - summaryConfig, - plan, - }); - - console.log('āœ… Historical import summary:'); - const summary = { - dryRun: result.dryRun, - totalListed: result.totalListed, - imported: result.imported, - skippedExisting: result.skippedExisting, - summaryPending: result.summaryPending, - failed: result.failed, - }; - console.log(JSON.stringify(summary, null, 2)); - - if (result.statuses.length > 0) { - console.log('Status by meeting:'); - console.table( - result.statuses.map((s) => ({ - meetingId: s.meetingId, - title: s.title ?? '', - status: s.status, - reason: s.reason ?? '', - })), - ); - } - - if (result.failed.length > 0) { - process.exitCode = 1; - } -}; - -main().catch((error) => { - console.error('āŒ Failed to import historical meetings'); - if (error instanceof Error) { - console.error(error.message); - if (error.stack) { - console.error(error.stack); - } - } else { - console.error(String(error)); - } - process.exit(1); -}); - diff --git a/packages/twenty-apps/community/fireflies/scripts/ingest-meeting.ts b/packages/twenty-apps/community/fireflies/scripts/ingest-meeting.ts deleted file mode 100644 index 4b36d2d7a3..0000000000 --- a/packages/twenty-apps/community/fireflies/scripts/ingest-meeting.ts +++ /dev/null @@ -1,93 +0,0 @@ -/* oxlint-disable no-console */ -/** - * Fetch a Fireflies meeting by ID and insert it into Twenty using the same path - * as the webhook handler. - * - * Usage: - * yarn meeting:ingest - * Or - * MEETING_ID=... yarn meeting:ingest - * - * Required env: - * FIREFLIES_API_KEY - * FIREFLIES_WEBHOOK_SECRET - * TWENTY_API_KEY - * - * Optional env: - * SERVER_URL (defaults to http://localhost:3000) - * FIREFLIES_PLAN (free|pro|business|enterprise) - */ - -import { createHmac } from 'crypto'; -import * as dotenv from 'dotenv'; -import { existsSync } from 'fs'; -import { dirname, join } from 'path'; -import { fileURLToPath } from 'url'; - -import { WebhookHandler } from '../src/webhook-handler'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -const envPath = join(__dirname, '..', '.env'); -if (existsSync(envPath)) { - dotenv.config({ path: envPath }); -} - -const args = process.argv.slice(2); -const meetingId = args[0] || process.env.MEETING_ID; - -if (!meetingId) { - console.error('āŒ meetingId is required (arg or MEETING_ID env)'); - process.exit(1); -} - -const firefliesApiKey = process.env.FIREFLIES_API_KEY || ''; -const twentyApiKey = process.env.TWENTY_API_KEY || ''; -const webhookSecret = process.env.FIREFLIES_WEBHOOK_SECRET || ''; - -if (!firefliesApiKey) { - console.error('āŒ FIREFLIES_API_KEY is required'); - process.exit(1); -} -if (!twentyApiKey) { - console.error('āŒ TWENTY_API_KEY is required'); - process.exit(1); -} -if (!webhookSecret) { - console.error('āŒ FIREFLIES_WEBHOOK_SECRET is required to generate signature'); - process.exit(1); -} - -const payload = { - meetingId, - eventType: 'Transcription completed', -}; - -const body = JSON.stringify(payload); -const signature = `sha256=${createHmac('sha256', webhookSecret) - .update(body, 'utf8') - .digest('hex')}`; - -const main = async (): Promise => { - console.log(`šŸš€ Ingesting meeting ${meetingId} via webhook handler`); - const handler = new WebhookHandler(); - const result = await handler.handle(payload, { - 'x-hub-signature': signature, - body, - }); - - console.log('āœ… Result:'); - console.log(JSON.stringify(result, null, 2)); - - if (result.errors && result.errors.length > 0) { - process.exitCode = 1; - } -}; - -main().catch((error) => { - console.error('āŒ Failed to ingest meeting'); - console.error(error instanceof Error ? error.message : String(error)); - process.exit(1); -}); - diff --git a/packages/twenty-apps/community/fireflies/scripts/test-webhook.ts b/packages/twenty-apps/community/fireflies/scripts/test-webhook.ts deleted file mode 100644 index 82cfbbe085..0000000000 --- a/packages/twenty-apps/community/fireflies/scripts/test-webhook.ts +++ /dev/null @@ -1,241 +0,0 @@ -/* oxlint-disable no-console */ -/** - * Test script for Fireflies webhook against local Twenty instance - * - * Usage: - * yarn test:webhook - * # or - * npx tsx scripts/test-webhook.ts - * - * Prerequisites: - * 1. Twenty server running on http://localhost:3000 - * 2. Fireflies app synced: npx twenty-cli app sync - * 3. Custom fields created: yarn setup:fields - * 4. API key configured (get from Settings > Developers > API Keys) - * 5. Environment variables set (copy .env.example to .env and fill values) - */ - -import * as crypto from 'crypto'; -import * as dotenv from 'dotenv'; -import { existsSync } from 'fs'; -import { dirname, join } from 'path'; -import { fileURLToPath } from 'url'; - -// Get __dirname equivalent for ES modules -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -// Load environment variables -const envPath = join(__dirname, '..', '.env'); -if (existsSync(envPath)) { - dotenv.config({ path: envPath }); -} else { - console.warn('āš ļø .env file not found, using environment variables'); -} - -// Configuration -const SERVER_URL = process.env.SERVER_URL || 'http://localhost:3000'; -const TWENTY_API_KEY = process.env.TWENTY_API_KEY; -const FIREFLIES_WEBHOOK_SECRET = process.env.FIREFLIES_WEBHOOK_SECRET || 'test_secret'; -const _FIREFLIES_API_KEY = process.env.FIREFLIES_API_KEY || 'test_api_key'; - -// Test meeting data (simulating Fireflies API response) -const TEST_MEETING_ID = process.env.MEETING_ID || 'test-meeting-local-' + Date.now(); -const CLIENT_REFERENCE_ID = process.env.CLIENT_REFERENCE_ID; - -const TEST_WEBHOOK_PAYLOAD = { - meetingId: TEST_MEETING_ID, - eventType: 'Transcription completed', - ...(CLIENT_REFERENCE_ID ? { clientReferenceId: CLIENT_REFERENCE_ID } : {}), -}; - -// Mock Fireflies GraphQL API response -const MOCK_FIREFLIES_RESPONSE = { - data: { - meeting: { - id: TEST_MEETING_ID, - title: 'Local Test Meeting', - date: new Date().toISOString(), - duration: 1800, // 30 minutes - participants: [ - { email: 'test1@example.com', name: 'Test User One' }, - { email: 'test2@example.com', name: 'Test User Two' }, - ], - organizer_email: 'organizer@example.com', - summary: { - action_items: ['Complete integration testing', 'Review webhook logs'], - keywords: ['testing', 'integration', 'webhook'], - overview: 'This is a test meeting to verify the Fireflies webhook integration.', - gist: 'Quick test summary', - topics_discussed: ['Webhook testing', 'Integration verification'], - meeting_type: 'Test', - }, - analytics: { - sentiments: { - positive_pct: 75, - negative_pct: 5, - neutral_pct: 20, - }, - }, - transcript_url: 'https://app.fireflies.ai/transcript/' + TEST_MEETING_ID, - recording_url: 'https://app.fireflies.ai/recording/' + TEST_MEETING_ID, - summary_status: 'ready', - }, - }, -}; - -// Generate HMAC signature -const generateHMACSignature = (body: string, secret: string): string => { - const signature = crypto - .createHmac('sha256', secret) - .update(body, 'utf8') - .digest('hex'); - return `sha256=${signature}`; -}; - -// Mock Fireflies API fetch (currently unused but kept for reference) -// In production, you'd need to mock this at the network level -const _mockFirefliesFetch = async (url: string, options?: RequestInit) => { - if (url.includes('graphql.fireflies.ai')) { - // Return mock Fireflies API response - return new Response(JSON.stringify(MOCK_FIREFLIES_RESPONSE), { - status: 200, - headers: { 'Content-Type': 'application/json' }, - }); - } - // For Twenty API calls, use real fetch - return fetch(url, options); -}; - -const main = async () => { - console.log('🧪 Testing Fireflies Webhook Against Local Twenty Instance\n'); - console.log(`šŸ“ Server URL: ${SERVER_URL}`); - console.log(`šŸ”‘ API Key: ${TWENTY_API_KEY ? 'āœ… Configured' : 'āŒ Missing'}`); - console.log(`šŸ” Webhook Secret: ${FIREFLIES_WEBHOOK_SECRET ? 'āœ… Configured' : 'āš ļø Using test secret'}\n`); - - // Validation - if (!TWENTY_API_KEY) { - console.error('āŒ Error: TWENTY_API_KEY is required'); - console.error(' Get your API key from: Settings > Developers > API Keys'); - process.exit(1); - } - - // Prepare webhook payload - const unsignedBody = JSON.stringify(TEST_WEBHOOK_PAYLOAD); - const signature = generateHMACSignature(unsignedBody, FIREFLIES_WEBHOOK_SECRET); - const payloadWithSignature = { - ...TEST_WEBHOOK_PAYLOAD, - 'x-hub-signature': signature, - }; - const body = JSON.stringify(payloadWithSignature); - - console.log('šŸ“¤ Sending webhook payload:'); - console.log(JSON.stringify(payloadWithSignature, null, 2)); - console.log('\nā„¹ļø Signature is sent both as header (preferred) and in payload as fallback (headers are not passed to serverless functions)\n'); - console.log(`\nšŸ” HMAC Signature: ${signature}\n`); - - // Check if server is reachable - try { - const healthCheck = await fetch(`${SERVER_URL}/api/health`); - if (!healthCheck.ok) { - throw new Error(`Server health check failed: ${healthCheck.status}`); - } - console.log('āœ… Server is reachable\n'); - } catch { - console.error(`āŒ Cannot reach server at ${SERVER_URL}`); - console.error(' Make sure Twenty is running: cd twenty && yarn dev'); - process.exit(1); - } - - // Note: In a real test, we'd intercept fetch calls - // For now, we'll make a direct request to the webhook endpoint - // The actual serverless function will call Fireflies API - // This test validates the endpoint is accessible - - // Webhook endpoint: The route path from manifest is /webhook/fireflies - // Routes are matched after removing /s/ prefix - // So /s/webhook/fireflies should match the route /webhook/fireflies - const webhookUrl = `${SERVER_URL}/s/webhook/fireflies`; - console.log(`šŸ“” Calling webhook endpoint: ${webhookUrl}\n`); - - try { - // Note: This will fail because the serverless function needs to call - // Fireflies API, which we can't easily mock at the endpoint level. - // In development, you might want to set FIREFLIES_API_KEY to a test value - // and mock the Fireflies API endpoint separately. - - const response = await fetch(webhookUrl, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${TWENTY_API_KEY}`, - 'x-hub-signature': signature, - }, - body: body, - }); - - const responseText = await response.text(); - let responseData; - try { - responseData = JSON.parse(responseText); - } catch { - responseData = responseText; - } - - console.log(`šŸ“„ Response Status: ${response.status} ${response.statusText}`); - console.log('šŸ“„ Response Body:'); - console.log(JSON.stringify(responseData, null, 2)); - - // Report whether the server appears to have received the header signature - const debugMessages = Array.isArray((responseData as any)?.debug) - ? ((responseData as any).debug as string[]) - : []; - const headerMissing = - debugMessages.some((msg) => msg.includes('headerKeys=none')) || - debugMessages.some((msg) => msg.includes('providedSignature=undefined')); - const signatureErrors = - Array.isArray((responseData as any)?.errors) && - ((responseData as any).errors as unknown[]).some( - (err) => typeof err === 'string' && err.toLowerCase().includes('signature'), - ); - - if (headerMissing) { - console.log( - '\nāš ļø Server did not report any received headers; it may be using payload fallback for signature verification.', - ); - } else { - console.log('\nāœ… Server reported headers present (header-based signature should be used).'); - } - - if (signatureErrors) { - console.log('āš ļø Signature was rejected by the server (check webhook secret / payload).'); - } - - if (response.ok) { - console.log('\nāœ… Webhook test completed successfully!'); - console.log('\nšŸ“‹ Next steps:'); - console.log(' 1. Check Twenty CRM for new Meeting/Note records'); - console.log(' 2. Verify custom fields are populated'); - console.log(' 3. Check server logs for any errors'); - } else { - console.log('\nāš ļø Webhook returned an error status'); - console.log(' This might be expected if Fireflies API key is not configured'); - console.log(' or if the meeting data fetch fails.'); - } - } catch (error) { - console.error('\nāŒ Error calling webhook:'); - console.error(error instanceof Error ? error.message : String(error)); - console.error('\nšŸ’” Troubleshooting:'); - console.error(' 1. Ensure Twenty server is running'); - console.error(' 2. Ensure app is synced: npx twenty-cli app sync'); - console.error(' 3. Check API key is valid'); - console.error(' 4. Verify webhook endpoint exists'); - process.exit(1); - } -}; - -main().catch((error) => { - console.error('Fatal error:', error); - process.exit(1); -}); - diff --git a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/index.ts b/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/index.ts deleted file mode 100644 index 15a583e4ba..0000000000 --- a/packages/twenty-apps/community/fireflies/serverlessFunctions/receive-fireflies-notes/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Serverless function entry point - re-exports from src/lib -export { config, main } from '../../../src'; -export type { - FirefliesMeetingData, - FirefliesParticipant, - FirefliesWebhookPayload, - ProcessResult, - SummaryFetchConfig, - SummaryStrategy -} from '../../../src'; - diff --git a/packages/twenty-apps/community/fireflies/src/__tests__/fireflies-webhook.spec.ts b/packages/twenty-apps/community/fireflies/src/__tests__/fireflies-webhook.spec.ts deleted file mode 100644 index 246d8beb8e..0000000000 --- a/packages/twenty-apps/community/fireflies/src/__tests__/fireflies-webhook.spec.ts +++ /dev/null @@ -1,718 +0,0 @@ -import * as crypto from 'crypto'; - -import { - main, - type FirefliesMeetingData, - type FirefliesWebhookPayload, -} from '../'; - -// Helper to generate HMAC signature -const generateHMACSignature = (body: string, secret: string): string => { - const signature = crypto - .createHmac('sha256', secret) - .update(body, 'utf8') - .digest('hex'); - return `sha256=${signature}`; -}; - -// Mock raw Fireflies API response with full summary (before transformation) -const mockFirefliesApiResponseWithSummary = { - id: 'test-meeting-001', - title: 'Product Demo with Client', - date: '2024-11-02T14:00:00Z', - duration: 1800, - participants: [ - 'Sarah Sales ', - 'John Client ', - ], - organizer_email: 'sales@company.com', - summary: { - action_items: [ - 'Follow up with pricing proposal by Friday', - 'Schedule technical deep-dive next week', - 'Share case studies from similar clients', - ], - keywords: ['product demo', 'pricing', 'technical requirements', 'integration'], - overview: 'Successful product demonstration with positive client feedback. Client expressed strong interest in the enterprise plan and requested technical documentation for their IT team.', - gist: 'Product demo went well, client interested in enterprise plan, next steps identified', - topics_discussed: ['product features', 'pricing discussion', 'integration capabilities', 'support options'], - meeting_type: 'Sales Call', - bullet_gist: '• Demonstrated core product features\n• Discussed enterprise pricing\n• Addressed integration questions', - }, - analytics: { - sentiments: { - positive_pct: 75, - negative_pct: 10, - neutral_pct: 15, - }, - }, - transcript_url: 'https://app.fireflies.ai/transcript/test-001', - video_url: 'https://app.fireflies.ai/recording/test-001', - summary_status: 'completed', -}; - -// Transformed meeting data (after fetchFirefliesMeetingData processes it) -const mockMeetingWithFullSummary: FirefliesMeetingData = { - id: 'test-meeting-001', - title: 'Product Demo with Client', - date: '2024-11-02T14:00:00Z', - duration: 1800, - participants: [ - { email: 'sales@company.com', name: 'Sarah Sales' }, - { email: 'client@customer.com', name: 'John Client' }, - ], - organizer_email: 'sales@company.com', - summary: { - action_items: [ - 'Follow up with pricing proposal by Friday', - 'Schedule technical deep-dive next week', - 'Share case studies from similar clients', - ], - keywords: ['product demo', 'pricing', 'technical requirements', 'integration'], - overview: 'Successful product demonstration with positive client feedback. Client expressed strong interest in the enterprise plan and requested technical documentation for their IT team.', - gist: 'Product demo went well, client interested in enterprise plan, next steps identified', - topics_discussed: ['product features', 'pricing discussion', 'integration capabilities', 'support options'], - meeting_type: 'Sales Call', - bullet_gist: '• Demonstrated core product features\n• Discussed enterprise pricing\n• Addressed integration questions', - }, - analytics: { - sentiments: { - positive_pct: 75, - negative_pct: 10, - neutral_pct: 15, - }, - }, - transcript_url: 'https://app.fireflies.ai/transcript/test-001', - video_url: 'https://app.fireflies.ai/recording/test-001', - summary_status: 'completed', -}; - -// Mock raw API response without summary (processing) -const mockFirefliesApiResponseWithoutSummary = { - id: 'test-meeting-002', - title: 'Team Standup', - date: '2024-11-02T15:00:00Z', - duration: 900, - participants: [ - 'Alice Developer ', - 'Bob Developer ', - ], - organizer_email: 'dev1@company.com', - summary: { - action_items: [], - keywords: [], - overview: '', - gist: '', - topics_discussed: [], - }, - transcript_url: 'https://app.fireflies.ai/transcript/test-002', - summary_status: 'processing', -}; - -// Mock meeting data without summary (processing) - currently unused but kept for reference -const _mockMeetingWithoutSummary = { - id: 'test-meeting-002', - title: 'Team Standup', - date: '2024-11-02T15:00:00Z', - duration: 900, - participants: [ - { email: 'dev1@company.com', name: 'Alice Developer' }, - { email: 'dev2@company.com', name: 'Bob Developer' }, - ], - organizer_email: 'dev1@company.com', - summary: { - action_items: [], - keywords: [], - overview: '', - gist: '', - topics_discussed: [], - }, - transcript_url: 'https://app.fireflies.ai/transcript/test-002', - summary_status: 'processing', -}; - -// Mock raw API response for team meeting -const mockFirefliesApiResponseTeamMeeting = { - ...mockFirefliesApiResponseWithSummary, - id: 'test-team-003', - title: 'Sprint Planning', - participants: [ - 'Alice Scrum ', - 'Bob Developer ', - 'Carol Coder ', - 'David QA ', - ], - summary: { - ...mockFirefliesApiResponseWithSummary.summary, - meeting_type: 'Sprint Planning', - }, -}; - -// Mock team meeting with multiple participants (transformed) - currently unused but kept for reference -const _mockTeamMeeting = { - ...mockMeetingWithFullSummary, - id: 'test-team-003', - title: 'Sprint Planning', - participants: [ - { email: 'scrum@company.com', name: 'Alice Scrum' }, - { email: 'dev1@company.com', name: 'Bob Developer' }, - { email: 'dev2@company.com', name: 'Carol Coder' }, - { email: 'qa@company.com', name: 'David QA' }, - ], - summary: { - ...mockMeetingWithFullSummary.summary, - meeting_type: 'Sprint Planning', - }, -}; - -// Mock environment variables -const originalEnv = process.env; - -beforeEach(() => { - process.env = { - ...originalEnv, - FIREFLIES_WEBHOOK_SECRET: 'test_webhook_secret', - FIREFLIES_API_KEY: 'test_fireflies_api_key', - TWENTY_API_KEY: 'test_twenty_api_key', - SERVER_URL: 'http://localhost:3000', - AUTO_CREATE_CONTACTS: 'true', - DEBUG_LOGS: 'false', - FIREFLIES_SUMMARY_STRATEGY: 'immediate_with_retry', - FIREFLIES_RETRY_ATTEMPTS: '3', - FIREFLIES_RETRY_DELAY: '1000', - }; -}); - -afterEach(() => { - process.env = originalEnv; - jest.clearAllMocks(); -}); - -describe('Fireflies Webhook Integration v2', () => { - describe('Webhook Authentication', () => { - it('should verify HMAC SHA-256 signature from x-hub-signature header', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - // Mock Fireflies API - global.fetch = jest.fn().mockImplementation((url: string) => { - if (url === 'https://api.fireflies.ai/graphql') { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - transcript: mockFirefliesApiResponseWithSummary, // Use raw API format - }, - }), - }); - } - // Twenty API mocks - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - meetings: { edges: [] }, - people: { edges: [] }, - createPerson: { id: 'new-person-id' }, - createNote: { id: 'new-note-id' }, - createMeeting: { id: 'new-meeting-id' }, - }, - }), - }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(result.success).toBe(true); - }); - - it('should reject requests with invalid signature', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const invalidSignature = 'sha256=invalid_signature_here'; - - const result = await main(payload, { 'x-hub-signature': invalidSignature, body }); - - expect(result.success).toBe(false); - expect(result.errors).toContain('Invalid webhook signature'); - }); - - it('should reject requests without signature header', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const result = await main(payload, {}); - - expect(result.success).toBe(false); - expect(result.errors).toContain('Invalid webhook signature'); - }); - - it('should reject requests with missing webhook secret env var', async () => { - delete process.env.FIREFLIES_WEBHOOK_SECRET; - - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const result = await main(payload, {}); - - expect(result.success).toBe(false); - }); - }); - - describe('Fireflies GraphQL Integration', () => { - it('should fetch meeting data from Fireflies API', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - const firefliesApiMock = jest.fn(); - - global.fetch = jest.fn().mockImplementation((url: string) => { - if (url === 'https://api.fireflies.ai/graphql') { - firefliesApiMock(); - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - transcript: mockFirefliesApiResponseWithSummary, // Use raw API format - }, - }), - }); - } - // Twenty API mocks - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - meetings: { edges: [] }, - people: { edges: [] }, - createPerson: { id: 'new-person-id' }, - createNote: { id: 'new-note-id' }, - createMeeting: { id: 'new-meeting-id' }, - }, - }), - }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(firefliesApiMock).toHaveBeenCalled(); - expect(result.success).toBe(true); - }); - - it('should handle Fireflies API fetch failures gracefully', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - global.fetch = jest.fn().mockImplementation((url: string) => { - if (url === 'https://api.fireflies.ai/graphql') { - return Promise.reject(new Error('Fireflies API unavailable')); - } - return Promise.resolve({ ok: true, json: () => Promise.resolve({ data: {} }) }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(result.success).toBe(false); - expect(result.errors?.[0]).toContain('Fireflies API'); - }); - - it('should handle malformed GraphQL responses', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - global.fetch = jest.fn().mockImplementation((url: string) => { - if (url === 'https://api.fireflies.ai/graphql') { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { malformed: 'response' }, - }), - }); - } - return Promise.resolve({ ok: true, json: () => Promise.resolve({ data: {} }) }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(result.success).toBe(false); - expect(result.errors?.[0]).toContain('Invalid response from Fireflies API'); - }); - }); - - describe('Summary Processing', () => { - it('should create complete records when summary is ready', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - global.fetch = jest.fn().mockImplementation((url: string) => { - if (url === 'https://api.fireflies.ai/graphql') { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { transcript: mockFirefliesApiResponseWithSummary }, // Use raw API format - }), - }); - } - // Twenty API mocks - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - meetings: { edges: [] }, - people: { edges: [] }, - createPerson: { id: 'new-person-id' }, - createNote: { id: 'new-note-id' }, - createMeeting: { id: 'new-meeting-id' }, - }, - }), - }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(result.success).toBe(true); - expect(result.summaryReady).toBe(true); - expect(result.actionItemsCount).toBe(3); - expect(result.sentimentAnalysis).toEqual({ - positive_pct: 75, - negative_pct: 10, - neutral_pct: 15, - }); - expect(result.meetingType).toBe('Sales Call'); - expect(result.keyTopics).toEqual(['product features', 'pricing discussion', 'integration capabilities', 'support options']); - }); - - it('should create basic records when summary is pending', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-002', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - global.fetch = jest.fn().mockImplementation((url: string) => { - if (url === 'https://api.fireflies.ai/graphql') { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { transcript: mockFirefliesApiResponseWithoutSummary }, // Use raw API format - }), - }); - } - // Twenty API mocks - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - meetings: { edges: [] }, - people: { edges: [] }, - createPerson: { id: 'new-person-id' }, - createNote: { id: 'new-note-id' }, - createMeeting: { id: 'new-meeting-id' }, - }, - }), - }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(result.success).toBe(true); - expect(result.summaryPending).toBe(true); - expect(result.noteIds || result.meetingId).toBeDefined(); - }); - - it('should retry summary fetch with exponential backoff', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-003', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - let attemptCount = 0; - - global.fetch = jest.fn().mockImplementation((url: string) => { - if (url === 'https://api.fireflies.ai/graphql') { - attemptCount++; - // First two attempts return no summary, third returns full summary - if (attemptCount < 3) { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { transcript: mockFirefliesApiResponseWithoutSummary }, // Use raw API format - }), - }); - } - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { transcript: mockFirefliesApiResponseWithSummary }, // Use raw API format - }), - }); - } - // Twenty API mocks - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - meetings: { edges: [] }, - people: { edges: [] }, - createPerson: { id: 'new-person-id' }, - createNote: { id: 'new-note-id' }, - createMeeting: { id: 'new-meeting-id' }, - }, - }), - }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(attemptCount).toBe(3); - expect(result.success).toBe(true); - expect(result.summaryReady).toBe(true); - }); - - it('should handle immediate_only strategy with single fetch attempt', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-004', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - let fetchCount = 0; - - global.fetch = jest.fn().mockImplementation((url: string) => { - if (url === 'https://api.fireflies.ai/graphql') { - fetchCount++; - // Return summary not ready - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { transcript: mockFirefliesApiResponseWithoutSummary }, - }), - }); - } - // Twenty API mocks - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - meetings: { edges: [] }, - people: { edges: [] }, - createPerson: { id: 'new-person-id' }, - createNote: { id: 'new-note-id' }, - createMeeting: { id: 'new-meeting-id' }, - }, - }), - }); - }); - - // Override strategy for this test - process.env.FIREFLIES_SUMMARY_STRATEGY = 'immediate_only'; - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - // Should only fetch once with immediate_only strategy - expect(fetchCount).toBe(1); - expect(result.success).toBe(true); - expect(result.summaryPending).toBe(true); - - // Reset to default - process.env.FIREFLIES_SUMMARY_STRATEGY = 'immediate_with_retry'; - }); - }); - - describe('CRM Record Creation', () => { - it('should create summary-focused notes for 1-on-1 meetings', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-meeting-001', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - const createNoteMock = jest.fn(); - - global.fetch = jest.fn().mockImplementation((url: string, options?: RequestInit) => { - if (url === 'https://api.fireflies.ai/graphql') { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { transcript: mockFirefliesApiResponseWithSummary }, // Use raw API format - }), - }); - } - - // Twenty API - const requestBody = options?.body ? JSON.parse(options.body as string) : {}; - if (requestBody.query?.includes('createNote')) { - createNoteMock(requestBody.variables); - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { createNote: { id: 'new-note-id' } }, - }), - }); - } - - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - meetings: { edges: [] }, - people: { edges: [] }, - createPerson: { id: 'new-person-id' }, - createMeeting: { id: 'new-meeting-id' }, - }, - }), - }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(result.success).toBe(true); - expect(createNoteMock).toHaveBeenCalled(); - - const noteData = createNoteMock.mock.calls[0][0]; - expect(noteData.data.title).toContain('Meeting:'); - expect(noteData.data.bodyV2.markdown).toContain('## Overview'); // Markdown header, not bold - expect(noteData.data.bodyV2.markdown).toContain('## Action Items'); // Markdown header, not bold - expect(noteData.data.bodyV2.markdown).toContain('**Sentiment:**'); // This is bold - expect(noteData.data.bodyV2.markdown).toContain('View Full Transcript on Fireflies'); - }); - - it('should create meeting records for multi-party meetings', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-team-003', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - const createMeetingMock = jest.fn(); - - global.fetch = jest.fn().mockImplementation((url: string, options?: RequestInit) => { - if (url === 'https://api.fireflies.ai/graphql') { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { transcript: mockFirefliesApiResponseTeamMeeting }, // Use raw API format - }), - }); - } - - // Twenty API - const requestBody = options?.body ? JSON.parse(options.body as string) : {}; - if (requestBody.query?.includes('createMeeting')) { - createMeetingMock(requestBody.variables); - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { createMeeting: { id: 'new-meeting-id' } }, - }), - }); - } - if (requestBody.query?.includes('createNote')) { - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { createNote: { id: 'new-note-id' } }, - }), - }); - } - - return Promise.resolve({ - ok: true, - json: () => Promise.resolve({ - data: { - meetings: { edges: [] }, - people: { edges: [] }, - createPerson: { id: 'new-person-id' }, - }, - }), - }); - }); - - const result = await main(payload, { 'x-hub-signature': signature, body }); - - expect(result.success).toBe(true); - expect(result.meetingId).toBeDefined(); - expect(createMeetingMock).toHaveBeenCalled(); - }); - }); - - describe('Error Handling & Resilience', () => { - it('should never throw uncaught exceptions', async () => { - const payload: FirefliesWebhookPayload = { - meetingId: 'test-critical-error', - eventType: 'Transcription completed', - }; - - const body = JSON.stringify(payload); - const signature = generateHMACSignature(body, 'test_webhook_secret'); - - global.fetch = jest.fn().mockImplementation(() => { - throw new Error('Critical failure'); - }); - - await expect(main(payload, { 'x-hub-signature': signature, body })).resolves.toEqual( - expect.objectContaining({ success: false, errors: expect.any(Array) }) - ); - }); - - it('should handle missing payload gracefully', async () => { - const result = await main(null as unknown, {}); - - expect(result.success).toBe(false); - expect(result.errors).toBeDefined(); - }); - - it('should handle invalid payload structure', async () => { - const invalidPayload = { invalid: 'data' }; - - const result = await main(invalidPayload as unknown, {}); - - expect(result.success).toBe(false); - expect(result.errors).toBeDefined(); - }); -}); -}); diff --git a/packages/twenty-apps/community/fireflies/src/__tests__/historical-importer.spec.ts b/packages/twenty-apps/community/fireflies/src/__tests__/historical-importer.spec.ts deleted file mode 100644 index 1e8c30a7ca..0000000000 --- a/packages/twenty-apps/community/fireflies/src/__tests__/historical-importer.spec.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { HistoricalImporter } from '../historical-importer'; -import type { FirefliesMeetingData, SummaryFetchConfig } from '../types'; - -const summaryConfig: SummaryFetchConfig = { - strategy: 'immediate_with_retry', - retryAttempts: 1, - retryDelay: 0, - pollInterval: 0, - maxPolls: 0, -}; - -const sampleMeeting: FirefliesMeetingData = { - id: 'm-1', - title: 'Sample', - date: new Date().toISOString(), - duration: 30, - participants: [], - summary: { action_items: [], overview: '' }, - transcript_url: 'https://example.com', -}; - -describe('HistoricalImporter', () => { - const buildImporter = () => { - const firefliesClient = { - listTranscripts: jest.fn(), - fetchMeetingDataWithRetry: jest.fn(), - } as unknown as jest.Mocked; - - const twentyService = { - findMeetingByFirefliesId: jest.fn(), - matchParticipantsToContacts: jest.fn(), - createContactsForUnmatched: jest.fn(), - createNoteOnly: jest.fn(), - createMeeting: jest.fn(), - createNoteTarget: jest.fn(), - } as unknown as jest.Mocked; - - return { firefliesClient, twentyService }; - }; - - it('skips meetings that already exist by firefliesMeetingId', async () => { - const { firefliesClient, twentyService } = buildImporter(); - - firefliesClient.listTranscripts.mockResolvedValue([{ id: 'existing' }]); - twentyService.findMeetingByFirefliesId.mockResolvedValue({ id: 'twenty-id' }); - - const importer = new HistoricalImporter(firefliesClient, twentyService); - const result = await importer.run( - {}, - { dryRun: false, autoCreateContacts: true, summaryConfig, plan: 'free' }, - ); - - expect(result.skippedExisting).toBe(1); - expect(result.imported).toBe(0); - expect(twentyService.createMeeting).not.toHaveBeenCalled(); - expect(result.statuses[0].status).toBe('skipped_existing'); - }); - - it('supports dry-run without writing to Twenty', async () => { - const { firefliesClient, twentyService } = buildImporter(); - - firefliesClient.listTranscripts.mockResolvedValue([{ id: 'm-2' }]); - firefliesClient.fetchMeetingDataWithRetry.mockResolvedValue({ - data: sampleMeeting, - summaryReady: false, - }); - twentyService.findMeetingByFirefliesId.mockResolvedValue(undefined); - - const importer = new HistoricalImporter(firefliesClient, twentyService); - const result = await importer.run( - {}, - { dryRun: true, autoCreateContacts: false, summaryConfig, plan: 'free' }, - ); - - expect(result.imported).toBe(1); - expect(result.summaryPending).toBe(1); - expect(twentyService.createMeeting).not.toHaveBeenCalled(); - expect(twentyService.createNoteOnly).not.toHaveBeenCalled(); - expect(result.statuses).toHaveLength(1); - expect(result.statuses[0].status).toBe('pending_summary'); - }); -}); - diff --git a/packages/twenty-apps/community/fireflies/src/__tests__/setup.ts b/packages/twenty-apps/community/fireflies/src/__tests__/setup.ts deleted file mode 100644 index 79263d9b5b..0000000000 --- a/packages/twenty-apps/community/fireflies/src/__tests__/setup.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Test setup for Fireflies app - -// Mock global fetch for all tests -global.fetch = jest.fn(); - -// Setup test environment variables -process.env.FIREFLIES_WEBHOOK_SECRET = 'testsecret'; -process.env.AUTO_CREATE_CONTACTS = 'true'; -process.env.SERVER_URL = 'http://localhost:3000'; -process.env.TWENTY_API_KEY = 'test-api-key'; -process.env.LOG_LEVEL = 'silent'; -process.env.CAPTURE_LOGS = 'false'; - -// Reset mocks before each test -beforeEach(() => { - jest.clearAllMocks(); -}); diff --git a/packages/twenty-apps/community/fireflies/src/__tests__/webhook-handler-logging.spec.ts b/packages/twenty-apps/community/fireflies/src/__tests__/webhook-handler-logging.spec.ts deleted file mode 100644 index 0fde2f1e11..0000000000 --- a/packages/twenty-apps/community/fireflies/src/__tests__/webhook-handler-logging.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { WebhookHandler } from '../webhook-handler'; - -describe('WebhookHandler log capture', () => { - const originalEnv = process.env; - - beforeEach(() => { - process.env = { - ...originalEnv, - FIREFLIES_WEBHOOK_SECRET: 'testsecret', - FIREFLIES_API_KEY: '', - TWENTY_API_KEY: '', - CAPTURE_LOGS: 'false', - LOG_LEVEL: 'silent', - }; - }); - - afterEach(() => { - process.env = originalEnv; - }); - - it('includes debug logs in response when CAPTURE_LOGS is true', async () => { - process.env.CAPTURE_LOGS = 'true'; - - const handler = new WebhookHandler(); - const result = await handler.handle(null); - - expect(result.success).toBe(false); - expect(Array.isArray(result.debug)).toBe(true); - }); - - it('omits debug logs when CAPTURE_LOGS is false', async () => { - process.env.CAPTURE_LOGS = 'false'; - - const handler = new WebhookHandler(); - const result = await handler.handle(null); - - expect(result.debug).toBeUndefined(); - }); -}); - diff --git a/packages/twenty-apps/community/fireflies/src/fireflies-api-client.ts b/packages/twenty-apps/community/fireflies/src/fireflies-api-client.ts deleted file mode 100644 index d60c28fdd1..0000000000 --- a/packages/twenty-apps/community/fireflies/src/fireflies-api-client.ts +++ /dev/null @@ -1,823 +0,0 @@ -import { createLogger } from './logger'; -import { - FIREFLIES_PLANS, - type FirefliesMeetingData, - type FirefliesParticipant, - type FirefliesPlan, - type FirefliesTranscriptListItem, - type FirefliesTranscriptListOptions, - type SummaryFetchConfig -} from './types'; - -const logger = createLogger('fireflies-api'); - -export class FirefliesApiClient { - private apiKey: string; - - constructor(apiKey: string) { - if (!apiKey) { - logger.critical('FIREFLIES_API_KEY is required but not provided - this is a critical configuration error'); - throw new Error('FIREFLIES_API_KEY is required'); - } - this.apiKey = apiKey; - } - - async listTranscripts(options: FirefliesTranscriptListOptions = {}): Promise { - const { - organizers, - participants, - hostEmail, - participantEmail, - userId, - channelId, - mine, - fromDate, - toDate, - pageSize = 50, - maxRecords = 500, - } = options; - - const sanitizedOrganizers = organizers?.filter(Boolean); - const sanitizedParticipants = participants?.filter(Boolean); - - const transcripts: FirefliesTranscriptListItem[] = []; - let skip = options.skip ?? 0; - const limit = options.limit ?? pageSize; - - const baseQuery = ` - query Transcripts( - $limit: Int - $skip: Int - $hostEmail: String - $participantEmail: String - $organizers: [String!] - $participants: [String!] - $userId: String - $channelId: String - $mine: Boolean - $date: Float - ) { - transcripts( - limit: $limit - skip: $skip - host_email: $hostEmail - participant_email: $participantEmail - organizers: $organizers - participants: $participants - user_id: $userId - channel_id: $channelId - mine: $mine - date: $date - ) { - id - title - date - duration - organizer_email - participants - transcript_url - meeting_link - meeting_info { summary_status } - } - } - `; - - while (transcripts.length < maxRecords) { - const pageVariables = { - limit, - skip, - hostEmail, - participantEmail, - organizers: sanitizedOrganizers, - participants: sanitizedParticipants, - userId, - channelId, - mine, - date: fromDate, - }; - - const page = await this.executeTranscriptListQuery(baseQuery, pageVariables); - const normalized = page - .map((item) => { - const normalizedDate = this.normalizeDate(item.date); - return { - id: (item.id as string) || '', - title: (item.title as string) || 'Untitled Meeting', - date: normalizedDate, - duration: (item.duration as number) || 0, - organizer_email: item.organizer_email as string | undefined, - participants: Array.isArray(item.participants) - ? (item.participants as string[]) - : undefined, - transcript_url: item.transcript_url as string | undefined, - meeting_link: item.meeting_link as string | undefined, - summary_status: (item.meeting_info as { summary_status?: string } | undefined)?.summary_status, - }; - }) - .filter((item) => { - if (toDate && item.date) { - const itemTime = Date.parse(item.date); - if (!Number.isNaN(itemTime) && itemTime > toDate) { - return false; - } - } - return true; - }); - - transcripts.push(...normalized); - - if (page.length < limit) { - break; - } - - skip += limit; - } - - if (transcripts.length > maxRecords) { - return transcripts.slice(0, maxRecords); - } - - return transcripts; - } - - async fetchMeetingData( - meetingId: string, - options?: { timeout?: number; plan?: FirefliesPlan } - ): Promise { - const plan = options?.plan ?? FIREFLIES_PLANS.FREE; - const isPremiumPlan = - plan === FIREFLIES_PLANS.BUSINESS || plan === FIREFLIES_PLANS.ENTERPRISE; - - // Minimal query for free plans - only basic fields available on all plans - // Note: audio_url requires Pro+, video_url requires Business+ - const freeQuery = ` - query GetTranscriptMinimal($transcriptId: String!) { - transcript(id: $transcriptId) { - id - title - date - duration - participants - organizer_email - transcript_url - meeting_link - } - } - `; - - // Standard query for pro plans - adds speakers, summary, sentences, and audio_url (Pro+) - // Note: video_url requires Business+ - const proQuery = ` - query GetTranscriptBasic($transcriptId: String!) { - transcript(id: $transcriptId) { - id - title - date - duration - participants - organizer_email - speakers { - name - } - sentences { - index - speaker_name - text - start_time - end_time - } - summary { - overview - keywords - action_items - notes - gist - bullet_gist - short_summary - short_overview - outline - shorthand_bullet - } - meeting_info { - summary_status - } - transcript_url - audio_url - meeting_link - } - } - `; - - // Full query for business/enterprise - includes all fields - const businessQuery = ` - query GetTranscriptFull($transcriptId: String!) { - transcript(id: $transcriptId) { - id - title - date - duration - participants - organizer_email - analytics { - sentiments { - positive_pct - negative_pct - neutral_pct - } - categories { - questions - tasks - metrics - date_times - } - speakers { - speaker_id - name - duration - word_count - longest_monologue - filler_words - questions - words_per_minute - } - } - meeting_attendees { - displayName - email - phoneNumber - name - location - } - meeting_attendance { - name - join_time - leave_time - } - speakers { - name - } - sentences { - index - speaker_name - text - start_time - end_time - ai_filters { - task - question - sentiment - } - } - summary { - action_items - overview - keywords - notes - gist - bullet_gist - short_summary - short_overview - outline - shorthand_bullet - topics_discussed - meeting_type - transcript_chapters - } - meeting_info { - summary_status - } - transcript_url - audio_url - video_url - meeting_link - } - } - `; - - // Select query based on plan - const queryToUse = isPremiumPlan ? businessQuery : - (plan === FIREFLIES_PLANS.PRO ? proQuery : freeQuery); - - const planFeatures = { - [FIREFLIES_PLANS.FREE]: 'basic fields only (no summary, no audio/video)', - [FIREFLIES_PLANS.PRO]: 'summary, speakers, audio_url', - [FIREFLIES_PLANS.BUSINESS]: 'full access including analytics, video_url', - [FIREFLIES_PLANS.ENTERPRISE]: 'full access including analytics, video_url', - }; - logger.debug(`using ${plan} plan query (${planFeatures[plan]})`); - - try { - return await this.executeTranscriptQuery({ - meetingId, - query: queryToUse, - timeout: options?.timeout, - }); - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - - // Detect plan-specific errors - const requiresBusiness = message.toLowerCase().includes('business or higher'); - const requiresPro = message.toLowerCase().includes('pro or higher'); - const planError = requiresBusiness || requiresPro || - message.toLowerCase().includes('higher plan') || - message.includes('Cannot query field'); - - // Fallback cascade: business -> pro -> free - if (planError) { - if (isPremiumPlan) { - logger.warn(`Plan limitation detected (configured: ${plan}), falling back to pro query`); - try { - return await this.executeTranscriptQuery({ - meetingId, - query: proQuery, - timeout: options?.timeout, - }); - } catch (proError) { - const proMessage = proError instanceof Error ? proError.message : String(proError); - if (proMessage.toLowerCase().includes('plan') || proMessage.includes('Cannot query field')) { - logger.warn('Pro query also failed, falling back to minimal free query'); - return this.executeTranscriptQuery({ - meetingId, - query: freeQuery, - timeout: options?.timeout, - }); - } - throw proError; - } - } else if (plan === FIREFLIES_PLANS.PRO) { - logger.warn(`Pro plan query failed (${requiresBusiness ? 'requires Business+' : 'unknown restriction'}), falling back to free query`); - return this.executeTranscriptQuery({ - meetingId, - query: freeQuery, - timeout: options?.timeout, - }); - } else { - // Already using free query - some field might still be restricted - logger.error( - 'Fireflies API rejected the minimal free query. This may indicate: ' + - '1) The transcript ID is invalid, or ' + - '2) Your API key does not have access to this transcript, or ' + - '3) An unexpected API restriction : open an issue' - ); - } - } - - throw error; - } - } - - async fetchMeetingDataWithRetry( - meetingId: string, - config: SummaryFetchConfig, - plan: FirefliesPlan = FIREFLIES_PLANS.FREE - ): Promise<{ data: FirefliesMeetingData; summaryReady: boolean }> { - // immediate_only: single attempt, no retries - if (config.strategy === 'immediate_only') { - logger.debug(`fetching meeting ${meetingId} (strategy: immediate_only)`); - const meetingData = await this.fetchMeetingData(meetingId, { timeout: 10000, plan }); - const ready = this.isSummaryReady(meetingData); - logger.debug(`summary ready: ${ready}`); - return { data: meetingData, summaryReady: ready }; - } - - // immediate_with_retry: retry with linear backoff - logger.debug(`fetching meeting ${meetingId} (strategy: immediate_with_retry, maxAttempts: ${config.retryAttempts})`); - - for (let attempt = 1; attempt <= config.retryAttempts; attempt++) { - try { - const meetingData = await this.fetchMeetingData(meetingId, { timeout: 10000, plan }); - const ready = this.isSummaryReady(meetingData); - - logger.debug(`attempt ${attempt}/${config.retryAttempts}: summary ready=${ready}`); - - if (ready) { - return { data: meetingData, summaryReady: true }; - } - - if (attempt < config.retryAttempts) { - const delayMs = config.retryDelay * attempt; - logger.debug(`summary not ready, waiting ${delayMs}ms before retry ${attempt + 1}`); - await new Promise(resolve => setTimeout(resolve, delayMs)); - } else { - logger.debug(`max retries reached, returning partial data`); - return { data: meetingData, summaryReady: false }; - } - } catch (error) { - const errorMsg = error instanceof Error ? error.message : String(error); - logger.error(`attempt ${attempt}/${config.retryAttempts} failed: ${errorMsg}`); - - if (attempt === config.retryAttempts) { - throw error; - } - - const delayMs = config.retryDelay * attempt; - logger.debug(`retrying in ${delayMs}ms...`); - await new Promise(resolve => setTimeout(resolve, delayMs)); - } - } - - throw new Error('Failed to fetch meeting data after retries'); - } - - private async executeTranscriptQuery({ - meetingId, - query, - timeout, - }: { - meetingId: string; - query: string; - timeout?: number; - }): Promise { - const controller = new AbortController(); - const timeoutId = timeout ? setTimeout(() => controller.abort(), timeout) : null; - - try { - const response = await fetch('https://api.fireflies.ai/graphql', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': `Bearer ${this.apiKey}`, - }, - body: JSON.stringify({ - query, - variables: { transcriptId: meetingId }, - }), - signal: controller.signal, - }); - - if (timeoutId) clearTimeout(timeoutId); - - if (!response.ok) { - let errorDetails = `Fireflies API request failed with status ${response.status}`; - try { - const errorBody = await response.text(); - if (errorBody) { - errorDetails += `: ${errorBody}`; - } - } catch { - // Ignore if we can't read the response body - } - throw new Error(errorDetails); - } - - const json = await response.json() as { - data?: { transcript?: Record }; - errors?: Array<{ message?: string }>; - }; - - if (json.errors && json.errors.length > 0) { - throw new Error(`Fireflies API error: ${json.errors[0]?.message || 'Unknown error'}`); - } - - const transcript = json.data?.transcript; - if (!transcript) { - throw new Error('Invalid response from Fireflies API: missing transcript data'); - } - - return this.transformMeetingData(transcript, meetingId); - } finally { - if (timeoutId) clearTimeout(timeoutId); - } - } - - private isSummaryReady(meetingData: FirefliesMeetingData): boolean { - return ( - (meetingData.summary?.action_items?.length > 0) || - (meetingData.summary?.overview?.length > 0) || - meetingData.summary_status === 'completed' - ); - } - - private extractAllParticipants(transcript: Record): FirefliesParticipant[] { - const participantsWithEmails: FirefliesParticipant[] = []; - const participantsNameOnly: FirefliesParticipant[] = []; - - logger.debug('=== PARTICIPANT EXTRACTION DEBUG ==='); - logger.debug('participants field:', JSON.stringify(transcript.participants)); - logger.debug('meeting_attendees field:', JSON.stringify(transcript.meeting_attendees)); - logger.debug('speakers field:', (transcript.speakers as Array<{ name: string }>)?.map((s) => s.name)); - logger.debug('meeting_attendance field:', (transcript.meeting_attendance as Array<{ name: string }>)?.map((a) => a.name)); - logger.debug('organizer_email:', transcript.organizer_email); - - const isEmail = (str: string): boolean => { - return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(str.trim()); - }; - - const isDuplicate = (name: string, email: string): boolean => { - const nameLower = name.toLowerCase().trim(); - const emailLower = email.toLowerCase().trim(); - - return participantsWithEmails.some(p => - p.name.toLowerCase().trim() === nameLower || - (email && p.email.toLowerCase() === emailLower) - ) || participantsNameOnly.some(p => - p.name.toLowerCase().trim() === nameLower - ); - }; - - // 1. Extract from legacy participants field (with emails) - if (transcript.participants && Array.isArray(transcript.participants)) { - transcript.participants.forEach((participant: string) => { - const parts = participant.split(',').map(p => p.trim()); - - parts.forEach(part => { - const emailMatch = part.match(/<([^>]+)>/); - const email = emailMatch ? emailMatch[1] : ''; - const name = emailMatch - ? part.substring(0, part.indexOf('<')).trim() - : part.trim(); - - if (isEmail(name)) { - logger.debug(`Skipping participant with email as name: "${name}"`); - return; - } - - if (!name) { - return; - } - - if (isDuplicate(name, email)) { - logger.debug(`Skipping duplicate participant: "${name}" <${email}>`); - return; - } - - if (name && email) { - participantsWithEmails.push({ name, email }); - } else if (name) { - participantsNameOnly.push({ name, email: '' }); - } - }); - }); - } - - // 2. Extract from meeting_attendees field (structured) - if (transcript.meeting_attendees && Array.isArray(transcript.meeting_attendees)) { - transcript.meeting_attendees.forEach((attendee: Record) => { - const name = (attendee.displayName || attendee.name || '') as string; - const email = (attendee.email || '') as string; - - if (isEmail(name)) { - logger.debug(`Skipping attendee with email as name: "${name}"`); - return; - } - - if (name && !isDuplicate(name, email)) { - if (email) { - participantsWithEmails.push({ name, email }); - } else { - participantsNameOnly.push({ name, email: '' }); - } - } - }); - } - - // 3. Extract from speakers field (name only) - if (transcript.speakers && Array.isArray(transcript.speakers)) { - transcript.speakers.forEach((speaker: Record) => { - const name = (speaker.name || '') as string; - - if (isEmail(name)) { - logger.debug(`Skipping speaker with email as name: "${name}"`); - return; - } - - if (name && !isDuplicate(name, '')) { - participantsNameOnly.push({ name, email: '' }); - } - }); - } - - // 4. Extract from meeting_attendance field (name only) - if (transcript.meeting_attendance && Array.isArray(transcript.meeting_attendance)) { - transcript.meeting_attendance.forEach((attendance: Record) => { - const name = (attendance.name || '') as string; - - if (isEmail(name) || name.includes(',')) { - logger.debug(`Skipping attendance with email/list as name: "${name}"`); - return; - } - - if (name && !isDuplicate(name, '')) { - participantsNameOnly.push({ name, email: '' }); - } - }); - } - - // 5. Add organizer email if available and not already included - const organizerEmail = transcript.organizer_email as string | undefined; - if (organizerEmail) { - const existsWithEmail = participantsWithEmails.some(p => - p.email.toLowerCase() === organizerEmail.toLowerCase() - ); - - if (!existsWithEmail) { - let organizerName = ''; - - const emailUsername = organizerEmail.split('@')[0].toLowerCase(); - const emailNameVariations = [emailUsername]; - - if (transcript.speakers && Array.isArray(transcript.speakers)) { - const potentialOrganizerSpeaker = transcript.speakers.find((speaker: Record) => { - const name = ((speaker.name || '') as string).toLowerCase(); - return emailNameVariations.some(variation => - name.includes(variation) || variation.includes(name) - ); - }) as Record | undefined; - if (potentialOrganizerSpeaker) { - organizerName = potentialOrganizerSpeaker.name as string; - } - } - - if (!organizerName && transcript.meeting_attendance && Array.isArray(transcript.meeting_attendance)) { - const potentialOrganizerAttendance = transcript.meeting_attendance.find((attendance: Record) => { - const name = ((attendance.name || '') as string).toLowerCase(); - return emailNameVariations.some(variation => - name.includes(variation) || variation.includes(name) - ); - }) as Record | undefined; - if (potentialOrganizerAttendance) { - organizerName = potentialOrganizerAttendance.name as string; - } - } - - if (organizerName) { - participantsWithEmails.push({ name: organizerName, email: organizerEmail }); - - const nameIndex = participantsNameOnly.findIndex(p => - p.name.toLowerCase().includes(organizerName.toLowerCase()) || - organizerName.toLowerCase().includes(p.name.toLowerCase()) - ); - if (nameIndex !== -1) { - participantsNameOnly.splice(nameIndex, 1); - } - } else { - participantsWithEmails.push({ name: 'Meeting Organizer', email: organizerEmail }); - } - } - } - - const allParticipants = [...participantsWithEmails, ...participantsNameOnly]; - - logger.debug('=== EXTRACTED PARTICIPANTS ==='); - logger.debug('With emails:', participantsWithEmails.length, JSON.stringify(participantsWithEmails)); - logger.debug('Name only:', participantsNameOnly.length, JSON.stringify(participantsNameOnly)); - logger.debug('Total:', allParticipants.length); - - return allParticipants; - } - - private transformMeetingData(transcript: Record, meetingId: string): FirefliesMeetingData { - let dateString: string; - if (transcript.date) { - if (typeof transcript.date === 'number') { - dateString = new Date(transcript.date).toISOString(); - } else if (typeof transcript.date === 'string') { - const parsed = Number(transcript.date); - if (!isNaN(parsed)) { - dateString = new Date(parsed).toISOString(); - } else { - dateString = transcript.date; - } - } else { - dateString = new Date().toISOString(); - } - } else { - dateString = new Date().toISOString(); - } - - const summary = transcript.summary as Record | undefined; - const analytics = transcript.analytics as Record | undefined; - const sentiments = analytics?.sentiments as Record | undefined; - const categories = analytics?.categories as Record | undefined; - const speakersAnalytics = analytics?.speakers as Array> | undefined; - const meetingInfo = transcript.meeting_info as Record | undefined; - - // Transform sentences array - const rawSentences = transcript.sentences as Array> | undefined; - const sentences = rawSentences?.map(s => ({ - index: (s.index as number) || 0, - speaker_name: (s.speaker_name as string) || 'Unknown', - text: (s.text as string) || '', - start_time: (s.start_time as string) || '0', - end_time: (s.end_time as string) || '0', - ai_filters: s.ai_filters as { task?: boolean; question?: boolean; sentiment?: string } | undefined, - })); - - // Transform speaker analytics - const speakers = speakersAnalytics?.map(sp => ({ - speaker_id: (sp.speaker_id as string) || '', - name: (sp.name as string) || 'Unknown', - duration: (sp.duration as number) || 0, - word_count: (sp.word_count as number) || 0, - longest_monologue: (sp.longest_monologue as number) || 0, - filler_words: (sp.filler_words as number) || 0, - questions: (sp.questions as number) || 0, - words_per_minute: (sp.words_per_minute as number) || 0, - })); - - return { - id: (transcript.id as string) || meetingId, - title: (transcript.title as string) || 'Untitled Meeting', - date: dateString, - duration: (transcript.duration as number) || 0, - participants: this.extractAllParticipants(transcript), - organizer_email: transcript.organizer_email as string | undefined, - sentences, - summary: { - // action_items can be string or array - normalize to array - action_items: Array.isArray(summary?.action_items) - ? summary.action_items as string[] - : (typeof summary?.action_items === 'string' && summary.action_items.trim() - ? summary.action_items.split('\n').filter((item: string) => item.trim()) - : []), - overview: (summary?.overview as string) || '', - notes: summary?.notes as string | undefined, - gist: summary?.gist as string | undefined, - bullet_gist: summary?.bullet_gist as string | undefined, - short_summary: summary?.short_summary as string | undefined, - short_overview: summary?.short_overview as string | undefined, - outline: summary?.outline as string | undefined, - shorthand_bullet: summary?.shorthand_bullet as string | undefined, - keywords: summary?.keywords as string[] | undefined, - topics_discussed: summary?.topics_discussed as string[] | undefined, - meeting_type: summary?.meeting_type as string | undefined, - transcript_chapters: summary?.transcript_chapters as string[] | undefined, - }, - analytics: (sentiments || categories || speakers) ? { - sentiments: sentiments ? { - positive_pct: sentiments.positive_pct || 0, - negative_pct: sentiments.negative_pct || 0, - neutral_pct: sentiments.neutral_pct || 0, - } : undefined, - categories: categories ? { - questions: categories.questions || 0, - tasks: categories.tasks || 0, - metrics: categories.metrics || 0, - date_times: categories.date_times || 0, - } : undefined, - speakers, - } : undefined, - meeting_info: meetingInfo ? { - summary_status: meetingInfo.summary_status as string | undefined, - } : undefined, - // URLs by plan availability: - transcript_url: (transcript.transcript_url as string) || `https://app.fireflies.ai/view/${meetingId}`, - audio_url: transcript.audio_url as string | undefined, // Pro+ - video_url: transcript.video_url as string | undefined, // Business+ - meeting_link: transcript.meeting_link as string | undefined, // All plans - summary_status: (meetingInfo?.summary_status as string) || (transcript.summary_status as string) || undefined, - }; - } - - private async executeTranscriptListQuery( - query: string, - variables: Record, - ): Promise>> { - const response = await fetch('https://api.fireflies.ai/graphql', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${this.apiKey}`, - }, - body: JSON.stringify({ query, variables }), - }); - - if (!response.ok) { - const errorBody = await response.text(); - throw new Error(`Fireflies transcripts request failed: ${response.status} ${errorBody}`); - } - - const json = await response.json() as { - data?: { transcripts?: Array> }; - errors?: Array<{ message?: string }>; - }; - - if (json.errors && json.errors.length > 0) { - const message = json.errors[0]?.message || 'Unknown error'; - throw new Error(`Fireflies API error: ${message}`); - } - - return json.data?.transcripts ?? []; - } - - private normalizeDate(dateValue: unknown): string | undefined { - if (!dateValue) { - return undefined; - } - - if (typeof dateValue === 'number') { - return new Date(dateValue).toISOString(); - } - - if (typeof dateValue === 'string') { - const parsed = Number(dateValue); - if (!Number.isNaN(parsed)) { - return new Date(parsed).toISOString(); - } - return dateValue; - } - - return undefined; - } -} - diff --git a/packages/twenty-apps/community/fireflies/src/formatters.ts b/packages/twenty-apps/community/fireflies/src/formatters.ts deleted file mode 100644 index ef0c69a61b..0000000000 --- a/packages/twenty-apps/community/fireflies/src/formatters.ts +++ /dev/null @@ -1,259 +0,0 @@ -import type { FirefliesMeetingData, FirefliesSentence, MeetingCreateInput } from './types'; - -export class MeetingFormatter { - // Format timestamp from seconds to MM:SS - private static formatTimestamp(timeStr: string): string { - const seconds = parseFloat(timeStr); - if (isNaN(seconds)) return '00:00'; - const mins = Math.floor(seconds / 60); - const secs = Math.floor(seconds % 60); - return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; - } - - // Format full transcript from sentences - private static formatTranscript(sentences: FirefliesSentence[]): string { - if (!sentences || sentences.length === 0) return ''; - - let transcript = ''; - let currentSpeaker = ''; - - for (const sentence of sentences) { - const timestamp = this.formatTimestamp(sentence.start_time); - const speaker = sentence.speaker_name || 'Unknown'; - - // Add speaker header when speaker changes - if (speaker !== currentSpeaker) { - currentSpeaker = speaker; - transcript += `\n**${speaker}** [${timestamp}]\n`; - } - - transcript += `${sentence.text} `; - } - - return transcript.trim(); - } - - static formatNoteBody(meetingData: FirefliesMeetingData): string { - const meetingDate = meetingData.date ? new Date(meetingData.date) : null; - const hasValidDate = meetingDate instanceof Date && !Number.isNaN(meetingDate.getTime()); - const formattedDate = hasValidDate - ? meetingDate.toLocaleString('en-US', { - weekday: 'long', - year: 'numeric', - month: 'long', - day: 'numeric', - hour: '2-digit', - minute: '2-digit', - }) - : 'Unknown date'; - const durationMinutes = Math.round(meetingData.duration); - - let noteBody = `**Date:** ${formattedDate}\n`; - noteBody += `**Duration:** ${durationMinutes} minutes\n`; - - if (meetingData.participants.length > 0) { - const participantNames = meetingData.participants.map(p => p.name).join(', '); - noteBody += `**Participants:** ${participantNames}\n`; - } - - // Overview section - if (meetingData.summary?.overview) { - noteBody += `\n## Overview\n${meetingData.summary.overview}\n`; - } - - // Detailed AI Notes (the rich content from Fireflies) - if (meetingData.summary?.notes) { - noteBody += `\n## Meeting Notes\n${meetingData.summary.notes}\n`; - } - - // Bullet gist with emojis (if available and different from notes) - if (meetingData.summary?.bullet_gist && !meetingData.summary?.notes) { - noteBody += `\n## Key Points\n${meetingData.summary.bullet_gist}\n`; - } - - // Meeting outline with timestamps (shorthand_bullet contains the timestamped outline) - const outline = meetingData.summary?.outline || meetingData.summary?.shorthand_bullet; - if (outline) { - noteBody += `\n## Outline\n${outline}\n`; - } - - // Key topics - if (meetingData.summary?.topics_discussed?.length) { - noteBody += `\n## Key Topics\n`; - meetingData.summary.topics_discussed.forEach(topic => { - noteBody += `- ${topic}\n`; - }); - } - - // Action items - if (meetingData.summary?.action_items?.length) { - noteBody += `\n## Action Items\n`; - meetingData.summary.action_items.forEach(item => { - noteBody += `- [ ] ${item}\n`; - }); - } - - // Insights section - noteBody += `\n## Insights\n`; - - if (meetingData.summary?.keywords?.length) { - noteBody += `**Keywords:** ${meetingData.summary.keywords.join(', ')}\n`; - } - - if (meetingData.analytics?.sentiments) { - const sentiments = meetingData.analytics.sentiments; - noteBody += `**Sentiment:** ${sentiments.positive_pct}% positive, ${sentiments.negative_pct}% negative, ${sentiments.neutral_pct}% neutral\n`; - } - - if (meetingData.summary?.meeting_type) { - noteBody += `**Meeting Type:** ${meetingData.summary.meeting_type}\n`; - } - - // Speaker analytics (Business+) - if (meetingData.analytics?.speakers?.length) { - noteBody += `\n### Speaker Stats\n`; - for (const speaker of meetingData.analytics.speakers) { - const talkTime = Math.round(speaker.duration / 60); - noteBody += `- **${speaker.name}**: ${talkTime} min talk time, ${speaker.word_count} words, ${speaker.questions} questions\n`; - } - } - - // Meeting metrics (Business+) - if (meetingData.analytics?.categories) { - const cats = meetingData.analytics.categories; - noteBody += `\n### Meeting Metrics\n`; - noteBody += `- Questions asked: ${cats.questions}\n`; - noteBody += `- Tasks identified: ${cats.tasks}\n`; - if (cats.metrics > 0) noteBody += `- Metrics mentioned: ${cats.metrics}\n`; - if (cats.date_times > 0) noteBody += `- Dates/times discussed: ${cats.date_times}\n`; - } - - // Resources section - noteBody += `\n## Resources\n`; - noteBody += `[View Full Transcript on Fireflies](${meetingData.transcript_url})\n`; - - if (meetingData.video_url) { - noteBody += `[Watch Video Recording](${meetingData.video_url})\n`; - } - - if (meetingData.audio_url) { - noteBody += `[Listen to Audio](${meetingData.audio_url})\n`; - } - - if (meetingData.meeting_link) { - noteBody += `[Original Meeting Link](${meetingData.meeting_link})\n`; - } - - return noteBody; - } - - static toMeetingCreateInput( - meetingData: FirefliesMeetingData, - noteId?: string - ): MeetingCreateInput { - const durationMinutes = Math.round(meetingData.duration); - const hasSummary = Boolean(meetingData.summary?.overview || meetingData.summary?.action_items?.length); - const hasAnalytics = Boolean(meetingData.analytics?.sentiments); - - // Build input object with only defined values (omit null fields) - const input: MeetingCreateInput = { - name: meetingData.title, - meetingDate: meetingData.date, - duration: durationMinutes, - actionItemsCount: meetingData.summary?.action_items?.length || 0, - firefliesMeetingId: meetingData.id, - }; - - // Add direct relationship to note if noteId is provided - if (noteId) { - input.noteId = noteId; - } - - // Basic fields (All plans) - if (meetingData.organizer_email) { - input.organizerEmail = meetingData.organizer_email; - } - if (meetingData.transcript_url?.trim()) { - input.transcriptUrl = { - primaryLinkUrl: meetingData.transcript_url, - primaryLinkLabel: 'View Transcript' - }; - } - if (meetingData.meeting_link?.trim()) { - input.meetingLink = { - primaryLinkUrl: meetingData.meeting_link, - primaryLinkLabel: 'Join Meeting' - }; - } - - // Pro+ fields (transcript, summary, notes, keywords, audio) - if (meetingData.sentences?.length) { - input.transcript = this.formatTranscript(meetingData.sentences); - } - if (meetingData.summary?.overview) { - input.overview = meetingData.summary.overview; - } - if (meetingData.summary?.notes) { - input.notes = meetingData.summary.notes; - } - if (meetingData.summary?.keywords?.length) { - input.keywords = meetingData.summary.keywords.join(', '); - } - if (meetingData.audio_url?.trim()) { - input.audioUrl = { - primaryLinkUrl: meetingData.audio_url, - primaryLinkLabel: 'Listen to Audio' - }; - } - - // Business+ fields (analytics, video, detailed summary) - if (meetingData.summary?.meeting_type) { - input.meetingType = meetingData.summary.meeting_type; - } - if (meetingData.summary?.topics_discussed?.length) { - input.topics = meetingData.summary.topics_discussed.join(', '); - } - if (meetingData.analytics?.sentiments) { - const sentiments = meetingData.analytics.sentiments; - input.positivePercent = sentiments.positive_pct; - input.negativePercent = sentiments.negative_pct; - input.neutralPercent = sentiments.neutral_pct; - } - if (meetingData.video_url?.trim()) { - input.videoUrl = { - primaryLinkUrl: meetingData.video_url, - primaryLinkLabel: 'Watch Video' - }; - } - - // Import status based on data completeness - const isPartial = !hasSummary && !hasAnalytics; - input.importStatus = isPartial ? 'PARTIAL' : 'SUCCESS'; - input.lastImportAttempt = new Date().toISOString(); - input.importAttempts = 1; - - return input; - } - - static toFailedMeetingCreateInput( - meetingId: string, - title: string, - error: string, - attempts: number = 1 - ): MeetingCreateInput { - const currentDate = new Date().toISOString(); - - return { - name: title || `Failed Meeting Import - ${meetingId}`, - meetingDate: currentDate, - duration: 0, - actionItemsCount: 0, - firefliesMeetingId: meetingId, - importStatus: 'FAILED', - importError: error, - lastImportAttempt: currentDate, - importAttempts: attempts, - }; - } -} - diff --git a/packages/twenty-apps/community/fireflies/src/historical-importer.ts b/packages/twenty-apps/community/fireflies/src/historical-importer.ts deleted file mode 100644 index b418584d95..0000000000 --- a/packages/twenty-apps/community/fireflies/src/historical-importer.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { type FirefliesApiClient } from './fireflies-api-client'; -import { MeetingFormatter } from './formatters'; -import { createLogger } from './logger'; -import { type TwentyCrmService } from './twenty-crm-service'; -import type { - FirefliesPlan, - FirefliesTranscriptListOptions, - SummaryFetchConfig, -} from './types'; - -const logger = createLogger('historical-importer'); - -export type HistoricalImportFilters = FirefliesTranscriptListOptions; - -export type HistoricalImportOptions = { - dryRun?: boolean; - autoCreateContacts: boolean; - summaryConfig: SummaryFetchConfig; - plan: FirefliesPlan; -}; - -export type HistoricalImportResult = { - dryRun: boolean; - totalListed: number; - imported: number; - skippedExisting: number; - failed: Array<{ meetingId: string; reason: string }>; - summaryPending: number; - statuses: Array<{ - meetingId: string; - title?: string; - status: 'imported' | 'skipped_existing' | 'failed' | 'dry_run' | 'pending_summary'; - reason?: string; - }>; -}; - -export class HistoricalImporter { - private firefliesClient: FirefliesApiClient; - private twentyService: TwentyCrmService; - - constructor(firefliesClient: FirefliesApiClient, twentyService: TwentyCrmService) { - this.firefliesClient = firefliesClient; - this.twentyService = twentyService; - } - - async run( - filters: HistoricalImportFilters, - options: HistoricalImportOptions, - ): Promise { - const { dryRun = false, autoCreateContacts, summaryConfig, plan } = options; - - logger.info('Listing Fireflies transcripts for historical import...'); - const transcripts = await this.firefliesClient.listTranscripts(filters); - logger.info(`Found ${transcripts.length} transcript(s) to process`); - - let imported = 0; - let skippedExisting = 0; - let summaryPending = 0; - const failed: Array<{ meetingId: string; reason: string }> = []; - const statuses: HistoricalImportResult['statuses'] = []; - - for (const transcript of transcripts) { - const meetingId = transcript.id; - - try { - const existing = await this.twentyService.findMeetingByFirefliesId(meetingId); - if (existing) { - logger.debug(`Skipping ${meetingId}: already exists in Twenty (${existing.id})`); - skippedExisting += 1; - statuses.push({ - meetingId, - title: transcript.title, - status: 'skipped_existing', - }); - continue; - } - - logger.info(`Fetching meeting ${meetingId} details`); - const { data: meetingData, summaryReady } = - await this.firefliesClient.fetchMeetingDataWithRetry( - meetingId, - summaryConfig, - plan, - ); - - const isPendingSummary = summaryReady === false; - if (isPendingSummary) { - summaryPending += 1; - } - - if (dryRun) { - logger.info(`[dry-run] Would import meeting "${meetingData.title}" (${meetingId})`); - imported += 1; - statuses.push({ - meetingId, - title: meetingData.title, - status: isPendingSummary ? 'pending_summary' : 'dry_run', - reason: isPendingSummary ? 'summary not ready' : undefined, - }); - continue; - } - - const { matchedContacts, unmatchedParticipants } = - await this.twentyService.matchParticipantsToContacts( - meetingData.participants, - ); - - const newContactIds = autoCreateContacts - ? await this.twentyService.createContactsForUnmatched(unmatchedParticipants) - : []; - const allContactIds = [...matchedContacts.map(({ id }) => id), ...newContactIds]; - - const noteBody = MeetingFormatter.formatNoteBody(meetingData); - const noteId = await this.twentyService.createNoteOnly( - `Meeting: ${meetingData.title}`, - noteBody, - ); - - const meetingInput = MeetingFormatter.toMeetingCreateInput(meetingData, noteId); - const createdMeetingId = await this.twentyService.createMeeting(meetingInput); - - for (const contactId of allContactIds) { - await this.twentyService.createNoteTarget(noteId, contactId); - } - - logger.info( - `Imported meeting "${meetingData.title}" (${meetingId}) as ${createdMeetingId}`, - ); - imported += 1; - statuses.push({ - meetingId, - title: meetingData.title, - status: isPendingSummary ? 'pending_summary' : 'imported', - reason: isPendingSummary ? 'summary not ready' : undefined, - }); - } catch (error) { - const reason = error instanceof Error ? error.message : String(error); - logger.error(`Failed to import meeting ${meetingId}: ${reason}`); - failed.push({ meetingId, reason }); - statuses.push({ - meetingId, - title: transcript.title, - status: 'failed', - reason, - }); - } - } - - return { - dryRun, - totalListed: transcripts.length, - imported, - skippedExisting, - failed, - summaryPending, - statuses, - }; - } -} - diff --git a/packages/twenty-apps/community/fireflies/src/index.ts b/packages/twenty-apps/community/fireflies/src/index.ts deleted file mode 100644 index 4549f1b1e1..0000000000 --- a/packages/twenty-apps/community/fireflies/src/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -// Main exports for the Fireflies integration -export { config, main } from './receive-fireflies-notes'; - -// Types -export type { - FirefliesMeetingData, - FirefliesParticipant, - FirefliesWebhookPayload, - ProcessResult, - SummaryFetchConfig, - SummaryStrategy -} from './types'; - -// Services (for advanced usage) -export { FirefliesApiClient } from './fireflies-api-client'; -export { MeetingFormatter } from './formatters'; -export { TwentyCrmService } from './twenty-crm-service'; -export { WebhookHandler } from './webhook-handler'; - -// Objects -export { Meeting } from './objects'; - -// Utilities -export { createLogger } from './logger'; -export { getApiUrl, getSummaryFetchConfig, shouldAutoCreateContacts, toBoolean } from './utils'; -export { - getWebhookSecretFingerprint, - isValidFirefliesPayload, - verifyWebhookSignature -} from './webhook-validator'; - diff --git a/packages/twenty-apps/community/fireflies/src/logger.ts b/packages/twenty-apps/community/fireflies/src/logger.ts deleted file mode 100644 index d97411e495..0000000000 --- a/packages/twenty-apps/community/fireflies/src/logger.ts +++ /dev/null @@ -1,142 +0,0 @@ -export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent'; - -export type LoggerConfig = { - logLevel: LogLevel; - isTestEnvironment: boolean; - captureForResponse: boolean; -}; - -const LOG_LEVELS: Record = { - debug: 0, - info: 1, - warn: 2, - error: 3, - silent: 4, -}; - -const loggerRegistry = new Set(); - -export class AppLogger { - private config: LoggerConfig; - private context: string; - private capturedLogs: string[] = []; - - constructor(context: string) { - this.context = context; - this.config = { - logLevel: this.parseLogLevel(process.env.LOG_LEVEL || 'error'), - isTestEnvironment: process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined, - captureForResponse: process.env.CAPTURE_LOGS === 'true', - }; - - // Silence logs in test environment unless explicitly overridden - if (this.config.isTestEnvironment && process.env.LOG_LEVEL === undefined) { - this.config.logLevel = 'silent'; - } - } - - private parseLogLevel(level: string): LogLevel { - const normalizedLevel = level.toLowerCase() as LogLevel; - return Object.keys(LOG_LEVELS).includes(normalizedLevel) ? normalizedLevel : 'error'; - } - - private shouldLog(level: LogLevel): boolean { - return LOG_LEVELS[level] >= LOG_LEVELS[this.config.logLevel]; - } - - private safeStringify(value: unknown): string { - try { - if (typeof value === 'string') return value; - return JSON.stringify(value); - } catch { - return '[unserializable]'; - } - } - - private captureLog(level: LogLevel, message: string, ...args: unknown[]): void { - if (!this.config.captureForResponse) { - return; - } - - const timestamp = new Date().toISOString(); - const formattedMessage = - args.length > 0 - ? `${message} ${args.map((arg) => this.safeStringify(arg)).join(' ')}` - : message; - - this.capturedLogs.push( - `[${timestamp}] [${level.toUpperCase()}] [${this.context}] ${formattedMessage}`, - ); - } - - debug(message: string, ...args: unknown[]): void { - this.captureLog('debug', message, ...args); - if (this.shouldLog('debug')) { - // oxlint-disable-next-line no-console - console.log(`[${this.context}] ${message}`, ...args); - } - } - - info(message: string, ...args: unknown[]): void { - this.captureLog('info', message, ...args); - if (this.shouldLog('info')) { - // oxlint-disable-next-line no-console - console.log(`[${this.context}] ${message}`, ...args); - } - } - - warn(message: string, ...args: unknown[]): void { - this.captureLog('warn', message, ...args); - if (this.shouldLog('warn')) { - // oxlint-disable-next-line no-console - console.warn(`[${this.context}] ${message}`, ...args); - } - } - - error(message: string, ...args: unknown[]): void { - this.captureLog('error', message, ...args); - if (this.shouldLog('error')) { - // oxlint-disable-next-line no-console - console.error(`[${this.context}] ${message}`, ...args); - } - } - - // For fatal errors, security issues, or data corruption - always visible - critical(message: string, ...args: unknown[]): void { - this.captureLog('error', `CRITICAL: ${message}`, ...args); - // oxlint-disable-next-line no-console - console.error(`[${this.context}] CRITICAL: ${message}`, ...args); - } - - getCapturedLogs(): string[] { - return [...this.capturedLogs]; - } - - clearCapturedLogs(): void { - this.capturedLogs = []; - } -} - -export const createLogger = (context: string): AppLogger => { - const logger = new AppLogger(context); - loggerRegistry.add(logger); - return logger; -}; - -export const removeLogger = (logger: AppLogger): void => { - loggerRegistry.delete(logger); -}; - -export const getAllCapturedLogs = (): string[] => { - const allLogs: string[] = []; - for (const logger of loggerRegistry) { - allLogs.push(...logger.getCapturedLogs()); - } - return allLogs.sort(); -}; - -export const clearAllCapturedLogs = (): void => { - for (const logger of loggerRegistry) { - logger.clearCapturedLogs(); - } -}; diff --git a/packages/twenty-apps/community/fireflies/src/objects/index.ts b/packages/twenty-apps/community/fireflies/src/objects/index.ts deleted file mode 100644 index 2d87481294..0000000000 --- a/packages/twenty-apps/community/fireflies/src/objects/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { Meeting } from './meeting'; - diff --git a/packages/twenty-apps/community/fireflies/src/objects/meeting.ts b/packages/twenty-apps/community/fireflies/src/objects/meeting.ts deleted file mode 100644 index 7e2a70b8e7..0000000000 --- a/packages/twenty-apps/community/fireflies/src/objects/meeting.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Object } from 'twenty-sdk/define'; - -@Object({ - universalIdentifier: 'd1831348-b4a4-4426-9c0b-0af19e7a9c27', - nameSingular: 'meeting', - namePlural: 'meetings', - labelSingular: 'Meeting', - labelPlural: 'Meetings', - description: - 'Meetings imported from Fireflies with AI-generated summaries, sentiment, and action items.', - icon: 'IconVideo', -}) -export class Meeting {} - diff --git a/packages/twenty-apps/community/fireflies/src/receive-fireflies-notes.ts b/packages/twenty-apps/community/fireflies/src/receive-fireflies-notes.ts deleted file mode 100644 index d0167e3d93..0000000000 --- a/packages/twenty-apps/community/fireflies/src/receive-fireflies-notes.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { type FunctionConfig } from 'twenty-sdk/define'; -import type { ProcessResult } from './types'; -import { WebhookHandler } from './webhook-handler'; - -export const main = async ( - params: unknown, - headers?: Record -): Promise => { - const handler = new WebhookHandler(); - return handler.handle(params, headers); -}; - -export const config: FunctionConfig = { - universalIdentifier: '2d3ea303-667c-4bbe-9e3d-db6ffb9d6c74', - name: 'receive-fireflies-notes', - description: - 'Receives Fireflies webhooks, fetches meeting summaries, and stores them in Twenty.', - timeoutSeconds: 30, - triggers: [ - { - universalIdentifier: 'a2117dc1-7674-4c7e-9d70-9feb9820e9e8', - type: 'route', - path: '/webhook/fireflies', - httpMethod: 'POST', - isAuthRequired: false, - }, - ], -}; - diff --git a/packages/twenty-apps/community/fireflies/src/twenty-crm-service.ts b/packages/twenty-apps/community/fireflies/src/twenty-crm-service.ts deleted file mode 100644 index de713ecdd7..0000000000 --- a/packages/twenty-apps/community/fireflies/src/twenty-crm-service.ts +++ /dev/null @@ -1,577 +0,0 @@ -import { createLogger } from './logger'; -import type { - Contact, - CreateMeetingResponse, - CreateNoteResponse, - CreatePersonResponse, - FindMeetingResponse, - FindPeopleResponse, - FirefliesParticipant, - GraphQLResponse, - IdNode, - MeetingCreateInput, -} from './types'; - -const logger = createLogger('20 CRM Service'); - -export class TwentyCrmService { - private apiKey: string; - private apiUrl: string; - private isTestEnvironment: boolean; - - constructor(apiKey: string, apiUrl: string) { - if (!apiKey) { - logger.critical('TWENTY_API_KEY is required but not provided - this is a critical configuration error'); - throw new Error('TWENTY_API_KEY is required'); - } - this.apiKey = apiKey; - this.apiUrl = apiUrl; - this.isTestEnvironment = process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID !== undefined; - } - - async findExistingMeeting(title: string): Promise { - const query = ` - query FindMeeting($title: String!) { - meetings(filter: { name: { eq: $title } }) { - edges { node { id } } - } - } - `; - - const variables = { title }; - const response = await this.gqlRequest(query, variables); - return response.data?.meetings?.edges?.[0]?.node; - } - - async findMeetingByFirefliesId(meetingId: string): Promise { - const query = ` - query FindMeetingByFirefliesId($meetingId: String!) { - meetings(filter: { firefliesMeetingId: { eq: $meetingId } }) { - edges { node { id } } - } - } - `; - - const variables = { meetingId }; - const response = await this.gqlRequest(query, variables); - return response.data?.meetings?.edges?.[0]?.node; - } - - async matchParticipantsToContacts( - participants: FirefliesParticipant[], - ): Promise<{ - matchedContacts: Contact[]; - unmatchedParticipants: FirefliesParticipant[]; - }> { - if (participants.length === 0) { - return { matchedContacts: [], unmatchedParticipants: [] }; - } - - const participantsWithEmails = participants.filter(p => p.email && p.email.trim()); - const participantsNameOnly = participants.filter(p => !p.email || !p.email.trim()); - - let matchedContacts: Contact[] = []; - let unmatchedParticipants: FirefliesParticipant[] = []; - - if (participantsWithEmails.length > 0) { - const emailMatches = await this.matchByEmail(participantsWithEmails); - matchedContacts.push(...emailMatches.matchedContacts); - unmatchedParticipants.push(...emailMatches.unmatchedParticipants); - } - - if (participantsNameOnly.length > 0) { - const nameMatches = await this.matchByName(participantsNameOnly, matchedContacts); - matchedContacts.push(...nameMatches.matchedContacts); - unmatchedParticipants.push(...nameMatches.unmatchedParticipants); - } - - return { matchedContacts, unmatchedParticipants }; - } - - private async matchByEmail(participants: FirefliesParticipant[]): Promise<{ - matchedContacts: Contact[]; - unmatchedParticipants: FirefliesParticipant[]; - }> { - const emails = participants.map(({ email }) => email).filter(Boolean); - const query = ` - query FindPeople($emails: [String!]!) { - people(filter: { emails: { primaryEmail: { in: $emails } } }) { - edges { node { id emails { primaryEmail } } } - } - } - `; - - const variables = { emails }; - const response = await this.gqlRequest(query, variables); - const people = response.data?.people; - - if (!people?.edges) { - return { matchedContacts: [], unmatchedParticipants: participants }; - } - - const matchedContacts = people.edges.map(({ node }) => ({ - id: node.id, - email: node.emails?.primaryEmail || '' - })); - - const matchedEmails = new Set( - matchedContacts - .map(({ email }) => email) - .filter((email) => Boolean(email)), - ); - - const unmatchedParticipants = participants.filter( - ({ email }) => !matchedEmails.has(email) - ); - - return { matchedContacts, unmatchedParticipants }; - } - - private async matchByName( - participants: FirefliesParticipant[], - alreadyMatchedContacts: Contact[] - ): Promise<{ - matchedContacts: Contact[]; - unmatchedParticipants: FirefliesParticipant[]; - }> { - const matchedContacts: Contact[] = []; - const unmatchedParticipants: FirefliesParticipant[] = []; - - const alreadyMatchedIds = new Set(alreadyMatchedContacts.map(c => c.id)); - - for (const participant of participants) { - const nameMatch = await this.findContactByName(participant.name); - - if (nameMatch && !alreadyMatchedIds.has(nameMatch.id)) { - matchedContacts.push(nameMatch); - alreadyMatchedIds.add(nameMatch.id); - } else { - unmatchedParticipants.push(participant); - } - } - - return { matchedContacts, unmatchedParticipants }; - } - - private async findContactByName(name: string): Promise { - if (!name || !name.trim()) { - return null; - } - - const nameParts = name.trim().split(/\s+/); - const firstName = nameParts[0]; - const lastName = nameParts.slice(1).join(' '); - - const hasLastName = Boolean(lastName); - - const query = hasLastName - ? ` - query FindPeopleByName($firstName: String!, $lastName: String!) { - people(filter: { - and: [ - { name: { firstName: { eq: $firstName } } } - { name: { lastName: { eq: $lastName } } } - ] - }) { - edges { node { id emails { primaryEmail } name { firstName lastName } } } - } - } - ` - : ` - query FindPeopleByName($firstName: String!) { - people(filter: { - name: { firstName: { eq: $firstName } } - }) { - edges { node { id emails { primaryEmail } name { firstName lastName } } } - } - } - `; - - const variables: Record = hasLastName - ? { firstName, lastName } - : { firstName }; - - try { - const response = await this.gqlRequest<{ people: { edges: Array<{ node: { id: string; emails?: { primaryEmail?: string }; name?: { firstName?: string; lastName?: string } } }> } }>(query, variables); - const people = response.data?.people?.edges; - - if (people && people.length > 0) { - const person = people[0].node; - return { - id: person.id, - email: person.emails?.primaryEmail || '' - }; - } - - if (hasLastName) { - const fuzzyQuery = ` - query FindPeopleByNameFuzzy($firstName: String!) { - people(filter: { name: { firstName: { ilike: $firstName } } }) { - edges { node { id emails { primaryEmail } name { firstName lastName } } } - } - } - `; - - const fuzzyResponse = await this.gqlRequest<{ people: { edges: Array<{ node: { id: string; emails?: { primaryEmail?: string }; name?: { firstName?: string; lastName?: string } } }> } }>(fuzzyQuery, { firstName: `%${firstName}%` }); - const fuzzyPeople = fuzzyResponse.data?.people?.edges; - - if (fuzzyPeople && fuzzyPeople.length > 0) { - const bestMatch = fuzzyPeople.find((edge) => { - const personLastName = edge.node.name?.lastName || ''; - return personLastName.toLowerCase().includes(lastName.toLowerCase()); - }); - - if (bestMatch) { - const person = bestMatch.node; - return { - id: person.id, - email: person.emails?.primaryEmail || '' - }; - } - } - } - - return null; - } catch { - return null; - } - } - - async createContactsForUnmatched( - participants: FirefliesParticipant[], - ): Promise { - const newContactIds: string[] = []; - - const participantsWithEmails = participants.filter(p => p.email && p.email.trim()); - const participantsNameOnly = participants.filter(p => !p.email || !p.email.trim()); - - if (participantsWithEmails.length > 0) { - const emailContactIds = await this.createContactsWithEmails(participantsWithEmails); - newContactIds.push(...emailContactIds); - } - - if (participantsNameOnly.length > 0) { - const nameContactIds = await this.createContactsNameOnly(participantsNameOnly); - newContactIds.push(...nameContactIds); - } - - return newContactIds; - } - - private async createContactsWithEmails(participants: FirefliesParticipant[]): Promise { - const newContactIds: string[] = []; - - const uniqueParticipants = participants.reduce((unique, participant) => { - const existing = unique.find(p => p.email === participant.email); - if (!existing) { - unique.push(participant); - } else { - logger.warn(`Duplicate participant email detected: ${participant.email}. Using first occurrence.`); - } - return unique; - }, []); - - for (const participant of uniqueParticipants) { - const [firstName, ...lastNameParts] = participant.name.trim().split(/\s+/); - const lastName = lastNameParts.join(' '); - - const mutation = ` - mutation CreatePerson($data: PersonCreateInput!) { - createPerson(data: $data) { id } - } - `; - - const variables = { - data: { - name: { firstName, lastName }, - emails: { primaryEmail: participant.email }, - }, - }; - - try { - const response = await this.gqlRequest(mutation, variables, { - suppressErrorCodes: ['BAD_USER_INPUT'], - suppressErrorMessageIncludes: ['Duplicate Emails', 'duplicate entry'], - }); - if (!response.data?.createPerson?.id) { - throw new Error(`Failed to create contact for ${participant.email}`); - } - newContactIds.push(response.data.createPerson.id); - } catch (error) { - const errorMessage = error instanceof Error ? error.message : 'Unknown error'; - if (errorMessage.includes('Duplicate Emails') || errorMessage.includes('BAD_USER_INPUT')) { - logger.warn(`Skipping contact creation for ${participant.email} due to duplicate email constraint: ${errorMessage}`); - continue; - } - throw error; - } - } - - return newContactIds; - } - - private async createContactsNameOnly(participants: FirefliesParticipant[]): Promise { - const newContactIds: string[] = []; - - const uniqueParticipants = participants.reduce((unique, participant) => { - const existing = unique.find(p => - p.name.toLowerCase().trim() === participant.name.toLowerCase().trim() - ); - if (!existing) { - unique.push(participant); - } else { - logger.warn(`Duplicate participant name detected: ${participant.name}. Using first occurrence.`); - } - return unique; - }, []); - - for (const participant of uniqueParticipants) { - const existingContact = await this.findContactByName(participant.name); - if (existingContact) { - logger.warn(`Contact with name "${participant.name}" already exists. Skipping creation.`); - continue; - } - - const [firstName, ...lastNameParts] = participant.name.trim().split(/\s+/); - const lastName = lastNameParts.join(' '); - - const mutation = ` - mutation CreatePerson($data: PersonCreateInput!) { - createPerson(data: $data) { id } - } - `; - - const variables = { - data: { - name: { firstName, lastName }, - }, - }; - - try { - const response = await this.gqlRequest(mutation, variables); - if (!response.data?.createPerson?.id) { - throw new Error(`Failed to create contact for ${participant.name}`); - } - newContactIds.push(response.data.createPerson.id); - - logger.debug(`Created contact for name-only participant: ${participant.name}`); - } catch (error) { - const errorMessage = error instanceof Error ? error.message : 'Unknown error'; - logger.warn(`Failed to create contact for ${participant.name}: ${errorMessage}`); - continue; - } - } - - return newContactIds; - } - - async createNote( - contactId: string, - title: string, - body: string - ): Promise { - const noteId = await this.createNoteOnly(title, body); - await this.createNoteTarget(noteId, contactId); - return noteId; - } - - async createNoteOnly( - title: string, - body: string - ): Promise { - const mutation = ` - mutation CreateNote($data: NoteCreateInput!) { - createNote(data: $data) { id } - } - `; - - const variables = { - data: { - title, - bodyV2: { - markdown: body.trim() - }, - }, - }; - - const response = await this.gqlRequest(mutation, variables); - if (!response.data?.createNote?.id) { - throw new Error(`Failed to create note`); - } - - return response.data.createNote.id; - } - - async createNoteTarget(noteId: string, contactId: string): Promise { - const mutation = ` - mutation CreateNoteTarget($data: NoteTargetCreateInput!) { - createNoteTarget(data: $data) { - id - noteId - personId - } - } - `; - - const variables = { - data: { - noteId, - personId: contactId, - }, - }; - - await this.gqlRequest<{ createNoteTarget: { id: string; noteId: string; personId: string } }>(mutation, variables); - } - - async createMeeting(meetingData: MeetingCreateInput): Promise { - const mutation = ` - mutation CreateMeeting($data: MeetingCreateInput!) { - createMeeting(data: $data) { id } - } - `; - - const variables = { data: meetingData }; - - if (!this.isTestEnvironment) { - logger.debug('createMeeting variables:', JSON.stringify(variables, null, 2)); - } - - const response = await this.gqlRequest(mutation, variables); - if (!response.data?.createMeeting?.id) { - throw new Error('Failed to create meeting: Invalid response from server'); - } - return response.data.createMeeting.id; - } - - private async gqlRequest( - query: string, - variables?: Record, - options?: { suppressErrorCodes?: string[]; suppressErrorMessageIncludes?: string[] } - ): Promise> { - const url = `${this.apiUrl}/graphql`; - - try { - const res = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${this.apiKey}`, - }, - body: JSON.stringify({ query, variables }), - }); - - if (!res.ok) { - let errorMessage = `GraphQL request failed with status ${res.status}`; - try { - const errorText = await res.text(); - if (errorText) { - errorMessage += `: ${errorText}`; - } - } catch { - // Ignore error when reading response body - } - throw new Error(errorMessage); - } - - const json = await res.json() as GraphQLResponse & { - errors?: Array<{ message?: string; extensions?: Record }> - }; - - if (json?.errors && Array.isArray(json.errors) && json.errors.length > 0) { - const firstError = json.errors[0]; - const errorMessage = firstError?.message || 'GraphQL error'; - const errorCode = firstError?.extensions?.code as string | undefined; - - if (errorCode) { - throw new Error(`${errorMessage} (Code: ${errorCode})`); - } - throw new Error(errorMessage); - } - - return json; - } catch (error) { - const message = error instanceof Error ? error.message : String(error); - const suppressByCode = options?.suppressErrorCodes?.some((code) => - message.includes(code), - ); - const suppressByMessage = options?.suppressErrorMessageIncludes?.some((substring) => - message.includes(substring), - ); - if (!suppressByCode && !suppressByMessage) { - logger.error('GraphQL request error:', error); - } - throw error; - } - } - - async createFailedMeeting(meetingData: MeetingCreateInput): Promise { - const mutation = ` - mutation CreateMeeting($data: MeetingCreateInput!) { - createMeeting(data: $data) { id } - } - `; - - const variables = { data: meetingData }; - - if (!this.isTestEnvironment) { - logger.debug('createFailedMeeting variables:', JSON.stringify(variables, null, 2)); - } - - const response = await this.gqlRequest(mutation, variables); - if (!response.data?.createMeeting?.id) { - throw new Error('Failed to create failed meeting record: Invalid response from server'); - } - return response.data.createMeeting.id; - } - - async findFailedMeetings(): Promise> { - const query = ` - query FindFailedMeetings { - meetings(filter: { importStatus: { eq: "FAILED" } }) { - edges { - node { - id - name - firefliesMeetingId - importError - lastImportAttempt - importAttempts - createdAt - } - } - } - } - `; - - const response = await this.gqlRequest<{ meetings: { edges: Array<{ node: { id: string; name: string; firefliesMeetingId: string; importError: string; lastImportAttempt: string; importAttempts: number; createdAt: string } }> } }>(query); - return response.data?.meetings?.edges?.map((edge) => edge.node) || []; - } - - async retryFailedMeeting(meetingId: string, updatedData: Partial): Promise { - const mutation = ` - mutation UpdateMeeting($where: MeetingWhereUniqueInput!, $data: MeetingUpdateInput!) { - updateMeeting(where: $where, data: $data) { id } - } - `; - - const variables = { - where: { id: meetingId }, - data: { - ...updatedData, - lastImportAttempt: new Date().toISOString(), - importAttempts: { increment: 1 } - } - }; - - await this.gqlRequest<{ updateMeeting: { id: string } }>(mutation, variables); - } -} - diff --git a/packages/twenty-apps/community/fireflies/src/types.ts b/packages/twenty-apps/community/fireflies/src/types.ts deleted file mode 100644 index 373e5d35dd..0000000000 --- a/packages/twenty-apps/community/fireflies/src/types.ts +++ /dev/null @@ -1,235 +0,0 @@ -// Fireflies API Types -export type FirefliesParticipant = { - email: string; - name: string; -}; - -export type FirefliesWebhookPayload = { - meetingId: string; - eventType: string; - clientReferenceId?: string; -}; - -// Transcript sentence from Fireflies API -export type FirefliesSentence = { - index: number; - speaker_name: string; - text: string; - start_time: string; - end_time: string; - ai_filters?: { - task?: boolean; - question?: boolean; - sentiment?: string; - }; -}; - -// Speaker analytics from Fireflies API (Business+) -export type FirefliesSpeakerAnalytics = { - speaker_id: string; - name: string; - duration: number; - word_count: number; - longest_monologue: number; - filler_words: number; - questions: number; - words_per_minute: number; -}; - -// Based on Fireflies GraphQL API transcript schema -// See: https://docs.fireflies.ai/graphql-api/query/transcript -export type FirefliesMeetingData = { - id: string; - title: string; - date: string; - duration: number; - participants: FirefliesParticipant[]; - organizer_email?: string; - // Full transcript (Pro+) - sentences?: FirefliesSentence[]; - summary: { - // Pro+ fields - action_items: string[]; - keywords?: string[]; - overview: string; - notes?: string; // Detailed AI-generated meeting notes - gist?: string; // 1-sentence summary - bullet_gist?: string; // Bullet point summary with emojis - short_summary?: string; // Single paragraph summary - short_overview?: string; // Brief overview - outline?: string; // Meeting outline with timestamps - shorthand_bullet?: string; - // Business+ fields - topics_discussed?: string[]; - meeting_type?: string; - transcript_chapters?: string[]; - }; - // Business+ analytics - analytics?: { - sentiments?: { - positive_pct: number; - negative_pct: number; - neutral_pct: number; - }; - categories?: { - questions: number; - tasks: number; - metrics: number; - date_times: number; - }; - speakers?: FirefliesSpeakerAnalytics[]; - }; - meeting_info?: { - summary_status?: string; - }; - // URLs - transcript_url: string; - audio_url?: string; // Pro+ - video_url?: string; // Business+ - meeting_link?: string; // All plans - summary_status?: string; -}; - -export type FirefliesTranscriptListItem = { - id: string; - title: string; - date?: string; - duration?: number; - organizer_email?: string; - participants?: string[]; - transcript_url?: string; - meeting_link?: string; - summary_status?: string; -}; - -export type FirefliesTranscriptListOptions = { - limit?: number; - skip?: number; - organizers?: string[]; - participants?: string[]; - hostEmail?: string; - participantEmail?: string; - userId?: string; - channelId?: string; - mine?: boolean; - fromDate?: number; - toDate?: number; - pageSize?: number; - maxRecords?: number; -}; - -// Configuration Types -export type SummaryStrategy = 'immediate_only' | 'immediate_with_retry' | 'delayed_polling' | 'basic_only'; - -export type SummaryFetchConfig = { - strategy: SummaryStrategy; - retryAttempts: number; - retryDelay: number; - pollInterval: number; - maxPolls: number; -}; - -export const FIREFLIES_PLANS = { - FREE: 'free', - PRO: 'pro', - BUSINESS: 'business', - ENTERPRISE: 'enterprise', -} as const; - -export type FirefliesPlan = typeof FIREFLIES_PLANS[keyof typeof FIREFLIES_PLANS]; - -export type WebhookConfig = { - secret: string; - apiUrl: string; -}; - -// Processing Result Types -export type ProcessResult = { - success: boolean; - meetingId?: string; - noteIds?: string[]; - newContacts?: string[]; - errors?: string[]; - debug?: string[]; - summaryReady?: boolean; - summaryPending?: boolean; - enhancementScheduled?: boolean; - actionItemsCount?: number; - sentimentAnalysis?: { - positive_pct: number; - negative_pct: number; - neutral_pct: number; - }; - meetingType?: string; - keyTopics?: string[]; -}; - -// Twenty CRM Types -export type GraphQLResponse = { - data: T; - errors?: Array<{ - message?: string; - extensions?: { code?: string } - }>; -}; - -export type IdNode = { id: string }; - -export type FindMeetingResponse = { - meetings: { edges: Array<{ node: IdNode }> }; -}; - -export type FindPeopleResponse = { - people: { edges: Array<{ node: { id: string; emails: { primaryEmail: string } } }> }; -}; - -export type CreatePersonResponse = { - createPerson: { id: string } -}; - -export type CreateNoteResponse = { - createNote: { id: string } -}; - -export type CreateMeetingResponse = { - createMeeting: { id: string } -}; - -export type Contact = { - id: string; - email: string; -}; - -// Twenty CRM Meeting custom field input -// Maps to fields defined in add-meeting-fields.ts -export type MeetingCreateInput = { - name: string; - noteId?: string | null; - // Basic fields (All plans) - meetingDate: string; - duration: number; - firefliesMeetingId: string; - organizerEmail?: string | null; - transcriptUrl?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; - meetingLink?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; - // Pro+ fields - transcript?: string | null; - overview?: string | null; - notes?: string | null; - keywords?: string | null; - audioUrl?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; - // Business+ fields - meetingType?: string | null; - topics?: string | null; - actionItemsCount: number; - positivePercent?: number | null; - negativePercent?: number | null; - neutralPercent?: number | null; - videoUrl?: { primaryLinkUrl: string; primaryLinkLabel: string } | null; - // Import tracking - importStatus?: 'SUCCESS' | 'PARTIAL' | 'FAILED' | 'PENDING' | 'RETRYING' | null; - importError?: string | null; - lastImportAttempt?: string | null; - importAttempts?: number | null; -}; - diff --git a/packages/twenty-apps/community/fireflies/src/utils.ts b/packages/twenty-apps/community/fireflies/src/utils.ts deleted file mode 100644 index 48cfa1d9df..0000000000 --- a/packages/twenty-apps/community/fireflies/src/utils.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { FIREFLIES_PLANS, type FirefliesPlan, type SummaryFetchConfig, type SummaryStrategy } from './types'; - -export const toBoolean = (value: string | undefined, defaultValue: boolean): boolean => { - if (value === undefined) return defaultValue; - const normalized = value.trim().toLowerCase(); - return normalized === 'true' || normalized === '1' || normalized === 'yes'; -}; - -export const getApiUrl = (): string => { - return process.env.SERVER_URL || 'http://localhost:3000'; -}; - -export const getSummaryFetchConfig = (): SummaryFetchConfig => { - const strategy = (process.env.FIREFLIES_SUMMARY_STRATEGY as SummaryStrategy) || 'immediate_with_retry'; - - // Ultra-conservative defaults to respect 50 requests/day API limit - // With 3 attempts at 15-minute intervals, max 3 API calls per webhook (45 minutes total) - return { - strategy, - retryAttempts: parseInt(process.env.FIREFLIES_RETRY_ATTEMPTS || '3', 10), - retryDelay: parseInt(process.env.FIREFLIES_RETRY_DELAY || '120000', 10), // 2 minutes - pollInterval: parseInt(process.env.FIREFLIES_POLL_INTERVAL || '120000', 10), // 2 minutes - maxPolls: parseInt(process.env.FIREFLIES_MAX_POLLS || '3', 10), - }; -}; - -export const shouldAutoCreateContacts = (): boolean => { - return toBoolean(process.env.AUTO_CREATE_CONTACTS, true); -}; - -export const getFirefliesPlan = (): FirefliesPlan => { - const plan = (process.env.FIREFLIES_PLAN || FIREFLIES_PLANS.FREE).toLowerCase(); - if (plan === FIREFLIES_PLANS.BUSINESS || plan === FIREFLIES_PLANS.ENTERPRISE) { - return plan as FirefliesPlan; - } - if (plan === FIREFLIES_PLANS.PRO) { - return FIREFLIES_PLANS.PRO; - } - return FIREFLIES_PLANS.FREE; -}; - diff --git a/packages/twenty-apps/community/fireflies/src/webhook-handler.ts b/packages/twenty-apps/community/fireflies/src/webhook-handler.ts deleted file mode 100644 index 8f0689ccea..0000000000 --- a/packages/twenty-apps/community/fireflies/src/webhook-handler.ts +++ /dev/null @@ -1,382 +0,0 @@ -import { FirefliesApiClient } from './fireflies-api-client'; -import { MeetingFormatter } from './formatters'; -import { clearAllCapturedLogs, createLogger, getAllCapturedLogs } from './logger'; -import { TwentyCrmService } from './twenty-crm-service'; -import type { FirefliesWebhookPayload, ProcessResult } from './types'; -import { getApiUrl, getFirefliesPlan, getSummaryFetchConfig, shouldAutoCreateContacts } from './utils'; -import { - getWebhookSecretFingerprint, - isValidFirefliesPayload, - verifyWebhookSignature -} from './webhook-validator'; - -declare const process: { env: Record }; - -export class WebhookHandler { - private debug: string[] = []; - private logger: ReturnType; - - constructor() { - this.logger = createLogger('fireflies'); - } - - private addDebugLogs(result: ProcessResult): ProcessResult { - if (process.env.CAPTURE_LOGS === 'true') { - const captured = getAllCapturedLogs(); - result.debug = [...this.debug, ...captured]; - } else { - delete result.debug; - } - return result; - } - - async handle(params: unknown, headers?: Record): Promise { - clearAllCapturedLogs(); - this.debug = []; - - const result: ProcessResult = { - success: false, - noteIds: [], - newContacts: [], - errors: [], - }; - - try { - this.logger.debug('invoked'); - this.logger.debug(`apiUrl=${getApiUrl()}`); - const paramKeys = - params && typeof params === 'object' - ? Object.keys(params as Record) - : []; - this.debug.push( - `paramsType=${typeof params}`, - `paramKeys=${paramKeys.join(',') || 'none'}` - ); - - // 0) Validate environment configuration - const firefliesApiKey = process.env.FIREFLIES_API_KEY || ''; - const twentyApiKey = process.env.TWENTY_API_KEY || ''; - - if (!firefliesApiKey) { - this.logger.critical('FIREFLIES_API_KEY not configured - this is a critical configuration error'); - throw new Error('FIREFLIES_API_KEY environment variable is required'); - } - if (!twentyApiKey) { - this.logger.critical('TWENTY_API_KEY not configured - this is a critical configuration error'); - throw new Error('TWENTY_API_KEY environment variable is required'); - } - - // 1) Parse and validate webhook payload and extract headers if wrapped together - const { payload, extractedHeaders } = this.parsePayload(params); - const finalHeaders = extractedHeaders || headers; - - this.logger.debug(`payload meetingId=${payload.meetingId} eventType="${payload.eventType}"`); - - // 2) Verify webhook signature - const webhookSecret = process.env.FIREFLIES_WEBHOOK_SECRET || ''; - const secretFingerprint = getWebhookSecretFingerprint(webhookSecret); - this.logger.debug(`webhook secret fingerprint=${secretFingerprint}`); - - this.verifySignature(payload, finalHeaders, webhookSecret); - this.logger.debug('signature verification: ok'); - - // 3) Fetch meeting data from Fireflies - const summaryConfig = getSummaryFetchConfig(); - const firefliesPlan = getFirefliesPlan(); - this.logger.debug(`summary strategy: ${summaryConfig.strategy} (retryAttempts=${summaryConfig.retryAttempts}, retryDelay=${summaryConfig.retryDelay}ms)`); - this.logger.debug(`fetching meeting data from Fireflies API`); - - const firefliesClient = new FirefliesApiClient(firefliesApiKey); - const { data: meetingData, summaryReady } = await firefliesClient.fetchMeetingDataWithRetry( - payload.meetingId, - summaryConfig, - firefliesPlan - ); - - this.logger.debug(`meeting data fetched: title="${meetingData.title}" summaryReady=${summaryReady}`); - - result.summaryReady = summaryReady; - result.summaryPending = !summaryReady; - - // Extract business intelligence - if (summaryReady) { - result.actionItemsCount = meetingData.summary.action_items.length; - result.keyTopics = meetingData.summary.topics_discussed; - result.meetingType = meetingData.summary.meeting_type; - - if (meetingData.analytics?.sentiments) { - result.sentimentAnalysis = meetingData.analytics.sentiments; - } - } - - // 4) Check for duplicate meetings - const twentyService = new TwentyCrmService( - twentyApiKey, - getApiUrl() - ); - - const existingMeetingById = await twentyService.findMeetingByFirefliesId(meetingData.id); - if (existingMeetingById) { - this.logger.debug(`meeting already exists by firefliesMeetingId id=${existingMeetingById.id}`); - result.success = true; - result.meetingId = existingMeetingById.id; - return this.addDebugLogs(result); - } - - const existingMeetingByTitle = await twentyService.findExistingMeeting(meetingData.title); - if (existingMeetingByTitle) { - this.logger.debug(`meeting already exists by title id=${existingMeetingByTitle.id}`); - result.success = true; - result.meetingId = existingMeetingByTitle.id; - return this.addDebugLogs(result); - } - this.logger.debug('no existing meeting found, proceeding'); - - // 5) Match participants to existing contacts - this.logger.debug(`total participants from API: ${meetingData.participants.length}`); - meetingData.participants.forEach((p, idx) => { - this.logger.debug(`participant ${idx + 1}: name="${p.name}" email="${p.email || 'none'}"`); - }); - - const { matchedContacts, unmatchedParticipants } = await twentyService.matchParticipantsToContacts( - meetingData.participants - ); - this.logger.debug(`matched=${matchedContacts.length} unmatched=${unmatchedParticipants.length}`); - - unmatchedParticipants.forEach((p, idx) => { - this.logger.debug(`unmatched ${idx + 1}: name="${p.name}" email="${p.email || 'none'}"`); - }); - - // 6) Optionally create contacts - const autoCreate = shouldAutoCreateContacts(); - const newContactIds = autoCreate - ? await twentyService.createContactsForUnmatched(unmatchedParticipants) - : []; - result.newContacts = newContactIds; - this.logger.debug(`autoCreate=${autoCreate} createdContacts=${newContactIds.length}`); - - // 7) Create note first (so we can link to it from the meeting) - const allContactIds = [...matchedContacts.map(({ id }) => id), ...newContactIds]; - const noteBody = MeetingFormatter.formatNoteBody(meetingData); - const noteId = await twentyService.createNoteOnly( - `Meeting: ${meetingData.title}`, - noteBody - ); - result.noteIds = [noteId]; - this.logger.debug(`created note id=${noteId}`); - - // 8) Create meeting with direct relationship to the note - const meetingInput = MeetingFormatter.toMeetingCreateInput(meetingData, noteId); - this.logger.debug(`meeting duration: ${meetingData.duration} min (raw from API) → ${meetingInput.duration} min (rounded)`); - result.meetingId = await twentyService.createMeeting(meetingInput); - this.logger.debug(`created meeting id=${result.meetingId} with noteId=${noteId}`); - - // 9) Link note to participants (Meeting link is handled via the relation field) - await this.linkNoteToParticipants( - twentyService, - noteId, - allContactIds - ); - this.logger.debug(`linked note to ${allContactIds.length} participants`); - - result.success = true; - } catch (error) { - const message = error instanceof Error ? error.message : 'Unknown error'; - this.logger.error(`error: ${message}`); - result.errors?.push(message); - - // Try to create a failed meeting record for tracking - await this.createFailedMeetingRecord(params, message); - } - - return this.addDebugLogs(result); - } - - private parsePayload(params: unknown): { payload: FirefliesWebhookPayload; extractedHeaders?: Record } { - let normalizedParams = params; - let extractedHeaders: Record | undefined; - - // Handle string-encoded params - if (typeof normalizedParams === 'string') { - this.logger.debug(`received params as string length=${normalizedParams.length}`); - try { - const parsed = JSON.parse(normalizedParams); - normalizedParams = parsed; - if (parsed && typeof parsed === 'object') { - const parsedKeys = Object.keys(parsed as Record); - this.logger.debug(`parsed params keys: ${parsedKeys.join(',') || 'none'}`); - } - } catch (parseError) { - this.logger.error(`error parsing string params: ${String(parseError)}`); - throw new Error('Invalid or missing webhook payload'); - } - } - - // Handle wrapped payloads and extract headers if present - let payload: FirefliesWebhookPayload | undefined; - if (isValidFirefliesPayload(normalizedParams)) { - payload = normalizedParams as FirefliesWebhookPayload; - } else if (normalizedParams && typeof normalizedParams === 'object') { - const wrapper = normalizedParams as Record; - - // Extract headers if present in wrapper - if (wrapper.headers && typeof wrapper.headers === 'object' && !Array.isArray(wrapper.headers)) { - extractedHeaders = wrapper.headers as Record; - const headerKeys = Object.keys(extractedHeaders); - this.logger.debug(`extracted headers from wrapper: ${headerKeys.join(',')}`); - } - - const wrapperKeys = ['params', 'payload', 'body', 'data', 'event']; - for (const key of wrapperKeys) { - const candidate = wrapper[key]; - if (isValidFirefliesPayload(candidate)) { - this.logger.debug(`detected payload under wrapper key "${key}"`); - payload = candidate as FirefliesWebhookPayload; - break; - } - } - } - - if (!payload) { - this.logger.error('error: Invalid or missing webhook payload'); - throw new Error('Invalid or missing webhook payload'); - } - - // Log payload keys for debugging - const payloadRecord = payload as Record; - const payloadKeys = Object.keys(payloadRecord); - if (payloadKeys.length > 0) { - this.logger.debug(`payload keys: ${payloadKeys.join(',')}`); - } - - return { payload, extractedHeaders }; - } - - private verifySignature( - payload: FirefliesWebhookPayload, - headers: Record | undefined, - webhookSecret: string - ): void { - // Extract headers - const normalizedHeaders = headers || {}; - const headerKeys = Object.keys(normalizedHeaders); - if (headerKeys.length > 0) { - this.logger.debug(`header keys: ${headerKeys.join(',')}`); - } - this.debug.push(`headerKeys=${headerKeys.join(',') || 'none'}`); - - const headerSignature = Object.entries(normalizedHeaders).find( - ([key]) => key.toLowerCase() === 'x-hub-signature', - )?.[1]; - - const payloadRecord = payload as Record; - const payloadSignature = - typeof payloadRecord['x-hub-signature'] === 'string' - ? (payloadRecord['x-hub-signature'] as string) - : undefined; - - if (payloadSignature) { - this.logger.debug('found signature inside payload'); - } - - const signature = - (typeof headerSignature === 'string' ? headerSignature : undefined) || payloadSignature; - - const payloadForSignature = - payloadSignature && 'x-hub-signature' in payloadRecord - ? Object.fromEntries( - Object.entries(payloadRecord).filter( - ([key]) => key.toLowerCase() !== 'x-hub-signature', - ), - ) - : payloadRecord; - - const body = - typeof normalizedHeaders['body'] === 'string' - ? normalizedHeaders['body'] - : JSON.stringify(payloadForSignature); - - const signatureCheck = verifyWebhookSignature(body, signature, webhookSecret); - if (!signatureCheck.isValid) { - this.debug.push( - `signatureProvided=${Boolean(signature)}`, - `signatureMatched=${signatureCheck.isValid}`, - `webhookSecretFingerprint=${getWebhookSecretFingerprint(webhookSecret)}` - ); - this.logger.debug( - `signature check failed. headerPresent=${Boolean( - headerSignature, - )} payloadSignaturePresent=${Boolean(payloadSignature)}`, - ); - this.logger.debug(`provided signature present=${Boolean(signature)}`); - this.logger.critical('Invalid webhook signature - potential security threat detected in production'); - throw new Error('Invalid webhook signature'); - } - } - - private async linkNoteToParticipants( - twentyService: TwentyCrmService, - noteId: string, - contactIds: string[] - ): Promise { - for (const contactId of contactIds) { - try { - await twentyService.createNoteTarget(noteId, contactId); - this.logger.debug(`linked note ${noteId} to person ${contactId}`); - } catch (error) { - const message = error instanceof Error ? error.message : 'Unknown error'; - this.logger.error(`failed to link note to person ${contactId}: ${message}`); - } - } - } - - private async createFailedMeetingRecord(params: unknown, error: string): Promise { - try { - const twentyApiKey = process.env.TWENTY_API_KEY || ''; - if (!twentyApiKey) { - this.logger.debug('Cannot create failed meeting record: TWENTY_API_KEY not configured'); - return; - } - - let meetingId = 'unknown'; - let meetingTitle = 'Unknown Meeting'; - - const { payload } = this.parsePayload(params); - if (payload?.meetingId) { - meetingId = payload.meetingId; - - const firefliesApiKey = process.env.FIREFLIES_API_KEY || ''; - if (firefliesApiKey) { - try { - const firefliesClient = new FirefliesApiClient(firefliesApiKey); - const meetingData = await firefliesClient.fetchMeetingData(meetingId); - meetingTitle = meetingData.title || meetingTitle; - } catch (fetchError) { - this.logger.debug( - `Could not fetch meeting title: ${ - fetchError instanceof Error ? fetchError.message : 'Unknown error' - }`, - ); - } - } - } - - const twentyService = new TwentyCrmService(twentyApiKey, getApiUrl()); - const failedMeetingData = MeetingFormatter.toFailedMeetingCreateInput( - meetingId, - meetingTitle, - error - ); - - const failedMeetingId = await twentyService.createFailedMeeting(failedMeetingData); - this.logger.debug(`Created failed meeting record: ${failedMeetingId}`); - } catch (recordError) { - this.logger.error( - `Failed to create failed meeting record: ${ - recordError instanceof Error ? recordError.message : 'Unknown error' - }`, - ); - } - } -} - diff --git a/packages/twenty-apps/community/fireflies/src/webhook-validator.ts b/packages/twenty-apps/community/fireflies/src/webhook-validator.ts deleted file mode 100644 index 68a2906623..0000000000 --- a/packages/twenty-apps/community/fireflies/src/webhook-validator.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { createHash, createHmac } from 'crypto'; -import type { FirefliesWebhookPayload } from './types'; - -export type SignatureVerificationResult = { - isValid: boolean; - computedSignature?: string; -}; - -export const verifyWebhookSignature = ( - body: string, - signature: string | undefined, - secret: string -): SignatureVerificationResult => { - if (!signature) { - return { isValid: false }; - } - - try { - const hmac = createHmac('sha256', secret); - hmac.update(body, 'utf8'); - const computed = hmac.digest('hex'); - const computedSignature = `sha256=${computed}`; - - const isValid = signature === computedSignature; - - return { isValid, computedSignature }; - } catch { - return { isValid: false }; - } -}; - -export const getWebhookSecretFingerprint = (secret: string): string => { - return createHash('sha256').update(secret).digest('hex').substring(0, 8); -}; - -export const isValidFirefliesPayload = ( - params: unknown -): params is FirefliesWebhookPayload => { - if (!params || typeof params !== 'object') { - return false; - } - - const payload = params as Record; - - return ( - typeof payload['meetingId'] === 'string' && - payload['meetingId'].length > 0 && - typeof payload['eventType'] === 'string' && - payload['eventType'].length > 0 && - (payload['clientReferenceId'] === undefined || - typeof payload['clientReferenceId'] === 'string') - ); -}; - diff --git a/packages/twenty-apps/community/fireflies/tsconfig.json b/packages/twenty-apps/community/fireflies/tsconfig.json deleted file mode 100644 index 17d258af13..0000000000 --- a/packages/twenty-apps/community/fireflies/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/fireflies/yarn.lock b/packages/twenty-apps/community/fireflies/yarn.lock deleted file mode 100644 index 59f7e339b7..0000000000 --- a/packages/twenty-apps/community/fireflies/yarn.lock +++ /dev/null @@ -1,5505 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/code-frame@npm:7.27.1" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.27.1" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.1.1" - checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.27.2": - version: 7.28.5 - resolution: "@babel/compat-data@npm:7.28.5" - checksum: 10c0/702a25de73087b0eba325c1d10979eed7c9b6662677386ba7b5aa6eace0fc0676f78343bae080a0176ae26f58bd5535d73b9d0fbb547fef377692e8b249353a7 - languageName: node - linkType: hard - -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": - version: 7.28.5 - resolution: "@babel/core@npm:7.28.5" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.5" - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-module-transforms": "npm:^7.28.3" - "@babel/helpers": "npm:^7.28.4" - "@babel/parser": "npm:^7.28.5" - "@babel/template": "npm:^7.27.2" - "@babel/traverse": "npm:^7.28.5" - "@babel/types": "npm:^7.28.5" - "@jridgewell/remapping": "npm:^2.3.5" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/535f82238027621da6bdffbdbe896ebad3558b311d6f8abc680637a9859b96edbf929ab010757055381570b29cf66c4a295b5618318d27a4273c0e2033925e72 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.28.5, @babel/generator@npm:^7.7.2": - version: 7.28.5 - resolution: "@babel/generator@npm:7.28.5" - dependencies: - "@babel/parser": "npm:^7.28.5" - "@babel/types": "npm:^7.28.5" - "@jridgewell/gen-mapping": "npm:^0.3.12" - "@jridgewell/trace-mapping": "npm:^0.3.28" - jsesc: "npm:^3.0.2" - checksum: 10c0/9f219fe1d5431b6919f1a5c60db8d5d34fe546c0d8f5a8511b32f847569234ffc8032beb9e7404649a143f54e15224ecb53a3d11b6bb85c3203e573d91fca752 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/helper-compilation-targets@npm:7.27.2" - dependencies: - "@babel/compat-data": "npm:^7.27.2" - "@babel/helper-validator-option": "npm:^7.27.1" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 - languageName: node - linkType: hard - -"@babel/helper-globals@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/helper-globals@npm:7.28.0" - checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-imports@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.28.3": - version: 7.28.3 - resolution: "@babel/helper-module-transforms@npm:7.28.3" - dependencies: - "@babel/helper-module-imports": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.3" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/549be62515a6d50cd4cfefcab1b005c47f89bd9135a22d602ee6a5e3a01f27571868ada10b75b033569f24dc4a2bb8d04bfa05ee75c16da7ade2d0db1437fcdb - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.27.1 - resolution: "@babel/helper-plugin-utils@npm:7.27.1" - checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.27.1, @babel/helper-validator-identifier@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-validator-identifier@npm:7.28.5" - checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847 - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-option@npm:7.27.1" - checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.28.4": - version: 7.28.4 - resolution: "@babel/helpers@npm:7.28.4" - dependencies: - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.4" - checksum: 10c0/aaa5fb8098926dfed5f223adf2c5e4c7fbba4b911b73dfec2d7d3083f8ba694d201a206db673da2d9b3ae8c01793e795767654558c450c8c14b4c2175b4fcb44 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/parser@npm:7.28.5" - dependencies: - "@babel/types": "npm:^7.28.5" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/5bbe48bf2c79594ac02b490a41ffde7ef5aa22a9a88ad6bcc78432a6ba8a9d638d531d868bd1f104633f1f6bba9905746e15185b8276a3756c42b765d131b1ef - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.12.13": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.12.13" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e66f7a761b8360419bbb93ab67d87c8a97465ef4637a985ff682ce7ba6918b34b29d81190204cf908d0933058ee7b42737423cd8a999546c21b3aabad4affa9a - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.27.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bc5afe6a458d5f0492c02a54ad98c5756a0c13bd6d20609aae65acd560a9e141b0876da5f358dce34ea136f271c1016df58b461184d7ae9c4321e0f98588bc84 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.10.4" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.8.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.27.1 - resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/11589b4c89c66ef02d57bf56c6246267851ec0c361f58929327dc3e070b0dab644be625bbe7fb4c4df30c3634bfdfe31244e1f517be397d2def1487dbbe3c37d - languageName: node - linkType: hard - -"@babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3": - version: 7.27.2 - resolution: "@babel/template@npm:7.27.2" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.2" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/traverse@npm:7.28.5" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.5" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.28.5" - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.5" - debug: "npm:^4.3.1" - checksum: 10c0/f6c4a595993ae2b73f2d4cd9c062f2e232174d293edd4abe1d715bd6281da8d99e47c65857e8d0917d9384c65972f4acdebc6749a7c40a8fcc38b3c7fb3e706f - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5, @babel/types@npm:^7.3.3": - version: 7.28.5 - resolution: "@babel/types@npm:7.28.5" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.28.5" - checksum: 10c0/a5a483d2100befbf125793640dec26b90b95fd233a94c19573325898a5ce1e52cdfa96e495c7dcc31b5eca5b66ce3e6d4a0f5a4a62daec271455959f208ab08a - languageName: node - linkType: hard - -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/aix-ppc64@npm:0.25.12" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm64@npm:0.25.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm@npm:0.25.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-x64@npm:0.25.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-arm64@npm:0.25.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-x64@npm:0.25.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-arm64@npm:0.25.12" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-x64@npm:0.25.12" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm64@npm:0.25.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm@npm:0.25.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ia32@npm:0.25.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-loong64@npm:0.25.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-mips64el@npm:0.25.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ppc64@npm:0.25.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-riscv64@npm:0.25.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-s390x@npm:0.25.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-x64@npm:0.25.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-arm64@npm:0.25.12" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-x64@npm:0.25.12" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-arm64@npm:0.25.12" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-x64@npm:0.25.12" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openharmony-arm64@npm:0.25.12" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/sunos-x64@npm:0.25.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-arm64@npm:0.25.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-ia32@npm:0.25.12" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-x64@npm:0.25.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^2.0.0": - version: 2.1.1 - resolution: "@fastify/busboy@npm:2.1.1" - checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 - languageName: node - linkType: hard - -"@genql/cli@npm:^3.0.3": - version: 3.0.5 - resolution: "@genql/cli@npm:3.0.5" - dependencies: - "@graphql-tools/graphql-file-loader": "npm:^7.5.11" - "@graphql-tools/load": "npm:^7.8.6" - fs-extra: "npm:^10.1.0" - graphql: "npm:^16.6.0" - kleur: "npm:^4.1.5" - listr: "npm:^0.14.3" - lodash: "npm:^4.17.21" - mkdirp: "npm:^0.5.1" - native-fetch: "npm:^4.0.2" - prettier: "npm:^2.8.0" - qs: "npm:^6.11.0" - rimraf: "npm:^2.6.3" - undici: "npm:^5.18.0" - yargs: "npm:^15.3.1" - bin: - genql: dist/cli.js - checksum: 10c0/646d4da8986741a8f1b610bd8cfb5bc26cd9a856de671461e4ca87fb05443f37dd0edfb3b30ceaa34cd049077873afa07febfd4714dd2e0681fb07484e19a080 - languageName: node - linkType: hard - -"@graphql-tools/graphql-file-loader@npm:^7.5.11": - version: 7.5.17 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" - dependencies: - "@graphql-tools/import": "npm:6.7.18" - "@graphql-tools/utils": "npm:^9.2.1" - globby: "npm:^11.0.3" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/f737f14357731ad01da57755e1cf26ce375b475209d6ab7e4b656b56191a8979d2ab7dd5d1c54a1f11e04374f7a373fa95ea5ec6a001d0cef913ea208fadc65b - languageName: node - linkType: hard - -"@graphql-tools/import@npm:6.7.18": - version: 6.7.18 - resolution: "@graphql-tools/import@npm:6.7.18" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - resolve-from: "npm:5.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/d33e37a1879dd43ac2851c9bac2f2873c58bb3687f1c06e159760dbb5e540ef074d688df70cc6dbd3ee5de48d437878df8f65a7c65ae80bd025bf98f2d615732 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^7.8.6": - version: 7.8.14 - resolution: "@graphql-tools/load@npm:7.8.14" - dependencies: - "@graphql-tools/schema": "npm:^9.0.18" - "@graphql-tools/utils": "npm:^9.2.1" - p-limit: "npm:3.1.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/1fa036ac596ccf48f350aa545d108c173184d9b53247f9e21c0d4ba96c5cba4a0b44281f9154f122e1e8e9d9d6eab93a5b2618ca8a797969bde1e75c1d45e786 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:^8.4.1": - version: 8.4.2 - resolution: "@graphql-tools/merge@npm:8.4.2" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/2df55222b48e010e683572f456cf265aabae5748c59f7c1260c66dec9794b7a076d3706f04da969b77f0a32c7ccb4551fee30125931d3fe9c98a8806aae9a3f4 - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:^9.0.18": - version: 9.0.19 - resolution: "@graphql-tools/schema@npm:9.0.19" - dependencies: - "@graphql-tools/merge": "npm:^8.4.1" - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/42fd8ca8d3c8d60b583077c201980518482ff0cd5ed0c1f14bd9b835a2689ad41d02cbd3478f7d7dea7aec1227f7639fd5deb5e6360852a2e542b96b44bfb7a4 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^9.2.1": - version: 9.2.1 - resolution: "@graphql-tools/utils@npm:9.2.1" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.1.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/37a7bd7e14d28ff1bacc007dca84bc6cef2d7d7af9a547b5dbe52fcd134afddd6d4a7b2148cfbaff5ddba91a868453d597da77bd0457fb0be15928f916901606 - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:^3.1.1": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/94e9d75c1f178bbae8d874f5a9361708a3350c8def7eaeb6920f2c820e82403b7d4f55b3735856d68e145e86c85cbfe2adc444fdc25519cd51f108697e99346c - languageName: node - linkType: hard - -"@inquirer/checkbox@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/checkbox@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 - languageName: node - linkType: hard - -"@inquirer/confirm@npm:^3.2.0": - version: 3.2.0 - resolution: "@inquirer/confirm@npm:3.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/a2cbfc8ae9c880bba4cce1993f5c399fb0d12741fdd574917c87fceb40ece62ffa60e35aaadf4e62d7c114f54008e45aee5d6d90497bb62d493996c02725d243 - languageName: node - linkType: hard - -"@inquirer/core@npm:^9.1.0": - version: 9.2.1 - resolution: "@inquirer/core@npm:9.2.1" - dependencies: - "@inquirer/figures": "npm:^1.0.6" - "@inquirer/type": "npm:^2.0.0" - "@types/mute-stream": "npm:^0.0.4" - "@types/node": "npm:^22.5.5" - "@types/wrap-ansi": "npm:^3.0.0" - ansi-escapes: "npm:^4.3.2" - cli-width: "npm:^4.1.0" - mute-stream: "npm:^1.0.0" - signal-exit: "npm:^4.1.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^6.2.0" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 - languageName: node - linkType: hard - -"@inquirer/editor@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/editor@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - external-editor: "npm:^3.1.0" - checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee - languageName: node - linkType: hard - -"@inquirer/expand@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/expand@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 - languageName: node - linkType: hard - -"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6": - version: 1.0.15 - resolution: "@inquirer/figures@npm:1.0.15" - checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 - languageName: node - linkType: hard - -"@inquirer/input@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/input@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f - languageName: node - linkType: hard - -"@inquirer/number@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/number@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 - languageName: node - linkType: hard - -"@inquirer/password@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/password@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f - languageName: node - linkType: hard - -"@inquirer/prompts@npm:^5.5.0": - version: 5.5.0 - resolution: "@inquirer/prompts@npm:5.5.0" - dependencies: - "@inquirer/checkbox": "npm:^2.5.0" - "@inquirer/confirm": "npm:^3.2.0" - "@inquirer/editor": "npm:^2.2.0" - "@inquirer/expand": "npm:^2.3.0" - "@inquirer/input": "npm:^2.3.0" - "@inquirer/number": "npm:^1.1.0" - "@inquirer/password": "npm:^2.2.0" - "@inquirer/rawlist": "npm:^2.3.0" - "@inquirer/search": "npm:^1.1.0" - "@inquirer/select": "npm:^2.5.0" - checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 - languageName: node - linkType: hard - -"@inquirer/rawlist@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/rawlist@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 - languageName: node - linkType: hard - -"@inquirer/search@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/search@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 - languageName: node - linkType: hard - -"@inquirer/select@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/select@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c - languageName: node - linkType: hard - -"@inquirer/type@npm:^1.5.3": - version: 1.5.5 - resolution: "@inquirer/type@npm:1.5.5" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 - languageName: node - linkType: hard - -"@inquirer/type@npm:^2.0.0": - version: 2.0.0 - resolution: "@inquirer/type@npm:2.0.0" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: "npm:^7.0.4" - checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: "npm:^5.3.1" - find-up: "npm:^4.1.0" - get-package-type: "npm:^0.1.0" - js-yaml: "npm:^3.13.1" - resolve-from: "npm:^5.0.0" - checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a - languageName: node - linkType: hard - -"@jest/console@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/console@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - slash: "npm:^3.0.0" - checksum: 10c0/7be408781d0a6f657e969cbec13b540c329671819c2f57acfad0dae9dbfe2c9be859f38fe99b35dba9ff1536937dc6ddc69fdcd2794812fa3c647a1619797f6c - languageName: node - linkType: hard - -"@jest/core@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/core@npm:29.7.0" - dependencies: - "@jest/console": "npm:^29.7.0" - "@jest/reporters": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - jest-changed-files: "npm:^29.7.0" - jest-config: "npm:^29.7.0" - jest-haste-map: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-resolve: "npm:^29.7.0" - jest-resolve-dependencies: "npm:^29.7.0" - jest-runner: "npm:^29.7.0" - jest-runtime: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - jest-watcher: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^29.7.0" - slash: "npm:^3.0.0" - strip-ansi: "npm:^6.0.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/934f7bf73190f029ac0f96662c85cd276ec460d407baf6b0dbaec2872e157db4d55a7ee0b1c43b18874602f662b37cb973dda469a4e6d88b4e4845b521adeeb2 - languageName: node - linkType: hard - -"@jest/environment@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/environment@npm:29.7.0" - dependencies: - "@jest/fake-timers": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - jest-mock: "npm:^29.7.0" - checksum: 10c0/c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" - dependencies: - jest-get-type: "npm:^29.6.3" - checksum: 10c0/60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a - languageName: node - linkType: hard - -"@jest/expect@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect@npm:29.7.0" - dependencies: - expect: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - checksum: 10c0/b41f193fb697d3ced134349250aed6ccea075e48c4f803159db102b826a4e473397c68c31118259868fd69a5cba70e97e1c26d2c2ff716ca39dc73a2ccec037e - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/fake-timers@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - "@sinonjs/fake-timers": "npm:^10.0.2" - "@types/node": "npm:*" - jest-message-util: "npm:^29.7.0" - jest-mock: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - checksum: 10c0/cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c - languageName: node - linkType: hard - -"@jest/globals@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/globals@npm:29.7.0" - dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/expect": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - jest-mock: "npm:^29.7.0" - checksum: 10c0/a385c99396878fe6e4460c43bd7bb0a5cc52befb462cc6e7f2a3810f9e7bcce7cdeb51908fd530391ee452dc856c98baa2c5f5fa8a5b30b071d31ef7f6955cea - languageName: node - linkType: hard - -"@jest/reporters@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/reporters@npm:29.7.0" - dependencies: - "@bcoe/v8-coverage": "npm:^0.2.3" - "@jest/console": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@jridgewell/trace-mapping": "npm:^0.3.18" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - collect-v8-coverage: "npm:^1.0.0" - exit: "npm:^0.1.2" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - istanbul-lib-coverage: "npm:^3.0.0" - istanbul-lib-instrument: "npm:^6.0.0" - istanbul-lib-report: "npm:^3.0.0" - istanbul-lib-source-maps: "npm:^4.0.0" - istanbul-reports: "npm:^3.1.3" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-worker: "npm:^29.7.0" - slash: "npm:^3.0.0" - string-length: "npm:^4.0.1" - strip-ansi: "npm:^6.0.0" - v8-to-istanbul: "npm:^9.0.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 10c0/a754402a799541c6e5aff2c8160562525e2a47e7d568f01ebfc4da66522de39cbb809bbb0a841c7052e4270d79214e70aec3c169e4eae42a03bc1a8a20cb9fa2 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": "npm:^0.27.8" - checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be - languageName: node - linkType: hard - -"@jest/source-map@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/source-map@npm:29.6.3" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.18" - callsites: "npm:^3.0.0" - graceful-fs: "npm:^4.2.9" - checksum: 10c0/a2f177081830a2e8ad3f2e29e20b63bd40bade294880b595acf2fc09ec74b6a9dd98f126a2baa2bf4941acd89b13a4ade5351b3885c224107083a0059b60a219 - languageName: node - linkType: hard - -"@jest/test-result@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-result@npm:29.7.0" - dependencies: - "@jest/console": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - collect-v8-coverage: "npm:^1.0.0" - checksum: 10c0/7de54090e54a674ca173470b55dc1afdee994f2d70d185c80236003efd3fa2b753fff51ffcdda8e2890244c411fd2267529d42c4a50a8303755041ee493e6a04 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-sequencer@npm:29.7.0" - dependencies: - "@jest/test-result": "npm:^29.7.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - slash: "npm:^3.0.0" - checksum: 10c0/593a8c4272797bb5628984486080cbf57aed09c7cfdc0a634e8c06c38c6bef329c46c0016e84555ee55d1cd1f381518cf1890990ff845524c1123720c8c1481b - languageName: node - linkType: hard - -"@jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" - dependencies: - "@babel/core": "npm:^7.11.6" - "@jest/types": "npm:^29.6.3" - "@jridgewell/trace-mapping": "npm:^0.3.18" - babel-plugin-istanbul: "npm:^6.1.1" - chalk: "npm:^4.0.0" - convert-source-map: "npm:^2.0.0" - fast-json-stable-stringify: "npm:^2.1.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - pirates: "npm:^4.0.4" - slash: "npm:^3.0.0" - write-file-atomic: "npm:^4.0.2" - checksum: 10c0/7f4a7f73dcf45dfdf280c7aa283cbac7b6e5a904813c3a93ead7e55873761fc20d5c4f0191d2019004fac6f55f061c82eb3249c2901164ad80e362e7a7ede5a6 - languageName: node - linkType: hard - -"@jest/types@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/types@npm:29.6.3" - dependencies: - "@jest/schemas": "npm:^29.6.3" - "@types/istanbul-lib-coverage": "npm:^2.0.0" - "@types/istanbul-reports": "npm:^3.0.0" - "@types/node": "npm:*" - "@types/yargs": "npm:^17.0.8" - chalk: "npm:^4.0.0" - checksum: 10c0/ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.13 - resolution: "@jridgewell/gen-mapping@npm:0.3.13" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/9a7d65fb13bd9aec1fbab74cda08496839b7e2ceb31f5ab922b323e94d7c481ce0fc4fd7e12e2610915ed8af51178bdc61e168e92a8c8b8303b030b03489b13b - languageName: node - linkType: hard - -"@jridgewell/remapping@npm:^2.3.5": - version: 2.3.5 - resolution: "@jridgewell/remapping@npm:2.3.5" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/3de494219ffeb2c5c38711d0d7bb128097edf91893090a2dbc8ee0b55d092bb7347b1fd0f478486c5eab010e855c73927b1666f2107516d472d24a73017d1194 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.5 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" - checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28": - version: 0.3.31 - resolution: "@jridgewell/trace-mapping@npm:0.3.31" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/agent@npm:3.0.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/fs@npm:4.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@samverschueren/stream-to-observable@npm:^0.3.0": - version: 0.3.1 - resolution: "@samverschueren/stream-to-observable@npm:0.3.1" - dependencies: - any-observable: "npm:^0.3.0" - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true - checksum: 10c0/0d874453f6bc2460d71783292291f52feb36c2a75314b1072a6ffe6206562f33e9d664a554348d565a6b54da9041d75070371052545bc329caaa52f64216987f - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^3.0.0": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: "npm:4.0.8" - checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^10.0.2": - version: 10.3.0 - resolution: "@sinonjs/fake-timers@npm:10.3.0" - dependencies: - "@sinonjs/commons": "npm:^3.0.0" - checksum: 10c0/2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63 - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.1.14": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": "npm:^7.20.7" - "@babel/types": "npm:^7.20.7" - "@types/babel__generator": "npm:*" - "@types/babel__template": "npm:*" - "@types/babel__traverse": "npm:*" - checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.27.0 - resolution: "@types/babel__generator@npm:7.27.0" - dependencies: - "@babel/types": "npm:^7.0.0" - checksum: 10c0/9f9e959a8792df208a9d048092fda7e1858bddc95c6314857a8211a99e20e6830bdeb572e3587ae8be5429e37f2a96fcf222a9f53ad232f5537764c9e13a2bbd - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" - dependencies: - "@babel/parser": "npm:^7.1.0" - "@babel/types": "npm:^7.0.0" - checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.28.0 - resolution: "@types/babel__traverse@npm:7.28.0" - dependencies: - "@babel/types": "npm:^7.28.2" - checksum: 10c0/b52d7d4e8fc6a9018fe7361c4062c1c190f5778cf2466817cb9ed19d69fbbb54f9a85ffedeb748ed8062d2cf7d4cc088ee739848f47c57740de1c48cbf0d0994 - languageName: node - linkType: hard - -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.9 - resolution: "@types/graceful-fs@npm:4.1.9" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/235d2fc69741448e853333b7c3d1180a966dd2b8972c8cbcd6b2a0c6cd7f8d582ab2b8e58219dbc62cce8f1b40aa317ff78ea2201cdd8249da5025adebed6f0b - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.6 - resolution: "@types/istanbul-lib-coverage@npm:2.0.6" - checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.3 - resolution: "@types/istanbul-lib-report@npm:3.0.3" - dependencies: - "@types/istanbul-lib-coverage": "npm:*" - checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" - dependencies: - "@types/istanbul-lib-report": "npm:*" - checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee - languageName: node - linkType: hard - -"@types/jest@npm:^29.5.5": - version: 29.5.14 - resolution: "@types/jest@npm:29.5.14" - dependencies: - expect: "npm:^29.0.0" - pretty-format: "npm:^29.0.0" - checksum: 10c0/18e0712d818890db8a8dab3d91e9ea9f7f19e3f83c2e50b312f557017dc81466207a71f3ed79cf4428e813ba939954fa26ffa0a9a7f153181ba174581b1c2aed - languageName: node - linkType: hard - -"@types/mute-stream@npm:^0.0.4": - version: 0.0.4 - resolution: "@types/mute-stream@npm:0.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/944730fd7b398c5078de3c3d4d0afeec8584283bc694da1803fdfca14149ea385e18b1b774326f1601baf53898ce6d121a952c51eb62d188ef6fcc41f725c0dc - languageName: node - linkType: hard - -"@types/node@npm:*, @types/node@npm:^24.9.2": - version: 24.9.2 - resolution: "@types/node@npm:24.9.2" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/7905d43f65cee72ef475fe76316e10bbf6ac5d08a7f0f6c38f2b6285d7ca3009e8fcafc8f8a1d2bf3f55889c9c278dbb203a9081fd0cf2d6d62161703924c6fa - languageName: node - linkType: hard - -"@types/node@npm:^22.5.5": - version: 22.19.1 - resolution: "@types/node@npm:22.19.1" - dependencies: - undici-types: "npm:~6.21.0" - checksum: 10c0/6edd93aea86da740cb7872626839cd6f4a67a049d3a3a6639cb592c620ec591408a30989ab7410008d1a0b2d4985ce50f1e488e79c033e4476d3bec6833b0a2f - languageName: node - linkType: hard - -"@types/stack-utils@npm:^2.0.0": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c - languageName: node - linkType: hard - -"@types/wrap-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/wrap-ansi@npm:3.0.0" - checksum: 10c0/8d8f53363f360f38135301a06b596c295433ad01debd082078c33c6ed98b05a5c8fe8853a88265432126096084f4a135ec1564e3daad631b83296905509f90b3 - languageName: node - linkType: hard - -"@types/yargs-parser@npm:*": - version: 21.0.3 - resolution: "@types/yargs-parser@npm:21.0.3" - checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.34 - resolution: "@types/yargs@npm:17.0.34" - dependencies: - "@types/yargs-parser": "npm:*" - checksum: 10c0/7d4c6a6bc2b8dd4c7deaf507633fe6fd91424873add76b63c8263479223ea7a061bea86e7e0f3ed28cbe897338a934f3c04d802e8f67b7d2d3874924c94468c5 - languageName: node - linkType: hard - -"abbrev@npm:^3.0.0": - version: 3.0.1 - resolution: "abbrev@npm:3.0.1" - checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.4 - resolution: "agent-base@npm:7.1.4" - checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe - languageName: node - linkType: hard - -"ansi-escapes@npm:^3.0.0": - version: 3.2.0 - resolution: "ansi-escapes@npm:3.2.0" - checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 - languageName: node - linkType: hard - -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.2.2 - resolution: "ansi-regex@npm:6.2.2" - checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f - languageName: node - linkType: hard - -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^5.0.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.3 - resolution: "ansi-styles@npm:6.2.3" - checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 - languageName: node - linkType: hard - -"any-observable@npm:^0.3.0": - version: 0.3.0 - resolution: "any-observable@npm:0.3.0" - checksum: 10c0/104c2b79c2ac7e6c75b35f8fd62babf73015668f22bd25336c6f848350d91f9e7daf2fddbf1c1b76fe795e89fbc91b49f70a2aec5c69f1acf0562c344f36042b - languageName: node - linkType: hard - -"anymatch@npm:^3.0.3": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: "npm:~1.0.2" - checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 - languageName: node - linkType: hard - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"axios@npm:^1.13.1": - version: 1.13.1 - resolution: "axios@npm:1.13.1" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/de9c3c6de43d3ee1146d3afe78645f19450cac6a5d7235bef8b8e8eeb705c2e47e2d231dea99cecaec4dae1897c521118ca9413b9d474063c719c4d94c5b9adc - languageName: node - linkType: hard - -"axios@npm:^1.6.0": - version: 1.13.2 - resolution: "axios@npm:1.13.2" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/e8a42e37e5568ae9c7a28c348db0e8cf3e43d06fcbef73f0048669edfe4f71219664da7b6cc991b0c0f01c28a48f037c515263cb79be1f1ae8ff034cd813867b - languageName: node - linkType: hard - -"babel-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "babel-jest@npm:29.7.0" - dependencies: - "@jest/transform": "npm:^29.7.0" - "@types/babel__core": "npm:^7.1.14" - babel-plugin-istanbul: "npm:^6.1.1" - babel-preset-jest: "npm:^29.6.3" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - slash: "npm:^3.0.0" - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 10c0/2eda9c1391e51936ca573dd1aedfee07b14c59b33dbe16ef347873ddd777bcf6e2fc739681e9e9661ab54ef84a3109a03725be2ac32cd2124c07ea4401cbe8c1 - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@istanbuljs/load-nyc-config": "npm:^1.0.0" - "@istanbuljs/schema": "npm:^0.1.2" - istanbul-lib-instrument: "npm:^5.0.4" - test-exclude: "npm:^6.0.0" - checksum: 10c0/1075657feb705e00fd9463b329921856d3775d9867c5054b449317d39153f8fbcebd3e02ebf00432824e647faff3683a9ca0a941325ef1afe9b3c4dd51b24beb - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-plugin-jest-hoist@npm:29.6.3" - dependencies: - "@babel/template": "npm:^7.3.3" - "@babel/types": "npm:^7.3.3" - "@types/babel__core": "npm:^7.1.14" - "@types/babel__traverse": "npm:^7.0.6" - checksum: 10c0/7e6451caaf7dce33d010b8aafb970e62f1b0c0b57f4978c37b0d457bbcf0874d75a395a102daf0bae0bd14eafb9f6e9a165ee5e899c0a4f1f3bb2e07b304ed2e - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.2.0 - resolution: "babel-preset-current-node-syntax@npm:1.2.0" - dependencies: - "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/plugin-syntax-bigint": "npm:^7.8.3" - "@babel/plugin-syntax-class-properties": "npm:^7.12.13" - "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" - "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" - "@babel/plugin-syntax-import-meta": "npm:^7.10.4" - "@babel/plugin-syntax-json-strings": "npm:^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" - "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" - "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" - "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" - "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" - "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" - peerDependencies: - "@babel/core": ^7.0.0 || ^8.0.0-0 - checksum: 10c0/94a4f81cddf9b051045d08489e4fff7336292016301664c138cfa3d9ffe3fe2ba10a24ad6ae589fd95af1ac72ba0216e1653555c187e694d7b17be0c002bea10 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-preset-jest@npm:29.6.3" - dependencies: - babel-plugin-jest-hoist: "npm:^29.6.3" - babel-preset-current-node-syntax: "npm:^1.0.0" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/ec5fd0276b5630b05f0c14bb97cc3815c6b31600c683ebb51372e54dcb776cff790bdeeabd5b8d01ede375a040337ccbf6a3ccd68d3a34219125945e167ad943 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"baseline-browser-mapping@npm:^2.8.19": - version: 2.8.23 - resolution: "baseline-browser-mapping@npm:2.8.23" - bin: - baseline-browser-mapping: dist/cli.js - checksum: 10c0/5a63c1c241d288e5c79aa32a1cbea335b5af899172161aa9f9701a67c5b9b55ea3b3945a70a842385374627dde1de27504641bc95257d8c2e81f0c593c719121 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.2 - resolution: "brace-expansion@npm:2.0.2" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"browserslist@npm:^4.24.0": - version: 4.27.0 - resolution: "browserslist@npm:4.27.0" - dependencies: - baseline-browser-mapping: "npm:^2.8.19" - caniuse-lite: "npm:^1.0.30001751" - electron-to-chromium: "npm:^1.5.238" - node-releases: "npm:^2.0.26" - update-browserslist-db: "npm:^1.1.4" - bin: - browserslist: cli.js - checksum: 10c0/395611e54374da9171cdbe7e3704ab426e0f1d622751392df6d6cbf60c539bf06cf2407e9dd769bc01ee2abca6a14af6509a2e0bbb448ba75a054db6c1840643 - languageName: node - linkType: hard - -"bs-logger@npm:^0.2.6": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" - dependencies: - fast-json-stable-stringify: "npm:2.x" - checksum: 10c0/80e89aaaed4b68e3374ce936f2eb097456a0dddbf11f75238dbd53140b1e39259f0d248a5089ed456f1158984f22191c3658d54a713982f676709fbe1a6fa5a0 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: "npm:^0.4.0" - checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 - languageName: node - linkType: hard - -"cacache@npm:^19.0.1": - version: 19.0.1 - resolution: "cacache@npm:19.0.1" - dependencies: - "@npmcli/fs": "npm:^4.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^7.0.2" - ssri: "npm:^12.0.0" - tar: "npm:^7.4.3" - unique-filename: "npm:^4.0.0" - checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2": - version: 1.0.4 - resolution: "call-bound@npm:1.0.4" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - get-intrinsic: "npm:^1.3.0" - checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - -"camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001751": - version: 1.0.30001753 - resolution: "caniuse-lite@npm:1.0.30001753" - checksum: 10c0/730344b6c54769f544f1d4bd7f99a122cd5f6e964e482adbcb18b63cda56e9c40aca1e3ab47c7154098803c9ba3772cca0aba936d1c924e67e8db8345712e5a8 - languageName: node - linkType: hard - -"chalk@npm:^1.0.0, chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - dependencies: - ansi-styles: "npm:^2.2.1" - escape-string-regexp: "npm:^1.0.2" - has-ansi: "npm:^2.0.0" - strip-ansi: "npm:^3.0.0" - supports-color: "npm:^2.0.0" - checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 - languageName: node - linkType: hard - -"chalk@npm:^2.4.1": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - -"chalk@npm:^5.3.0": - version: 5.6.2 - resolution: "chalk@npm:5.6.2" - checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 - languageName: node - linkType: hard - -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d - languageName: node - linkType: hard - -"chokidar@npm:^4.0.0": - version: 4.0.3 - resolution: "chokidar@npm:4.0.3" - dependencies: - readdirp: "npm:^4.0.1" - checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 - languageName: node - linkType: hard - -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^1.0.0": - version: 1.4.3 - resolution: "cjs-module-lexer@npm:1.4.3" - checksum: 10c0/076b3af85adc4d65dbdab1b5b240fe5b45d44fcf0ef9d429044dd94d19be5589376805c44fb2d4b3e684e5fe6a9b7cf3e426476a6507c45283c5fc6ff95240be - languageName: node - linkType: hard - -"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-cursor@npm:2.1.0" - dependencies: - restore-cursor: "npm:^2.0.0" - checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda - languageName: node - linkType: hard - -"cli-truncate@npm:^0.2.1": - version: 0.2.1 - resolution: "cli-truncate@npm:0.2.1" - dependencies: - slice-ansi: "npm:0.0.4" - string-width: "npm:^1.0.1" - checksum: 10c0/c6caa5e2b70d841c42f4a2270d6fc7129df915f8911e4afa90c79231ccc857cd819a2c90e0707fde04e51ce56b4d71646b843f6cbaff4f7cdcb3b91ed51f6e89 - languageName: node - linkType: hard - -"cli-width@npm:^4.1.0": - version: 4.1.0 - resolution: "cli-width@npm:4.1.0" - checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^6.2.0" - checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 - languageName: node - linkType: hard - -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 - languageName: node - linkType: hard - -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.3 - resolution: "collect-v8-coverage@npm:1.0.3" - checksum: 10c0/bc62ba251bcce5e3354a8f88fa6442bee56e3e612fec08d4dfcf66179b41ea0bf544b0f78c4ebc0f8050871220af95bb5c5578a6aef346feea155640582f09dc - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"commander@npm:^12.0.0": - version: 12.1.0 - resolution: "commander@npm:12.1.0" - checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b - languageName: node - linkType: hard - -"create-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "create-jest@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - chalk: "npm:^4.0.0" - exit: "npm:^0.1.2" - graceful-fs: "npm:^4.2.9" - jest-config: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - prompts: "npm:^2.0.1" - bin: - create-jest: bin/create-jest.js - checksum: 10c0/e7e54c280692470d3398f62a6238fd396327e01c6a0757002833f06d00afc62dd7bfe04ff2b9cd145264460e6b4d1eb8386f2925b7e567f97939843b7b0e812f - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 - languageName: node - linkType: hard - -"date-fns@npm:^1.27.2": - version: 1.30.1 - resolution: "date-fns@npm:1.30.1" - checksum: 10c0/bad6ad7c15180121e15d61ad62a4a214c108d66f35b35f5eeb6ade837a3c29aa4444b9528a93a5374b95ba11231c142276351bf52f4d168676f9a1e17ce3726a - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": - version: 4.4.3 - resolution: "debug@npm:4.4.3" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 - languageName: node - linkType: hard - -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 - languageName: node - linkType: hard - -"dedent@npm:^1.0.0": - version: 1.7.0 - resolution: "dedent@npm:1.7.0" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: 10c0/c5e8a8beb5072bd5e520cb64b27a82d7ec3c2a63ee5ce47dbc2a05d5b7700cefd77a992a752cd0a8b1d979c1db06b14fb9486e805f3ad6088eda6e07cd9bf2d5 - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d - languageName: node - linkType: hard - -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"dotenv@npm:^16.4.0": - version: 16.6.1 - resolution: "dotenv@npm:16.6.1" - checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc - languageName: node - linkType: hard - -"dotenv@npm:^17.2.3": - version: 17.2.3 - resolution: "dotenv@npm:17.2.3" - checksum: 10c0/c884403209f713214a1b64d4d1defa4934c2aa5b0002f5a670ae298a51e3c3ad3ba79dfee2f8df49f01ae74290fcd9acdb1ab1d09c7bfb42b539036108bb2ba0 - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.238": - version: 1.5.244 - resolution: "electron-to-chromium@npm:1.5.244" - checksum: 10c0/a3cbc8c9c9415234f97e92724924f943fcb82494b3a2f9ae998954d22496e86f7eaf5e2fceca8aa8be098b0693f508332ec2d3b4b39a42cd2de1fac4d048a19f - languageName: node - linkType: hard - -"elegant-spinner@npm:^1.0.1": - version: 1.0.1 - resolution: "elegant-spinner@npm:1.0.1" - checksum: 10c0/df607c83c20fc3ce56c514175dd5d1ee7f667da00cee13d04d32c70d55e76555091fa236689e691cf7dedba17b0020fec635e499cdde84dbea2ef8639314e5f8 - languageName: node - linkType: hard - -"emittery@npm:^0.13.1": - version: 0.13.1 - resolution: "emittery@npm:0.13.1" - checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.4 - resolution: "error-ex@npm:1.3.4" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10c0/b9e34ff4778b8f3b31a8377e1c654456f4c41aeaa3d10a1138c3b7635d8b7b2e03eb2475d46d8ae055c1f180a1063e100bffabf64ea7e7388b37735df5328664 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"esbuild@npm:~0.25.0": - version: 0.25.12 - resolution: "esbuild@npm:0.25.12" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.12" - "@esbuild/android-arm": "npm:0.25.12" - "@esbuild/android-arm64": "npm:0.25.12" - "@esbuild/android-x64": "npm:0.25.12" - "@esbuild/darwin-arm64": "npm:0.25.12" - "@esbuild/darwin-x64": "npm:0.25.12" - "@esbuild/freebsd-arm64": "npm:0.25.12" - "@esbuild/freebsd-x64": "npm:0.25.12" - "@esbuild/linux-arm": "npm:0.25.12" - "@esbuild/linux-arm64": "npm:0.25.12" - "@esbuild/linux-ia32": "npm:0.25.12" - "@esbuild/linux-loong64": "npm:0.25.12" - "@esbuild/linux-mips64el": "npm:0.25.12" - "@esbuild/linux-ppc64": "npm:0.25.12" - "@esbuild/linux-riscv64": "npm:0.25.12" - "@esbuild/linux-s390x": "npm:0.25.12" - "@esbuild/linux-x64": "npm:0.25.12" - "@esbuild/netbsd-arm64": "npm:0.25.12" - "@esbuild/netbsd-x64": "npm:0.25.12" - "@esbuild/openbsd-arm64": "npm:0.25.12" - "@esbuild/openbsd-x64": "npm:0.25.12" - "@esbuild/openharmony-arm64": "npm:0.25.12" - "@esbuild/sunos-x64": "npm:0.25.12" - "@esbuild/win32-arm64": "npm:0.25.12" - "@esbuild/win32-ia32": "npm:0.25.12" - "@esbuild/win32-x64": "npm:0.25.12" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b - languageName: node - linkType: hard - -"escalade@npm:^3.1.1, escalade@npm:^3.2.0": - version: 3.2.0 - resolution: "escalade@npm:3.2.0" - checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 - languageName: node - linkType: hard - -"esprima@npm:^4.0.0": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 - languageName: node - linkType: hard - -"execa@npm:^5.0.0": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^6.0.0" - human-signals: "npm:^2.1.0" - is-stream: "npm:^2.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^4.0.1" - onetime: "npm:^5.1.2" - signal-exit: "npm:^3.0.3" - strip-final-newline: "npm:^2.0.0" - checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f - languageName: node - linkType: hard - -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: 10c0/71d2ad9b36bc25bb8b104b17e830b40a08989be7f7d100b13269aaae7c3784c3e6e1e88a797e9e87523993a25ba27c8958959a554535370672cfb4d824af8989 - languageName: node - linkType: hard - -"expect@npm:^29.0.0, expect@npm:^29.7.0": - version: 29.7.0 - resolution: "expect@npm:29.7.0" - dependencies: - "@jest/expect-utils": "npm:^29.7.0" - jest-get-type: "npm:^29.6.3" - jest-matcher-utils: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - checksum: 10c0/2eddeace66e68b8d8ee5f7be57f3014b19770caaf6815c7a08d131821da527fb8c8cb7b3dcd7c883d2d3d8d184206a4268984618032d1e4b16dc8d6596475d41 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.3 - resolution: "exponential-backoff@npm:3.1.3" - checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 - languageName: node - linkType: hard - -"external-editor@npm:^3.1.0": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.1.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.19.1 - resolution: "fastq@npm:1.19.1" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: "npm:2.1.1" - checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 - languageName: node - linkType: hard - -"fdir@npm:^6.5.0": - version: 6.5.0 - resolution: "fdir@npm:6.5.0" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f - languageName: node - linkType: hard - -"figures@npm:^1.7.0": - version: 1.7.0 - resolution: "figures@npm:1.7.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - object-assign: "npm:^4.1.0" - checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 - languageName: node - linkType: hard - -"figures@npm:^2.0.0": - version: 2.0.0 - resolution: "figures@npm:2.0.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 - languageName: node - linkType: hard - -"fireflies@workspace:.": - version: 0.0.0-use.local - resolution: "fireflies@workspace:." - dependencies: - "@types/jest": "npm:^29.5.5" - "@types/node": "npm:^24.9.2" - axios: "npm:^1.13.1" - dotenv: "npm:^17.2.3" - jest: "npm:^29.7.0" - ts-jest: "npm:^29.1.1" - tsx: "npm:^4.19.3" - twenty-sdk: "npm:0.1.3" - typescript: "npm:^5.9.3" - languageName: unknown - linkType: soft - -"follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.1 - resolution: "foreground-child@npm:3.3.1" - dependencies: - cross-spawn: "npm:^7.0.6" - signal-exit: "npm:^4.0.1" - checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"fs-extra@npm:^10.1.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-extra@npm:^11.2.0": - version: 11.3.2 - resolution: "fs-extra@npm:11.3.2" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/f5d629e1bb646d5dedb4d8b24c5aad3deb8cc1d5438979d6f237146cd10e113b49a949ae1b54212c2fbc98e2d0995f38009a9a1d0520f0287943335e65fe919b - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"get-stream@npm:^6.0.0": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 - languageName: node - linkType: hard - -"get-tsconfig@npm:^4.7.5": - version: 4.13.0 - resolution: "get-tsconfig@npm:4.13.0" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10c0/2c49ef8d3907047a107f229fd610386fe3b7fe9e42dfd6b42e7406499493cdda8c62e83e57e8d7a98125610774b9f604d3a0ff308d7f9de5c7ac6d1b07cb6036 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:^10.2.2": - version: 10.5.0 - resolution: "glob@npm:10.5.0" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/100705eddbde6323e7b35e1d1ac28bcb58322095bd8e63a7d0bef1a2cdafe0d0f7922a981b2b48369a4f8c1b077be5c171804534c3509dfe950dde15fbe6d828 - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"globby@npm:^11.0.3": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphql-sse@npm:^2.5.4": - version: 2.6.0 - resolution: "graphql-sse@npm:2.6.0" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 10c0/e05f0b5c8539d61e5ce34af8e0bb418c02bf922d6a7f9232a9abd53c77df5654684ca14f674ac771645c8fba9c37ce666c5d06f46eef54ea07e63653468065b0 - languageName: node - linkType: hard - -"graphql@npm:^16.6.0, graphql@npm:^16.8.1": - version: 16.12.0 - resolution: "graphql@npm:16.12.0" - checksum: 10c0/b6fffa4e8a4e4a9933ebe85e7470b346dbf49050c1a482fac5e03e4a1a7bed2ecd3a4c97e29f04457af929464bc5e4f2aac991090c2f320111eef26e902a5c75 - languageName: node - linkType: hard - -"handlebars@npm:^4.7.8": - version: 4.7.8 - resolution: "handlebars@npm:4.7.8" - dependencies: - minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.2" - source-map: "npm:^0.6.1" - uglify-js: "npm:^3.1.4" - wordwrap: "npm:^1.0.0" - dependenciesMeta: - uglify-js: - optional: true - bin: - handlebars: bin/handlebars - checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.2.0 - resolution: "http-cache-semantics@npm:4.2.0" - checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:4" - checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac - languageName: node - linkType: hard - -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a - languageName: node - linkType: hard - -"iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"import-local@npm:^3.0.2": - version: 3.2.0 - resolution: "import-local@npm:3.2.0" - dependencies: - pkg-dir: "npm:^4.2.0" - resolve-cwd: "npm:^3.0.0" - bin: - import-local-fixture: fixtures/cli.js - checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"indent-string@npm:^3.0.0": - version: 3.2.0 - resolution: "indent-string@npm:3.2.0" - checksum: 10c0/91b6d61621d24944c5c4d365d6f1ff4a490264ccaf1162a602faa0d323e69231db2180ad4ccc092c2f49cf8888cdb3da7b73e904cc0fdeec40d0bfb41ceb9478 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"inquirer@npm:^10.0.0": - version: 10.2.2 - resolution: "inquirer@npm:10.2.2" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/prompts": "npm:^5.5.0" - "@inquirer/type": "npm:^1.5.3" - "@types/mute-stream": "npm:^0.0.4" - ansi-escapes: "npm:^4.3.2" - mute-stream: "npm:^1.0.0" - run-async: "npm:^3.0.0" - rxjs: "npm:^7.8.1" - checksum: 10c0/09bcff887a968ce29d3a8cba749ef35b6531b7fb7bf5b28aaf3e10aebae07af2494dd3ec67ae6f1dabe76da1064cfe4514098d4c7658fcaf3fd480b2975d7163 - languageName: node - linkType: hard - -"ip-address@npm:^10.0.1": - version: 10.0.1 - resolution: "ip-address@npm:10.0.1" - checksum: 10c0/1634d79dae18394004775cb6d699dc46b7c23df6d2083164025a2b15240c1164fccde53d0e08bd5ee4fc53913d033ab6b5e395a809ad4b956a940c446e948843 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 - languageName: node - linkType: hard - -"is-core-module@npm:^2.16.1": - version: 2.16.1 - resolution: "is-core-module@npm:2.16.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: "npm:^1.0.0" - checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-observable@npm:^1.1.0": - version: 1.1.0 - resolution: "is-observable@npm:1.1.0" - dependencies: - symbol-observable: "npm:^1.1.0" - checksum: 10c0/cf3166b0822f70ad06e7851e09430166ce658349d54aaa64c93a03320420b9285735821b23164bdce741ff83a86730ac3e53035ce4e2511ed843dbff4105bfa2 - languageName: node - linkType: hard - -"is-promise@npm:^2.1.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": "npm:^7.12.3" - "@babel/parser": "npm:^7.14.7" - "@istanbuljs/schema": "npm:^0.1.2" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^6.3.0" - checksum: 10c0/8a1bdf3e377dcc0d33ec32fe2b6ecacdb1e4358fd0eb923d4326bb11c67622c0ceb99600a680f3dad5d29c66fc1991306081e339b4d43d0b8a2ab2e1d910a6ee - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.0": - version: 6.0.3 - resolution: "istanbul-lib-instrument@npm:6.0.3" - dependencies: - "@babel/core": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@istanbuljs/schema": "npm:^0.1.3" - istanbul-lib-coverage: "npm:^3.2.0" - semver: "npm:^7.5.4" - checksum: 10c0/a1894e060dd2a3b9f046ffdc87b44c00a35516f5e6b7baf4910369acca79e506fc5323a816f811ae23d82334b38e3ddeb8b3b331bd2c860540793b59a8689128 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: "npm:^3.0.0" - make-dir: "npm:^4.0.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: "npm:^4.1.1" - istanbul-lib-coverage: "npm:^3.0.0" - source-map: "npm:^0.6.1" - checksum: 10c0/19e4cc405016f2c906dff271a76715b3e881fa9faeb3f09a86cb99b8512b3a5ed19cadfe0b54c17ca0e54c1142c9c6de9330d65506e35873994e06634eebeb66 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.2.0 - resolution: "istanbul-reports@npm:3.2.0" - dependencies: - html-escaper: "npm:^2.0.0" - istanbul-lib-report: "npm:^3.0.0" - checksum: 10c0/d596317cfd9c22e1394f22a8d8ba0303d2074fe2e971887b32d870e4b33f8464b10f8ccbe6847808f7db485f084eba09e6c2ed706b3a978e4b52f07085b8f9bc - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"jest-changed-files@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-changed-files@npm:29.7.0" - dependencies: - execa: "npm:^5.0.0" - jest-util: "npm:^29.7.0" - p-limit: "npm:^3.1.0" - checksum: 10c0/e071384d9e2f6bb462231ac53f29bff86f0e12394c1b49ccafbad225ce2ab7da226279a8a94f421949920bef9be7ef574fd86aee22e8adfa149be73554ab828b - languageName: node - linkType: hard - -"jest-circus@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-circus@npm:29.7.0" - dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/expect": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - co: "npm:^4.6.0" - dedent: "npm:^1.0.0" - is-generator-fn: "npm:^2.0.0" - jest-each: "npm:^29.7.0" - jest-matcher-utils: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-runtime: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - p-limit: "npm:^3.1.0" - pretty-format: "npm:^29.7.0" - pure-rand: "npm:^6.0.0" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10c0/8d15344cf7a9f14e926f0deed64ed190c7a4fa1ed1acfcd81e4cc094d3cc5bf7902ebb7b874edc98ada4185688f90c91e1747e0dfd7ac12463b097968ae74b5e - languageName: node - linkType: hard - -"jest-cli@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-cli@npm:29.7.0" - dependencies: - "@jest/core": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - chalk: "npm:^4.0.0" - create-jest: "npm:^29.7.0" - exit: "npm:^0.1.2" - import-local: "npm:^3.0.2" - jest-config: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - yargs: "npm:^17.3.1" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 10c0/a658fd55050d4075d65c1066364595962ead7661711495cfa1dfeecf3d6d0a8ffec532f3dbd8afbb3e172dd5fd2fb2e813c5e10256e7cf2fea766314942fb43a - languageName: node - linkType: hard - -"jest-config@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-config@npm:29.7.0" - dependencies: - "@babel/core": "npm:^7.11.6" - "@jest/test-sequencer": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - babel-jest: "npm:^29.7.0" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - deepmerge: "npm:^4.2.2" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - jest-circus: "npm:^29.7.0" - jest-environment-node: "npm:^29.7.0" - jest-get-type: "npm:^29.6.3" - jest-regex-util: "npm:^29.6.3" - jest-resolve: "npm:^29.7.0" - jest-runner: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - parse-json: "npm:^5.2.0" - pretty-format: "npm:^29.7.0" - slash: "npm:^3.0.0" - strip-json-comments: "npm:^3.1.1" - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: 10c0/bab23c2eda1fff06e0d104b00d6adfb1d1aabb7128441899c9bff2247bd26710b050a5364281ce8d52b46b499153bf7e3ee88b19831a8f3451f1477a0246a0f1 - languageName: node - linkType: hard - -"jest-diff@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: "npm:^4.0.0" - diff-sequences: "npm:^29.6.3" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 - languageName: node - linkType: hard - -"jest-docblock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-docblock@npm:29.7.0" - dependencies: - detect-newline: "npm:^3.0.0" - checksum: 10c0/d932a8272345cf6b6142bb70a2bb63e0856cc0093f082821577ea5bdf4643916a98744dfc992189d2b1417c38a11fa42466f6111526bc1fb81366f56410f3be9 - languageName: node - linkType: hard - -"jest-each@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-each@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - chalk: "npm:^4.0.0" - jest-get-type: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - pretty-format: "npm:^29.7.0" - checksum: 10c0/f7f9a90ebee80cc688e825feceb2613627826ac41ea76a366fa58e669c3b2403d364c7c0a74d862d469b103c843154f8456d3b1c02b487509a12afa8b59edbb4 - languageName: node - linkType: hard - -"jest-environment-node@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-node@npm:29.7.0" - dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/fake-timers": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - jest-mock: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - checksum: 10c0/61f04fec077f8b1b5c1a633e3612fc0c9aa79a0ab7b05600683428f1e01a4d35346c474bde6f439f9fcc1a4aa9a2861ff852d079a43ab64b02105d1004b2592b - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b - languageName: node - linkType: hard - -"jest-haste-map@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-haste-map@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - "@types/graceful-fs": "npm:^4.1.3" - "@types/node": "npm:*" - anymatch: "npm:^3.0.3" - fb-watchman: "npm:^2.0.0" - fsevents: "npm:^2.3.2" - graceful-fs: "npm:^4.2.9" - jest-regex-util: "npm:^29.6.3" - jest-util: "npm:^29.7.0" - jest-worker: "npm:^29.7.0" - micromatch: "npm:^4.0.4" - walker: "npm:^1.0.8" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/2683a8f29793c75a4728787662972fedd9267704c8f7ef9d84f2beed9a977f1cf5e998c07b6f36ba5603f53cb010c911fe8cd0ac9886e073fe28ca66beefd30c - languageName: node - linkType: hard - -"jest-leak-detector@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-leak-detector@npm:29.7.0" - dependencies: - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/71bb9f77fc489acb842a5c7be030f2b9acb18574dc9fb98b3100fc57d422b1abc55f08040884bd6e6dbf455047a62f7eaff12aa4058f7cbdc11558718ca6a395 - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-matcher-utils@npm:29.7.0" - dependencies: - chalk: "npm:^4.0.0" - jest-diff: "npm:^29.7.0" - jest-get-type: "npm:^29.6.3" - pretty-format: "npm:^29.7.0" - checksum: 10c0/0d0e70b28fa5c7d4dce701dc1f46ae0922102aadc24ed45d594dd9b7ae0a8a6ef8b216718d1ab79e451291217e05d4d49a82666e1a3cc2b428b75cd9c933244e - languageName: node - linkType: hard - -"jest-message-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-message-util@npm:29.7.0" - dependencies: - "@babel/code-frame": "npm:^7.12.13" - "@jest/types": "npm:^29.6.3" - "@types/stack-utils": "npm:^2.0.0" - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - micromatch: "npm:^4.0.4" - pretty-format: "npm:^29.7.0" - slash: "npm:^3.0.0" - stack-utils: "npm:^2.0.3" - checksum: 10c0/850ae35477f59f3e6f27efac5215f706296e2104af39232bb14e5403e067992afb5c015e87a9243ec4d9df38525ef1ca663af9f2f4766aa116f127247008bd22 - languageName: node - linkType: hard - -"jest-mock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-mock@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - jest-util: "npm:^29.7.0" - checksum: 10c0/7b9f8349ee87695a309fe15c46a74ab04c853369e5c40952d68061d9dc3159a0f0ed73e215f81b07ee97a9faaf10aebe5877a9d6255068a0977eae6a9ff1d5ac - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac - languageName: node - linkType: hard - -"jest-regex-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-regex-util@npm:29.6.3" - checksum: 10c0/4e33fb16c4f42111159cafe26397118dcfc4cf08bc178a67149fb05f45546a91928b820894572679d62559839d0992e21080a1527faad65daaae8743a5705a3b - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve-dependencies@npm:29.7.0" - dependencies: - jest-regex-util: "npm:^29.6.3" - jest-snapshot: "npm:^29.7.0" - checksum: 10c0/b6e9ad8ae5b6049474118ea6441dfddd385b6d1fc471db0136f7c8fbcfe97137a9665e4f837a9f49f15a29a1deb95a14439b7aec812f3f99d08f228464930f0d - languageName: node - linkType: hard - -"jest-resolve@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve@npm:29.7.0" - dependencies: - chalk: "npm:^4.0.0" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - jest-pnp-resolver: "npm:^1.2.2" - jest-util: "npm:^29.7.0" - jest-validate: "npm:^29.7.0" - resolve: "npm:^1.20.0" - resolve.exports: "npm:^2.0.0" - slash: "npm:^3.0.0" - checksum: 10c0/59da5c9c5b50563e959a45e09e2eace783d7f9ac0b5dcc6375dea4c0db938d2ebda97124c8161310082760e8ebbeff9f6b177c15ca2f57fb424f637a5d2adb47 - languageName: node - linkType: hard - -"jest-runner@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runner@npm:29.7.0" - dependencies: - "@jest/console": "npm:^29.7.0" - "@jest/environment": "npm:^29.7.0" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - emittery: "npm:^0.13.1" - graceful-fs: "npm:^4.2.9" - jest-docblock: "npm:^29.7.0" - jest-environment-node: "npm:^29.7.0" - jest-haste-map: "npm:^29.7.0" - jest-leak-detector: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-resolve: "npm:^29.7.0" - jest-runtime: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - jest-watcher: "npm:^29.7.0" - jest-worker: "npm:^29.7.0" - p-limit: "npm:^3.1.0" - source-map-support: "npm:0.5.13" - checksum: 10c0/2194b4531068d939f14c8d3274fe5938b77fa73126aedf9c09ec9dec57d13f22c72a3b5af01ac04f5c1cf2e28d0ac0b4a54212a61b05f10b5d6b47f2a1097bb4 - languageName: node - linkType: hard - -"jest-runtime@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runtime@npm:29.7.0" - dependencies: - "@jest/environment": "npm:^29.7.0" - "@jest/fake-timers": "npm:^29.7.0" - "@jest/globals": "npm:^29.7.0" - "@jest/source-map": "npm:^29.6.3" - "@jest/test-result": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - cjs-module-lexer: "npm:^1.0.0" - collect-v8-coverage: "npm:^1.0.0" - glob: "npm:^7.1.3" - graceful-fs: "npm:^4.2.9" - jest-haste-map: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-mock: "npm:^29.7.0" - jest-regex-util: "npm:^29.6.3" - jest-resolve: "npm:^29.7.0" - jest-snapshot: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - slash: "npm:^3.0.0" - strip-bom: "npm:^4.0.0" - checksum: 10c0/7cd89a1deda0bda7d0941835434e44f9d6b7bd50b5c5d9b0fc9a6c990b2d4d2cab59685ab3cb2850ed4cc37059f6de903af5a50565d7f7f1192a77d3fd6dd2a6 - languageName: node - linkType: hard - -"jest-snapshot@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-snapshot@npm:29.7.0" - dependencies: - "@babel/core": "npm:^7.11.6" - "@babel/generator": "npm:^7.7.2" - "@babel/plugin-syntax-jsx": "npm:^7.7.2" - "@babel/plugin-syntax-typescript": "npm:^7.7.2" - "@babel/types": "npm:^7.3.3" - "@jest/expect-utils": "npm:^29.7.0" - "@jest/transform": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - babel-preset-current-node-syntax: "npm:^1.0.0" - chalk: "npm:^4.0.0" - expect: "npm:^29.7.0" - graceful-fs: "npm:^4.2.9" - jest-diff: "npm:^29.7.0" - jest-get-type: "npm:^29.6.3" - jest-matcher-utils: "npm:^29.7.0" - jest-message-util: "npm:^29.7.0" - jest-util: "npm:^29.7.0" - natural-compare: "npm:^1.4.0" - pretty-format: "npm:^29.7.0" - semver: "npm:^7.5.3" - checksum: 10c0/6e9003c94ec58172b4a62864a91c0146513207bedf4e0a06e1e2ac70a4484088a2683e3a0538d8ea913bcfd53dc54a9b98a98cdfa562e7fe1d1339aeae1da570 - languageName: node - linkType: hard - -"jest-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-util@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - chalk: "npm:^4.0.0" - ci-info: "npm:^3.2.0" - graceful-fs: "npm:^4.2.9" - picomatch: "npm:^2.2.3" - checksum: 10c0/bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150 - languageName: node - linkType: hard - -"jest-validate@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-validate@npm:29.7.0" - dependencies: - "@jest/types": "npm:^29.6.3" - camelcase: "npm:^6.2.0" - chalk: "npm:^4.0.0" - jest-get-type: "npm:^29.6.3" - leven: "npm:^3.1.0" - pretty-format: "npm:^29.7.0" - checksum: 10c0/a20b930480c1ed68778c739f4739dce39423131bc070cd2505ddede762a5570a256212e9c2401b7ae9ba4d7b7c0803f03c5b8f1561c62348213aba18d9dbece2 - languageName: node - linkType: hard - -"jest-watcher@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-watcher@npm:29.7.0" - dependencies: - "@jest/test-result": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - "@types/node": "npm:*" - ansi-escapes: "npm:^4.2.1" - chalk: "npm:^4.0.0" - emittery: "npm:^0.13.1" - jest-util: "npm:^29.7.0" - string-length: "npm:^4.0.1" - checksum: 10c0/ec6c75030562fc8f8c727cb8f3b94e75d831fc718785abfc196e1f2a2ebc9a2e38744a15147170039628a853d77a3b695561ce850375ede3a4ee6037a2574567 - languageName: node - linkType: hard - -"jest-worker@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-worker@npm:29.7.0" - dependencies: - "@types/node": "npm:*" - jest-util: "npm:^29.7.0" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.0.0" - checksum: 10c0/5570a3a005b16f46c131968b8a5b56d291f9bbb85ff4217e31c80bd8a02e7de799e59a54b95ca28d5c302f248b54cbffde2d177c2f0f52ffcee7504c6eabf660 - languageName: node - linkType: hard - -"jest@npm:^29.7.0": - version: 29.7.0 - resolution: "jest@npm:29.7.0" - dependencies: - "@jest/core": "npm:^29.7.0" - "@jest/types": "npm:^29.6.3" - import-local: "npm:^3.0.2" - jest-cli: "npm:^29.7.0" - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 10c0/f40eb8171cf147c617cc6ada49d062fbb03b4da666cb8d39cdbfb739a7d75eea4c3ca150fb072d0d273dce0c753db4d0467d54906ad0293f59c54f9db4a09d8b - languageName: node - linkType: hard - -"js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"js-yaml@npm:^3.13.1": - version: 3.14.2 - resolution: "js-yaml@npm:3.14.2" - dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" - bin: - js-yaml: bin/js-yaml.js - checksum: 10c0/3261f25912f5dd76605e5993d0a126c2b6c346311885d3c483706cd722efe34f697ea0331f654ce27c00a42b426e524518ec89d65ed02ea47df8ad26dcc8ce69 - languageName: node - linkType: hard - -"jsesc@npm:^3.0.2": - version: 3.1.0 - resolution: "jsesc@npm:3.1.0" - bin: - jsesc: bin/jsesc - checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 - languageName: node - linkType: hard - -"json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c - languageName: node - linkType: hard - -"jsonc-parser@npm:^3.2.0": - version: 3.3.1 - resolution: "jsonc-parser@npm:3.3.1" - checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.2.0 - resolution: "jsonfile@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d - languageName: node - linkType: hard - -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: 10c0/cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b - languageName: node - linkType: hard - -"kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a - languageName: node - linkType: hard - -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d - languageName: node - linkType: hard - -"listr-silent-renderer@npm:^1.1.1": - version: 1.1.1 - resolution: "listr-silent-renderer@npm:1.1.1" - checksum: 10c0/a13e08ebf863516a757bce4887f05290070772113d89095e9f51a07cf0b11a43a7563a67ff3b287c752c08f6d781fdb2123b02957534e3e0675fb564f2a42e1b - languageName: node - linkType: hard - -"listr-update-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-update-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^1.1.3" - cli-truncate: "npm:^0.2.1" - elegant-spinner: "npm:^1.0.1" - figures: "npm:^1.7.0" - indent-string: "npm:^3.0.0" - log-symbols: "npm:^1.0.2" - log-update: "npm:^2.3.0" - strip-ansi: "npm:^3.0.1" - peerDependencies: - listr: ^0.14.2 - checksum: 10c0/8ade44bf3dc6146c8e0178000619439e8889792c4689b66be6ce82bd459f5fe462ecb34b05147fb206a8ad60e6d4e6f34c9f48038e18366f867fd972688b8edc - languageName: node - linkType: hard - -"listr-verbose-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-verbose-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^2.4.1" - cli-cursor: "npm:^2.1.0" - date-fns: "npm:^1.27.2" - figures: "npm:^2.0.0" - checksum: 10c0/041cd1e82da7054f27ae0a914e98b40d15faf9f950ef850578fc6241d3fff3c2d7158a4f6226006e566b4c47bf445be2d254dd1ce5c16569a3a5dcd575bec656 - languageName: node - linkType: hard - -"listr@npm:^0.14.3": - version: 0.14.3 - resolution: "listr@npm:0.14.3" - dependencies: - "@samverschueren/stream-to-observable": "npm:^0.3.0" - is-observable: "npm:^1.1.0" - is-promise: "npm:^2.1.0" - is-stream: "npm:^1.1.0" - listr-silent-renderer: "npm:^1.1.1" - listr-update-renderer: "npm:^0.5.0" - listr-verbose-renderer: "npm:^0.5.0" - p-map: "npm:^2.0.0" - rxjs: "npm:^6.3.3" - checksum: 10c0/753d518218c423f46bee8eeacccecadfd2e414ba9c0f602e7f85fe3f6fa18404dfab0812433aeda4683ee2548358488f597ac1a3d321196baec5d3149b200b10 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 - languageName: node - linkType: hard - -"lodash.camelcase@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.camelcase@npm:4.3.0" - checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 - languageName: node - linkType: hard - -"lodash.capitalize@npm:^4.2.1": - version: 4.2.1 - resolution: "lodash.capitalize@npm:4.2.1" - checksum: 10c0/b289326497c2e24d6b8afa2af2ca4e068ef6ef007ade36bfb6f70af77ce10ea3f090eeee947d5fdcf2db4bcfa4703c8c10a5857a2b39e308bddfd1d11ad35970 - languageName: node - linkType: hard - -"lodash.kebabcase@npm:^4.1.1": - version: 4.1.1 - resolution: "lodash.kebabcase@npm:4.1.1" - checksum: 10c0/da5d8f41dbb5bc723d4bf9203d5096ca8da804d6aec3d2b56457156ba6c8d999ff448d347ebd97490da853cb36696ea4da09a431499f1ee8deb17b094ecf4e33 - languageName: node - linkType: hard - -"lodash.memoize@npm:^4.1.2": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 - languageName: node - linkType: hard - -"lodash.startcase@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.startcase@npm:4.4.0" - checksum: 10c0/bd82aa87a45de8080e1c5ee61128c7aee77bf7f1d86f4ff94f4a6d7438fc9e15e5f03374b947be577a93804c8ad6241f0251beaf1452bf716064eeb657b3a9f0 - languageName: node - linkType: hard - -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"log-symbols@npm:^1.0.2": - version: 1.0.2 - resolution: "log-symbols@npm:1.0.2" - dependencies: - chalk: "npm:^1.0.0" - checksum: 10c0/c64e1fe41d0d043840f8b592d043b8607a836b846506f525a53d99d578561f02f97b2cba1d2b3c30bae5311d64b308d5a392a9930d252b906a9042fc2877da7a - languageName: node - linkType: hard - -"log-update@npm:^2.3.0": - version: 2.3.0 - resolution: "log-update@npm:2.3.0" - dependencies: - ansi-escapes: "npm:^3.0.0" - cli-cursor: "npm:^2.0.0" - wrap-ansi: "npm:^3.0.1" - checksum: 10c0/9bf21b138801ab4770a2bfa735161cf005b869360eaf5003a84ba64ddc5f5c3ce7217f4f1fa79d9c1f510d792213b2c9800327228e94df05859d19b716215d90 - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: "npm:^3.0.2" - checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 - languageName: node - linkType: hard - -"make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: "npm:^7.5.3" - checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 - languageName: node - linkType: hard - -"make-error@npm:^1.3.6": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f - languageName: node - linkType: hard - -"make-fetch-happen@npm:^14.0.3": - version: 14.0.3 - resolution: "make-fetch-happen@npm:14.0.3" - dependencies: - "@npmcli/agent": "npm:^3.0.0" - cacache: "npm:^19.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^4.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^5.0.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^12.0.0" - checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 - languageName: node - linkType: hard - -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: "npm:1.0.5" - checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mimic-fn@npm:^1.0.0": - version: 1.2.0 - resolution: "mimic-fn@npm:1.2.0" - checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 - languageName: node - linkType: hard - -"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed - languageName: node - linkType: hard - -"minimist@npm:^1.2.5, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^4.0.0": - version: 4.0.1 - resolution: "minipass-fetch@npm:4.0.1" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^3.0.1" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": - version: 3.1.0 - resolution: "minizlib@npm:3.1.0" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec - languageName: node - linkType: hard - -"mkdirp@npm:^0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 - languageName: node - linkType: hard - -"ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c - languageName: node - linkType: hard - -"native-fetch@npm:^4.0.2": - version: 4.0.2 - resolution: "native-fetch@npm:4.0.2" - peerDependencies: - undici: "*" - checksum: 10c0/e3b824721daaa628086d9dcd02e8eb12f0a6c5e13a1d182682bae238d80c9bbf3dfd6314a94692ebe20316aa354476804b4df148201d066b46fc552a5794cfab - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b - languageName: node - linkType: hard - -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 11.5.0 - resolution: "node-gyp@npm:11.5.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^14.0.3" - nopt: "npm:^8.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.4.3" - tinyglobby: "npm:^0.2.12" - which: "npm:^5.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/31ff49586991b38287bb15c3d529dd689cfc32f992eed9e6997b9d712d5d21fe818a8b1bbfe3b76a7e33765c20210c5713212f4aa329306a615b87d8a786da3a - languageName: node - linkType: hard - -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a - languageName: node - linkType: hard - -"node-releases@npm:^2.0.26": - version: 2.0.27 - resolution: "node-releases@npm:2.0.27" - checksum: 10c0/f1e6583b7833ea81880627748d28a3a7ff5703d5409328c216ae57befbced10ce2c991bea86434e8ec39003bd017f70481e2e5f8c1f7e0a7663241f81d6e00e2 - languageName: node - linkType: hard - -"nopt@npm:^8.0.0": - version: 8.1.0 - resolution: "nopt@npm:8.1.0" - dependencies: - abbrev: "npm:^3.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: "npm:^1.0.1" - checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: "npm:^3.0.0" - checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac - languageName: node - linkType: hard - -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.0": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3": - version: 1.13.4 - resolution: "object-inspect@npm:1.13.4" - checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"onetime@npm:^2.0.0": - version: 2.0.1 - resolution: "onetime@npm:2.0.1" - dependencies: - mimic-fn: "npm:^1.0.0" - checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 - languageName: node - linkType: hard - -"onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: "npm:^2.1.0" - checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 - languageName: node - linkType: hard - -"p-limit@npm:3.1.0, p-limit@npm:^3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 - languageName: node - linkType: hard - -"p-map@npm:^2.0.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.3 - resolution: "p-map@npm:7.0.3" - checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b - languageName: node - linkType: hard - -"parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": "npm:^7.0.0" - error-ex: "npm:^1.3.1" - json-parse-even-better-errors: "npm:^2.3.0" - lines-and-columns: "npm:^1.1.6" - checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 - languageName: node - linkType: hard - -"pirates@npm:^4.0.4": - version: 4.0.7 - resolution: "pirates@npm:4.0.7" - checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a - languageName: node - linkType: hard - -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: "npm:^4.0.0" - checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 - languageName: node - linkType: hard - -"prettier@npm:^2.8.0": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a - languageName: node - linkType: hard - -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f - languageName: node - linkType: hard - -"proc-log@npm:^5.0.0": - version: 5.0.0 - resolution: "proc-log@npm:5.0.0" - checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: "npm:^3.0.3" - sisteransi: "npm:^1.0.5" - checksum: 10c0/16f1ac2977b19fe2cf53f8411cc98db7a3c8b115c479b2ca5c82b5527cd937aa405fa04f9a5960abeb9daef53191b53b4d13e35c1f5d50e8718c76917c5f1ea4 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"pure-rand@npm:^6.0.0": - version: 6.1.0 - resolution: "pure-rand@npm:6.1.0" - checksum: 10c0/1abe217897bf74dcb3a0c9aba3555fe975023147b48db540aa2faf507aee91c03bf54f6aef0eb2bf59cc259a16d06b28eca37f0dc426d94f4692aeff02fb0e65 - languageName: node - linkType: hard - -"qs@npm:^6.11.0": - version: 6.14.0 - resolution: "qs@npm:6.14.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"react-is@npm:^18.0.0": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 - languageName: node - linkType: hard - -"readdirp@npm:^4.0.1": - version: 4.1.2 - resolution: "readdirp@npm:4.1.2" - checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: "npm:^5.0.0" - checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab - languageName: node - linkType: hard - -"resolve.exports@npm:^2.0.0": - version: 2.0.3 - resolution: "resolve.exports@npm:2.0.3" - checksum: 10c0/1ade1493f4642a6267d0a5e68faeac20b3d220f18c28b140343feb83694d8fed7a286852aef43689d16042c61e2ddb270be6578ad4a13990769e12065191200d - languageName: node - linkType: hard - -"resolve@npm:^1.20.0": - version: 1.22.11 - resolution: "resolve@npm:1.22.11" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": - version: 1.22.11 - resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 - languageName: node - linkType: hard - -"restore-cursor@npm:^2.0.0": - version: 2.0.0 - resolution: "restore-cursor@npm:2.0.0" - dependencies: - onetime: "npm:^2.0.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.1.0 - resolution: "reusify@npm:1.1.0" - checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa - languageName: node - linkType: hard - -"rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 - languageName: node - linkType: hard - -"run-async@npm:^3.0.0": - version: 3.0.0 - resolution: "run-async@npm:3.0.0" - checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"rxjs@npm:^6.3.3": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: "npm:^1.9.0" - checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe - languageName: node - linkType: hard - -"rxjs@npm:^7.8.1": - version: 7.8.2 - resolution: "rxjs@npm:7.8.2" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.7.3": - version: 7.7.3 - resolution: "semver@npm:7.7.3" - bin: - semver: bin/semver.js - checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - side-channel-map: "npm:^1.0.1" - checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 - languageName: node - linkType: hard - -"side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - side-channel-list: "npm:^1.0.0" - side-channel-map: "npm:^1.0.1" - side-channel-weakmap: "npm:^1.0.2" - checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: 10c0/230ac975cca485b7f6fe2b96a711aa62a6a26ead3e6fb8ba17c5a00d61b8bed0d7adc21f5626b70d7c33c62ff4e63933017a6462942c719d1980bb0b1207ad46 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - -"slice-ansi@npm:0.0.4": - version: 0.0.4 - resolution: "slice-ansi@npm:0.0.4" - checksum: 10c0/997d4cc73e34aa8c0f60bdb71701b16c062cc4acd7a95e3b10e8c05d790eb5e735d9b470270dc6f443b1ba21492db7ceb849d5c93011d1256061bf7ed7216c7a - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.7 - resolution: "socks@npm:2.8.7" - dependencies: - ip-address: "npm:^10.0.1" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2 - languageName: node - linkType: hard - -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: "npm:^1.0.0" - source-map: "npm:^0.6.0" - checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e - languageName: node - linkType: hard - -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 - languageName: node - linkType: hard - -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb - languageName: node - linkType: hard - -"ssri@npm:^12.0.0": - version: 12.0.0 - resolution: "ssri@npm:12.0.0" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: "npm:^2.0.0" - checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a - languageName: node - linkType: hard - -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: "npm:^1.0.2" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: "npm:^1.0.0" - is-fullwidth-code-point: "npm:^1.0.0" - strip-ansi: "npm:^3.0.0" - checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e - languageName: node - linkType: hard - -"string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: "npm:^3.0.0" - checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.2 - resolution: "strip-ansi@npm:7.1.2" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/0d6d7a023de33368fd042aab0bf48f4f4077abdfd60e5393e73c7c411e85e1b3a83507c11af2e656188511475776215df9ca589b4da2295c9455cc399ce1858b - languageName: node - linkType: hard - -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd - languageName: node - linkType: hard - -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 - languageName: node - linkType: hard - -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - -"symbol-observable@npm:^1.1.0": - version: 1.2.0 - resolution: "symbol-observable@npm:1.2.0" - checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc - languageName: node - linkType: hard - -"tar@npm:^7.4.3": - version: 7.5.2 - resolution: "tar@npm:7.5.2" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.1.0" - yallist: "npm:^5.0.0" - checksum: 10c0/a7d8b801139b52f93a7e34830db0de54c5aa45487c7cb551f6f3d44a112c67f1cb8ffdae856b05fd4f17b1749911f1c26f1e3a23bbe0279e17fd96077f13f467 - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": "npm:^0.1.2" - glob: "npm:^7.1.4" - minimatch: "npm:^3.0.4" - checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.12": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" - dependencies: - fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.3" - checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 - languageName: node - linkType: hard - -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"ts-jest@npm:^29.1.1": - version: 29.4.5 - resolution: "ts-jest@npm:29.4.5" - dependencies: - bs-logger: "npm:^0.2.6" - fast-json-stable-stringify: "npm:^2.1.0" - handlebars: "npm:^4.7.8" - json5: "npm:^2.2.3" - lodash.memoize: "npm:^4.1.2" - make-error: "npm:^1.3.6" - semver: "npm:^7.7.3" - type-fest: "npm:^4.41.0" - yargs-parser: "npm:^21.1.1" - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/transform": ^29.0.0 || ^30.0.0 - "@jest/types": ^29.0.0 || ^30.0.0 - babel-jest: ^29.0.0 || ^30.0.0 - jest: ^29.0.0 || ^30.0.0 - jest-util: ^29.0.0 || ^30.0.0 - typescript: ">=4.3 <6" - peerDependenciesMeta: - "@babel/core": - optional: true - "@jest/transform": - optional: true - "@jest/types": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - jest-util: - optional: true - bin: - ts-jest: cli.js - checksum: 10c0/789f00666ba785ac425606d42601cbdc03015e46f228a0b333f06c6658d80865819bae0ddd59c762285352d2b14d0aa50912574ec699ba6369ddb0d400a49ac0 - languageName: node - linkType: hard - -"tslib@npm:^1.9.0": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - -"tslib@npm:^2.1.0, tslib@npm:^2.4.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"tsx@npm:^4.19.3": - version: 4.20.6 - resolution: "tsx@npm:4.20.6" - dependencies: - esbuild: "npm:~0.25.0" - fsevents: "npm:~2.3.3" - get-tsconfig: "npm:^4.7.5" - dependenciesMeta: - fsevents: - optional: true - bin: - tsx: dist/cli.mjs - checksum: 10c0/07757a9bf62c271e0a00869b2008c5f2d6e648766536e4faf27d9d8027b7cde1ac8e4871f4bb570c99388bcee0018e6869dad98c07df809b8052f9c549cd216f - languageName: node - linkType: hard - -"twenty-sdk@npm:0.1.3": - version: 0.1.3 - resolution: "twenty-sdk@npm:0.1.3" - dependencies: - "@genql/cli": "npm:^3.0.3" - axios: "npm:^1.6.0" - chalk: "npm:^5.3.0" - chokidar: "npm:^4.0.0" - commander: "npm:^12.0.0" - dotenv: "npm:^16.4.0" - fs-extra: "npm:^11.2.0" - graphql: "npm:^16.8.1" - graphql-sse: "npm:^2.5.4" - inquirer: "npm:^10.0.0" - jsonc-parser: "npm:^3.2.0" - lodash.camelcase: "npm:^4.3.0" - lodash.capitalize: "npm:^4.2.1" - lodash.kebabcase: "npm:^4.1.1" - lodash.startcase: "npm:^4.4.0" - typescript: "npm:^5.9.2" - uuid: "npm:^13.0.0" - bin: - twenty: dist/cli.cjs - checksum: 10c0/bb7a43331c61d34e250c7850e1746e6aac09fa8c552e0e19598b8ad44f56e3a9d51dc985d07da4c205ed179f49ba1ede52c6a9ed8be002689f70b571d1ac9c6d - languageName: node - linkType: hard - -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 - languageName: node - linkType: hard - -"type-fest@npm:^4.41.0": - version: 4.41.0 - resolution: "type-fest@npm:4.41.0" - checksum: 10c0/f5ca697797ed5e88d33ac8f1fec21921839871f808dc59345c9cf67345bfb958ce41bd821165dbf3ae591cedec2bf6fe8882098dfdd8dc54320b859711a2c1e4 - languageName: node - linkType: hard - -"typescript@npm:^5.9.2, typescript@npm:^5.9.3": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 - languageName: node - linkType: hard - -"uglify-js@npm:^3.1.4": - version: 3.19.3 - resolution: "uglify-js@npm:3.19.3" - bin: - uglifyjs: bin/uglifyjs - checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 - languageName: node - linkType: hard - -"undici-types@npm:~6.21.0": - version: 6.21.0 - resolution: "undici-types@npm:6.21.0" - checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"undici@npm:^5.18.0": - version: 5.29.0 - resolution: "undici@npm:5.29.0" - dependencies: - "@fastify/busboy": "npm:^2.0.0" - checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b - languageName: node - linkType: hard - -"unique-filename@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-filename@npm:4.0.0" - dependencies: - unique-slug: "npm:^5.0.0" - checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc - languageName: node - linkType: hard - -"unique-slug@npm:^5.0.0": - version: 5.0.0 - resolution: "unique-slug@npm:5.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unixify@npm:^1.0.0": - version: 1.0.0 - resolution: "unixify@npm:1.0.0" - dependencies: - normalize-path: "npm:^2.1.1" - checksum: 10c0/8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.4": - version: 1.1.4 - resolution: "update-browserslist-db@npm:1.1.4" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/db0c9aaecf1258a6acda5e937fc27a7996ccca7a7580a1b4aa8bba6a9b0e283e5e65c49ebbd74ec29288ef083f1b88d4da13e3d4d326c1e5fc55bf72d7390702 - languageName: node - linkType: hard - -"uuid@npm:^13.0.0": - version: 13.0.0 - resolution: "uuid@npm:13.0.0" - bin: - uuid: dist-node/bin/uuid - checksum: 10c0/950e4c18d57fef6c69675344f5700a08af21e26b9eff2bf2180427564297368c538ea11ac9fb2e6528b17fc3966a9fd2c5049361b0b63c7d654f3c550c9b3d67 - languageName: node - linkType: hard - -"v8-to-istanbul@npm:^9.0.1": - version: 9.3.0 - resolution: "v8-to-istanbul@npm:9.3.0" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.12" - "@types/istanbul-lib-coverage": "npm:^2.0.1" - convert-source-map: "npm:^2.0.0" - checksum: 10c0/968bcf1c7c88c04df1ffb463c179558a2ec17aa49e49376120504958239d9e9dad5281aa05f2a78542b8557f2be0b0b4c325710262f3b838b40d703d5ed30c23 - languageName: node - linkType: hard - -"value-or-promise@npm:^1.0.12": - version: 1.0.12 - resolution: "value-or-promise@npm:1.0.12" - checksum: 10c0/b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 - languageName: node - linkType: hard - -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: "npm:1.0.12" - checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^5.0.0": - version: 5.0.0 - resolution: "which@npm:5.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b - languageName: node - linkType: hard - -"wordwrap@npm:^1.0.0": - version: 1.0.0 - resolution: "wordwrap@npm:1.0.0" - checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "wrap-ansi@npm:3.0.1" - dependencies: - string-width: "npm:^2.1.1" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/ad6fed8f242c26755badaf452da154122d0d862f8b7aab56e758466857f230efafdc5fbffca026650b947ac3fc0eb563df5c05b9e2190a52a4a68f4eef3d4555 - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"write-file-atomic@npm:^4.0.2": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: "npm:^0.1.4" - signal-exit: "npm:^3.0.7" - checksum: 10c0/a2c282c95ef5d8e1c27b335ae897b5eca00e85590d92a3fd69a437919b7b93ff36a69ea04145da55829d2164e724bc62202cdb5f4b208b425aba0807889375c7 - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 - languageName: node - linkType: hard - -"yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 - languageName: node - linkType: hard - -"yargs@npm:^15.3.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: "npm:^6.0.0" - decamelize: "npm:^1.2.0" - find-up: "npm:^4.1.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^4.2.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^18.1.2" - checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d - languageName: node - linkType: hard - -"yargs@npm:^17.3.1": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: "npm:^8.0.1" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.3" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^21.1.1" - checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard - -"yoctocolors-cjs@npm:^2.1.2": - version: 2.1.3 - resolution: "yoctocolors-cjs@npm:2.1.3" - checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/last-email-interaction/.gitignore b/packages/twenty-apps/community/last-email-interaction/.gitignore deleted file mode 100644 index 6cd0610624..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.* -.yarn - -# codegen -generated - -# testing -/coverage - -# dev -/dist/ - -.twenty - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# env files (can opt-in for committing if needed) -.env* - -# typescript -*.tsbuildinfo -*.d.ts diff --git a/packages/twenty-apps/community/last-email-interaction/.nvmrc b/packages/twenty-apps/community/last-email-interaction/.nvmrc deleted file mode 100644 index 341cb50613..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -24.5.0 diff --git a/packages/twenty-apps/community/last-email-interaction/.oxlintrc.json b/packages/twenty-apps/community/last-email-interaction/.oxlintrc.json deleted file mode 100644 index 87c62c5183..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/.oxlintrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["typescript"], - "categories": { - "correctness": "off" - }, - "ignorePatterns": ["node_modules", "dist"], - "rules": { - "no-unused-vars": "off", - - "typescript/no-unused-vars": [ - "warn", - { - "argsIgnorePattern": "^_" - } - ], - "typescript/no-explicit-any": "off" - } -} diff --git a/packages/twenty-apps/community/last-email-interaction/.yarnrc.yml b/packages/twenty-apps/community/last-email-interaction/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/last-email-interaction/README.md b/packages/twenty-apps/community/last-email-interaction/README.md deleted file mode 100644 index 51eb00bfbf..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Last email interaction - -Updates Last interaction and Interaction status fields based on last email date - -## Setup -Add and synchronize app -```bash -cd packages/twenty-apps/community/last-email-interaction -yarn twenty remote add -yarn twenty install -``` - -## Flow -- Extracts the datetime of fetched message and calculates the last interaction status -- Fetches all users and companies connected to the message and updates their Last interaction and Interaction status fields - -## Notes -- Upon install, creates fields to Person and Company objects -- Every day at midnight app goes through all companies and people records and updates their Interaction status based on Last interaction date \ No newline at end of file diff --git a/packages/twenty-apps/community/last-email-interaction/package.json b/packages/twenty-apps/community/last-email-interaction/package.json deleted file mode 100644 index ad7da562d0..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "last-email-interaction", - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "dependencies": { - "axios": "1.14.0", - "twenty-sdk": "0.8.0" - }, - "scripts": { - "twenty": "twenty", - "lint": "oxlint -c .oxlintrc.json .", - "lint:fix": "oxlint --fix -c .oxlintrc.json .", - "test": "vitest run", - "test:watch": "vitest" - }, - "devDependencies": { - "@types/node": "^24.7.2", - "@types/react": "^18.2.0", - "oxlint": "^0.16.0", - "react": "^18.2.0", - "typescript": "^5.9.3", - "vite-tsconfig-paths": "^4.2.1", - "vitest": "^3.1.1" - } -} diff --git a/packages/twenty-apps/community/last-email-interaction/src/application.config.ts b/packages/twenty-apps/community/last-email-interaction/src/application.config.ts deleted file mode 100644 index c94f557783..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/application.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineApplication } from 'twenty-sdk/define'; - -export default defineApplication({ - universalIdentifier: '718ed9ab-53fc-49c8-8deb-0cff78ecf0d2', - displayName: 'Last email interaction', - description: - 'Updates Last interaction and Interaction status fields based on last received email', - icon: "IconMailFast", - defaultRoleUniversalIdentifier: '7a66af97-5056-45b2-96a9-c89f0fd181d1', -}); diff --git a/packages/twenty-apps/community/last-email-interaction/src/fields/company-interaction-status.ts b/packages/twenty-apps/community/last-email-interaction/src/fields/company-interaction-status.ts deleted file mode 100644 index 0cc3619a0f..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/fields/company-interaction-status.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { defineField, FieldType, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; - -export default defineField({ - universalIdentifier: '9378751e-c23b-4e84-887d-2905cb8359b4', - name: 'interactionStatus', - label: 'Interaction status', - type: FieldType.SELECT, - objectUniversalIdentifier: - STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier, - description: 'Indicates the health of relation', - options: [ - { - id: '39d54a6b-5a0e-4209-9a59-2a2d7b8c462b', - color: 'green', - label: 'Recent', - value: 'RECENT', - position: 1, - }, - { - id: '7377d6c5-a75c-453e-a1a1-63fb9cba4e26', - color: 'yellow', - label: 'Active', - value: 'ACTIVE', - position: 2, - }, - { - id: 'a8b99246-237f-4715-b21f-94a3ae14994e', - color: 'sky', - label: 'Cooling', - value: 'COOLING', - position: 3, - }, - { - id: '1f05d528-eaab-4639-aba1-328050a87220', - color: 'gray', - label: 'Dormant', - value: 'DORMANT', - position: 4, - }, - ], -}); diff --git a/packages/twenty-apps/community/last-email-interaction/src/fields/company-last-interaction.ts b/packages/twenty-apps/community/last-email-interaction/src/fields/company-last-interaction.ts deleted file mode 100644 index fb8ad312a0..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/fields/company-last-interaction.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineField, FieldType, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; - -export default defineField({ - universalIdentifier: '2f195c4c-1db1-4bbe-80b6-25c2f63168b0', - name: 'lastInteraction', - label: 'Last interaction', - type: FieldType.DATE_TIME, - objectUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier, - description: 'Date when the last interaction happened', -}); diff --git a/packages/twenty-apps/community/last-email-interaction/src/fields/person-interaction-status.ts b/packages/twenty-apps/community/last-email-interaction/src/fields/person-interaction-status.ts deleted file mode 100644 index 4c479f9708..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/fields/person-interaction-status.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { defineField, FieldType, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; - -export default defineField({ - universalIdentifier: 'fa342e26-9742-4db8-85b4-4d78ba18482f', - name: 'interactionStatus', - label: 'Interaction status', - type: FieldType.SELECT, - objectUniversalIdentifier: - STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier, - description: 'Indicates the health of relation', - options: [ - { - id: '1dfbfa99-35fb-43af-8c14-74e682a8121b', - color: 'green', - label: 'Recent', - value: 'RECENT', - position: 1, - }, - { - id: '955788e8-6d64-45ba-80ea-a1a5446a0ae7', - color: 'yellow', - label: 'Active', - value: 'ACTIVE', - position: 2, - }, - { - id: '7b84ca72-fac5-4c6d-ab08-b148e4b3efdf', - color: 'sky', - label: 'Cooling', - value: 'COOLING', - position: 3, - }, - { - id: '04dea3e5-ec26-41cf-b23f-37abab67827a', - color: 'gray', - label: 'Dormant', - value: 'DORMANT', - position: 4, - }, - ], -}); diff --git a/packages/twenty-apps/community/last-email-interaction/src/fields/person-last-interaction.ts b/packages/twenty-apps/community/last-email-interaction/src/fields/person-last-interaction.ts deleted file mode 100644 index 979725dd71..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/fields/person-last-interaction.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { defineField, FieldType, STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; - -export default defineField({ - universalIdentifier: 'bec14de7-6683-4784-91ba-62d83b5f30f7', - name: 'lastInteraction', - label: 'Last interaction', - type: FieldType.DATE_TIME, - objectUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier, - description: 'Date when the last interaction happened', -}); diff --git a/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-cron-job.ts b/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-cron-job.ts deleted file mode 100644 index df0cb70e4b..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-cron-job.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { defineLogicFunction } from 'twenty-sdk/define'; -import { CoreApiClient } from 'twenty-client-sdk/core'; -import { calculateStatus } from '../shared/calculate-status'; - -const fetchAllPeople = async () => { - const client = new CoreApiClient(); - const result = await client.query({ - people: { - __args: { - filter: { - /* - lastInteraction: { - is: 'NOT_NULL', - }, - */ - }, - }, - edges: { - node: { - id: true, - lastInteraction: true, - interactionStatus: true, - }, - }, - }, - }); - if (!result.people) { - throw new Error('Could not find any people'); - } - return result.people.edges; -} - -const fetchAllCompanies = async () => { - const client = new CoreApiClient(); - const result = await client.query({ - companies: { - __args: { - filter: { - /* how to fetch fields added in fields folder? - lastInteraction: { - is: 'NOT_NULL', - }, - */ - }, - }, - edges: { - node: { - id: true, - lastInteraction: true, - interactionStatus: true, - }, - }, - }, - }); - if (!result.companies) { - throw new Error('Could not find any companies'); - } - return result.companies.edges; -} - -const updateCompany = async ( - companyId: string, - updateData: Record, -) => { - const client = new CoreApiClient(); - const result = await client.mutation({ - updateCompany: { - __args: { - id: companyId, - data: updateData, - }, - id: true, - }, - }); - if (!result.updateCompany) { - throw new Error(`Failed to update company ${companyId}`); - } -}; - -const updatePerson = async ( - personId: string, - updateData: Record, -) => { - const client = new CoreApiClient(); - const result = await client.mutation({ - updatePerson: { - __args: { - id: personId, - data: updateData, - }, - id: true, - }, - }); - if (!result.updatePerson) { - throw new Error(`Failed to update person ${personId}`); - } -}; - -const handler = async () => { - const people = await fetchAllPeople(); - for (const person of people) { - const interactionStatus = calculateStatus(person.node.lastInteraction as string); - if (interactionStatus !== person.node.interactionStatus) { - await updatePerson(person.node.id, {interactionStatus: interactionStatus}); - } - } - const companies = await fetchAllCompanies(); - for (const company of companies) { - const interactionStatus = calculateStatus(company.node.lastInteraction as string); - if (interactionStatus !== company.node.interactionStatus) { - await updateCompany(company.node.id, {interactionStatus: interactionStatus}); - } - } -}; - -export default defineLogicFunction({ - universalIdentifier: 'c79f1f30-f369-4264-9e5b-c183577bc709', - name: 'on-cron-job', - description: - 'Runs daily at midnight and updates all companies and people with correct interaction status', - timeoutSeconds: 5, - handler, - cronTriggerSettings: { - pattern: '0 0 * * *', // runs daily at midnight - }, -}); diff --git a/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-message-created.ts b/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-message-created.ts deleted file mode 100644 index faaf31864a..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-message-created.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { DatabaseEventPayload, defineLogicFunction, ObjectRecordCreateEvent } from 'twenty-sdk/define'; -import { CoreApiClient } from 'twenty-client-sdk/core'; -import { calculateStatus } from '../shared/calculate-status'; - - -const fetchMessageParticipants = async (messageId: string) => { - const client = new CoreApiClient(); - const result = await client.query({ - messageParticipants: { - __args: { - filter: { - messageId: { - eq: messageId, - }, - }, - }, - edges: { - node: { - personId: true, - }, - }, - }, - }); - let people: string[] = []; - if (result.messageParticipants === undefined) { - return people; - } - for (const person of result.messageParticipants.edges) { - if (person.node.personId !== undefined) { - people.push(person.node.personId); - } - } - return people; -}; - -const fetchRelatedCompany = async (personId: string) => { - const client = new CoreApiClient(); - const result = await client.query({ - people: { - __args: { - filter: { - id: { - eq: personId, - }, - }, - }, - edges: { - node: { - company: { - id: true, - }, - }, - }, - }, - }); - if ( - result.people === undefined || - result.people.edges[0].node.company === undefined - ) { - throw new Error(`Failed to fetch related company of person ${personId}`); - } - return result.people.edges[0].node.company.id; -}; - -const updateCompany = async ( - companyId: string, - updateData: Record, -) => { - const client = new CoreApiClient(); - const result = await client.mutation({ - updateCompany: { - __args: { - id: companyId, - data: updateData, - }, - id: true, - }, - }); - if (!result.updateCompany) { - throw new Error(`Failed to update company ${companyId}`); - } -}; - -const updatePerson = async ( - personId: string, - updateData: Record, -) => { - const client = new CoreApiClient(); - const result = await client.mutation({ - updatePerson: { - __args: { - id: personId, - data: updateData, - }, - id: true, - }, - }); - if (!result.updatePerson) { - throw new Error(`Failed to update person ${personId}`); - } -}; - -type Message = { - receivedAt: string; -}; - -type MessageCreatedEvent = DatabaseEventPayload< - ObjectRecordCreateEvent ->; - -const handler = async ( - event: MessageCreatedEvent, -): Promise => { - const { properties, recordId } = event; - const interactionStatus = calculateStatus(properties.after.receivedAt); - const peopleIds: string[] = []; - peopleIds.push(...(await fetchMessageParticipants(recordId))); - const updateData = { - lastInteraction: properties.after.receivedAt, - interactionStatus: interactionStatus, - }; - for (const person of peopleIds) { - const companyId = await fetchRelatedCompany(person); - await updatePerson(person, updateData); - await updateCompany(companyId, updateData); - } - return {}; -}; - -export default defineLogicFunction({ - universalIdentifier: '543432c2-6509-4ee9-90ec-15ffb4d7abfc', - name: 'on-message-created', - description: 'Triggered when new message is created', - timeoutSeconds: 5, - handler, - databaseEventTriggerSettings: { - eventName: 'message.created', - }, -}); diff --git a/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-message-updated.ts b/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-message-updated.ts deleted file mode 100644 index dc10786f6a..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/logic-functions/on-message-updated.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { DatabaseEventPayload, defineLogicFunction, ObjectRecordCreateEvent } from 'twenty-sdk/define'; -import { CoreApiClient } from 'twenty-client-sdk/core'; -import { calculateStatus } from '../shared/calculate-status'; - - -const fetchMessageParticipants = async (messageId: string) => { - const client = new CoreApiClient(); - const result = await client.query({ - messageParticipants: { - __args: { - filter: { - messageId: { - eq: messageId, - }, - }, - }, - edges: { - node: { - personId: true, - }, - }, - }, - }); - let people: string[] = []; - if (result.messageParticipants === undefined) { - return people; - } - for (const person of result.messageParticipants.edges) { - if (person.node.personId !== undefined) { - people.push(person.node.personId); - } - } - return people; -}; - -const fetchRelatedCompany = async (personId: string) => { - const client = new CoreApiClient(); - const result = await client.query({ - people: { - __args: { - filter: { - id: { - eq: personId, - }, - }, - }, - edges: { - node: { - company: { - id: true, - }, - }, - }, - }, - }); - if ( - result.people === undefined || - result.people.edges[0].node.company === undefined - ) { - throw new Error(`Failed to fetch related company of person ${personId}`); - } - return result.people.edges[0].node.company.id; -}; - -const updateCompany = async ( - companyId: string, - updateData: Record, -) => { - const client = new CoreApiClient(); - const result = await client.mutation({ - updateCompany: { - __args: { - id: companyId, - data: updateData, - }, - id: true, - }, - }); - if (!result.updateCompany) { - throw new Error(`Failed to update company ${companyId}`); - } -}; - -const updatePerson = async ( - personId: string, - updateData: Record, -) => { - const client = new CoreApiClient(); - const result = await client.mutation({ - updatePerson: { - __args: { - id: personId, - data: updateData, - }, - id: true, - }, - }); - if (!result.updatePerson) { - throw new Error(`Failed to update person ${personId}`); - } -}; - -type Message = { - receivedAt: string; -}; - -type MessageCreatedEvent = DatabaseEventPayload< - ObjectRecordCreateEvent ->; - -const handler = async ( - event: MessageCreatedEvent, -): Promise => { - const { properties, recordId } = event; - const interactionStatus = calculateStatus(properties.after.receivedAt); - const peopleIds: string[] = []; - peopleIds.push(...(await fetchMessageParticipants(recordId))); - const updateData = { - lastInteraction: properties.after.receivedAt, - interactionStatus: interactionStatus, - }; - for (const person of peopleIds) { - const companyId = await fetchRelatedCompany(person); - await updatePerson(person, updateData); - await updateCompany(companyId, updateData); - } - return {}; -}; - -export default defineLogicFunction({ - universalIdentifier: '9bfcb3e4-9119-4b65-b6e9-d395d0764ce5', - name: 'on-message-updated', - description: 'Triggered when message is updated', - timeoutSeconds: 5, - handler, - databaseEventTriggerSettings: { - eventName: 'message.updated', - }, -}); diff --git a/packages/twenty-apps/community/last-email-interaction/src/shared/calculate-status.ts b/packages/twenty-apps/community/last-email-interaction/src/shared/calculate-status.ts deleted file mode 100644 index 7f1eafec49..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/src/shared/calculate-status.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const calculateStatus = (date: string) => { - const day = 1000 * 60 * 60 * 24; - const now = Date.now(); - const messageDate = Date.parse(date); - const deltaTime = now - messageDate; - return deltaTime < 7 * day - ? 'RECENT' - : deltaTime < 30 * day - ? 'ACTIVE' - : deltaTime < 90 * day - ? 'COOLING' - : 'DORMANT'; -}; \ No newline at end of file diff --git a/packages/twenty-apps/community/last-email-interaction/tsconfig.json b/packages/twenty-apps/community/last-email-interaction/tsconfig.json deleted file mode 100644 index 17d258af13..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/last-email-interaction/tsconfig.spec.json b/packages/twenty-apps/community/last-email-interaction/tsconfig.spec.json deleted file mode 100644 index 7dc5cee985..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/tsconfig.spec.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "composite": true, - "types": [ - "vitest/globals" - ] - }, - "include": [ - "src/**/*.ts", - "src/**/*.tsx" - ], - "exclude": [ - "node_modules", - "dist" - ] -} \ No newline at end of file diff --git a/packages/twenty-apps/community/last-email-interaction/yarn.lock b/packages/twenty-apps/community/last-email-interaction/yarn.lock deleted file mode 100644 index c972d92d2a..0000000000 --- a/packages/twenty-apps/community/last-email-interaction/yarn.lock +++ /dev/null @@ -1,4623 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@alcalzone/ansi-tokenize@npm:^0.2.4": - version: 0.2.5 - resolution: "@alcalzone/ansi-tokenize@npm:0.2.5" - dependencies: - ansi-styles: "npm:^6.2.1" - is-fullwidth-code-point: "npm:^5.0.0" - checksum: 10c0/dd8622288426b5b7dbf8b68d51d4b930cea591d0e3b9dbc3f523131464d78ac922c165fcb7ba5307f133d35dbcaa0e6648a1c3fb6a0dc2725546d6f867b70af4 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/aix-ppc64@npm:0.25.12" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/aix-ppc64@npm:0.27.7" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm64@npm:0.25.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-arm64@npm:0.27.7" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm@npm:0.25.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-arm@npm:0.27.7" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-x64@npm:0.25.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-x64@npm:0.27.7" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-arm64@npm:0.25.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/darwin-arm64@npm:0.27.7" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-x64@npm:0.25.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/darwin-x64@npm:0.27.7" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-arm64@npm:0.25.12" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/freebsd-arm64@npm:0.27.7" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-x64@npm:0.25.12" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/freebsd-x64@npm:0.27.7" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm64@npm:0.25.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-arm64@npm:0.27.7" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm@npm:0.25.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-arm@npm:0.27.7" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ia32@npm:0.25.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-ia32@npm:0.27.7" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-loong64@npm:0.25.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-loong64@npm:0.27.7" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-mips64el@npm:0.25.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-mips64el@npm:0.27.7" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ppc64@npm:0.25.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-ppc64@npm:0.27.7" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-riscv64@npm:0.25.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-riscv64@npm:0.27.7" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-s390x@npm:0.25.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-s390x@npm:0.27.7" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-x64@npm:0.25.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-x64@npm:0.27.7" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-arm64@npm:0.25.12" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/netbsd-arm64@npm:0.27.7" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-x64@npm:0.25.12" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/netbsd-x64@npm:0.27.7" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-arm64@npm:0.25.12" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openbsd-arm64@npm:0.27.7" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-x64@npm:0.25.12" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openbsd-x64@npm:0.27.7" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openharmony-arm64@npm:0.25.12" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openharmony-arm64@npm:0.27.7" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/sunos-x64@npm:0.25.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/sunos-x64@npm:0.27.7" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-arm64@npm:0.25.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-arm64@npm:0.27.7" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-ia32@npm:0.25.12" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-ia32@npm:0.27.7" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-x64@npm:0.25.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-x64@npm:0.27.7" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@fastify/busboy@npm:^2.0.0": - version: 2.1.1 - resolution: "@fastify/busboy@npm:2.1.1" - checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 - languageName: node - linkType: hard - -"@gar/promise-retry@npm:^1.0.0": - version: 1.0.3 - resolution: "@gar/promise-retry@npm:1.0.3" - checksum: 10c0/885b02c8b0d75b2d215da25f3b639158c4fbe8fefe0d79163304534b9a6d0710db4b7699f7cd3cc1a730792bff04cbe19f4850a62d3e105a663eaeec88f38332 - languageName: node - linkType: hard - -"@genql/cli@npm:^3.0.3": - version: 3.0.5 - resolution: "@genql/cli@npm:3.0.5" - dependencies: - "@graphql-tools/graphql-file-loader": "npm:^7.5.11" - "@graphql-tools/load": "npm:^7.8.6" - fs-extra: "npm:^10.1.0" - graphql: "npm:^16.6.0" - kleur: "npm:^4.1.5" - listr: "npm:^0.14.3" - lodash: "npm:^4.17.21" - mkdirp: "npm:^0.5.1" - native-fetch: "npm:^4.0.2" - prettier: "npm:^2.8.0" - qs: "npm:^6.11.0" - rimraf: "npm:^2.6.3" - undici: "npm:^5.18.0" - yargs: "npm:^15.3.1" - bin: - genql: dist/cli.js - checksum: 10c0/646d4da8986741a8f1b610bd8cfb5bc26cd9a856de671461e4ca87fb05443f37dd0edfb3b30ceaa34cd049077873afa07febfd4714dd2e0681fb07484e19a080 - languageName: node - linkType: hard - -"@genql/runtime@npm:^2.10.0": - version: 2.10.0 - resolution: "@genql/runtime@npm:2.10.0" - dependencies: - "@types/qs": "npm:^6.9.0" - "@types/ws": "npm:^6.0.1" - graphql-query-batcher: "npm:^1.0.1" - isomorphic-unfetch: "npm:^3.0.0" - lodash: "npm:^4.17.20" - subscriptions-transport-ws: "npm:^0.9.16" - tslib: "npm:^2.0.0" - utility-types: "npm:^3.10.0" - ws: "npm:^6.1.4" - zen-observable-ts: "npm:^0.8.21" - peerDependencies: - graphql: "*" - checksum: 10c0/e2a886c2469c933681e2b0ddd6a5b7f4cb12932251ba460e3cf2db4246817da79313ea4ba9769ec7cbe53ab9c1cb81ad8fcce6a969cd241185b79398d2a4f3c6 - languageName: node - linkType: hard - -"@graphql-tools/graphql-file-loader@npm:^7.5.11": - version: 7.5.17 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" - dependencies: - "@graphql-tools/import": "npm:6.7.18" - "@graphql-tools/utils": "npm:^9.2.1" - globby: "npm:^11.0.3" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/f737f14357731ad01da57755e1cf26ce375b475209d6ab7e4b656b56191a8979d2ab7dd5d1c54a1f11e04374f7a373fa95ea5ec6a001d0cef913ea208fadc65b - languageName: node - linkType: hard - -"@graphql-tools/import@npm:6.7.18": - version: 6.7.18 - resolution: "@graphql-tools/import@npm:6.7.18" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - resolve-from: "npm:5.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/d33e37a1879dd43ac2851c9bac2f2873c58bb3687f1c06e159760dbb5e540ef074d688df70cc6dbd3ee5de48d437878df8f65a7c65ae80bd025bf98f2d615732 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^7.8.6": - version: 7.8.14 - resolution: "@graphql-tools/load@npm:7.8.14" - dependencies: - "@graphql-tools/schema": "npm:^9.0.18" - "@graphql-tools/utils": "npm:^9.2.1" - p-limit: "npm:3.1.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/1fa036ac596ccf48f350aa545d108c173184d9b53247f9e21c0d4ba96c5cba4a0b44281f9154f122e1e8e9d9d6eab93a5b2618ca8a797969bde1e75c1d45e786 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:^8.4.1": - version: 8.4.2 - resolution: "@graphql-tools/merge@npm:8.4.2" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/2df55222b48e010e683572f456cf265aabae5748c59f7c1260c66dec9794b7a076d3706f04da969b77f0a32c7ccb4551fee30125931d3fe9c98a8806aae9a3f4 - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:^9.0.18": - version: 9.0.19 - resolution: "@graphql-tools/schema@npm:9.0.19" - dependencies: - "@graphql-tools/merge": "npm:^8.4.1" - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/42fd8ca8d3c8d60b583077c201980518482ff0cd5ed0c1f14bd9b835a2689ad41d02cbd3478f7d7dea7aec1227f7639fd5deb5e6360852a2e542b96b44bfb7a4 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^9.2.1": - version: 9.2.1 - resolution: "@graphql-tools/utils@npm:9.2.1" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.1.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/37a7bd7e14d28ff1bacc007dca84bc6cef2d7d7af9a547b5dbe52fcd134afddd6d4a7b2148cfbaff5ddba91a868453d597da77bd0457fb0be15928f916901606 - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:^3.1.1": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/94e9d75c1f178bbae8d874f5a9361708a3350c8def7eaeb6920f2c820e82403b7d4f55b3735856d68e145e86c85cbfe2adc444fdc25519cd51f108697e99346c - languageName: node - linkType: hard - -"@inquirer/checkbox@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/checkbox@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 - languageName: node - linkType: hard - -"@inquirer/confirm@npm:^3.2.0": - version: 3.2.0 - resolution: "@inquirer/confirm@npm:3.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/a2cbfc8ae9c880bba4cce1993f5c399fb0d12741fdd574917c87fceb40ece62ffa60e35aaadf4e62d7c114f54008e45aee5d6d90497bb62d493996c02725d243 - languageName: node - linkType: hard - -"@inquirer/core@npm:^9.1.0": - version: 9.2.1 - resolution: "@inquirer/core@npm:9.2.1" - dependencies: - "@inquirer/figures": "npm:^1.0.6" - "@inquirer/type": "npm:^2.0.0" - "@types/mute-stream": "npm:^0.0.4" - "@types/node": "npm:^22.5.5" - "@types/wrap-ansi": "npm:^3.0.0" - ansi-escapes: "npm:^4.3.2" - cli-width: "npm:^4.1.0" - mute-stream: "npm:^1.0.0" - signal-exit: "npm:^4.1.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^6.2.0" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 - languageName: node - linkType: hard - -"@inquirer/editor@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/editor@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - external-editor: "npm:^3.1.0" - checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee - languageName: node - linkType: hard - -"@inquirer/expand@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/expand@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 - languageName: node - linkType: hard - -"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6": - version: 1.0.15 - resolution: "@inquirer/figures@npm:1.0.15" - checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 - languageName: node - linkType: hard - -"@inquirer/input@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/input@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f - languageName: node - linkType: hard - -"@inquirer/number@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/number@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 - languageName: node - linkType: hard - -"@inquirer/password@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/password@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f - languageName: node - linkType: hard - -"@inquirer/prompts@npm:^5.5.0": - version: 5.5.0 - resolution: "@inquirer/prompts@npm:5.5.0" - dependencies: - "@inquirer/checkbox": "npm:^2.5.0" - "@inquirer/confirm": "npm:^3.2.0" - "@inquirer/editor": "npm:^2.2.0" - "@inquirer/expand": "npm:^2.3.0" - "@inquirer/input": "npm:^2.3.0" - "@inquirer/number": "npm:^1.1.0" - "@inquirer/password": "npm:^2.2.0" - "@inquirer/rawlist": "npm:^2.3.0" - "@inquirer/search": "npm:^1.1.0" - "@inquirer/select": "npm:^2.5.0" - checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 - languageName: node - linkType: hard - -"@inquirer/rawlist@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/rawlist@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 - languageName: node - linkType: hard - -"@inquirer/search@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/search@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 - languageName: node - linkType: hard - -"@inquirer/select@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/select@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c - languageName: node - linkType: hard - -"@inquirer/type@npm:^1.5.3": - version: 1.5.5 - resolution: "@inquirer/type@npm:1.5.5" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 - languageName: node - linkType: hard - -"@inquirer/type@npm:^2.0.0": - version: 2.0.0 - resolution: "@inquirer/type@npm:2.0.0" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: "npm:^7.0.4" - checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.5.5": - version: 1.5.5 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" - checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/agent@npm:4.0.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^11.2.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/f7b5ce0f3dd42c3f8c6546e8433573d8049f67ef11ec22aa4704bc41483122f68bf97752e06302c455ead667af5cb753e6a09bff06632bc465c1cfd4c4b75a53 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^5.0.0": - version: 5.0.0 - resolution: "@npmcli/fs@npm:5.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/26e376d780f60ff16e874a0ac9bc3399186846baae0b6e1352286385ac134d900cc5dafaded77f38d77f86898fc923ae1cee9d7399f0275b1aa24878915d722b - languageName: node - linkType: hard - -"@npmcli/redact@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/redact@npm:4.0.0" - checksum: 10c0/a1e9ba9c70a6b40e175bda2c3dd8cfdaf096e6b7f7a132c855c083c8dfe545c3237cd56702e2e6627a580b1d63373599d49a1192c4078a85bf47bbde824df31c - languageName: node - linkType: hard - -"@oxlint/darwin-arm64@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/darwin-arm64@npm:0.16.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@oxlint/darwin-x64@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/darwin-x64@npm:0.16.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@oxlint/linux-arm64-gnu@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/linux-arm64-gnu@npm:0.16.12" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@oxlint/linux-arm64-musl@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/linux-arm64-musl@npm:0.16.12" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@oxlint/linux-x64-gnu@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/linux-x64-gnu@npm:0.16.12" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@oxlint/linux-x64-musl@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/linux-x64-musl@npm:0.16.12" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@oxlint/win32-arm64@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/win32-arm64@npm:0.16.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@oxlint/win32-x64@npm:0.16.12": - version: 0.16.12 - resolution: "@oxlint/win32-x64@npm:0.16.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-android-arm-eabi@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-android-arm64@npm:4.60.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.60.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.60.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-arm64@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.1" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-freebsd-x64@npm:4.60.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.1" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.1" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-gnu@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.1" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-musl@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.1" - conditions: os=linux & cpu=loong64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-gnu@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-musl@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.1" - conditions: os=linux & cpu=ppc64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.1" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-openbsd-x64@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-openbsd-x64@npm:4.60.1" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-openharmony-arm64@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.1" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-gnu@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.60.1": - version: 4.60.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@samverschueren/stream-to-observable@npm:^0.3.0": - version: 0.3.1 - resolution: "@samverschueren/stream-to-observable@npm:0.3.1" - dependencies: - any-observable: "npm:^0.3.0" - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true - checksum: 10c0/0d874453f6bc2460d71783292291f52feb36c2a75314b1072a6ffe6206562f33e9d664a554348d565a6b54da9041d75070371052545bc329caaa52f64216987f - languageName: node - linkType: hard - -"@sniptt/guards@npm:^0.2.0": - version: 0.2.0 - resolution: "@sniptt/guards@npm:0.2.0" - checksum: 10c0/749bb0f550d1ddd4abdb23dc1076cba26e977659922b73d000bceeb253c09270aaced0d18e92f09d4ce2fdaae33e55f60f2142f5359bc90ba505422af0873526 - languageName: node - linkType: hard - -"@types/chai@npm:^5.2.2": - version: 5.2.3 - resolution: "@types/chai@npm:5.2.3" - dependencies: - "@types/deep-eql": "npm:*" - assertion-error: "npm:^2.0.1" - checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f - languageName: node - linkType: hard - -"@types/deep-eql@npm:*": - version: 4.0.2 - resolution: "@types/deep-eql@npm:4.0.2" - checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 - languageName: node - linkType: hard - -"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": - version: 1.0.8 - resolution: "@types/estree@npm:1.0.8" - checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 - languageName: node - linkType: hard - -"@types/mute-stream@npm:^0.0.4": - version: 0.0.4 - resolution: "@types/mute-stream@npm:0.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/944730fd7b398c5078de3c3d4d0afeec8584283bc694da1803fdfca14149ea385e18b1b774326f1601baf53898ce6d121a952c51eb62d188ef6fcc41f725c0dc - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 25.0.3 - resolution: "@types/node@npm:25.0.3" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/b7568f0d765d9469621615e2bb257c7fd1953d95e9acbdb58dffb6627a2c4150d405a4600aa1ad8a40182a94fe5f903cafd3c0a2f5132814debd0e3bfd61f835 - languageName: node - linkType: hard - -"@types/node@npm:^22.5.5": - version: 22.19.3 - resolution: "@types/node@npm:22.19.3" - dependencies: - undici-types: "npm:~6.21.0" - checksum: 10c0/a30a75d503da795ddbd5f8851014f3e91925c2a63fa3f14128d54c998f25d682dfba96dc9589c73cf478b87a16d88beb790b11697bb8cd5bee913079237a58f2 - languageName: node - linkType: hard - -"@types/node@npm:^24.7.2": - version: 24.10.0 - resolution: "@types/node@npm:24.10.0" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/f82ed7194e16f5590ef7afdc20c6d09068c76d50278b485ede8f0c5749683536e3064ffa8def8db76915196afb3724b854aa5723c64d6571b890b14492943b46 - languageName: node - linkType: hard - -"@types/prop-types@npm:*": - version: 15.7.15 - resolution: "@types/prop-types@npm:15.7.15" - checksum: 10c0/b59aad1ad19bf1733cf524fd4e618196c6c7690f48ee70a327eb450a42aab8e8a063fbe59ca0a5701aebe2d92d582292c0fb845ea57474f6a15f6994b0e260b2 - languageName: node - linkType: hard - -"@types/qs@npm:^6.9.0": - version: 6.15.0 - resolution: "@types/qs@npm:6.15.0" - checksum: 10c0/1b104cac50e655fc41d7fc1de2c2aba2908c4cf833a555b6808fb4c96752662b439238f2392a15d2590a7a6ca75dbd40e42d9378ac2be0d548ee484954363688 - languageName: node - linkType: hard - -"@types/react@npm:^18.2.0": - version: 18.3.28 - resolution: "@types/react@npm:18.3.28" - dependencies: - "@types/prop-types": "npm:*" - csstype: "npm:^3.2.2" - checksum: 10c0/683e19cd12b5c691215529af2e32b5ffbaccae3bf0ba93bfafa0e460e8dfee18423afed568be2b8eadf4b837c3749dd296a4f64e2d79f68fa66962c05f5af661 - languageName: node - linkType: hard - -"@types/wrap-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/wrap-ansi@npm:3.0.0" - checksum: 10c0/8d8f53363f360f38135301a06b596c295433ad01debd082078c33c6ed98b05a5c8fe8853a88265432126096084f4a135ec1564e3daad631b83296905509f90b3 - languageName: node - linkType: hard - -"@types/ws@npm:^6.0.1": - version: 6.0.4 - resolution: "@types/ws@npm:6.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/fa958e64596ca9487c3ed6012834de70b47f25d971f1950cfb8e6a99cb77ff340ae82ac7627744e01b58010674ef8ede07d5a2ac29ca9ad0d67a430fcc69ae14 - languageName: node - linkType: hard - -"@vitest/expect@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/expect@npm:3.2.4" - dependencies: - "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - chai: "npm:^5.2.0" - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/7586104e3fd31dbe1e6ecaafb9a70131e4197dce2940f727b6a84131eee3decac7b10f9c7c72fa5edbdb68b6f854353bd4c0fa84779e274207fb7379563b10db - languageName: node - linkType: hard - -"@vitest/mocker@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/mocker@npm:3.2.4" - dependencies: - "@vitest/spy": "npm:3.2.4" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.17" - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd - languageName: node - linkType: hard - -"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": - version: 3.2.4 - resolution: "@vitest/pretty-format@npm:3.2.4" - dependencies: - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/5ad7d4278e067390d7d633e307fee8103958806a419ca380aec0e33fae71b44a64415f7a9b4bc11635d3c13d4a9186111c581d3cef9c65cc317e68f077456887 - languageName: node - linkType: hard - -"@vitest/runner@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/runner@npm:3.2.4" - dependencies: - "@vitest/utils": "npm:3.2.4" - pathe: "npm:^2.0.3" - strip-literal: "npm:^3.0.0" - checksum: 10c0/e8be51666c72b3668ae3ea348b0196656a4a5adb836cb5e270720885d9517421815b0d6c98bfdf1795ed02b994b7bfb2b21566ee356a40021f5bf4f6ed4e418a - languageName: node - linkType: hard - -"@vitest/snapshot@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/snapshot@npm:3.2.4" - dependencies: - "@vitest/pretty-format": "npm:3.2.4" - magic-string: "npm:^0.30.17" - pathe: "npm:^2.0.3" - checksum: 10c0/f8301a3d7d1559fd3d59ed51176dd52e1ed5c2d23aa6d8d6aa18787ef46e295056bc726a021698d8454c16ed825ecba163362f42fa90258bb4a98cfd2c9424fc - languageName: node - linkType: hard - -"@vitest/spy@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/spy@npm:3.2.4" - dependencies: - tinyspy: "npm:^4.0.3" - checksum: 10c0/6ebf0b4697dc238476d6b6a60c76ba9eb1dd8167a307e30f08f64149612fd50227682b876420e4c2e09a76334e73f72e3ebf0e350714dc22474258292e202024 - languageName: node - linkType: hard - -"@vitest/utils@npm:3.2.4": - version: 3.2.4 - resolution: "@vitest/utils@npm:3.2.4" - dependencies: - "@vitest/pretty-format": "npm:3.2.4" - loupe: "npm:^3.1.4" - tinyrainbow: "npm:^2.0.0" - checksum: 10c0/024a9b8c8bcc12cf40183c246c244b52ecff861c6deb3477cbf487ac8781ad44c68a9c5fd69f8c1361878e55b97c10d99d511f2597f1f7244b5e5101d028ba64 - languageName: node - linkType: hard - -"abbrev@npm:^4.0.0": - version: 4.0.0 - resolution: "abbrev@npm:4.0.0" - checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.4 - resolution: "agent-base@npm:7.1.4" - checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe - languageName: node - linkType: hard - -"ansi-escapes@npm:^3.0.0": - version: 3.2.0 - resolution: "ansi-escapes@npm:3.2.0" - checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 - languageName: node - linkType: hard - -"ansi-escapes@npm:^7.3.0": - version: 7.3.0 - resolution: "ansi-escapes@npm:7.3.0" - dependencies: - environment: "npm:^1.0.0" - checksum: 10c0/068961d99f0ef28b661a4a9f84a5d645df93ccf3b9b93816cc7d46bbe1913321d4cdf156bb842a4e1e4583b7375c631fa963efb43001c4eb7ff9ab8f78fc0679 - languageName: node - linkType: hard - -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.2.2": - version: 6.2.2 - resolution: "ansi-regex@npm:6.2.2" - checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f - languageName: node - linkType: hard - -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.2.1, ansi-styles@npm:^6.2.3": - version: 6.2.3 - resolution: "ansi-styles@npm:6.2.3" - checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 - languageName: node - linkType: hard - -"any-observable@npm:^0.3.0": - version: 0.3.0 - resolution: "any-observable@npm:0.3.0" - checksum: 10c0/104c2b79c2ac7e6c75b35f8fd62babf73015668f22bd25336c6f848350d91f9e7daf2fddbf1c1b76fe795e89fbc91b49f70a2aec5c69f1acf0562c344f36042b - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 - languageName: node - linkType: hard - -"assertion-error@npm:^2.0.1": - version: 2.0.1 - resolution: "assertion-error@npm:2.0.1" - checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 - languageName: node - linkType: hard - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"async-limiter@npm:~1.0.0": - version: 1.0.1 - resolution: "async-limiter@npm:1.0.1" - checksum: 10c0/0693d378cfe86842a70d4c849595a0bb50dc44c11649640ca982fa90cbfc74e3cc4753b5a0847e51933f2e9c65ce8e05576e75e5e1fd963a086e673735b35969 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"auto-bind@npm:^5.0.1": - version: 5.0.1 - resolution: "auto-bind@npm:5.0.1" - checksum: 10c0/a703375350ea7b6e92405d8e6bcc6dbfb84b0d7c7172b33e5788a7593929a18227999ff9aa9c32436741d06d021e6672457b1cec73287efe3fab95cff6627eaf - languageName: node - linkType: hard - -"axios@npm:1.14.0, axios@npm:^1.13.5": - version: 1.14.0 - resolution: "axios@npm:1.14.0" - dependencies: - follow-redirects: "npm:^1.15.11" - form-data: "npm:^4.0.5" - proxy-from-env: "npm:^2.1.0" - checksum: 10c0/2541f4aa215a7d1842429dad006fc682d82bc0e74bd14500823f7d8cce3bbae0e0a8c328c8538946718f366ab8ce5a4c12e9ad40e5a0f3482ff8bff0cd115d45 - languageName: node - linkType: hard - -"backo2@npm:^1.0.2": - version: 1.0.2 - resolution: "backo2@npm:1.0.2" - checksum: 10c0/a9e825a6a38a6d1c4a94476eabc13d6127dfaafb0967baf104affbb67806ae26abbb58dab8d572d2cd21ef06634ff57c3ad48dff14b904e18de1474cc2f22bf3 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"balanced-match@npm:^4.0.2": - version: 4.0.4 - resolution: "balanced-match@npm:4.0.4" - checksum: 10c0/07e86102a3eb2ee2a6a1a89164f29d0dbaebd28f2ca3f5ca786f36b8b23d9e417eb3be45a4acf754f837be5ac0a2317de90d3fcb7f4f4dc95720a1f36b26a17b - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 - languageName: node - linkType: hard - -"brace-expansion@npm:^5.0.5": - version: 5.0.5 - resolution: "brace-expansion@npm:5.0.5" - dependencies: - balanced-match: "npm:^4.0.2" - checksum: 10c0/4d238e14ed4f5cc9c07285550a41cef23121ca08ba99fa9eb5b55b580dcb6bf868b8210aa10526bdc9f8dc97f33ca2a7259039c4cc131a93042beddb424c48e3 - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"cac@npm:^6.7.14": - version: 6.7.14 - resolution: "cac@npm:6.7.14" - checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 - languageName: node - linkType: hard - -"cacache@npm:^20.0.1": - version: 20.0.4 - resolution: "cacache@npm:20.0.4" - dependencies: - "@npmcli/fs": "npm:^5.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^13.0.0" - lru-cache: "npm:^11.1.0" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^7.0.2" - ssri: "npm:^13.0.0" - checksum: 10c0/539bf4020e44ba9ca5afc2ec435623ed7e0dd80c020097677e6b4a0545df5cc9d20b473212d01209c8b4aea43c0d095af0bb6da97bcb991642ea6fac0d7c462b - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2": - version: 1.0.4 - resolution: "call-bound@npm:1.0.4" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - get-intrinsic: "npm:^1.3.0" - checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - -"chai@npm:^5.2.0": - version: 5.3.3 - resolution: "chai@npm:5.3.3" - dependencies: - assertion-error: "npm:^2.0.1" - check-error: "npm:^2.1.1" - deep-eql: "npm:^5.0.1" - loupe: "npm:^3.1.0" - pathval: "npm:^2.0.0" - checksum: 10c0/b360fd4d38861622e5010c2f709736988b05c7f31042305fa3f4e9911f6adb80ccfb4e302068bf8ed10e835c2e2520cba0f5edc13d878b886987e5aa62483f53 - languageName: node - linkType: hard - -"chalk@npm:^1.0.0, chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - dependencies: - ansi-styles: "npm:^2.2.1" - escape-string-regexp: "npm:^1.0.2" - has-ansi: "npm:^2.0.0" - strip-ansi: "npm:^3.0.0" - supports-color: "npm:^2.0.0" - checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 - languageName: node - linkType: hard - -"chalk@npm:^2.4.1": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:^5.3.0, chalk@npm:^5.6.0": - version: 5.6.2 - resolution: "chalk@npm:5.6.2" - checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d - languageName: node - linkType: hard - -"check-error@npm:^2.1.1": - version: 2.1.3 - resolution: "check-error@npm:2.1.3" - checksum: 10c0/878e99038fb6476316b74668cd6a498c7e66df3efe48158fa40db80a06ba4258742ac3ee2229c4a2a98c5e73f5dff84eb3e50ceb6b65bbd8f831eafc8338607d - languageName: node - linkType: hard - -"chokidar@npm:^4.0.0": - version: 4.0.3 - resolution: "chokidar@npm:4.0.3" - dependencies: - readdirp: "npm:^4.0.1" - checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 - languageName: node - linkType: hard - -"cli-boxes@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-boxes@npm:3.0.0" - checksum: 10c0/4db3e8fbfaf1aac4fb3a6cbe5a2d3fa048bee741a45371b906439b9ffc821c6e626b0f108bdcd3ddf126a4a319409aedcf39a0730573ff050fdd7b6731e99fb9 - languageName: node - linkType: hard - -"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-cursor@npm:2.1.0" - dependencies: - restore-cursor: "npm:^2.0.0" - checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda - languageName: node - linkType: hard - -"cli-cursor@npm:^4.0.0": - version: 4.0.0 - resolution: "cli-cursor@npm:4.0.0" - dependencies: - restore-cursor: "npm:^4.0.0" - checksum: 10c0/e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c - languageName: node - linkType: hard - -"cli-truncate@npm:^0.2.1": - version: 0.2.1 - resolution: "cli-truncate@npm:0.2.1" - dependencies: - slice-ansi: "npm:0.0.4" - string-width: "npm:^1.0.1" - checksum: 10c0/c6caa5e2b70d841c42f4a2270d6fc7129df915f8911e4afa90c79231ccc857cd819a2c90e0707fde04e51ce56b4d71646b843f6cbaff4f7cdcb3b91ed51f6e89 - languageName: node - linkType: hard - -"cli-truncate@npm:^5.1.1": - version: 5.2.0 - resolution: "cli-truncate@npm:5.2.0" - dependencies: - slice-ansi: "npm:^8.0.0" - string-width: "npm:^8.2.0" - checksum: 10c0/0d4ec94702ca85b64522ac93633837fb5ea7db17b79b1322a60f6045e6ae2b8cd7bd4c1d19ac7d1f9e10e3bbda1112e172e439b68c02b785ee00da8d6a5c5471 - languageName: node - linkType: hard - -"cli-width@npm:^4.1.0": - version: 4.1.0 - resolution: "cli-width@npm:4.1.0" - checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^6.2.0" - checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 - languageName: node - linkType: hard - -"code-excerpt@npm:^4.0.0": - version: 4.0.0 - resolution: "code-excerpt@npm:4.0.0" - dependencies: - convert-to-spaces: "npm:^2.0.1" - checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 - languageName: node - linkType: hard - -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"commander@npm:^12.0.0": - version: 12.1.0 - resolution: "commander@npm:12.1.0" - checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"convert-to-spaces@npm:^2.0.1": - version: 2.0.1 - resolution: "convert-to-spaces@npm:2.0.1" - checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 - languageName: node - linkType: hard - -"csstype@npm:^3.2.2": - version: 3.2.3 - resolution: "csstype@npm:3.2.3" - checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce - languageName: node - linkType: hard - -"date-fns@npm:^1.27.2": - version: 1.30.1 - resolution: "date-fns@npm:1.30.1" - checksum: 10c0/bad6ad7c15180121e15d61ad62a4a214c108d66f35b35f5eeb6ade837a3c29aa4444b9528a93a5374b95ba11231c142276351bf52f4d168676f9a1e17ce3726a - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.4, debug@npm:^4.4.1": - version: 4.4.3 - resolution: "debug@npm:4.4.3" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 - languageName: node - linkType: hard - -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 - languageName: node - linkType: hard - -"deep-eql@npm:^5.0.1": - version: 5.0.2 - resolution: "deep-eql@npm:5.0.2" - checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"dotenv@npm:^16.4.0": - version: 16.6.1 - resolution: "dotenv@npm:16.6.1" - checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"elegant-spinner@npm:^1.0.1": - version: 1.0.1 - resolution: "elegant-spinner@npm:1.0.1" - checksum: 10c0/df607c83c20fc3ce56c514175dd5d1ee7f667da00cee13d04d32c70d55e76555091fa236689e691cf7dedba17b0020fec635e499cdde84dbea2ef8639314e5f8 - languageName: node - linkType: hard - -"emoji-regex@npm:^10.3.0": - version: 10.6.0 - resolution: "emoji-regex@npm:10.6.0" - checksum: 10c0/1e4aa097bb007301c3b4b1913879ae27327fdc48e93eeefefe3b87e495eb33c5af155300be951b4349ff6ac084f4403dc9eff970acba7c1c572d89396a9a32d7 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"environment@npm:^1.0.0": - version: 1.1.0 - resolution: "environment@npm:1.1.0" - checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.7.0": - version: 1.7.0 - resolution: "es-module-lexer@npm:1.7.0" - checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"es-toolkit@npm:^1.39.10": - version: 1.45.1 - resolution: "es-toolkit@npm:1.45.1" - dependenciesMeta: - "@trivago/prettier-plugin-sort-imports@4.3.0": - unplugged: true - prettier-plugin-sort-re-exports@0.0.1: - unplugged: true - checksum: 10c0/b19180c778af8fe2fb450e8e05a5793166c91e0aa66b87d9fcfcc5618bd33e6ceec9c103e074458d32b2044972dc4fc63631b3b615834fde261917e9561f6f59 - languageName: node - linkType: hard - -"esbuild@npm:^0.25.0": - version: 0.25.12 - resolution: "esbuild@npm:0.25.12" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.12" - "@esbuild/android-arm": "npm:0.25.12" - "@esbuild/android-arm64": "npm:0.25.12" - "@esbuild/android-x64": "npm:0.25.12" - "@esbuild/darwin-arm64": "npm:0.25.12" - "@esbuild/darwin-x64": "npm:0.25.12" - "@esbuild/freebsd-arm64": "npm:0.25.12" - "@esbuild/freebsd-x64": "npm:0.25.12" - "@esbuild/linux-arm": "npm:0.25.12" - "@esbuild/linux-arm64": "npm:0.25.12" - "@esbuild/linux-ia32": "npm:0.25.12" - "@esbuild/linux-loong64": "npm:0.25.12" - "@esbuild/linux-mips64el": "npm:0.25.12" - "@esbuild/linux-ppc64": "npm:0.25.12" - "@esbuild/linux-riscv64": "npm:0.25.12" - "@esbuild/linux-s390x": "npm:0.25.12" - "@esbuild/linux-x64": "npm:0.25.12" - "@esbuild/netbsd-arm64": "npm:0.25.12" - "@esbuild/netbsd-x64": "npm:0.25.12" - "@esbuild/openbsd-arm64": "npm:0.25.12" - "@esbuild/openbsd-x64": "npm:0.25.12" - "@esbuild/openharmony-arm64": "npm:0.25.12" - "@esbuild/sunos-x64": "npm:0.25.12" - "@esbuild/win32-arm64": "npm:0.25.12" - "@esbuild/win32-ia32": "npm:0.25.12" - "@esbuild/win32-x64": "npm:0.25.12" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b - languageName: node - linkType: hard - -"esbuild@npm:^0.27.0": - version: 0.27.7 - resolution: "esbuild@npm:0.27.7" - dependencies: - "@esbuild/aix-ppc64": "npm:0.27.7" - "@esbuild/android-arm": "npm:0.27.7" - "@esbuild/android-arm64": "npm:0.27.7" - "@esbuild/android-x64": "npm:0.27.7" - "@esbuild/darwin-arm64": "npm:0.27.7" - "@esbuild/darwin-x64": "npm:0.27.7" - "@esbuild/freebsd-arm64": "npm:0.27.7" - "@esbuild/freebsd-x64": "npm:0.27.7" - "@esbuild/linux-arm": "npm:0.27.7" - "@esbuild/linux-arm64": "npm:0.27.7" - "@esbuild/linux-ia32": "npm:0.27.7" - "@esbuild/linux-loong64": "npm:0.27.7" - "@esbuild/linux-mips64el": "npm:0.27.7" - "@esbuild/linux-ppc64": "npm:0.27.7" - "@esbuild/linux-riscv64": "npm:0.27.7" - "@esbuild/linux-s390x": "npm:0.27.7" - "@esbuild/linux-x64": "npm:0.27.7" - "@esbuild/netbsd-arm64": "npm:0.27.7" - "@esbuild/netbsd-x64": "npm:0.27.7" - "@esbuild/openbsd-arm64": "npm:0.27.7" - "@esbuild/openbsd-x64": "npm:0.27.7" - "@esbuild/openharmony-arm64": "npm:0.27.7" - "@esbuild/sunos-x64": "npm:0.27.7" - "@esbuild/win32-arm64": "npm:0.27.7" - "@esbuild/win32-ia32": "npm:0.27.7" - "@esbuild/win32-x64": "npm:0.27.7" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/ccd51f0555708bc9ff4ec9dc3ac92d3daacd45ecaac949ca8645984c5c323bf8cefe98c2df307418685e0b4ce37f9a3bdbfe8e3651fe632a0059a436195a17d4 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 - languageName: node - linkType: hard - -"estree-walker@npm:^3.0.3": - version: 3.0.3 - resolution: "estree-walker@npm:3.0.3" - dependencies: - "@types/estree": "npm:^1.0.0" - checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d - languageName: node - linkType: hard - -"eventemitter3@npm:^3.1.0": - version: 3.1.2 - resolution: "eventemitter3@npm:3.1.2" - checksum: 10c0/c67262eccbf85848b7cc6d4abb6c6e34155e15686db2a01c57669fd0d44441a574a19d44d25948b442929e065774cbe5003d8e77eed47674fbf876ac77887793 - languageName: node - linkType: hard - -"expect-type@npm:^1.2.1": - version: 1.3.0 - resolution: "expect-type@npm:1.3.0" - checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.3 - resolution: "exponential-backoff@npm:3.1.3" - checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 - languageName: node - linkType: hard - -"external-editor@npm:^3.1.0": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.20.1 - resolution: "fastq@npm:1.20.1" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e - languageName: node - linkType: hard - -"fdir@npm:^6.5.0": - version: 6.5.0 - resolution: "fdir@npm:6.5.0" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f - languageName: node - linkType: hard - -"figures@npm:^1.7.0": - version: 1.7.0 - resolution: "figures@npm:1.7.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - object-assign: "npm:^4.1.0" - checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 - languageName: node - linkType: hard - -"figures@npm:^2.0.0": - version: 2.0.0 - resolution: "figures@npm:2.0.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.11": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"form-data@npm:^4.0.5": - version: 4.0.5 - resolution: "form-data@npm:4.0.5" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b - languageName: node - linkType: hard - -"fs-extra@npm:^10.1.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.1, get-east-asian-width@npm:^1.5.0": - version: 1.5.0 - resolution: "get-east-asian-width@npm:1.5.0" - checksum: 10c0/bff8bbc8d81790b9477f7aa55b1806b9f082a8dc1359fff7bd8b96939622c86b729685afc2bfeb22def1fc6ef1e5228e4d87dd4e6da60bc43a5edfb03c4ee167 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:^13.0.0": - version: 13.0.6 - resolution: "glob@npm:13.0.6" - dependencies: - minimatch: "npm:^10.2.2" - minipass: "npm:^7.1.3" - path-scurry: "npm:^2.0.2" - checksum: 10c0/269c236f11a9b50357fe7a8c6aadac667e01deb5242b19c84975628f05f4438d8ee1354bb62c5d6c10f37fd59911b54d7799730633a2786660d8c69f1d18120a - languageName: node - linkType: hard - -"glob@npm:^7.1.3": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"globby@npm:^11.0.3": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 - languageName: node - linkType: hard - -"globrex@npm:^0.1.2": - version: 0.1.2 - resolution: "globrex@npm:0.1.2" - checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1 - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphql-query-batcher@npm:^1.0.1": - version: 1.0.1 - resolution: "graphql-query-batcher@npm:1.0.1" - checksum: 10c0/804d0f4064721a2116a16b9eac422e9233e85f4ab5b250cb8f83662725658ffde35779a8ae8211037f3dd2f9717de8cb63b394ad8057ce22171a83db2471196a - languageName: node - linkType: hard - -"graphql-sse@npm:^2.5.4": - version: 2.6.0 - resolution: "graphql-sse@npm:2.6.0" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 10c0/e05f0b5c8539d61e5ce34af8e0bb418c02bf922d6a7f9232a9abd53c77df5654684ca14f674ac771645c8fba9c37ce666c5d06f46eef54ea07e63653468065b0 - languageName: node - linkType: hard - -"graphql@npm:^16.6.0, graphql@npm:^16.8.1": - version: 16.12.0 - resolution: "graphql@npm:16.12.0" - checksum: 10c0/b6fffa4e8a4e4a9933ebe85e7470b346dbf49050c1a482fac5e03e4a1a7bed2ecd3a4c97e29f04457af929464bc5e4f2aac991090c2f320111eef26e902a5c75 - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.2.0 - resolution: "http-cache-semantics@npm:4.2.0" - checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:4" - checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac - languageName: node - linkType: hard - -"iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.7.2": - version: 0.7.2 - resolution: "iconv-lite@npm:0.7.2" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/3c228920f3bd307f56bf8363706a776f4a060eb042f131cd23855ceca962951b264d0997ab38a1ad340e1c5df8499ed26e1f4f0db6b2a2ad9befaff22f14b722 - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"indent-string@npm:^3.0.0": - version: 3.2.0 - resolution: "indent-string@npm:3.2.0" - checksum: 10c0/91b6d61621d24944c5c4d365d6f1ff4a490264ccaf1162a602faa0d323e69231db2180ad4ccc092c2f49cf8888cdb3da7b73e904cc0fdeec40d0bfb41ceb9478 - languageName: node - linkType: hard - -"indent-string@npm:^5.0.0": - version: 5.0.0 - resolution: "indent-string@npm:5.0.0" - checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"ink@npm:^6.8.0": - version: 6.8.0 - resolution: "ink@npm:6.8.0" - dependencies: - "@alcalzone/ansi-tokenize": "npm:^0.2.4" - ansi-escapes: "npm:^7.3.0" - ansi-styles: "npm:^6.2.1" - auto-bind: "npm:^5.0.1" - chalk: "npm:^5.6.0" - cli-boxes: "npm:^3.0.0" - cli-cursor: "npm:^4.0.0" - cli-truncate: "npm:^5.1.1" - code-excerpt: "npm:^4.0.0" - es-toolkit: "npm:^1.39.10" - indent-string: "npm:^5.0.0" - is-in-ci: "npm:^2.0.0" - patch-console: "npm:^2.0.0" - react-reconciler: "npm:^0.33.0" - scheduler: "npm:^0.27.0" - signal-exit: "npm:^3.0.7" - slice-ansi: "npm:^8.0.0" - stack-utils: "npm:^2.0.6" - string-width: "npm:^8.1.1" - terminal-size: "npm:^4.0.1" - type-fest: "npm:^5.4.1" - widest-line: "npm:^6.0.0" - wrap-ansi: "npm:^9.0.0" - ws: "npm:^8.18.0" - yoga-layout: "npm:~3.2.1" - peerDependencies: - "@types/react": ">=19.0.0" - react: ">=19.0.0" - react-devtools-core: ">=6.1.2" - peerDependenciesMeta: - "@types/react": - optional: true - react-devtools-core: - optional: true - checksum: 10c0/50500e547fdf6a1f1d836d6befbd4770e3ab649ef0be1884500a6da411fb68a90e22dd7dcc9c404911d30e9f87506b3b9d8e997c6c6ceac85ee054b4dadefaff - languageName: node - linkType: hard - -"inquirer@npm:^10.0.0": - version: 10.2.2 - resolution: "inquirer@npm:10.2.2" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/prompts": "npm:^5.5.0" - "@inquirer/type": "npm:^1.5.3" - "@types/mute-stream": "npm:^0.0.4" - ansi-escapes: "npm:^4.3.2" - mute-stream: "npm:^1.0.0" - run-async: "npm:^3.0.0" - rxjs: "npm:^7.8.1" - checksum: 10c0/09bcff887a968ce29d3a8cba749ef35b6531b7fb7bf5b28aaf3e10aebae07af2494dd3ec67ae6f1dabe76da1064cfe4514098d4c7658fcaf3fd480b2975d7163 - languageName: node - linkType: hard - -"ip-address@npm:^10.0.1": - version: 10.1.0 - resolution: "ip-address@npm:10.1.0" - checksum: 10c0/0103516cfa93f6433b3bd7333fa876eb21263912329bfa47010af5e16934eeeff86f3d2ae700a3744a137839ddfad62b900c7a445607884a49b5d1e32a3d7566 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: "npm:^1.0.0" - checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^5.0.0, is-fullwidth-code-point@npm:^5.1.0": - version: 5.1.0 - resolution: "is-fullwidth-code-point@npm:5.1.0" - dependencies: - get-east-asian-width: "npm:^1.3.1" - checksum: 10c0/c1172c2e417fb73470c56c431851681591f6a17233603a9e6f94b7ba870b2e8a5266506490573b607fb1081318589372034aa436aec07b465c2029c0bc7f07a4 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-in-ci@npm:^2.0.0": - version: 2.0.0 - resolution: "is-in-ci@npm:2.0.0" - bin: - is-in-ci: cli.js - checksum: 10c0/1e1d1056939a681e8206035de5ad84e0404556eaa7622bb55f0f1868b9788bff3df427bc0b1ed5a172623154a90fcb1e759a230817cd73d09435543ae3c71feb - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-observable@npm:^1.1.0": - version: 1.1.0 - resolution: "is-observable@npm:1.1.0" - dependencies: - symbol-observable: "npm:^1.1.0" - checksum: 10c0/cf3166b0822f70ad06e7851e09430166ce658349d54aaa64c93a03320420b9285735821b23164bdce741ff83a86730ac3e53035ce4e2511ed843dbff4105bfa2 - languageName: node - linkType: hard - -"is-promise@npm:^2.1.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"isexe@npm:^4.0.0": - version: 4.0.0 - resolution: "isexe@npm:4.0.0" - checksum: 10c0/5884815115bceac452877659a9c7726382531592f43dc29e5d48b7c4100661aed54018cb90bd36cb2eaeba521092570769167acbb95c18d39afdccbcca06c5ce - languageName: node - linkType: hard - -"isomorphic-unfetch@npm:^3.0.0": - version: 3.1.0 - resolution: "isomorphic-unfetch@npm:3.1.0" - dependencies: - node-fetch: "npm:^2.6.1" - unfetch: "npm:^4.2.0" - checksum: 10c0/d3b61fca06304db692b7f76bdfd3a00f410e42cfa7403c3b250546bf71589d18cf2f355922f57198e4cc4a9872d3647b20397a5c3edf1a347c90d57c83cf2a89 - languageName: node - linkType: hard - -"iterall@npm:^1.2.1": - version: 1.3.0 - resolution: "iterall@npm:1.3.0" - checksum: 10c0/40de624e5fe937c4c0e511981b91caea9ff2142bfc0316cccc8506eaa03aa253820cc17c5bc5f0a98706c7268a373e5ebee9af9a0c8a359730cf7c05938b57b5 - languageName: node - linkType: hard - -"js-tokens@npm:^3.0.0 || ^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"js-tokens@npm:^9.0.1": - version: 9.0.1 - resolution: "js-tokens@npm:9.0.1" - checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e - languageName: node - linkType: hard - -"jsonc-parser@npm:^3.2.0": - version: 3.3.1 - resolution: "jsonc-parser@npm:3.3.1" - checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.2.0 - resolution: "jsonfile@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d - languageName: node - linkType: hard - -"kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a - languageName: node - linkType: hard - -"last-email-interaction@workspace:.": - version: 0.0.0-use.local - resolution: "last-email-interaction@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - "@types/react": "npm:^18.2.0" - axios: "npm:1.14.0" - oxlint: "npm:^0.16.0" - react: "npm:^18.2.0" - twenty-sdk: "npm:0.8.0" - typescript: "npm:^5.9.3" - vite-tsconfig-paths: "npm:^4.2.1" - vitest: "npm:^3.1.1" - languageName: unknown - linkType: soft - -"listr-silent-renderer@npm:^1.1.1": - version: 1.1.1 - resolution: "listr-silent-renderer@npm:1.1.1" - checksum: 10c0/a13e08ebf863516a757bce4887f05290070772113d89095e9f51a07cf0b11a43a7563a67ff3b287c752c08f6d781fdb2123b02957534e3e0675fb564f2a42e1b - languageName: node - linkType: hard - -"listr-update-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-update-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^1.1.3" - cli-truncate: "npm:^0.2.1" - elegant-spinner: "npm:^1.0.1" - figures: "npm:^1.7.0" - indent-string: "npm:^3.0.0" - log-symbols: "npm:^1.0.2" - log-update: "npm:^2.3.0" - strip-ansi: "npm:^3.0.1" - peerDependencies: - listr: ^0.14.2 - checksum: 10c0/8ade44bf3dc6146c8e0178000619439e8889792c4689b66be6ce82bd459f5fe462ecb34b05147fb206a8ad60e6d4e6f34c9f48038e18366f867fd972688b8edc - languageName: node - linkType: hard - -"listr-verbose-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-verbose-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^2.4.1" - cli-cursor: "npm:^2.1.0" - date-fns: "npm:^1.27.2" - figures: "npm:^2.0.0" - checksum: 10c0/041cd1e82da7054f27ae0a914e98b40d15faf9f950ef850578fc6241d3fff3c2d7158a4f6226006e566b4c47bf445be2d254dd1ce5c16569a3a5dcd575bec656 - languageName: node - linkType: hard - -"listr@npm:^0.14.3": - version: 0.14.3 - resolution: "listr@npm:0.14.3" - dependencies: - "@samverschueren/stream-to-observable": "npm:^0.3.0" - is-observable: "npm:^1.1.0" - is-promise: "npm:^2.1.0" - is-stream: "npm:^1.1.0" - listr-silent-renderer: "npm:^1.1.1" - listr-update-renderer: "npm:^0.5.0" - listr-verbose-renderer: "npm:^0.5.0" - p-map: "npm:^2.0.0" - rxjs: "npm:^6.3.3" - checksum: 10c0/753d518218c423f46bee8eeacccecadfd2e414ba9c0f602e7f85fe3f6fa18404dfab0812433aeda4683ee2548358488f597ac1a3d321196baec5d3149b200b10 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 - languageName: node - linkType: hard - -"lodash@npm:^4.17.20": - version: 4.18.1 - resolution: "lodash@npm:4.18.1" - checksum: 10c0/757228fc68805c59789e82185135cf85f05d0b2d3d54631d680ca79ec21944ec8314d4533639a14b8bcfbd97a517e78960933041a5af17ecb693ec6eecb99a27 - languageName: node - linkType: hard - -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"log-symbols@npm:^1.0.2": - version: 1.0.2 - resolution: "log-symbols@npm:1.0.2" - dependencies: - chalk: "npm:^1.0.0" - checksum: 10c0/c64e1fe41d0d043840f8b592d043b8607a836b846506f525a53d99d578561f02f97b2cba1d2b3c30bae5311d64b308d5a392a9930d252b906a9042fc2877da7a - languageName: node - linkType: hard - -"log-update@npm:^2.3.0": - version: 2.3.0 - resolution: "log-update@npm:2.3.0" - dependencies: - ansi-escapes: "npm:^3.0.0" - cli-cursor: "npm:^2.0.0" - wrap-ansi: "npm:^3.0.1" - checksum: 10c0/9bf21b138801ab4770a2bfa735161cf005b869360eaf5003a84ba64ddc5f5c3ce7217f4f1fa79d9c1f510d792213b2c9800327228e94df05859d19b716215d90 - languageName: node - linkType: hard - -"loose-envify@npm:^1.1.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: "npm:^3.0.0 || ^4.0.0" - bin: - loose-envify: cli.js - checksum: 10c0/655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e - languageName: node - linkType: hard - -"loupe@npm:^3.1.0, loupe@npm:^3.1.4": - version: 3.2.1 - resolution: "loupe@npm:3.2.1" - checksum: 10c0/910c872cba291309664c2d094368d31a68907b6f5913e989d301b5c25f30e97d76d77f23ab3bf3b46d0f601ff0b6af8810c10c31b91d2c6b2f132809ca2cc705 - languageName: node - linkType: hard - -"lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": - version: 11.2.7 - resolution: "lru-cache@npm:11.2.7" - checksum: 10c0/549cdb59488baa617135fc12159cafb1a97f91079f35093bb3bcad72e849fc64ace636d244212c181dfdf1a99bbfa90757ff303f98561958ee4d0f885d9bd5f7 - languageName: node - linkType: hard - -"magic-string@npm:^0.30.17": - version: 0.30.21 - resolution: "magic-string@npm:0.30.21" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.5" - checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a - languageName: node - linkType: hard - -"make-fetch-happen@npm:^15.0.0": - version: 15.0.5 - resolution: "make-fetch-happen@npm:15.0.5" - dependencies: - "@gar/promise-retry": "npm:^1.0.0" - "@npmcli/agent": "npm:^4.0.0" - "@npmcli/redact": "npm:^4.0.0" - cacache: "npm:^20.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^5.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^6.0.0" - ssri: "npm:^13.0.0" - checksum: 10c0/527580eb5e5476e6ad07a4e3bd017d13e935f4be815674b442081ae5a721c13d3af5715006619e6be79a85723067e047f83a0c9e699f41d8cec43609a8de4f7b - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mimic-fn@npm:^1.0.0": - version: 1.2.0 - resolution: "mimic-fn@npm:1.2.0" - checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 - languageName: node - linkType: hard - -"minimatch@npm:^10.2.2": - version: 10.2.5 - resolution: "minimatch@npm:10.2.5" - dependencies: - brace-expansion: "npm:^5.0.5" - checksum: 10c0/6bb058bd6324104b9ec2f763476a35386d05079c1f5fe4fbf1f324a25237cd4534d6813ecd71f48208f4e635c1221899bef94c3c89f7df55698fe373aaae20fd - languageName: node - linkType: hard - -"minimatch@npm:^3.1.1": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^5.0.0": - version: 5.0.2 - resolution: "minipass-fetch@npm:5.0.2" - dependencies: - iconv-lite: "npm:^0.7.2" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^2.0.0" - minizlib: "npm:^3.0.1" - dependenciesMeta: - iconv-lite: - optional: true - checksum: 10c0/ce4ab9f21cfabaead2097d95dd33f485af8072fbc6b19611bce694965393453a1639d641c2bcf1c48f2ea7d41ea7fab8278373f1d0bee4e63b0a5b2cdd0ef649 - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.7 - resolution: "minipass-flush@npm:1.0.7" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/960915c02aa0991662c37c404517dd93708d17f96533b2ca8c1e776d158715d8107c5ced425ffc61674c167d93607f07f48a83c139ce1057f8781e5dfb4b90c2 - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^2.0.0": - version: 2.0.0 - resolution: "minipass-sized@npm:2.0.0" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/f9201696a6f6d68610d04c9c83e3d2e5cb9c026aae1c8cbf7e17f386105cb79c1bb088dbc21bf0b1eb4f3fb5df384fd1e7aa3bf1f33868c416ae8c8a92679db8 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2, minipass@npm:^7.1.3": - version: 7.1.3 - resolution: "minipass@npm:7.1.3" - checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": - version: 3.1.0 - resolution: "minizlib@npm:3.1.0" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec - languageName: node - linkType: hard - -"mkdirp@npm:^0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 - languageName: node - linkType: hard - -"ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c - languageName: node - linkType: hard - -"nanoid@npm:^3.3.11": - version: 3.3.11 - resolution: "nanoid@npm:3.3.11" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b - languageName: node - linkType: hard - -"native-fetch@npm:^4.0.2": - version: 4.0.2 - resolution: "native-fetch@npm:4.0.2" - peerDependencies: - undici: "*" - checksum: 10c0/e3b824721daaa628086d9dcd02e8eb12f0a6c5e13a1d182682bae238d80c9bbf3dfd6314a94692ebe20316aa354476804b4df148201d066b46fc552a5794cfab - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.1": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 12.2.0 - resolution: "node-gyp@npm:12.2.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^15.0.0" - nopt: "npm:^9.0.0" - proc-log: "npm:^6.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.5.4" - tinyglobby: "npm:^0.2.12" - which: "npm:^6.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/3ed046746a5a7d90950cd8b0547332b06598443f31fe213ef4332a7174c7b7d259e1704835feda79b87d3f02e59d7791842aac60642ede4396ab25fdf0f8f759 - languageName: node - linkType: hard - -"nopt@npm:^9.0.0": - version: 9.0.0 - resolution: "nopt@npm:9.0.0" - dependencies: - abbrev: "npm:^4.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: "npm:^1.0.1" - checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b - languageName: node - linkType: hard - -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.0": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3": - version: 1.13.4 - resolution: "object-inspect@npm:1.13.4" - checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"onetime@npm:^2.0.0": - version: 2.0.1 - resolution: "onetime@npm:2.0.1" - dependencies: - mimic-fn: "npm:^1.0.0" - checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 - languageName: node - linkType: hard - -"onetime@npm:^5.1.0": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: "npm:^2.1.0" - checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 - languageName: node - linkType: hard - -"oxlint@npm:^0.16.0": - version: 0.16.12 - resolution: "oxlint@npm:0.16.12" - dependencies: - "@oxlint/darwin-arm64": "npm:0.16.12" - "@oxlint/darwin-x64": "npm:0.16.12" - "@oxlint/linux-arm64-gnu": "npm:0.16.12" - "@oxlint/linux-arm64-musl": "npm:0.16.12" - "@oxlint/linux-x64-gnu": "npm:0.16.12" - "@oxlint/linux-x64-musl": "npm:0.16.12" - "@oxlint/win32-arm64": "npm:0.16.12" - "@oxlint/win32-x64": "npm:0.16.12" - dependenciesMeta: - "@oxlint/darwin-arm64": - optional: true - "@oxlint/darwin-x64": - optional: true - "@oxlint/linux-arm64-gnu": - optional: true - "@oxlint/linux-arm64-musl": - optional: true - "@oxlint/linux-x64-gnu": - optional: true - "@oxlint/linux-x64-musl": - optional: true - "@oxlint/win32-arm64": - optional: true - "@oxlint/win32-x64": - optional: true - bin: - oxc_language_server: bin/oxc_language_server - oxlint: bin/oxlint - checksum: 10c0/209c3484039c4f1fdd340689e81be93a70fdf74e8c111731e70d81580d223b0029439107c95fa4118cec3c9b03ba6c56624d3dcb8cdc79af222da3561122b3e7 - languageName: node - linkType: hard - -"p-limit@npm:3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 - languageName: node - linkType: hard - -"p-map@npm:^2.0.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.4 - resolution: "p-map@npm:7.0.4" - checksum: 10c0/a5030935d3cb2919d7e89454d1ce82141e6f9955413658b8c9403cfe379283770ed3048146b44cde168aa9e8c716505f196d5689db0ae3ce9a71521a2fef3abd - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f - languageName: node - linkType: hard - -"patch-console@npm:^2.0.0": - version: 2.0.0 - resolution: "patch-console@npm:2.0.0" - checksum: 10c0/486602591a0af7af8d4c76d8eea42cad32b6de7200488819c6383c75e43733ca7bdc80e30f2e68ce05f06a1607cce1683a1706c6672ca27dada1921b366e8f1c - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-scurry@npm:^2.0.2": - version: 2.0.2 - resolution: "path-scurry@npm:2.0.2" - dependencies: - lru-cache: "npm:^11.0.0" - minipass: "npm:^7.1.2" - checksum: 10c0/b35ad37cf6557a87fd057121ce2be7695380c9138d93e87ae928609da259ea0a170fac6f3ef1eb3ece8a068e8b7f2f3adf5bb2374cf4d4a57fe484954fcc9482 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"pathe@npm:^2.0.3": - version: 2.0.3 - resolution: "pathe@npm:2.0.3" - checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 - languageName: node - linkType: hard - -"pathval@npm:^2.0.0": - version: 2.0.1 - resolution: "pathval@npm:2.0.1" - checksum: 10c0/460f4709479fbf2c45903a65655fc8f0a5f6d808f989173aeef5fdea4ff4f303dc13f7870303999add60ec49d4c14733895c0a869392e9866f1091fa64fd7581 - languageName: node - linkType: hard - -"picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 - languageName: node - linkType: hard - -"picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": - version: 4.0.4 - resolution: "picomatch@npm:4.0.4" - checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 - languageName: node - linkType: hard - -"postcss@npm:^8.5.6": - version: 8.5.8 - resolution: "postcss@npm:8.5.8" - dependencies: - nanoid: "npm:^3.3.11" - picocolors: "npm:^1.1.1" - source-map-js: "npm:^1.2.1" - checksum: 10c0/dd918f7127ee7c60a0295bae2e72b3787892296e1d1c3c564d7a2a00c68d8df83cadc3178491259daa19ccc54804fb71ed8c937c6787e08d8bd4bedf8d17044c - languageName: node - linkType: hard - -"preact@npm:^10.28.3": - version: 10.29.0 - resolution: "preact@npm:10.29.0" - checksum: 10c0/d111381e5b48335e3a797a03adb83521cf5e9bdf880570fb2eff4fe9da9c82e6dedcbdf54538b1ed8f60bf813a0df0f4891b03dc32140ad93f8f720a8812dd5c - languageName: node - linkType: hard - -"prettier@npm:^2.8.0": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a - languageName: node - linkType: hard - -"proc-log@npm:^6.0.0": - version: 6.1.0 - resolution: "proc-log@npm:6.1.0" - checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 - languageName: node - linkType: hard - -"proxy-from-env@npm:^2.1.0": - version: 2.1.0 - resolution: "proxy-from-env@npm:2.1.0" - checksum: 10c0/ed01729fd4d094eab619cd7e17ce3698b3413b31eb102c4904f9875e677cd207392795d5b4adee9cec359dfd31c44d5ad7595a3a3ad51c40250e141512281c58 - languageName: node - linkType: hard - -"qs@npm:^6.11.0": - version: 6.14.0 - resolution: "qs@npm:6.14.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"react-dom@npm:^19.0.0": - version: 19.2.4 - resolution: "react-dom@npm:19.2.4" - dependencies: - scheduler: "npm:^0.27.0" - peerDependencies: - react: ^19.2.4 - checksum: 10c0/f0c63f1794dedb154136d4d0f59af00b41907f4859571c155940296808f4b94bf9c0c20633db75b5b2112ec13d8d7dd4f9bf57362ed48782f317b11d05a44f35 - languageName: node - linkType: hard - -"react-reconciler@npm:^0.33.0": - version: 0.33.0 - resolution: "react-reconciler@npm:0.33.0" - dependencies: - scheduler: "npm:^0.27.0" - peerDependencies: - react: ^19.2.0 - checksum: 10c0/3f7b27ea8d0ff4c8bf0e402a285e1af9b7d0e6f4c1a70a28f4384938bc1130bc82a90a31df0b79ef5e380e2e55e2598bd90b4dbf802b1203d735ba0355817d3a - languageName: node - linkType: hard - -"react@npm:^18.2.0": - version: 18.3.1 - resolution: "react@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 - languageName: node - linkType: hard - -"react@npm:^19.0.0": - version: 19.2.4 - resolution: "react@npm:19.2.4" - checksum: 10c0/cd2c9ff67a720799cc3b38a516009986f7fc4cb8d3e15716c6211cf098d1357ee3e348ab05ad0600042bbb0fd888530ba92e329198c92eafa0994f5213396596 - languageName: node - linkType: hard - -"readdirp@npm:^4.0.1": - version: 4.1.2 - resolution: "readdirp@npm:4.1.2" - checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - -"restore-cursor@npm:^2.0.0": - version: 2.0.0 - resolution: "restore-cursor@npm:2.0.0" - dependencies: - onetime: "npm:^2.0.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 - languageName: node - linkType: hard - -"restore-cursor@npm:^4.0.0": - version: 4.0.0 - resolution: "restore-cursor@npm:4.0.0" - dependencies: - onetime: "npm:^5.1.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.1.0 - resolution: "reusify@npm:1.1.0" - checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa - languageName: node - linkType: hard - -"rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 - languageName: node - linkType: hard - -"rollup@npm:^4.43.0": - version: 4.60.1 - resolution: "rollup@npm:4.60.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.60.1" - "@rollup/rollup-android-arm64": "npm:4.60.1" - "@rollup/rollup-darwin-arm64": "npm:4.60.1" - "@rollup/rollup-darwin-x64": "npm:4.60.1" - "@rollup/rollup-freebsd-arm64": "npm:4.60.1" - "@rollup/rollup-freebsd-x64": "npm:4.60.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.60.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.60.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.60.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.60.1" - "@rollup/rollup-linux-loong64-gnu": "npm:4.60.1" - "@rollup/rollup-linux-loong64-musl": "npm:4.60.1" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.60.1" - "@rollup/rollup-linux-ppc64-musl": "npm:4.60.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.60.1" - "@rollup/rollup-linux-riscv64-musl": "npm:4.60.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.60.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.60.1" - "@rollup/rollup-linux-x64-musl": "npm:4.60.1" - "@rollup/rollup-openbsd-x64": "npm:4.60.1" - "@rollup/rollup-openharmony-arm64": "npm:4.60.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.60.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.60.1" - "@rollup/rollup-win32-x64-gnu": "npm:4.60.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.60.1" - "@types/estree": "npm:1.0.8" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loong64-gnu": - optional: true - "@rollup/rollup-linux-loong64-musl": - optional: true - "@rollup/rollup-linux-ppc64-gnu": - optional: true - "@rollup/rollup-linux-ppc64-musl": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-riscv64-musl": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-openbsd-x64": - optional: true - "@rollup/rollup-openharmony-arm64": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-gnu": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/48d3f2216b5533639b007e6756e2275c7f594e45adee21ce03674aa2e004406c661f8b86c7a0b471c9e889c6a9efbb29240ca0b7673c50e391406c490c309833 - languageName: node - linkType: hard - -"run-async@npm:^3.0.0": - version: 3.0.0 - resolution: "run-async@npm:3.0.0" - checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"rxjs@npm:^6.3.3": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: "npm:^1.9.0" - checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe - languageName: node - linkType: hard - -"rxjs@npm:^7.8.1": - version: 7.8.2 - resolution: "rxjs@npm:7.8.2" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"scheduler@npm:^0.27.0": - version: 0.27.0 - resolution: "scheduler@npm:0.27.0" - checksum: 10c0/4f03048cb05a3c8fddc45813052251eca00688f413a3cee236d984a161da28db28ba71bd11e7a3dd02f7af84ab28d39fb311431d3b3772fed557945beb00c452 - languageName: node - linkType: hard - -"semver@npm:^7.3.5": - version: 7.7.4 - resolution: "semver@npm:7.7.4" - bin: - semver: bin/semver.js - checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - side-channel-map: "npm:^1.0.1" - checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 - languageName: node - linkType: hard - -"side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - side-channel-list: "npm:^1.0.0" - side-channel-map: "npm:^1.0.1" - side-channel-weakmap: "npm:^1.0.2" - checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 - languageName: node - linkType: hard - -"siginfo@npm:^2.0.0": - version: 2.0.0 - resolution: "siginfo@npm:2.0.0" - checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.1.0": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - -"slice-ansi@npm:0.0.4": - version: 0.0.4 - resolution: "slice-ansi@npm:0.0.4" - checksum: 10c0/997d4cc73e34aa8c0f60bdb71701b16c062cc4acd7a95e3b10e8c05d790eb5e735d9b470270dc6f443b1ba21492db7ceb849d5c93011d1256061bf7ed7216c7a - languageName: node - linkType: hard - -"slice-ansi@npm:^8.0.0": - version: 8.0.0 - resolution: "slice-ansi@npm:8.0.0" - dependencies: - ansi-styles: "npm:^6.2.3" - is-fullwidth-code-point: "npm:^5.1.0" - checksum: 10c0/0ce4aa91febb7cea4a00c2c27bb820fa53b6d2862ce0f80f7120134719f7914fc416b0ed966cf35250a3169e152916392f35917a2d7cad0fcc5d8b841010fa9a - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.7 - resolution: "socks@npm:2.8.7" - dependencies: - ip-address: "npm:^10.0.1" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2 - languageName: node - linkType: hard - -"source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf - languageName: node - linkType: hard - -"ssri@npm:^13.0.0": - version: 13.0.1 - resolution: "ssri@npm:13.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/cf6408a18676c57ff2ed06b8a20dc64bb3e748e5c7e095332e6aecaa2b8422b1e94a739a8453bf65156a8a47afe23757ba4ab52d3ea3b62322dc40875763e17a - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.6": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: "npm:^2.0.0" - checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a - languageName: node - linkType: hard - -"stackback@npm:0.0.2": - version: 0.0.2 - resolution: "stackback@npm:0.0.2" - checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 - languageName: node - linkType: hard - -"std-env@npm:^3.9.0": - version: 3.10.0 - resolution: "std-env@npm:3.10.0" - checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f - languageName: node - linkType: hard - -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: "npm:^1.0.0" - is-fullwidth-code-point: "npm:^1.0.0" - strip-ansi: "npm:^3.0.0" - checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e - languageName: node - linkType: hard - -"string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 - languageName: node - linkType: hard - -"string-width@npm:^4.1.0, string-width@npm:^4.2.0": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^7.0.0": - version: 7.2.0 - resolution: "string-width@npm:7.2.0" - dependencies: - emoji-regex: "npm:^10.3.0" - get-east-asian-width: "npm:^1.0.0" - strip-ansi: "npm:^7.1.0" - checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 - languageName: node - linkType: hard - -"string-width@npm:^8.1.0, string-width@npm:^8.1.1, string-width@npm:^8.2.0": - version: 8.2.0 - resolution: "string-width@npm:8.2.0" - dependencies: - get-east-asian-width: "npm:^1.5.0" - strip-ansi: "npm:^7.1.2" - checksum: 10c0/d8915428b43519b0f494da6590dbe4491857d8a12e40250e50fc01fbb616ffd8400a436bbe25712255ee129511fe0414c49d3b6b9627e2bc3a33dcec1d2eda02 - languageName: node - linkType: hard - -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: "npm:^3.0.0" - checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.1.0, strip-ansi@npm:^7.1.2": - version: 7.2.0 - resolution: "strip-ansi@npm:7.2.0" - dependencies: - ansi-regex: "npm:^6.2.2" - checksum: 10c0/544d13b7582f8254811ea97db202f519e189e59d35740c46095897e254e4f1aa9fe1524a83ad6bc5ad67d4dd6c0281d2e0219ed62b880a6238a16a17d375f221 - languageName: node - linkType: hard - -"strip-literal@npm:^3.0.0": - version: 3.1.0 - resolution: "strip-literal@npm:3.1.0" - dependencies: - js-tokens: "npm:^9.0.1" - checksum: 10c0/50918f669915d9ad0fe4b7599902b735f853f2201c97791ead00104a654259c0c61bc2bc8fa3db05109339b61f4cf09e47b94ecc874ffbd0e013965223893af8 - languageName: node - linkType: hard - -"subscriptions-transport-ws@npm:^0.9.16": - version: 0.9.19 - resolution: "subscriptions-transport-ws@npm:0.9.19" - dependencies: - backo2: "npm:^1.0.2" - eventemitter3: "npm:^3.1.0" - iterall: "npm:^1.2.1" - symbol-observable: "npm:^1.0.4" - ws: "npm:^5.2.0 || ^6.0.0 || ^7.0.0" - peerDependencies: - graphql: ">=0.10.0" - checksum: 10c0/6f2ade56865f0ba291d3ff82c79781b051c2374873bac853286fedfdbc05001b8c4018ab7cba44af667ead7f573e48d18892d58a8f9ca8d90dfb4bff5c125045 - languageName: node - linkType: hard - -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"symbol-observable@npm:^1.0.4, symbol-observable@npm:^1.1.0": - version: 1.2.0 - resolution: "symbol-observable@npm:1.2.0" - checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc - languageName: node - linkType: hard - -"tagged-tag@npm:^1.0.0": - version: 1.0.0 - resolution: "tagged-tag@npm:1.0.0" - checksum: 10c0/91d25c9ffb86a91f20522cefb2cbec9b64caa1febe27ad0df52f08993ff60888022d771e868e6416cf2e72dab68449d2139e8709ba009b74c6c7ecd4000048d1 - languageName: node - linkType: hard - -"tar@npm:^7.5.4": - version: 7.5.13 - resolution: "tar@npm:7.5.13" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.1.0" - yallist: "npm:^5.0.0" - checksum: 10c0/5c65b8084799bde7a791593a1c1a45d3d6ee98182e3700b24c247b7b8f8654df4191642abbdb07ff25043d45dcff35620827c3997b88ae6c12040f64bed5076b - languageName: node - linkType: hard - -"terminal-size@npm:^4.0.1": - version: 4.0.1 - resolution: "terminal-size@npm:4.0.1" - checksum: 10c0/89afd9d816dd9dbfe4499da9aeea70491bbde4ff4592226a9c8ac71074a7580afead6a78e95ecc35f6d42e09087b55ffcb1019302cd55e0cc957b6ce5c4847e8 - languageName: node - linkType: hard - -"tinybench@npm:^2.9.0": - version: 2.9.0 - resolution: "tinybench@npm:2.9.0" - checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c - languageName: node - linkType: hard - -"tinyexec@npm:^0.3.2": - version: 0.3.2 - resolution: "tinyexec@npm:0.3.2" - checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" - dependencies: - fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.3" - checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 - languageName: node - linkType: hard - -"tinypool@npm:^1.1.1": - version: 1.1.1 - resolution: "tinypool@npm:1.1.1" - checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b - languageName: node - linkType: hard - -"tinyrainbow@npm:^2.0.0": - version: 2.0.0 - resolution: "tinyrainbow@npm:2.0.0" - checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f - languageName: node - linkType: hard - -"tinyspy@npm:^4.0.3": - version: 4.0.4 - resolution: "tinyspy@npm:4.0.4" - checksum: 10c0/a8020fc17799251e06a8398dcc352601d2770aa91c556b9531ecd7a12581161fd1c14e81cbdaff0c1306c93bfdde8ff6d1c1a3f9bbe6d91604f0fd4e01e2f1eb - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"tsconfck@npm:^3.0.3": - version: 3.1.6 - resolution: "tsconfck@npm:3.1.6" - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - bin: - tsconfck: bin/tsconfck.js - checksum: 10c0/269c3c513540be44844117bb9b9258fe6f8aeab026d32aeebf458d5299125f330711429dbb556dbf125a0bc25f4a81e6c24ac96de2740badd295c3fb400f66c4 - languageName: node - linkType: hard - -"tslib@npm:^1.9.0, tslib@npm:^1.9.3": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - -"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"twenty-client-sdk@npm:0.8.0": - version: 0.8.0 - resolution: "twenty-client-sdk@npm:0.8.0" - dependencies: - "@genql/cli": "npm:^3.0.3" - "@genql/runtime": "npm:^2.10.0" - esbuild: "npm:^0.25.0" - graphql: "npm:^16.8.1" - checksum: 10c0/174a137994484769023236a66f4cdb498aa7a96c8ab4521e3386c6919743402d1888c898a2a7bb2d2483e1ee31b346b656d45ae0cffd3c9e456a642502a82b86 - languageName: node - linkType: hard - -"twenty-sdk@npm:0.8.0": - version: 0.8.0 - resolution: "twenty-sdk@npm:0.8.0" - dependencies: - "@genql/cli": "npm:^3.0.3" - "@genql/runtime": "npm:^2.10.0" - "@sniptt/guards": "npm:^0.2.0" - axios: "npm:^1.13.5" - chalk: "npm:^5.3.0" - chokidar: "npm:^4.0.0" - commander: "npm:^12.0.0" - dotenv: "npm:^16.4.0" - esbuild: "npm:^0.25.0" - graphql: "npm:^16.8.1" - graphql-sse: "npm:^2.5.4" - ink: "npm:^6.8.0" - inquirer: "npm:^10.0.0" - jsonc-parser: "npm:^3.2.0" - preact: "npm:^10.28.3" - react: "npm:^19.0.0" - react-dom: "npm:^19.0.0" - tinyglobby: "npm:^0.2.15" - twenty-client-sdk: "npm:0.8.0" - typescript: "npm:^5.9.2" - uuid: "npm:^13.0.0" - vite: "npm:^7.0.0" - vite-tsconfig-paths: "npm:^4.2.1" - zod: "npm:^4.1.11" - bin: - twenty: dist/cli.cjs - checksum: 10c0/f38786981769b7dde40b37ad214136eaec785b2122cffed0709102e05e34e2794b951834f22ea9737879e2aef169f458b0d5d5dbfeb3c6162038985674503af8 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 - languageName: node - linkType: hard - -"type-fest@npm:^5.4.1": - version: 5.5.0 - resolution: "type-fest@npm:5.5.0" - dependencies: - tagged-tag: "npm:^1.0.0" - checksum: 10c0/60bf79a8df45abf99490e3204eceb5cf7f915413f8a69fb578c75cab37ddcb7d29ee21f185f0e1617323ac0b2a441e001b8dc691e220d0b087e9c29ea205538c - languageName: node - linkType: hard - -"typescript@npm:^5.9.2, typescript@npm:^5.9.3": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin, typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 - languageName: node - linkType: hard - -"undici-types@npm:~6.21.0": - version: 6.21.0 - resolution: "undici-types@npm:6.21.0" - checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"undici@npm:^5.18.0": - version: 5.29.0 - resolution: "undici@npm:5.29.0" - dependencies: - "@fastify/busboy": "npm:^2.0.0" - checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b - languageName: node - linkType: hard - -"unfetch@npm:^4.2.0": - version: 4.2.0 - resolution: "unfetch@npm:4.2.0" - checksum: 10c0/a5c0a896a6f09f278b868075aea65652ad185db30e827cb7df45826fe5ab850124bf9c44c4dafca4bf0c55a0844b17031e8243467fcc38dd7a7d435007151f1b - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unixify@npm:^1.0.0": - version: 1.0.0 - resolution: "unixify@npm:1.0.0" - dependencies: - normalize-path: "npm:^2.1.1" - checksum: 10c0/8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e - languageName: node - linkType: hard - -"utility-types@npm:^3.10.0": - version: 3.11.0 - resolution: "utility-types@npm:3.11.0" - checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 - languageName: node - linkType: hard - -"uuid@npm:^13.0.0": - version: 13.0.0 - resolution: "uuid@npm:13.0.0" - bin: - uuid: dist-node/bin/uuid - checksum: 10c0/950e4c18d57fef6c69675344f5700a08af21e26b9eff2bf2180427564297368c538ea11ac9fb2e6528b17fc3966a9fd2c5049361b0b63c7d654f3c550c9b3d67 - languageName: node - linkType: hard - -"value-or-promise@npm:^1.0.12": - version: 1.0.12 - resolution: "value-or-promise@npm:1.0.12" - checksum: 10c0/b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 - languageName: node - linkType: hard - -"vite-node@npm:3.2.4": - version: 3.2.4 - resolution: "vite-node@npm:3.2.4" - dependencies: - cac: "npm:^6.7.14" - debug: "npm:^4.4.1" - es-module-lexer: "npm:^1.7.0" - pathe: "npm:^2.0.3" - vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" - bin: - vite-node: vite-node.mjs - checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b - languageName: node - linkType: hard - -"vite-tsconfig-paths@npm:^4.2.1": - version: 4.3.2 - resolution: "vite-tsconfig-paths@npm:4.3.2" - dependencies: - debug: "npm:^4.1.1" - globrex: "npm:^0.1.2" - tsconfck: "npm:^3.0.3" - peerDependencies: - vite: "*" - peerDependenciesMeta: - vite: - optional: true - checksum: 10c0/f390ac1d1c3992fc5ac50f9274c1090f8b55ab34a89ea88893db9a6924a3b26c9f64bc1163615150ad100749db73b6b2cf1d57f6cd60df6e762ceb5b8ad30024 - languageName: node - linkType: hard - -"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0, vite@npm:^7.0.0": - version: 7.3.1 - resolution: "vite@npm:7.3.1" - dependencies: - esbuild: "npm:^0.27.0" - fdir: "npm:^6.5.0" - fsevents: "npm:~2.3.3" - picomatch: "npm:^4.0.3" - postcss: "npm:^8.5.6" - rollup: "npm:^4.43.0" - tinyglobby: "npm:^0.2.15" - peerDependencies: - "@types/node": ^20.19.0 || >=22.12.0 - jiti: ">=1.21.0" - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: ">=0.54.8" - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/5c7548f5f43a23533e53324304db4ad85f1896b1bfd3ee32ae9b866bac2933782c77b350eb2b52a02c625c8ad1ddd4c000df077419410650c982cd97fde8d014 - languageName: node - linkType: hard - -"vitest@npm:^3.1.1": - version: 3.2.4 - resolution: "vitest@npm:3.2.4" - dependencies: - "@types/chai": "npm:^5.2.2" - "@vitest/expect": "npm:3.2.4" - "@vitest/mocker": "npm:3.2.4" - "@vitest/pretty-format": "npm:^3.2.4" - "@vitest/runner": "npm:3.2.4" - "@vitest/snapshot": "npm:3.2.4" - "@vitest/spy": "npm:3.2.4" - "@vitest/utils": "npm:3.2.4" - chai: "npm:^5.2.0" - debug: "npm:^4.4.1" - expect-type: "npm:^1.2.1" - magic-string: "npm:^0.30.17" - pathe: "npm:^2.0.3" - picomatch: "npm:^4.0.2" - std-env: "npm:^3.9.0" - tinybench: "npm:^2.9.0" - tinyexec: "npm:^0.3.2" - tinyglobby: "npm:^0.2.14" - tinypool: "npm:^1.1.1" - tinyrainbow: "npm:^2.0.0" - vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" - vite-node: "npm:3.2.4" - why-is-node-running: "npm:^2.3.0" - peerDependencies: - "@edge-runtime/vm": "*" - "@types/debug": ^4.1.12 - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - "@vitest/browser": 3.2.4 - "@vitest/ui": 3.2.4 - happy-dom: "*" - jsdom: "*" - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@types/debug": - optional: true - "@types/node": - optional: true - "@vitest/browser": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - bin: - vitest: vitest.mjs - checksum: 10c0/5bf53ede3ae6a0e08956d72dab279ae90503f6b5a05298a6a5e6ef47d2fd1ab386aaf48fafa61ed07a0ebfe9e371772f1ccbe5c258dd765206a8218bf2eb79eb - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e - languageName: node - linkType: hard - -"which@npm:^6.0.0": - version: 6.0.1 - resolution: "which@npm:6.0.1" - dependencies: - isexe: "npm:^4.0.0" - bin: - node-which: bin/which.js - checksum: 10c0/7e710e54ea36d2d6183bee2f9caa27a3b47b9baf8dee55a199b736fcf85eab3b9df7556fca3d02b50af7f3dfba5ea3a45644189836df06267df457e354da66d5 - languageName: node - linkType: hard - -"why-is-node-running@npm:^2.3.0": - version: 2.3.0 - resolution: "why-is-node-running@npm:2.3.0" - dependencies: - siginfo: "npm:^2.0.0" - stackback: "npm:0.0.2" - bin: - why-is-node-running: cli.js - checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 - languageName: node - linkType: hard - -"widest-line@npm:^6.0.0": - version: 6.0.0 - resolution: "widest-line@npm:6.0.0" - dependencies: - string-width: "npm:^8.1.0" - checksum: 10c0/735f1fdcd97fe765a07bb8b5e73c020bed8e53ab34e83ce0ef01693ba3c914d9e7977fe5f5facf0d0b670297a82dd5e376d3efa0896860dfcdaf7cd6924c0fb7 - languageName: node - linkType: hard - -"wrap-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "wrap-ansi@npm:3.0.1" - dependencies: - string-width: "npm:^2.1.1" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/ad6fed8f242c26755badaf452da154122d0d862f8b7aab56e758466857f230efafdc5fbffca026650b947ac3fc0eb563df5c05b9e2190a52a4a68f4eef3d4555 - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrap-ansi@npm:^9.0.0": - version: 9.0.2 - resolution: "wrap-ansi@npm:9.0.2" - dependencies: - ansi-styles: "npm:^6.2.1" - string-width: "npm:^7.0.0" - strip-ansi: "npm:^7.1.0" - checksum: 10c0/3305839b9a0d6fb930cb63a52f34d3936013d8b0682ff3ec133c9826512620f213800ffa19ea22904876d5b7e9a3c1f40682f03597d986a4ca881fa7b033688c - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0": - version: 7.5.10 - resolution: "ws@npm:7.5.10" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d - languageName: node - linkType: hard - -"ws@npm:^6.1.4": - version: 6.2.3 - resolution: "ws@npm:6.2.3" - dependencies: - async-limiter: "npm:~1.0.0" - checksum: 10c0/56a35b9799993cea7ce2260197e7879f21bbbb194a967f31acbbda6f7f46ecda4365951966fb062044c95197e19fb2f053be6f65c172435455186835f494de41 - languageName: node - linkType: hard - -"ws@npm:^8.18.0": - version: 8.20.0 - resolution: "ws@npm:8.20.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10c0/956ac5f11738c914089b65878b9223692ace77337ba55379ae68e1ecbeae9b47a0c6eb9403688f609999a58c80d83d99865fe0029b229d308b08c1ef93d4ea14 - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 - languageName: node - linkType: hard - -"yargs@npm:^15.3.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: "npm:^6.0.0" - decamelize: "npm:^1.2.0" - find-up: "npm:^4.1.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^4.2.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^18.1.2" - checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard - -"yoctocolors-cjs@npm:^2.1.2": - version: 2.1.3 - resolution: "yoctocolors-cjs@npm:2.1.3" - checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 - languageName: node - linkType: hard - -"yoga-layout@npm:~3.2.1": - version: 3.2.1 - resolution: "yoga-layout@npm:3.2.1" - checksum: 10c0/9001e51be993c85e03757e5a04a2b61b8b30c9e5a7865d0156ca87a6431a3b717d51eb4990bfe588189fcfeac688dd9c3de707bbd50d1c344a84e63974cc54a8 - languageName: node - linkType: hard - -"zen-observable-ts@npm:^0.8.21": - version: 0.8.21 - resolution: "zen-observable-ts@npm:0.8.21" - dependencies: - tslib: "npm:^1.9.3" - zen-observable: "npm:^0.8.0" - checksum: 10c0/fe4a02f862b5f7e8ae0f86230c37b84c7d5611f5c206981afb4043e732d04cf7067a6cbe1ba82d20f18b735a3387937195a12542158a631d308ae3959a1d93c4 - languageName: node - linkType: hard - -"zen-observable@npm:^0.8.0": - version: 0.8.15 - resolution: "zen-observable@npm:0.8.15" - checksum: 10c0/71cc2f2bbb537300c3f569e25693d37b3bc91f225cefce251a71c30bc6bb3e7f8e9420ca0eb57f2ac9e492b085b8dfa075fd1e8195c40b83c951dd59c6e4fbf8 - languageName: node - linkType: hard - -"zod@npm:^4.1.11": - version: 4.3.6 - resolution: "zod@npm:4.3.6" - checksum: 10c0/860d25a81ab41d33aa25f8d0d07b091a04acb426e605f396227a796e9e800c44723ed96d0f53a512b57be3d1520f45bf69c0cb3b378a232a00787a2609625307 - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/.env.example b/packages/twenty-apps/community/linkedin-browser-extension/application/.env.example deleted file mode 100644 index 293559e618..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -TWENTY_API_URL= -TWENTY_API_KEY= diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/.gitignore b/packages/twenty-apps/community/linkedin-browser-extension/application/.gitignore deleted file mode 100644 index 4f0e650be6..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.yarn/install-state.gz -.env diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/.yarnrc.yml b/packages/twenty-apps/community/linkedin-browser-extension/application/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/README.md b/packages/twenty-apps/community/linkedin-browser-extension/application/README.md deleted file mode 100644 index 4543a52044..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/README.md +++ /dev/null @@ -1,113 +0,0 @@ -# Browser Extension Serverless Functions - -Serverless functions for the Twenty browser extension. These functions handle API interactions between the browser extension and the Twenty backend. - -## Overview - -This package contains serverless functions that are deployed to your Twenty workspace. The browser extension calls these functions to create and retrieve records in Twenty CRM. - -## Functions - -### Create Person -**Endpoint:** `/s/create/person` - -Creates a new person record in Twenty from LinkedIn profile data. - -**Parameters:** -- `firstName` (string) - Person's first name -- `lastName` (string) - Person's last name - -**Response:** Created person object - -### Create Company -**Endpoint:** `/s/create/company` - -Creates a new company record in Twenty from LinkedIn company profile data. - -**Parameters:** -- `name` (string) - Company name - -**Response:** Created company object - -### Get Person -**Endpoint:** `/s/get/person` - -Retrieves an existing person record from Twenty (placeholder implementation). - -### Get Company -**Endpoint:** `/s/get/company` - -Retrieves an existing company record from Twenty (placeholder implementation). - -## Setup - -### Prerequisites - -- **Twenty CLI** installed globally: - ```bash - npm install -g twenty-cli - ``` -- **API Key** from your Twenty workspace: - - Go to https://twenty.com/settings/api-webhooks - - Generate an API key - -### Configuration - -1. **Authenticate with Twenty CLI:** - ```bash - twenty auth login - ``` - -2. **Sync serverless functions to your workspace:** - ```bash - twenty app sync - ``` - -3. **Configure environment variables:** - - `TWENTY_API_URL` - Your Twenty API URL (e.g., `https://your-workspace.twenty.com`) - - `TWENTY_API_KEY` - Your Twenty API key (marked as secret) - -Environment variables can be configured via the Twenty CLI or the Twenty web interface after syncing. - -## How It Works - -1. The browser extension extracts data from LinkedIn profiles -2. The extension calls the serverless functions via the background script -3. Serverless functions authenticate with your Twenty API using the configured API key -4. Functions create or retrieve records in your Twenty workspace -5. Response is sent back to the extension for user feedback - -## File Structure - -``` -serverlessFunctions/ -ā”œā”€ā”€ create-person/ -│ ā”œā”€ā”€ serverlessFunction.manifest.jsonc # Function configuration -│ └── src/ -│ └── index.ts # Function implementation -ā”œā”€ā”€ create-company/ -│ ā”œā”€ā”€ serverlessFunction.manifest.jsonc -│ └── src/ -│ └── index.ts -ā”œā”€ā”€ get-person/ -│ ā”œā”€ā”€ serverlessFunction.manifest.jsonc -│ └── src/ -│ └── index.ts -└── get-company/ - ā”œā”€ā”€ serverlessFunction.manifest.jsonc - └── src/ - └── index.ts -``` - -## Development - -These functions are managed by the Twenty CLI and are deployed to your workspace. After making changes: - -1. Update the function code in `src/index.ts` -2. Run `twenty app sync` to deploy changes to your workspace -3. Test the functions via the browser extension or Twenty API directly - -## Related Packages - -- **`twenty-browser-extension`** - The main browser extension that calls these functions -- See `packages/twenty-browser-extension/README.md` for the complete extension documentation diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/application.config.ts b/packages/twenty-apps/community/linkedin-browser-extension/application/application.config.ts deleted file mode 100644 index f231db8c68..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/application.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/application'; - -const config: ApplicationConfig = { - universalIdentifier: '627280a0-cb5b-40d3-a2e3-3e34b92926c8', - displayName: 'Browser Extension', - description: '', - applicationVariables: { - TWENTY_API_URL: { - universalIdentifier: '6cf6a57a-9708-4995-b6a5-65222ee1baf1', - isSecret: false, - value: '', - description: 'Twenty API URL', - }, - TWENTY_API_KEY: { - universalIdentifier: '05d12575-e96e-4e45-b019-80dcdb67dc80', - isSecret: true, - value: '', - description: 'Twenty API Key', - }, - }, -}; - -export default config; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/package.json b/packages/twenty-apps/community/linkedin-browser-extension/application/package.json deleted file mode 100644 index 12748fbd3a..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "browser-extension", - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "dependencies": { - "twenty-sdk": "0.0.3" - }, - "devDependencies": { - "@types/node": "^24.7.2" - } -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/create-company/src/index.ts b/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/create-company/src/index.ts deleted file mode 100644 index 9ca7393a33..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/create-company/src/index.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -export const main = async (params: { name: string }): Promise => { - const response = await fetch(`${process.env.TWENTY_API_URL}/rest/companies`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${process.env.TWENTY_API_KEY}`, - }, - body: JSON.stringify({ - name: params.name, - }), - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - return (await response.json()) as object; -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: 'cead3d1e-1fbd-4b09-86a9-f0bedf4d54fa', - name: 'create-company', - triggers: [ - { - universalIdentifier: '57ff5ea2-c4b7-458c-9296-27bad6acdaf9', - type: 'route', - path: '/create/company', - httpMethod: 'POST', - isAuthRequired: true, - }, - ], -}; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/create-person/src/index.ts b/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/create-person/src/index.ts deleted file mode 100644 index d335402e78..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/create-person/src/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -export const main = async (params: { - firstName: string; - lastName: string; -}): Promise => { - const response = await fetch(`${process.env.TWENTY_API_URL}/rest/people`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${process.env.TWENTY_API_KEY}`, - }, - body: JSON.stringify({ - name: { - firstName: params.firstName, - lastName: params.lastName, - }, - }), - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - return (await response.json()) as object; -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: '7d38261b-99c5-43e7-83d8-bdcedc2dffdb', - name: 'create-person', - triggers: [ - { - universalIdentifier: 'ecf261b8-183b-4323-ab95-3b11009a0eae', - type: 'route', - path: '/create/person', - httpMethod: 'POST', - isAuthRequired: true, - }, - ], -}; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/get-company/src/index.ts b/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/get-company/src/index.ts deleted file mode 100644 index ab6bab79db..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/get-company/src/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -export const main = async (params: { - a: string; - b: number; -}): Promise => { - const { a, b } = params; - - // Rename the parameters and code below with your own logic - // This is just an example - const message = `Hello, input: ${a} and ${b}`; - - return { message }; -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: '8e43b96b-49a1-4e21-b257-e432a757b09f', - name: 'get-company', - triggers: [ - { - universalIdentifier: '7a2bb8ad-6366-49ac-9f73-db9c4713c5af', - type: 'route', - path: '/get/company', - httpMethod: 'GET', - isAuthRequired: true, - }, - ], -}; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/get-person/src/index.ts b/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/get-person/src/index.ts deleted file mode 100644 index 5fb9b54775..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/serverlessFunctions/get-person/src/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -export const main = async (params: { - a: string; - b: number; -}): Promise => { - const { a, b } = params; - - // Rename the parameters and code below with your own logic - // This is just an example - const message = `Hello, input: ${a} and ${b}`; - - return { message }; -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: '87ea9816-c9e5-4860-b49f-a5f0759800f7', - name: 'get-person', - triggers: [ - { - universalIdentifier: '54aec609-0518-4fb0-bd90-7cd21507fe11', - type: 'route', - path: '/get/person', - httpMethod: 'GET', - isAuthRequired: true, - }, - ], -}; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/tsconfig.json b/packages/twenty-apps/community/linkedin-browser-extension/application/tsconfig.json deleted file mode 100644 index 17d258af13..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/application/yarn.lock b/packages/twenty-apps/community/linkedin-browser-extension/application/yarn.lock deleted file mode 100644 index 26f62b14b9..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/application/yarn.lock +++ /dev/null @@ -1,30 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@types/node@npm:^24.7.2": - version: 24.10.0 - resolution: "@types/node@npm:24.10.0" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/f82ed7194e16f5590ef7afdc20c6d09068c76d50278b485ede8f0c5749683536e3064ffa8def8db76915196afb3724b854aa5723c64d6571b890b14492943b46 - languageName: node - linkType: hard - -"browser-extension@workspace:.": - version: 0.0.0-use.local - resolution: "browser-extension@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - languageName: unknown - linkType: soft - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.env.example b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.env.example deleted file mode 100644 index d679fd6b56..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -WXT_TWENTY_API_URL= -WXT_TWENTY_API_KEY= diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.gitignore b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.gitignore deleted file mode 100755 index a25695382a..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -.output -stats.html -stats-*.json -.wxt -web-ext.config.ts - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.oxlintrc.json b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.oxlintrc.json deleted file mode 100644 index e42fdf855a..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/.oxlintrc.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["react", "typescript", "import", "unicorn"], - "categories": { - "correctness": "off" - }, - "ignorePatterns": [ - "node_modules" - ], - "rules": { - "func-style": ["error", "declaration", { "allowArrowFunctions": true }], - "no-console": ["warn", { "allow": ["group", "groupCollapsed", "groupEnd"] }], - "no-control-regex": "off", - "no-debugger": "error", - "no-duplicate-imports": "error", - "no-undef": "off", - "no-unused-vars": "off", - "no-redeclare": "off", - - "import/no-duplicates": "error", - - "react/no-unescaped-entities": "off", - "react/prop-types": "off", - "react/jsx-key": "off", - "react/display-name": "off", - "react/jsx-uses-react": "off", - "react/react-in-jsx-scope": "off", - "react/jsx-no-useless-fragment": "off", - "react/jsx-props-no-spreading": ["error", { "explicitSpread": "ignore" }], - - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "warn", - - "typescript/no-redeclare": "error", - "typescript/ban-ts-comment": "error", - "typescript/consistent-type-imports": ["error", { - "prefer": "type-imports", - "fixStyle": "inline-type-imports" - }], - "typescript/explicit-function-return-type": "off", - "typescript/explicit-module-boundary-types": "off", - "typescript/no-empty-object-type": ["error", { - "allowInterfaces": "with-single-extends" - }], - "typescript/no-empty-function": "off", - "typescript/no-explicit-any": "off", - "typescript/no-unused-vars": ["warn", { - "vars": "all", - "varsIgnorePattern": "^_", - "args": "after-used", - "argsIgnorePattern": "^_" - }] - } -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/README.md b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/README.md deleted file mode 100755 index 1375905516..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/README.md +++ /dev/null @@ -1,158 +0,0 @@ -# Twenty Browser Extension - -A Chrome browser extension for capturing LinkedIn profiles (people and companies) directly into Twenty CRM. This is a basic **v0** focused mostly on establishing a solid architectural foundation. - -## Overview - -This extension integrates with LinkedIn to extract profile information and create records in Twenty CRM. It uses **WXT** as the framework - initially tried Plasmo, but found WXT to be significantly better due to its extensibility and closer alignment with the Chrome extension APIs, providing more control and flexibility. - -## Architecture - -### Package Structure - -The extension consists of two main packages: - -1. **`twenty-browser-extension`** - The main extension package (WXT + React) -2. **`twenty-apps/browser-extension`** - Serverless functions for API interactions - -### Extension Components - -#### Entrypoints - -- **Background Script** (`src/entrypoints/background/index.ts`) - - Handles extension messaging protocol - - Manages API calls to serverless functions - - Coordinates communication between content scripts and popup - -- **Content Scripts** - - **`add-person.content`** - Injects UI button on LinkedIn person profiles - - **`add-company.content`** - Injects UI button on LinkedIn company profiles - - Both scripts use WXT's `createIntegratedUi` for seamless DOM injection - - Extract profile data from LinkedIn DOM - -- **Popup** (`src/entrypoints/popup/`) - - React-based popup UI - - Displays extracted profile information - - Provides buttons to save person/company to Twenty - -#### Messaging System - -Uses `@webext-core/messaging` for type-safe communication between extension components: - -```typescript -// Defined in src/utils/messaging.ts -- getPersonviaRelay() - Relays extraction from content script -- getCompanyviaRelay() - Relays extraction from content script -- extractPerson() - Extracts person data from LinkedIn DOM -- extractCompany() - Extracts company data from LinkedIn DOM -- createPerson() - Creates person record via serverless function -- createCompany() - Creates company record via serverless function -- openPopup() - Opens extension popup -``` - -#### Serverless Functions - -Located in `packages/twenty-apps/browser-extension/serverlessFunctions/`: - -- **`/s/create/person`** - Creates a new person record in Twenty -- **`/s/create/company`** - Creates a new company record in Twenty -- **`/s/get/person`** - Retrieves existing person record (placeholder) -- **`/s/get/company`** - Retrieves existing company record (placeholder) - -## Development Guide - -### Prerequisites - -- Twenty CLI installed globally: `npm install -g twenty-cli` -- API key from Twenty: https://twenty.com/settings/api-webhooks - -### Setup - ``` -1. **Configure environment variables:** - - Set `TWENTY_API_URL` in the serverless function configuration - - Set `TWENTY_API_KEY` (marked as secret) in the serverless function configuration - - For local development, create a `.env` file or configure via `wxt.config.ts` - -### Development Commands - -```bash -# Start development server with hot reload -npx nx run dev twenty-browser-extension - -# Build for production -npx nx run build twenty-browser-extension - -# Package extension for distribution -npx nx run package twenty-browser-extension -``` - -### Development Workflow - -1. **Start the dev server:** - ```bash - npx nx run dev twenty-browser-extension - ``` - This starts WXT in development mode with hot module reloading. - -2. **Load extension in Chrome:** - - Navigate to `chrome://extensions/` - - Enable "Developer mode" - - Click "Load unpacked" - - Select `packages/twenty-browser-extension/dist/chrome-mv3-dev/` - -3. **Test on LinkedIn:** - - Navigate to a LinkedIn person profile: `https://www.linkedin.com/in/...` - - Navigate to a LinkedIn company profile: `https://www.linkedin.com/company/...` - - The "Add to Twenty" button should appear in the profile header - - Click the button to open the popup and save to Twenty - -### Project Structure - -``` -packages/twenty-browser-extension/ -ā”œā”€ā”€ src/ -│ ā”œā”€ā”€ common/ -│ │ └── constants/ # LinkedIn URL patterns -│ ā”œā”€ā”€ entrypoints/ -│ │ ā”œā”€ā”€ background/ # Background service worker -│ │ ā”œā”€ā”€ popup/ # Extension popup UI -│ │ ā”œā”€ā”€ add-person.content/ # Content script for person profiles -│ │ └── add-company.content/ # Content script for company profiles -│ ā”œā”€ā”€ ui/ # Shared UI components and theme -│ └── utils/ # Messaging utilities -ā”œā”€ā”€ public/ # Static assets (icons) -ā”œā”€ā”€ wxt.config.ts # WXT configuration -└── project.json # Nx project configuration -``` - -## Current Status (v0) - -This is a foundational version focused on architecture. Current features: - -āœ… Inject UI buttons into LinkedIn profiles -āœ… Extract person and company data from LinkedIn -āœ… Display extracted data in popup -āœ… Create person records in Twenty -āœ… Create company records in Twenty - -## Planned Features - -- [ ] Provide a way to have API key and custom remote URLs. -- [ ] Detect if record already exists and prevent duplicates -- [ ] Open existing Twenty record when clicked (instead of creating duplicate) -- [ ] Sidepanel Overlay UI for rich profile viewing/editing -- [ ] Enhanced data extraction (email, phone, etc.) -- [ ] Better error handling - -## Why WXT? - -We initially evaluated **Plasmo** but chose **WXT** for several reasons: - -1. **Extensibility** - WXT provides more flexibility for custom extension patterns -2. **Chrome API Proximity** - Closer to native Chrome extension APIs, giving more control -3. **Type Safety** - Better TypeScript support for extension messaging -4. **Architecture** - More transparent build process and entrypoint management - -## Contributing - -This extension is in early development. The architecture is designed to be extensible, but the current implementation is intentionally minimal to establish solid foundations. diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/package.json b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/package.json deleted file mode 100755 index be0d93c619..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "twenty-browser-extension", - "description": "Twenty Lead capture extension", - "private": true, - "version": "0.0.1", - "type": "module", - "dependencies": { - "@emotion/react": "^11.11.1", - "@emotion/styled": "^11.11.0", - "@webext-core/messaging": "^2.3.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "twenty-ui": "workspace:*" - }, - "devDependencies": { - "@types/react": "^18.2.39", - "@types/react-dom": "^18.2.15", - "@wxt-dev/module-react": "^1.1.3", - "typescript": "^5.9.2", - "wxt": "^0.20.6" - } -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/project.json b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/project.json deleted file mode 100755 index 02fe5080c2..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/project.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "twenty-browser-extension", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "packages/twenty-browser-extension/src", - "projectType": "application", - "tags": ["scope:browser-extension"], - "targets": { - "dev": { - "executor": "nx:run-commands", - "options": { - "command": "wxt --mode development", - "cwd": "packages/twenty-browser-extension", - "color": true - }, - "configurations": { - "development": { - "command": "wxt --mode development" - } - } - }, - "build": { - "executor": "nx:run-commands", - "options": { - "command": "wxt build", - "cwd": "packages/twenty-browser-extension", - "color": true - }, - "configurations": { - "production": { - "command": "wxt build" - } - } - }, - "package": { - "executor": "nx:run-commands", - "options": { - "command": "wxt zip", - "cwd": "packages/twenty-browser-extension", - "color": true - }, - "configurations": { - "production": { - "command": "wxt zip" - } - } - } - } -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/128.png b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/128.png deleted file mode 100755 index 9e35d130796978714468fa149241172744bf3992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3074 zcmV+d4E^(oP)Jd_8{q`N34qNs;=%$CAfABo1mH9{OW)j} z7K)5g855E9L}*1Sv+}){RWHAvk01ZlqYC1ek(m*ZkqAT1KaZNzr_^mIP`?nuH2+f_ zh?27xAf`Z&0z!vKzaGO{`(L+P2M{qJ3?Yl}n)Tyj{e%s>h+=SiQWi@~DYd=%*H#J@ zW~c~n>sz;XR-s}9FM!^t*Dv{x z(~vvZW^eGYO5Px70sO`bJVnO%2^2?)HFdWtB2W-0VtgdM2gMp+5RbDby9=lQL3#jj z`?{<5bDHn_r4pVXI1iA``FkZBUof9Twwy4+1SbG}N^4NO+rNzD_=9XaN0*?cfQ6%9 zn?(2=0t1Psf;+7?j3B{y0OR@zgB)#yIyh1KBAh8e>p2*}^&{`$3DlBCH8Vb;etJ5! zgYvtKUio)^MGEdD;+=9fTS-r3*mZs%_8* zaq#r5Jg*2gz>Z{LznQ=YQMv#$c5P$s9hu9)11G0y9W2o|ipWY9$H2RQ3nf{ykVCu0 z9IwjjmLA|0Z}Gg%#S4dXdj$PYK{9Qy2eO$uI{c8l{s2+GQBXSwsU&R-959(W(D$T3 zqf43%i2O(D{U=#{DQgAt`?SF$EWkJXAsYR@9(y&1F8P552fCmOTDH6?f2CbshisIc zY_bx7%-6hNTjphZ1Ij|xQt${WIuOGYOv2Jzq%JMaAI_CplGfK6Kr&+dLDzU2#QAyK z6}w+l7o1l9;X+N$I=(X{ZzXW00L0yY{Gj(mu@K1(Bv_GXsN_VTKz=BI`M0xA6p8VJ zNzaZtQiHJn_-(VWfYYS{SP++_!Frn%8JN1(`sL%phjUN>-xYw2d}5abkz#>@Bdrfdb0P<#88FnNL>Uq~CUJyX<*i~Hc1xBuQiDv>ZuHWmKyNEA1 z&bpY_RB#pvtP!nQMsY77C0QEq6$jPYwNLp4Yi`#4e(jsLYP%;LXhU9%L81{jbWXgW zBj-dCduORjybGQ&F;Ge9bbI@KhcAF_PUx?WYSpYyvQYYSmy$F=Y8+i_ATGmrfG*J! zaARY0YCA><`y?AAlkkp#|c(BEgOyRz|%WBi#*+K zgC&UIJuaZKLdOKGz;x@*&I&}F`Se*WI@Be4uSjAKV4vFURn|rZ!PF%ZJ_JkjwXWAZ zfg-?Pz>Zf{@2lerSreE=v;|Um1s+kHhfHi9KvcUB@rDNd%I5V1^b>eQk>&i)b4F~j z<`G3T+n=Xj4`5r89eeC~W(-m&kziZIM2aB_pyEUURGcV)iW3D;aiRb!P82}Ji2|rN zQ2-Su3ZUXx3qX!7Ri%+~pwz_%zKTR~{&3c{7Bn^e^$E9QJ)k>TZ{&C2Mmnes1`)u8 z4}wUmo3~%IAY#RU0yvM84ScNuq|NJdbG&&(J8BLAPB!qp2+Tgj-1DN(xkt`8vq3*c z%5vHTn64LlQ3Pc|O=;|Ll@0RT2AXCEamP?9$yEa}?>IocOVzo5Cs52lyi5c|1cHnR z;&f0d^~*d#QIWtpX?i*8_wNKwk{vL;Kyjg9qUr2xTck9o@#yf^3pOY;7k~)MaVjVm z1YADviN_FCf5(%wPS}EfrvV#9=5@|}SUEX?&duvr+dvc473sPM8`QIoBTMoZ>mI3Q z1fS|AAnT9a1#aHiS#iC3MHt1KH;Uw|4b-IL zWmxqu>oMmwz`3heTtrYv6U0#`v%!qh9Y|TPfq~m(H}{+M8`o&xb~=dDfInRCTE@?6 za^PKn^Er1YvE}@TVUFu-<*3Ye7mtF(@;sB^^d)|0G<{SYD zw!OA_xdxc_CjeDzgB=M(yrPs{^9}^6dlP_5+nAUe@XPTh>s|wi-%v2xeSnh=L;-k2 z7UW=wUjdMvTld}ewd%;094zrB0GA|>@3yB^=hk)Wbydfo2hiOH*pWiSD{_IS&FhK7 z$le5Ce*?Hv3_J1zI1XUdf0%ax|MemO6Fl?=BHqZ(0wflXm|IxA2tex1z!J^{ z#DJo?KUAHS#P z9DcOU?ekm}N52PTF#_XYeI1&O9^U9v}P`1?G9>+XdF*pA)CFXCnc_b4jcul2!wF9F}c09aL8=UvR&T9ZiHsa_n7jxCmIU5vsE&$W<3AF-|68ZM3 zpF#w{POBqT#4+|?CYXNjs-HrpfSSUGzem?!8ZrP0@xin2*dTWgfSMlu{5q&rVS2G#-~P)mf+p11{R+}D>v2T?6`dGI~+aD|_>0Jf%D!O!m|W7&baR2`3? zNIRRiTP^TJ(YXMx7(>5@X+pZk%iaVeFHR&ma)4_9A3p%hAI{1_#FSlEistB)YRBEl zSB6pml0Frqb6T`{R+I3fme*vCt|vToHF$-*%%Vu4w@q5DdU9&01dthinX;qh1EfWh zUOQWA&L7UTsw{+|xG_XrJsWDRSGzD+ld5kqeU0BeI+}Iuw=>iPFM!{Un$yzsm<^R{ zk3rr}t(aEp6>DP`v;ZEz{l|SIQ!SG~F_`L{D)lxFRsfF=XXmt5F9)f8b0n!!gXAk2Wg{XO`3Bd)2_UPGO&|<7s6-)%F*kw|!2H`;Io+B- zP*5Y+i?B}1{eFWHfZ2X&@Uqo2IdSxN{9F!R<~0>)>{_lf{2r?hCKAX|ISIrh;E3sw zhqw)&p#5~_Yg8{2R)eiLH$a!|Beb@(}KBP3<&o^Zn9F&9%$9&o=i9z1%|rR`kyFgGa(x z1X{P3!4$`E2^=vEu50*!J&0|wh?h3^Cb32K)5(`J{XQvO04{D7aq#r5Jg*2gz>fOD zzI(DrzE?K>o^xU=hrSA>F9Ky7gjSh-OnsF^ot&!m>(}%Xn|y=5VY+do{l4A^<~lUU z>_XgICX>oKsvBa*z=82Cr7hsi?#Ls1ZN9u3;-KA1;l@a^jI z8vVl12>?_r1&?rC!0W2oKOFhXv8U3|6@{v9wHi$8OOAE>V)#5jh2XWx(lgKd{y!51 z5Gc~iXKU(3?uT%O`e4YYA|rq6PX5Lhq5y(|BbDNX_5u)&F~!kcPD4^T3u zj)6F|UDA2QD1Z{knmKH<1KutBplTFA&X^_+$gv9z2ZZ>V6Ho_F13I1je_E46mK20~ Q9RL6T07*qoM6N<$g0^9zvj6}9 diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/16.png b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/16.png deleted file mode 100755 index cd09f8cfbc020b5a077c6c491e2be5f1cb75fb50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_@5P)J*;soIYk(IETZ~(bMj$o8vnQ?Z`K&P@byKnRdgL9BcAPx)vHta#e(k_EN+QtB~a;#B7vY4-MPwd z0I*M%0Ii$vMXQ0J*IDiEx*HeHO#2~|QUWDPMwmjovlOSF45Is5Q{nqwq^gh#fRPv6 zS}@*-M+8d*2rWit4ITS_^ytbtKuJ{`srD|`y4ycdB$KV&w?aSmH!}7OlPlMt4AEQp zhZ%K%Z3q@VTdrAraF5Y9z3|}q+%#iwp}*e_69qRYzn6K?6mgj zj?N1`|7Fpj-nU)JS}?UmCFPhx`KK{AMERWeC5F}p!vOUOl x{o{41KG|W@*}t!GLho_Yiov7vl{n4;-T?Ii%lIRLgKym_bV-2v#fCmVkAh`iih%Om#5EqsU zEB$;ulbPxHNiqxxepRVTcfam_)BWD}zDCH1!#lJ1=QkYzLKTQg1TaFtD>Sfey|Nw1 z3Cv>jc4%%Q$sQXQ)5Zy*b+&%lh8&pdK=X%LqOt7p-_p#5NNihWyASt-m}fv^KK5X9 zbks(t8*DKHMv44r@nJitenlQlcBQ64mJYAwD3KR8Dmyf5Q6f}^(*cw^x1qBd8s%9kw)PqOF+ zc-#S zwQjUnP-RT=n$z;oa{$o^ej$o%)Kw)I9tuf6Q`Tn+#^dIVS&7sFkK3u|69@r)NF$HD zn5?fe?w80Fs5B&yA2ly4ut2Ew4a9w|>vbXq1Q}Wd!xyk%#42Pl;Q%w^j@J4G3&z1W zvl_P0Dd_YlpU67vy~AJ_#T7gd5&C5&WPNcQtPjvH(26c7^r`6R;v+X!sKdcrNe*yU zu%IoZ&tmCi;5IA?s^k;m?l}i#BnCL@`+N#*F3DTVC`^hA)cVg?aqWB(jFA(tHZEp< zwF)31XomugC@(-5{jAQilHIq;7k$02kY(b8Kv-7EiXJ9J%oAhjFm3N<5ujX#EH9TW9YBdNqdt0000<{22)0j@ZAli#Ip&84}hAsEPnZ0vICT zIil>g)=nMB5eRp{-n;rUl5nIZozTq{LL5B**?A2)AhQ9D%laV^98KF_fMq|gbh*W_VK z1jmlNdOFzMnWnR6z&J3c=k!HD!pQmK(ypfUD~#Df9-3~ld-VB_oA?C8H;_0Hc_u)( zkPLQNszn=p+I^HX5MyYO{Sc@2!+9Vp?Ft~F`P!l-lx{XHv`YA9z_Otk!1`zN$>8z6qBU3z6!!)@Cylpu z&2$r4dr z!Ph&1n@}}yZ|UZmlwLZ3yn({y_xC54U@7EOHs zmS9Ox%wtj5-FXeFu?9FB4(G0#0YAVJ!7g(VX(}eN5NByC!#oOv_#o0Wj5RxTHdK#0}VOB}LiJ$VTSLE0$n_c4LN3lA@FuMfFbX^Typ_M);{*DcI)i6`WkWsC0j9uXW3O zVuOZ!LPg1b(kgf{rMV>i4+)t4j0{Pu7zjk3{An}TrkIRbNlQWFk|JO4^rG#EB2j-C z$|~4rDvhoAGr1@OO2Pi^N;kHK|71{qA96S36HTf1nb0gBaFKb-q<8q)Wk`U5Mv3!J zsKJ!Llmig|{?`gPQPn>@48Ai~??4K2FD)WqrXqmSJFT^`-buopHnKdR2ti1B(Eeq* sU%9M=0p6t5!3M|Pz3;IZ)jLV}0)HJVZ}+VOtN;K207*qoM6N<$f?ddKj{pDw diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/96.png b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/icon/96.png deleted file mode 100755 index c28ad52d56fc409195f52f57c447442326d94b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2366 zcmV-E3BmS>P) z6Gs%s-)lMH!&xXNh*&0=7)}uR1UUOd7K>n$4dw)vPk_BiFj;sE2S7Oi$_cCln=CDE z;8bBl0_vCdT4Rb2OY^2RGn$d+S4EYpX!)c6)33YV*C6DG^`mC>^rYW3U=|6XPDE7% zsLKBlz%c@L`OBU$`1^%R(Al~Y97DlD$N_85nsq|j;AyTyEHJU&UOF{p z=mp;&y6lPVW_5>{(+qNM;!}H<|Il>;TNU51K#&Y%Ob0x{KKwx@LIA`%X?|ONqR3kJ zB_AAEG`siU>f-=XWTXIR6MuSQ*AsM_eS+zOzZVms2dO~3%CWwB(AYqv&9sCVx(CSS z`Rc^(^J$}%=HwRuxxw%9ig-G>&m_ya0ytMO+NY4|%{A}vis;+KMfgMj@m7L`_$QLt zfPGAMKS>cj5a7=9AC^;g6;A`zBv-;a0puH6YjW>9$q9*hTi*$gy|=RHQ2qA7k6w3| z_i@Kimz4mvsr`^R%?!~V7?VuYsp5Z>>>Jar!1zZ|OHegHHz`Jf0J}mq_^2L?lMLVl z;2)~;EQV}fp2ybKmAzbKAcX#-q{5F|&bG68Q3~PmnB;Td2@X<2?2&4)rCSfaP4{M) z7uKFNTI`ZgMDVb)v#_@Wo*1zGx@MqwD`#c$1+BML_5$%3fG38mxfwmo(_2||DtJpX z?Dc8i+vROIU{Q-2gs5`+P95SARjmSxHSolc;^=9T+vEy|1^avCAjGf06Qgmo6)Dp! zX?TKCJ?&+dmQr#)r2rGA6kx)X0!)}vfC*CyFkwmoCX7k|aaTjhP}pf#{rRwY9X!C* zgGP+>9(1`fU@Dy=S0=_GPEko%O52t)+F!p3+M3VAG(j#`W>;dOw>fw}ju&tm8F&?_ zX{~+25B8CW7xfw6J)kD}LXtOBnx~-*@`(;to{S3MkGl!iB!5U&1C*Q((Xv>KVS7X( zryyAkr3fRb_33;O5<7-E5faD}m}06T!pG()(R%=&0PdH2!bn_F*ZYT;#4lpJC+wD| zqmk53Pw1Vwo{Olps&cevk>WMesGYvFVv1TY1@xiPt&kl$M+CUYOP_6fbZGYs1X^cP zv^@xUDsXn|jct(uZNb~|&cdTFVTSmLH`of%{TL6cs|t!$q9pd+qJ5$XW9Gd)G%fV` zL~wj*-du^b2grmPGT*BP=e#^LEhL|a?b5blXjRf#VsFAC0$SLM8khI-&@}n?t!as0 zC~6$vl&^c8f=tC|lC*MN9-1anOl}mbfH&~(yaaG*DvIJb^ZD%7mKkFry`g*>s`}pp zEJo%Ey~WwBH&EtM)w~5joaxHR#PAk?H`z!5#;X4BP(1Ih^8G&fUulNRY8x4k(ae; zM0`S)P*?72praPRRZ{k2v@hUq4l{Di?D^xbArAk3T<)8Y06h8gxHJu~6iEv=`R7=NB=!J~ZSIx%KtphiO{~4QGo;Ia zzc*Aer8(~F+ir3u;62e)@W!YX53yH(s~jiXoW+2); zcK$rD#}mKJVMsoRKsQb+AC&+c>CfEExOnm$)a0f~VO-&&`{VNW0PrQOv$GI*H8V;6 zBIe22OWX!-54!F;^g?*k46m85PNbu4qZd}{{E>E7+bo#40O7mDHcn6MGVd={XGKSU zq$X7;>=JLL-PJY=CR!ya-b35B`!b=P-Fd^Vwv8j-BDqO35dp;9+k0mGHsEi z0Ajz0MIxCCAd~;>F5wl98Rwm!b~#;w#rguA>7wtR2TVHQX|Y8;|}3+HSuVlGKZ6IaGAdk?=K z7SaqONzL1THQQk9uHpzgUTa}%Md(`8uyMLdrvDx>d5TnZQ`kc{`O(=F55EoC+DaX9 zZGZ=N4jL=EcPU_RoD9I!1+Z`4s!lyfcq>jSi*xm=N`d0H7IrsufIu@=9C0uPshc3S zk9EbUj!%3+N`WqXW+OYl|99%l$jGNuys!4N{<2#!HbzpG9ry1xy4!7AKH^R{WlEslCW8;>X6^vxbqIfJ~8) z6qB8VV&Y}j#Fz}r@A0Kv0ZO9sdweMcP~dW)Ds1x?9`_(&N&!ZYMGjOcK!~erKse@D kLdOFBd3hd!EK*?p2hH00f!mGo?f?J)07*qoM6N<$f<_BynE(I) diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/wxt.svg b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/wxt.svg deleted file mode 100755 index 0e763206b4..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/public/wxt.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/assets/react.svg b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/assets/react.svg deleted file mode 100755 index 8e0e0f15c0..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/constants/index.ts b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/constants/index.ts deleted file mode 100644 index c9979e1342..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/constants/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { LINKEDIN_MATCHES } from './linkedin'; - diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/constants/linkedin.ts b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/constants/linkedin.ts deleted file mode 100644 index e0f182dbda..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/constants/linkedin.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum LINKEDIN_MATCHES { - COMPANY = "*://*.linkedin.com/company/*", - PERSON = "*://*.linkedin.com/in/*", - BASE_URL = "*://*.linkedin.com/*" -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/index.ts b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/index.ts deleted file mode 100644 index 1e81787ece..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/common/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { LINKEDIN_MATCHES } from './constants'; - diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-company.content/index.tsx b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-company.content/index.tsx deleted file mode 100644 index 4392a80974..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-company.content/index.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { LINKEDIN_MATCHES } from '@/common'; -import Main from '@/entrypoints/add-company.content/main'; -import { ThemeContext } from '@/ui/theme/context'; -import styled from '@emotion/styled'; -import ReactDOM from 'react-dom/client'; - -const companyPattern = new MatchPattern(LINKEDIN_MATCHES.COMPANY); - -const StyledContainer = styled.div` - margin: ${({theme}) => `${theme.spacing(1)} ${0} ${0} ${theme.spacing(2)}`}; -` - -export default defineContentScript({ - matches: [LINKEDIN_MATCHES.BASE_URL], - runAt: 'document_end', - async main(ctx) { - - async function waitFor(sel: string) { - return new Promise((resolve) => { - const tryFind = () => { - const el = document.querySelector(sel) as Element; - if (el) return resolve(el); - requestAnimationFrame(tryFind); - }; - tryFind(); - }); - } - - const anchor = await waitFor('[class*="org-top-card-primary-actions__inner"]'); - const ui = await createIntegratedUi(ctx, { - position: 'inline', - anchor, - append:'last', - onMount: (container) => { - const app = document.createElement('div'); - container.append(app); - - const root = ReactDOM.createRoot(app); - const App = () => ( - -
- - ); - - root.render( - - - - ); - return root; - }, - onRemove: (root) => { - root?.unmount(); - } - }); - - ctx.addEventListener(window, 'wxt:locationchange', ({newUrl}) => { - const injectedBtn = document.querySelector('[data-id="twenty-btn"]'); - if(companyPattern.includes(newUrl) && !injectedBtn) ui.mount() - }) - - ui.mount(); - - onMessage('extractCompany', async () => { - const companyNameElement = document.querySelector('h1'); - const companyName = companyNameElement?.textContent ?? ''; - - return { - companyName - } - }); - }, -}); diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-company.content/main.tsx b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-company.content/main.tsx deleted file mode 100644 index f1d3865758..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-company.content/main.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Button } from "@/ui/components/button"; -import { sendMessage } from "@/utils/messaging"; - -const Main = () => { - - const handleClick = async () => { - await sendMessage('openPopup') - }; - - return ; -}; - -export default Main; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-person.content/index.tsx b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-person.content/index.tsx deleted file mode 100644 index e54b643436..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-person.content/index.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { LINKEDIN_MATCHES } from '@/common'; -import Main from '@/entrypoints/add-person.content/main'; -import { ThemeContext } from '@/ui/theme/context'; -import ReactDOM from 'react-dom/client'; - -const personPattern = new MatchPattern(LINKEDIN_MATCHES.PERSON); - -export default defineContentScript({ - matches: [LINKEDIN_MATCHES.BASE_URL], - runAt: 'document_end', - async main(ctx) { - - async function waitFor(sel: string) { - return new Promise((resolve) => { - const tryFind = () => { - const el = document.querySelector(sel); - if (el) return resolve(el); - requestAnimationFrame(tryFind); - }; - tryFind(); - }); - } - - const anchor = await waitFor('[class$="pv-top-card-v2-ctas__custom"]'); - const ui = await createIntegratedUi(ctx, { - position: 'inline', - anchor, - append:'last', - onMount: (container) => { - const app = document.createElement('div'); - container.append(app); - - const root = ReactDOM.createRoot(app); - root.render( - -
- - ); - return root; - }, - onRemove: (root) => { - root?.unmount(); - }, - }); - - ctx.addEventListener(window, 'wxt:locationchange', ({newUrl, }) => { - const injectedBtn = document.querySelector('[data-id="twenty-btn"]'); - if(personPattern.includes(newUrl) && !injectedBtn) ui.mount(); - }); - - ui.mount(); - - onMessage('extractPerson', async () => { - const personNameElement = document.querySelector('h1'); - const personName = personNameElement ? personNameElement.textContent : ''; - const extractFirstAndLastName = (fullName: string) => { - const spaceIndex = fullName.lastIndexOf(' '); - const firstName = fullName.substring(0, spaceIndex); - const lastName = fullName.substring(spaceIndex + 1); - return { firstName, lastName }; - }; - - return extractFirstAndLastName(personName); - }); - }, -}); diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-person.content/main.tsx b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-person.content/main.tsx deleted file mode 100644 index f1d3865758..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/add-person.content/main.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Button } from "@/ui/components/button"; -import { sendMessage } from "@/utils/messaging"; - -const Main = () => { - - const handleClick = async () => { - await sendMessage('openPopup') - }; - - return ; -}; - -export default Main; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/background/index.ts b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/background/index.ts deleted file mode 100644 index 944bdb9f2f..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/background/index.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { onMessage } from "@/utils/messaging"; -import { SendMessageOptions } from "@webext-core/messaging"; - -export default defineBackground(async () => { - onMessage('openPopup', async () => { - await browser.action.openPopup(); - }) - - onMessage('getPersonviaRelay', async () => { - const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); - const {firstName, lastName} = await sendMessage('extractPerson', undefined, { - tabId: tab.id, - frameId: 0 - } as SendMessageOptions); - - return { - firstName, - lastName - } - }) - - onMessage('getCompanyviaRelay', async () => { - const [tab] = await browser.tabs.query({ active: true, currentWindow: true }); - const {companyName} = await sendMessage('extractCompany', undefined, { - tabId: tab.id, - frameId: 0 - } as SendMessageOptions); - - return { - companyName - } - }) - - onMessage('createPerson', async ({data}) => { - const response = await fetch(`${import.meta.env.WXT_TWENTY_API_URL}/s/create/person`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${import.meta.env.WXT_TWENTY_API_KEY}`, - }, - body: JSON.stringify({ - firstName: data.firstName, - lastName: data.lastName, - }), - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - return (await response.json()) as {firstName: string; lastName:string;}; - }) - - onMessage('createCompany', async ({data}) => { - const response = await fetch(`${import.meta.env.WXT_TWENTY_API_URL}/s/create/company`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${import.meta.env.WXT_TWENTY_API_KEY}`, - }, - body: JSON.stringify({ - name: data.name - }), - }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - return (await response.json()) as {name: string}; - }) -}) diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/app.tsx b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/app.tsx deleted file mode 100644 index a4e59a1b6e..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/app.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { sendMessage } from '@/utils/messaging'; -import styled from '@emotion/styled'; -import { useEffect, useState } from 'react'; -const StyledMain = styled.main``; - -type PersonValue = { firstName: string; lastName: string; type: 'company' | 'person' }; -type CompanyValue = { companyName: string; type: 'company' | 'person' }; -type Value = PersonValue | CompanyValue | undefined; - -function App() { - const [value, setValue] = useState(); - useEffect(() => { - browser.tabs.query({ active: true, currentWindow: true }, function(tabs) { - const currentTab = tabs[0]; - - if (!currentTab.url) { - return; - } - - let url = new URL(currentTab.url); - - const isLinkedinHost = - url.protocol === 'https:' && url.hostname === 'www.linkedin.com'; - - if (isLinkedinHost && url.pathname.startsWith('/in/')) { - sendMessage('getPersonviaRelay').then((data) => { - setValue({ ...data, type: 'person' }); - }); - } - - if (isLinkedinHost && url.pathname.startsWith('/company/')) { - sendMessage('getCompanyviaRelay').then((data) => { - setValue({ ...data, type: 'company' }); - }); - } - }); - }, []); - - const isPersonValue = (val: Value): val is PersonValue => { - return val !== undefined && 'firstName' in val && 'lastName' in val; - }; - - const isCompanyValue = (val: Value): val is CompanyValue => { - return val !== undefined && 'companyName' in val; - }; - - return ( - -

{JSON.stringify(value)}

- {isPersonValue(value) && ( - - )} - {isCompanyValue(value) && ( - - )} -
- ); -} - -export default App; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/index.html b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/index.html deleted file mode 100644 index 8813fe391b..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Twenty - - - - - -
- - - diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/main.tsx b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/main.tsx deleted file mode 100644 index ea888bc481..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/main.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import App from '@/entrypoints/popup/app'; -import { ThemeContext } from '@/ui/theme/context/ThemeContext'; -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './style.css'; - -ReactDOM.createRoot(document.getElementById('root')!).render( - - - - - -); diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/style.css b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/style.css deleted file mode 100644 index b11e10dcce..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/entrypoints/popup/style.css +++ /dev/null @@ -1,5 +0,0 @@ -body { - margin: 0; - min-width: 320px; - min-height: 500px; -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/components/button.tsx b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/components/button.tsx deleted file mode 100755 index 6fcab66cb3..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/components/button.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import styled from "@emotion/styled"; -import type { ComponentPropsWithRef } from "react"; - -const StyledButton = styled.button` - --hover-bg-color: #378fe91a; - --hover-color: #004182; - --hover-border-color: #004182; - --text-color: #0a66c2; - --bg-color: #00000000; - - font-size: ${({theme}) => theme.spacing(3.5)}; - font-weight: ${({theme}) => theme.font.weight.semiBold}; - font-family: ${({theme}) => theme.font.family}; - - background-color: var(--bg-color); - min-height:${({theme}) => theme.spacing(8)}; - padding: ${({theme}) => `${theme.spacing(1.5)} ${theme.spacing(4)}`}; - color: var(--text-color); - cursor: pointer; - - border-radius: ${({theme}) => theme.spacing(5)}; - border: 1px solid var(--text-color); - - transition-property: background-color, box-shadow, color; - transition-timing-function: cubic-bezier(.4, 0, .2, 1); - transition-duration: 167ms; - - &:hover { - background-color: var(--hover-bg-color); - color: var(--hover-color); - box-shadow: inset 0px 0px 0px 1px var(--hover-border-color); - } - - @media(max-width: 990px) { - width: 100%; - } -`; - -const StyledSpan = styled.span` - display: flex; - justify-content: center; - align-items: center; -` -interface ButtonProps extends ComponentPropsWithRef<'button'> { - children: React.ReactNode -} - -export const Button = ({children, ...rest}: ButtonProps) => { - return {children} -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/theme/context/ThemeContext.tsx b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/theme/context/ThemeContext.tsx deleted file mode 100755 index e6603cb03b..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/theme/context/ThemeContext.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import type React from 'react'; -import { ColorSchemeProvider } from 'twenty-ui/theme-constants'; - -type ThemeContextProps = { - children: React.ReactNode; -}; - -export const ThemeContext = ({ children }: ThemeContextProps) => { - return ( - {children} - ); -}; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/theme/context/index.ts b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/theme/context/index.ts deleted file mode 100755 index 46631d567d..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/ui/theme/context/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { ThemeContext } from './ThemeContext'; diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/utils/messaging.ts b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/utils/messaging.ts deleted file mode 100644 index d3752db387..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/src/utils/messaging.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineExtensionMessaging } from '@webext-core/messaging'; - -interface ProtocolMap { - getPersonviaRelay(): {firstName: string; lastName: string } - openPopup(): void; - extractPerson(): {firstName: string; lastName: string} - getCompanyviaRelay(): {companyName: string} - extractCompany(): {companyName: string} - createPerson({firstName, lastName}: {firstName: string; lastName: string}): {firstName: string; lastName: string} - createCompany({ name }: {name: string}): {name: string} -} - -export const { sendMessage, onMessage } = defineExtensionMessaging() diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/tsconfig.json b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/tsconfig.json deleted file mode 100755 index f2d3e657ab..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./.wxt/tsconfig.json", - "compilerOptions": { - "jsx": "react-jsx", - "jsxImportSource": "@emotion/react", - "paths": { - "@/*": ["./src/*"] - } - } -} diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/vite.config.ts b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/vite.config.ts deleted file mode 100644 index 938a594565..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/vite.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import react from '@vitejs/plugin-react'; -import path from 'path'; -import { defineConfig } from 'vite'; - -export default defineConfig({ - plugins: [react()], - resolve: { - alias: { - '@': path.resolve(__dirname, 'src'), - }, - }, -}); diff --git a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/wxt.config.ts b/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/wxt.config.ts deleted file mode 100755 index 952bf1386f..0000000000 --- a/packages/twenty-apps/community/linkedin-browser-extension/browser-extension/wxt.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineConfig } from 'wxt'; - -// See https://wxt.dev/api/config.html -export default defineConfig({ - modules: ['@wxt-dev/module-react'], - srcDir: 'src', - outDir: 'dist', - dev: { - server: { - port: 4000 - } - } -}); diff --git a/packages/twenty-apps/community/mailchimp-synchronizer/.yarnrc.yml b/packages/twenty-apps/community/mailchimp-synchronizer/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/mailchimp-synchronizer/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/mailchimp-synchronizer/README.md b/packages/twenty-apps/community/mailchimp-synchronizer/README.md deleted file mode 100644 index d0e1e676dc..0000000000 --- a/packages/twenty-apps/community/mailchimp-synchronizer/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# Mailchimp synchronizer - -Synchronizing contacts between Twenty and Mailchimp - -## Requirements -- Mailchimp API key - Mailchimp > avatar in top right corner > Profile > Extras > API keys - -## Setup -1. Add app to your workspace -```bash -cd packages/twenty-apps/community/mailchimp-synchronizer -yarn auth -yarn generate -yarn sync -``` -2. Go to Settings > Integrations > Mailchimp synchronizer > Settings and add required variables - -## Flow -- Check if required variables are set, if not, exit -- Validate data based on set constraints, if data doesn't match constraints, exit -- Check if person already exists in Mailchimp: - - if yes, check if UPDATE_PERSON is set to true - - if UPDATE_PERSON is true, check if Twenty record is the same as Mailchimp record - - if they're the same, exit - - if not, update - - if UPDATE_PERSON is false, exit - - if person doesn't exist in Mailchimp, send a request to Mailchimp with new contact - -## Note -- SMS support is experimental and may cause errors -- constraints are directly responsible for sent data so if e.g. you want to have a company name in -Mailchimp, you have to set IS_COMPANY_CONSTRAINT to true \ No newline at end of file diff --git a/packages/twenty-apps/community/mailchimp-synchronizer/application.config.ts b/packages/twenty-apps/community/mailchimp-synchronizer/application.config.ts deleted file mode 100644 index fa0234d798..0000000000 --- a/packages/twenty-apps/community/mailchimp-synchronizer/application.config.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/define'; - -const config: ApplicationConfig = { - universalIdentifier: '1eadac4e-db9f-4cce-b20b-de75f41e34dc', - displayName: 'Mailchimp synchronizer', - description: 'Synchronizes Twenty contacts in Mailchimp', - icon: "IconMailFast", - applicationVariables: { - MAILCHIMP_API_KEY: { - universalIdentifier: 'f10d4e8a-8055-4eb2-b9ad-efd69d43b1f0', - isSecret: true, - description: 'Required to send requests to Mailchimp', - }, - MAILCHIMP_SERVER_PREFIX: { - universalIdentifier: '6c8b6ac9-dd45-4f0b-a397-c4a38edccfd9', - isSecret: false, - description: 'Required to send requests to Mailchimp (it\'s found in url, e.g. https://us9.admin.mailchimp.com > us9 is prefix)', - }, - MAILCHIMP_AUDIENCE_ID: { - universalIdentifier: '5492f06f-bb29-4c93-9436-b4736a396376', - isSecret: false, - description: 'Required to send requests to Mailchimp', - }, - IS_EMAIL_CONSTRAINT: { - universalIdentifier: '62626c57-470f-4866-be1e-5b4d7ec09f9f', - isSecret: false, - value: 'false', - description: - 'Set to true if you want to add additional constraint (default is false)', - }, - IS_PHONE_CONSTRAINT: { - universalIdentifier: 'fac8ec5b-dade-46bf-b938-3dfdef0aa298', - isSecret: false, - value: 'false', - description: - 'Set to true if you want to add additional constraint (default is false)', - }, - IS_COMPANY_CONSTRAINT: { - universalIdentifier: '9ffd8e76-4ab2-42f9-8549-3622a5ae2343', - isSecret: false, - value: 'false', - description: - 'Set to true if you want to add additional constraint (default is false)', - }, - IS_ADDRESS_CONSTRAINT: { - universalIdentifier: '4b899eb6-517e-4afd-bbf8-88097900ea42', - isSecret: false, - value: 'false', - description: - 'Set to true if you want to add additional constraint (default is false)', - }, - UPDATE_PERSON: { - universalIdentifier: '9d753e1e-4408-40ca-b0f0-5c7e8625c2aa', - isSecret: true, - value: 'false', - description: 'Set to true if you want to update record in Mailchimp if it exists', - }, - }, -}; - -export default config; diff --git a/packages/twenty-apps/community/mailchimp-synchronizer/package.json b/packages/twenty-apps/community/mailchimp-synchronizer/package.json deleted file mode 100644 index ae11b72ee7..0000000000 --- a/packages/twenty-apps/community/mailchimp-synchronizer/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "mailchimp-synchronizer", - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "dependencies": { - "axios": "^1.13.2", - "twenty-sdk": "0.2.4" - }, - "devDependencies": { - "@types/node": "^24.7.2" - }, - "scripts": { - "auth": "twenty auth login", - "dev": "twenty app dev", - "sync": "twenty app sync", - "uninstall": "twenty app uninstall", - "logs": "twenty app logs", - "create-entity": "twenty app add", - "help": "twenty --help" - } -} diff --git a/packages/twenty-apps/community/mailchimp-synchronizer/src/index.ts b/packages/twenty-apps/community/mailchimp-synchronizer/src/index.ts deleted file mode 100644 index bb61295483..0000000000 --- a/packages/twenty-apps/community/mailchimp-synchronizer/src/index.ts +++ /dev/null @@ -1,442 +0,0 @@ -import axios from 'axios'; -import { type DatabaseEventPayload, type FunctionConfig, type ObjectRecordCreateEvent, type ObjectRecordUpdateEvent } from 'twenty-sdk/define'; -import Twenty, { type Person } from '../generated'; - -const MAILCHIMP_API_URL: string = - process.env.MAILCHIMP_SERVER_PREFIX !== '' && - process.env.MAILCHIMP_SERVER_PREFIX !== undefined - ? `https://${process.env.MAILCHIMP_SERVER_PREFIX}.api.mailchimp.com/3.0/` - : ''; -const MAILCHIMP_API_KEY: string = process.env.MAILCHIMP_API_KEY ?? ''; -const MAILCHIMP_AUDIENCE_ID: string = process.env.MAILCHIMP_AUDIENCE_ID ?? ''; -const IS_EMAIL_CONSTRAINT: boolean = process.env.IS_EMAIL_CONSTRAINT === 'true'; -const IS_COMPANY_CONSTRAINT: boolean = - process.env.COMPANY_CONSTRAINT === 'true'; -const IS_PHONE_CONSTRAINT: boolean = process.env.IS_PHONE_CONSTRAINT === 'true'; -const IS_ADDRESS_CONSTRAINT: boolean = - process.env.IS_ADDRESS_CONSTRAINT === 'true'; -const UPDATE_PERSON: boolean = process.env.UPDATE_PERSON === 'true'; - -type mailchimpAddress = { - street1: string; - street2: string; - city: string; - state: string; - zipCode: string; - country: string; -}; - -type mailchimpRecord = { - id?: string; - email_channel?: { - email: string; - marketing_consent?: { - status: string; - }; - }; - sms_channel?: { - sms_phone: string; - marketing_consent?: { - status: string; - }; - }; - mergeFields: { - FNAME: string; - LNAME: string; - ADDRESS: string | mailchimpAddress; - COMPANY: string; - PHONE: string; - }; -}; - -type twentyAddress = { - addressStreet1: string; - addressStreet2: string; - addressCity: string; - addressState: string; - addressPostCode: string; - addressCountry: string; -}; - -type twentyCompany = { - name: string; - address: twentyAddress; -}; - -type twentyPerson = { - name: { - firstName: string; - lastName: string; - }; - emails: { - primaryEmail: string; - }; - phones: { - primaryPhoneNumber: string; - primaryPhoneCallingCode: string; - }; - companyId: string | null; -}; - -type DatabaseEvent = - | DatabaseEventPayload> - | DatabaseEventPayload>; - -const fetchCompanyData = async (companyId: string): Promise => { - const { company } = await new Twenty().query({ - company: { - __args: { filter: { id: { eq: companyId } } }, - name: true, - address: { - addressStreet1: true, - addressStreet2: true, - addressState: true, - addressPostcode: true, - addressCity: true, - addressCountry: true, - }, - }, - }); - return company as unknown as twentyCompany; -}; - -const checkAddress = (address: twentyAddress): mailchimpAddress => { - if ( - address.addressStreet1 !== '' && - address.addressCity !== '' && - address.addressPostCode !== '' && - address.addressState !== '' - ) { - return { - street1: address.addressStreet1, - street2: address.addressStreet2, - city: address.addressCity, - state: address.addressState, - zipCode: address.addressPostCode, - country: address.addressCountry, - } as mailchimpAddress; - } - throw new Error('Invalid address'); -}; - -const checkAudiencePermissions = async ( - audienceId: string, -): Promise => { - const options = { - method: 'GET', - headers: { - Authorization: `Bearer ${MAILCHIMP_API_KEY}`, - }, - url: `${MAILCHIMP_API_URL}/audiences/${audienceId}`, - }; - try { - const temp = await axios.request(options); - return temp.data.enabled_channels; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const prepareData = ( - firstName: string, - lastName: string, - email: string, - phoneNumber: string, - phoneCallingCode: string, - companyName: string, - address: mailchimpAddress | string, -): mailchimpRecord => { - let data = { - mergeFields: {}, - } as mailchimpRecord; - data.mergeFields.FNAME = firstName; - data.mergeFields.LNAME = lastName; - if (IS_EMAIL_CONSTRAINT) { - data.email_channel = { - email: email, - marketing_consent: { - status: 'unknown', - }, - }; - } - if (IS_ADDRESS_CONSTRAINT) { - data.mergeFields.ADDRESS = address; - } - if (IS_PHONE_CONSTRAINT) { - const mergedPhoneNumber: string = phoneCallingCode.startsWith('+') - ? phoneCallingCode.concat(phoneNumber) - : '+'.concat(phoneCallingCode, phoneNumber); - data['sms_channel'] = { - sms_phone: mergedPhoneNumber, - marketing_consent: { - status: 'unknown', - }, - }; - data['mergeFields']['PHONE'] = mergedPhoneNumber; - } - if (IS_COMPANY_CONSTRAINT) { - data['mergeFields']['COMPANY'] = companyName; - } - return data; -}; - -const addTwentyPersonToMailchimp = async ( - convertedRecord: mailchimpRecord, -): Promise => { - const options = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${MAILCHIMP_API_KEY}`, - }, - url: `${MAILCHIMP_API_URL}/audiences/${MAILCHIMP_AUDIENCE_ID}/contacts`, - data: convertedRecord, - }; - try { - const response = await axios.request(options); - return response.status === 200; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const checkIfTwentyPersonExistsInMailchimp = async ( - email?: string, - phoneNumber?: string, - cursor?: string, -) => { - const options = { - method: 'GET', - headers: { - Authorization: `Bearer ${MAILCHIMP_API_KEY}`, - }, - url: cursor - ? `${MAILCHIMP_API_URL}/audiences/${MAILCHIMP_AUDIENCE_ID}/contacts?count%3D1000%26cursor%3D${cursor}` - : `${MAILCHIMP_API_URL}/audiences/${MAILCHIMP_AUDIENCE_ID}/contacts?count%3D1000`, - }; - try { - const response = await axios.request(options); - const doesPersonExist: mailchimpRecord | undefined = - (response.data.contacts.find( - (contact: any) => contact.email_channel.email === email, - ) as mailchimpRecord) || - (response.data.contacts.find( - (contact: any) => contact.sms_channel.sms_phone === phoneNumber, - ) as mailchimpRecord); - if (doesPersonExist !== undefined) { - return doesPersonExist; - } - if (response.data.next_cursor === undefined) { - return undefined; - } else { - await checkIfTwentyPersonExistsInMailchimp( - email, - phoneNumber, - response.data.next_cursor, - ); - } - return undefined; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const compareTwoRecords = ( - object1: mailchimpRecord, - object2: mailchimpRecord, -) => { - return ( - object1.email_channel?.email === object2.email_channel?.email && - object1.sms_channel?.sms_phone === object2.sms_channel?.sms_phone && - object1.mergeFields.FNAME === object2.mergeFields.FNAME && - object1.mergeFields.LNAME === object2.mergeFields.LNAME && - object1.mergeFields.ADDRESS === object2.mergeFields.ADDRESS && - object1.mergeFields.COMPANY === object2.mergeFields.COMPANY - ); -}; - -const updateTwentyPersonInMailchimp = async ( - mailchimpRecordId: string, - twentyConvertedRecord: mailchimpRecord, -): Promise => { - const options = { - method: 'PATCH', - headers: { - Authorization: `Bearer ${MAILCHIMP_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${MAILCHIMP_API_URL}/audiences/${MAILCHIMP_AUDIENCE_ID}/contacts/${mailchimpRecordId}`, - data: twentyConvertedRecord, - }; - try { - const response = await axios.request(options); - return response.status === 200; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -export const main = async ( - params: DatabaseEvent, -): Promise => { - if (!IS_EMAIL_CONSTRAINT && !IS_PHONE_CONSTRAINT) { - console.warn( - 'Function exited as there are no constraints to email nor phone number', - ); - return {}; - } - if ( - MAILCHIMP_API_URL === '' || - MAILCHIMP_API_KEY === '' || - MAILCHIMP_AUDIENCE_ID === '' - ) { - console.warn('Missing Mailchimp required parameters'); - return {}; - } - - try { - const { properties } = params; - const twentyRecord: twentyPerson = properties.after as twentyPerson; - if ( - twentyRecord.name.firstName === '' || - twentyRecord.name.lastName === '' - ) { - throw new Error('First or last name is empty'); - } - - const audiencePermissions: string[] | undefined = - await checkAudiencePermissions(MAILCHIMP_AUDIENCE_ID); - - if ( - IS_EMAIL_CONSTRAINT && - audiencePermissions?.includes('Email') && - twentyRecord.emails.primaryEmail === '' - ) { - throw new Error('Email is empty'); - } - - if ( - IS_PHONE_CONSTRAINT && - audiencePermissions?.includes('SMS') && - (twentyRecord.phones.primaryPhoneNumber === '' || - twentyRecord.phones.primaryPhoneCallingCode === '') - ) { - throw new Error('Phone number is empty'); - } - - let companyName: string = ''; - let address: mailchimpAddress | string = ''; - if (IS_COMPANY_CONSTRAINT) { - if (twentyRecord.companyId === null) { - throw new Error('Missing relation to company record'); - } - const company: twentyCompany = await fetchCompanyData( - twentyRecord.companyId, - ); - companyName = company.name ?? ''; // either "" or name - address = IS_ADDRESS_CONSTRAINT ? checkAddress(company.address) : ''; - } - - const twentyPersonToMailchimpRecord: mailchimpRecord = prepareData( - twentyRecord.name.firstName, - twentyRecord.name.lastName, - twentyRecord.emails.primaryEmail, - twentyRecord.phones.primaryPhoneNumber, - twentyRecord.phones.primaryPhoneCallingCode, - companyName, - address, - ); - console.log(twentyPersonToMailchimpRecord); - - const isTwentyPersonInMailchimp: mailchimpRecord | undefined = - await checkIfTwentyPersonExistsInMailchimp( - twentyRecord.emails.primaryEmail, - twentyPersonToMailchimpRecord.sms_channel?.sms_phone, - ); - if (isTwentyPersonInMailchimp !== undefined) { - console.log( - `Person ${twentyRecord.name.firstName} ${twentyRecord.name.lastName} found in Mailchimp`, - ); - if (UPDATE_PERSON) { - if ( - !compareTwoRecords( - isTwentyPersonInMailchimp, - twentyPersonToMailchimpRecord, - ) && - isTwentyPersonInMailchimp.id - ) { - const isTwentyPersonUpdatedInMailchimp: boolean | undefined = - await updateTwentyPersonInMailchimp( - isTwentyPersonInMailchimp.id, - twentyPersonToMailchimpRecord, - ); - if (!isTwentyPersonUpdatedInMailchimp) { - throw new Error( - `Person ${twentyRecord.name.firstName} ${twentyRecord.name.lastName} update in Mailchimp failed`, - ); - } else { - console.log( - `Person ${twentyRecord.name.firstName} ${twentyRecord.name.lastName} update in Mailchimp succeeded`, - ); - } - } else { - console.log( - `Person ${twentyRecord.name.firstName} ${twentyRecord.name.lastName} wasn't updated in Mailchimp because they're the same`, - ); - } - } else { - console.log( - `Person ${twentyRecord.name.firstName} ${twentyRecord.name.lastName} wasn't updated in Mailchimp because UPDATE_PERSON is set to false`, - ); - } - } else { - console.log( - `${twentyRecord.name.firstName} ${twentyRecord.name.lastName} doesn't exist in Mailchimp, adding`, - ); - const isTwentyPersonAddedToMailchimp: boolean | undefined = - await addTwentyPersonToMailchimp(twentyPersonToMailchimpRecord); - if (!isTwentyPersonAddedToMailchimp) { - throw new Error( - `Adding ${twentyRecord.name.firstName} ${twentyRecord.name.lastName} person to Mailchimp failed`, - ); - } else { - console.log( - `Person ${twentyRecord.name.firstName} ${twentyRecord.name.lastName} has been successfully added`, - ); - } - } - return {}; - } catch (error) { - if (axios.isAxiosError(error)) { - console.error(error.response); - return {}; - } - console.error(error); - return {}; - } -}; - -export const config: FunctionConfig = { - universalIdentifier: '83319670-775b-4862-b133-5c353e594151', - name: 'mailchimp-synchronizer', - triggers: [ - { - universalIdentifier: 'e627ff6f-0a0c-48b2-bdbb-31967489ec96', - type: 'databaseEvent', - eventName: 'person.created', - }, - { - universalIdentifier: '657ece26-4478-4408-a257-4e9e16cce279', - type: 'databaseEvent', - eventName: 'person.updated', - }, - ], -}; diff --git a/packages/twenty-apps/community/mailchimp-synchronizer/tsconfig.json b/packages/twenty-apps/community/mailchimp-synchronizer/tsconfig.json deleted file mode 100644 index 17d258af13..0000000000 --- a/packages/twenty-apps/community/mailchimp-synchronizer/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/mailchimp-synchronizer/yarn.lock b/packages/twenty-apps/community/mailchimp-synchronizer/yarn.lock deleted file mode 100644 index 25186ac547..0000000000 --- a/packages/twenty-apps/community/mailchimp-synchronizer/yarn.lock +++ /dev/null @@ -1,2100 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@fastify/busboy@npm:^2.0.0": - version: 2.1.1 - resolution: "@fastify/busboy@npm:2.1.1" - checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 - languageName: node - linkType: hard - -"@genql/cli@npm:^3.0.3": - version: 3.0.5 - resolution: "@genql/cli@npm:3.0.5" - dependencies: - "@graphql-tools/graphql-file-loader": "npm:^7.5.11" - "@graphql-tools/load": "npm:^7.8.6" - fs-extra: "npm:^10.1.0" - graphql: "npm:^16.6.0" - kleur: "npm:^4.1.5" - listr: "npm:^0.14.3" - lodash: "npm:^4.17.21" - mkdirp: "npm:^0.5.1" - native-fetch: "npm:^4.0.2" - prettier: "npm:^2.8.0" - qs: "npm:^6.11.0" - rimraf: "npm:^2.6.3" - undici: "npm:^5.18.0" - yargs: "npm:^15.3.1" - bin: - genql: dist/cli.js - checksum: 10c0/646d4da8986741a8f1b610bd8cfb5bc26cd9a856de671461e4ca87fb05443f37dd0edfb3b30ceaa34cd049077873afa07febfd4714dd2e0681fb07484e19a080 - languageName: node - linkType: hard - -"@graphql-tools/graphql-file-loader@npm:^7.5.11": - version: 7.5.17 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" - dependencies: - "@graphql-tools/import": "npm:6.7.18" - "@graphql-tools/utils": "npm:^9.2.1" - globby: "npm:^11.0.3" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/f737f14357731ad01da57755e1cf26ce375b475209d6ab7e4b656b56191a8979d2ab7dd5d1c54a1f11e04374f7a373fa95ea5ec6a001d0cef913ea208fadc65b - languageName: node - linkType: hard - -"@graphql-tools/import@npm:6.7.18": - version: 6.7.18 - resolution: "@graphql-tools/import@npm:6.7.18" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - resolve-from: "npm:5.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/d33e37a1879dd43ac2851c9bac2f2873c58bb3687f1c06e159760dbb5e540ef074d688df70cc6dbd3ee5de48d437878df8f65a7c65ae80bd025bf98f2d615732 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^7.8.6": - version: 7.8.14 - resolution: "@graphql-tools/load@npm:7.8.14" - dependencies: - "@graphql-tools/schema": "npm:^9.0.18" - "@graphql-tools/utils": "npm:^9.2.1" - p-limit: "npm:3.1.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/1fa036ac596ccf48f350aa545d108c173184d9b53247f9e21c0d4ba96c5cba4a0b44281f9154f122e1e8e9d9d6eab93a5b2618ca8a797969bde1e75c1d45e786 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:^8.4.1": - version: 8.4.2 - resolution: "@graphql-tools/merge@npm:8.4.2" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/2df55222b48e010e683572f456cf265aabae5748c59f7c1260c66dec9794b7a076d3706f04da969b77f0a32c7ccb4551fee30125931d3fe9c98a8806aae9a3f4 - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:^9.0.18": - version: 9.0.19 - resolution: "@graphql-tools/schema@npm:9.0.19" - dependencies: - "@graphql-tools/merge": "npm:^8.4.1" - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/42fd8ca8d3c8d60b583077c201980518482ff0cd5ed0c1f14bd9b835a2689ad41d02cbd3478f7d7dea7aec1227f7639fd5deb5e6360852a2e542b96b44bfb7a4 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^9.2.1": - version: 9.2.1 - resolution: "@graphql-tools/utils@npm:9.2.1" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.1.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/37a7bd7e14d28ff1bacc007dca84bc6cef2d7d7af9a547b5dbe52fcd134afddd6d4a7b2148cfbaff5ddba91a868453d597da77bd0457fb0be15928f916901606 - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:^3.1.1": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/94e9d75c1f178bbae8d874f5a9361708a3350c8def7eaeb6920f2c820e82403b7d4f55b3735856d68e145e86c85cbfe2adc444fdc25519cd51f108697e99346c - languageName: node - linkType: hard - -"@inquirer/checkbox@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/checkbox@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 - languageName: node - linkType: hard - -"@inquirer/confirm@npm:^3.2.0": - version: 3.2.0 - resolution: "@inquirer/confirm@npm:3.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/a2cbfc8ae9c880bba4cce1993f5c399fb0d12741fdd574917c87fceb40ece62ffa60e35aaadf4e62d7c114f54008e45aee5d6d90497bb62d493996c02725d243 - languageName: node - linkType: hard - -"@inquirer/core@npm:^9.1.0": - version: 9.2.1 - resolution: "@inquirer/core@npm:9.2.1" - dependencies: - "@inquirer/figures": "npm:^1.0.6" - "@inquirer/type": "npm:^2.0.0" - "@types/mute-stream": "npm:^0.0.4" - "@types/node": "npm:^22.5.5" - "@types/wrap-ansi": "npm:^3.0.0" - ansi-escapes: "npm:^4.3.2" - cli-width: "npm:^4.1.0" - mute-stream: "npm:^1.0.0" - signal-exit: "npm:^4.1.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^6.2.0" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 - languageName: node - linkType: hard - -"@inquirer/editor@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/editor@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - external-editor: "npm:^3.1.0" - checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee - languageName: node - linkType: hard - -"@inquirer/expand@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/expand@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 - languageName: node - linkType: hard - -"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6": - version: 1.0.15 - resolution: "@inquirer/figures@npm:1.0.15" - checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 - languageName: node - linkType: hard - -"@inquirer/input@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/input@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f - languageName: node - linkType: hard - -"@inquirer/number@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/number@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 - languageName: node - linkType: hard - -"@inquirer/password@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/password@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f - languageName: node - linkType: hard - -"@inquirer/prompts@npm:^5.5.0": - version: 5.5.0 - resolution: "@inquirer/prompts@npm:5.5.0" - dependencies: - "@inquirer/checkbox": "npm:^2.5.0" - "@inquirer/confirm": "npm:^3.2.0" - "@inquirer/editor": "npm:^2.2.0" - "@inquirer/expand": "npm:^2.3.0" - "@inquirer/input": "npm:^2.3.0" - "@inquirer/number": "npm:^1.1.0" - "@inquirer/password": "npm:^2.2.0" - "@inquirer/rawlist": "npm:^2.3.0" - "@inquirer/search": "npm:^1.1.0" - "@inquirer/select": "npm:^2.5.0" - checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 - languageName: node - linkType: hard - -"@inquirer/rawlist@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/rawlist@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 - languageName: node - linkType: hard - -"@inquirer/search@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/search@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 - languageName: node - linkType: hard - -"@inquirer/select@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/select@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c - languageName: node - linkType: hard - -"@inquirer/type@npm:^1.5.3": - version: 1.5.5 - resolution: "@inquirer/type@npm:1.5.5" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 - languageName: node - linkType: hard - -"@inquirer/type@npm:^2.0.0": - version: 2.0.0 - resolution: "@inquirer/type@npm:2.0.0" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@samverschueren/stream-to-observable@npm:^0.3.0": - version: 0.3.1 - resolution: "@samverschueren/stream-to-observable@npm:0.3.1" - dependencies: - any-observable: "npm:^0.3.0" - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true - checksum: 10c0/0d874453f6bc2460d71783292291f52feb36c2a75314b1072a6ffe6206562f33e9d664a554348d565a6b54da9041d75070371052545bc329caaa52f64216987f - languageName: node - linkType: hard - -"@types/mute-stream@npm:^0.0.4": - version: 0.0.4 - resolution: "@types/mute-stream@npm:0.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/944730fd7b398c5078de3c3d4d0afeec8584283bc694da1803fdfca14149ea385e18b1b774326f1601baf53898ce6d121a952c51eb62d188ef6fcc41f725c0dc - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 25.0.3 - resolution: "@types/node@npm:25.0.3" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/b7568f0d765d9469621615e2bb257c7fd1953d95e9acbdb58dffb6627a2c4150d405a4600aa1ad8a40182a94fe5f903cafd3c0a2f5132814debd0e3bfd61f835 - languageName: node - linkType: hard - -"@types/node@npm:^22.5.5": - version: 22.19.3 - resolution: "@types/node@npm:22.19.3" - dependencies: - undici-types: "npm:~6.21.0" - checksum: 10c0/a30a75d503da795ddbd5f8851014f3e91925c2a63fa3f14128d54c998f25d682dfba96dc9589c73cf478b87a16d88beb790b11697bb8cd5bee913079237a58f2 - languageName: node - linkType: hard - -"@types/node@npm:^24.7.2": - version: 24.10.0 - resolution: "@types/node@npm:24.10.0" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/f82ed7194e16f5590ef7afdc20c6d09068c76d50278b485ede8f0c5749683536e3064ffa8def8db76915196afb3724b854aa5723c64d6571b890b14492943b46 - languageName: node - linkType: hard - -"@types/wrap-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/wrap-ansi@npm:3.0.0" - checksum: 10c0/8d8f53363f360f38135301a06b596c295433ad01debd082078c33c6ed98b05a5c8fe8853a88265432126096084f4a135ec1564e3daad631b83296905509f90b3 - languageName: node - linkType: hard - -"ansi-escapes@npm:^3.0.0": - version: 3.2.0 - resolution: "ansi-escapes@npm:3.2.0" - checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 - languageName: node - linkType: hard - -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"any-observable@npm:^0.3.0": - version: 0.3.0 - resolution: "any-observable@npm:0.3.0" - checksum: 10c0/104c2b79c2ac7e6c75b35f8fd62babf73015668f22bd25336c6f848350d91f9e7daf2fddbf1c1b76fe795e89fbc91b49f70a2aec5c69f1acf0562c344f36042b - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 - languageName: node - linkType: hard - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"axios@npm:^1.13.2, axios@npm:^1.6.0": - version: 1.13.2 - resolution: "axios@npm:1.13.2" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/e8a42e37e5568ae9c7a28c348db0e8cf3e43d06fcbef73f0048669edfe4f71219664da7b6cc991b0c0f01c28a48f037c515263cb79be1f1ae8ff034cd813867b - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2": - version: 1.0.4 - resolution: "call-bound@npm:1.0.4" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - get-intrinsic: "npm:^1.3.0" - checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - -"chalk@npm:^1.0.0, chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - dependencies: - ansi-styles: "npm:^2.2.1" - escape-string-regexp: "npm:^1.0.2" - has-ansi: "npm:^2.0.0" - strip-ansi: "npm:^3.0.0" - supports-color: "npm:^2.0.0" - checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 - languageName: node - linkType: hard - -"chalk@npm:^2.4.1": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:^5.3.0": - version: 5.6.2 - resolution: "chalk@npm:5.6.2" - checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d - languageName: node - linkType: hard - -"chokidar@npm:^4.0.0": - version: 4.0.3 - resolution: "chokidar@npm:4.0.3" - dependencies: - readdirp: "npm:^4.0.1" - checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad - languageName: node - linkType: hard - -"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-cursor@npm:2.1.0" - dependencies: - restore-cursor: "npm:^2.0.0" - checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda - languageName: node - linkType: hard - -"cli-truncate@npm:^0.2.1": - version: 0.2.1 - resolution: "cli-truncate@npm:0.2.1" - dependencies: - slice-ansi: "npm:0.0.4" - string-width: "npm:^1.0.1" - checksum: 10c0/c6caa5e2b70d841c42f4a2270d6fc7129df915f8911e4afa90c79231ccc857cd819a2c90e0707fde04e51ce56b4d71646b843f6cbaff4f7cdcb3b91ed51f6e89 - languageName: node - linkType: hard - -"cli-width@npm:^4.1.0": - version: 4.1.0 - resolution: "cli-width@npm:4.1.0" - checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^6.2.0" - checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 - languageName: node - linkType: hard - -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"commander@npm:^12.0.0": - version: 12.1.0 - resolution: "commander@npm:12.1.0" - checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"date-fns@npm:^1.27.2": - version: 1.30.1 - resolution: "date-fns@npm:1.30.1" - checksum: 10c0/bad6ad7c15180121e15d61ad62a4a214c108d66f35b35f5eeb6ade837a3c29aa4444b9528a93a5374b95ba11231c142276351bf52f4d168676f9a1e17ce3726a - languageName: node - linkType: hard - -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"dotenv@npm:^16.4.0": - version: 16.6.1 - resolution: "dotenv@npm:16.6.1" - checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"elegant-spinner@npm:^1.0.1": - version: 1.0.1 - resolution: "elegant-spinner@npm:1.0.1" - checksum: 10c0/df607c83c20fc3ce56c514175dd5d1ee7f667da00cee13d04d32c70d55e76555091fa236689e691cf7dedba17b0020fec635e499cdde84dbea2ef8639314e5f8 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"external-editor@npm:^3.1.0": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.20.1 - resolution: "fastq@npm:1.20.1" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e - languageName: node - linkType: hard - -"figures@npm:^1.7.0": - version: 1.7.0 - resolution: "figures@npm:1.7.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - object-assign: "npm:^4.1.0" - checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 - languageName: node - linkType: hard - -"figures@npm:^2.0.0": - version: 2.0.0 - resolution: "figures@npm:2.0.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"fs-extra@npm:^10.1.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-extra@npm:^11.2.0": - version: 11.3.3 - resolution: "fs-extra@npm:11.3.3" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/984924ff4104e3e9f351b658a864bf3b354b2c90429f57aec0acd12d92c4e6b762cbacacdffb4e745b280adce882e1f980c485d9f02c453f769ab4e7fc646ce3 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:^7.1.3": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"globby@npm:^11.0.3": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphql-sse@npm:^2.5.4": - version: 2.6.0 - resolution: "graphql-sse@npm:2.6.0" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 10c0/e05f0b5c8539d61e5ce34af8e0bb418c02bf922d6a7f9232a9abd53c77df5654684ca14f674ac771645c8fba9c37ce666c5d06f46eef54ea07e63653468065b0 - languageName: node - linkType: hard - -"graphql@npm:^16.6.0, graphql@npm:^16.8.1": - version: 16.12.0 - resolution: "graphql@npm:16.12.0" - checksum: 10c0/b6fffa4e8a4e4a9933ebe85e7470b346dbf49050c1a482fac5e03e4a1a7bed2ecd3a4c97e29f04457af929464bc5e4f2aac991090c2f320111eef26e902a5c75 - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"indent-string@npm:^3.0.0": - version: 3.2.0 - resolution: "indent-string@npm:3.2.0" - checksum: 10c0/91b6d61621d24944c5c4d365d6f1ff4a490264ccaf1162a602faa0d323e69231db2180ad4ccc092c2f49cf8888cdb3da7b73e904cc0fdeec40d0bfb41ceb9478 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"inquirer@npm:^10.0.0": - version: 10.2.2 - resolution: "inquirer@npm:10.2.2" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/prompts": "npm:^5.5.0" - "@inquirer/type": "npm:^1.5.3" - "@types/mute-stream": "npm:^0.0.4" - ansi-escapes: "npm:^4.3.2" - mute-stream: "npm:^1.0.0" - run-async: "npm:^3.0.0" - rxjs: "npm:^7.8.1" - checksum: 10c0/09bcff887a968ce29d3a8cba749ef35b6531b7fb7bf5b28aaf3e10aebae07af2494dd3ec67ae6f1dabe76da1064cfe4514098d4c7658fcaf3fd480b2975d7163 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: "npm:^1.0.0" - checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-observable@npm:^1.1.0": - version: 1.1.0 - resolution: "is-observable@npm:1.1.0" - dependencies: - symbol-observable: "npm:^1.1.0" - checksum: 10c0/cf3166b0822f70ad06e7851e09430166ce658349d54aaa64c93a03320420b9285735821b23164bdce741ff83a86730ac3e53035ce4e2511ed843dbff4105bfa2 - languageName: node - linkType: hard - -"is-promise@npm:^2.1.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"jsonc-parser@npm:^3.2.0": - version: 3.3.1 - resolution: "jsonc-parser@npm:3.3.1" - checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.2.0 - resolution: "jsonfile@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d - languageName: node - linkType: hard - -"kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a - languageName: node - linkType: hard - -"listr-silent-renderer@npm:^1.1.1": - version: 1.1.1 - resolution: "listr-silent-renderer@npm:1.1.1" - checksum: 10c0/a13e08ebf863516a757bce4887f05290070772113d89095e9f51a07cf0b11a43a7563a67ff3b287c752c08f6d781fdb2123b02957534e3e0675fb564f2a42e1b - languageName: node - linkType: hard - -"listr-update-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-update-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^1.1.3" - cli-truncate: "npm:^0.2.1" - elegant-spinner: "npm:^1.0.1" - figures: "npm:^1.7.0" - indent-string: "npm:^3.0.0" - log-symbols: "npm:^1.0.2" - log-update: "npm:^2.3.0" - strip-ansi: "npm:^3.0.1" - peerDependencies: - listr: ^0.14.2 - checksum: 10c0/8ade44bf3dc6146c8e0178000619439e8889792c4689b66be6ce82bd459f5fe462ecb34b05147fb206a8ad60e6d4e6f34c9f48038e18366f867fd972688b8edc - languageName: node - linkType: hard - -"listr-verbose-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-verbose-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^2.4.1" - cli-cursor: "npm:^2.1.0" - date-fns: "npm:^1.27.2" - figures: "npm:^2.0.0" - checksum: 10c0/041cd1e82da7054f27ae0a914e98b40d15faf9f950ef850578fc6241d3fff3c2d7158a4f6226006e566b4c47bf445be2d254dd1ce5c16569a3a5dcd575bec656 - languageName: node - linkType: hard - -"listr@npm:^0.14.3": - version: 0.14.3 - resolution: "listr@npm:0.14.3" - dependencies: - "@samverschueren/stream-to-observable": "npm:^0.3.0" - is-observable: "npm:^1.1.0" - is-promise: "npm:^2.1.0" - is-stream: "npm:^1.1.0" - listr-silent-renderer: "npm:^1.1.1" - listr-update-renderer: "npm:^0.5.0" - listr-verbose-renderer: "npm:^0.5.0" - p-map: "npm:^2.0.0" - rxjs: "npm:^6.3.3" - checksum: 10c0/753d518218c423f46bee8eeacccecadfd2e414ba9c0f602e7f85fe3f6fa18404dfab0812433aeda4683ee2548358488f597ac1a3d321196baec5d3149b200b10 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 - languageName: node - linkType: hard - -"lodash.camelcase@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.camelcase@npm:4.3.0" - checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 - languageName: node - linkType: hard - -"lodash.capitalize@npm:^4.2.1": - version: 4.2.1 - resolution: "lodash.capitalize@npm:4.2.1" - checksum: 10c0/b289326497c2e24d6b8afa2af2ca4e068ef6ef007ade36bfb6f70af77ce10ea3f090eeee947d5fdcf2db4bcfa4703c8c10a5857a2b39e308bddfd1d11ad35970 - languageName: node - linkType: hard - -"lodash.kebabcase@npm:^4.1.1": - version: 4.1.1 - resolution: "lodash.kebabcase@npm:4.1.1" - checksum: 10c0/da5d8f41dbb5bc723d4bf9203d5096ca8da804d6aec3d2b56457156ba6c8d999ff448d347ebd97490da853cb36696ea4da09a431499f1ee8deb17b094ecf4e33 - languageName: node - linkType: hard - -"lodash.startcase@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.startcase@npm:4.4.0" - checksum: 10c0/bd82aa87a45de8080e1c5ee61128c7aee77bf7f1d86f4ff94f4a6d7438fc9e15e5f03374b947be577a93804c8ad6241f0251beaf1452bf716064eeb657b3a9f0 - languageName: node - linkType: hard - -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"log-symbols@npm:^1.0.2": - version: 1.0.2 - resolution: "log-symbols@npm:1.0.2" - dependencies: - chalk: "npm:^1.0.0" - checksum: 10c0/c64e1fe41d0d043840f8b592d043b8607a836b846506f525a53d99d578561f02f97b2cba1d2b3c30bae5311d64b308d5a392a9930d252b906a9042fc2877da7a - languageName: node - linkType: hard - -"log-update@npm:^2.3.0": - version: 2.3.0 - resolution: "log-update@npm:2.3.0" - dependencies: - ansi-escapes: "npm:^3.0.0" - cli-cursor: "npm:^2.0.0" - wrap-ansi: "npm:^3.0.1" - checksum: 10c0/9bf21b138801ab4770a2bfa735161cf005b869360eaf5003a84ba64ddc5f5c3ce7217f4f1fa79d9c1f510d792213b2c9800327228e94df05859d19b716215d90 - languageName: node - linkType: hard - -"mailchimp-synchronizer@workspace:.": - version: 0.0.0-use.local - resolution: "mailchimp-synchronizer@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - axios: "npm:^1.13.2" - twenty-sdk: "npm:0.2.4" - languageName: unknown - linkType: soft - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mimic-fn@npm:^1.0.0": - version: 1.2.0 - resolution: "mimic-fn@npm:1.2.0" - checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba - languageName: node - linkType: hard - -"minimatch@npm:^3.1.1": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - -"mkdirp@npm:^0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c - languageName: node - linkType: hard - -"native-fetch@npm:^4.0.2": - version: 4.0.2 - resolution: "native-fetch@npm:4.0.2" - peerDependencies: - undici: "*" - checksum: 10c0/e3b824721daaa628086d9dcd02e8eb12f0a6c5e13a1d182682bae238d80c9bbf3dfd6314a94692ebe20316aa354476804b4df148201d066b46fc552a5794cfab - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: "npm:^1.0.1" - checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b - languageName: node - linkType: hard - -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.0": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3": - version: 1.13.4 - resolution: "object-inspect@npm:1.13.4" - checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"onetime@npm:^2.0.0": - version: 2.0.1 - resolution: "onetime@npm:2.0.1" - dependencies: - mimic-fn: "npm:^1.0.0" - checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 - languageName: node - linkType: hard - -"p-limit@npm:3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 - languageName: node - linkType: hard - -"p-map@npm:^2.0.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"prettier@npm:^2.8.0": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"qs@npm:^6.11.0": - version: 6.14.0 - resolution: "qs@npm:6.14.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"readdirp@npm:^4.0.1": - version: 4.1.2 - resolution: "readdirp@npm:4.1.2" - checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - -"restore-cursor@npm:^2.0.0": - version: 2.0.0 - resolution: "restore-cursor@npm:2.0.0" - dependencies: - onetime: "npm:^2.0.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.1.0 - resolution: "reusify@npm:1.1.0" - checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa - languageName: node - linkType: hard - -"rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 - languageName: node - linkType: hard - -"run-async@npm:^3.0.0": - version: 3.0.0 - resolution: "run-async@npm:3.0.0" - checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"rxjs@npm:^6.3.3": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: "npm:^1.9.0" - checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe - languageName: node - linkType: hard - -"rxjs@npm:^7.8.1": - version: 7.8.2 - resolution: "rxjs@npm:7.8.2" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - side-channel-map: "npm:^1.0.1" - checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 - languageName: node - linkType: hard - -"side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - side-channel-list: "npm:^1.0.0" - side-channel-map: "npm:^1.0.1" - side-channel-weakmap: "npm:^1.0.2" - checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.2": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.1.0": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - -"slice-ansi@npm:0.0.4": - version: 0.0.4 - resolution: "slice-ansi@npm:0.0.4" - checksum: 10c0/997d4cc73e34aa8c0f60bdb71701b16c062cc4acd7a95e3b10e8c05d790eb5e735d9b470270dc6f443b1ba21492db7ceb849d5c93011d1256061bf7ed7216c7a - languageName: node - linkType: hard - -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: "npm:^1.0.0" - is-fullwidth-code-point: "npm:^1.0.0" - strip-ansi: "npm:^3.0.0" - checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e - languageName: node - linkType: hard - -"string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 - languageName: node - linkType: hard - -"string-width@npm:^4.1.0, string-width@npm:^4.2.0": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: "npm:^3.0.0" - checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"symbol-observable@npm:^1.1.0": - version: 1.2.0 - resolution: "symbol-observable@npm:1.2.0" - checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"tslib@npm:^1.9.0": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - -"tslib@npm:^2.1.0, tslib@npm:^2.4.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"twenty-sdk@npm:0.2.4": - version: 0.2.4 - resolution: "twenty-sdk@npm:0.2.4" - dependencies: - "@genql/cli": "npm:^3.0.3" - axios: "npm:^1.6.0" - chalk: "npm:^5.3.0" - chokidar: "npm:^4.0.0" - commander: "npm:^12.0.0" - dotenv: "npm:^16.4.0" - fs-extra: "npm:^11.2.0" - graphql: "npm:^16.8.1" - graphql-sse: "npm:^2.5.4" - inquirer: "npm:^10.0.0" - jsonc-parser: "npm:^3.2.0" - lodash.camelcase: "npm:^4.3.0" - lodash.capitalize: "npm:^4.2.1" - lodash.kebabcase: "npm:^4.1.1" - lodash.startcase: "npm:^4.4.0" - typescript: "npm:^5.9.2" - uuid: "npm:^13.0.0" - bin: - twenty: dist/cli.cjs - checksum: 10c0/91bcc2c6a96d8bb7997c6584de338d370ffd4cebbc052ffdd5dd8bb8894f1851c039601a2ce0bb0f3b97e210f3bc877de0572125b8c3b601f6e1baac2f99a8c5 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 - languageName: node - linkType: hard - -"typescript@npm:^5.9.2": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 - languageName: node - linkType: hard - -"undici-types@npm:~6.21.0": - version: 6.21.0 - resolution: "undici-types@npm:6.21.0" - checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"undici@npm:^5.18.0": - version: 5.29.0 - resolution: "undici@npm:5.29.0" - dependencies: - "@fastify/busboy": "npm:^2.0.0" - checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unixify@npm:^1.0.0": - version: 1.0.0 - resolution: "unixify@npm:1.0.0" - dependencies: - normalize-path: "npm:^2.1.1" - checksum: 10c0/8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e - languageName: node - linkType: hard - -"uuid@npm:^13.0.0": - version: 13.0.0 - resolution: "uuid@npm:13.0.0" - bin: - uuid: dist-node/bin/uuid - checksum: 10c0/950e4c18d57fef6c69675344f5700a08af21e26b9eff2bf2180427564297368c538ea11ac9fb2e6528b17fc3966a9fd2c5049361b0b63c7d654f3c550c9b3d67 - languageName: node - linkType: hard - -"value-or-promise@npm:^1.0.12": - version: 1.0.12 - resolution: "value-or-promise@npm:1.0.12" - checksum: 10c0/b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e - languageName: node - linkType: hard - -"wrap-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "wrap-ansi@npm:3.0.1" - dependencies: - string-width: "npm:^2.1.1" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/ad6fed8f242c26755badaf452da154122d0d862f8b7aab56e758466857f230efafdc5fbffca026650b947ac3fc0eb563df5c05b9e2190a52a4a68f4eef3d4555 - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 - languageName: node - linkType: hard - -"yargs@npm:^15.3.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: "npm:^6.0.0" - decamelize: "npm:^1.2.0" - find-up: "npm:^4.1.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^4.2.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^18.1.2" - checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard - -"yoctocolors-cjs@npm:^2.1.2": - version: 2.1.3 - resolution: "yoctocolors-cjs@npm:2.1.3" - checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/meeting-transcript/.env.example b/packages/twenty-apps/community/meeting-transcript/.env.example deleted file mode 100644 index 3283364c30..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/.env.example +++ /dev/null @@ -1,15 +0,0 @@ -# .env.example -# API key for authenticating with the OpenAI-compatible service (Groq, OpenAI, etc.) -AI_PROVIDER_API_KEY=your-openai-or-groq-api-key-here - -# API key generated from Twenty CRM instance (Settings > API & Webhooks) -TWENTY_API_KEY=your-twenty-api-key-here - -# Base URL for the Twenty CRM server -TWENTY_API_URL=https://your-instance.twenty.com - -# Secret token used to authenticate incoming webhook requests -WEBHOOK_SECRET_TOKEN=your-webhook-secret-token-here - -# Base URL for OpenAI-compatible API (defaults to OpenAI, can use Groq or other providers) -AI_PROVIDER_API_BASE_URL=https://api.openai.com/v1/ diff --git a/packages/twenty-apps/community/meeting-transcript/.gitignore b/packages/twenty-apps/community/meeting-transcript/.gitignore deleted file mode 100644 index 4f0e650be6..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.yarn/install-state.gz -.env diff --git a/packages/twenty-apps/community/meeting-transcript/.yarnrc.yml b/packages/twenty-apps/community/meeting-transcript/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/meeting-transcript/README.md b/packages/twenty-apps/community/meeting-transcript/README.md deleted file mode 100644 index 6b890e5a74..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/README.md +++ /dev/null @@ -1,182 +0,0 @@ -## 🧠 AI-Powered Meeting Transcript to CRM Data Integration - ---- - -### Overview - -This feature automatically transforms meeting transcripts into structured CRM data using AI. -When unstructured meeting notes are received via a **webhook**, the system processes them and creates organized **notes, tasks, and assignments** directly in Twenty CRM. - ---- - -### Key Features - -- šŸ¤– **AI-Powered Analysis:** - Extracts summaries, action items, assignees, and due dates from natural language transcripts. - -- šŸ—‚ **Smart Task Consolidation:** - Merges related sub-tasks into unified deliverables - _(e.g., `"draft"` + `"review"` + `"present"` → one consolidated task)._ - -- šŸ§‘ā€šŸ¤ā€šŸ§‘ **Intelligent Assignment:** - Uses GraphQL member lookup to match extracted assignee names to workspace member IDs with flexible string matching. - -- šŸ”— **Automatic Linking:** - Links generated **notes** and **tasks** to relevant contacts using `noteTargets` and `taskTargets`. - -- šŸ“… **Date Parsing:** - Converts relative date expressions (e.g., ā€œnext Mondayā€, ā€œend of weekā€) into **ISO-formatted dates** for accurate scheduling. - ---- - -## Requirements - -- [Twenty CLI](https://www.npmjs.com/package/twenty-cli) - Install globally: `npm install -g twenty-cli` -- Twenty CRM instance with API access -- API key from [Settings > API & Webhooks](https://twenty.com/settings/api-webhooks) -- OpenAI API key or compatible service (Groq, etc.) - -## Installation - -1. **Authenticate with Twenty CLI:** - ```bash - twenty auth login - ``` - -2. **Configure environment variables:** - - Copy `.env.example` to `.env` and fill in your credentials: - ```bash - cp .env.example .env - ``` - - Required environment variables: - - `AI_PROVIDER_API_KEY`: Your OpenAI or Groq API key - - `TWENTY_API_KEY`: Generated from your Twenty CRM instance - - `TWENTY_API_URL`: Your Twenty CRM instance URL (e.g., https://your-instance.twenty.com) - - `WEBHOOK_SECRET_TOKEN`: Secret token for webhook authentication - - `AI_PROVIDER_API_BASE_URL`: Base URL for OpenAI-compatible API (defaults to https://api.openai.com/v1) - -3. **Install dependencies:** - ```bash - yarn install - ``` - -4. **Deploy to your Twenty workspace:** - ```bash - twenty app sync - ``` - -## Configuration - -### Using Groq Instead of OpenAI - -To use Groq's API (which is compatible with OpenAI's SDK), set: -```bash -AI_PROVIDER_API_BASE_URL=https://api.groq.com/openai/v1 -AI_PROVIDER_API_KEY=your-groq-api-key -``` - -### Using OpenAI - -To use OpenAI's official API: -```bash -AI_PROVIDER_API_BASE_URL=https://api.openai.com/v1 -AI_PROVIDER_API_KEY=your-openai-api-key -``` - -### šŸ”— Webhook Setup (inside Twenty) - -Navigate to: -**Twenty → Workspace Settings → APIs & Webhook → + New Webhook** - -| Field | Value | -|--------|-------------------------------------------| -| **Method** | `POST` | -| **URL** | your deployed endpoint URL | -| **Secret** | Generate one & store same in `.env` | - -## Usage - -Send a POST request to your webhook endpoint with the following payload: - -```json -{ - "transcript": "During the Project Phoenix Kick-off on November 1st, 2025...", - "meetingTitle": "Project Phoenix Kick-off", - "meetingDate": "2025-11-01", - "participants": [ - "Brian Chesky", - "Dario Amodei", - "Iqra Khan" - ], - "token": "your-webhook-secret-token", - "relatedPersonId": "person-uuid-from-crm" -} -``` - -### Response - -```json -{ - "success": true, - "noteId": "note-uuid", - "taskIds": ["task-uuid-1", "task-uuid-2"], - "summary": { - "noteCreated": true, - "tasksCreated": 2, - "actionItemsProcessed": 2, - "commitmentsProcessed": 0 - }, - "executionLogs": [ - "āœ… Validation passed", - "šŸ¤– Starting transcript analysis...", - "āœ… Analysis complete" - ] -} -``` - -## Technical Stack - -| Component | Description | -|----------|-------------| -| **AI Provider** | Groq (via OpenAI SDK) using the `GPT-OSS-20B` model | -| **APIs** | Twenty CRM REST API + GraphQL (for member resolution) | -| **Runtime** | Webhook-triggered serverless function written in **TypeScript** | - ---- -## Development - -### Build -```bash -yarn build -``` - -### Type Check -```bash -yarn type-check -``` - - -## Environment Variables - -| Variable | Required | Secret | Description | -|----------|----------|--------|-------------| -| `AI_PROVIDER_API_KEY` | Yes | Yes | API key for OpenAI-compatible service | -| `TWENTY_API_KEY` | Yes | Yes | Twenty CRM API authentication token | -| `TWENTY_API_URL` | Yes | No | Base URL for Twenty CRM instance | -| `WEBHOOK_SECRET_TOKEN` | Yes | Yes | Secret for webhook request validation | -| `AI_PROVIDER_API_BASE_URL` | No | No | Base URL for AI service (defaults to OpenAI) | - - - -## Demo Preview - -The demo below shows the full workflow where a raw meeting transcript is processed and automatically converted into structured **Notes + Tasks** inside Twenty CRM. - -### Process-Transcript Screenshot -![process](https://drive.google.com/uc?export=view&id=1IMayfb77uAr5lvtY7XLn8Yq-_26pxMCY) - -## Demo Video -[Watch Demo Video](https://drive.google.com/file/d/1WpzrNBbKBFD5ztGwNuS_SMi7yJBr5AK8/view?usp=sharing) - diff --git a/packages/twenty-apps/community/meeting-transcript/application.config.ts b/packages/twenty-apps/community/meeting-transcript/application.config.ts deleted file mode 100644 index eaa11c9e20..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/application.config.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/application'; - -const config: ApplicationConfig = { - universalIdentifier: 'f15a0c72-f7b4-4d20-9e97-ade1122d4bd7', - displayName: 'Meeting Transcript', - description: 'AI Meeting Transcript Integration for Hacktoberfest', - applicationVariables: { - TWENTY_API_KEY: { - universalIdentifier: 'c5a4310b-6744-4fda-ad0a-d1c6fea0539b', - isSecret: true, - value: '', - description: - 'API key for the Twenty CRM instance (used for authentication).', - }, - AI_PROVIDER_API_KEY: { - universalIdentifier: '7b0f965e-0192-41b5-b390-45a7e5a761b8', - isSecret: true, - value: '', - description: - 'API key for authenticating with the OpenAI-compatible service (supports OpenAI, Groq, and other providers).', - }, - TWENTY_API_URL: { - universalIdentifier: '84311303-1220-440c-a4fb-0be2d74d267b', - isSecret: false, - value: 'https://unpaid-interns.twenty.com', - description: - 'The base URL for the Twenty CRM server (e.g., https://your-instance.twenty.com).', - }, - WEBHOOK_SECRET_TOKEN: { - universalIdentifier: '187c39c9-8e2a-4086-94b3-59935d4e1a93', - isSecret: true, - value: '', - description: - 'Secret token used to authenticate incoming webhook requests.', - }, - AI_PROVIDER_API_BASE_URL: { - universalIdentifier: '15974ed8-4efb-4ebc-9f53-5b0b36183fc4', - isSecret: false, - value: 'https://api.openai.com/v1', - description: - 'Base URL for OpenAI-compatible API. Defaults to OpenAI, but can be changed to use Groq (https://api.groq.com/openai/v1) or other providers.', - }, - }, -}; - -export default config; diff --git a/packages/twenty-apps/community/meeting-transcript/package.json b/packages/twenty-apps/community/meeting-transcript/package.json deleted file mode 100644 index c02c388c7f..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "meeting-transcript", - "version": "0.0.1", - "type": "module", - "license": "MIT", - "engines": { - "node": "^18.0.0 || ^20.0.0 || ^22.0.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "scripts": { - "build": "tsc", - "type-check": "tsc --noEmit" - }, - "dependencies": { - "axios": "^1.7.0", - "openai": "^4.67.0", - "twenty-sdk": "0.0.3" - }, - "devDependencies": { - "@types/node": "^24.7.2", - "typescript": "^5.6.0" - } -} diff --git a/packages/twenty-apps/community/meeting-transcript/serverlessFunctions/process-transcript/src/index.ts b/packages/twenty-apps/community/meeting-transcript/serverlessFunctions/process-transcript/src/index.ts deleted file mode 100644 index 6812e2afac..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/serverlessFunctions/process-transcript/src/index.ts +++ /dev/null @@ -1,872 +0,0 @@ -import axios from 'axios'; -import OpenAI from 'openai'; -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -type TranscriptWebhookPayload = { - transcript: string; - relatedPersonId: string; - meetingTitle?: string; - meetingDate?: string; - participants?: string[]; - metadata?: Record; - token?: string; -}; - -type ActionItem = { - title: string; - description: string; - assignee?: string; - dueDate?: string; -}; - -type Commitment = { - person: string; - commitment: string; - dueDate?: string; -}; - -type AnalysisResult = { - summary: string; - keyPoints: string[]; - actionItems: ActionItem[]; - commitments: Commitment[]; -}; - -type RichTextData = { - markdown: string; - blocknote: null; -}; - -type TwentyApiResponse = { - id: string; -}; - -const AI_PROVIDER_API_KEY = process.env.AI_PROVIDER_API_KEY; -const WEBHOOK_SECRET_TOKEN = process.env.WEBHOOK_SECRET_TOKEN; -const TWENTY_API_URL = process.env.TWENTY_API_URL; -const AI_PROVIDER_API_BASE_URL = process.env.AI_PROVIDER_API_BASE_URL; - -const LLM_MODEL_ID = 'openai/gpt-oss-20b'; -const OPENAI_TEMPERATURE = 0.3; - -const openai = new OpenAI({ - apiKey: AI_PROVIDER_API_KEY, - baseURL: AI_PROVIDER_API_BASE_URL, -}); - -const getTwentyApiConfig = () => { - const apiKey = process.env.TWENTY_API_KEY; - if (!apiKey) { - throw new Error('TWENTY_API_KEY environment variable is not set'); - } - - const baseUrl = TWENTY_API_URL; - if (!baseUrl) { - throw new Error('TWENTY_API_URL environment variable is not set'); - } - - return { apiKey, baseUrl }; -}; - -const lookupWorkspaceMemberByName = async ( - name: string, -): Promise => { - const { apiKey, baseUrl } = getTwentyApiConfig(); - - try { - const graphqlQuery = { - query: ` - query GetAllWorkspaceMembers { - workspaceMembers { - edges { - node { - id - name { - firstName - lastName - } - } - } - } - } - `, - }; - - const response = await axios.post(`${baseUrl}/graphql`, graphqlQuery, { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - }); - - const edges = response.data?.data?.workspaceMembers?.edges; - - if (!edges || edges.length === 0) { - console.log('āš ļø No workspace members found'); - return null; - } - - const searchName = name.trim().toLowerCase(); - - for (const edge of edges) { - const firstName = edge.node.name?.firstName || ''; - const lastName = edge.node.name?.lastName || ''; - const fullName = `${firstName} ${lastName}`.trim().toLowerCase(); - - if (fullName === searchName) { - console.log( - `āœ… Found workspace member (exact): ${firstName} ${lastName} (ID: ${edge.node.id})`, - ); - return edge.node.id; - } - } - - for (const edge of edges) { - const firstName = edge.node.name?.firstName || ''; - if (firstName.toLowerCase() === searchName) { - const lastName = edge.node.name?.lastName || ''; - console.log( - `āœ… Found workspace member (first name): ${firstName} ${lastName} (ID: ${edge.node.id})`, - ); - return edge.node.id; - } - } - - for (const edge of edges) { - const lastName = edge.node.name?.lastName || ''; - if (lastName.toLowerCase() === searchName) { - const firstName = edge.node.name?.firstName || ''; - console.log( - `āœ… Found workspace member (last name): ${firstName} ${lastName} (ID: ${edge.node.id})`, - ); - return edge.node.id; - } - } - - for (const edge of edges) { - const firstName = edge.node.name?.firstName || ''; - const lastName = edge.node.name?.lastName || ''; - const fullName = `${firstName} ${lastName}`.trim().toLowerCase(); - - if (fullName.includes(searchName) || searchName.includes(fullName)) { - console.log( - `āœ… Found workspace member (partial): ${firstName} ${lastName} (ID: ${edge.node.id})`, - ); - return edge.node.id; - } - } - - console.log(`āš ļø No workspace member found matching: "${name}"`); - return null; - } catch (error) { - if (axios.isAxiosError(error)) { - const errorMessage = error.response?.data - ? JSON.stringify(error.response.data, null, 2) - : error.message; - console.error( - `āŒ Failed to lookup workspace member "${name}": ${errorMessage}`, - ); - } - return null; - } -}; - -const lookupPersonByName = async (name: string): Promise => { - const { apiKey, baseUrl } = getTwentyApiConfig(); - - try { - const graphqlQuery = { - query: ` - query GetAllPeople { - people { - edges { - node { - id - name { - firstName - lastName - } - } - } - } - } - `, - }; - - const response = await axios.post(`${baseUrl}/graphql`, graphqlQuery, { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - }); - - const edges = response.data?.data?.people?.edges; - - if (!edges || edges.length === 0) { - console.log('āš ļø No people found in CRM'); - return null; - } - - const searchName = name.trim().toLowerCase(); - - for (const edge of edges) { - const firstName = edge.node.name?.firstName || ''; - const lastName = edge.node.name?.lastName || ''; - const fullName = `${firstName} ${lastName}`.trim().toLowerCase(); - - if (fullName === searchName) { - console.log( - `āœ… Found person (exact): ${firstName} ${lastName} (ID: ${edge.node.id})`, - ); - return edge.node.id; - } - } - - for (const edge of edges) { - const firstName = edge.node.name?.firstName || ''; - if (firstName.toLowerCase() === searchName) { - const lastName = edge.node.name?.lastName || ''; - console.log( - `āœ… Found person (first name): ${firstName} ${lastName} (ID: ${edge.node.id})`, - ); - return edge.node.id; - } - } - - for (const edge of edges) { - const lastName = edge.node.name?.lastName || ''; - if (lastName.toLowerCase() === searchName) { - const firstName = edge.node.name?.firstName || ''; - console.log( - `āœ… Found person (last name): ${firstName} ${lastName} (ID: ${edge.node.id})`, - ); - return edge.node.id; - } - } - - for (const edge of edges) { - const firstName = edge.node.name?.firstName || ''; - const lastName = edge.node.name?.lastName || ''; - const fullName = `${firstName} ${lastName}`.trim().toLowerCase(); - - if (fullName.includes(searchName) || searchName.includes(fullName)) { - console.log( - `āœ… Found person (partial): ${firstName} ${lastName} (ID: ${edge.node.id})`, - ); - return edge.node.id; - } - } - - console.log(`āš ļø No person found matching: "${name}"`); - return null; - } catch (error) { - if (axios.isAxiosError(error)) { - const errorMessage = error.response?.data - ? JSON.stringify(error.response.data, null, 2) - : error.message; - console.error(`āŒ Failed to lookup person "${name}": ${errorMessage}`); - } - return null; - } -}; - -const extractPersonNamesFromDescription = ( - description: string, - participants: string[], -): string[] => { - const foundNames: string[] = []; - - for (const participant of participants) { - if (description.includes(participant)) { - foundNames.push(participant); - continue; - } - - const firstName = participant.split(' ')[0]; - if (firstName && description.includes(firstName)) { - foundNames.push(participant); - } - } - - return foundNames; -}; - -const formatNoteBody = (summary: string, keyPoints: string[]): string => { - const keyPointsList = keyPoints.map((point) => `- ${point}`).join('\n'); - return `## Summary\n\n${summary}\n\n## Key Points\n\n${keyPointsList}\n\n*Generated from meeting transcript*`; -}; - -const linkNoteToPersonREST = async ( - noteId: string, - personId: string, -): Promise => { - const { apiKey, baseUrl } = getTwentyApiConfig(); - - try { - const response = await axios.post( - `${baseUrl}/rest/noteTargets`, - { - noteId: noteId, - personId: personId, - }, - { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - }, - ); - - const noteTargetId = response.data?.data?.createNoteTarget?.id; - - if (noteTargetId) { - console.log( - `āœ… Successfully linked note ${noteId} to person ${personId} (noteTarget: ${noteTargetId})`, - ); - } else { - console.warn(`āš ļø Note linking response received but no ID found`); - } - } catch (error) { - if (axios.isAxiosError(error)) { - const errorMessage = error.response?.data - ? JSON.stringify(error.response.data, null, 2) - : error.message; - const status = error.response?.status; - console.error( - `āŒ Failed to link note to person. Status: ${status}, Error: ${errorMessage}`, - ); - console.error( - `Attempted to link noteId: ${noteId} to personId: ${personId}`, - ); - throw new Error(`Failed to link note to person: ${errorMessage}`); - } - throw error; - } -}; - -const createNoteInTwenty = async ( - summary: string, - keyPoints: string[], - relatedPersonId: string, - meetingTitle?: string, - meetingDate?: string, -): Promise => { - const { apiKey, baseUrl } = getTwentyApiConfig(); - const noteTitle = - meetingTitle || - `Meeting Notes - ${meetingDate || new Date().toLocaleDateString()}`; - const noteBodyMarkdown = formatNoteBody(summary, keyPoints); - - const requestData = { - title: noteTitle, - bodyV2: { - markdown: noteBodyMarkdown, - blocknote: null, - } satisfies RichTextData, - }; - - try { - const response = await axios.post(`${baseUrl}/rest/notes`, requestData, { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - }); - - const responseJson = JSON.stringify(response.data); - console.log('šŸ“¦ Note API Response:', responseJson); - - const noteId = response.data?.data?.createNote?.id; - - if (!noteId) { - const errorMsg = `Note created but ID not found in response. Response structure: ${responseJson}`; - console.error('āŒ', errorMsg); - throw new Error(errorMsg); - } - - console.log(`āœ… Note ID extracted: ${noteId}`); - - await linkNoteToPersonREST(noteId, relatedPersonId); - - return { id: noteId }; - } catch (error) { - if (axios.isAxiosError(error)) { - const errorMessage = error.response?.data - ? JSON.stringify(error.response.data, null, 2) - : error.message; - const status = error.response?.status; - throw new Error( - `Failed to create note: ${errorMessage}. Status: ${status}`, - ); - } - throw error; - } -}; - -const linkTaskToPersonREST = async ( - taskId: string, - personId: string, -): Promise => { - const { apiKey, baseUrl } = getTwentyApiConfig(); - - try { - const response = await axios.post( - `${baseUrl}/rest/taskTargets`, - { - taskId: taskId, - personId: personId, - }, - { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - }, - ); - console.log( - `āœ… Successfully linked task ${taskId} to person ${personId}`, - response.data, - ); - } catch (error) { - if (axios.isAxiosError(error)) { - const errorMessage = error.response?.data - ? JSON.stringify(error.response.data, null, 2) - : error.message; - const status = error.response?.status; - console.error( - `āŒ Failed to link task to person. Status: ${status}, Error: ${errorMessage}`, - ); - console.error( - `Attempted to link taskId: ${taskId} to personId: ${personId}`, - ); - } - } -}; - -const createTaskInTwenty = async ( - actionItem: ActionItem, - relatedPersonId?: string, -): Promise => { - const { apiKey, baseUrl } = getTwentyApiConfig(); - - const taskData: { - title: string; - bodyV2: RichTextData; - dueAt?: string; - assigneeId?: string; - } = { - title: actionItem.title, - bodyV2: { - markdown: actionItem.description, - blocknote: null, - }, - }; - - if (actionItem.assignee) { - console.log(`šŸ” Looking up assignee: "${actionItem.assignee}"`); - const assigneeId = await lookupWorkspaceMemberByName(actionItem.assignee); - if (assigneeId) { - taskData.assigneeId = assigneeId; - console.log( - `āœ… Task will be assigned to: ${actionItem.assignee} (${assigneeId})`, - ); - } else { - console.log( - `āš ļø Could not find workspace member "${actionItem.assignee}", task will be unassigned`, - ); - } - } - - if (actionItem.dueDate) { - const date = new Date(actionItem.dueDate); - if (!isNaN(date.getTime())) { - taskData.dueAt = date.toISOString(); - } - } - - try { - const response = await axios.post(`${baseUrl}/rest/tasks`, taskData, { - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - }); - - console.log('šŸ“¦ Task API Response:', JSON.stringify(response.data)); - - const taskId = response.data?.data?.createTask?.id; - - if (!taskId) { - console.error( - 'āŒ Failed to extract task ID from response:', - response.data, - ); - throw new Error('Task created but ID not found in response'); - } - - console.log( - `āœ… Task created successfully: ${taskId} - "${actionItem.title}"`, - ); - - if (relatedPersonId) { - await linkTaskToPersonREST(taskId, relatedPersonId); - } - - return { id: taskId }; - } catch (error) { - if (axios.isAxiosError(error)) { - const errorMessage = error.response?.data - ? JSON.stringify(error.response.data, null, 2) - : error.message; - const status = error.response?.status; - console.error( - `āŒ Failed to create task "${actionItem.title}". Status: ${status}, Error: ${errorMessage}`, - ); - throw new Error( - `Failed to create task "${actionItem.title}": ${errorMessage}. Status: ${status}`, - ); - } - throw error; - } -}; - -const createTasksFromActionItems = async ( - actionItems: ActionItem[], - noteId: string, - relatedPersonId: string, - participants: string[], -): Promise => { - const taskIds: string[] = []; - - for (const actionItem of actionItems) { - try { - const taskDescription = `${actionItem.description}\n\n*Related to meeting note: ${noteId}*`; - console.log(`Creating task: "${actionItem.title}"`); - - const mentionedPeople = extractPersonNamesFromDescription( - actionItem.description, - participants, - ); - console.log(`šŸ“ People mentioned in task description:`, mentionedPeople); - - const task = await createTaskInTwenty({ - ...actionItem, - description: taskDescription, - }); - taskIds.push(task.id); - console.log(`āœ… Task created: ${task.id}`); - - if (mentionedPeople.length > 0) { - for (const personName of mentionedPeople) { - const personId = await lookupPersonByName(personName); - if (personId) { - await linkTaskToPersonREST(task.id, personId); - } else { - console.log( - `āš ļø Could not find person "${personName}" in CRM, skipping link`, - ); - } - } - } else { - console.log( - `āš ļø No specific people mentioned, using relatedPersonId as fallback`, - ); - await linkTaskToPersonREST(task.id, relatedPersonId); - } - - console.log(`āœ… Task linking complete: ${task.id}`); - } catch (error) { - console.error( - `āŒ Task creation failed for "${actionItem.title}":`, - error instanceof Error ? error.message : error, - ); - } - } - - return taskIds; -}; - -const createTasksFromCommitments = async ( - commitments: Commitment[], - noteId: string, - relatedPersonId: string, -): Promise => { - const taskIds: string[] = []; - - for (const commitment of commitments) { - try { - const taskDescription = `Commitment from ${commitment.person}: ${commitment.commitment}\n\n*Related to meeting note: ${noteId}*`; - const task = await createTaskInTwenty({ - title: `Follow up: ${commitment.commitment}`, - description: taskDescription, - assignee: commitment.person, - dueDate: commitment.dueDate || '', - }); - taskIds.push(task.id); - - const personId = await lookupPersonByName(commitment.person); - if (personId) { - await linkTaskToPersonREST(task.id, personId); - } else { - await linkTaskToPersonREST(task.id, relatedPersonId); - } - } catch (error) { - console.error( - `Commitment task creation failed for "${commitment.commitment}":`, - error, - ); - } - } - - return taskIds; -}; - -const analyzeTranscript = async ( - transcript: string, - openaiApiKey: string, -): Promise => { - const prompt = `Analyze the following meeting transcript and extract: -1. A concise summary (2-3 sentences) -2. Key discussion points (bullet list) -3. Action items with titles, descriptions, and any mentioned assignees or due dates - -🚨 CRITICAL RULE FOR ACTION ITEMS - READ CAREFULLY: -When multiple people are mentioned working on THE SAME deliverable/document/outcome: -→ Create EXACTLY ONE task that represents the complete workflow -→ The task title should describe the MAIN deliverable (what needs to be completed) -→ Assign to the person who will do the FINAL/CRITICAL step (approver, reviewer, coordinator) -→ The description MUST mention ALL people involved and their roles - -STRICT EXAMPLES - Follow this pattern exactly: - -Example 1: -Transcript: "Brian will finalize the investor deck. Irfan will review it before the presentation next Monday." -āŒ WRONG OUTPUT (2 tasks): - Task 1: {"title": "Finalize investor deck", "assignee": "Brian", "description": "Brian will finalize..."} - Task 2: {"title": "Review investor deck", "assignee": "Irfan", "description": "Irfan will review..."} - -āœ… CORRECT OUTPUT (1 task): - Task 1: { - "title": "Finalize and present investor deck", - "assignee": "Irfan", - "dueDate": "2025-11-03", - "description": "Brian Chesky is designated to finalize the investor deck layout and needs to present it next Monday. Irfan will review the deck before the presentation." - } - -Example 2: -Transcript: "Dario will review security protocols before end of week. Iqra will coordinate the security review process." -āŒ WRONG OUTPUT (2 tasks): - Task 1: {"title": "Review security protocols", "assignee": "Dario", ...} - Task 2: {"title": "Coordinate security review", "assignee": "Iqra", ...} - -āœ… CORRECT OUTPUT (1 task): - Task 1: { - "title": "Coordinate security protocol review", - "assignee": "Iqra", - "dueDate": "2025-11-07", - "description": "Dario Amodei will personally review the security protocols for the AI model before the end of the week. Iqra Khan will coordinate the security review process." - } - -KEY RULES: -1. If multiple people mentioned for same deliverable → ONE task only -2. Task title = main deliverable/outcome -3. Assignee = person doing final/critical step (reviewer, approver, coordinator, presenter) -4. Description = full context with ALL people and their roles mentioned -5. DO NOT split workflows into multiple tasks -6. Look for keywords: "and then", "before", "after", "will review", "will coordinate", "will approve" -7. IMPORTANT: Do NOT extract commitments separately - include all commitments as part of action items - -For assignees (MANDATORY - always extract if possible): -- ALWAYS assign the task to someone if ANY person is mentioned doing work -- Priority order: reviewer > creator, coordinator > contributor, approver > submitter, presenter > preparer -- Look for: "X will", "assigned to X", "X is responsible", "X to review/approve/coordinate/present" -- Examples of who to assign: - * "Brian will finalize, Irfan will review" → Assign to Irfan (reviewer) - * "Dario will review, Iqra will coordinate" → Assign to Iqra (coordinator) - * "Sarah will create report" → Assign to Sarah -- If only ONE person mentioned → assign to them -- If MULTIPLE people mentioned → assign to the one doing the FINAL/CRITICAL step - -For due dates (MANDATORY - always extract if possible): -- ALWAYS include dueDate if ANY time reference is mentioned -- Current date context: Meeting date is 2025-11-01 (Saturday) -- Convert relative dates to YYYY-MM-DD format: - * "next Monday" → "2025-11-03" - * "this Friday" → "2025-11-07" - * "end of week" → "2025-11-07" (Friday) - * "end of month" → "2025-11-30" - * "next week" → "2025-11-08" (7 days from meeting) - * "in 3 days" → "2025-11-04" -- If specific date mentioned: "November 10" → "2025-11-10" -- Use the LATEST date mentioned if multiple dates in the workflow - -Return JSON with this structure (NOTE: commitments array should always be EMPTY): -{ - "summary": "string", - "keyPoints": ["string"], - "actionItems": [{"title": "string", "description": "string", "assignee": "string", "dueDate": "YYYY-MM-DD"}], - "commitments": [] -} - -Transcript: -${transcript}`; - - const completion = await openai.chat.completions.create({ - model: LLM_MODEL_ID, - messages: [ - { - role: 'system', - content: - 'You are a meeting analysis assistant. When multiple people work on the same deliverable, create ONE task (not multiple). ALWAYS assign tasks to someone and ALWAYS extract due dates when time references are mentioned. Include all commitments as action items. Commitments array should always be empty. Always return valid JSON.', - }, - { - role: 'user', - content: prompt, - }, - ], - response_format: { type: 'json_object' }, - temperature: OPENAI_TEMPERATURE, - }); - - const content = completion.choices[0]?.message?.content; - if (!content) { - throw new Error('No response from AI API'); - } - - let parsedResult: AnalysisResult; - try { - parsedResult = JSON.parse(content) as AnalysisResult; - } catch (error) { - throw new Error( - `Failed to parse AI response as JSON: ${error instanceof Error ? error.message : 'Unknown error'}`, - ); - } - - if (!parsedResult.summary || typeof parsedResult.summary !== 'string') { - throw new Error('Invalid AI response: missing or invalid summary'); - } - if (!Array.isArray(parsedResult.keyPoints)) { - throw new Error('Invalid AI response: keyPoints must be an array'); - } - if (!Array.isArray(parsedResult.actionItems)) { - throw new Error('Invalid AI response: actionItems must be an array'); - } - if (!Array.isArray(parsedResult.commitments)) { - throw new Error('Invalid AI response: commitments must be an array'); - } - - return parsedResult; -}; - -export const main = async ( - params: TranscriptWebhookPayload, -): Promise => { - const executionLogs: string[] = []; - const log = (message: string) => { - console.log(message); - executionLogs.push(message); - }; - - try { - const webhookToken = params.token; - const expectedSecret = process.env.WEBHOOK_SECRET_TOKEN; - - if (!expectedSecret || !webhookToken || webhookToken !== expectedSecret) { - throw new Error('Unauthorized webhook access: Invalid or missing token.'); - } - - const { - transcript, - meetingTitle, - meetingDate, - relatedPersonId, - participants, - } = params; - - if (!transcript || typeof transcript !== 'string') { - throw new Error('Transcript is required and must be a string'); - } - - if (!relatedPersonId || typeof relatedPersonId !== 'string') { - throw new Error('relatedPersonId is required and must be a string'); - } - - const openaiApiKey = process.env.AI_PROVIDER_API_KEY; - if (!openaiApiKey) { - throw new Error('AI_PROVIDER_API_KEY environment variable is not set'); - } - - log('āœ… Validation passed'); - log(`šŸ“ RelatedPersonId: ${relatedPersonId}`); - log('šŸ¤– Starting transcript analysis...'); - - const analysis = await analyzeTranscript(transcript, openaiApiKey); - log( - `āœ… Analysis complete: ${analysis.actionItems.length} action items, ${analysis.commitments.length} commitments`, - ); - - log('šŸ“„ Creating note in Twenty CRM...'); - const note = await createNoteInTwenty( - analysis.summary, - analysis.keyPoints, - relatedPersonId, - meetingTitle, - meetingDate, - ); - log(`āœ… Note created: ${note.id}`); - - log('šŸ“‹ Creating tasks from action items...'); - const actionItemTaskIds = await createTasksFromActionItems( - analysis.actionItems, - note.id, - relatedPersonId, - participants || [], - ); - log(`āœ… Action item tasks created: ${actionItemTaskIds.length}`); - - log('šŸ“‹ Creating tasks from commitments...'); - const commitmentTaskIds = await createTasksFromCommitments( - analysis.commitments, - note.id, - relatedPersonId, - ); - log(`āœ… Commitment tasks created: ${commitmentTaskIds.length}`); - - const allTaskIds = [...actionItemTaskIds, ...commitmentTaskIds]; - - return { - success: true, - noteId: note.id, - taskIds: allTaskIds, - summary: { - noteCreated: true, - tasksCreated: allTaskIds.length, - actionItemsProcessed: analysis.actionItems.length, - commitmentsProcessed: analysis.commitments.length, - }, - executionLogs: executionLogs, - }; - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - log(`āŒ ERROR: ${errorMessage}`); - return { - success: false, - error: errorMessage, - executionLogs: executionLogs, - }; - } -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: 'b5e86982-b9ec-4c3d-8a02-6ea08a5b2d35', - name: 'process-transcript', - triggers: [ - { - universalIdentifier: 'a25fcbbf-1a20-438a-b277-ee8ca9770499', - type: 'route', - path: '/transcript', - httpMethod: 'POST', - isAuthRequired: true, - }, - ], -}; diff --git a/packages/twenty-apps/community/meeting-transcript/tsconfig.json b/packages/twenty-apps/community/meeting-transcript/tsconfig.json deleted file mode 100644 index 17d258af13..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/meeting-transcript/yarn.lock b/packages/twenty-apps/community/meeting-transcript/yarn.lock deleted file mode 100644 index 52fdeaa1ea..0000000000 --- a/packages/twenty-apps/community/meeting-transcript/yarn.lock +++ /dev/null @@ -1,464 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@types/node-fetch@npm:^2.6.4": - version: 2.6.13 - resolution: "@types/node-fetch@npm:2.6.13" - dependencies: - "@types/node": "npm:*" - form-data: "npm:^4.0.4" - checksum: 10c0/6313c89f62c50bd0513a6839cdff0a06727ac5495ccbb2eeda51bb2bbbc4f3c0a76c0393a491b7610af703d3d2deb6cf60e37e59c81ceeca803ffde745dbf309 - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 24.9.2 - resolution: "@types/node@npm:24.9.2" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/7905d43f65cee72ef475fe76316e10bbf6ac5d08a7f0f6c38f2b6285d7ca3009e8fcafc8f8a1d2bf3f55889c9c278dbb203a9081fd0cf2d6d62161703924c6fa - languageName: node - linkType: hard - -"@types/node@npm:^18.11.18": - version: 18.19.130 - resolution: "@types/node@npm:18.19.130" - dependencies: - undici-types: "npm:~5.26.4" - checksum: 10c0/22ba2bc9f8863101a7e90a56aaeba1eb3ebdc51e847cef4a6d188967ab1acbce9b4f92251372fd0329ecb924bbf610509e122c3dfe346c04dbad04013d4ad7d0 - languageName: node - linkType: hard - -"@types/node@npm:^20.0.0": - version: 20.19.24 - resolution: "@types/node@npm:20.19.24" - dependencies: - undici-types: "npm:~6.21.0" - checksum: 10c0/c872ce80a1e832fe035a3c94a27acb2d6e45ffa1209c0241ac6e2d405db8d6f47eea7a2509b5c2dbedae6231dafb9dbed873dd5daaebbad1f11fdaa58726ce5e - languageName: node - linkType: hard - -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: "npm:^5.0.0" - checksum: 10c0/90ccc50f010250152509a344eb2e71977fbf8db0ab8f1061197e3275ddf6c61a41a6edfd7b9409c664513131dd96e962065415325ef23efa5db931b382d24ca5 - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": - version: 4.6.0 - resolution: "agentkeepalive@npm:4.6.0" - dependencies: - humanize-ms: "npm:^1.2.1" - checksum: 10c0/235c182432f75046835b05f239708107138a40103deee23b6a08caee5136873709155753b394ec212e49e60e94a378189562cb01347765515cff61b692c69187 - languageName: node - linkType: hard - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"axios@npm:^1.7.0": - version: 1.13.1 - resolution: "axios@npm:1.13.1" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/de9c3c6de43d3ee1146d3afe78645f19450cac6a5d7235bef8b8e8eeb705c2e47e2d231dea99cecaec4dae1897c521118ca9413b9d474063c719c4d94c5b9adc - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 10c0/0255d9f936215fd206156fd4caa9e8d35e62075d720dc7d847e89b417e5e62cf1ce6c9b4e0a1633a9256de0efefaf9f8d26924b1f3c8620cffb9db78e7d3076b - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"form-data-encoder@npm:1.7.2": - version: 1.7.2 - resolution: "form-data-encoder@npm:1.7.2" - checksum: 10c0/56553768037b6d55d9de524f97fe70555f0e415e781cb56fc457a68263de3d40fadea2304d4beef2d40b1a851269bd7854e42c362107071892cb5238debe9464 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"formdata-node@npm:^4.3.2": - version: 4.4.1 - resolution: "formdata-node@npm:4.4.1" - dependencies: - node-domexception: "npm:1.0.0" - web-streams-polyfill: "npm:4.0.0-beta.3" - checksum: 10c0/74151e7b228ffb33b565cec69182694ad07cc3fdd9126a8240468bb70a8ba66e97e097072b60bcb08729b24c7ce3fd3e0bd7f1f80df6f9f662b9656786e76f6a - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.6": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: "npm:^2.0.0" - checksum: 10c0/f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"meeting-transcript@workspace:.": - version: 0.0.0-use.local - resolution: "meeting-transcript@workspace:." - dependencies: - "@types/node": "npm:^20.0.0" - axios: "npm:^1.7.0" - openai: "npm:^4.67.0" - typescript: "npm:^5.6.0" - languageName: unknown - linkType: soft - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"ms@npm:^2.0.0": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"node-domexception@npm:1.0.0": - version: 1.0.0 - resolution: "node-domexception@npm:1.0.0" - checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.7": - version: 2.7.0 - resolution: "node-fetch@npm:2.7.0" - dependencies: - whatwg-url: "npm:^5.0.0" - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 - languageName: node - linkType: hard - -"openai@npm:^4.67.0": - version: 4.104.0 - resolution: "openai@npm:4.104.0" - dependencies: - "@types/node": "npm:^18.11.18" - "@types/node-fetch": "npm:^2.6.4" - abort-controller: "npm:^3.0.0" - agentkeepalive: "npm:^4.2.1" - form-data-encoder: "npm:1.7.2" - formdata-node: "npm:^4.3.2" - node-fetch: "npm:^2.6.7" - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true - bin: - openai: bin/cli - checksum: 10c0/c4f2e837684ed96b8cec58c65a584646d667c69918f29052775e2e8c05ff5c860d8b58214a7770bc6895ca8602480420c1db6a5392dd250179eb0b91c2b19a2f - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 - languageName: node - linkType: hard - -"typescript@npm:^5.6.0": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.6.0#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 - languageName: node - linkType: hard - -"undici-types@npm:~5.26.4": - version: 5.26.5 - resolution: "undici-types@npm:5.26.5" - checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 - languageName: node - linkType: hard - -"undici-types@npm:~6.21.0": - version: 6.21.0 - resolution: "undici-types@npm:6.21.0" - checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"web-streams-polyfill@npm:4.0.0-beta.3": - version: 4.0.0-beta.3 - resolution: "web-streams-polyfill@npm:4.0.0-beta.3" - checksum: 10c0/a9596779db2766990117ed3a158e0b0e9f69b887a6d6ba0779940259e95f99dc3922e534acc3e5a117b5f5905300f527d6fbf8a9f0957faf1d8e585ce3452e8e - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: "npm:~0.0.3" - webidl-conversions: "npm:^3.0.0" - checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/rollup-engine/README.md b/packages/twenty-apps/community/rollup-engine/README.md deleted file mode 100644 index 7de55acde2..0000000000 --- a/packages/twenty-apps/community/rollup-engine/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# Rollup engine - -General-purpose rollup engine for Twenty workspaces. The bundle ships a -serverless function that materialises aggregations from a child object onto a -parent object. The default configuration targets Opportunity → Company rollups. - -## Requirements -- `twenty-cli` `npm install -g twenty-cli` -- an API key with access to your workspace. Generate one at - `https://twenty.com/settings/api-webhooks`. -- Node 20+ (only required if you plan to run the optional smoke test locally). - -## Metadata prerequisites -- Opportunity is a standard object, no extra provisioning required. -- Add these fields to the `company` object (API names shown): - - `totalPipelineAmount` (Currency) - - `totalOpportunityCount` (Number) - - `wonPipelineAmount` (Currency) - - `wonOpportunityCount` (Number) - - `openPipelineAmount` (Currency) - - `openOpportunityCount` (Number) - - `lastOpportunityCloseDate` (Date) -- To script the setup, export `TWENTY_API_KEY` (and `TWENTY_METADATA_BASE_URL` if you are not targeting `http://localhost:3000/rest/metadata`) and run `yarn setup:metadata`. The helper script calls the Metadata API to ensure each field exists on the Company object, skipping anything already provisioned. - -Create the fields before syncing so PATCH requests succeed. - -## Quick start - -1. **Deploy the app** - ```bash - twenty auth login - cd rollup-engine - twenty app sync - ``` - -2. **Configure environment variables** - - Open **Settings → Apps → Rollup engine → Configuration**. - - Provide values for the manifest-defined keys: - - `TWENTY_API_KEY` (required secret; create it in Twenty → Settings → API & Webhooks). - - `TWENTY_API_BASE_URL` (optional; leave blank to use `https://app.twenty.com/rest`). - - `ROLLUP_ENGINE_CONFIG` (optional JSON override; leave blank to use the baked-in config). - - Save the configuration. Changes are applied immediately—no redeploy required. - -3. **Verify via the Test panel** - - Still on the app page, select **Test**. - - Paste a JSON payload with the company ID you want to validate: - - ```json - { - "trigger": { "type": "databaseEvent", "eventName": "opportunity.updated" }, - "record": { "companyId": "YOUR_COMPANY_ID" }, - "opportunity": { "companyId": "YOUR_COMPANY_ID" } - } - ``` - - - Click **Run**. You should see a success summary and the company’s rollup fields updating. - -4. **Trigger live rollups** - - Any Opportunity create/update/delete (or the nightly cron) now feeds into the Company metrics. - -## Runtime configuration -- `serverlessFunctions/calculaterollups/src/rollupConfig.ts` holds the baked-in defaults. - Override them by setting `ROLLUP_ENGINE_CONFIG` (aliases: `ROLLUPS_CONFIG`, - `CALCULATE_ROLLUPS_CONFIG`) to a JSON array in the Configuration UI. -- `config/templates/opportunity-to-company.json` matches the default rollups shipped with the bundle. - Copy it, tweak the object/field names you need, and paste the edited JSON into `ROLLUP_ENGINE_CONFIG`. -- `filters[].dynamicValue` currently supports `"startOfYear"` (UTC midnight on the first day of the - current calendar year). - -### Default Opportunity → Company rollups -| Parent field | Suggested type | Description | -| --- | --- | --- | -| `totalPipelineAmount` | Currency (`amountMicros`, `currencyCode`) | Sum of positive-valued Opportunities linked to the Company. | -| `totalOpportunityCount` | Number | Count of Opportunities linked to the Company. | -| `wonPipelineAmount` | Currency (`amountMicros`, `currencyCode`) | Sum of Opportunities where `stage === "CUSTOMER"`. | -| `wonOpportunityCount` | Number | Count of Opportunities where `stage === "CUSTOMER"`. | -| `openPipelineAmount` | Currency (`amountMicros`, `currencyCode`) | Sum of Opportunities where `stage !== "CUSTOMER"`. | -| `openOpportunityCount` | Number | Count of Opportunities where `stage !== "CUSTOMER"`. | -| `lastOpportunityCloseDate` | Date | Most recent `closeDate` (ISO date). | - -Assumptions: -- Opportunities expose `companyId`, `amount.amountMicros`, `amount.currencyCode`, - `stage`, and `closeDate`. Adjust filters or fields as needed via the JSON - config. -- Amount totals are stored in micros (integers) to align with Twenty’s composite - currency fields. - -## Optional local smoke test -Run this if you want to exercise the aggregation logic without calling the live API. - -```bash -cd rollup-engine -yarn install -yarn smoke -``` - -The smoke script replaces `fetch` with an in-memory mock, executes the rollup function using sample -Opportunity data, and asserts the PATCH payload that would be sent to Twenty. - -## Troubleshooting -- **`Test your function` reports `mainFile.main is not a function`:** delete the app - (`twenty app delete`) and sync it again (`twenty app sync`) to clear any stale bundle. -- **`status: "error", message: "Unable to parse rollup configuration override"`:** confirm that - `ROLLUP_ENGINE_CONFIG` contains valid JSON or leave it blank to fall back to the baked-in defaults. -- **No company updates after configuring everything:** double-check the Company field API names, - confirm the Opportunity records have `amount.amountMicros > 0`, and use the Test panel to inspect - the summary details/logs. diff --git a/packages/twenty-apps/community/rollup-engine/application.config.ts b/packages/twenty-apps/community/rollup-engine/application.config.ts deleted file mode 100644 index 1bd0eac19a..0000000000 --- a/packages/twenty-apps/community/rollup-engine/application.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/application'; - -const config: ApplicationConfig = { - universalIdentifier: '2b308f8c-6ff8-4838-9880-aa0271dfd8d8', - displayName: 'Rollup engine', - description: 'Rollup engine', - applicationVariables: { - TWENTY_API_KEY: { - universalIdentifier: '1dc3356a-f660-4097-a161-b1686ad00c74', - isSecret: true, - value: '', - description: - 'Workspace API key used by the rollup engine to call the Twenty REST API.', - }, - TWENTY_API_BASE_URL: { - universalIdentifier: '274c512c-a870-4651-9617-2638e0def14c', - isSecret: false, - value: '', - description: - 'Optional override for the REST base URL (defaults to https://app.twenty.com/rest).', - }, - ROLLUP_ENGINE_CONFIG: { - universalIdentifier: 'a4672cd9-4081-43af-9d3b-5a8a55a72613', - isSecret: false, - value: '', - description: - 'Optional JSON override for rollup definitions. Leave blank to use the baked-in defaults.', - }, - }, -}; - -export default config; diff --git a/packages/twenty-apps/community/rollup-engine/config/templates/opportunity-to-company.json b/packages/twenty-apps/community/rollup-engine/config/templates/opportunity-to-company.json deleted file mode 100644 index 2e33a74b74..0000000000 --- a/packages/twenty-apps/community/rollup-engine/config/templates/opportunity-to-company.json +++ /dev/null @@ -1,79 +0,0 @@ -[ - { - "parentObject": "company", - "childObject": "opportunity", - "relationField": "companyId", - "childFilters": [ - { - "field": "amount.amountMicros", - "operator": "gt", - "value": 0 - } - ], - "aggregations": [ - { - "type": "SUM", - "childField": "amount.amountMicros", - "parentField": "totalPipelineAmount", - "currencyField": "amount.currencyCode" - }, - { - "type": "COUNT", - "parentField": "totalOpportunityCount" - }, - { - "type": "SUM", - "childField": "amount.amountMicros", - "parentField": "wonPipelineAmount", - "currencyField": "amount.currencyCode", - "filters": [ - { - "field": "stage", - "operator": "equals", - "value": "CUSTOMER" - } - ] - }, - { - "type": "COUNT", - "parentField": "wonOpportunityCount", - "filters": [ - { - "field": "stage", - "operator": "equals", - "value": "CUSTOMER" - } - ] - }, - { - "type": "SUM", - "childField": "amount.amountMicros", - "parentField": "openPipelineAmount", - "currencyField": "amount.currencyCode", - "filters": [ - { - "field": "stage", - "operator": "notEquals", - "value": "CUSTOMER" - } - ] - }, - { - "type": "COUNT", - "parentField": "openOpportunityCount", - "filters": [ - { - "field": "stage", - "operator": "notEquals", - "value": "CUSTOMER" - } - ] - }, - { - "type": "MAX", - "childField": "closeDate", - "parentField": "lastOpportunityCloseDate" - } - ] - } -] diff --git a/packages/twenty-apps/community/rollup-engine/package.json b/packages/twenty-apps/community/rollup-engine/package.json deleted file mode 100644 index 67672cfd68..0000000000 --- a/packages/twenty-apps/community/rollup-engine/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "rollup-engine", - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "scripts": { - "smoke": "node --import tsx scripts/run-rollup-smoke.ts", - "setup:metadata": "node scripts/setup-company-rollup-fields.mjs" - }, - "dependencies": { - "twenty-sdk": "0.0.3" - }, - "devDependencies": { - "@types/node": "^24.7.2", - "dotenv": "^16.4.5", - "tsx": "^4.20.6" - } -} diff --git a/packages/twenty-apps/community/rollup-engine/scripts/run-rollup-smoke.ts b/packages/twenty-apps/community/rollup-engine/scripts/run-rollup-smoke.ts deleted file mode 100644 index 6f2a07d9c8..0000000000 --- a/packages/twenty-apps/community/rollup-engine/scripts/run-rollup-smoke.ts +++ /dev/null @@ -1,165 +0,0 @@ -import assert from 'node:assert/strict'; - -import { main as runRollups } from '../serverlessFunctions/calculaterollups/src/index'; - -type Json = Record; - -interface RequestLogEntry { - url: string; - method: string; - body?: unknown; -} - -const now = new Date(); -const currentYear = now.getUTCFullYear(); -const previousYear = currentYear - 1; - -const mockOpportunities = [ - { - id: 'opp-1', - companyId: 'company-1', - amount: { amountMicros: 150_000_000, currencyCode: 'USD' }, - stage: 'CUSTOMER', - closeDate: `${currentYear}-01-10T12:00:00.000Z`, - }, - { - id: 'opp-2', - companyId: 'company-1', - amount: { amountMicros: 90_000_000, currencyCode: 'USD' }, - stage: 'PROPOSAL', - closeDate: `${currentYear}-03-05T18:00:00.000Z`, - }, - { - id: 'opp-3', - companyId: 'company-1', - amount: { amountMicros: 60_000_000, currencyCode: 'USD' }, - stage: 'SCREENING', - closeDate: `${previousYear}-12-15T09:00:00.000Z`, - }, -]; - -const requestLog: RequestLogEntry[] = []; -const updatePayloads: Array<{ id: string; payload: Json }> = []; - -const jsonResponse = (data: Json | Json[]) => - new Response(JSON.stringify(data), { - status: 200, - headers: { 'Content-Type': 'application/json' }, - }); - -global.fetch = async ( - rawUrl: any, - init?: { method?: string; body?: unknown }, -): Promise => { - const url = typeof rawUrl === 'string' ? new URL(rawUrl) : rawUrl; - const method = (init?.method ?? 'GET').toUpperCase(); - requestLog.push({ - url: url.toString(), - method, - body: init?.body ? safeParse(init.body) : undefined, - }); - - if (url.pathname.endsWith('/opportunities') && method === 'GET') { - const companyId = url.searchParams.get('filter[companyId]'); - const items = companyId - ? mockOpportunities.filter( - (opportunity) => opportunity.companyId === companyId, - ) - : mockOpportunities; - return jsonResponse({ - data: { - opportunities: items, - }, - pageInfo: { - hasNextPage: false, - }, - }); - } - - if (url.pathname.includes('/companies/') && method === 'PATCH') { - const id = url.pathname.split('/').pop() ?? 'unknown'; - const payload = safeParse(init?.body) ?? {}; - updatePayloads.push({ id, payload }); - return jsonResponse({ data: { companies: [{ id, ...payload }] } }); - } - - throw new Error( - `Unhandled request in mock fetch: ${method} ${url.toString()}`, - ); -}; - -const safeParse = (body: unknown) => { - if (!body) { - return undefined; - } - if (typeof body === 'string') { - try { - return JSON.parse(body) as Json; - } catch (error) { - console.warn('Failed to parse request body', error); - return undefined; - } - } - return undefined; -}; - -const main = async () => { - process.env.TWENTY_API_KEY = 'mock-api-key'; - process.env.TWENTY_API_BASE_URL = 'https://mock.twenty/api'; - - const params = { - trigger: { type: 'databaseEvent' }, - record: { companyId: 'company-1' }, - opportunity: { companyId: 'company-1' }, - }; - - const result = await runRollups(params); - - assert.equal(result.status, 'ok', 'rollup execution should succeed'); - - const expectedPayload = { - totalPipelineAmount: { amountMicros: 300_000_000, currencyCode: 'USD' }, - totalOpportunityCount: 3, - wonPipelineAmount: { amountMicros: 150_000_000, currencyCode: 'USD' }, - wonOpportunityCount: 1, - openPipelineAmount: { amountMicros: 150_000_000, currencyCode: 'USD' }, - openOpportunityCount: 2, - lastOpportunityCloseDate: `${currentYear.toString().padStart(4, '0')}-03-05`, - }; - - const companyUpdate = updatePayloads.find( - (payload) => payload.id === 'company-1', - ); - assert(companyUpdate, 'expected a PATCH payload for company-1'); - assert.deepStrictEqual(companyUpdate.payload, expectedPayload); - - const opportunitiesRequest = requestLog.find( - (entry) => entry.method === 'GET' && entry.url.includes('/opportunities'), - ); - assert( - opportunitiesRequest, - 'expected at least one GET request for /opportunities', - ); - const filterParams = new URL(opportunitiesRequest.url).searchParams.getAll( - 'filter', - ); - assert.deepStrictEqual( - filterParams, - ['companyId[eq]:"company-1"'], - 'expected opportunity filter to use the new syntax', - ); - - console.log('--- Rollup execution summary ---'); - console.dir(result, { depth: null }); - - console.log('\n--- PATCH payloads sent to companies ---'); - console.dir(updatePayloads, { depth: null }); - - console.log('\n--- Requests made ---'); - console.dir(requestLog, { depth: null }); -}; - -main().catch((error) => { - console.error('Smoke test failed', error); - process.exitCode = 1; -}); diff --git a/packages/twenty-apps/community/rollup-engine/scripts/setup-company-rollup-fields.mjs b/packages/twenty-apps/community/rollup-engine/scripts/setup-company-rollup-fields.mjs deleted file mode 100644 index 95a5bf3553..0000000000 --- a/packages/twenty-apps/community/rollup-engine/scripts/setup-company-rollup-fields.mjs +++ /dev/null @@ -1,138 +0,0 @@ -import { config as loadEnv } from 'dotenv'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const envCandidates = [ - process.env.TWENTY_ENV_PATH ? path.resolve(process.env.TWENTY_ENV_PATH) : null, - path.resolve(__dirname, '..', '.env'), - path.resolve(__dirname, '..', '..', '..', '..', '..', '.env'), -].filter(Boolean); - -envCandidates.forEach((candidate) => { - if (!candidate) { - return; - } - const result = loadEnv({ path: candidate }); - if (!result.error && process.env.TWENTY_API_KEY) { - return; - } -}); - -const METADATA_BASE_URL = ( - process.env.TWENTY_METADATA_BASE_URL ?? - (process.env.TWENTY_API_BASE_URL - ? `${process.env.TWENTY_API_BASE_URL.replace(/\/+$/, '')}/metadata` - : null) ?? - 'http://localhost:3000/rest/metadata' -).replace(/\/+$/, ''); - -const API_KEY = process.env.TWENTY_API_KEY; - -if (!API_KEY) { - console.error('TWENTY_API_KEY is required in the environment to call the Metadata API.'); - process.exit(1); -} - -const COMPANY_ROLLUP_FIELDS = [ - { name: 'totalPipelineAmount', label: 'Total Pipeline Amount', type: 'CURRENCY' }, - { name: 'totalOpportunityCount', label: 'Total Opportunity Count', type: 'NUMBER' }, - { name: 'wonPipelineAmount', label: 'Won Pipeline Amount', type: 'CURRENCY' }, - { name: 'wonOpportunityCount', label: 'Won Opportunity Count', type: 'NUMBER' }, - { name: 'openPipelineAmount', label: 'Open Pipeline Amount', type: 'CURRENCY' }, - { name: 'openOpportunityCount', label: 'Open Opportunity Count', type: 'NUMBER' }, - { name: 'lastOpportunityCloseDate', label: 'Last Opportunity Close Date', type: 'DATE' }, -]; - -const metadataRequest = async (method, endpoint, body) => { - const url = `${METADATA_BASE_URL}${endpoint}`; - const headers = { - Authorization: `Bearer ${API_KEY}`, - }; - const init = { method, headers }; - if (body !== undefined) { - headers['Content-Type'] = 'application/json'; - init.body = JSON.stringify(body); - } - - const response = await fetch(url, init); - const text = await response.text(); - let parsed = {}; - if (text) { - try { - parsed = JSON.parse(text); - } catch (error) { - throw new Error(`Failed to parse JSON response from ${url}: ${text}`); - } - } - - if (!response.ok) { - const messages = parsed?.messages || parsed?.message; - const error = new Error( - `Metadata API ${method} ${endpoint} failed: ${messages || response.statusText}`, - ); - error.response = parsed; - throw error; - } - - return parsed; -}; - -const findObjectId = async (nameSingular) => { - const response = await metadataRequest('GET', '/objects'); - const objects = - (response?.data && Array.isArray(response.data.objects) ? response.data.objects : []) || []; - const match = objects.find((entry) => entry.nameSingular === nameSingular); - if (!match) { - throw new Error(`Unable to find object with nameSingular="${nameSingular}" via Metadata API`); - } - return match.id; -}; - -const createField = async (objectMetadataId, field) => { - try { - const payload = { - objectMetadataId, - name: field.name, - label: field.label, - type: field.type, - }; - await metadataRequest('POST', '/fields', payload); - console.log(`āœ” Created ${field.name}`); - } catch (error) { - const messages = error.response?.messages; - const messageList = Array.isArray(messages) - ? messages - : typeof messages === 'string' - ? [messages] - : []; - if (messageList.some((msg) => msg.includes('already exists'))) { - console.log(`→ ${field.name} already exists; skipping`); - return; - } - throw error; - } -}; - -const main = async () => { - console.log(`Using metadata base URL: ${METADATA_BASE_URL}`); - const companyObjectId = await findObjectId('company'); - - for (const field of COMPANY_ROLLUP_FIELDS) { - // Metadata API prefers camelCase names; script assumes labels may contain spaces. - await createField(companyObjectId, field); - } - - console.log('Company rollup fields ensured.'); -}; - -main().catch((error) => { - console.error('Failed to provision rollup fields via Metadata API.'); - console.error(error instanceof Error ? error.message : error); - if (error instanceof Error && error.stack) { - console.error(error.stack); - } - process.exit(1); -}); diff --git a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/aggregations.ts b/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/aggregations.ts deleted file mode 100644 index 37237bea8f..0000000000 --- a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/aggregations.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { applyFilters, getNestedValue, toComparableNumber } from './filtering'; -import type { ChildRecord, RollupDefinition } from './types'; - -const roundForSum = (value: number) => - Number.isInteger(value) ? value : Math.round(value * 100) / 100; - -export const computeAggregations = ( - definition: RollupDefinition, - records: ChildRecord[], - now: Date, -) => { - const baseFiltered = applyFilters(records, definition.childFilters, now); - const result: Record< - string, - number | string | null | Record - > = {}; - - definition.aggregations.forEach((aggregation) => { - const scopedRecords = applyFilters(baseFiltered, aggregation.filters, now); - - switch (aggregation.type) { - case 'COUNT': - result[aggregation.parentField] = scopedRecords.length; - break; - case 'SUM': { - if (!aggregation.childField) { - throw new Error('SUM aggregation requires childField'); - } - const total = scopedRecords.reduce( - (accumulator, record) => { - const rawValue = getNestedValue(record, aggregation.childField!); - const currencyRaw = - aggregation.currencyField !== undefined - ? getNestedValue(record, aggregation.currencyField) - : undefined; - const numeric = - typeof rawValue === 'number' - ? rawValue - : typeof rawValue === 'string' - ? Number(rawValue) - : NaN; - if (Number.isNaN(numeric)) { - return accumulator; - } - return { - amount: (accumulator.amount as number) + numeric, - currency: - typeof currencyRaw === 'string' && currencyRaw.trim().length > 0 - ? currencyRaw - : accumulator.currency, - }; - }, - { amount: 0, currency: undefined as string | undefined }, - ); - result[aggregation.parentField] = { - amountMicros: Math.round(roundForSum(total.amount as number)), - currencyCode: total.currency ?? '', - }; - break; - } - case 'AVG': { - if (!aggregation.childField) { - throw new Error('AVG aggregation requires childField'); - } - const { total, count } = scopedRecords.reduce( - (accumulator, record) => { - const rawValue = getNestedValue(record, aggregation.childField!); - const numeric = - typeof rawValue === 'number' - ? rawValue - : typeof rawValue === 'string' - ? Number(rawValue) - : NaN; - if (Number.isNaN(numeric)) { - return accumulator; - } - return { - total: (accumulator.total as number) + numeric, - count: (accumulator.count as number) + 1, - }; - }, - { total: 0, count: 0 }, - ); - result[aggregation.parentField] = - count === 0 - ? null - : roundForSum((total as number) / (count as number)); - break; - } - case 'MAX': - case 'MIN': { - const childField = aggregation.childField; - if (!childField) { - throw new Error( - `${aggregation.type} aggregation requires childField`, - ); - } - - const direction = aggregation.type === 'MAX' ? 1 : -1; - let chosen: { raw: unknown; comparable: number } | null = null; - - for (const record of scopedRecords) { - const rawValue = getNestedValue(record, childField); - const comparable = toComparableNumber(rawValue); - if (comparable === null) continue; - - if ( - chosen === null || - direction * (comparable - chosen.comparable) > 0 - ) { - chosen = { raw: rawValue, comparable }; - } - } - - if (chosen === null) { - result[aggregation.parentField] = null; - break; - } - - const raw = chosen.raw; - - if (typeof raw === 'number') { - result[aggregation.parentField] = raw; - } else if (raw instanceof Date) { - result[aggregation.parentField] = raw.toISOString().slice(0, 10); - } else if (raw == null) { - result[aggregation.parentField] = null; - } else { - const rawString = String(raw); - const parsed = Date.parse(rawString); - result[aggregation.parentField] = Number.isNaN(parsed) - ? rawString - : new Date(parsed).toISOString().slice(0, 10); - } - break; - } - default: - break; - } - }); - - return result; -}; diff --git a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/client.ts b/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/client.ts deleted file mode 100644 index 3b93a5e606..0000000000 --- a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/client.ts +++ /dev/null @@ -1,347 +0,0 @@ -import { getNestedValue } from './filtering'; -import type { ChildRecord, RollupDefinition } from './types'; - -const RESOURCE_PLURALS: Record = { - person: 'people', - gift: 'gifts', - company: 'companies', - opportunity: 'opportunities', -}; - -const RETRIABLE_STATUS = new Set([429, 500, 502, 503, 504]); -const DEFAULT_PAGE_SIZE = 200; -const MAX_RETRIES = 3; -const RETRY_BASE_DELAY_MS = 300; - -type QueryParamPrimitive = string | number | boolean; -type QueryParamValue = QueryParamPrimitive | QueryParamPrimitive[]; - -const serializeFilterExpressions = ( - filters: Record, -): string[] => { - const expressions: string[] = []; - - Object.entries(filters).forEach(([field, rawValue]) => { - if (rawValue === undefined || rawValue === null) { - return; - } - - if (Array.isArray(rawValue)) { - if (rawValue.length === 0) { - return; - } - const serializedValues = rawValue.map((entry) => JSON.stringify(entry)).join(','); - expressions.push(`${field}[in]:${serializedValues}`); - return; - } - - expressions.push(`${field}[eq]:${JSON.stringify(rawValue)}`); - }); - - return expressions; -}; - -interface RequestOptions { - method?: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE'; - query?: Record; - body?: unknown; - headers?: Record; -} - -interface ListPageOptions { - filter?: Record; - orderBy?: Record; - cursor?: string; - limit?: number; -} - -interface ListPage { - items: T[]; - hasNextPage: boolean; - nextCursor?: string; -} - -const sleep = (ms: number) => - new Promise((resolve) => { - setTimeout(resolve, ms); - }); - -const getResourceName = (objectName: string) => RESOURCE_PLURALS[objectName] ?? `${objectName}s`; - -export class TwentyClient { - private readonly baseUrl: string; - - constructor( - private readonly apiKey: string, - baseUrl: string, - ) { - this.baseUrl = baseUrl.replace(/\/+$/, ''); - } - - private async fetchWithRetry(url: string, init: RequestInit, attempt = 1): Promise { - const response = await fetch(url, init); - if (response.ok) { - return response; - } - - if (RETRIABLE_STATUS.has(response.status) && attempt < MAX_RETRIES) { - const delayMs = RETRY_BASE_DELAY_MS * attempt; - await sleep(delayMs); - return this.fetchWithRetry(url, init, attempt + 1); - } - - const errorBody = await response.text(); - throw new Error(`Request failed (${response.status}): ${errorBody || 'no body returned'}`); - } - - private appendQueryParams(url: URL, params: Record) { - Object.entries(params).forEach(([key, value]) => { - if (value === undefined || value === null) { - return; - } - if (Array.isArray(value)) { - value.forEach((entry) => { - url.searchParams.append(key, String(entry)); - }); - return; - } - url.searchParams.set(key, String(value)); - }); - } - - private async request(resourcePath: string, options: RequestOptions = {}) { - const { method = 'GET', query, body, headers = {} } = options; - - const url = resourcePath.startsWith('http') - ? new URL(resourcePath) - : new URL(`${this.baseUrl}/${resourcePath.replace(/^\/+/, '')}`); - - if (query) { - this.appendQueryParams(url, query); - } - - let serializedBody: string | undefined; - - if (body !== undefined) { - serializedBody = typeof body === 'string' ? body : JSON.stringify(body); - } - - const mergedHeaders: Record = { - Authorization: `Bearer ${this.apiKey}`, - ...headers, - }; - - if (serializedBody && !mergedHeaders['Content-Type']) { - mergedHeaders['Content-Type'] = 'application/json'; - } - - const response = await this.fetchWithRetry(url.toString(), { - method, - headers: mergedHeaders, - body: serializedBody, - }); - - if (response.status === 204) { - return {}; - } - - const text = await response.text(); - if (!text) { - return {}; - } - - try { - return JSON.parse(text) as unknown; - } catch (error) { - throw new Error( - `Failed to parse JSON response from ${url.toString()}: ${(error as Error).message}`, - ); - } - } - - private extractRecords(body: unknown, resource: string): ChildRecord[] { - if (typeof body !== 'object' || body === null) { - return []; - } - const data = typeof (body as Record).data === 'object' - ? ((body as Record).data as Record) - : undefined; - - const direct = data && Array.isArray(data[resource]) ? data[resource] : undefined; - if (Array.isArray(direct)) { - return direct as ChildRecord[]; - } - - const singular = resource.endsWith('s') ? resource.slice(0, -1) : resource; - const singularMatch = data && Array.isArray(data[singular]) ? data[singular] : undefined; - if (Array.isArray(singularMatch)) { - return singularMatch as ChildRecord[]; - } - - const capitalized = resource.charAt(0).toUpperCase() + resource.slice(1); - const findManyKey = `findMany${capitalized}`; - const findMany = data && Array.isArray(data[findManyKey]) ? data[findManyKey] : undefined; - if (Array.isArray(findMany)) { - return findMany as ChildRecord[]; - } - - return []; - } - - private extractPageInfo(body: unknown) { - if (typeof body !== 'object' || body === null) { - return undefined; - } - if (typeof (body as Record).pageInfo === 'object') { - return (body as Record).pageInfo as Record; - } - if ( - typeof (body as Record).data === 'object' && - typeof ((body as Record).data as Record).pageInfo === 'object' - ) { - return ((body as Record).data as Record) - .pageInfo as Record; - } - return undefined; - } - - private async listRecordsPage( - resource: string, - options: ListPageOptions = {}, - ): Promise> { - const query: Record = {}; - const limit = options.limit ?? DEFAULT_PAGE_SIZE; - query.limit = String(limit); - - if (options.cursor) { - query.starting_after = options.cursor; - } - - if (options.filter) { - const filterExpressions = serializeFilterExpressions(options.filter); - if (filterExpressions.length > 0) { - query.filter = filterExpressions; - } - } - - if (options.orderBy) { - Object.entries(options.orderBy).forEach(([field, direction]) => { - query[`order_by[${field}]`] = direction; - }); - } - - const response = await this.request(resource, { - method: 'GET', - query, - }); - - const items = this.extractRecords(response, resource); - const pageInfo = this.extractPageInfo(response); - const hasNextPage = - !!pageInfo && - (Boolean(pageInfo.hasNextPage) || - Boolean(pageInfo.endCursor) || - Boolean(pageInfo.nextCursor)); - const nextCursor = - (pageInfo && typeof pageInfo.endCursor === 'string' && pageInfo.endCursor) || - (pageInfo && typeof pageInfo.nextCursor === 'string' && pageInfo.nextCursor) || - undefined; - - return { - items, - hasNextPage, - nextCursor, - }; - } - - async listAllRecords(objectName: string, options: ListPageOptions = {}): Promise { - const resource = getResourceName(objectName); - const aggregated: ChildRecord[] = []; - let cursor: string | undefined; - let hasNext = true; - - while (hasNext) { - const page = await this.listRecordsPage(resource, { - ...options, - cursor, - }); - aggregated.push(...page.items); - hasNext = page.hasNextPage && Boolean(page.nextCursor); - cursor = hasNext ? page.nextCursor : undefined; - } - - return aggregated; - } - - async updateObject(objectName: string, id: string, payload: Record) { - const resource = getResourceName(objectName); - await this.request(`${resource}/${id}`, { - method: 'PATCH', - body: payload, - }); - } -} - -export const ensureMapHasTargets = ( - container: Map, - targetIds: Set | undefined, -) => { - if (!targetIds) { - return; - } - targetIds.forEach((id) => { - if (!container.has(id)) { - container.set(id, []); - } - }); -}; - -export const buildChildRecordIndex = async ( - definition: RollupDefinition, - client: TwentyClient, - parentIds: Set | undefined, -): Promise> => { - if (parentIds && parentIds.size > 0) { - const parentIdList = Array.from(parentIds); - const result = new Map(); - const concurrency = 5; - - for (let index = 0; index < parentIdList.length; index += concurrency) { - const slice = parentIdList.slice(index, index + concurrency); - const batch = await Promise.all( - slice.map(async (parentId) => { - const records = await client.listAllRecords(definition.childObject, { - filter: { - [definition.relationField]: parentId, - }, - }); - const filtered = records.filter((record) => { - const relationValue = getNestedValue(record, definition.relationField); - return typeof relationValue === 'string' && relationValue === parentId; - }); - return { parentId, records: filtered }; - }), - ); - batch.forEach(({ parentId, records }) => { - result.set(parentId, records); - }); - } - - ensureMapHasTargets(result, parentIds); - return result; - } - - const allRecords = await client.listAllRecords(definition.childObject); - const grouped = new Map(); - allRecords.forEach((record) => { - const relationValue = getNestedValue(record, definition.relationField); - if (typeof relationValue !== 'string' || relationValue.trim().length === 0) { - return; - } - if (!grouped.has(relationValue)) { - grouped.set(relationValue, []); - } - grouped.get(relationValue)!.push(record); - }); - return grouped; -}; diff --git a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/config.ts b/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/config.ts deleted file mode 100644 index aca22643c8..0000000000 --- a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/config.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { defaultRollupConfig } from './rollupConfig'; -import type { - AggregationConfig, - FilterConfig, - RollupConfig, - RollupDefinition, -} from './types'; - -const operatorSet = new Set([ - 'equals', - 'notEquals', - 'in', - 'notIn', - 'gt', - 'gte', - 'lt', - 'lte', -]); - -const aggregationTypes = new Set([ - 'SUM', - 'COUNT', - 'MAX', - 'MIN', - 'AVG', -]); - -const isObject = (value: unknown): value is Record => - typeof value === 'object' && value !== null; - -export const validateRollupConfig = (config: any): RollupConfig | void => { - if (!Array.isArray(config)) { - throw new Error( - 'Rollup configuration must contain an array of rollup definitions', - ); - } - - config.forEach((definition, definitionIndex) => { - if (!isObject(definition)) { - throw new Error( - `Definition at index ${definitionIndex} must be an object`, - ); - } - - const { - parentObject, - childObject, - relationField, - childFilters, - aggregations, - } = definition as Partial; - - if (typeof parentObject !== 'string' || parentObject.trim().length === 0) { - throw new Error(`Definition ${definitionIndex} missing parentObject`); - } - if (typeof childObject !== 'string' || childObject.trim().length === 0) { - throw new Error(`Definition ${definitionIndex} missing childObject`); - } - if ( - typeof relationField !== 'string' || - relationField.trim().length === 0 - ) { - throw new Error(`Definition ${definitionIndex} missing relationField`); - } - if (!Array.isArray(aggregations) || aggregations.length === 0) { - throw new Error( - `Definition ${definitionIndex} must declare at least one aggregation`, - ); - } - - const filtersToValidate = [ - ...(Array.isArray(childFilters) ? childFilters : []), - ...aggregations.flatMap((aggregation, aggregationIndex) => { - if (!isObject(aggregation)) { - throw new Error( - `Aggregation ${aggregationIndex} in definition ${definitionIndex} must be an object`, - ); - } - - const { type, parentField, childField, filters } = - aggregation as AggregationConfig; - - if (!aggregationTypes.has(type)) { - throw new Error( - `Aggregation ${aggregationIndex} in definition ${definitionIndex} has unsupported type ${type}`, - ); - } - - if ( - typeof parentField !== 'string' || - parentField.trim().length === 0 - ) { - throw new Error( - `Aggregation ${aggregationIndex} in definition ${definitionIndex} missing parentField`, - ); - } - - if ( - type !== 'COUNT' && - (typeof childField !== 'string' || childField.length === 0) - ) { - throw new Error( - `Aggregation ${aggregationIndex} in definition ${definitionIndex} with type ${type} requires childField`, - ); - } - - if (filters && !Array.isArray(filters)) { - throw new Error( - `Aggregation ${aggregationIndex} in definition ${definitionIndex} has invalid filters shape`, - ); - } - - return filters ?? []; - }), - ]; - - filtersToValidate.forEach((filter, filterIndex) => { - if (!isObject(filter)) { - throw new Error( - `Filter ${filterIndex} in definition ${definitionIndex} must be an object`, - ); - } - - const { field, operator } = filter as FilterConfig; - - if (typeof field !== 'string' || field.trim().length === 0) { - throw new Error( - `Filter ${filterIndex} in definition ${definitionIndex} missing field`, - ); - } - - if (!operatorSet.has(operator)) { - throw new Error( - `Filter ${filterIndex} in definition ${definitionIndex} has unsupported operator ${operator}`, - ); - } - }); - }); -}; - -const collectValuesByKey = ( - value: unknown, - key: string, - result: Set, -): void => { - if (Array.isArray(value)) { - value.forEach((entry) => collectValuesByKey(entry, key, result)); - return; - } - - if (!isObject(value)) { - return; - } - - Object.entries(value).forEach(([currentKey, entryValue]) => { - if ( - currentKey === key && - typeof entryValue === 'string' && - entryValue.trim().length > 0 - ) { - result.add(entryValue); - return; - } - - collectValuesByKey(entryValue, key, result); - }); -}; - -export const extractRelationValues = ( - params: unknown, - relationField: string, -): Set => { - const values = new Set(); - collectValuesByKey(params, relationField, values); - return values; -}; - -export const resolveRollupConfig = (): RollupConfig => { - const override = - process.env.ROLLUP_ENGINE_CONFIG ?? - process.env.ROLLUPS_CONFIG ?? - process.env.CALCULATE_ROLLUPS_CONFIG; - - if (override) { - try { - const parsed = JSON.parse(override) as unknown; - validateRollupConfig(parsed); - return parsed as RollupConfig; - } catch (error) { - const reason = - error instanceof Error - ? error.message - : typeof error === 'string' - ? error - : 'Unknown error'; - throw new Error( - `Unable to parse rollup configuration override (reason: ${reason})`, - ); - } - } - - const config = defaultRollupConfig; - validateRollupConfig(config); - return config; -}; diff --git a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/filtering.ts b/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/filtering.ts deleted file mode 100644 index 1082d57837..0000000000 --- a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/filtering.ts +++ /dev/null @@ -1,149 +0,0 @@ -import type { ChildRecord, DynamicValue, FilterConfig } from './types'; - -const isObject = (value: unknown): value is Record => - typeof value === 'object' && value !== null; - -const resolveDynamicValue = (dynamicValue: DynamicValue, now: Date) => { - switch (dynamicValue) { - case 'startOfYear': { - const utcStart = new Date(Date.UTC(now.getUTCFullYear(), 0, 1, 0, 0, 0, 0)); - return utcStart.toISOString(); - } - default: - throw new Error(`Unsupported dynamicValue ${dynamicValue}`); - } -}; - -const normalizeForEquality = (value: unknown) => { - if (value === null || value === undefined) { - return null; - } - if (typeof value === 'number' || typeof value === 'boolean') { - return value; - } - if (typeof value === 'string') { - const numeric = Number(value); - if (!Number.isNaN(numeric)) { - return numeric; - } - return value; - } - if (value instanceof Date) { - return value.toISOString(); - } - return null; -}; - -export const toComparableNumber = (value: unknown): number | null => { - if (typeof value === 'number') { - return value; - } - if (typeof value === 'string') { - const numeric = Number(value); - if (!Number.isNaN(numeric)) { - return numeric; - } - const timestamp = Date.parse(value); - if (!Number.isNaN(timestamp)) { - return timestamp; - } - return null; - } - if (value instanceof Date) { - return value.getTime(); - } - return null; -}; - -const compareValues = (left: unknown, right: unknown): number | null => { - const leftComparable = toComparableNumber(left); - const rightComparable = toComparableNumber(right); - if (leftComparable === null || rightComparable === null) { - return null; - } - return leftComparable - rightComparable; -}; - -const evaluateFilter = (rawValue: unknown, filter: FilterConfig, now: Date) => { - const comparisonSource = - filter.dynamicValue !== undefined - ? resolveDynamicValue(filter.dynamicValue, now) - : filter.value; - - switch (filter.operator) { - case 'equals': { - const left = normalizeForEquality(rawValue); - const right = normalizeForEquality(comparisonSource); - return left !== null && right !== null ? left === right : rawValue === comparisonSource; - } - case 'notEquals': { - const left = normalizeForEquality(rawValue); - const right = normalizeForEquality(comparisonSource); - return left !== null && right !== null ? left !== right : rawValue !== comparisonSource; - } - case 'in': { - if (!Array.isArray(comparisonSource)) { - return false; - } - const left = normalizeForEquality(rawValue); - if (left === null) { - return false; - } - return comparisonSource.map(normalizeForEquality).some((candidate) => candidate === left); - } - case 'notIn': { - if (!Array.isArray(comparisonSource)) { - return true; - } - const left = normalizeForEquality(rawValue); - if (left === null) { - return true; - } - return !comparisonSource.map(normalizeForEquality).some((candidate) => candidate === left); - } - case 'gt': { - const comparison = compareValues(rawValue, comparisonSource); - return comparison !== null ? comparison > 0 : false; - } - case 'gte': { - const comparison = compareValues(rawValue, comparisonSource); - return comparison !== null ? comparison >= 0 : false; - } - case 'lt': { - const comparison = compareValues(rawValue, comparisonSource); - return comparison !== null ? comparison < 0 : false; - } - case 'lte': { - const comparison = compareValues(rawValue, comparisonSource); - return comparison !== null ? comparison <= 0 : false; - } - default: - return true; - } -}; - -export const getNestedValue = (record: ChildRecord, pathExpression: string): unknown => { - if (!pathExpression.includes('.')) { - return record[pathExpression]; - } - - return pathExpression.split('.').reduce((accumulator, key) => { - if (!isObject(accumulator)) { - return undefined; - } - return accumulator[key]; - }, record); -}; - -export const applyFilters = ( - records: ChildRecord[], - filters: FilterConfig[] | undefined, - now: Date, -) => { - if (!filters || filters.length === 0) { - return records; - } - return records.filter((record) => - filters.every((filter) => evaluateFilter(getNestedValue(record, filter.field), filter, now)), - ); -}; diff --git a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/index.ts b/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/index.ts deleted file mode 100644 index 03ce8fe411..0000000000 --- a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/index.ts +++ /dev/null @@ -1,257 +0,0 @@ -import { computeAggregations } from './aggregations'; -import { buildChildRecordIndex, TwentyClient } from './client'; -import { extractRelationValues, resolveRollupConfig } from './config'; -import { getNestedValue } from './filtering'; -import type { ExecutionSummaryItem } from './types'; -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -const isObject = (value: unknown): value is Record => - typeof value === 'object' && value !== null; - -const sanitizePayload = (payload: Record) => - Object.fromEntries( - Object.entries(payload).filter(([, value]) => { - if (value === undefined) { - return false; - } - if (typeof value === 'number' && !Number.isFinite(value)) { - return false; - } - return true; - }), - ); - -const determineFullRebuild = (params: unknown) => { - if (!isObject(params)) { - return false; - } - if (params.recalculateAll === true || params.fullRebuild === true) { - return true; - } - if (isObject(params.trigger) && params.trigger.type === 'cron') { - return true; - } - if (params.trigger === 'cron') { - return true; - } - return false; -}; - -const getApiCredentials = () => { - const apiKey = - process.env.TWENTY_API_KEY ?? - process.env.TWENTY_API_TOKEN ?? - process.env.API_KEY; - - if (!apiKey) { - return null; - } - - const baseUrlRaw = - process.env.TWENTY_API_BASE_URL ?? - process.env.TWENTY_REST_BASE_URL ?? - process.env.TWENTY_API_URL ?? - ''; - - const baseUrl = - typeof baseUrlRaw === 'string' && baseUrlRaw.trim().length > 0 - ? baseUrlRaw - : 'https://app.twenty.com/rest'; - - return { apiKey, baseUrl }; -}; - -const formatSummary = ( - summaries: ExecutionSummaryItem[], - durationMs: number, -) => ({ - status: 'ok', - tookMs: durationMs, - totals: { - processed: summaries.reduce( - (accumulator, item) => accumulator + item.processed, - 0, - ), - updated: summaries.reduce( - (accumulator, item) => accumulator + item.updated, - 0, - ), - }, - details: summaries, -}); - -export const main = async (params: unknown): Promise => { - const start = Date.now(); - try { - const config = resolveRollupConfig(); - if (config.length === 0) { - return { status: 'noop', reason: 'No rollup definitions configured' }; - } - - const fullRebuild = determineFullRebuild(params); - const relationCache = new Map>(); - - config.forEach((definition) => { - if (!relationCache.has(definition.relationField)) { - relationCache.set( - definition.relationField, - extractRelationValues(params, definition.relationField), - ); - } - }); - - const credentials = getApiCredentials(); - if (!credentials) { - console.warn( - '[rollup] skipping execution because TWENTY_API_KEY is not set', - ); - return { status: 'noop', reason: 'TWENTY_API_KEY not configured' }; - } - - const { apiKey, baseUrl } = credentials; - const client = new TwentyClient(apiKey, baseUrl); - const now = new Date(); - const summaries: ExecutionSummaryItem[] = []; - - for (const definition of config) { - const targetIds = fullRebuild - ? undefined - : relationCache.get(definition.relationField); - - if (!fullRebuild && (!targetIds || targetIds.size === 0)) { - summaries.push({ - parentObject: definition.parentObject, - processed: 0, - updated: 0, - relationField: definition.relationField, - mode: 'targeted', - skipped: `No ${definition.relationField} values found in payload`, - }); - continue; - } - - const childIndex = await buildChildRecordIndex( - definition, - client, - targetIds, - ); - - const updates: Array<{ - id: string; - payload: Record; - context: { relationId: string }; - }> = []; - childIndex.forEach((records, parentId) => { - const recordIds = records - .map((record) => getNestedValue(record, 'id')) - .filter((value): value is string => typeof value === 'string'); - console.info( - `[rollup] relation ${parentId} includes ${recordIds.length} ${definition.childObject}(s): ${recordIds.join(', ')}`, - ); - const aggregates = computeAggregations(definition, records, now); - const payload = sanitizePayload(aggregates); - if (Object.keys(payload).length === 0) { - return; - } - console.info( - `[rollup] computed aggregates for ${definition.parentObject} ${parentId}: ${JSON.stringify(payload)}`, - ); - updates.push({ - id: parentId, - payload, - context: { relationId: parentId }, - }); - }); - - let updatedCount = 0; - for (const update of updates) { - try { - await client.updateObject( - definition.parentObject, - update.id, - update.payload, - ); - updatedCount += 1; - console.info( - `[rollup] updated ${definition.parentObject} ${update.id} (relation ${update.context.relationId})`, - ); - } catch (error) { - const reason = - error instanceof Error - ? error.message || error.toString() - : typeof error === 'string' - ? error - : 'Unknown error'; - console.warn( - `[rollup] failed to update ${definition.parentObject} ${update.id} (relation ${update.context.relationId}): ${reason}`, - ); - } - } - - summaries.push({ - parentObject: definition.parentObject, - processed: childIndex.size, - updated: updatedCount, - relationField: definition.relationField, - mode: fullRebuild ? 'full-rebuild' : 'targeted', - }); - } - - const totalProcessed = summaries.reduce( - (accumulator, item) => accumulator + item.processed, - 0, - ); - - if (!fullRebuild && totalProcessed === 0) { - return { - status: 'noop', - reason: 'No matching relation ids found in payload', - }; - } - - const duration = Date.now() - start; - console.info( - `[rollup] completed mode=${fullRebuild ? 'full-rebuild' : 'targeted'} processed=${totalProcessed} durationMs=${duration}`, - ); - return formatSummary(summaries, duration); - } catch (error) { - const serializedError = - error instanceof Error - ? `${error.name}: ${error.message}${error.stack ? `\n${error.stack}` : ''}` - : JSON.stringify(error); - console.error('[rollup] execution failed', serializedError); - return { - status: 'error', - message: - error instanceof Error - ? error.message || 'Unknown error' - : typeof error === 'string' - ? error - : 'Unknown error', - }; - } -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: 'c3ec36c8-5b1d-421f-9172-a9e035ab9c18', - name: 'calculaterollups', - triggers: [ - { - universalIdentifier: 'eec8aaf2-b0cc-47fd-b522-8d4aa5fe4bd3', - type: 'databaseEvent', - eventName: 'opportunity.*', - }, - { - universalIdentifier: 'a3fea230-1121-44a6-b395-5811c3031f8e', - type: 'cron', - pattern: ' 0 2 * * *', - }, - { - universalIdentifier: 'd33b0fe4-4b2b-45c0-aa2f-e617fdbba484', - type: 'route', - path: '/recalculate-all', - httpMethod: 'POST', - isAuthRequired: true, - }, - ], -}; diff --git a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/rollupConfig.ts b/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/rollupConfig.ts deleted file mode 100644 index f24fb57f1a..0000000000 --- a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/rollupConfig.ts +++ /dev/null @@ -1,81 +0,0 @@ -import type { RollupConfig } from './types'; - -export const defaultRollupConfig: RollupConfig = [ - { - parentObject: 'company', - childObject: 'opportunity', - relationField: 'companyId', - childFilters: [ - { - field: 'amount.amountMicros', - operator: 'gt', - value: 0, - }, - ], - aggregations: [ - { - type: 'SUM', - childField: 'amount.amountMicros', - parentField: 'totalPipelineAmount', - currencyField: 'amount.currencyCode', - }, - { - type: 'COUNT', - parentField: 'totalOpportunityCount', - }, - { - type: 'SUM', - childField: 'amount.amountMicros', - parentField: 'wonPipelineAmount', - currencyField: 'amount.currencyCode', - filters: [ - { - field: 'stage', - operator: 'equals', - value: 'CUSTOMER', - }, - ], - }, - { - type: 'COUNT', - parentField: 'wonOpportunityCount', - filters: [ - { - field: 'stage', - operator: 'equals', - value: 'CUSTOMER', - }, - ], - }, - { - type: 'SUM', - childField: 'amount.amountMicros', - parentField: 'openPipelineAmount', - currencyField: 'amount.currencyCode', - filters: [ - { - field: 'stage', - operator: 'notEquals', - value: 'CUSTOMER', - }, - ], - }, - { - type: 'COUNT', - parentField: 'openOpportunityCount', - filters: [ - { - field: 'stage', - operator: 'notEquals', - value: 'CUSTOMER', - }, - ], - }, - { - type: 'MAX', - childField: 'closeDate', - parentField: 'lastOpportunityCloseDate', - }, - ], - }, -]; diff --git a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/types.ts b/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/types.ts deleted file mode 100644 index 4aaf3fc398..0000000000 --- a/packages/twenty-apps/community/rollup-engine/serverlessFunctions/calculaterollups/src/types.ts +++ /dev/null @@ -1,49 +0,0 @@ -export type AggregationType = 'SUM' | 'COUNT' | 'MAX' | 'MIN' | 'AVG'; - -export type Operator = - | 'equals' - | 'notEquals' - | 'in' - | 'notIn' - | 'gt' - | 'gte' - | 'lt' - | 'lte'; - -export type DynamicValue = 'startOfYear'; - -export interface FilterConfig { - field: string; - operator: Operator; - value?: string | number | boolean | Array; - dynamicValue?: DynamicValue; -} - -export interface AggregationConfig { - type: AggregationType; - parentField: string; - childField?: string; - currencyField?: string; - filters?: FilterConfig[]; -} - -export interface RollupDefinition { - parentObject: string; - childObject: string; - relationField: string; - childFilters?: FilterConfig[]; - aggregations: AggregationConfig[]; -} - -export type RollupConfig = RollupDefinition[]; - -export type ChildRecord = Record; - -export interface ExecutionSummaryItem { - parentObject: string; - processed: number; - updated: number; - mode: 'full-rebuild' | 'targeted'; - relationField: string; - skipped?: string; -} diff --git a/packages/twenty-apps/community/rollup-engine/tsconfig.json b/packages/twenty-apps/community/rollup-engine/tsconfig.json deleted file mode 100644 index 434ea6a985..0000000000 --- a/packages/twenty-apps/community/rollup-engine/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/rollup-engine/yarn.lock b/packages/twenty-apps/community/rollup-engine/yarn.lock deleted file mode 100644 index 61018440d3..0000000000 --- a/packages/twenty-apps/community/rollup-engine/yarn.lock +++ /dev/null @@ -1,1169 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@esbuild/aix-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/aix-ppc64@npm:0.25.12" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm64@npm:0.25.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm@npm:0.25.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-x64@npm:0.25.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-arm64@npm:0.25.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-x64@npm:0.25.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-arm64@npm:0.25.12" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-x64@npm:0.25.12" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm64@npm:0.25.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm@npm:0.25.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ia32@npm:0.25.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-loong64@npm:0.25.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-mips64el@npm:0.25.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ppc64@npm:0.25.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-riscv64@npm:0.25.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-s390x@npm:0.25.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-x64@npm:0.25.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-arm64@npm:0.25.12" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-x64@npm:0.25.12" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-arm64@npm:0.25.12" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-x64@npm:0.25.12" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openharmony-arm64@npm:0.25.12" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/sunos-x64@npm:0.25.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-arm64@npm:0.25.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-ia32@npm:0.25.12" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-x64@npm:0.25.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: "npm:^7.0.4" - checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^3.0.0": - version: 3.0.0 - resolution: "@npmcli/agent@npm:3.0.0" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/fs@npm:4.0.0" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@types/node@npm:^24.7.2": - version: 24.10.1 - resolution: "@types/node@npm:24.10.1" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/d6bca7a78f550fbb376f236f92b405d676003a8a09a1b411f55920ef34286ee3ee51f566203920e835478784df52662b5b2af89159d9d319352e9ea21801c002 - languageName: node - linkType: hard - -"abbrev@npm:^3.0.0": - version: 3.0.1 - resolution: "abbrev@npm:3.0.1" - checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.4 - resolution: "agent-base@npm:7.1.4" - checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.2.2 - resolution: "ansi-regex@npm:6.2.2" - checksum: 10c0/05d4acb1d2f59ab2cf4b794339c7b168890d44dda4bf0ce01152a8da0213aca207802f930442ce8cd22d7a92f44907664aac6508904e75e038fa944d2601b30f - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.3 - resolution: "ansi-styles@npm:6.2.3" - checksum: 10c0/23b8a4ce14e18fb854693b95351e286b771d23d8844057ed2e7d083cd3e708376c3323707ec6a24365f7d7eda3ca00327fe04092e29e551499ec4c8b7bfac868 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.2 - resolution: "brace-expansion@npm:2.0.2" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf - languageName: node - linkType: hard - -"cacache@npm:^19.0.1": - version: 19.0.1 - resolution: "cacache@npm:19.0.1" - dependencies: - "@npmcli/fs": "npm:^4.0.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^7.0.2" - ssri: "npm:^12.0.0" - tar: "npm:^7.4.3" - unique-filename: "npm:^4.0.0" - checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.6": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.3.4": - version: 4.4.3 - resolution: "debug@npm:4.4.3" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 - languageName: node - linkType: hard - -"dotenv@npm:^16.4.5": - version: 16.6.1 - resolution: "dotenv@npm:16.6.1" - checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"esbuild@npm:~0.25.0": - version: 0.25.12 - resolution: "esbuild@npm:0.25.12" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.12" - "@esbuild/android-arm": "npm:0.25.12" - "@esbuild/android-arm64": "npm:0.25.12" - "@esbuild/android-x64": "npm:0.25.12" - "@esbuild/darwin-arm64": "npm:0.25.12" - "@esbuild/darwin-x64": "npm:0.25.12" - "@esbuild/freebsd-arm64": "npm:0.25.12" - "@esbuild/freebsd-x64": "npm:0.25.12" - "@esbuild/linux-arm": "npm:0.25.12" - "@esbuild/linux-arm64": "npm:0.25.12" - "@esbuild/linux-ia32": "npm:0.25.12" - "@esbuild/linux-loong64": "npm:0.25.12" - "@esbuild/linux-mips64el": "npm:0.25.12" - "@esbuild/linux-ppc64": "npm:0.25.12" - "@esbuild/linux-riscv64": "npm:0.25.12" - "@esbuild/linux-s390x": "npm:0.25.12" - "@esbuild/linux-x64": "npm:0.25.12" - "@esbuild/netbsd-arm64": "npm:0.25.12" - "@esbuild/netbsd-x64": "npm:0.25.12" - "@esbuild/openbsd-arm64": "npm:0.25.12" - "@esbuild/openbsd-x64": "npm:0.25.12" - "@esbuild/openharmony-arm64": "npm:0.25.12" - "@esbuild/sunos-x64": "npm:0.25.12" - "@esbuild/win32-arm64": "npm:0.25.12" - "@esbuild/win32-ia32": "npm:0.25.12" - "@esbuild/win32-x64": "npm:0.25.12" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.3 - resolution: "exponential-backoff@npm:3.1.3" - checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 - languageName: node - linkType: hard - -"fdir@npm:^6.5.0": - version: 6.5.0 - resolution: "fdir@npm:6.5.0" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.1 - resolution: "foreground-child@npm:3.3.1" - dependencies: - cross-spawn: "npm:^7.0.6" - signal-exit: "npm:^4.0.1" - checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.3": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"get-tsconfig@npm:^4.7.5": - version: 4.13.0 - resolution: "get-tsconfig@npm:4.13.0" - dependencies: - resolve-pkg-maps: "npm:^1.0.0" - checksum: 10c0/2c49ef8d3907047a107f229fd610386fe3b7fe9e42dfd6b42e7406499493cdda8c62e83e57e8d7a98125610774b9f604d3a0ff308d7f9de5c7ac6d1b07cb6036 - languageName: node - linkType: hard - -"glob@npm:^10.2.2": - version: 10.5.0 - resolution: "glob@npm:10.5.0" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/100705eddbde6323e7b35e1d1ac28bcb58322095bd8e63a7d0bef1a2cdafe0d0f7922a981b2b48369a4f8c1b077be5c171804534c3509dfe950dde15fbe6d828 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.2.0 - resolution: "http-cache-semantics@npm:4.2.0" - checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:4" - checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"ip-address@npm:^10.0.1": - version: 10.0.1 - resolution: "ip-address@npm:10.0.1" - checksum: 10c0/1634d79dae18394004775cb6d699dc46b7c23df6d2083164025a2b15240c1164fccde53d0e08bd5ee4fc53913d033ab6b5e395a809ad4b956a940c446e948843 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"make-fetch-happen@npm:^14.0.3": - version: 14.0.3 - resolution: "make-fetch-happen@npm:14.0.3" - dependencies: - "@npmcli/agent": "npm:^3.0.0" - cacache: "npm:^19.0.1" - http-cache-semantics: "npm:^4.1.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^4.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^1.0.0" - proc-log: "npm:^5.0.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^12.0.0" - checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^4.0.0": - version: 4.0.1 - resolution: "minipass-fetch@npm:4.0.1" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^3.0.1" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": - version: 3.1.0 - resolution: "minizlib@npm:3.1.0" - dependencies: - minipass: "npm:^7.1.2" - checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec - languageName: node - linkType: hard - -"ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 11.5.0 - resolution: "node-gyp@npm:11.5.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^14.0.3" - nopt: "npm:^8.0.0" - proc-log: "npm:^5.0.0" - semver: "npm:^7.3.5" - tar: "npm:^7.4.3" - tinyglobby: "npm:^0.2.12" - which: "npm:^5.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/31ff49586991b38287bb15c3d529dd689cfc32f992eed9e6997b9d712d5d21fe818a8b1bbfe3b76a7e33765c20210c5713212f4aa329306a615b87d8a786da3a - languageName: node - linkType: hard - -"nopt@npm:^8.0.0": - version: 8.1.0 - resolution: "nopt@npm:8.1.0" - dependencies: - abbrev: "npm:^3.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.3 - resolution: "p-map@npm:7.0.3" - checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 - languageName: node - linkType: hard - -"proc-log@npm:^5.0.0": - version: 5.0.0 - resolution: "proc-log@npm:5.0.0" - checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"resolve-pkg-maps@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-pkg-maps@npm:1.0.0" - checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"rollup-engine@workspace:.": - version: 0.0.0-use.local - resolution: "rollup-engine@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - dotenv: "npm:^16.4.5" - tsx: "npm:^4.20.6" - twenty-sdk: "npm:0.0.3" - languageName: unknown - linkType: soft - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"semver@npm:^7.3.5": - version: 7.7.3 - resolution: "semver@npm:7.7.3" - bin: - semver: bin/semver.js - checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: "npm:^7.1.2" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.7 - resolution: "socks@npm:2.8.7" - dependencies: - ip-address: "npm:^10.0.1" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/2805a43a1c4bcf9ebf6e018268d87b32b32b06fbbc1f9282573583acc155860dc361500f89c73bfbb157caa1b4ac78059eac0ef15d1811eb0ca75e0bdadbc9d2 - languageName: node - linkType: hard - -"ssri@npm:^12.0.0": - version: 12.0.0 - resolution: "ssri@npm:12.0.0" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.2 - resolution: "strip-ansi@npm:7.1.2" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/0d6d7a023de33368fd042aab0bf48f4f4077abdfd60e5393e73c7c411e85e1b3a83507c11af2e656188511475776215df9ca589b4da2295c9455cc399ce1858b - languageName: node - linkType: hard - -"tar@npm:^7.4.3": - version: 7.5.2 - resolution: "tar@npm:7.5.2" - dependencies: - "@isaacs/fs-minipass": "npm:^4.0.0" - chownr: "npm:^3.0.0" - minipass: "npm:^7.1.2" - minizlib: "npm:^3.1.0" - yallist: "npm:^5.0.0" - checksum: 10c0/a7d8b801139b52f93a7e34830db0de54c5aa45487c7cb551f6f3d44a112c67f1cb8ffdae856b05fd4f17b1749911f1c26f1e3a23bbe0279e17fd96077f13f467 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.12": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" - dependencies: - fdir: "npm:^6.5.0" - picomatch: "npm:^4.0.3" - checksum: 10c0/869c31490d0d88eedb8305d178d4c75e7463e820df5a9b9d388291daf93e8b1eb5de1dad1c1e139767e4269fe75f3b10d5009b2cc14db96ff98986920a186844 - languageName: node - linkType: hard - -"tsx@npm:^4.20.6": - version: 4.20.6 - resolution: "tsx@npm:4.20.6" - dependencies: - esbuild: "npm:~0.25.0" - fsevents: "npm:~2.3.3" - get-tsconfig: "npm:^4.7.5" - dependenciesMeta: - fsevents: - optional: true - bin: - tsx: dist/cli.mjs - checksum: 10c0/07757a9bf62c271e0a00869b2008c5f2d6e648766536e4faf27d9d8027b7cde1ac8e4871f4bb570c99388bcee0018e6869dad98c07df809b8052f9c549cd216f - languageName: node - linkType: hard - -"twenty-sdk@npm:0.0.3": - version: 0.0.3 - resolution: "twenty-sdk@npm:0.0.3" - checksum: 10c0/0a3c85c27edb22fb50f7eb0da4f9770e85729fce05e9e0118ad0cdfc36e42425c93340a6cd1c276daf30aeeaa612db0cd905831c0a8287a31bff3da5be9b0562 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"unique-filename@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-filename@npm:4.0.0" - dependencies: - unique-slug: "npm:^5.0.0" - checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc - languageName: node - linkType: hard - -"unique-slug@npm:^5.0.0": - version: 5.0.0 - resolution: "unique-slug@npm:5.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^5.0.0": - version: 5.0.0 - resolution: "which@npm:5.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/stripe-synchronizer/.yarnrc.yml b/packages/twenty-apps/community/stripe-synchronizer/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/stripe-synchronizer/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/stripe-synchronizer/README.md b/packages/twenty-apps/community/stripe-synchronizer/README.md deleted file mode 100644 index 4bcd6a225d..0000000000 --- a/packages/twenty-apps/community/stripe-synchronizer/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Stripe synchronizer - -Synchronizes customers from Stripe to Twenty - -## Requirements -- an `apiKey` - go to Settings > API & Webhooks to generate one -- Stripe secret API key - available in Stripe workbench - -## Setup -1. Synchronize app -```bash -cd packages/twenty-apps/community/stripe-synchronizer -yarn auth -yarn sync -``` -2. Go to Stripe > Workbench > Webhooks and add webhook: -- events: customer.subscription.created and customer.subscription.updated -- webhook endpoint -- destination: `{TWENTY_URL}/s/webhook/stripe`, e.g. https://workspace.twenty.com/s/webhook/stripe -3. Go to Twenty > Settings > Integrations > Stripe synchronizer > Settings and add values - -## Flow -1. Retrieve Stripe webhook -2. Check if it's either subscription created or updated, if not, exit -3. Read customer ID, sub status and quantity from webhook -4. Read customer data from Stripe API, if business name is empty, exit -5. Check if customer company exists in Twenty, if not, create it -6. Check if related person exists in Twenty, if not, create it and link to company - -## Notes -- app synchronizes only new customers, those created before start of app won't be synchronized unless they're updated -- customers will be added to Twenty People object only if their name and email are filled with data, otherwise app will throw an error - -## Todo -- add validation of signature key from Stripe to ensure that incoming request is valid - (possible once request headers are exposed to serverless functions) -- update app so it'll use provided Twenty generated object with native types from workspace once extending objects is possible \ No newline at end of file diff --git a/packages/twenty-apps/community/stripe-synchronizer/application.config.ts b/packages/twenty-apps/community/stripe-synchronizer/application.config.ts deleted file mode 100644 index a7cff5c7af..0000000000 --- a/packages/twenty-apps/community/stripe-synchronizer/application.config.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/define'; - -const config: ApplicationConfig = { - universalIdentifier: '0ed2bcb8-64ab-4ca1-b875-eeabf41b5f95', - displayName: 'Stripe synchronizer', - description: 'Plugin synchronizing data from Stripe to Twenty', - icon: "IconMoneyBag", - applicationVariables: { - TWENTY_API_KEY: { - universalIdentifier: 'b0d9569b-da3e-4dad-b7b1-36c96f0598b9', - isSecret: true, - description: 'Required to send requests to Twenty', - }, - TWENTY_API_URL: { - universalIdentifier: 'fa50e016-e045-497a-9cdf-0949e7ef9f7a', - isSecret: false, - description: 'Optional, defaults to cloud API URL', - }, - STRIPE_API_KEY: { - universalIdentifier: '807d67d6-f720-49c4-a93e-ef16cf4fe919', - isSecret: true, - description: 'Required to send request to Stripe', - }, - }, -}; - -export default config; diff --git a/packages/twenty-apps/community/stripe-synchronizer/package.json b/packages/twenty-apps/community/stripe-synchronizer/package.json deleted file mode 100644 index 4bc5ecf5f6..0000000000 --- a/packages/twenty-apps/community/stripe-synchronizer/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "stripe-synchronizer", - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "dependencies": { - "axios": "^1.13.2", - "twenty-sdk": "0.2.4" - }, - "devDependencies": { - "@types/node": "^24.7.2" - }, - "scripts": { - "auth": "twenty auth login", - "dev": "twenty app dev", - "sync": "twenty app sync", - "uninstall": "twenty app uninstall", - "logs": "twenty app logs", - "create-entity": "twenty app add", - "help": "twenty --help" - } -} diff --git a/packages/twenty-apps/community/stripe-synchronizer/src/index.ts b/packages/twenty-apps/community/stripe-synchronizer/src/index.ts deleted file mode 100644 index ccb921c0e9..0000000000 --- a/packages/twenty-apps/community/stripe-synchronizer/src/index.ts +++ /dev/null @@ -1,505 +0,0 @@ -import axios from 'axios'; -import { type FunctionConfig } from 'twenty-sdk/define'; -import { - type stripeCustomer, - type stripeEvent, - type stripeStatus, - type twentyObject, -} from './types'; - -const TWENTY_API_KEY: string = process.env.TWENTY_API_KEY ?? ''; -const TWENTY_API_URL: string = - process.env.TWENTY_API_URL !== '' && process.env.TWENTY_API_URL !== undefined - ? `${process.env.TWENTY_API_URL}/rest` - : 'https://api.twenty.com/rest'; -const STRIPE_API_KEY: string = process.env.STRIPE_API_KEY ?? ''; -const STRIPE_API_URL: string = 'https://api.stripe.com/v1/customers'; - -const getTwentyObjectData = async ( - objectSingularName: string, -): Promise => { - const options = { - method: 'GET', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - }, - url: `${TWENTY_API_URL}/metadata/objects`, - }; - try { - const response = await axios.request(options); - if (response.status === 200) { - const companyObject = response.data.data.objects.find( - (object: twentyObject) => object.nameSingular === objectSingularName, - ); - return (companyObject as twentyObject) ?? ({} as twentyObject); - } - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const createFields = async (objectId: string, fieldName: string) => { - const data = - fieldName === 'seats' - ? { - type: 'NUMBER', - objectMetadataId: objectId, - name: 'seats', - label: 'Seats', - icon: 'IconMan', - } - : { - type: 'SELECT', - objectMetadataId: objectId, - name: 'subStatus', - label: 'Sub Status', - icon: 'IconStatusChange', - options: [ - { - color: 'iris', - label: 'Incomplete', - value: 'INCOMPLETE', - position: 1, - }, - { - color: 'sky', - label: 'Incomplete (expired)', - value: 'INCOMPLETE_EXPIRED', - position: 2, - }, - { - color: 'amber', - label: 'Trialing', - value: 'TRIALING', - position: 3, - }, - { - color: 'green', - label: 'Active', - value: 'ACTIVE', - position: 4, - }, - { - color: 'orange', - label: 'Past due', - value: 'PAST_DUE', - position: 5, - }, - { - color: 'brown', - label: 'Canceled', - value: 'CANCELED', - position: 6, - }, - { - color: 'red', - label: 'Unpaid', - value: 'UNPAID', - position: 7, - }, - { - color: 'gray', - label: 'Paused', - value: 'PAUSED', - position: 8, - }, - ], - }; - - const options = { - method: 'POST', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/metadata/fields`, - data: data, - }; - try { - const response = await axios(options); - return response.status === 201; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const getStripeCustomerData = async ( - customerID: string, -): Promise => { - const options = { - method: 'GET', - url: `${STRIPE_API_URL}/${customerID}`, - auth: { - username: STRIPE_API_KEY, - password: '', - }, - }; - try { - const response = await axios(options); - return response.status === 200 - ? ({ - name: response.data.name, - businessName: response.data.business_name, - email: response.data.email, - } as stripeCustomer) - : ({} as stripeCustomer); - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const checkIfCompanyExistsInTwenty = async ( - name: string | undefined, -): Promise => { - const options = { - method: 'GET', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - }, - url: `${TWENTY_API_URL}/companies?filter=name%5Beq%5D%3A%22${name}%22`, - }; - try { - const response = await axios(options); - return response.status === 200 && - response.data.data.companies[0].id !== undefined - ? (response.data.data.companies[0].id as string) - : ''; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const updateTwentyCompany = async ( - companyId: string | undefined, - seats: number | null, - subStatus: stripeStatus, -): Promise => { - const options = { - method: 'PATCH', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/companies/${companyId}`, - data: { - seats: seats, - subStatus: subStatus, - }, - }; - try { - const response = await axios(options); - return response.status === 200; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const createTwentyCompany = async ( - customerName: string | undefined, - seats: number | null, - subStatus: string, -): Promise => { - const options = { - method: 'POST', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/companies`, - data: { - name: customerName, - seats: seats, - subStatus: subStatus, - }, - }; - try { - const response = await axios(options); - return response.status === 201 ? (response.data.data.id as string) : ''; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const checkIfStripePersonExistsInTwenty = async (email: string | null) => { - const options = { - method: 'GET', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/people?filter=emails.primaryEmail%5Beq%5D%3A%22${email}%22`, // mail is unique by default so there can be only 1 person with given mail - }; - try { - const response = await axios.request(options); - return response.status === 200 && - response.data.data.people[0].id !== undefined - ? (response.data.data.people[0].id as string) - : ''; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const addTwentyPerson = async ( - firstName: string, - lastName: string, - email: string, - companyId: string, - seats: number, - subStatus: stripeStatus, -): Promise => { - const options = { - method: 'POST', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/people`, - data: { - firstName: firstName, - lastName: lastName, - emails: { primaryEmail: email }, - companyId: companyId, - seats: seats, - subStatus: subStatus, - }, - }; - try { - const response = await axios.request(options); - return response.status === 201; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -const updateTwentyPerson = async ( - id: string, - seats: number, - subStatus: stripeStatus, -): Promise => { - const options = { - method: 'PATCH', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/people/${id}`, - data: { - seats: seats, - subStatus: subStatus, - }, - }; - try { - const response = await axios.request(options); - return response.status === 200; - } catch (error) { - if (axios.isAxiosError(error)) { - throw error; - } - } -}; - -export const main = async ( - params: Record, -): Promise => { - if (TWENTY_API_KEY === '' || STRIPE_API_KEY === '') { - throw new Error('Missing variables'); - } - - try { - // TODO: add validation of signature key from Stripe (not possible at the moment as headers aren't accessible in serverless functions) - const stripe = params as stripeEvent; - const allowed_types: string[] = [ - 'customer.subscription.created', - 'customer.subscription.updated', - ]; - if (!allowed_types.includes(stripe.type)) { - throw new Error('Wrong type of webhook'); - } - - const stripeCustomer: stripeCustomer | undefined = - await getStripeCustomerData(stripe.data.object.customer); - if ( - stripeCustomer?.businessName === undefined || - stripeCustomer?.businessName === '' - ) { - console.warn('Set customer business name in Stripe'); - return {}; - } - - const companyObject = await getTwentyObjectData('company'); - if ( - companyObject?.fields.find((field) => field.name === 'seats') === - undefined - ) { - const seatsFieldCreated: boolean | undefined = companyObject?.id - ? await createFields(companyObject?.id, 'seats') - : false; - if (!seatsFieldCreated) { - throw new Error('Seats field creation in Company object failed'); - } else { - console.info('Seats field creation in Company object succeeded'); - } - } - if ( - companyObject?.fields.find((field) => field.name === 'subStatus') === - undefined - ) { - const subStatusFieldCreated: boolean | undefined = companyObject?.id - ? await createFields(companyObject?.id, 'subStatus') - : false; - if (!subStatusFieldCreated) { - throw new Error('Sub status field creation in Company object failed'); - } else { - console.info('Sub status field creation in Company object succeeded'); - } - } - - const personObject = await getTwentyObjectData('person'); - if ( - personObject?.fields.find((field) => field.name === 'seats') === undefined - ) { - const seatsFieldCreated: boolean | undefined = personObject?.id - ? await createFields(personObject?.id, 'seats') - : false; - if (!seatsFieldCreated) { - throw new Error('Seats field creation in People object failed'); - } else { - console.info('Seats field creation in People object succeeded'); - } - } - if ( - personObject?.fields.find((field) => field.name === 'subStatus') === - undefined - ) { - const subStatusFieldCreated: boolean | undefined = personObject?.id - ? await createFields(personObject?.id, 'subStatus') - : false; - if (!subStatusFieldCreated) { - throw new Error('Sub status field creation in People object failed'); - } else { - console.info('Sub status field creation in People object succeeded'); - } - } - - const twentyCompanyId: string | undefined = - await checkIfCompanyExistsInTwenty(stripeCustomer?.businessName); - const seats: number = - stripe.data.object.quantity ?? - stripe.data.object.items.data.reduce( - (acc, item) => acc + item.quantity, - 0, - ); // we don't know if subscription has only 1 item (product) or more - let updatedTwentyCompanyId: string | undefined; - if (twentyCompanyId === '') { - const twentyCompanyCreated: string | undefined = - await createTwentyCompany( - stripeCustomer?.businessName, - seats, - stripe.data.object.status.toUpperCase(), - ); - if (twentyCompanyCreated === '') { - throw new Error('Creation of Stripe customer in Twenty failed'); - } else { - console.log('Creation of Stripe customer in Twenty succeeded'); - updatedTwentyCompanyId = twentyCompanyCreated; - } - } else { - const twentyCompanyUpdated: boolean | undefined = - await updateTwentyCompany( - twentyCompanyId, - seats, - stripe.data.object.status.toUpperCase() as stripeStatus, - ); - if (!twentyCompanyUpdated) { - throw new Error('Update of Stripe customer in Twenty failed'); - } else { - console.log('Update of Stripe customer in Twenty succeeded'); - updatedTwentyCompanyId = twentyCompanyId; - } - } - - if (updatedTwentyCompanyId === undefined || updatedTwentyCompanyId === '') { - throw new Error('TwentyCompanyId not found'); - } else { - const stripeCustomerInTwenty: string | undefined = - await checkIfStripePersonExistsInTwenty(stripeCustomer.email); - if (stripeCustomerInTwenty === '') { - if (!stripeCustomer.name) { - throw new Error('Missing Stripe customer first or last name'); - } - if (!stripeCustomer.email) { - throw new Error('Missing Stripe customer email'); - } - const firstName: string = stripeCustomer.name?.split(' ')[0]; - const lastName: string = stripeCustomer.name?.split(' ')[1]; - const addedStripePersonToTwenty: boolean | undefined = - await addTwentyPerson( - firstName, - lastName, - stripeCustomer.email, - updatedTwentyCompanyId, - seats, - stripe.data.object.status.toUpperCase() as stripeStatus, - ); - if (!addedStripePersonToTwenty) { - throw new Error('Adding Stripe person to Twenty failed'); - } else { - console.log('Stripe person was added to Twenty'); - } - } else if (stripeCustomerInTwenty !== undefined) { - const updatedStripePersonInTwenty: boolean | undefined = - await updateTwentyPerson( - stripeCustomerInTwenty, - seats, - stripe.data.object.status.toUpperCase() as stripeStatus, - ); - if (!updatedStripePersonInTwenty) { - throw new Error('Update of Stripe person in Twenty failed'); - } else { - console.log('Update of Stripe person in Twenty succeeded'); - } - } else { - throw new Error('Twenty not found'); - } - } - return {}; - } catch (error) { - if (axios.isAxiosError(error)) { - console.error(error.message); - return {}; - } - console.error(error); - return {}; - } -}; - -export const config: FunctionConfig = { - universalIdentifier: 'cd15a738-18a5-406e-8b83-959dc52ebe14', - name: 'stripe', - triggers: [ - { - universalIdentifier: '55f58e19-d832-43c4-9f8b-3f29fc05c162', - type: 'route', - path: '/webhook/stripe', - httpMethod: 'POST', - isAuthRequired: false, - }, - ], -}; diff --git a/packages/twenty-apps/community/stripe-synchronizer/src/types.ts b/packages/twenty-apps/community/stripe-synchronizer/src/types.ts deleted file mode 100644 index ab7f29601b..0000000000 --- a/packages/twenty-apps/community/stripe-synchronizer/src/types.ts +++ /dev/null @@ -1,37 +0,0 @@ -export type stripeStatus = 'INCOMPLETE' | 'INCOMPLETE_EXPIRED' | 'TRIALING' | 'ACTIVE' | 'PAST_DUE' | 'CANCELED' | 'UNPAID' | 'PAUSED'; - -type stripeItem = { - quantity: number; -}; - -type stripeItemsData = { - data: stripeItem[]; -}; - -type stripeEventObject = { - customer: string; - items: stripeItemsData; - status: stripeStatus; - quantity: number | null; -}; - -type stripeEventData = { - object: stripeEventObject; -}; - -export type stripeEvent = { - data: stripeEventData; - type: string; -}; - -export type stripeCustomer = { - businessName?: string; - name: string | null; - email: string | null; -}; - -export type twentyObject = { - id: string; - nameSingular: string; - fields: Record[]; -}; \ No newline at end of file diff --git a/packages/twenty-apps/community/stripe-synchronizer/tsconfig.json b/packages/twenty-apps/community/stripe-synchronizer/tsconfig.json deleted file mode 100644 index 434ea6a985..0000000000 --- a/packages/twenty-apps/community/stripe-synchronizer/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/stripe-synchronizer/yarn.lock b/packages/twenty-apps/community/stripe-synchronizer/yarn.lock deleted file mode 100644 index cd7e911087..0000000000 --- a/packages/twenty-apps/community/stripe-synchronizer/yarn.lock +++ /dev/null @@ -1,2100 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@fastify/busboy@npm:^2.0.0": - version: 2.1.1 - resolution: "@fastify/busboy@npm:2.1.1" - checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 - languageName: node - linkType: hard - -"@genql/cli@npm:^3.0.3": - version: 3.0.5 - resolution: "@genql/cli@npm:3.0.5" - dependencies: - "@graphql-tools/graphql-file-loader": "npm:^7.5.11" - "@graphql-tools/load": "npm:^7.8.6" - fs-extra: "npm:^10.1.0" - graphql: "npm:^16.6.0" - kleur: "npm:^4.1.5" - listr: "npm:^0.14.3" - lodash: "npm:^4.17.21" - mkdirp: "npm:^0.5.1" - native-fetch: "npm:^4.0.2" - prettier: "npm:^2.8.0" - qs: "npm:^6.11.0" - rimraf: "npm:^2.6.3" - undici: "npm:^5.18.0" - yargs: "npm:^15.3.1" - bin: - genql: dist/cli.js - checksum: 10c0/646d4da8986741a8f1b610bd8cfb5bc26cd9a856de671461e4ca87fb05443f37dd0edfb3b30ceaa34cd049077873afa07febfd4714dd2e0681fb07484e19a080 - languageName: node - linkType: hard - -"@graphql-tools/graphql-file-loader@npm:^7.5.11": - version: 7.5.17 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" - dependencies: - "@graphql-tools/import": "npm:6.7.18" - "@graphql-tools/utils": "npm:^9.2.1" - globby: "npm:^11.0.3" - tslib: "npm:^2.4.0" - unixify: "npm:^1.0.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/f737f14357731ad01da57755e1cf26ce375b475209d6ab7e4b656b56191a8979d2ab7dd5d1c54a1f11e04374f7a373fa95ea5ec6a001d0cef913ea208fadc65b - languageName: node - linkType: hard - -"@graphql-tools/import@npm:6.7.18": - version: 6.7.18 - resolution: "@graphql-tools/import@npm:6.7.18" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - resolve-from: "npm:5.0.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/d33e37a1879dd43ac2851c9bac2f2873c58bb3687f1c06e159760dbb5e540ef074d688df70cc6dbd3ee5de48d437878df8f65a7c65ae80bd025bf98f2d615732 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^7.8.6": - version: 7.8.14 - resolution: "@graphql-tools/load@npm:7.8.14" - dependencies: - "@graphql-tools/schema": "npm:^9.0.18" - "@graphql-tools/utils": "npm:^9.2.1" - p-limit: "npm:3.1.0" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/1fa036ac596ccf48f350aa545d108c173184d9b53247f9e21c0d4ba96c5cba4a0b44281f9154f122e1e8e9d9d6eab93a5b2618ca8a797969bde1e75c1d45e786 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:^8.4.1": - version: 8.4.2 - resolution: "@graphql-tools/merge@npm:8.4.2" - dependencies: - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/2df55222b48e010e683572f456cf265aabae5748c59f7c1260c66dec9794b7a076d3706f04da969b77f0a32c7ccb4551fee30125931d3fe9c98a8806aae9a3f4 - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:^9.0.18": - version: 9.0.19 - resolution: "@graphql-tools/schema@npm:9.0.19" - dependencies: - "@graphql-tools/merge": "npm:^8.4.1" - "@graphql-tools/utils": "npm:^9.2.1" - tslib: "npm:^2.4.0" - value-or-promise: "npm:^1.0.12" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/42fd8ca8d3c8d60b583077c201980518482ff0cd5ed0c1f14bd9b835a2689ad41d02cbd3478f7d7dea7aec1227f7639fd5deb5e6360852a2e542b96b44bfb7a4 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^9.2.1": - version: 9.2.1 - resolution: "@graphql-tools/utils@npm:9.2.1" - dependencies: - "@graphql-typed-document-node/core": "npm:^3.1.1" - tslib: "npm:^2.4.0" - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/37a7bd7e14d28ff1bacc007dca84bc6cef2d7d7af9a547b5dbe52fcd134afddd6d4a7b2148cfbaff5ddba91a868453d597da77bd0457fb0be15928f916901606 - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:^3.1.1": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 10c0/94e9d75c1f178bbae8d874f5a9361708a3350c8def7eaeb6920f2c820e82403b7d4f55b3735856d68e145e86c85cbfe2adc444fdc25519cd51f108697e99346c - languageName: node - linkType: hard - -"@inquirer/checkbox@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/checkbox@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/679d17ffe3aef0825593f3bc8d193b6c37b860c6cf6e0e9a10d4e60cc254a2dfc5da4a982bf5b9b5147018e456fffcb0b0dadf93ee1914b9d600b0c814284e22 - languageName: node - linkType: hard - -"@inquirer/confirm@npm:^3.2.0": - version: 3.2.0 - resolution: "@inquirer/confirm@npm:3.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/a2cbfc8ae9c880bba4cce1993f5c399fb0d12741fdd574917c87fceb40ece62ffa60e35aaadf4e62d7c114f54008e45aee5d6d90497bb62d493996c02725d243 - languageName: node - linkType: hard - -"@inquirer/core@npm:^9.1.0": - version: 9.2.1 - resolution: "@inquirer/core@npm:9.2.1" - dependencies: - "@inquirer/figures": "npm:^1.0.6" - "@inquirer/type": "npm:^2.0.0" - "@types/mute-stream": "npm:^0.0.4" - "@types/node": "npm:^22.5.5" - "@types/wrap-ansi": "npm:^3.0.0" - ansi-escapes: "npm:^4.3.2" - cli-width: "npm:^4.1.0" - mute-stream: "npm:^1.0.0" - signal-exit: "npm:^4.1.0" - strip-ansi: "npm:^6.0.1" - wrap-ansi: "npm:^6.2.0" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/11c14be77a9fa85831de799a585721b0a49ab2f3b7d8fd1780c48ea2b29229c6bdc94e7892419086d0f7734136c2ba87b6a32e0782571eae5bbd655b1afad453 - languageName: node - linkType: hard - -"@inquirer/editor@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/editor@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - external-editor: "npm:^3.1.0" - checksum: 10c0/b8afc0790a7a5d82998bdfe469cbaa83b0cd0700be432cf95256c548e2a6a494997b5e93d65cbf94979c17b510758cf8494d85559f6b9508eb15d239a7f22aee - languageName: node - linkType: hard - -"@inquirer/expand@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/expand@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/f2030cb482a715e4d5153c19b3f0fd8bf47c16cdc16e1c669e90985386edf4f7b0f3b0e97e2990bb228878b93716228eb067d94fc557c25d3c5ee58747c0a995 - languageName: node - linkType: hard - -"@inquirer/figures@npm:^1.0.5, @inquirer/figures@npm:^1.0.6": - version: 1.0.15 - resolution: "@inquirer/figures@npm:1.0.15" - checksum: 10c0/6e39a040d260ae234ae220180b7994ff852673e20be925f8aa95e78c7934d732b018cbb4d0ec39e600a410461bcb93dca771e7de23caa10630d255692e440f69 - languageName: node - linkType: hard - -"@inquirer/input@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/input@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/44c8cea38c9192f528cae556f38709135a00230132deab3b9bb9a925375fce0513fecf4e8c1df7c4319e1ed7aa31fb4dd2c4956c8bc9dd39af087aafff5b6f1f - languageName: node - linkType: hard - -"@inquirer/number@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/number@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - checksum: 10c0/db472dab57c951c4a083b2a749ce58262b1efd9889e7603de6e9c3f9af7d8dce8fbdfa3859f65402d3587470e0397a076e5fb4ed775db33310f17a42c9faeb20 - languageName: node - linkType: hard - -"@inquirer/password@npm:^2.2.0": - version: 2.2.0 - resolution: "@inquirer/password@npm:2.2.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - checksum: 10c0/fa4b335164b2c9c3304d29a7214ef93bac8d3da6788146603ea3d0485b8d811151e49bf66cb0dcc729a9dc21406c3a8c2718c5beec572a91d07026d22842c13f - languageName: node - linkType: hard - -"@inquirer/prompts@npm:^5.5.0": - version: 5.5.0 - resolution: "@inquirer/prompts@npm:5.5.0" - dependencies: - "@inquirer/checkbox": "npm:^2.5.0" - "@inquirer/confirm": "npm:^3.2.0" - "@inquirer/editor": "npm:^2.2.0" - "@inquirer/expand": "npm:^2.3.0" - "@inquirer/input": "npm:^2.3.0" - "@inquirer/number": "npm:^1.1.0" - "@inquirer/password": "npm:^2.2.0" - "@inquirer/rawlist": "npm:^2.3.0" - "@inquirer/search": "npm:^1.1.0" - "@inquirer/select": "npm:^2.5.0" - checksum: 10c0/2d62b50ca761b2bd2d5759f48c03758f1af0665ac602c26ae1ae257ac512cf5c27fd82cde108ee0c6371ec39187adc6f45637f31ca79adf5bf96579f23e77143 - languageName: node - linkType: hard - -"@inquirer/rawlist@npm:^2.3.0": - version: 2.3.0 - resolution: "@inquirer/rawlist@npm:2.3.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/d49d5e12b7a54394c140b27c8d8748ba1ab855c67c01fa72b5a63810f12865df3bf4d5ae929f54fad77b5fc2f7431a332ae1e5fe4babb335380c28917002f364 - languageName: node - linkType: hard - -"@inquirer/search@npm:^1.1.0": - version: 1.1.0 - resolution: "@inquirer/search@npm:1.1.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/20d7e910266b9e3f0dc8eef8f3007f487e6149fa8421d293eaf7c11a1e35c3d82aa30af118b3a6e35eed1048a27d7d806f45722abb10005db5d099ea64b00b17 - languageName: node - linkType: hard - -"@inquirer/select@npm:^2.5.0": - version: 2.5.0 - resolution: "@inquirer/select@npm:2.5.0" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" - ansi-escapes: "npm:^4.3.2" - yoctocolors-cjs: "npm:^2.1.2" - checksum: 10c0/280fa700187ff29da0ad4bf32aa11db776261584ddf5cc1ceac5caebb242a4ac0c5944af522a2579d78b6ec7d6e8b1b9f6564872101abd8dcc69929b4e33fc4c - languageName: node - linkType: hard - -"@inquirer/type@npm:^1.5.3": - version: 1.5.5 - resolution: "@inquirer/type@npm:1.5.5" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/4c41736c09ba9426b5a9e44993bdd54e8f532e791518802e33866f233a2a6126a25c1c82c19d1abbf1df627e57b1b957dd3f8318ea96073d8bfc32193943bcb3 - languageName: node - linkType: hard - -"@inquirer/type@npm:^2.0.0": - version: 2.0.0 - resolution: "@inquirer/type@npm:2.0.0" - dependencies: - mute-stream: "npm:^1.0.0" - checksum: 10c0/8c663d52beb2b89a896d3c3d5cc3d6d024fa149e565555bcb42fa640cbe23fba7ff2c51445342cef1fe6e46305e2d16c1590fa1d11ad0ddf93a67b655ef41f0a - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@samverschueren/stream-to-observable@npm:^0.3.0": - version: 0.3.1 - resolution: "@samverschueren/stream-to-observable@npm:0.3.1" - dependencies: - any-observable: "npm:^0.3.0" - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true - checksum: 10c0/0d874453f6bc2460d71783292291f52feb36c2a75314b1072a6ffe6206562f33e9d664a554348d565a6b54da9041d75070371052545bc329caaa52f64216987f - languageName: node - linkType: hard - -"@types/mute-stream@npm:^0.0.4": - version: 0.0.4 - resolution: "@types/mute-stream@npm:0.0.4" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/944730fd7b398c5078de3c3d4d0afeec8584283bc694da1803fdfca14149ea385e18b1b774326f1601baf53898ce6d121a952c51eb62d188ef6fcc41f725c0dc - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 25.0.3 - resolution: "@types/node@npm:25.0.3" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/b7568f0d765d9469621615e2bb257c7fd1953d95e9acbdb58dffb6627a2c4150d405a4600aa1ad8a40182a94fe5f903cafd3c0a2f5132814debd0e3bfd61f835 - languageName: node - linkType: hard - -"@types/node@npm:^22.5.5": - version: 22.19.3 - resolution: "@types/node@npm:22.19.3" - dependencies: - undici-types: "npm:~6.21.0" - checksum: 10c0/a30a75d503da795ddbd5f8851014f3e91925c2a63fa3f14128d54c998f25d682dfba96dc9589c73cf478b87a16d88beb790b11697bb8cd5bee913079237a58f2 - languageName: node - linkType: hard - -"@types/node@npm:^24.7.2": - version: 24.10.0 - resolution: "@types/node@npm:24.10.0" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/f82ed7194e16f5590ef7afdc20c6d09068c76d50278b485ede8f0c5749683536e3064ffa8def8db76915196afb3724b854aa5723c64d6571b890b14492943b46 - languageName: node - linkType: hard - -"@types/wrap-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/wrap-ansi@npm:3.0.0" - checksum: 10c0/8d8f53363f360f38135301a06b596c295433ad01debd082078c33c6ed98b05a5c8fe8853a88265432126096084f4a135ec1564e3daad631b83296905509f90b3 - languageName: node - linkType: hard - -"ansi-escapes@npm:^3.0.0": - version: 3.2.0 - resolution: "ansi-escapes@npm:3.2.0" - checksum: 10c0/084e1ce38139ad2406f18a8e7efe2b850ddd06ce3c00f633392d1ce67756dab44fe290e573d09ef3c9a0cb13c12881e0e35a8f77a017d39a0a4ab85ae2fae04f - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.3.2": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: "npm:^0.21.3" - checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 - languageName: node - linkType: hard - -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 10c0/78cebaf50bce2cb96341a7230adf28d804611da3ce6bf338efa7b72f06cc6ff648e29f80cd95e582617ba58d5fdbec38abfeed3500a98bce8381a9daec7c548b - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: 10c0/7c68aed4f1857389e7a12f85537ea5b40d832656babbf511cc7ecd9efc52889b9c3e5653a71a6aade783c3c5e0aa223ad4ff8e83c27ac8a666514e6c79068cab - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"any-observable@npm:^0.3.0": - version: 0.3.0 - resolution: "any-observable@npm:0.3.0" - checksum: 10c0/104c2b79c2ac7e6c75b35f8fd62babf73015668f22bd25336c6f848350d91f9e7daf2fddbf1c1b76fe795e89fbc91b49f70a2aec5c69f1acf0562c344f36042b - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 - languageName: node - linkType: hard - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"axios@npm:^1.13.2, axios@npm:^1.6.0": - version: 1.13.2 - resolution: "axios@npm:1.13.2" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/e8a42e37e5568ae9c7a28c348db0e8cf3e43d06fcbef73f0048669edfe4f71219664da7b6cc991b0c0f01c28a48f037c515263cb79be1f1ae8ff034cd813867b - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 - languageName: node - linkType: hard - -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: "npm:^7.1.1" - checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2": - version: 1.0.4 - resolution: "call-bound@npm:1.0.4" - dependencies: - call-bind-apply-helpers: "npm:^1.0.2" - get-intrinsic: "npm:^1.3.0" - checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 - languageName: node - linkType: hard - -"chalk@npm:^1.0.0, chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" - dependencies: - ansi-styles: "npm:^2.2.1" - escape-string-regexp: "npm:^1.0.2" - has-ansi: "npm:^2.0.0" - strip-ansi: "npm:^3.0.0" - supports-color: "npm:^2.0.0" - checksum: 10c0/28c3e399ec286bb3a7111fd4225ebedb0d7b813aef38a37bca7c498d032459c265ef43404201d5fbb8d888d29090899c95335b4c0cda13e8b126ff15c541cef8 - languageName: node - linkType: hard - -"chalk@npm:^2.4.1": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:^5.3.0": - version: 5.6.2 - resolution: "chalk@npm:5.6.2" - checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 10c0/96e4731b9ec8050cbb56ab684e8c48d6c33f7826b755802d14e3ebfdc51c57afeece3ea39bc6b09acc359e4363525388b915e16640c1378053820f5e70d0f27d - languageName: node - linkType: hard - -"chokidar@npm:^4.0.0": - version: 4.0.3 - resolution: "chokidar@npm:4.0.3" - dependencies: - readdirp: "npm:^4.0.1" - checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad - languageName: node - linkType: hard - -"cli-cursor@npm:^2.0.0, cli-cursor@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-cursor@npm:2.1.0" - dependencies: - restore-cursor: "npm:^2.0.0" - checksum: 10c0/09ee6d8b5b818d840bf80ec9561eaf696672197d3a02a7daee2def96d5f52ce6e0bbe7afca754ccf14f04830b5a1b4556273e983507d5029f95bba3016618eda - languageName: node - linkType: hard - -"cli-truncate@npm:^0.2.1": - version: 0.2.1 - resolution: "cli-truncate@npm:0.2.1" - dependencies: - slice-ansi: "npm:0.0.4" - string-width: "npm:^1.0.1" - checksum: 10c0/c6caa5e2b70d841c42f4a2270d6fc7129df915f8911e4afa90c79231ccc857cd819a2c90e0707fde04e51ce56b4d71646b843f6cbaff4f7cdcb3b91ed51f6e89 - languageName: node - linkType: hard - -"cli-width@npm:^4.1.0": - version: 4.1.0 - resolution: "cli-width@npm:4.1.0" - checksum: 10c0/1fbd56413578f6117abcaf858903ba1f4ad78370a4032f916745fa2c7e390183a9d9029cf837df320b0fdce8137668e522f60a30a5f3d6529ff3872d265a955f - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^6.2.0" - checksum: 10c0/35229b1bb48647e882104cac374c9a18e34bbf0bace0e2cf03000326b6ca3050d6b59545d91e17bfe3705f4a0e2988787aa5cde6331bf5cbbf0164732cef6492 - languageName: node - linkType: hard - -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 10c0/33f6b234084e46e6e369b6f0b07949392651b4dde70fc6a592a8d3dafa08d5bb32e3981a02f31f6fc323a26bc03a4c063a9d56834848695bda7611c2417ea2e6 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"commander@npm:^12.0.0": - version: 12.1.0 - resolution: "commander@npm:12.1.0" - checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"date-fns@npm:^1.27.2": - version: 1.30.1 - resolution: "date-fns@npm:1.30.1" - checksum: 10c0/bad6ad7c15180121e15d61ad62a4a214c108d66f35b35f5eeb6ade837a3c29aa4444b9528a93a5374b95ba11231c142276351bf52f4d168676f9a1e17ce3726a - languageName: node - linkType: hard - -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: 10c0/85c39fe8fbf0482d4a1e224ef0119db5c1897f8503bcef8b826adff7a1b11414972f6fef2d7dec2ee0b4be3863cf64ac1439137ae9e6af23a3d8dcbe26a5b4b2 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"dotenv@npm:^16.4.0": - version: 16.6.1 - resolution: "dotenv@npm:16.6.1" - checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"elegant-spinner@npm:^1.0.1": - version: 1.0.1 - resolution: "elegant-spinner@npm:1.0.1" - checksum: 10c0/df607c83c20fc3ce56c514175dd5d1ee7f667da00cee13d04d32c70d55e76555091fa236689e691cf7dedba17b0020fec635e499cdde84dbea2ef8639314e5f8 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"external-editor@npm:^3.1.0": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: "npm:^0.7.0" - iconv-lite: "npm:^0.4.24" - tmp: "npm:^0.0.33" - checksum: 10c0/c98f1ba3efdfa3c561db4447ff366a6adb5c1e2581462522c56a18bf90dfe4da382f9cd1feee3e330108c3595a854b218272539f311ba1b3298f841eb0fbf339 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.8" - checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.20.1 - resolution: "fastq@npm:1.20.1" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/e5dd725884decb1f11e5c822221d76136f239d0236f176fab80b7b8f9e7619ae57e6b4e5b73defc21e6b9ef99437ee7b545cff8e6c2c337819633712fa9d352e - languageName: node - linkType: hard - -"figures@npm:^1.7.0": - version: 1.7.0 - resolution: "figures@npm:1.7.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - object-assign: "npm:^4.1.0" - checksum: 10c0/a10942b0eec3372bf61822ab130d2bbecdf527d551b0b013fbe7175b7a0238ead644ee8930a1a3cb872fb9ab2ec27df30e303765a3b70b97852e2e9ee43bdff3 - languageName: node - linkType: hard - -"figures@npm:^2.0.0": - version: 2.0.0 - resolution: "figures@npm:2.0.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 - languageName: node - linkType: hard - -"find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: "npm:^5.0.0" - path-exists: "npm:^4.0.0" - checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"fs-extra@npm:^10.1.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-extra@npm:^11.2.0": - version: 11.3.3 - resolution: "fs-extra@npm:11.3.3" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/984924ff4104e3e9f351b658a864bf3b354b2c90429f57aec0acd12d92c4e6b762cbacacdffb4e745b280adce882e1f980c485d9f02c453f769ab4e7fc646ce3 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob@npm:^7.1.3": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"globby@npm:^11.0.3": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: "npm:^2.1.0" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.9" - ignore: "npm:^5.2.0" - merge2: "npm:^1.4.1" - slash: "npm:^3.0.0" - checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"graphql-sse@npm:^2.5.4": - version: 2.6.0 - resolution: "graphql-sse@npm:2.6.0" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 10c0/e05f0b5c8539d61e5ce34af8e0bb418c02bf922d6a7f9232a9abd53c77df5654684ca14f674ac771645c8fba9c37ce666c5d06f46eef54ea07e63653468065b0 - languageName: node - linkType: hard - -"graphql@npm:^16.6.0, graphql@npm:^16.8.1": - version: 16.12.0 - resolution: "graphql@npm:16.12.0" - checksum: 10c0/b6fffa4e8a4e4a9933ebe85e7470b346dbf49050c1a482fac5e03e4a1a7bed2ecd3a4c97e29f04457af929464bc5e4f2aac991090c2f320111eef26e902a5c75 - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f54e4887b9f8f3c4bfefd649c48825b3c093987c92c27880ee9898539e6f01aed261e82e73153c3f920fde0db5bf6ebd58deb498ed1debabcb4bc40113ccdf05 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3" - checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 - languageName: node - linkType: hard - -"indent-string@npm:^3.0.0": - version: 3.2.0 - resolution: "indent-string@npm:3.2.0" - checksum: 10c0/91b6d61621d24944c5c4d365d6f1ff4a490264ccaf1162a602faa0d323e69231db2180ad4ccc092c2f49cf8888cdb3da7b73e904cc0fdeec40d0bfb41ceb9478 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"inquirer@npm:^10.0.0": - version: 10.2.2 - resolution: "inquirer@npm:10.2.2" - dependencies: - "@inquirer/core": "npm:^9.1.0" - "@inquirer/prompts": "npm:^5.5.0" - "@inquirer/type": "npm:^1.5.3" - "@types/mute-stream": "npm:^0.0.4" - ansi-escapes: "npm:^4.3.2" - mute-stream: "npm:^1.0.0" - run-async: "npm:^3.0.0" - rxjs: "npm:^7.8.1" - checksum: 10c0/09bcff887a968ce29d3a8cba749ef35b6531b7fb7bf5b28aaf3e10aebae07af2494dd3ec67ae6f1dabe76da1064cfe4514098d4c7658fcaf3fd480b2975d7163 - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: "npm:^1.0.0" - checksum: 10c0/12acfcf16142f2d431bf6af25d68569d3198e81b9799b4ae41058247aafcc666b0127d64384ea28e67a746372611fcbe9b802f69175287aba466da3eddd5ba0f - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-observable@npm:^1.1.0": - version: 1.1.0 - resolution: "is-observable@npm:1.1.0" - dependencies: - symbol-observable: "npm:^1.1.0" - checksum: 10c0/cf3166b0822f70ad06e7851e09430166ce658349d54aaa64c93a03320420b9285735821b23164bdce741ff83a86730ac3e53035ce4e2511ed843dbff4105bfa2 - languageName: node - linkType: hard - -"is-promise@npm:^2.1.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"jsonc-parser@npm:^3.2.0": - version: 3.3.1 - resolution: "jsonc-parser@npm:3.3.1" - checksum: 10c0/269c3ae0a0e4f907a914bf334306c384aabb9929bd8c99f909275ebd5c2d3bc70b9bcd119ad794f339dec9f24b6a4ee9cd5a8ab2e6435e730ad4075388fc2ab6 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.2.0 - resolution: "jsonfile@npm:6.2.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d - languageName: node - linkType: hard - -"kleur@npm:^4.1.5": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a - languageName: node - linkType: hard - -"listr-silent-renderer@npm:^1.1.1": - version: 1.1.1 - resolution: "listr-silent-renderer@npm:1.1.1" - checksum: 10c0/a13e08ebf863516a757bce4887f05290070772113d89095e9f51a07cf0b11a43a7563a67ff3b287c752c08f6d781fdb2123b02957534e3e0675fb564f2a42e1b - languageName: node - linkType: hard - -"listr-update-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-update-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^1.1.3" - cli-truncate: "npm:^0.2.1" - elegant-spinner: "npm:^1.0.1" - figures: "npm:^1.7.0" - indent-string: "npm:^3.0.0" - log-symbols: "npm:^1.0.2" - log-update: "npm:^2.3.0" - strip-ansi: "npm:^3.0.1" - peerDependencies: - listr: ^0.14.2 - checksum: 10c0/8ade44bf3dc6146c8e0178000619439e8889792c4689b66be6ce82bd459f5fe462ecb34b05147fb206a8ad60e6d4e6f34c9f48038e18366f867fd972688b8edc - languageName: node - linkType: hard - -"listr-verbose-renderer@npm:^0.5.0": - version: 0.5.0 - resolution: "listr-verbose-renderer@npm:0.5.0" - dependencies: - chalk: "npm:^2.4.1" - cli-cursor: "npm:^2.1.0" - date-fns: "npm:^1.27.2" - figures: "npm:^2.0.0" - checksum: 10c0/041cd1e82da7054f27ae0a914e98b40d15faf9f950ef850578fc6241d3fff3c2d7158a4f6226006e566b4c47bf445be2d254dd1ce5c16569a3a5dcd575bec656 - languageName: node - linkType: hard - -"listr@npm:^0.14.3": - version: 0.14.3 - resolution: "listr@npm:0.14.3" - dependencies: - "@samverschueren/stream-to-observable": "npm:^0.3.0" - is-observable: "npm:^1.1.0" - is-promise: "npm:^2.1.0" - is-stream: "npm:^1.1.0" - listr-silent-renderer: "npm:^1.1.1" - listr-update-renderer: "npm:^0.5.0" - listr-verbose-renderer: "npm:^0.5.0" - p-map: "npm:^2.0.0" - rxjs: "npm:^6.3.3" - checksum: 10c0/753d518218c423f46bee8eeacccecadfd2e414ba9c0f602e7f85fe3f6fa18404dfab0812433aeda4683ee2548358488f597ac1a3d321196baec5d3149b200b10 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: "npm:^4.1.0" - checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 - languageName: node - linkType: hard - -"lodash.camelcase@npm:^4.3.0": - version: 4.3.0 - resolution: "lodash.camelcase@npm:4.3.0" - checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 - languageName: node - linkType: hard - -"lodash.capitalize@npm:^4.2.1": - version: 4.2.1 - resolution: "lodash.capitalize@npm:4.2.1" - checksum: 10c0/b289326497c2e24d6b8afa2af2ca4e068ef6ef007ade36bfb6f70af77ce10ea3f090eeee947d5fdcf2db4bcfa4703c8c10a5857a2b39e308bddfd1d11ad35970 - languageName: node - linkType: hard - -"lodash.kebabcase@npm:^4.1.1": - version: 4.1.1 - resolution: "lodash.kebabcase@npm:4.1.1" - checksum: 10c0/da5d8f41dbb5bc723d4bf9203d5096ca8da804d6aec3d2b56457156ba6c8d999ff448d347ebd97490da853cb36696ea4da09a431499f1ee8deb17b094ecf4e33 - languageName: node - linkType: hard - -"lodash.startcase@npm:^4.4.0": - version: 4.4.0 - resolution: "lodash.startcase@npm:4.4.0" - checksum: 10c0/bd82aa87a45de8080e1c5ee61128c7aee77bf7f1d86f4ff94f4a6d7438fc9e15e5f03374b947be577a93804c8ad6241f0251beaf1452bf716064eeb657b3a9f0 - languageName: node - linkType: hard - -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"log-symbols@npm:^1.0.2": - version: 1.0.2 - resolution: "log-symbols@npm:1.0.2" - dependencies: - chalk: "npm:^1.0.0" - checksum: 10c0/c64e1fe41d0d043840f8b592d043b8607a836b846506f525a53d99d578561f02f97b2cba1d2b3c30bae5311d64b308d5a392a9930d252b906a9042fc2877da7a - languageName: node - linkType: hard - -"log-update@npm:^2.3.0": - version: 2.3.0 - resolution: "log-update@npm:2.3.0" - dependencies: - ansi-escapes: "npm:^3.0.0" - cli-cursor: "npm:^2.0.0" - wrap-ansi: "npm:^3.0.1" - checksum: 10c0/9bf21b138801ab4770a2bfa735161cf005b869360eaf5003a84ba64ddc5f5c3ce7217f4f1fa79d9c1f510d792213b2c9800327228e94df05859d19b716215d90 - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"mimic-fn@npm:^1.0.0": - version: 1.2.0 - resolution: "mimic-fn@npm:1.2.0" - checksum: 10c0/ad55214aec6094c0af4c0beec1a13787556f8116ed88807cf3f05828500f21f93a9482326bcd5a077ae91e3e8795b4e76b5b4c8bb12237ff0e4043a365516cba - languageName: node - linkType: hard - -"minimatch@npm:^3.1.1": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 - languageName: node - linkType: hard - -"mkdirp@npm:^0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: "npm:^1.2.6" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 - languageName: node - linkType: hard - -"mute-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "mute-stream@npm:1.0.0" - checksum: 10c0/dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c - languageName: node - linkType: hard - -"native-fetch@npm:^4.0.2": - version: 4.0.2 - resolution: "native-fetch@npm:4.0.2" - peerDependencies: - undici: "*" - checksum: 10c0/e3b824721daaa628086d9dcd02e8eb12f0a6c5e13a1d182682bae238d80c9bbf3dfd6314a94692ebe20316aa354476804b4df148201d066b46fc552a5794cfab - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: "npm:^1.0.1" - checksum: 10c0/db814326ff88057437233361b4c7e9cac7b54815b051b57f2d341ce89b1d8ec8cbd43e7fa95d7652b3b69ea8fcc294b89b8530d556a84d1bdace94229e1e9a8b - languageName: node - linkType: hard - -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 10c0/cb97149006acc5cd512c13c1838223abdf202e76ddfa059c5e8e7507aff2c3a78cd19057516885a2f6f5b576543dc4f7b6f3c997cc7df53ae26c260855466df5 - languageName: node - linkType: hard - -"object-assign@npm:^4.1.0": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3": - version: 1.13.4 - resolution: "object-inspect@npm:1.13.4" - checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"onetime@npm:^2.0.0": - version: 2.0.1 - resolution: "onetime@npm:2.0.1" - dependencies: - mimic-fn: "npm:^1.0.0" - checksum: 10c0/b4e44a8c34e70e02251bfb578a6e26d6de6eedbed106cd78211d2fd64d28b6281d54924696554e4e966559644243753ac5df73c87f283b0927533d3315696215 - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990 - languageName: node - linkType: hard - -"p-limit@npm:3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: "npm:^0.1.0" - checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: "npm:^2.0.0" - checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: "npm:^2.2.0" - checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 - languageName: node - linkType: hard - -"p-map@npm:^2.0.0": - version: 2.1.0 - resolution: "p-map@npm:2.1.0" - checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"prettier@npm:^2.8.0": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"qs@npm:^6.11.0": - version: 6.14.0 - resolution: "qs@npm:6.14.0" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/8ea5d91bf34f440598ee389d4a7d95820e3b837d3fd9f433871f7924801becaa0cd3b3b4628d49a7784d06a8aea9bc4554d2b6d8d584e2d221dc06238a42909c - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"readdirp@npm:^4.0.1": - version: 4.1.2 - resolution: "readdirp@npm:4.1.2" - checksum: 10c0/60a14f7619dec48c9c850255cd523e2717001b0e179dc7037cfa0895da7b9e9ab07532d324bfb118d73a710887d1e35f79c495fa91582784493e085d18c72c62 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: 10c0/3568f9f8f5af3737b4aee9e6e1e8ec4be65a92da9cb27f989e0893714d50aa95ed2ff02d40d1fa35e1b1a234dc9c2437050ef356704a3999feaca6667d9e9bfc - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: 10c0/db91467d9ead311b4111cbd73a4e67fa7820daed2989a32f7023785a2659008c6d119752d9c4ac011ae07e537eb86523adff99804c5fdb39cd3a017f9b401bb6 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 - languageName: node - linkType: hard - -"restore-cursor@npm:^2.0.0": - version: 2.0.0 - resolution: "restore-cursor@npm:2.0.0" - dependencies: - onetime: "npm:^2.0.0" - signal-exit: "npm:^3.0.2" - checksum: 10c0/f5b335bee06f440445e976a7031a3ef53691f9b7c4a9d42a469a0edaf8a5508158a0d561ff2b26a1f4f38783bcca2c0e5c3a44f927326f6694d5b44d7a4993e6 - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.1.0 - resolution: "reusify@npm:1.1.0" - checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa - languageName: node - linkType: hard - -"rimraf@npm:^2.6.3": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: ./bin.js - checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 - languageName: node - linkType: hard - -"run-async@npm:^3.0.0": - version: 3.0.0 - resolution: "run-async@npm:3.0.0" - checksum: 10c0/b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"rxjs@npm:^6.3.3": - version: 6.6.7 - resolution: "rxjs@npm:6.6.7" - dependencies: - tslib: "npm:^1.9.0" - checksum: 10c0/e556a13a9aa89395e5c9d825eabcfa325568d9c9990af720f3f29f04a888a3b854f25845c2b55875d875381abcae2d8100af9cacdc57576e7ed6be030a01d2fe - languageName: node - linkType: hard - -"rxjs@npm:^7.8.1": - version: 7.8.2 - resolution: "rxjs@npm:7.8.2" - dependencies: - tslib: "npm:^2.1.0" - checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 10c0/9f8c1b2d800800d0b589de1477c753492de5c1548d4ade52f57f1d1f5e04af5481554d75ce5e5c43d4004b80a3eb714398d6907027dc0534177b7539119f4454 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: "npm:^1.0.2" - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.5" - object-inspect: "npm:^1.13.3" - side-channel-map: "npm:^1.0.1" - checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 - languageName: node - linkType: hard - -"side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: "npm:^1.3.0" - object-inspect: "npm:^1.13.3" - side-channel-list: "npm:^1.0.0" - side-channel-map: "npm:^1.0.1" - side-channel-weakmap: "npm:^1.0.2" - checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.2": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.1.0": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b - languageName: node - linkType: hard - -"slice-ansi@npm:0.0.4": - version: 0.0.4 - resolution: "slice-ansi@npm:0.0.4" - checksum: 10c0/997d4cc73e34aa8c0f60bdb71701b16c062cc4acd7a95e3b10e8c05d790eb5e735d9b470270dc6f443b1ba21492db7ceb849d5c93011d1256061bf7ed7216c7a - languageName: node - linkType: hard - -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: "npm:^1.0.0" - is-fullwidth-code-point: "npm:^1.0.0" - strip-ansi: "npm:^3.0.0" - checksum: 10c0/c558438baed23a9ab9370bb6a939acbdb2b2ffc517838d651aad0f5b2b674fb85d460d9b1d0b6a4c210dffd09e3235222d89a5bd4c0c1587f78b2bb7bc00c65e - languageName: node - linkType: hard - -"string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 - languageName: node - linkType: hard - -"string-width@npm:^4.1.0, string-width@npm:^4.2.0": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" - dependencies: - ansi-regex: "npm:^2.0.0" - checksum: 10c0/f6e7fbe8e700105dccf7102eae20e4f03477537c74b286fd22cfc970f139002ed6f0d9c10d0e21aa9ed9245e0fa3c9275930e8795c5b947da136e4ecb644a70f - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: "npm:^3.0.0" - checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"stripe-synchronizer@workspace:.": - version: 0.0.0-use.local - resolution: "stripe-synchronizer@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - axios: "npm:^1.13.2" - twenty-sdk: "npm:0.2.4" - languageName: unknown - linkType: soft - -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 10c0/570e0b63be36cccdd25186350a6cb2eaad332a95ff162fa06d9499982315f2fe4217e69dd98e862fbcd9c81eaff300a825a1fe7bf5cc752e5b84dfed042b0dda - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"symbol-observable@npm:^1.1.0": - version: 1.2.0 - resolution: "symbol-observable@npm:1.2.0" - checksum: 10c0/009fee50798ef80ed4b8195048288f108b03de162db07493f2e1fd993b33fafa72d659e832b584da5a2427daa78e5a738fb2a9ab027ee9454252e0bedbcd1fdc - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: "npm:~1.0.2" - checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"tslib@npm:^1.9.0": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 - languageName: node - linkType: hard - -"tslib@npm:^2.1.0, tslib@npm:^2.4.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 - languageName: node - linkType: hard - -"twenty-sdk@npm:0.2.4": - version: 0.2.4 - resolution: "twenty-sdk@npm:0.2.4" - dependencies: - "@genql/cli": "npm:^3.0.3" - axios: "npm:^1.6.0" - chalk: "npm:^5.3.0" - chokidar: "npm:^4.0.0" - commander: "npm:^12.0.0" - dotenv: "npm:^16.4.0" - fs-extra: "npm:^11.2.0" - graphql: "npm:^16.8.1" - graphql-sse: "npm:^2.5.4" - inquirer: "npm:^10.0.0" - jsonc-parser: "npm:^3.2.0" - lodash.camelcase: "npm:^4.3.0" - lodash.capitalize: "npm:^4.2.1" - lodash.kebabcase: "npm:^4.1.1" - lodash.startcase: "npm:^4.4.0" - typescript: "npm:^5.9.2" - uuid: "npm:^13.0.0" - bin: - twenty: dist/cli.cjs - checksum: 10c0/91bcc2c6a96d8bb7997c6584de338d370ffd4cebbc052ffdd5dd8bb8894f1851c039601a2ce0bb0f3b97e210f3bc877de0572125b8c3b601f6e1baac2f99a8c5 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 - languageName: node - linkType: hard - -"typescript@npm:^5.9.2": - version: 5.9.3 - resolution: "typescript@npm:5.9.3" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": - version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 - languageName: node - linkType: hard - -"undici-types@npm:~6.21.0": - version: 6.21.0 - resolution: "undici-types@npm:6.21.0" - checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"undici@npm:^5.18.0": - version: 5.29.0 - resolution: "undici@npm:5.29.0" - dependencies: - "@fastify/busboy": "npm:^2.0.0" - checksum: 10c0/e4e4d631ca54ee0ad82d2e90e7798fa00a106e27e6c880687e445cc2f13b4bc87c5eba2a88c266c3eecffb18f26e227b778412da74a23acc374fca7caccec49b - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - -"unixify@npm:^1.0.0": - version: 1.0.0 - resolution: "unixify@npm:1.0.0" - dependencies: - normalize-path: "npm:^2.1.1" - checksum: 10c0/8b89100619ebde9f0ab4024a4d402316fb7b1d4853723410fc828944e8d3d01480f210cddf94d9a1699559f8180d861eb6323da8011b7bcc1bbaf6a11a5b1f1e - languageName: node - linkType: hard - -"uuid@npm:^13.0.0": - version: 13.0.0 - resolution: "uuid@npm:13.0.0" - bin: - uuid: dist-node/bin/uuid - checksum: 10c0/950e4c18d57fef6c69675344f5700a08af21e26b9eff2bf2180427564297368c538ea11ac9fb2e6528b17fc3966a9fd2c5049361b0b63c7d654f3c550c9b3d67 - languageName: node - linkType: hard - -"value-or-promise@npm:^1.0.12": - version: 1.0.12 - resolution: "value-or-promise@npm:1.0.12" - checksum: 10c0/b75657b74e4d17552bd88e0c2857020fbab34a4d091dc058db18c470e7da0336067e72c130b3358e3321ac0a6ff11c0b92b67a382318a3705ad5d57de7ff3262 - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.1 - resolution: "which-module@npm:2.0.1" - checksum: 10c0/087038e7992649eaffa6c7a4f3158d5b53b14cf5b6c1f0e043dccfacb1ba179d12f17545d5b85ebd94a42ce280a6fe65d0cbcab70f4fc6daad1dfae85e0e6a3e - languageName: node - linkType: hard - -"wrap-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "wrap-ansi@npm:3.0.1" - dependencies: - string-width: "npm:^2.1.1" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/ad6fed8f242c26755badaf452da154122d0d862f8b7aab56e758466857f230efafdc5fbffca026650b947ac3fc0eb563df5c05b9e2190a52a4a68f4eef3d4555 - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 10c0/308a2efd7cc296ab2c0f3b9284fd4827be01cfeb647b3ba18230e3a416eb1bc887ac050de9f8c4fd9e7856b2e8246e05d190b53c96c5ad8d8cb56dffb6f81024 - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: "npm:^5.0.0" - decamelize: "npm:^1.2.0" - checksum: 10c0/25df918833592a83f52e7e4f91ba7d7bfaa2b891ebf7fe901923c2ee797534f23a176913ff6ff7ebbc1cc1725a044cc6a6539fed8bfd4e13b5b16376875f9499 - languageName: node - linkType: hard - -"yargs@npm:^15.3.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: "npm:^6.0.0" - decamelize: "npm:^1.2.0" - find-up: "npm:^4.1.0" - get-caller-file: "npm:^2.0.1" - require-directory: "npm:^2.1.1" - require-main-filename: "npm:^2.0.0" - set-blocking: "npm:^2.0.0" - string-width: "npm:^4.2.0" - which-module: "npm:^2.0.0" - y18n: "npm:^4.0.0" - yargs-parser: "npm:^18.1.2" - checksum: 10c0/f1ca680c974333a5822732825cca7e95306c5a1e7750eb7b973ce6dc4f97a6b0a8837203c8b194f461969bfe1fb1176d1d423036635285f6010b392fa498ab2d - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f - languageName: node - linkType: hard - -"yoctocolors-cjs@npm:^2.1.2": - version: 2.1.3 - resolution: "yoctocolors-cjs@npm:2.1.3" - checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 - languageName: node - linkType: hard diff --git a/packages/twenty-apps/community/webmetic/.env.example b/packages/twenty-apps/community/webmetic/.env.example deleted file mode 100644 index 4130599e6d..0000000000 --- a/packages/twenty-apps/community/webmetic/.env.example +++ /dev/null @@ -1,4 +0,0 @@ -TWENTY_API_KEY= -TWENTY_API_URL=http://localhost:3000 -WEBMETIC_API_KEY= -WEBMETIC_DOMAIN= diff --git a/packages/twenty-apps/community/webmetic/.yarnrc.yml b/packages/twenty-apps/community/webmetic/.yarnrc.yml deleted file mode 100644 index 3186f3f079..0000000000 --- a/packages/twenty-apps/community/webmetic/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/packages/twenty-apps/community/webmetic/README.md b/packages/twenty-apps/community/webmetic/README.md deleted file mode 100644 index fe9a716557..0000000000 --- a/packages/twenty-apps/community/webmetic/README.md +++ /dev/null @@ -1,237 +0,0 @@ -# Webmetic Visitor Intelligence - -Automatically sync B2B website visitor data into Twenty CRM. Identify anonymous companies visiting your website and track their engagement without forms or manual entry. Every hour, Webmetic enriches your CRM with actionable sales intelligence about who's researching your product before they ever fill out a contact form. - -## Features - -- šŸ”„ **Hourly Automatic Sync**: Fetches visitor data every hour via cron trigger -- šŸ¢ **Company Enrichment**: Creates and updates company records with visitor intelligence -- šŸ“Š **Website Lead Tracking**: Records individual visits with detailed engagement metrics -- šŸ“ˆ **Engagement Scoring**: Webmetic's proprietary scoring algorithm (0-100) identifies warm leads -- šŸŽÆ **Sales Intelligence**: See which companies are actively researching your product -- šŸŒ **Geographic Data**: Captures visitor city and country information -- šŸ”— **UTM Parameter Tracking**: Full campaign attribution with utm_source, utm_medium, utm_campaign, utm_term, and utm_content -- šŸ“„ **Page Journey Mapping**: Records complete navigation paths and scroll depth -- ⚔ **Smart Deduplication**: Prevents duplicate records using session-based identification -- šŸ” **Production-Ready**: Built with rate limiting, error handling, and idempotent operations - -## Requirements - -- `twenty-cli` — `npm install -g twenty-cli` -- A Twenty API key (create one at `https://twenty.com/settings/api-webhooks` and name it **"Webmetic"**) -- A Webmetic account with API access. Sign up at [webmetic.de](https://webmetic.de) -- Node 18+ (for local development) - -## Metadata prerequisites - -The app automatically creates the `websiteLead` custom object with all required fields on first run. No manual field provisioning is needed. - -**Created automatically:** -- `websiteLead` object with 14 custom fields (TEXT, NUMBER, DATE_TIME types) -- Company relation field (Many-to-One from websiteLead to Company) -- All fields are idempotent — safe to re-run without errors - -## Quick start - -### 1. Deploy the app - -```bash -twenty auth login -cd packages/twenty-apps/webmetic -twenty app sync -``` - -### 2. Configure environment variables - -- **First, create a Twenty API key**: - - Go to **Settings → API & Webhooks → API Keys** - - Click **+ Create API Key** - - Name it **"Webmetic"** - - Copy the generated key -- **Then configure the app**: - - Open **Settings → Apps → Webmetic Visitor Intelligence → Configuration** - - Provide values for the required keys: - - `TWENTY_API_KEY` (required secret; paste the API key you just created) - - `TWENTY_API_URL` (optional; defaults to `http://localhost:3000` for local dev, set to your production URL) - - `WEBMETIC_API_KEY` (required secret; get from [app.webmetic.de/?menu=api_details](https://app.webmetic.de/?menu=api_details)) - - `WEBMETIC_DOMAIN` (required; your website domain to track, e.g., `example.com`) - - Save the configuration - -### 3. Test the function - -- On the app page, select **Test your function** -- Click **Run** -- You should see a success summary showing companies and leads created -- Check **Settings → Data Model → Website Leads** to verify the custom object was created -- Navigate to **Website Leads** from the sidebar to view synced visitor data - -### 4. Automatic hourly sync begins - -The cron trigger (`0 * * * *`) runs every hour on the hour, continuously syncing new visitor data. - -## How it works - -### Data flow - -``` -Webmetic API ─[hourly]→ sync-visitor-data ─[create/update]→ Twenty CRM - │ - ā”œā”€ā†’ Company records (with enrichment data) - └─→ Website Lead records (linked to companies) -``` - -### Sync process - -1. **Cron Trigger**: Every hour at :00 (e.g., 1:00, 2:00, 3:00) -2. **Schema Validation**: Ensures `websiteLead` object and all fields exist (creates if missing) -3. **Fetch Visitors**: Queries Webmetic API `/company-sessions` endpoint for last hour -4. **Process Companies**: For each visitor's company: - - Searches for existing company by domain - - Creates new company or updates existing with latest data from Webmetic - - Extracts employee count from ranges (e.g., "11-50" → 50) -5. **Create Website Leads**: For each session: - - Checks for duplicate (by name: "Company - Date") - - Creates lead record with engagement metrics - - Links to company via relation field -6. **Rate Limiting**: 800ms delay between API calls (75 requests/minute max) - -### Data captured - -**Company enrichment (from Webmetic):** -- Name, domain, address (street, city, postcode, country) -- Employee count (parsed from ranges) -- LinkedIn URL (if available) -- Tagline/short description - -**Website Lead tracking:** -- Visit date and session duration -- Page views count and pages visited (full navigation path) -- Traffic source (Direct, or utm_source/utm_medium combination) -- UTM campaign parameters (campaign, term, content) -- Visitor location (city, country) -- Engagement score (Webmetic's 0-100 scoring) -- Average scroll depth percentage -- Total user interaction events (clicks, etc.) - -## Configuration reference - -| Variable | Required | Description | -|----------|----------|-------------| -| `TWENTY_API_KEY` | āœ… Yes | Your Twenty API key for authentication | -| `TWENTY_API_URL` | āŒ No | Base URL of your Twenty instance (defaults to `http://localhost:3000`) | -| `WEBMETIC_API_KEY` | āœ… Yes | Your Webmetic API key from [app.webmetic.de/?menu=api_details](https://app.webmetic.de/?menu=api_details) | -| `WEBMETIC_DOMAIN` | āœ… Yes | Website domain to track (e.g., `example.com` without protocol) | - -## API integration - -This app uses multiple Twenty CRM APIs: - -**REST API** (data operations): -- `GET /rest/metadata/objects` — Fetch object metadata with fields -- `GET /rest/companies` — Find existing companies by domain -- `POST /rest/companies` — Create new companies -- `PATCH /rest/companies/:id` — Update company data -- `POST /rest/websiteLeads` — Create website lead records - -**GraphQL Metadata API** (schema management): -- `createOneObject` mutation — Creates custom objects (if needed) -- `createOneField` mutation — Creates custom fields and relations - -## Website Lead object structure - -The app creates a custom `websiteLead` object with the following fields: - -| Field | Type | Description | -|-------|------|-------------| -| `name` | TEXT | Lead identifier (Company Name - Date) | -| `company` | RELATION | Many-to-One relation to Company object | -| `visitDate` | DATE_TIME | When the visit occurred | -| `pageViews` | NUMBER | Number of pages viewed during session | -| `sessionDuration` | NUMBER | Visit length in seconds | -| `trafficSource` | TEXT | Where visitor came from (utm_source/utm_medium or Direct) | -| `pagesVisited` | TEXT | List of page URLs visited (→ separated, max 1000 chars) | -| `utmCampaign` | TEXT | UTM campaign parameter | -| `utmTerm` | TEXT | UTM term parameter (keywords for paid search) | -| `utmContent` | TEXT | UTM content parameter (for A/B testing) | -| `visitorCity` | TEXT | Geographic city of visitor | -| `visitorCountry` | TEXT | Geographic country of visitor | -| `visitCount` | NUMBER | Total number of visits from this company | -| `engagementScore` | NUMBER | Webmetic engagement score (0-100) | -| `averageScrollDepth` | NUMBER | Average scroll percentage (0-100) | -| `totalUserEvents` | NUMBER | Total count of user interactions (clicks, etc.) | - -## Troubleshooting - -**Issue**: No data syncing after setup -- **Solution**: Run "Test your function" to manually trigger a sync and check logs. Verify your `WEBMETIC_API_KEY` and `WEBMETIC_DOMAIN` are correct. - -**Issue**: "Duplicate Domain Name" error -- **Solution**: This occurs if you previously deleted a company. Twenty maintains unique constraints on soft-deleted records. Either restore the company from trash or contact support. - -**Issue**: Missing fields on websiteLead object -- **Solution**: The sync function recreates missing fields automatically. Run "Test your function" once to repair the schema. - -**Issue**: Empty linkedinLink on companies -- **Solution**: Webmetic doesn't have LinkedIn data for that specific company. The mapping is working correctly; data availability depends on Webmetic's enrichment coverage. - -**Issue**: Employee count not matching Webmetic -- **Solution**: Webmetic returns ranges (e.g., "11-50"). The app uses the maximum value (50) to better represent company size. - -**Issue**: Test shows "No new visitors in the last hour" -- **Solution**: Normal if you have no traffic in the last 60 minutes. Wait for actual traffic or manually adjust the time range in code for testing. - -## Rate limiting and performance - -- **Webmetic API**: No pagination used; fetches all visitors from last hour -- **Twenty API**: 800ms delay between requests (75 requests/minute) -- **Processing**: Handles 14+ companies with full enrichment in under 30 seconds -- **Cron schedule**: `0 * * * *` (every hour on the hour) -- **Duplicate prevention**: Checks existing leads by name before creating - -## Development - -### Local testing - -```bash -cd packages/twenty-apps/webmetic -yarn install - -# Set up .env file -cp .env.example .env -# Edit .env with your credentials - -# Sync to local Twenty instance -npx twenty-cli app sync - -# Watch for changes -npx twenty-cli app dev -``` - -### Manual trigger - -Use the Twenty UI test panel or trigger via API: - -```bash -curl -X POST http://localhost:3000/functions/sync-visitor-data \ - -H "Authorization: Bearer YOUR_API_KEY" -``` - -## Architecture notes - -- **100% programmatic schema**: Fields created via GraphQL Metadata API, not manifests -- **Idempotent operations**: Safe to re-run without duplicates or errors -- **Smart domain matching**: Normalizes domains (strips www, protocols) for matching -- **Error resilience**: Individual company failures don't stop the entire sync -- **Detailed logging**: Returns full execution log in response for debugging - -## Contributing - -Built with šŸŗ and ā¤ļø in Munich by [Team Webmetic](https://webmetic.de) for Twenty CRM Hacktoberfest 2025. - -For issues or questions: -- Webmetic API: [webmetic.de](https://webmetic.de) -- Twenty CRM: [twenty.com/developers](https://twenty.com/developers) - -## License - -MIT diff --git a/packages/twenty-apps/community/webmetic/application.config.ts b/packages/twenty-apps/community/webmetic/application.config.ts deleted file mode 100644 index 345a2a7e50..0000000000 --- a/packages/twenty-apps/community/webmetic/application.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { type ApplicationConfig } from 'twenty-sdk/application'; - -const config: ApplicationConfig = { - universalIdentifier: '8f3c5a1e-9b2d-4c7e-a5f3-1d8e9c2b4a6f', - displayName: 'Webmetic Visitor Intelligence', - description: - 'Automatically sync B2B website visitor data into Twenty CRM. Identify companies visiting your website and track engagement without forms or manual entry.', - applicationVariables: { - TWENTY_API_KEY: { - universalIdentifier: 'eb3866a1-36df-42f3-bcb8-351120b74096', - description: 'Twenty API key for authentication', - isSecret: true, - }, - TWENTY_API_URL: { - universalIdentifier: '10dfe92a-b472-43e6-a33a-db89dcdd9bad', - description: 'Twenty API URL (base URL of your Twenty instance)', - isSecret: false, - value: '', - }, - WEBMETIC_API_KEY: { - universalIdentifier: '28540b41-ab79-489b-953f-c1491adc28f2', - description: 'Webmetic API key (get from hub.webmetic.de)', - isSecret: true, - }, - WEBMETIC_DOMAIN: { - universalIdentifier: '74f7d252-539a-4eba-8d12-e7010c8128a1', - description: 'Your website domain to track (e.g., example.com)', - isSecret: false, - }, - }, -}; - -export default config; diff --git a/packages/twenty-apps/community/webmetic/package.json b/packages/twenty-apps/community/webmetic/package.json deleted file mode 100644 index 64c2fc5d40..0000000000 --- a/packages/twenty-apps/community/webmetic/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "webmetic-visitor-intelligence", - "version": "0.0.1", - "license": "MIT", - "engines": { - "node": "^24.5.0", - "npm": "please-use-yarn", - "yarn": ">=4.0.2" - }, - "packageManager": "yarn@4.9.2", - "dependencies": { - "axios": "^1.12.2", - "twenty-sdk": "0.0.3" - }, - "devDependencies": { - "@types/node": "^24.7.2" - } -} diff --git a/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/index.ts b/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/index.ts deleted file mode 100644 index c609521928..0000000000 --- a/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/index.ts +++ /dev/null @@ -1,521 +0,0 @@ -import axios from 'axios'; -import { type WebmeticResponse } from './types'; -import { - ensureWebsiteLeadObjectExists, - ensureWebsiteLeadFieldsExist, -} from './schemaSetup'; -import { type ServerlessFunctionConfig } from 'twenty-sdk/application'; - -// Rate limiting helper: delay between API calls to avoid hitting limits -const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); -const RATE_LIMIT_DELAY = 800; - -export const main = async (): Promise => { - // Capture logs to return in response (create early so we can log everything) - const logs: string[] = []; - const log = (message: string) => { - console.log(message); - logs.push(message); - }; - - // Debug: Log all available environment variables - log( - 'Available environment variables: ' + - Object.keys(process.env) - .filter((k) => k.includes('TWENTY') || k.includes('WEBMETIC')) - .join(', '), - ); - - const WEBMETIC_API_KEY = process.env.WEBMETIC_API_KEY; - const WEBMETIC_DOMAIN = process.env.WEBMETIC_DOMAIN; - const TWENTY_API_KEY = process.env.TWENTY_API_KEY; - - // Base URL without /rest for metadata operations - const TWENTY_API_BASE_URL = - process.env.TWENTY_API_URL !== '' && - process.env.TWENTY_API_URL !== undefined - ? process.env.TWENTY_API_URL - : 'http://localhost:3000'; - - // REST URL for data operations - const TWENTY_API_URL = `${TWENTY_API_BASE_URL}/rest`; - - log('WEBMETIC_API_KEY: ' + (WEBMETIC_API_KEY ? '***SET***' : 'MISSING')); - log('WEBMETIC_DOMAIN: ' + (WEBMETIC_DOMAIN || 'MISSING')); - log('TWENTY_API_KEY: ' + (TWENTY_API_KEY ? '***SET***' : 'MISSING')); - log('TWENTY_API_BASE_URL: ' + TWENTY_API_BASE_URL); - log('TWENTY_API_URL (REST): ' + TWENTY_API_URL); - - if (!WEBMETIC_API_KEY || !WEBMETIC_DOMAIN || !TWENTY_API_KEY) { - return { - success: false, - error: 'Missing required environment variables', - WEBMETIC_API_KEY: !!WEBMETIC_API_KEY, - WEBMETIC_DOMAIN: !!WEBMETIC_DOMAIN, - TWENTY_API_KEY: !!TWENTY_API_KEY, - detailedLog: logs.join('\n'), - }; - } - - // IMPORTANT: Ensure websiteLead object and all required fields exist before syncing data - // Everything is created programmatically via GraphQL (object + fields + relations) - log('\n=== Phase 1: Schema Setup ==='); - try { - // First, ensure the websiteLead object exists (create via GraphQL if missing) - await ensureWebsiteLeadObjectExists(TWENTY_API_KEY, TWENTY_API_BASE_URL); - - // Then, ensure all fields exist (create via GraphQL if missing) - await ensureWebsiteLeadFieldsExist(TWENTY_API_KEY, TWENTY_API_BASE_URL); - } catch (error: any) { - log('āŒ Failed to ensure schema exists: ' + error.message); - return { - success: false, - error: `Field setup failed: ${error.message}`, - detailedLog: logs.join('\n'), - }; - } - - try { - // 1. Fetch visitor data from Webmetic API using company-sessions endpoint - log('\n=== Phase 2: Data Sync ==='); - log('=== Starting Webmetic Sync ==='); - log(`Fetching visitor data from Webmetic for domain: ${WEBMETIC_DOMAIN}`); - log('Time range: -1 hour to now'); - - // Build API params - const webmeticParams: any = { - domain: WEBMETIC_DOMAIN, - from_date: '-1 hour', - to_date: 'now', - }; - log(`šŸ“” Webmetic API request params: ${JSON.stringify(webmeticParams)}`); - - const webmeticResponse = await axios.get( - 'https://hub.webmetic.de/company-sessions', - { - headers: { - Authorization: WEBMETIC_API_KEY, - }, - params: webmeticParams, - }, - ); - - log(`āœ… Webmetic API responded successfully`); - log( - `šŸ“¦ Webmetic returned ${webmeticResponse.data.result?.length || 0} companies`, - ); - - const companies = webmeticResponse.data.result; - - if (!Array.isArray(companies) || companies.length === 0) { - log('ā„¹ļø No new visitors in the last hour'); - return { - success: true, - companiesProcessed: 0, - sessionsProcessed: 0, - logCount: logs.length, - detailedLog: logs.join('\n'), - }; - } - - const totalSessions = companies.reduce( - (sum, c) => sum + c.sessions.length, - 0, - ); - log( - `\nšŸ“Š Found ${companies.length} companies with ${totalSessions} total sessions`, - ); - log('='.repeat(50)); - - // 2. Process each company - const results = { - success: true, - companiesProcessed: 0, - companiesCreated: 0, - companiesUpdated: 0, - sessionsProcessed: 0, - websiteLeadsCreated: 0, - errors: [] as string[], - }; - - for (const company of companies) { - try { - log( - `\nšŸ¢ Processing: ${company.company_name} (${company.sessions.length} sessions)`, - ); - - // Extract domain from company_url - const domainMatch = company.company_url?.match( - /^https?:\/\/(?:www\.)?([^/]+)/, - ); - const domain = domainMatch ? domainMatch[1] : company.company_url; - log(` Domain: ${domain}`); - - // 2a. Find or create Company in Twenty - let companyId: string; - - // Try to find existing company by domain - const existingCompaniesOptions = { - method: 'GET', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - }, - url: `${TWENTY_API_URL}/companies?filter=domainName.primaryLinkUrl%5Beq%5D%3A%22${encodeURIComponent(domain)}%22`, - }; - - // Enhanced logging for debugging - log(` šŸ” Searching for existing company...`); - log(` šŸ“” API Call: GET ${existingCompaniesOptions.url}`); - log(` šŸ”‘ Auth header: Bearer ***SET***`); - - const existingCompaniesResponse = await axios(existingCompaniesOptions); - log(` āœ… Response status: ${existingCompaniesResponse.status}`); - log( - ` šŸ“¦ Response data structure: ${JSON.stringify(Object.keys(existingCompaniesResponse.data || {}))}`, - ); - - await sleep(RATE_LIMIT_DELAY); // Rate limiting delay - - const existingCompanies = - existingCompaniesResponse.data?.data?.companies || []; - log( - ` Found ${existingCompanies.length} existing companies with this domain`, - ); - - // Build company data with proper validation - const companyData: any = { - name: company.company_name, - domainName: { - primaryLinkUrl: domain, - primaryLinkLabel: domain, - }, - }; - - // Only add address if at least one field has a value - if ( - company.address || - company.city || - company.postal_code || - company.country - ) { - companyData.address = { - addressStreet1: company.address || '', - addressCity: company.city || '', - addressPostcode: company.postal_code || '', - addressCountry: company.country || '', - }; - } - - // Parse employee count (Webmetic returns ranges like "11-50" or "501-1000") - // Take the maximum value from the range for better company size representation - if (company.employee_count) { - const employeeStr = company.employee_count.trim(); - let employeeCount: number | null = null; - - if (employeeStr.includes('-')) { - // Parse range like "11-50" - take the maximum value (50) - const parts = employeeStr.split('-'); - const max = parseInt(parts[1]); - if (!isNaN(max) && max > 0) { - employeeCount = max; - } - } else { - // Single number - employeeCount = parseInt(employeeStr); - } - - if (employeeCount && !isNaN(employeeCount) && employeeCount > 0) { - companyData.employees = employeeCount; - } - } - - // Add LinkedIn (linkedinLink exists in schema) - if (company.linkedin) { - companyData.linkedinLink = { - primaryLinkUrl: company.linkedin, - primaryLinkLabel: 'LinkedIn', - }; - } - - // Note: tagline, companyEmail, companyPhone, and industryClassification fields don't exist in the standard schema - // If you need these fields, you'll need to create custom fields in Twenty first - - if (existingCompanies && existingCompanies.length > 0) { - // Company exists - update it - companyId = existingCompanies[0].id; - log(` āœ“ Found existing company (ID: ${companyId})`); - - // Don't include domainName in update (it's unique and already set) - const updateData = { ...companyData }; - delete updateData.domainName; - - const updateOptions = { - method: 'PATCH', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/companies/${companyId}`, - data: updateData, - }; - await axios(updateOptions); - await sleep(RATE_LIMIT_DELAY); // Rate limiting delay - - results.companiesUpdated++; - log(` āœ“ Updated company data`); - } else { - // Create new company - log(` āž• Creating new company...`); - const newCompanyOptions = { - method: 'POST', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/companies`, - data: companyData, - }; - const newCompanyResponse = await axios(newCompanyOptions); - await sleep(RATE_LIMIT_DELAY); // Rate limiting delay - - // Extract company ID from REST API response: { data: { createCompany: { id: "..." } } } - companyId = newCompanyResponse.data?.data?.createCompany?.id; - - if (!companyId) { - log( - ` āš ļø Warning: Could not extract company ID from response. Full response: ${JSON.stringify(newCompanyResponse.data)}`, - ); - } - - results.companiesCreated++; - log(` āœ“ Created company (ID: ${companyId})`); - } - - // 2b. Create WebsiteLead records for each session - log(` šŸ“ Processing ${company.sessions.length} session(s)...`); - - if (!company.sessions || company.sessions.length === 0) { - log(` āš ļø No sessions found for this company`); - } - - for (const session of company.sessions) { - try { - log(` Processing session ${session.session_id}...`); - - // Build traffic source string - const trafficSource = session.utm_source - ? `${session.utm_source}${session.utm_medium ? '/' + session.utm_medium : ''}` - : 'Direct'; - - // Extract pages visited (limit length to prevent DB errors) - const pagesArray = session.user_data.map( - (ud) => ud.document_location, - ); - let pagesVisited = pagesArray.join(' → '); - - // Truncate if too long (max ~1000 chars to be safe) - if (pagesVisited.length > 1000) { - pagesVisited = pagesVisited.substring(0, 997) + '...'; - } - - // Use Webmetic's lead score - const engagementScore = company.lead_score || 0; - - // Calculate average scroll depth - const scrollDepths = session.user_data - .map((ud) => ud.scroll_depth) - .filter((sd) => typeof sd === 'number' && !isNaN(sd)); - const averageScrollDepth = - scrollDepths.length > 0 - ? Math.round( - scrollDepths.reduce((sum, sd) => sum + sd, 0) / - scrollDepths.length, - ) - : 0; - - // Calculate total user events - const totalUserEvents = session.user_data.reduce( - (sum, ud) => sum + (ud.user_events_count || 0), - 0, - ); - - // Use session_id as unique identifier (company name available via relation) - const leadName = session.session_id; - - log(` Lead name: ${leadName}`); - - // Check if WebsiteLead already exists for this session - log(` Checking if lead already exists...`); - const existingLeadsOptions = { - method: 'GET', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - }, - url: `${TWENTY_API_URL}/websiteLeads?filter=name%5Beq%5D%3A%22${encodeURIComponent(leadName)}%22`, - }; - const existingLeadsResponse = await axios(existingLeadsOptions); - await sleep(RATE_LIMIT_DELAY); // Rate limiting delay - - const existingLeads = - existingLeadsResponse.data?.data?.websiteLeads || - existingLeadsResponse.data; - log(` Found ${existingLeads?.length || 0} existing leads`); - - if (!existingLeads || existingLeads.length === 0) { - // Create WebsiteLead record only if it doesn't exist - const leadData: any = { - name: leadName, - visitDate: session.timestamp, - pageViews: session.user_data.length, - sessionDuration: session.session_duration, - trafficSource: trafficSource, - pagesVisited: pagesVisited, - visitCount: company.sessions.length, - engagementScore: engagementScore, - }; - - // Add custom fields - if (averageScrollDepth > 0) { - leadData.averageScrollDepth = averageScrollDepth; - } - - if (totalUserEvents > 0) { - leadData.totalUserEvents = totalUserEvents; - } - - if (session.utm_campaign) { - leadData.utmCampaign = session.utm_campaign; - } - - if (session.utm_term) { - leadData.utmTerm = session.utm_term; - } - - if (session.utm_content) { - leadData.utmContent = session.utm_content; - } - - if (session.visitor_city) { - leadData.visitorCity = session.visitor_city; - } - - if (session.visitor_country) { - leadData.visitorCountry = session.visitor_country; - } - - // Link to company if we have the ID - if (companyId) { - leadData.companyId = companyId; - } - - log( - ` Creating WebsiteLead with data: ${JSON.stringify(leadData)}`, - ); - - const createOptions = { - method: 'POST', - headers: { - Authorization: `Bearer ${TWENTY_API_KEY}`, - 'Content-Type': 'application/json', - }, - url: `${TWENTY_API_URL}/websiteLeads`, - data: leadData, - }; - const createResponse = await axios(createOptions); - await sleep(RATE_LIMIT_DELAY); // Rate limiting delay - - log( - ` WebsiteLead creation response: ${createResponse.status}`, - ); - - results.websiteLeadsCreated++; - log(` āœ“ Created WebsiteLead: ${leadName}`); - } else { - log(` - WebsiteLead already exists: ${leadName}`); - } - } catch (sessionError: any) { - const errorDetails = - sessionError?.response?.data || - sessionError?.message || - 'Unknown error'; - const errorMsg = `Error processing WebsiteLead for session ${session.session_id}: ${JSON.stringify(errorDetails, null, 2)}`; - console.error(errorMsg); - log(` āŒ ${errorMsg}`); - } - } - - results.companiesProcessed++; - results.sessionsProcessed += company.sessions.length; - } catch (error: any) { - const errorDetails = - error?.response?.data || error?.message || 'Unknown error'; - const errorMsg = `Error processing company ${company.company_name}: ${ - error instanceof Error ? error.message : 'Unknown error' - }`; - const detailedError = `${errorMsg} - Details: ${JSON.stringify(errorDetails, null, 2)}`; - - // Enhanced error logging - console.error(`\nāŒ ${detailedError}`); - log(`\nāŒ ${detailedError}`); - - // Log additional diagnostic info - if (error?.response) { - log( - ` šŸ” HTTP Status: ${error.response.status} ${error.response.statusText}`, - ); - log(` šŸ” Request URL: ${error.config?.url || 'Unknown'}`); - log( - ` šŸ” Request Method: ${error.config?.method?.toUpperCase() || 'Unknown'}`, - ); - log( - ` šŸ” Auth Header: ${error.config?.headers?.Authorization ? 'Present' : 'MISSING!'}`, - ); - } - - results.errors.push( - `${errorMsg} - Details: ${JSON.stringify(errorDetails)}`, - ); - } - } - - log('\n' + '='.repeat(50)); - log('āœ… Sync Completed Successfully!'); - log('='.repeat(50)); - log(`šŸ“Š Summary:`); - log(` Companies Processed: ${results.companiesProcessed}`); - log(` Companies Created: ${results.companiesCreated}`); - log(` Companies Updated: ${results.companiesUpdated}`); - log(` Sessions Processed: ${results.sessionsProcessed}`); - log(` Website Leads Created: ${results.websiteLeadsCreated}`); - log(` Errors: ${results.errors.length}`); - - if (results.errors.length > 0) { - log('\nāš ļø Errors encountered:'); - results.errors.forEach((err, i) => log(` ${i + 1}. ${err}`)); - } - - log('='.repeat(50) + '\n'); - - // Return results with formatted log string for easier viewing - return { - ...results, - logCount: logs.length, - detailedLog: logs.join('\n'), - }; - } catch (error) { - console.error('Fatal error during sync:', error); - throw error; - } -}; - -export const config: ServerlessFunctionConfig = { - universalIdentifier: 'f2d4b8e6-3a1c-4f7e-9b5d-8c3e2a1f6d4b', - name: 'sync-visitor-data', - triggers: [ - { - universalIdentifier: 'c5e9a3b7-2d8f-4c1e-a6b3-9f2e5d8c1a7b', - type: 'cron', - pattern: '0 * * * *', - }, - ], -}; diff --git a/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/schemaSetup.ts b/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/schemaSetup.ts deleted file mode 100644 index 83c521e190..0000000000 --- a/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/schemaSetup.ts +++ /dev/null @@ -1,325 +0,0 @@ -import axios from 'axios'; - -// Rate limiting helper: delay between API calls to avoid hitting limits -const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); - -/** - * Ensures the websiteLead object exists. Creates it if missing. - * Uses GraphQL metadata API. - */ -export async function ensureWebsiteLeadObjectExists(apiKey: string, apiBaseUrl: string): Promise { - const log = (msg: string) => console.log(`[Object Setup] ${msg}`); - - try { - // Check if websiteLead object already exists - const objectsResponse = await axios.get(`${apiBaseUrl}/rest/metadata/objects`, { - headers: { Authorization: `Bearer ${apiKey}` } - }); - await sleep(800); - - const objects = objectsResponse.data?.data?.objects || []; - const existingObject = objects.find((obj: any) => obj.nameSingular === 'websiteLead'); - - if (existingObject) { - log(`āœ“ websiteLead object already exists (ID: ${existingObject.id})`); - return existingObject; - } - - // Object doesn't exist, create it via GraphQL - log('websiteLead object not found, creating it via GraphQL...'); - - const mutation = ` - mutation CreateOneObject($input: CreateOneObjectInput!) { - createOneObject(input: $input) { - id - nameSingular - namePlural - labelSingular - labelPlural - } - } - `; - - const variables = { - input: { - object: { - nameSingular: 'websiteLead', - namePlural: 'websiteLeads', - labelSingular: 'Website Lead', - labelPlural: 'Website Leads', - description: 'B2B website visitor data from Webmetic', - icon: 'IconEye' - } - } - }; - - const metadataUrl = `${apiBaseUrl}/metadata`; - const response = await axios.post(metadataUrl, { - query: mutation, - variables: variables - }, { - headers: { - Authorization: `Bearer ${apiKey}`, - 'Content-Type': 'application/json' - } - }); - - const createdObject = response.data?.data?.createOneObject; - if (!createdObject) { - throw new Error('Failed to create websiteLead object - no data returned'); - } - - log(`āœ“ Created websiteLead object (ID: ${createdObject.id})`); - await sleep(1000); - - return createdObject; - - } catch (error: any) { - const errorMsg = error?.response?.data?.errors?.[0]?.message || error.message || ''; - - // If object already exists (race condition), fetch and return it - if (errorMsg.includes('already exists') || errorMsg.includes('duplicate')) { - log('Object already exists, fetching it...'); - - const objectsResponse = await axios.get(`${apiBaseUrl}/rest/metadata/objects`, { - headers: { Authorization: `Bearer ${apiKey}` } - }); - - const existingObject = objectsResponse.data?.data?.objects?.find( - (obj: any) => obj.nameSingular === 'websiteLead' - ); - - if (existingObject) { - log(`āœ“ Found existing websiteLead object (ID: ${existingObject.id})`); - return existingObject; - } - } - - console.error('[Object Setup] Error:', error?.response?.data || error.message); - throw new Error(`Failed to ensure websiteLead object exists: ${errorMsg}`); - } -} - -/** - * Ensures the websiteLead object exists with all required fields. - * Uses GraphQL metadata API for all field creation. - */ -export async function ensureWebsiteLeadFieldsExist(apiKey: string, apiBaseUrl: string): Promise { - const log = (msg: string) => console.log(`[Field Setup] ${msg}`); - - log('Checking if websiteLead fields exist...'); - - try { - // 1. Fetch all objects using REST API - const objectsResponse = await axios.get(`${apiBaseUrl}/rest/metadata/objects`, { - headers: { Authorization: `Bearer ${apiKey}` } - }); - await sleep(800); // Rate limiting - - const objects = objectsResponse.data?.data?.objects || []; - const websiteLeadObject = objects.find((obj: any) => obj.nameSingular === 'websiteLead'); - - if (!websiteLeadObject) { - throw new Error( - 'websiteLead object not found after creation. This should not happen.' - ); - } - - log(`āœ“ Found websiteLead object (ID: ${websiteLeadObject.id})`); - - // 2. Define all required fields - const requiredFields = [ - // TEXT fields - { name: 'trafficSource', type: 'TEXT', label: 'Traffic Source', description: 'Where visitor came from (utm_source/utm_medium or Direct)', icon: 'IconWorld' }, - { name: 'pagesVisited', type: 'TEXT', label: 'Pages Visited', description: 'List of page URLs visited (max 1000 chars)', icon: 'IconFileText' }, - { name: 'utmCampaign', type: 'TEXT', label: 'UTM Campaign', description: 'UTM campaign parameter', icon: 'IconTag' }, - { name: 'utmTerm', type: 'TEXT', label: 'UTM Term', description: 'UTM term parameter (keywords for paid search)', icon: 'IconSearch' }, - { name: 'utmContent', type: 'TEXT', label: 'UTM Content', description: 'UTM content parameter (for A/B testing)', icon: 'IconFileText' }, - { name: 'visitorCity', type: 'TEXT', label: 'Visitor City', description: 'Geographic city of visitor', icon: 'IconMapPin' }, - { name: 'visitorCountry', type: 'TEXT', label: 'Visitor Country', description: 'Geographic country of visitor', icon: 'IconWorld' }, - - // NUMBER fields - { name: 'pageViews', type: 'NUMBER', label: 'Page Views', description: 'Number of pages viewed during session', icon: 'IconEye' }, - { name: 'sessionDuration', type: 'NUMBER', label: 'Session Duration', description: 'Visit length in seconds', icon: 'IconClock' }, - { name: 'visitCount', type: 'NUMBER', label: 'Visit Count', description: 'Total number of visits from this company', icon: 'IconRepeat' }, - { name: 'engagementScore', type: 'NUMBER', label: 'Engagement Score', description: 'Webmetic engagement score (0-100)', icon: 'IconChartBar' }, - { name: 'averageScrollDepth', type: 'NUMBER', label: 'Avg Scroll Depth', description: 'Average scroll percentage (0-100)', icon: 'IconArrowDown' }, - { name: 'totalUserEvents', type: 'NUMBER', label: 'Total User Events', description: 'Total count of user interactions (clicks, etc.)', icon: 'IconClick' }, - - // DATE_TIME field - { name: 'visitDate', type: 'DATE_TIME', label: 'Visit Date', description: 'When the visit occurred', icon: 'IconCalendar' }, - ]; - - // 3. Check which fields exist - const existingFields = websiteLeadObject.fields || []; - const existingFieldNames = new Set(existingFields.map((f: any) => f.name)); - const missingFields = requiredFields.filter(f => !existingFieldNames.has(f.name)); - - if (missingFields.length === 0) { - log(`āœ“ All ${requiredFields.length} required fields already exist`); - - // Check if company relation exists - const companyRelation = existingFields.find((f: any) => f.name === 'company' && f.type === 'RELATION'); - if (!companyRelation) { - log(`āš ļø Company relation field is missing - will create it`); - await createCompanyRelation(apiKey, apiBaseUrl, websiteLeadObject.id); - } else { - log(`āœ“ Company relation field exists`); - } - - return; - } - - log(`Found ${missingFields.length} missing fields, creating them now...`); - - // 4. Create missing fields using GraphQL API - const metadataUrl = `${apiBaseUrl}/metadata`; - const mutation = ` - mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) { - createOneField(input: $input) { - id - name - label - type - } - } - `; - - for (const field of missingFields) { - try { - log(` Creating field: ${field.name} (${field.type})...`); - - const variables = { - input: { - field: { - type: field.type, - objectMetadataId: websiteLeadObject.id, - name: field.name, - label: field.label, - description: field.description, - icon: field.icon, - isNullable: true - } - } - }; - - await axios.post(metadataUrl, { - query: mutation, - variables: variables - }, { - headers: { - Authorization: `Bearer ${apiKey}`, - 'Content-Type': 'application/json' - } - }); - - log(` āœ“ Created: ${field.name}`); - await sleep(500); // 500ms delay between field creations - - } catch (error: any) { - // If field already exists (race condition), that's OK - const errorMsg = error?.response?.data?.errors?.[0]?.message || error.message || ''; - if (errorMsg.includes('already exists') || errorMsg.includes('duplicate')) { - log(` - Field ${field.name} already exists (skipping)`); - } else { - throw new Error(`Failed to create field ${field.name}: ${errorMsg}`); - } - } - } - - log(`āœ“ Created ${missingFields.length} missing fields`); - - // 5. Create company relation if it doesn't exist - const companyRelation = existingFields.find((f: any) => f.name === 'company' && f.type === 'RELATION'); - if (!companyRelation) { - await createCompanyRelation(apiKey, apiBaseUrl, websiteLeadObject.id); - } - - log('āœ“ Field setup complete - all required fields exist'); - - } catch (error: any) { - console.error('[Field Setup] Error:', error?.response?.data || error.message); - throw error; - } -} - -/** - * Creates the company relation field (Many-to-One from WebsiteLead to Company). - * This creates both the forward relation (websiteLead.company) and the inverse (company.websiteLeads). - */ -async function createCompanyRelation(apiKey: string, apiBaseUrl: string, websiteLeadObjectId: string): Promise { - const log = (msg: string) => console.log(`[Field Setup] ${msg}`); - - try { - log(' Creating company relation field (Many-to-One)...'); - - // First, fetch the company object ID - const objectsResponse = await axios.get(`${apiBaseUrl}/rest/metadata/objects`, { - headers: { Authorization: `Bearer ${apiKey}` } - }); - - const companyObject = objectsResponse.data?.data?.objects?.find((obj: any) => obj.nameSingular === 'company'); - - if (!companyObject) { - throw new Error('Company object not found'); - } - - log(` Found company object (ID: ${companyObject.id})`); - - // Use GraphQL for relation creation (REST API doesn't support relations) - const mutation = ` - mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) { - createOneField(input: $input) { - id - name - label - type - } - } - `; - - const variables = { - input: { - field: { - name: 'company', - label: 'Company', - type: 'RELATION', - objectMetadataId: websiteLeadObjectId, - isNullable: true, - relationCreationPayload: { - type: 'MANY_TO_ONE', - targetObjectMetadataId: companyObject.id, - targetFieldLabel: 'Website Leads', - targetFieldIcon: 'IconChartBar', - } - } - } - }; - - // GraphQL endpoint is at /metadata (not /rest/metadata) - const metadataUrl = `${apiBaseUrl}/metadata`; - - await axios.post(metadataUrl, { - query: mutation, - variables: variables - }, { - headers: { - Authorization: `Bearer ${apiKey}`, - 'Content-Type': 'application/json' - } - }); - - log(` āœ“ Created company relation (websiteLead.company → Company)`); - log(` āœ“ Also created inverse relation (Company.websiteLeads → websiteLead[])`); - await sleep(500); - - } catch (error: any) { - // If relation already exists, that's OK - const errorMsg = error?.response?.data?.errors?.[0]?.message || error.message || ''; - if (errorMsg.includes('already exists') || errorMsg.includes('duplicate')) { - log(` - Company relation already exists (skipping)`); - } else { - throw new Error(`Failed to create company relation: ${errorMsg}`); - } - } -} diff --git a/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/types.ts b/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/types.ts deleted file mode 100644 index 5af7f79f5e..0000000000 --- a/packages/twenty-apps/community/webmetic/serverlessFunctions/sync-visitor-data/src/types.ts +++ /dev/null @@ -1,51 +0,0 @@ -export interface UserData { - timestamp: string; - document_location: string; - document_title: string; - scroll_depth: number; - referrer: string; - time_spent: number; - user_events_count?: number; -} - -export interface Session { - session_id: string; - timestamp: string; - utm_source?: string; - utm_medium?: string; - utm_campaign?: string; - utm_term?: string; - utm_content?: string; - visitor_city?: string; - visitor_country?: string; - session_duration: number; - session_time: number; - user_data: UserData[]; -} - -export interface WebmeticCompany { - company_id: string; - company_name: string; - company_url: string; - address?: string; - city?: string; - postal_code?: string; - country?: string; - phone_number?: string; - email_address?: string; - lead_score?: number; - employee_count?: string; - nace_code?: string; - linkedin?: string; - short_description_en?: string; - sessions: Session[]; -} - -export interface WebmeticResponse { - pagination: Array<{ - total: number; - page_total: number; - current: number; - }>; - result: WebmeticCompany[]; -} diff --git a/packages/twenty-apps/community/webmetic/tsconfig.json b/packages/twenty-apps/community/webmetic/tsconfig.json deleted file mode 100644 index 434ea6a985..0000000000 --- a/packages/twenty-apps/community/webmetic/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "sourceMap": true, - "declaration": true, - "outDir": "./dist", - "rootDir": ".", - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "strict": true, - "target": "es2018", - "module": "esnext", - "lib": ["es2020", "dom"], - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "resolveJsonModule": true - }, - "exclude": [ - "node_modules", - "dist", - "**/*.test.ts", - "**/*.spec.ts" - ] -} diff --git a/packages/twenty-apps/community/webmetic/yarn.lock b/packages/twenty-apps/community/webmetic/yarn.lock deleted file mode 100644 index e22f92811c..0000000000 --- a/packages/twenty-apps/community/webmetic/yarn.lock +++ /dev/null @@ -1,273 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@types/node@npm:^24.7.2": - version: 24.9.1 - resolution: "@types/node@npm:24.9.1" - dependencies: - undici-types: "npm:~7.16.0" - checksum: 10c0/c52f8168080ef9a7c3dc23d8ac6061fab5371aad89231a0f6f4c075869bc3de7e89b075b1f3e3171d9e5143d0dda1807c3dab8e32eac6d68f02e7480e7e78576 - languageName: node - linkType: hard - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d - languageName: node - linkType: hard - -"axios@npm:^1.12.2": - version: 1.12.2 - resolution: "axios@npm:1.12.2" - dependencies: - follow-redirects: "npm:^1.15.6" - form-data: "npm:^4.0.4" - proxy-from-env: "npm:^1.1.0" - checksum: 10c0/80b063e318cf05cd33a4d991cea0162f3573481946f9129efb7766f38fde4c061c34f41a93a9f9521f02b7c9565ccbc197c099b0186543ac84a24580017adfed - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: "npm:~1.0.0" - checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.2.0" - checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: "npm:^1.3.0" - checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: "npm:^1.3.0" - get-intrinsic: "npm:^1.2.6" - has-tostringtag: "npm:^1.0.2" - hasown: "npm:^2.0.2" - checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af - languageName: node - linkType: hard - -"follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.4 - resolution: "form-data@npm:4.0.4" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/373525a9a034b9d57073e55eab79e501a714ffac02e7a9b01be1c820780652b16e4101819785e1e18f8d98f0aee866cc654d660a435c378e16a72f2e7cac9695 - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.2.6": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: "npm:^1.0.0" - async-generator-function: "npm:^1.0.0" - call-bind-apply-helpers: "npm:^1.0.2" - es-define-property: "npm:^1.0.1" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.1.1" - function-bind: "npm:^1.1.2" - generator-function: "npm:^2.0.0" - get-proto: "npm:^1.0.1" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - hasown: "npm:^2.0.2" - math-intrinsics: "npm:^1.1.0" - checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d - languageName: node - linkType: hard - -"get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: "npm:^1.0.1" - es-object-atoms: "npm:^1.0.0" - checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c - languageName: node - linkType: hard - -"gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: "npm:^1.0.3" - checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c - languageName: node - linkType: hard - -"hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: "npm:^1.1.2" - checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b - languageName: node - linkType: hard - -"twenty-sdk@npm:0.0.3": - version: 0.0.3 - resolution: "twenty-sdk@npm:0.0.3" - checksum: 10c0/0a3c85c27edb22fb50f7eb0da4f9770e85729fce05e9e0118ad0cdfc36e42425c93340a6cd1c276daf30aeeaa612db0cd905831c0a8287a31bff3da5be9b0562 - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a - languageName: node - linkType: hard - -"webmetic-visitor-intelligence@workspace:.": - version: 0.0.0-use.local - resolution: "webmetic-visitor-intelligence@workspace:." - dependencies: - "@types/node": "npm:^24.7.2" - axios: "npm:^1.12.2" - twenty-sdk: "npm:0.0.3" - languageName: unknown - linkType: soft