bitmovin-analytics 2.21.0 → 2.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bitmovinanalytics.min.js +2 -2
- package/bitmovinanalytics.min.js.map +1 -1
- package/js/adapters/Adapter.d.ts +2 -0
- package/js/adapters/Bitmovin7Adapter.d.ts +0 -2
- package/js/adapters/internal/Bitmovin7InternalAdapter.d.ts +6 -2
- package/js/adapters/internal/Bitmovin8HttpRequestTrackingAdapter.d.ts +12 -0
- package/js/adapters/internal/Bitmovin8InternalAdapter.d.ts +11 -6
- package/js/adapters/internal/Bitmovin8SegmentTrackerAdapter.d.ts +12 -1
- package/js/adapters/internal/CAFv3InternalAdapter.d.ts +6 -2
- package/js/adapters/internal/DashjsInternalAdapter.d.ts +5 -1
- package/js/adapters/internal/HTML5InternalAdapter.d.ts +7 -3
- package/js/adapters/internal/HlsInternalAdapter.d.ts +6 -2
- package/js/adapters/internal/InternalAdapter.d.ts +9 -6
- package/js/adapters/internal/InternalAdapterAPI.d.ts +5 -1
- package/js/adapters/internal/ShakaInternalAdapter.d.ts +5 -1
- package/js/adapters/internal/VideojsInternalAdapter.d.ts +6 -2
- package/js/analyticsStateMachines/AnalyticsStateMachine.d.ts +6 -3
- package/js/analyticsStateMachines/Bitmovin7AnalyticsStateMachine.d.ts +3 -1
- package/js/analyticsStateMachines/Bitmovin8AnalyticsStateMachine.d.ts +3 -1
- package/js/analyticsStateMachines/HTML5AnalyticsStateMachine.d.ts +3 -1
- package/js/analyticsStateMachines/VideoJsAnalyticsStateMachine.d.ts +3 -1
- package/js/core/Analytics.d.ts +15 -2
- package/js/core/BackendFactory.d.ts +2 -1
- package/js/core/EventDispatcher.d.ts +1 -1
- package/js/core/LicenseCheckingBackend.d.ts +4 -1
- package/js/core/Measure.d.ts +6 -6
- package/js/enums/ErrorCode.d.ts +9 -6
- package/js/enums/Event.d.ts +34 -0
- package/js/enums/VideoStartFailedReason.d.ts +9 -5
- package/js/features/Feature.d.ts +14 -0
- package/js/features/FeatureConfig.d.ts +3 -0
- package/js/features/FeatureManager.d.ts +9 -0
- package/js/features/errordetails/ErrorData.d.ts +5 -0
- package/js/features/errordetails/ErrorDetail.d.ts +18 -0
- package/js/features/errordetails/ErrorDetailBackend.d.ts +24 -0
- package/js/features/errordetails/ErrorDetailTracking.d.ts +28 -0
- package/js/features/errordetails/ErrorDetailTrackingConfig.d.ts +4 -0
- package/js/features/errordetails/OnErrorDetailEventObject.d.ts +6 -0
- package/js/features/httprequesttracking/HttpRequest.d.ts +24 -0
- package/js/features/httprequesttracking/HttpRequestTracking.d.ts +17 -0
- package/js/features/httprequesttracking/HttpRequestType.d.ts +24 -0
- package/js/features/httprequesttracking/OnDownloadFinishedEventObject.d.ts +4 -0
- package/js/types/AdAnalyticsSample.d.ts +21 -2
- package/js/types/AuthenticationCallback.d.ts +4 -0
- package/js/types/CustomDataValues.d.ts +22 -0
- package/js/types/EventData.d.ts +23 -8
- package/js/types/FeatureConfigContainer.d.ts +4 -0
- package/js/types/LicensingRequest.d.ts +2 -0
- package/js/types/NoExtraProperties.d.ts +5 -0
- package/js/types/Sample.d.ts +2 -9
- package/js/types/StateMachineCallbacks.d.ts +1 -0
- package/js/utils/CodecHelper.d.ts +1 -1
- package/js/utils/Queue.d.ts +9 -0
- package/js/utils/Utils.d.ts +2 -0
- package/package.json +1 -1
- package/js/types/ErrorEventObject.d.ts +0 -7
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { ErrorCode } from './ErrorCode';
|
|
2
|
+
export declare class VideoStartFailedReason {
|
|
3
|
+
readonly reason: string;
|
|
4
|
+
readonly errorCode: ErrorCode | null;
|
|
5
|
+
static PAGE_CLOSED: VideoStartFailedReason;
|
|
6
|
+
static PLAYER_ERROR: VideoStartFailedReason;
|
|
7
|
+
static TIMEOUT: VideoStartFailedReason;
|
|
8
|
+
static UNKNOWN: VideoStartFailedReason;
|
|
9
|
+
private constructor();
|
|
6
10
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FeatureConfig } from './FeatureConfig';
|
|
2
|
+
export declare abstract class Feature<TConfigContainer, TConfig extends FeatureConfig> {
|
|
3
|
+
private _config?;
|
|
4
|
+
private _isEnabled;
|
|
5
|
+
get config(): TConfig | undefined;
|
|
6
|
+
get isEnabled(): boolean;
|
|
7
|
+
abstract reset(): void;
|
|
8
|
+
abstract enabled(): void;
|
|
9
|
+
abstract disabled(): void;
|
|
10
|
+
abstract configured(authenticated: boolean, config?: TConfig): void;
|
|
11
|
+
disable(): void;
|
|
12
|
+
configure(authenticated: boolean, configContainer?: TConfigContainer): TConfig | undefined;
|
|
13
|
+
abstract extractConfig(configContainer: TConfigContainer): TConfig | undefined;
|
|
14
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Feature } from './Feature';
|
|
2
|
+
import { FeatureConfig } from './FeatureConfig';
|
|
3
|
+
export declare class FeatureManager<TConfigContainer> {
|
|
4
|
+
private features;
|
|
5
|
+
registerFeatures(features: Array<Feature<TConfigContainer, FeatureConfig>>): void;
|
|
6
|
+
unregisterFeatures(): void;
|
|
7
|
+
resetFeatures(): void;
|
|
8
|
+
configureFeatures(authenticated: boolean, featureConfigs?: TConfigContainer): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { HttpRequest } from '../httprequesttracking/HttpRequest';
|
|
2
|
+
import { ErrorData } from './ErrorData';
|
|
3
|
+
export interface ErrorDetail {
|
|
4
|
+
platform: string;
|
|
5
|
+
licenseKey: string;
|
|
6
|
+
domain: string;
|
|
7
|
+
impressionId: string;
|
|
8
|
+
errorId: number;
|
|
9
|
+
/**
|
|
10
|
+
* Epoch timestamp in milliseconds
|
|
11
|
+
*/
|
|
12
|
+
timestamp: number;
|
|
13
|
+
code: number | undefined;
|
|
14
|
+
message: string | undefined;
|
|
15
|
+
data: ErrorData;
|
|
16
|
+
httpRequests: HttpRequest[] | undefined;
|
|
17
|
+
analyticsVersion: string;
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CollectorConfig } from '../../types/AnalyticsConfig';
|
|
2
|
+
import { HttpRequest } from '../httprequesttracking/HttpRequest';
|
|
3
|
+
import { ErrorData } from './ErrorData';
|
|
4
|
+
import { ErrorDetail } from './ErrorDetail';
|
|
5
|
+
export declare class ErrorDetailBackend {
|
|
6
|
+
get queue(): ReadonlyArray<ErrorDetail>;
|
|
7
|
+
get enabled(): boolean;
|
|
8
|
+
set enabled(value: boolean);
|
|
9
|
+
static copyErrorDetailTruncateStringsAndUrls(errorDetail: ErrorDetail, maxStringLength: number, maxUrlLength: number): ErrorDetail;
|
|
10
|
+
static copyHttpRequestTruncateUrls(httpRequest: HttpRequest, maxLength: number): HttpRequest;
|
|
11
|
+
static copyErrorDataTruncateStrings(errorData: ErrorData, maxStringLength: number): ErrorData;
|
|
12
|
+
static copyErrorDetailTruncateHttpRequests(errorDetail: ErrorDetail, maxRequests: number): ErrorDetail;
|
|
13
|
+
private static MAX_URL_LENGTH;
|
|
14
|
+
private static MAX_STRING_LENGTH;
|
|
15
|
+
private readonly backendUrl;
|
|
16
|
+
private readonly _queue;
|
|
17
|
+
private _enabled;
|
|
18
|
+
constructor(collectorConfig: CollectorConfig | undefined);
|
|
19
|
+
limitHttpRequestsOfQueuedErrorDetails(max: number): void;
|
|
20
|
+
send(errorDetail: ErrorDetail): void;
|
|
21
|
+
flush(): void;
|
|
22
|
+
clear(): void;
|
|
23
|
+
private removeFromQueue;
|
|
24
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Subscribable } from '../../core/EventDispatcher';
|
|
2
|
+
import { CollectorConfig } from '../../types/AnalyticsConfig';
|
|
3
|
+
import { FeatureConfigContainer } from '../../types/FeatureConfigContainer';
|
|
4
|
+
import { Feature } from '../Feature';
|
|
5
|
+
import { HttpRequestTracking } from '../httprequesttracking/HttpRequestTracking';
|
|
6
|
+
import { ErrorDetailBackend } from './ErrorDetailBackend';
|
|
7
|
+
import { ErrorDetailTrackingConfig } from './ErrorDetailTrackingConfig';
|
|
8
|
+
import { OnErrorDetailEventObject } from './OnErrorDetailEventObject';
|
|
9
|
+
export interface ErrorDetailTrackingSettingsProvider {
|
|
10
|
+
readonly licenseKey: string;
|
|
11
|
+
readonly domain: string;
|
|
12
|
+
readonly impressionId: string;
|
|
13
|
+
readonly collectorConfig?: CollectorConfig;
|
|
14
|
+
}
|
|
15
|
+
export declare class ErrorDetailTracking extends Feature<FeatureConfigContainer, ErrorDetailTrackingConfig> {
|
|
16
|
+
private settingsProvider;
|
|
17
|
+
private backend;
|
|
18
|
+
private subscribables;
|
|
19
|
+
private httpRequestTracking;
|
|
20
|
+
private errorIndex;
|
|
21
|
+
constructor(settingsProvider: ErrorDetailTrackingSettingsProvider, backend: ErrorDetailBackend, subscribables: Array<Subscribable<OnErrorDetailEventObject>>, httpRequestTracking: HttpRequestTracking | undefined);
|
|
22
|
+
reset(): void;
|
|
23
|
+
enabled(): void;
|
|
24
|
+
disabled(): void;
|
|
25
|
+
configured(authenticated: boolean, config?: ErrorDetailTrackingConfig): void;
|
|
26
|
+
extractConfig(configContainer: FeatureConfigContainer): ErrorDetailTrackingConfig | undefined;
|
|
27
|
+
private onErrorHandler;
|
|
28
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { HttpRequestType } from './HttpRequestType';
|
|
2
|
+
export interface HttpRequest {
|
|
3
|
+
/**
|
|
4
|
+
* Epoch timestamp in milliseconds
|
|
5
|
+
*/
|
|
6
|
+
timestamp: number;
|
|
7
|
+
type: HttpRequestType;
|
|
8
|
+
url?: string | undefined;
|
|
9
|
+
lastRedirectLocation?: string | undefined;
|
|
10
|
+
httpStatus: number;
|
|
11
|
+
/**
|
|
12
|
+
* Total time elapsed in milliseconds since the request was opened (including TTFB).
|
|
13
|
+
*/
|
|
14
|
+
downloadTime: number;
|
|
15
|
+
/**
|
|
16
|
+
* The time-to-first-byte for this request in milliseconds.
|
|
17
|
+
*/
|
|
18
|
+
timeToFirstByte?: number | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* The size of the downloaded data, in bytes.
|
|
21
|
+
*/
|
|
22
|
+
size?: number | undefined;
|
|
23
|
+
success: boolean;
|
|
24
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Subscribable } from '../../core/EventDispatcher';
|
|
2
|
+
import { HttpRequest } from './HttpRequest';
|
|
3
|
+
import { OnDownloadFinishedEventObject } from './OnDownloadFinishedEventObject';
|
|
4
|
+
export declare class HttpRequestTracking {
|
|
5
|
+
private subscribables;
|
|
6
|
+
private static DEFAULT_MAX_REQUESTS;
|
|
7
|
+
private _maxRequests;
|
|
8
|
+
private _httpRequestQueue;
|
|
9
|
+
get maxRequests(): number;
|
|
10
|
+
get httpRequests(): ReadonlyArray<HttpRequest>;
|
|
11
|
+
constructor(subscribables: Array<Subscribable<OnDownloadFinishedEventObject>>);
|
|
12
|
+
configure(maxRequests: number): void;
|
|
13
|
+
disable(): void;
|
|
14
|
+
reset(): void;
|
|
15
|
+
private onDownloadFinishedHandler;
|
|
16
|
+
private addRequest;
|
|
17
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare enum HttpRequestType {
|
|
2
|
+
DRM_LICENSE_WIDEVINE = "DRM_LICENSE_WIDEVINE",
|
|
3
|
+
DRM_OTHER = "DRM_OTHER",
|
|
4
|
+
MEDIA_THUMBNAILS = "MEDIA_THUMBNAILS",
|
|
5
|
+
MEDIA_VIDEO = "MEDIA_VIDEO",
|
|
6
|
+
MEDIA_AUDIO = "MEDIA_AUDIO",
|
|
7
|
+
MEDIA_PROGRESSIVE = "MEDIA_PROGRESSIVE",
|
|
8
|
+
MEDIA_SUBTITLES = "MEDIA_SUBTITLES",
|
|
9
|
+
MANIFEST_DASH = "MANIFEST_DASH",
|
|
10
|
+
MANIFEST_HLS = "MANIFEST_HLS",
|
|
11
|
+
MANIFEST_HLS_MASTER = "MANIFEST_HLS_MASTER",
|
|
12
|
+
MANIFEST_HLS_VARIANT = "DRM_LICENSMANIFEST_HLS_VARIANTE_WIDEVINE",
|
|
13
|
+
MANIFEST_SMOOTH = "MANIFEST_SMOOTH",
|
|
14
|
+
MANIFEST = "MANIFEST",
|
|
15
|
+
KEY_HLS_AES = "KEY_HLS_AES",
|
|
16
|
+
UNKNOWN = "UNKNOWN",
|
|
17
|
+
TIME_SYNC = "TIME_SYNC",
|
|
18
|
+
DRM_CERTIFICATE_FAIRPLAY = "DRM_CERTIFICATE_FAIRPLAY",
|
|
19
|
+
DRM_LICENSE_CLEARKEY = "DRM_LICENSE_CLEARKEY",
|
|
20
|
+
DRM_LICENSE_PRIMETIME = "DRM_LICENSE_PRIMETIME",
|
|
21
|
+
DRM_LICENSE_FAIRPLAY = "DRM_LICENSE_FAIRPLAY",
|
|
22
|
+
DRM_LICENSE_PLAYREADY = "DRM_LICENSE_PLAYREADY",
|
|
23
|
+
MANIFEST_ADS = "MANIFEST_ADS"
|
|
24
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CustomDataValues } from './CustomDataValues';
|
|
1
2
|
import { Sample } from './Sample';
|
|
2
|
-
export declare class AdAnalyticsSample {
|
|
3
|
+
export declare class AdAnalyticsSample implements CustomDataValues {
|
|
3
4
|
adModule?: string;
|
|
4
5
|
adModuleVersion?: string;
|
|
5
6
|
videoImpressionId?: string;
|
|
@@ -13,9 +14,27 @@ export declare class AdAnalyticsSample {
|
|
|
13
14
|
customData5?: string;
|
|
14
15
|
customData6?: string;
|
|
15
16
|
customData7?: string;
|
|
17
|
+
customData8?: string;
|
|
18
|
+
customData9?: string;
|
|
19
|
+
customData10?: string;
|
|
20
|
+
customData11?: string;
|
|
21
|
+
customData12?: string;
|
|
22
|
+
customData13?: string;
|
|
23
|
+
customData14?: string;
|
|
24
|
+
customData15?: string;
|
|
25
|
+
customData16?: string;
|
|
26
|
+
customData17?: string;
|
|
27
|
+
customData18?: string;
|
|
28
|
+
customData19?: string;
|
|
29
|
+
customData20?: string;
|
|
30
|
+
customData21?: string;
|
|
31
|
+
customData22?: string;
|
|
32
|
+
customData23?: string;
|
|
33
|
+
customData24?: string;
|
|
34
|
+
customData25?: string;
|
|
16
35
|
customUserId?: string;
|
|
17
|
-
domain?: string;
|
|
18
36
|
experimentName?: string;
|
|
37
|
+
domain?: string;
|
|
19
38
|
key?: string;
|
|
20
39
|
path?: string;
|
|
21
40
|
player?: string;
|
|
@@ -6,5 +6,27 @@ export interface CustomDataValues {
|
|
|
6
6
|
customData5?: string;
|
|
7
7
|
customData6?: string;
|
|
8
8
|
customData7?: string;
|
|
9
|
+
customData8?: string;
|
|
10
|
+
customData9?: string;
|
|
11
|
+
customData10?: string;
|
|
12
|
+
customData11?: string;
|
|
13
|
+
customData12?: string;
|
|
14
|
+
customData13?: string;
|
|
15
|
+
customData14?: string;
|
|
16
|
+
customData15?: string;
|
|
17
|
+
customData16?: string;
|
|
18
|
+
customData17?: string;
|
|
19
|
+
customData18?: string;
|
|
20
|
+
customData19?: string;
|
|
21
|
+
customData20?: string;
|
|
22
|
+
customData21?: string;
|
|
23
|
+
customData22?: string;
|
|
24
|
+
customData23?: string;
|
|
25
|
+
customData24?: string;
|
|
26
|
+
customData25?: string;
|
|
9
27
|
experimentName?: string;
|
|
10
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Lists all keys of the {@see CustomDataValues} interface.
|
|
31
|
+
*/
|
|
32
|
+
export declare const customDataValuesKeys: Array<keyof CustomDataValues>;
|
package/js/types/EventData.d.ts
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
1
|
import { VideoStartFailedReason } from '../enums/VideoStartFailedReason';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
message: string;
|
|
6
|
-
data: unknown;
|
|
2
|
+
import { ErrorData } from '../features/errordetails/ErrorData';
|
|
3
|
+
import { AnalyticsConfig } from './AnalyticsConfig';
|
|
4
|
+
export interface AnalyticsEventBase {
|
|
7
5
|
currentTime?: number;
|
|
8
6
|
}
|
|
9
|
-
export interface
|
|
10
|
-
|
|
7
|
+
export interface SourceChangeEvent extends AnalyticsEventBase {
|
|
8
|
+
config: AnalyticsConfig;
|
|
9
|
+
}
|
|
10
|
+
export interface ErrorEvent extends AnalyticsEventBase {
|
|
11
|
+
code: number | undefined;
|
|
12
|
+
message: string | undefined;
|
|
13
|
+
legacyData?: any;
|
|
14
|
+
data: ErrorData;
|
|
15
|
+
}
|
|
16
|
+
export interface AudioChangeEvent extends AnalyticsEventBase {
|
|
17
|
+
bitrate?: number;
|
|
18
|
+
codec?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface VideoChangeEvent extends AnalyticsEventBase {
|
|
21
|
+
bitrate?: number;
|
|
22
|
+
height?: number;
|
|
23
|
+
width?: number;
|
|
24
|
+
codec?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface VideoStartFailedEvent extends AnalyticsEventBase {
|
|
11
27
|
reason: VideoStartFailedReason;
|
|
12
|
-
errorData?: ErrorEventObject;
|
|
13
28
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FeatureConfigContainer } from './FeatureConfigContainer';
|
|
1
2
|
export interface LicensingRequest {
|
|
2
3
|
key?: string;
|
|
3
4
|
domain: string;
|
|
@@ -11,5 +12,6 @@ export declare enum LicensingResult {
|
|
|
11
12
|
export interface LicensingResponse {
|
|
12
13
|
status: LicensingResult;
|
|
13
14
|
message: string;
|
|
15
|
+
features?: FeatureConfigContainer;
|
|
14
16
|
}
|
|
15
17
|
export declare type LicenseCallFunc = (key: string, domain: string, version: string, baseUrl: string) => Promise<LicensingResponse>;
|
package/js/types/Sample.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CustomDataValues } from './CustomDataValues';
|
|
1
2
|
import { DownloadSpeedInfo } from './DownloadSpeedInfo';
|
|
2
|
-
export interface Sample {
|
|
3
|
+
export interface Sample extends CustomDataValues {
|
|
3
4
|
platform: string;
|
|
4
5
|
sequenceNumber?: number;
|
|
5
6
|
domain?: any;
|
|
@@ -52,14 +53,6 @@ export interface Sample {
|
|
|
52
53
|
videoStartFailedReason?: string;
|
|
53
54
|
autoplay?: any;
|
|
54
55
|
pageLoadTime: number;
|
|
55
|
-
experimentName?: any;
|
|
56
|
-
customData1?: any;
|
|
57
|
-
customData2?: any;
|
|
58
|
-
customData3?: any;
|
|
59
|
-
customData4?: any;
|
|
60
|
-
customData5?: any;
|
|
61
|
-
customData6?: any;
|
|
62
|
-
customData7?: any;
|
|
63
56
|
key?: string;
|
|
64
57
|
playerKey?: any;
|
|
65
58
|
cdnProvider?: any;
|
package/js/utils/Utils.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PAGE_LOAD_TYPE } from '../enums/PageLoadType';
|
|
2
|
+
import { CustomDataValues } from '../types/CustomDataValues';
|
|
2
3
|
export declare const validString: (text: any) => boolean;
|
|
3
4
|
export declare const isNullOrEmptyString: (text: any) => boolean;
|
|
4
5
|
export declare const validBoolean: (bool: any) => boolean;
|
|
@@ -12,6 +13,7 @@ export declare const generateUUID: () => string;
|
|
|
12
13
|
export declare const getCookie: (cname: string) => string;
|
|
13
14
|
export declare const noOp: () => void;
|
|
14
15
|
export declare const getCustomDataString: (customData: any) => string | undefined;
|
|
16
|
+
export declare const transferCustomDataFields: (fromConfig: CustomDataValues, toConfig: CustomDataValues) => void;
|
|
15
17
|
export declare const getDocumentPropWithPrefix: (prop: string) => string | undefined;
|
|
16
18
|
export declare const isVideoInFullscreen: () => boolean;
|
|
17
19
|
export declare const getHiddenProp: () => string | undefined;
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"bitmovin-analytics","version":"v2.
|
|
1
|
+
{"name":"bitmovin-analytics","version":"v2.23.0","description":"Bitmovin Analytics Collector collects monitoring devents from video players for the Bitmovin Analytics Service","license":"MIT","repository":{"type":"git","url":"git+https://github.com/bitmovin/bitmovin-analytics-collector.git"},"main":"bitmovinanalytics.min.js","types":"bitmovin-analytics.d.ts","author":"Bitmovin Inc","homepage":"https://bitmovin.com/video-analytics/","maintainers":[{"name":"bitadmin","email":"admin@bitmovin.com"}]}
|