diff --git a/fern/apis/fdr/definition/docs/v1/commons/commons.yml b/fern/apis/fdr/definition/docs/v1/commons/commons.yml index a340d465a3..1e2d037538 100644 --- a/fern/apis/fdr/definition/docs/v1/commons/commons.yml +++ b/fern/apis/fdr/definition/docs/v1/commons/commons.yml @@ -68,6 +68,7 @@ types: fathom: optional clearbit: optional heap: optional + datadog: optional SegmentConfig: properties: @@ -136,6 +137,12 @@ types: properties: appId: string + DatadogRumConfig: + properties: + applicationId: string + clientToken: string + site: optional + DocsLayoutConfig: properties: pageWidth: optional diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/AnalyticsConfig.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/AnalyticsConfig.ts index 4dc3e9971d..b186569ba0 100644 --- a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/AnalyticsConfig.ts +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/AnalyticsConfig.ts @@ -21,4 +21,5 @@ export interface AnalyticsConfig { fathom: FernRegistry.docs.v1.commons.FathomConfig | undefined; clearbit: FernRegistry.docs.v1.commons.ClearBitConfig | undefined; heap: FernRegistry.docs.v1.commons.HeapConfig | undefined; + datadog: FernRegistry.docs.v1.commons.DatadogRumConfig | undefined; } diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/DatadogRumConfig.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/DatadogRumConfig.ts new file mode 100644 index 0000000000..104ac3d227 --- /dev/null +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/DatadogRumConfig.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface DatadogRumConfig { + applicationId: string; + clientToken: string; + site: string | undefined; +} diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/index.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/index.ts index 2d510b2e0e..23ca48691a 100644 --- a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/index.ts +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/index.ts @@ -19,6 +19,7 @@ export * from "./PlausibleConfig"; export * from "./FathomConfig"; export * from "./ClearBitConfig"; export * from "./HeapConfig"; +export * from "./DatadogRumConfig"; export * from "./DocsLayoutConfig"; export * from "./SearchbarPlacement"; export * from "./TabsPlacement"; diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/write/client/Client.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/write/client/Client.ts index 272d624b68..197c7fe10b 100644 --- a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/write/client/Client.ts +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/write/client/Client.ts @@ -350,6 +350,13 @@ export class Write { * }, * heap: { * appId: "string" + * }, + * datadog: { + * applicationId: "string", + * clientToken: "string", + * site: { + * "key": "value" + * } * } * }, * integrations: { diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/write/client/requests/RegisterDocsRequest.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/write/client/requests/RegisterDocsRequest.ts index dbdc2d136f..d1bae3c218 100644 --- a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/write/client/requests/RegisterDocsRequest.ts +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v1/resources/write/client/requests/RegisterDocsRequest.ts @@ -269,6 +269,13 @@ import * as FernRegistry from "../../../../../../../../index"; * }, * heap: { * appId: "string" + * }, + * datadog: { + * applicationId: "string", + * clientToken: "string", + * site: { + * "key": "value" + * } * } * }, * integrations: { diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v2/resources/write/client/Client.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v2/resources/write/client/Client.ts index 6f79369d80..5f26273d35 100644 --- a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v2/resources/write/client/Client.ts +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v2/resources/write/client/Client.ts @@ -454,6 +454,13 @@ export class Write { * }, * heap: { * appId: "string" + * }, + * datadog: { + * applicationId: "string", + * clientToken: "string", + * site: { + * "key": "value" + * } * } * }, * integrations: { diff --git a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v2/resources/write/client/requests/RegisterDocsRequest.ts b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v2/resources/write/client/requests/RegisterDocsRequest.ts index dbdc2d136f..d1bae3c218 100644 --- a/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v2/resources/write/client/requests/RegisterDocsRequest.ts +++ b/packages/fdr-sdk/src/client/generated/api/resources/docs/resources/v2/resources/write/client/requests/RegisterDocsRequest.ts @@ -269,6 +269,13 @@ import * as FernRegistry from "../../../../../../../../index"; * }, * heap: { * appId: "string" + * }, + * datadog: { + * applicationId: "string", + * clientToken: "string", + * site: { + * "key": "value" + * } * } * }, * integrations: { diff --git a/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/AnalyticsConfig.ts b/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/AnalyticsConfig.ts index 4dc3e9971d..b186569ba0 100644 --- a/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/AnalyticsConfig.ts +++ b/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/AnalyticsConfig.ts @@ -21,4 +21,5 @@ export interface AnalyticsConfig { fathom: FernRegistry.docs.v1.commons.FathomConfig | undefined; clearbit: FernRegistry.docs.v1.commons.ClearBitConfig | undefined; heap: FernRegistry.docs.v1.commons.HeapConfig | undefined; + datadog: FernRegistry.docs.v1.commons.DatadogRumConfig | undefined; } diff --git a/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/DatadogRumConfig.ts b/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/DatadogRumConfig.ts new file mode 100644 index 0000000000..104ac3d227 --- /dev/null +++ b/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/DatadogRumConfig.ts @@ -0,0 +1,9 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +export interface DatadogRumConfig { + applicationId: string; + clientToken: string; + site: string | undefined; +} diff --git a/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/index.ts b/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/index.ts index 2d510b2e0e..23ca48691a 100644 --- a/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/index.ts +++ b/packages/parsers/src/client/generated/api/resources/docs/resources/v1/resources/commons/resources/commons/types/index.ts @@ -19,6 +19,7 @@ export * from "./PlausibleConfig"; export * from "./FathomConfig"; export * from "./ClearBitConfig"; export * from "./HeapConfig"; +export * from "./DatadogRumConfig"; export * from "./DocsLayoutConfig"; export * from "./SearchbarPlacement"; export * from "./TabsPlacement"; diff --git a/packages/ui/analytics/package.json b/packages/ui/analytics/package.json new file mode 100644 index 0000000000..7e90d97527 --- /dev/null +++ b/packages/ui/analytics/package.json @@ -0,0 +1,56 @@ +{ + "name": "@fern-docs/analytics", + "version": "0.0.0", + "private": true, + "type": "module", + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./dist/index.js" + }, + "./provider": { + "types": "./src/provider.tsx", + "default": "./dist/provider.js" + } + }, + "scripts": { + "compile": "tsc --build", + "clean": "rm -rf ./dist && tsc --build --clean", + "format": "prettier --write --ignore-unknown --ignore-path ../../shared/.prettierignore \"**\"", + "format:check": "prettier --check --ignore-unknown --ignore-path ../../shared/.prettierignore \"**\"", + "lint": "eslint --max-warnings 0 src --ext .ts --resolve-plugins-relative-to ../../", + "dev": "tsc --watch tsconfig.json" + }, + "peerDependencies": { + "next": "^14", + "react": "^18", + "react-dom": "^18" + }, + "devDependencies": { + "@fern-api/fdr-sdk": "workspace:*", + "@fern-platform/configs": "workspace:*", + "@types/mixpanel-browser": "^2.50.2", + "@types/node": "^18.7.18", + "@types/react": "^18", + "@types/react-dom": "^18.3.0", + "depcheck": "^1.4.3", + "eslint": "^8.56.0", + "next": "^14", + "organize-imports-cli": "^0.10.0", + "prettier": "^3.3.2", + "react": "^18", + "react-dom": "^18", + "typescript": "5.4.3" + }, + "dependencies": { + "@amplitude/analytics-browser": "^2.11.10", + "@datadog/browser-rum": "^5.34.0", + "@hotjar/browser": "^1.0.9", + "@segment/snippet": "^5.2.1", + "fathom-client": "^3.7.2", + "logrocket": "^9.0.0", + "mixpanel-browser": "^2.57.1", + "posthog-js": "^1.154.5", + "zod": "^3.24.1" + } +} diff --git a/packages/ui/analytics/src/amplitude.tsx b/packages/ui/analytics/src/amplitude.tsx new file mode 100644 index 0000000000..ec86287aea --- /dev/null +++ b/packages/ui/analytics/src/amplitude.tsx @@ -0,0 +1,22 @@ +import { init, track } from "@amplitude/analytics-browser"; +import { ReactNode, useEffect } from "react"; +import { useSafeListenTrackEvents } from "./use-track"; + +export default function AmplitudeScript({ apiKey }: { apiKey: string }): ReactNode { + useEffect(() => { + try { + init(apiKey, undefined, { + autocapture: true, + }); + } catch (e) { + // eslint-disable-next-line no-console + console.warn("Error initializing Amplitude", e); + } + }, [apiKey]); + + useSafeListenTrackEvents(({ event, properties }) => { + track(event, properties); + }); + + return false; +} diff --git a/packages/ui/analytics/src/clearbit.tsx b/packages/ui/analytics/src/clearbit.tsx new file mode 100644 index 0000000000..dcade6d1bd --- /dev/null +++ b/packages/ui/analytics/src/clearbit.tsx @@ -0,0 +1,13 @@ +import Script from "next/script"; +import { ReactNode } from "react"; + +// TODO: send events to clearbit +export default function ClearbitScript({ apiKey }: { apiKey: string }): ReactNode { + return ( +