diff --git a/.github/workflows/deploy-datadog-apps.yml b/.github/workflows/deploy-datadog-apps.yml index 56ffa18..d6d22db 100644 --- a/.github/workflows/deploy-datadog-apps.yml +++ b/.github/workflows/deploy-datadog-apps.yml @@ -168,14 +168,22 @@ jobs: DD_APP_KEY: ${{ secrets.DATADOG_APP_KEY }} run: | if [ -z "$DD_API_KEY" ] || [ -z "$DD_APP_KEY" ]; then - echo "::error::DATADOG_API_KEY / DATADOG_APP_KEY are not set on this repository, so the upload can't authenticate. Without them it falls back to an interactive OAuth login, which hangs for 5 minutes on a CI runner before failing." + echo "::error::DATADOG_API_KEY / DATADOG_APP_KEY are not set on this repository, so the upload can't authenticate. Without them the datadog-apps CLI has no non-interactive credentials and exits with an error." echo "::error::Set them under Settings > Secrets and variables > Actions, or run: npm init @datadog/apps --set-secrets" exit 1 fi - name: Upload ${{ matrix.app }} + working-directory: apps/${{ matrix.app }} env: - APP: ${{ matrix.app }} DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} DD_SITE: datad0g.com DD_APP_KEY: ${{ secrets.DATADOG_APP_KEY }} - run: npm run upload -w "apps/$APP" + run: | + set -euo pipefail + "$GITHUB_WORKSPACE/node_modules/.bin/datadog-apps" upload \ + --version-name "$GITHUB_SHA" \ + | tee "$RUNNER_TEMP/upload.log" + if ! grep -q "Published version" "$RUNNER_TEMP/upload.log"; then + echo "::error::The upload exited 0 but never published a version. Treating this as a failed deploy: the app is NOT live. Check that the upload path still exists in the installed @datadog/apps-cli." + exit 1 + fi diff --git a/apps/clock/package.json b/apps/clock/package.json index 93acd9d..05e539c 100644 --- a/apps/clock/package.json +++ b/apps/clock/package.json @@ -6,7 +6,7 @@ "dev": "vite", "dev:verify": "vite --mode dev-verify", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --fix", "preview": "vite preview", diff --git a/apps/k8s-pods/package.json b/apps/k8s-pods/package.json index 36dcccf..504a1ab 100644 --- a/apps/k8s-pods/package.json +++ b/apps/k8s-pods/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --fix", "preview": "vite preview", diff --git a/apps/my-first-app/package.json b/apps/my-first-app/package.json index 8c0e21b..68fefa3 100644 --- a/apps/my-first-app/package.json +++ b/apps/my-first-app/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --ext ts,tsx --fix", "preview": "vite preview", @@ -21,4 +21,4 @@ "optionalDependencies": { "@napi-rs/keyring": "^1.3.0" } -} \ No newline at end of file +} diff --git a/apps/openai-prompt/docs/agents/build-upload-auth.md b/apps/openai-prompt/docs/agents/build-upload-auth.md index 2219d9d..f05d735 100644 --- a/apps/openai-prompt/docs/agents/build-upload-auth.md +++ b/apps/openai-prompt/docs/agents/build-upload-auth.md @@ -7,9 +7,12 @@ This scaffold uses npm. Prefer the scripts in `package.json` over ad hoc command - `npm run dev` — start the local Vite dev server. - `npm run typecheck` — TypeScript check without emitting files. Use this for credential-free validation. - `npm run lint` / `npm run lint:fix` — run ESLint. -- `npm run build` — production build (does not deploy by default). -- `npm run deploy` — build, upload, and publish the app live. -- `npm run publish` — publish the most recently uploaded version without rebuilding. +- `npm run build` — local production build. Writes `dist/datadog-app-assets.zip` and uploads nothing. +- `npm run upload` — build, upload, and publish the app live, via the `datadog-apps` CLI + (`@datadog/apps-cli`, a root devDependency). This is the only script that makes an app go live. + +There are no `deploy` or `publish` scripts in this workspace. Uploading and publishing are a +single `upload` step: the CLI uploads the bundle, then releases that version to live. ## App identity (do not change) @@ -133,12 +136,17 @@ The application key needs both scopes enabled — not just one: Go to `https://app.datadoghq.com/organization-settings/application-keys`, confirm both scopes, or create a new key with both. -**Build succeeds but nothing deploys** - -- Use `npm run deploy`, not `npm run build`, when the intent is to deploy. -- Check whether `DD_APPS_PUBLISH` is set to `false` in the environment — the app uploads as a draft but does not go live. Unset the variable or run `npm run publish` separately. -- Confirm `dryRun` in `vite.config.ts` is not `true`. -- Confirm `DD_APPS_UPLOAD_ASSETS` is set — `npm run deploy` does this automatically. +**Build succeeds but nothing goes live** + +- Use `npm run upload`, not `npm run build`. `build` only writes the zip. +- Check that the `upload` script runs `npx datadog-apps upload` and not a bare `vite build`. + `@datadog/vite-plugin` 3.3.0 dropped the in-build upload path, so a `vite build` + spelled as "upload" exits 0 having published nothing. This exact regression took + `scott-mountains` live-less while CI reported success (PR #14). +- A successful upload prints `Published version live.` followed by the app's URL. + If that line is absent, nothing was published, whatever the exit code says. +- `DD_APPS_UPLOAD_ASSETS` is not read by any version of the plugin or the CLI. If you + see it in a script, that script is stale. **Build fails with missing credentials** diff --git a/apps/openai-prompt/package.json b/apps/openai-prompt/package.json index 81e2f21..69b7307 100644 --- a/apps/openai-prompt/package.json +++ b/apps/openai-prompt/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --fix", "preview": "vite preview", diff --git a/apps/sarah-s-app-mon-aug-31-1-17-54-pm/package.json b/apps/sarah-s-app-mon-aug-31-1-17-54-pm/package.json index 7f9085c..d1c2310 100644 --- a/apps/sarah-s-app-mon-aug-31-1-17-54-pm/package.json +++ b/apps/sarah-s-app-mon-aug-31-1-17-54-pm/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --fix", "preview": "vite preview", diff --git a/apps/sarah-s-app-mon-aug-31-1-42-47-pm/docs/agents/build-upload-auth.md b/apps/sarah-s-app-mon-aug-31-1-42-47-pm/docs/agents/build-upload-auth.md index 2219d9d..f05d735 100644 --- a/apps/sarah-s-app-mon-aug-31-1-42-47-pm/docs/agents/build-upload-auth.md +++ b/apps/sarah-s-app-mon-aug-31-1-42-47-pm/docs/agents/build-upload-auth.md @@ -7,9 +7,12 @@ This scaffold uses npm. Prefer the scripts in `package.json` over ad hoc command - `npm run dev` — start the local Vite dev server. - `npm run typecheck` — TypeScript check without emitting files. Use this for credential-free validation. - `npm run lint` / `npm run lint:fix` — run ESLint. -- `npm run build` — production build (does not deploy by default). -- `npm run deploy` — build, upload, and publish the app live. -- `npm run publish` — publish the most recently uploaded version without rebuilding. +- `npm run build` — local production build. Writes `dist/datadog-app-assets.zip` and uploads nothing. +- `npm run upload` — build, upload, and publish the app live, via the `datadog-apps` CLI + (`@datadog/apps-cli`, a root devDependency). This is the only script that makes an app go live. + +There are no `deploy` or `publish` scripts in this workspace. Uploading and publishing are a +single `upload` step: the CLI uploads the bundle, then releases that version to live. ## App identity (do not change) @@ -133,12 +136,17 @@ The application key needs both scopes enabled — not just one: Go to `https://app.datadoghq.com/organization-settings/application-keys`, confirm both scopes, or create a new key with both. -**Build succeeds but nothing deploys** - -- Use `npm run deploy`, not `npm run build`, when the intent is to deploy. -- Check whether `DD_APPS_PUBLISH` is set to `false` in the environment — the app uploads as a draft but does not go live. Unset the variable or run `npm run publish` separately. -- Confirm `dryRun` in `vite.config.ts` is not `true`. -- Confirm `DD_APPS_UPLOAD_ASSETS` is set — `npm run deploy` does this automatically. +**Build succeeds but nothing goes live** + +- Use `npm run upload`, not `npm run build`. `build` only writes the zip. +- Check that the `upload` script runs `npx datadog-apps upload` and not a bare `vite build`. + `@datadog/vite-plugin` 3.3.0 dropped the in-build upload path, so a `vite build` + spelled as "upload" exits 0 having published nothing. This exact regression took + `scott-mountains` live-less while CI reported success (PR #14). +- A successful upload prints `Published version live.` followed by the app's URL. + If that line is absent, nothing was published, whatever the exit code says. +- `DD_APPS_UPLOAD_ASSETS` is not read by any version of the plugin or the CLI. If you + see it in a script, that script is stale. **Build fails with missing credentials** diff --git a/apps/sarah-s-app-mon-aug-31-1-42-47-pm/package.json b/apps/sarah-s-app-mon-aug-31-1-42-47-pm/package.json index b15f525..e2bfa63 100644 --- a/apps/sarah-s-app-mon-aug-31-1-42-47-pm/package.json +++ b/apps/sarah-s-app-mon-aug-31-1-42-47-pm/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --fix", "preview": "vite preview", diff --git a/apps/sarah-s-app-thu-sep-3-3-40-03-pm/docs/agents/build-upload-auth.md b/apps/sarah-s-app-thu-sep-3-3-40-03-pm/docs/agents/build-upload-auth.md index 2219d9d..f05d735 100644 --- a/apps/sarah-s-app-thu-sep-3-3-40-03-pm/docs/agents/build-upload-auth.md +++ b/apps/sarah-s-app-thu-sep-3-3-40-03-pm/docs/agents/build-upload-auth.md @@ -7,9 +7,12 @@ This scaffold uses npm. Prefer the scripts in `package.json` over ad hoc command - `npm run dev` — start the local Vite dev server. - `npm run typecheck` — TypeScript check without emitting files. Use this for credential-free validation. - `npm run lint` / `npm run lint:fix` — run ESLint. -- `npm run build` — production build (does not deploy by default). -- `npm run deploy` — build, upload, and publish the app live. -- `npm run publish` — publish the most recently uploaded version without rebuilding. +- `npm run build` — local production build. Writes `dist/datadog-app-assets.zip` and uploads nothing. +- `npm run upload` — build, upload, and publish the app live, via the `datadog-apps` CLI + (`@datadog/apps-cli`, a root devDependency). This is the only script that makes an app go live. + +There are no `deploy` or `publish` scripts in this workspace. Uploading and publishing are a +single `upload` step: the CLI uploads the bundle, then releases that version to live. ## App identity (do not change) @@ -133,12 +136,17 @@ The application key needs both scopes enabled — not just one: Go to `https://app.datadoghq.com/organization-settings/application-keys`, confirm both scopes, or create a new key with both. -**Build succeeds but nothing deploys** - -- Use `npm run deploy`, not `npm run build`, when the intent is to deploy. -- Check whether `DD_APPS_PUBLISH` is set to `false` in the environment — the app uploads as a draft but does not go live. Unset the variable or run `npm run publish` separately. -- Confirm `dryRun` in `vite.config.ts` is not `true`. -- Confirm `DD_APPS_UPLOAD_ASSETS` is set — `npm run deploy` does this automatically. +**Build succeeds but nothing goes live** + +- Use `npm run upload`, not `npm run build`. `build` only writes the zip. +- Check that the `upload` script runs `npx datadog-apps upload` and not a bare `vite build`. + `@datadog/vite-plugin` 3.3.0 dropped the in-build upload path, so a `vite build` + spelled as "upload" exits 0 having published nothing. This exact regression took + `scott-mountains` live-less while CI reported success (PR #14). +- A successful upload prints `Published version live.` followed by the app's URL. + If that line is absent, nothing was published, whatever the exit code says. +- `DD_APPS_UPLOAD_ASSETS` is not read by any version of the plugin or the CLI. If you + see it in a script, that script is stale. **Build fails with missing credentials** diff --git a/apps/sarah-s-app-thu-sep-3-3-40-03-pm/package.json b/apps/sarah-s-app-thu-sep-3-3-40-03-pm/package.json index 609c7c7..6c25d9d 100644 --- a/apps/sarah-s-app-thu-sep-3-3-40-03-pm/package.json +++ b/apps/sarah-s-app-thu-sep-3-3-40-03-pm/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --fix", "preview": "vite preview", diff --git a/apps/sarah-s-app-tue-aug-25-10-32-30-am/package.json b/apps/sarah-s-app-tue-aug-25-10-32-30-am/package.json index 744524d..4108368 100644 --- a/apps/sarah-s-app-tue-aug-25-10-32-30-am/package.json +++ b/apps/sarah-s-app-tue-aug-25-10-32-30-am/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --ext ts,tsx --fix", "preview": "vite preview", diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/package.json b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/package.json index 18d47a7..7b9a81c 100644 --- a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/package.json +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --ext ts,tsx --fix", "preview": "vite preview", diff --git a/apps/sarah-s-app-wed-sep-23-4-09-23-pm/package.json b/apps/sarah-s-app-wed-sep-23-4-09-23-pm/package.json index 9208a36..77c424d 100644 --- a/apps/sarah-s-app-wed-sep-23-4-09-23-pm/package.json +++ b/apps/sarah-s-app-wed-sep-23-4-09-23-pm/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --fix", "preview": "vite preview", diff --git a/apps/scott-mountains/package.json b/apps/scott-mountains/package.json index 0b5aa38..3ced217 100644 --- a/apps/scott-mountains/package.json +++ b/apps/scott-mountains/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "vite", "build": "vite build", - "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "upload": "npx datadog-apps upload", "lint": "eslint . --report-unused-disable-directives --max-warnings 0", "lint:fix": "eslint . --fix", "preview": "vite preview", diff --git a/docs/agents/build-upload-auth.md b/docs/agents/build-upload-auth.md index 2219d9d..f05d735 100644 --- a/docs/agents/build-upload-auth.md +++ b/docs/agents/build-upload-auth.md @@ -7,9 +7,12 @@ This scaffold uses npm. Prefer the scripts in `package.json` over ad hoc command - `npm run dev` — start the local Vite dev server. - `npm run typecheck` — TypeScript check without emitting files. Use this for credential-free validation. - `npm run lint` / `npm run lint:fix` — run ESLint. -- `npm run build` — production build (does not deploy by default). -- `npm run deploy` — build, upload, and publish the app live. -- `npm run publish` — publish the most recently uploaded version without rebuilding. +- `npm run build` — local production build. Writes `dist/datadog-app-assets.zip` and uploads nothing. +- `npm run upload` — build, upload, and publish the app live, via the `datadog-apps` CLI + (`@datadog/apps-cli`, a root devDependency). This is the only script that makes an app go live. + +There are no `deploy` or `publish` scripts in this workspace. Uploading and publishing are a +single `upload` step: the CLI uploads the bundle, then releases that version to live. ## App identity (do not change) @@ -133,12 +136,17 @@ The application key needs both scopes enabled — not just one: Go to `https://app.datadoghq.com/organization-settings/application-keys`, confirm both scopes, or create a new key with both. -**Build succeeds but nothing deploys** - -- Use `npm run deploy`, not `npm run build`, when the intent is to deploy. -- Check whether `DD_APPS_PUBLISH` is set to `false` in the environment — the app uploads as a draft but does not go live. Unset the variable or run `npm run publish` separately. -- Confirm `dryRun` in `vite.config.ts` is not `true`. -- Confirm `DD_APPS_UPLOAD_ASSETS` is set — `npm run deploy` does this automatically. +**Build succeeds but nothing goes live** + +- Use `npm run upload`, not `npm run build`. `build` only writes the zip. +- Check that the `upload` script runs `npx datadog-apps upload` and not a bare `vite build`. + `@datadog/vite-plugin` 3.3.0 dropped the in-build upload path, so a `vite build` + spelled as "upload" exits 0 having published nothing. This exact regression took + `scott-mountains` live-less while CI reported success (PR #14). +- A successful upload prints `Published version live.` followed by the app's URL. + If that line is absent, nothing was published, whatever the exit code says. +- `DD_APPS_UPLOAD_ASSETS` is not read by any version of the plugin or the CLI. If you + see it in a script, that script is stale. **Build fails with missing credentials** diff --git a/docs/agents/cicd.md b/docs/agents/cicd.md index eeb038d..2bbb35d 100644 --- a/docs/agents/cicd.md +++ b/docs/agents/cicd.md @@ -1,11 +1,11 @@ # CI/CD -This monorepo ships a deploy workflow at `.github/workflows/deploy-datadog-apps.yml`. You do not need to add `DataDog/apps-github-action` — the workflow uploads each app through its own `upload` script, which respects the npm workspace layout. +This monorepo ships a deploy workflow at `.github/workflows/deploy-datadog-apps.yml`. You do not need to add `DataDog/apps-github-action` — the workflow uploads each app with the root-installed `datadog-apps` CLI, run from that app's directory so it picks up the app's own `datadog-app.config.json`. ## What the workflow does - **On pull requests** touching `apps/**`, `packages/**`, or the root package manifests: runs `npm ci`, checks every app manifest against the root React overrides, then runs `npm run typecheck`, `npm run lint`, and `npm run build` as merge gates. No Datadog credentials are used. -- **On pushes to the repository's default branch**: runs `npm ci --ignore-scripts` and the same React-alignment check, then detects which `apps/` folders changed and uploads only those, one matrix leg per app, via `npm run upload -w apps/`. Uploads do not run when the lockfile or alignment gate fails. +- **On pushes to the repository's default branch**: runs `npm ci --ignore-scripts` and the same React-alignment check, then detects which `apps/` folders changed and uploads only those, one matrix leg per app, via `node_modules/.bin/datadog-apps upload --version-name "$GITHUB_SHA"`. The step fails if the CLI exits 0 without printing `Published version`, so a no-op upload cannot pass as a green deploy. Uploads do not run when the lockfile or alignment gate fails. Re-uploading an app **updates the existing Datadog App** rather than creating a new one, because each app's `vite.config.ts` carries a stable `apps.identifier`. So editing an app becomes: open a PR, merge it, and the app updates in Datadog. @@ -15,7 +15,7 @@ The default branch is read from `github.event.repository.default_branch`, so the ## Required secrets -Store `DATADOG_API_KEY` and `DATADOG_APP_KEY` as [encrypted secrets](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions) in the repository or organization settings. Prefer an application key owned by a [service account](https://docs.datadoghq.com/account_management/org_settings/service_accounts/) rather than a personal user key — a personal key stops working when that user is deactivated, silently breaking the pipeline. The key needs both **Actions API Access** and **Apps** scopes. The workflow passes the secrets to the build as `DD_API_KEY` / `DD_APP_KEY`, which the Datadog vite plugin reads to authenticate the upload. +Store `DATADOG_API_KEY` and `DATADOG_APP_KEY` as [encrypted secrets](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions) in the repository or organization settings. Prefer an application key owned by a [service account](https://docs.datadoghq.com/account_management/org_settings/service_accounts/) rather than a personal user key — a personal key stops working when that user is deactivated, silently breaking the pipeline. The key needs both **Actions API Access** and **Apps** scopes. The workflow passes the secrets to the upload step as `DD_API_KEY` / `DD_APP_KEY`, which the `datadog-apps` CLI reads to authenticate. When only one of the two is set, the CLI ignores both and falls back to OAuth, which cannot complete in CI. ## Datadog site diff --git a/docs/agents/scaffolding.md b/docs/agents/scaffolding.md index f5cbdff..b719236 100644 --- a/docs/agents/scaffolding.md +++ b/docs/agents/scaffolding.md @@ -4,19 +4,29 @@ Pitfalls observed in this workspace when scaffolding a new app with `npm init @datadog/apps` (vite-react template) and how to fix them. Apply these before the first root install / lockfile gate. -## 1. Generated npm scripts use an unresolvable CLI +## 1. Keep the generated CLI `upload` script The generated `package.json` scripts call `npx datadog-apps dev|build|upload`. -No `datadog-apps` binary is published to the public registry or shipped in this -workspace, so those scripts fail with an npm 404. Replace them with the direct -Vite scripts used by the existing apps: +That binary now ships in `@datadog/apps-cli`, which is a **root devDependency** +of this workspace — keep the generated `upload` script as-is: ```json "dev": "vite", "build": "vite build", -"upload": "DD_APPS_UPLOAD_ASSETS=1 vite build" +"upload": "npx datadog-apps upload" ``` +Direct Vite scripts are fine for `dev` and `build`, but **never for `upload`**. +`@datadog/vite-plugin` 3.3.0 removed the in-build upload path: a plain +`vite build` writes `dist/datadog-app-assets.zip` and exits 0 without +contacting Datadog, so the app silently never goes live while CI stays green. +Uploading and publishing is the CLI's job now. See +`docs/agents/build-upload-auth.md`. + +(Earlier revisions of this doc said no `datadog-apps` binary was published. +That was true of the old `@datadog/apps` package, which 404'd; `@datadog/apps-cli` +superseded it.) + ## 2. React version must match the root overrides The template generates the app with `react`/`react-dom` `^19.x`. The root diff --git a/package-lock.json b/package-lock.json index 205737c..d88eaab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "packages/*" ], "devDependencies": { - "@datadog/vite-plugin": "^3.2.1", + "@datadog/apps-cli": ">=0.0.2 <0.1.0", + "@datadog/vite-plugin": "^3.3.0", "@eslint/js": "^9.39.2", "@types/node": "^24.12.2", "@types/react": "^18.3.0", @@ -553,6 +554,22 @@ "integrity": "sha512-utOkUOd0hb3q58wWDUbm+GAvYGI8fv3bNpikUj723HAZtAO4wd47c/2uWOANIBsnhQqA9QOnomqex+LmBxhDTA==", "license": "Apache-2.0" }, + "node_modules/@datadog/apps-cli": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@datadog/apps-cli/-/apps-cli-0.0.3.tgz", + "integrity": "sha512-psWCpGLRQlviQBPqQL0uBIlNzdFnL5qdrWJvkEX90+jnKap1vJ0l5/Wo24ykmJQiDjK6whVKL/6gtCHKaTJ6RQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@inquirer/prompts": "8.2.0", + "clipanion": "4.0.0-rc.3", + "oauth4webapi": "3.8.6", + "open": "8.4.2" + }, + "bin": { + "datadog-apps": "dist/bin.js" + } + }, "node_modules/@datadog/apps-frontend": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/@datadog/apps-frontend/-/apps-frontend-0.0.9.tgz", @@ -1372,6 +1389,350 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@inquirer/ansi": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.8.tgz", + "integrity": "sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.2.5.tgz", + "integrity": "sha512-bRt8J8m+Fot9CXv+zNQGXUq2ET0MggR1fPz7v6edN6MFYmsbfGnMmkmWZJEegMKqrAC8ej/o1sqisHZXZJMAfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.3.2.tgz", + "integrity": "sha512-Xvr/0HggjddPtGppuqVmxhTw+Hr8PvsZ/k0HmOEaAqQEt80OITNkFWnsdNmyT0/eM4Ab+iJLx2R8rctlEyfSVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-12.0.3.tgz", + "integrity": "sha512-wsSy0sznmXwkty+2PzZwx00Cazc/E0r0B7mAzdGROz2Ct+DFZXaK7WDjGZvgjRldxH5ZhFVfF2lgkYrqgOw2KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1", + "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.3.3.tgz", + "integrity": "sha512-YsKkS2q63IiLtaDK/9nqzdComN97SDQrmKiyNggN+ceP4ty+Z6VwyTz3FpjeUWeW1Efss2xHFKCC9sx7hnrsxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/external-editor": "^3.0.5", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.1.5.tgz", + "integrity": "sha512-uHuXLmXW+TtIfT/9vSBotypAkqn1n34Ul+CLGPos/xANyO4Ff5xZzkYhbKR4NEcfVK4a9mHQOpwVZzluSHFRGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.5.tgz", + "integrity": "sha512-f3QQJRIX5ZEneBHNUIuPjmbdzHnmRFJA8r2dkcb8q+OM5Uv5KtnuAttQumnrjcBVBM3mcTX1CkmtAkU58VRZxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.2" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.9.tgz", + "integrity": "sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + } + }, + "node_modules/@inquirer/input": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.1.6.tgz", + "integrity": "sha512-HtcJhB2QFVXbLuJ5S3syhNbTUVxYvwqV4VRBDkQceBloC9bmTViUoRFP5PbSaDZb3HzfPmpuU/gG4ybVBz4FHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.2.3.tgz", + "integrity": "sha512-6Yuwh1NGSbu1Lo4N1EWjXs1jKRntLg/ZCwhmeorEHde90v1XxAozdbd4Iu30eOQLW+6h1hp2O9ujNfLSbTPJnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.2.2.tgz", + "integrity": "sha512-W9zYdyzogK+6110mqwaSJWCBu2yA5Q/OfnGSjjZB1bNpHlmUozXxTl0+QOZBNeVd6Qo81/qT75gW05gLAtITxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.2.0.tgz", + "integrity": "sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^5.0.4", + "@inquirer/confirm": "^6.0.4", + "@inquirer/editor": "^5.0.4", + "@inquirer/expand": "^5.0.4", + "@inquirer/input": "^5.0.4", + "@inquirer/number": "^4.0.4", + "@inquirer/password": "^5.0.4", + "@inquirer/rawlist": "^5.2.0", + "@inquirer/search": "^4.1.0", + "@inquirer/select": "^5.0.4" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.3.5.tgz", + "integrity": "sha512-1oHky1ONfCOwNrnkQGDE1oaSij/3fI6HFMSf2H/WsGO2lEyDX9My82iggITSy9ddSZ8yk8j9v41OI0fVoSIoaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.3.3.tgz", + "integrity": "sha512-fyuIU1Nbpvwlikjg3gXwJFDI11+EFjqQ7P+iByfmivIKQ1vmaykNrD/vy5unHuUqUpsOsnvJ25//tPF7E/RBRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.2.5.tgz", + "integrity": "sha512-9kc15hr8r/kI+3DO/xLog5nOzTz1jqsHXa6JBFzmQKhkoJ8Slda1I1L/uD8ZSZ9tF1yp79wwXe7mclvX1rqR2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^2.0.8", + "@inquirer/core": "^12.0.3", + "@inquirer/figures": "^2.0.9", + "@inquirer/type": "4.1.1" + }, + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.1.1.tgz", + "integrity": "sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=23.5.0 || ^22.13.0 || ^20.17.0" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@isaacs/cliui": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", @@ -2565,6 +2926,39 @@ "node": ">=4" } }, + "node_modules/chardet": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.2.0.tgz", + "integrity": "sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/clipanion": { + "version": "4.0.0-rc.3", + "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-4.0.0-rc.3.tgz", + "integrity": "sha512-+rJOJMt2N6Oikgtfqmo/Duvme7uz3SIedL2b6ycgCztQMiTfr3aQh2DDyLHl+QUPClKMNpSg3gDJFvNQYIcq1g==", + "dev": true, + "license": "MIT", + "workspaces": [ + "website" + ], + "dependencies": { + "typanion": "^3.8.0" + }, + "peerDependencies": { + "typanion": "*" + } + }, "node_modules/clock": { "resolved": "apps/clock", "link": true @@ -2654,6 +3048,16 @@ "dev": true, "license": "MIT" }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.443", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.443.tgz", @@ -3109,6 +3513,33 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz", + "integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -3298,6 +3729,23 @@ "hermes-estree": "0.25.1" } }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/ignore": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.11.tgz", @@ -3349,6 +3797,22 @@ "dev": true, "license": "ISC" }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3372,6 +3836,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3627,6 +4104,16 @@ "dev": true, "license": "MIT" }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/my-first-app": { "resolved": "apps/my-first-app", "link": true @@ -3667,6 +4154,34 @@ "node": ">=18" } }, + "node_modules/oauth4webapi": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.6.tgz", + "integrity": "sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/openai-prompt": { "resolved": "apps/openai-prompt", "link": true @@ -4096,6 +4611,13 @@ "dev": true, "license": "MIT" }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, "node_modules/sarah-s-app-mon-aug-31-1-17-54-pm": { "resolved": "apps/sarah-s-app-mon-aug-31-1-17-54-pm", "link": true @@ -4292,6 +4814,16 @@ "typescript": ">=4.8.4" } }, + "node_modules/typanion": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.14.0.tgz", + "integrity": "sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==", + "dev": true, + "license": "MIT", + "workspaces": [ + "website" + ] + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 92eb244..ff4b7e3 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,8 @@ "lint:fix": "eslint . --ext ts,tsx --fix" }, "devDependencies": { - "@datadog/vite-plugin": "^3.2.1", + "@datadog/apps-cli": ">=0.0.2 <0.1.0", + "@datadog/vite-plugin": "^3.3.0", "@eslint/js": "^9.39.2", "@types/node": "^24.12.2", "@types/react": "^18.3.0",