From 2472665d2101b4a55afbd2a807e7bd95e2e9d49c Mon Sep 17 00:00:00 2001 From: Addison Date: Fri, 24 Jul 2026 14:29:08 +0900 Subject: [PATCH 1/2] Add CaliberMind integration Injects CaliberMind's AnalyticsJS tracker into published GitBook sites for visitor tracking and account identification, configured with a write key. Co-Authored-By: Claude Sonnet 5 --- .changeset/calibermind-integration.md | 5 ++ bun.lock | 23 ++++-- integrations/calibermind/assets/icon.png | Bin 0 -> 1246 bytes .../calibermind/gitbook-manifest.yaml | 39 ++++++++++ integrations/calibermind/package.json | 19 +++++ .../calibermind/src/calibermindScript.raw.js | 68 ++++++++++++++++++ integrations/calibermind/src/index.ts | 39 ++++++++++ integrations/calibermind/tsconfig.json | 3 + 8 files changed, 191 insertions(+), 5 deletions(-) create mode 100644 .changeset/calibermind-integration.md create mode 100644 integrations/calibermind/assets/icon.png create mode 100644 integrations/calibermind/gitbook-manifest.yaml create mode 100644 integrations/calibermind/package.json create mode 100644 integrations/calibermind/src/calibermindScript.raw.js create mode 100644 integrations/calibermind/src/index.ts create mode 100644 integrations/calibermind/tsconfig.json 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/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 0000000000000000000000000000000000000000..4f3d4a484bdbfcf6e7124db32024ed363e573148 GIT binary patch literal 1246 zcmeAS@N?(olHy`uVBq!ia0y~yVEh8YEX+U=%O8h!0x7uwpAc6d%^;wJ3+c`LbRDRG zvn0qbm_fq9HKAd_fe$htp50|&U`g|IaSW-r_4e|{+z>_vmWzoctO{C+rRGaIyfhjc zEZkLokqN26*;BwF=#XXEeWl<#@`Bz8Ml85We! s_y6)MxVeA6OiemU(Euzd-s*nmX}6qy!uNqg9jKu4boFyt=akR{0A$jC+5i9m literal 0 HcmV?d00001 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..8ba2ab691 --- /dev/null +++ b/integrations/calibermind/package.json @@ -0,0 +1,19 @@ +{ + "name": "@gitbook/integration-calibermind", + "version": "0.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..1cba1d2ae --- /dev/null +++ b/integrations/calibermind/src/calibermindScript.raw.js @@ -0,0 +1,68 @@ +!(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" +} From 32c06a3c07d159aff1ba2ff9081293c458601977 Mon Sep 17 00:00:00 2001 From: Addison Date: Fri, 24 Jul 2026 14:35:24 +0900 Subject: [PATCH 2/2] Add CaliberMind integration --- .changeset/olive-dodos-tap.md | 5 +++++ integrations/calibermind/package.json | 2 +- integrations/calibermind/src/calibermindScript.raw.js | 4 +--- 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 .changeset/olive-dodos-tap.md 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/integrations/calibermind/package.json b/integrations/calibermind/package.json index 8ba2ab691..3e7ed3aed 100644 --- a/integrations/calibermind/package.json +++ b/integrations/calibermind/package.json @@ -1,6 +1,6 @@ { "name": "@gitbook/integration-calibermind", - "version": "0.0.0", + "version": "1.0.0", "private": true, "dependencies": { "@gitbook/api": "*", diff --git a/integrations/calibermind/src/calibermindScript.raw.js b/integrations/calibermind/src/calibermindScript.raw.js index 1cba1d2ae..6f389e303 100644 --- a/integrations/calibermind/src/calibermindScript.raw.js +++ b/integrations/calibermind/src/calibermindScript.raw.js @@ -2,9 +2,7 @@ var analytics = (window.analytics = window.analytics || []); if (!analytics.initialize) { if (analytics.invoked) { - window.console && - console.error && - console.error('CaliberMind snippet included twice.'); + window.console && console.error && console.error('CaliberMind snippet included twice.'); } else { analytics.invoked = true; analytics.methods = [