diff --git a/packages/analytics-plugin-intercom/package.json b/packages/analytics-plugin-intercom/package.json index b9b0735d..b0b0d8bf 100644 --- a/packages/analytics-plugin-intercom/package.json +++ b/packages/analytics-plugin-intercom/package.json @@ -27,9 +27,11 @@ "release:patch": "npm version patch && npm publish", "release:minor": "npm version minor && npm publish", "release:major": "npm version major && npm publish", - "es": "../../node_modules/.bin/babel-node ./testBabel.js" + "es": "../../node_modules/.bin/babel-node ./testBabel.js", + "types": "tsc" }, "main": "lib/analytics-plugin-intercom.cjs.js", + "types": "types/browser.d.ts", "globalName": "analyticsIntercom", "jsnext:main": "lib/analytics-plugin-intercom.es.js", "module": "lib/analytics-plugin-intercom.es.js", @@ -40,6 +42,7 @@ "files": [ "dist", "lib", + "types", "README.md" ], "homepage": "https://github.com/DavidWells/analytics#readme", diff --git a/packages/analytics-plugin-intercom/src/browser.js b/packages/analytics-plugin-intercom/src/browser.js index 0ef32df2..4c8ffc24 100644 --- a/packages/analytics-plugin-intercom/src/browser.js +++ b/packages/analytics-plugin-intercom/src/browser.js @@ -1,31 +1,33 @@ /* global analytics */ +/** + * @typedef {Object} IntercomPluginConfig + * @property {string} appId Your intercom app id + * @property {boolean=} disableAnonymousTraffic Disable loading intercom for anonymous visitors + * @property {string=} alignment Customize left or right position of messenger + * @property {string=} horizontalPadding Customize horizontal padding + * @property {string=} verticalPadding Customize vertical padding + * @property {string=} customLauncherSelector Css selector of the custom launcher see https://www.intercom.com/help/en/articles/2894-customize-the-intercom-messenger-technical for additional info + * @property {string=} userHash User hash used for identity verification + */ + +/** @type IntercomPluginConfig */ const config = { - /* Your intercom app id */ appId: null, disableAnonymousTraffic: false, - /* Customize left or right position of messenger */ alignment: undefined, - /* Customize horizontal padding */ horizontalPadding: undefined, - /* Customize vertical padding */ verticalPadding: undefined, - /* Css selector of the custom launcher */ customLauncherSelector: undefined, + userHash: undefined, } /** * intercom analytics plugin * @link https://getanalytics.io/plugins/intercom/ * @link https://developers.intercom.com/installing-intercom/docs/intercom-javascript - * @param {object} pluginConfig - Plugin settings - * @param {string} pluginConfig.appId - Your intercom app id - * @param {boolean} [pluginConfig.disableAnonymousTraffic] - Disable loading intercom for anonymous visitors - * @param {string} [pluginConfig.alignment] - Customize left or right position of messenger - * @param {number} [pluginConfig.horizontalPadding] - Customize horizontal padding - * @param {number} [pluginConfig.verticalPadding] - Customize vertical padding - * @param {string} [pluginConfig.customLauncherSelector] - Css selector of the custom launcher see https://www.intercom.com/help/en/articles/2894-customize-the-intercom-messenger-technical for additional info - * @return {object} Analytics plugin + * @param {IntercomPluginConfig} pluginConfig - Plugin settings + * @return {Object} Analytics plugin * @example * * intercomPlugin({ @@ -81,6 +83,11 @@ function intercomPlugin(pluginConfig = {}) { if (typeof intercom === "undefined") return; intercom("onUnreadCountChange", callback); }, + update(config) { + const intercom = window.Intercom; + if (typeof intercom === "undefined") return; + intercom("update", config); + }, }, bootstrap: ({ config, instance }) => { /* Load intercom script after userId exists */ @@ -104,6 +111,7 @@ function intercomPlugin(pluginConfig = {}) { horizontalPadding, verticalPadding, customLauncherSelector, + userHash, } = config; if (!appId) { throw new Error("No intercom appId"); @@ -154,6 +162,7 @@ function intercomPlugin(pluginConfig = {}) { horizontal_padding: horizontalPadding, vertical_padding: verticalPadding, custom_launcher_selector: customLauncherSelector, + user_hash: userHash, }; }, /* Trigger intercom page view */ @@ -206,7 +215,7 @@ function intercomPlugin(pluginConfig = {}) { }, /* Check if intercom loaded */ loaded: () => { - return window.Intercom; + return window.Intercom && window.Intercom.booted; }, }; } diff --git a/packages/analytics-plugin-intercom/tsconfig.json b/packages/analytics-plugin-intercom/tsconfig.json new file mode 100644 index 00000000..5bb74db1 --- /dev/null +++ b/packages/analytics-plugin-intercom/tsconfig.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + "compilerOptions": { + "emitDeclarationOnly": true, + "declaration": true, + "allowJs": true, + "declarationDir": "types/" + }, + "include": [ + "src/**/*.js" + ] +} diff --git a/packages/analytics-util-types/package.json b/packages/analytics-util-types/package.json index b4229f53..254af02e 100644 --- a/packages/analytics-util-types/package.json +++ b/packages/analytics-util-types/package.json @@ -16,12 +16,13 @@ "amdName": "utilTypes", "source": "src/index.js", "main": "dist/analytics-util-types.js", + "types": "dist/index.d.ts", "module": "dist/analytics-util-types.module.js", "unpkg": "dist/analytics-util-types.umd.js", "sideEffects": false, "scripts": { "test": "uvu tests -r esm -i setup", - "types": "tsc --noEmit false --emitDeclarationOnly true", + "types": "tsc --emitDeclarationOnly -d --allowJs --declarationDir dist/ src/index.js", "start": "npm run sync && concurrently 'npm:watch:*' 'npm:copy' 'npm:serve'", "serve": "servor dist index.html 8081 --reload --browse", "copy": "watchlist examples -- npm run sync",