diff --git a/.changeset/calibermind-integration.md b/.changeset/calibermind-integration.md new file mode 100644 index 000000000..446f484d7 --- /dev/null +++ b/.changeset/calibermind-integration.md @@ -0,0 +1,5 @@ +--- +'@gitbook/integration-calibermind': major +--- + +Add CaliberMind integration diff --git a/.changeset/olive-dodos-tap.md b/.changeset/olive-dodos-tap.md new file mode 100644 index 000000000..d7946c147 --- /dev/null +++ b/.changeset/olive-dodos-tap.md @@ -0,0 +1,5 @@ +--- +'@gitbook/integration-calibermind': major +--- + +Initial release of calibermind diff --git a/bun.lock b/bun.lock index ff0b4f292..6ce0d748c 100644 --- a/bun.lock +++ b/bun.lock @@ -1,6 +1,5 @@ { "lockfileVersion": 1, - "configVersion": 0, "workspaces": { "": { "name": "@gitbook/integrations", @@ -64,6 +63,18 @@ "@gitbook/tsconfig": "workspace:*", }, }, + "integrations/calibermind": { + "name": "@gitbook/integration-calibermind", + "version": "0.0.0", + "dependencies": { + "@gitbook/api": "*", + "@gitbook/runtime": "*", + }, + "devDependencies": { + "@gitbook/cli": "workspace:*", + "@gitbook/tsconfig": "workspace:*", + }, + }, "integrations/cognito": { "name": "@gitbook/integration-cognito", "version": "0.4.0", @@ -185,7 +196,7 @@ }, "integrations/github": { "name": "@gitbook/integration-github", - "version": "0.8.0", + "version": "0.8.1", "dependencies": { "@gitbook/api": "*", "@gitbook/runtime": "*", @@ -235,7 +246,7 @@ }, "integrations/gitlab": { "name": "@gitbook/integration-gitlab", - "version": "0.8.0", + "version": "0.8.1", "dependencies": { "@gitbook/api": "*", "@gitbook/runtime": "*", @@ -762,7 +773,7 @@ }, "packages/api": { "name": "@gitbook/api", - "version": "0.190.0", + "version": "0.191.0", "dependencies": { "event-iterator": "^2.0.0", "eventsource-parser": "^3.0.0", @@ -777,7 +788,7 @@ }, "packages/cli": { "name": "@gitbook/cli", - "version": "0.29.2", + "version": "0.29.3", "bin": { "gitbook": "./cli.js", }, @@ -1117,6 +1128,8 @@ "@gitbook/integration-bucket": ["@gitbook/integration-bucket@workspace:integrations/bucket"], + "@gitbook/integration-calibermind": ["@gitbook/integration-calibermind@workspace:integrations/calibermind"], + "@gitbook/integration-cognito": ["@gitbook/integration-cognito@workspace:integrations/cognito"], "@gitbook/integration-crisp": ["@gitbook/integration-crisp@workspace:integrations/crisp"], diff --git a/integrations/calibermind/assets/icon.png b/integrations/calibermind/assets/icon.png new file mode 100644 index 000000000..4f3d4a484 Binary files /dev/null and b/integrations/calibermind/assets/icon.png differ diff --git a/integrations/calibermind/gitbook-manifest.yaml b/integrations/calibermind/gitbook-manifest.yaml new file mode 100644 index 000000000..a1265c16f --- /dev/null +++ b/integrations/calibermind/gitbook-manifest.yaml @@ -0,0 +1,39 @@ +name: calibermind +title: CaliberMind +icon: ./assets/icon.png +description: Track and identify GitBook page visitors with CaliberMind's AnalyticsJS tracker. +externalLinks: + - label: Documentation + url: https://docs.calibermind.com/ +visibility: public +organization: gitbook +script: ./src/index.ts +scopes: + - site:script:inject + - site:script:cookies +contentSecurityPolicy: + script-src: | + https://cdn.calibermind.com; + connect-src: | + cdn.calibermind.com; +summary: | + # Overview + CaliberMind is a B2B marketing analytics and attribution platform that helps you understand who visits your pages, identify accounts, and track engagement across the buyer journey. + + # How it works + The GitBook CaliberMind integration injects the CaliberMind AnalyticsJS tracker into your published site. Each page view fetches the tracker with your write key substituted in, enabling visitor tracking, account identification, and ABM vendor detection in your CaliberMind dashboard. + + # Configure + Install the integration on the GitBook site of your choice, then provide your CaliberMind write key. You can find your write key in CaliberMind under Settings > Website > Tracker, or by asking your Customer Success Manager. +categories: + - analytics +configurations: + site: + properties: + write_key: + type: string + title: Write Key + description: Your CaliberMind write key, found under Settings > Website > Tracker in your CaliberMind account. + required: + - write_key +target: site diff --git a/integrations/calibermind/package.json b/integrations/calibermind/package.json new file mode 100644 index 000000000..3e7ed3aed --- /dev/null +++ b/integrations/calibermind/package.json @@ -0,0 +1,19 @@ +{ + "name": "@gitbook/integration-calibermind", + "version": "1.0.0", + "private": true, + "dependencies": { + "@gitbook/api": "*", + "@gitbook/runtime": "*" + }, + "devDependencies": { + "@gitbook/cli": "workspace:*", + "@gitbook/tsconfig": "workspace:*" + }, + "scripts": { + "typecheck": "tsc --noEmit", + "check": "gitbook check", + "publish-integrations-staging": "gitbook publish .", + "publish-integrations": "gitbook publish ." + } +} diff --git a/integrations/calibermind/src/calibermindScript.raw.js b/integrations/calibermind/src/calibermindScript.raw.js new file mode 100644 index 000000000..6f389e303 --- /dev/null +++ b/integrations/calibermind/src/calibermindScript.raw.js @@ -0,0 +1,66 @@ +!(function () { + var analytics = (window.analytics = window.analytics || []); + if (!analytics.initialize) { + if (analytics.invoked) { + window.console && console.error && console.error('CaliberMind snippet included twice.'); + } else { + analytics.invoked = true; + analytics.methods = [ + 'trackSubmit', + 'trackClick', + 'trackLink', + 'trackForm', + 'pageview', + 'identify', + 'reset', + 'group', + 'track', + 'ready', + 'alias', + 'debug', + 'page', + 'once', + 'off', + 'on', + 'addSourceMiddleware', + 'addIntegrationMiddleware', + 'setAnonymousId', + 'addDestinationMiddleware', + ]; + analytics.factory = function (method) { + return function () { + var args = Array.prototype.slice.call(arguments); + args.unshift(method); + analytics.push(args); + return analytics; + }; + }; + for (var i = 0; i < analytics.methods.length; i++) { + var key = analytics.methods[i]; + analytics[key] = analytics.factory(key); + } + analytics.load = function (name, options) { + if (options) { + analytics._loadOptions = options; + } + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.async = true; + script.src = + (document.location.protocol === 'https:' ? 'https://' : 'http://') + + 'cdn.calibermind.com/' + + name + + '.js'; + var first = document.getElementsByTagName('script')[0]; + first.parentNode.insertBefore(script, first); + }; + analytics.SNIPPET_VERSION = '4.13.1'; + analytics.load('a', { + writeKey: '', + abmVendors: ['CLEARBIT', 'ROLLWORKS', 'SIXSENSE', 'BOMBORA', 'DEMANDBASE'], + }); + analytics.load('js/fingerprint'); + analytics.load('js/abm'); + } + } +})(); diff --git a/integrations/calibermind/src/index.ts b/integrations/calibermind/src/index.ts new file mode 100644 index 000000000..c6a9462cd --- /dev/null +++ b/integrations/calibermind/src/index.ts @@ -0,0 +1,39 @@ +import { + createIntegration, + FetchPublishScriptEventCallback, + RuntimeContext, + RuntimeEnvironment, +} from '@gitbook/runtime'; + +import script from './calibermindScript.raw.js'; + +type CaliberMindRuntimeContext = RuntimeContext< + RuntimeEnvironment< + {}, + { + write_key?: string; + } + > +>; + +export const handleFetchEvent: FetchPublishScriptEventCallback = async ( + _event, + { environment }: CaliberMindRuntimeContext, +) => { + const writeKey = environment.siteInstallation?.configuration?.write_key; + + if (!writeKey) { + return; + } + + return new Response((script as string).replace('', writeKey), { + headers: { + 'Content-Type': 'application/javascript', + 'Cache-Control': 'max-age=604800', + }, + }); +}; + +export default createIntegration({ + fetch_published_script: handleFetchEvent, +}); diff --git a/integrations/calibermind/tsconfig.json b/integrations/calibermind/tsconfig.json new file mode 100644 index 000000000..1a48f875b --- /dev/null +++ b/integrations/calibermind/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@gitbook/tsconfig/integration.json" +}