diff --git a/integrations/zendesk/.eslintrc.json b/integrations/zendesk/.eslintrc.json new file mode 100644 index 000000000..99e7792b9 --- /dev/null +++ b/integrations/zendesk/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["@gitbook/eslint-config/integration"] +} \ No newline at end of file diff --git a/integrations/zendesk/gitbook-manifest.yaml b/integrations/zendesk/gitbook-manifest.yaml new file mode 100644 index 000000000..eff006b99 --- /dev/null +++ b/integrations/zendesk/gitbook-manifest.yaml @@ -0,0 +1,25 @@ +name: zendesk +title: Zendesk +organization: gitbook +visibility: public +description: '' +summary: | + # Overview + https://support.zendesk.com/hc/en-us/articles/4593564000410-Setting-up-the-search-crawler +categories: + - analytics +script: src/index.tsx +scopes: + - site:script:inject + - site:script:cookies +secrets: {} +configurations: + site: + properties: + site_tag: + type: string + title: Zendesk Site ID + description: Site Tag from Zendesk + required: + - site_tag +target: site diff --git a/integrations/zendesk/package.json b/integrations/zendesk/package.json new file mode 100644 index 000000000..4041ce7c7 --- /dev/null +++ b/integrations/zendesk/package.json @@ -0,0 +1,17 @@ +{ + "name": "zendesk", + "private": true, + "scripts": { + "lint": "eslint --ext .js,.jsx,.ts,.tsx .", + "typecheck": "tsc --noEmit", + "publish": "gitbook publish ." + }, + "dependencies": { + "@gitbook/runtime": "*" + }, + "devDependencies": { + "@gitbook/cli": "*", + "@gitbook/eslint-config": "*", + "@gitbook/tsconfig": "*" + } +} diff --git a/integrations/zendesk/src/index.tsx b/integrations/zendesk/src/index.tsx new file mode 100644 index 000000000..cf2ea2f20 --- /dev/null +++ b/integrations/zendesk/src/index.tsx @@ -0,0 +1,39 @@ +import { + createIntegration, + FetchPublishScriptEventCallback, + RuntimeContext, + RuntimeEnvironment, +} from '@gitbook/runtime'; + +import script from './script.raw.js'; + +type ZendeskRuntimeContext = RuntimeContext< + RuntimeEnvironment< + {}, + { + site_tag?: string; + } + > +>; + +export const handleFetchEvent: FetchPublishScriptEventCallback = async ( + event, + { environment }: ZendeskRuntimeContext +) => { + const trackingId = environment.siteInstallation?.configuration?.site_tag + + if (!trackingId) { + return + } + + return new Response((script as string).replace('', trackingId), { + headers: { + 'Content-Type': 'application/javascript', + 'Cache-Control': 'max-age=604800', + }, + }); +}; + +export default createIntegration({ + fetch_published_script: handleFetchEvent, +}); diff --git a/integrations/zendesk/src/script.raw.js b/integrations/zendesk/src/script.raw.js new file mode 100644 index 000000000..2cdb5d3cb --- /dev/null +++ b/integrations/zendesk/src/script.raw.js @@ -0,0 +1,9 @@ +(function (z, e, n) { + const trackingID = ''; + + z = e.getElementsByTagName('head')[0]; + n = e.createElement('meta'); + n.name = 'zd-site-verification'; + n.content = `${trackingID}`; + z.appendChild(n); +})(window, document); diff --git a/integrations/zendesk/tsconfig.json b/integrations/zendesk/tsconfig.json new file mode 100644 index 000000000..f2558f29c --- /dev/null +++ b/integrations/zendesk/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@gitbook/tsconfig/integration.json", + "compilerOptions": { + "lib": ["ES6", "DOM"], + } +} \ No newline at end of file