diff --git a/common/changes/@snowplow/browser-plugin-media-tracking/migrate-html5-plugin-to-new-media-plugin_2024-09-24-12-28.json b/common/changes/@snowplow/browser-plugin-media-tracking/migrate-html5-plugin-to-new-media-plugin_2024-09-24-12-28.json new file mode 100644 index 000000000..58cd5dda4 --- /dev/null +++ b/common/changes/@snowplow/browser-plugin-media-tracking/migrate-html5-plugin-to-new-media-plugin_2024-09-24-12-28.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@snowplow/browser-plugin-media-tracking", + "comment": "Migrate HTML Media Tracking to Snowplow Media Plugin", + "type": "none" + } + ], + "packageName": "@snowplow/browser-plugin-media-tracking" +} \ No newline at end of file diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 0e0a4fd68..2e6e081e7 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -1189,6 +1189,9 @@ importers: ../../plugins/browser-plugin-media-tracking: dependencies: + '@snowplow/browser-plugin-media': + specifier: workspace:* + version: link:../browser-plugin-media '@snowplow/browser-tracker-core': specifier: workspace:* version: link:../../libraries/browser-tracker-core @@ -1198,6 +1201,9 @@ importers: tslib: specifier: ^2.3.1 version: 2.6.3 + uuid: + specifier: ^8.3.2 + version: 8.3.2 devDependencies: '@ampproject/rollup-plugin-closure-compiler': specifier: ~0.27.0 @@ -1214,6 +1220,9 @@ importers: '@types/jsdom': specifier: ~16.2.14 version: 16.2.15 + '@types/uuid': + specifier: ^8.3.2 + version: 8.3.4 '@typescript-eslint/eslint-plugin': specifier: ~5.15.0 version: 5.15.0(@typescript-eslint/parser@5.15.0(eslint@8.11.0)(typescript@4.6.4))(eslint@8.11.0)(typescript@4.6.4) diff --git a/common/config/rush/repo-state.json b/common/config/rush/repo-state.json index 554c697a3..5cbbca7f3 100644 --- a/common/config/rush/repo-state.json +++ b/common/config/rush/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "c364f96ddb4f2ccb56f10dceb499162dffc440f8", + "pnpmShrinkwrapHash": "64adeaeaaaae09f264464fa44834bfe036401311", "preferredVersionsHash": "bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f" } diff --git a/plugins/browser-plugin-media-tracking/jest.config.js b/plugins/browser-plugin-media-tracking/jest.config.js index bd3ea4e2a..90f99fb5b 100644 --- a/plugins/browser-plugin-media-tracking/jest.config.js +++ b/plugins/browser-plugin-media-tracking/jest.config.js @@ -2,4 +2,5 @@ module.exports = { preset: 'ts-jest', reporters: ['jest-standard-reporter'], testEnvironment: 'jest-environment-jsdom-global', + setupFilesAfterEnv: ['../../setupTestGlobals.ts'], }; diff --git a/plugins/browser-plugin-media-tracking/package.json b/plugins/browser-plugin-media-tracking/package.json index f710925c1..3b7201c2d 100644 --- a/plugins/browser-plugin-media-tracking/package.json +++ b/plugins/browser-plugin-media-tracking/package.json @@ -21,9 +21,11 @@ "test": "jest" }, "dependencies": { + "@snowplow/browser-plugin-media": "workspace:*", "@snowplow/browser-tracker-core": "workspace:*", "@snowplow/tracker-core": "workspace:*", - "tslib": "^2.3.1" + "tslib": "^2.3.1", + "uuid": "^8.3.2" }, "devDependencies": { "@ampproject/rollup-plugin-closure-compiler": "~0.27.0", @@ -31,6 +33,7 @@ "@rollup/plugin-node-resolve": "~13.1.3", "@types/jest": "~27.4.1", "@types/jsdom": "~16.2.14", + "@types/uuid": "^8.3.2", "@typescript-eslint/eslint-plugin": "~5.15.0", "@typescript-eslint/parser": "~5.15.0", "eslint": "~8.11.0", diff --git a/plugins/browser-plugin-media-tracking/src/api.ts b/plugins/browser-plugin-media-tracking/src/api.ts new file mode 100644 index 000000000..622df6a72 --- /dev/null +++ b/plugins/browser-plugin-media-tracking/src/api.ts @@ -0,0 +1,82 @@ +import { Logger } from '@snowplow/tracker-core'; +import { BrowserPlugin, BrowserTracker } from '@snowplow/browser-tracker-core'; +import { waitForElement } from './findElem'; +import { Config, isElementConfig, isStringConfig } from './config'; +import { setUpListeners } from './player'; +import { setConfigDefaults } from './helperFunctions'; + +// These imports are used for documentation purposes only. +// Typescript complains that they are unused. +// @ts-ignore: TS6133 +import { DynamicContext } from '@snowplow/tracker-core'; +// @ts-ignore: TS6133 +import { HTML5MediaEventTypes } from './config'; +// @ts-ignore: TS6133 +import { FilterOutRepeatedEvents } from '@snowplow/browser-plugin-media/src/types'; + +import { endMediaTracking } from '@snowplow/browser-plugin-media'; + +let LOG: Logger; +const _trackers: Record = {}; + +export function MediaTrackingPlugin(): BrowserPlugin { + return { + activateBrowserPlugin: (tracker: BrowserTracker) => { + _trackers[tracker.id] = tracker; + }, + logger: (logger) => { + LOG = logger; + }, + }; +} + +/** + * Enables media tracking on an HTML `