diff --git a/package-lock.json b/package-lock.json index 93d8e4e75..c2ea42871 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,6 +50,7 @@ "lodash-es": "^4.17.21", "mixpanel-browser": "^2.45.0", "ngx-color": "7.0.0", + "rudder-sdk-js": "^2.3.0", "rxjs": "~6.6.7", "tslib": "^2.3.1", "uuid": "^8.3.2", @@ -26226,6 +26227,11 @@ "node": "6.* || >= 7.*" } }, + "node_modules/rudder-sdk-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/rudder-sdk-js/-/rudder-sdk-js-2.3.0.tgz", + "integrity": "sha512-xGMj4hthuI26N2JNl8NdJxXfTOnriZ3mlzv2ohwWP7XvZWBcQlaZP6R1MFUbTVVMNPi0lxcc3+VaxcdXdf4Rwg==" + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -50920,6 +50926,11 @@ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, + "rudder-sdk-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/rudder-sdk-js/-/rudder-sdk-js-2.3.0.tgz", + "integrity": "sha512-xGMj4hthuI26N2JNl8NdJxXfTOnriZ3mlzv2ohwWP7XvZWBcQlaZP6R1MFUbTVVMNPi0lxcc3+VaxcdXdf4Rwg==" + }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", diff --git a/package.json b/package.json index 1a307666e..8f14438d0 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "lodash-es": "^4.17.21", "mixpanel-browser": "^2.45.0", "ngx-color": "7.0.0", + "rudder-sdk-js": "^2.3.0", "rxjs": "~6.6.7", "tslib": "^2.3.1", "uuid": "^8.3.2", diff --git a/projects/common/package.json b/projects/common/package.json index a05eaa6a0..687566c27 100644 --- a/projects/common/package.json +++ b/projects/common/package.json @@ -22,7 +22,8 @@ "d3-interpolate": "^2.0.1", "d3-color": "^1.4.0", "@fullstory/browser": "^1.4.9", - "mixpanel-browser": "^2.41.0" + "mixpanel-browser": "^2.41.0", + "rudder-sdk-js": "^2.3.0" }, "devDependencies": { "@hypertrace/test-utils": "^0.0.0" diff --git a/projects/common/src/public-api.ts b/projects/common/src/public-api.ts index 37026a34b..8de3d2296 100644 --- a/projects/common/src/public-api.ts +++ b/projects/common/src/public-api.ts @@ -107,6 +107,7 @@ export * from './telemetry/telemetry'; export { FullStoryTelemetry } from './telemetry/providers/fullstory/full-story-provider'; export { FreshPaintTelemetry } from './telemetry/providers/freshpaint/freshpaint-provider'; export { MixPanelTelemetry } from './telemetry/providers/mixpanel/mixpanel-provider'; +export { RudderStackTelemetry } from './telemetry/providers/rudderstack/rudderstack-provider'; export { TrackDirective } from './telemetry/track/track.directive'; // Time diff --git a/projects/common/src/telemetry/providers/rudderstack/rudderstack-provider.ts b/projects/common/src/telemetry/providers/rudderstack/rudderstack-provider.ts new file mode 100644 index 000000000..554fbfdfb --- /dev/null +++ b/projects/common/src/telemetry/providers/rudderstack/rudderstack-provider.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; +import { Dictionary } from '../../../utilities/types/types'; + +import { apiObject, identify, load, page, track } from 'rudder-sdk-js'; +import { TelemetryProviderConfig, UserTelemetryProvider, UserTraits } from '../../telemetry'; + +export interface RudderStackConfig extends TelemetryProviderConfig { + writeKey: string; +} + +@Injectable({ providedIn: 'root' }) +export class RudderStackTelemetry implements UserTelemetryProvider { + public initialize(config: RudderStackConfig): void { + load(config.writeKey, config.orgId, { configUrl: config.orgId }); + } + + public identify(userTraits: UserTraits): void { + identify(undefined, userTraits as apiObject); + } + + public trackEvent(name: string, eventData: Dictionary): void { + track(name, eventData as apiObject); + } + + public trackPage(name: string, eventData: Dictionary): void { + page(name, name, eventData as apiObject); + } + + public trackError(name: string, eventData: Dictionary): void { + this.trackEvent(name, eventData); + } +}