diff --git a/.changeset/tall-suits-wink.md b/.changeset/tall-suits-wink.md new file mode 100644 index 000000000..fa330f11a --- /dev/null +++ b/.changeset/tall-suits-wink.md @@ -0,0 +1,5 @@ +--- +'@gitbook/integration-salesviewer': major +--- + +Initial release of salesviewer integration diff --git a/bun.lock b/bun.lock index 025251081..a545cc1ab 100644 --- a/bun.lock +++ b/bun.lock @@ -481,6 +481,18 @@ "@gitbook/tsconfig": "workspace:*", }, }, + "integrations/salesviewer": { + "name": "@gitbook/integration-salesviewer", + "version": "0.1.0", + "dependencies": { + "@gitbook/api": "*", + "@gitbook/runtime": "*", + }, + "devDependencies": { + "@gitbook/cli": "workspace:*", + "@gitbook/tsconfig": "workspace:*", + }, + }, "integrations/segment": { "name": "@gitbook/integration-segment", "version": "2.1.3", @@ -1027,6 +1039,8 @@ "@gitbook/integration-runllm-widget": ["@gitbook/integration-runllm-widget@workspace:integrations/runllm-widget"], + "@gitbook/integration-salesviewer": ["@gitbook/integration-salesviewer@workspace:integrations/salesviewer"], + "@gitbook/integration-segment": ["@gitbook/integration-segment@workspace:integrations/segment"], "@gitbook/integration-sentry": ["@gitbook/integration-sentry@workspace:integrations/sentry"], diff --git a/integrations/salesviewer/.eslintrc.json b/integrations/salesviewer/.eslintrc.json new file mode 100644 index 000000000..2486b4b2d --- /dev/null +++ b/integrations/salesviewer/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["@gitbook/eslint-config/integration"] +} diff --git a/integrations/salesviewer/assets/icon.png b/integrations/salesviewer/assets/icon.png new file mode 100644 index 000000000..bd1e8d61a Binary files /dev/null and b/integrations/salesviewer/assets/icon.png differ diff --git a/integrations/salesviewer/assets/salesviewer-preview.png b/integrations/salesviewer/assets/salesviewer-preview.png new file mode 100644 index 000000000..c3cc2dbbc Binary files /dev/null and b/integrations/salesviewer/assets/salesviewer-preview.png differ diff --git a/integrations/salesviewer/gitbook-manifest.yaml b/integrations/salesviewer/gitbook-manifest.yaml new file mode 100644 index 000000000..7e2e8df76 --- /dev/null +++ b/integrations/salesviewer/gitbook-manifest.yaml @@ -0,0 +1,45 @@ +name: salesviewer +title: SalesViewer +icon: ./assets/icon.png +description: Track and identify GitBook page visitors with Salesviewer analytics. +previewImages: + - ./assets/salesviewer-preview.png +externalLinks: + - label: Documentation + url: https://www.salesviewer.com/en/help/ +visibility: public +organization: ebg2KXDsLAQnw4pxgpm6 +script: ./src/index.ts +scopes: + - site:script:inject +contentSecurityPolicy: + script-src: | + https://slsnlytcs.com; + connect-src: | + slsnlytcs.com; +summary: | + # Overview + + SalesViewer® is a powerful analytics and visitor identification platform that helps you understand who visits your pages and track their behavior. + + # How it works + + The GitBook SalesViewer® integration allows you to track traffic in your published sites from your SalesViewer® dashboard. + + Each of your connected GitBook sites will fetch the SalesViewer® tracking script and inject it in your public content, enabling visitor tracking and identification. + + # Configure + Install the integration on the GitBook site of your choice. + Locate the Account ID you want to use, which is available in SalesViewer® dashboard under "Profile > Project & Tracking code": +categories: + - analytics +configurations: + site: + properties: + tracking_id: + type: string + title: Tracking ID + description: Your SalesViewer® Account ID + required: + - tracking_id +target: site diff --git a/integrations/salesviewer/package.json b/integrations/salesviewer/package.json new file mode 100644 index 000000000..275a422af --- /dev/null +++ b/integrations/salesviewer/package.json @@ -0,0 +1,19 @@ +{ + "name": "@gitbook/integration-salesviewer", + "version": "0.1.0", + "private": true, + "dependencies": { + "@gitbook/api": "*", + "@gitbook/runtime": "*" + }, + "devDependencies": { + "@gitbook/cli": "workspace:*", + "@gitbook/tsconfig": "workspace:*" + }, + "scripts": { + "lint": "eslint ./src/**/*.ts", + "typecheck": "tsc --noEmit", + "publish-integrations-staging": "gitbook publish .", + "publish-integrations": "gitbook publish ." + } +} \ No newline at end of file diff --git a/integrations/salesviewer/src/index.ts b/integrations/salesviewer/src/index.ts new file mode 100644 index 000000000..32398c87b --- /dev/null +++ b/integrations/salesviewer/src/index.ts @@ -0,0 +1,39 @@ +import { + createIntegration, + FetchPublishScriptEventCallback, + RuntimeContext, + RuntimeEnvironment, +} from '@gitbook/runtime'; + +import script from './salesviewerScript.raw.js'; + +type SalesviewerRuntimeContext = RuntimeContext< + RuntimeEnvironment< + {}, + { + tracking_id?: string; + } + > +>; + +export const handleFetchEvent: FetchPublishScriptEventCallback = async ( + event, + { environment }: SalesviewerRuntimeContext +) => { + const trackingId = environment.siteInstallation?.configuration?.tracking_id; + + if (!trackingId) { + return; + } + + return new Response(script.replace('', trackingId), { + headers: { + 'Content-Type': 'application/javascript', + 'Cache-Control': 'max-age=604800', + }, + }); +}; + +export default createIntegration({ + fetch_published_script: handleFetchEvent, +}); diff --git a/integrations/salesviewer/src/salesviewerScript.raw.js b/integrations/salesviewer/src/salesviewerScript.raw.js new file mode 100644 index 000000000..717396f29 --- /dev/null +++ b/integrations/salesviewer/src/salesviewerScript.raw.js @@ -0,0 +1,9 @@ +(function (w, d, s, l, i) { + var g = w[l] ? '&s=' + w[l] : '', + f = d.getElementsByTagName(s)[0], + j = d.createElement(s); + j.async = true; + j.src = 'https://slsnlytcs.com/stm.js?id=' + i + g; + j.referrerPolicy = 'no-referrer-when-downgrade'; + f.parentNode.insertBefore(j, f); +})(window, document, 'script', 'name', ''); diff --git a/integrations/salesviewer/tsconfig.json b/integrations/salesviewer/tsconfig.json new file mode 100644 index 000000000..1a48f875b --- /dev/null +++ b/integrations/salesviewer/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@gitbook/tsconfig/integration.json" +}