streamit-player 1.0.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/CHANGELOG.md +35 -0
- package/LICENSE +203 -0
- package/README.md +552 -0
- package/dist/Player-BfmqCREY.cjs +11616 -0
- package/dist/Player-YpukGRGt.js +11617 -0
- package/dist/PlayerController-Bt7Po42U.cjs +14093 -0
- package/dist/PlayerController-CW0pxrIt.js +14072 -0
- package/dist/core/index.cjs +194 -0
- package/dist/core/index.js +194 -0
- package/dist/core/src/AdScheduler.d.ts +56 -0
- package/dist/core/src/AdScheduler.d.ts.map +1 -0
- package/dist/core/src/AdsController.d.ts +48 -0
- package/dist/core/src/AdsController.d.ts.map +1 -0
- package/dist/core/src/AdsManager.d.ts +181 -0
- package/dist/core/src/AdsManager.d.ts.map +1 -0
- package/dist/core/src/DrmManager.d.ts +162 -0
- package/dist/core/src/DrmManager.d.ts.map +1 -0
- package/dist/core/src/DrmValidator.d.ts +36 -0
- package/dist/core/src/DrmValidator.d.ts.map +1 -0
- package/dist/core/src/KeyboardManager.d.ts +73 -0
- package/dist/core/src/KeyboardManager.d.ts.map +1 -0
- package/dist/core/src/PictureInPictureManager.d.ts +47 -0
- package/dist/core/src/PictureInPictureManager.d.ts.map +1 -0
- package/dist/core/src/PlayerController.d.ts +231 -0
- package/dist/core/src/PlayerController.d.ts.map +1 -0
- package/dist/core/src/PlaylistManager.d.ts +63 -0
- package/dist/core/src/PlaylistManager.d.ts.map +1 -0
- package/dist/core/src/SourceManager.d.ts +142 -0
- package/dist/core/src/SourceManager.d.ts.map +1 -0
- package/dist/core/src/SubtitleManager.d.ts +77 -0
- package/dist/core/src/SubtitleManager.d.ts.map +1 -0
- package/dist/core/src/TimelineMath.d.ts +14 -0
- package/dist/core/src/TimelineMath.d.ts.map +1 -0
- package/dist/core/src/html-overlay/HtmlOverlayRenderer.d.ts +103 -0
- package/dist/core/src/html-overlay/HtmlOverlayRenderer.d.ts.map +1 -0
- package/dist/core/src/index.d.ts +21 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/providers/ImaProvider.d.ts +135 -0
- package/dist/core/src/providers/ImaProvider.d.ts.map +1 -0
- package/dist/core/src/providers/ThumbnailProviders.d.ts +102 -0
- package/dist/core/src/providers/ThumbnailProviders.d.ts.map +1 -0
- package/dist/core/src/providers/VastProvider.d.ts +202 -0
- package/dist/core/src/providers/VastProvider.d.ts.map +1 -0
- package/dist/core/src/providers/VmapProvider.d.ts +98 -0
- package/dist/core/src/providers/VmapProvider.d.ts.map +1 -0
- package/dist/core/src/providers/fetchXmlWithPolicy.d.ts +9 -0
- package/dist/core/src/providers/fetchXmlWithPolicy.d.ts.map +1 -0
- package/dist/core/src/simid/SimidBridge.d.ts +44 -0
- package/dist/core/src/simid/SimidBridge.d.ts.map +1 -0
- package/dist/core/src/simid/SimidManager.d.ts +21 -0
- package/dist/core/src/simid/SimidManager.d.ts.map +1 -0
- package/dist/core/src/simid/SimidRuntime.d.ts +113 -0
- package/dist/core/src/simid/SimidRuntime.d.ts.map +1 -0
- package/dist/core/src/simid/SimidSession.d.ts +48 -0
- package/dist/core/src/simid/SimidSession.d.ts.map +1 -0
- package/dist/core/src/simid/types.d.ts +115 -0
- package/dist/core/src/simid/types.d.ts.map +1 -0
- package/dist/core/src/storage.d.ts +10 -0
- package/dist/core/src/storage.d.ts.map +1 -0
- package/dist/core/src/types.d.ts +1403 -0
- package/dist/core/src/types.d.ts.map +1 -0
- package/dist/core/src/utils.d.ts +34 -0
- package/dist/core/src/utils.d.ts.map +1 -0
- package/dist/core/src/vendorLoaders.d.ts +16 -0
- package/dist/core/src/vendorLoaders.d.ts.map +1 -0
- package/dist/index.cjs +55 -0
- package/dist/index.js +55 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/streamit-player.esm.js +26226 -0
- package/dist/streamit-player.esm.min.js +18830 -0
- package/dist/streamit-player.iife.js +26229 -0
- package/dist/streamit-player.iife.min.js +4750 -0
- package/dist/web-components/index.cjs +15 -0
- package/dist/web-components/index.js +15 -0
- package/dist/web-components/src/ChaptersButton.d.ts +27 -0
- package/dist/web-components/src/ChaptersButton.d.ts.map +1 -0
- package/dist/web-components/src/ChaptersButton.styles.d.ts +2 -0
- package/dist/web-components/src/ChaptersButton.styles.d.ts.map +1 -0
- package/dist/web-components/src/PlayButton.d.ts +17 -0
- package/dist/web-components/src/PlayButton.d.ts.map +1 -0
- package/dist/web-components/src/PlayButton.styles.d.ts +2 -0
- package/dist/web-components/src/PlayButton.styles.d.ts.map +1 -0
- package/dist/web-components/src/Player.d.ts +271 -0
- package/dist/web-components/src/Player.d.ts.map +1 -0
- package/dist/web-components/src/Player.styles.d.ts +2 -0
- package/dist/web-components/src/Player.styles.d.ts.map +1 -0
- package/dist/web-components/src/SeekButton.d.ts +18 -0
- package/dist/web-components/src/SeekButton.d.ts.map +1 -0
- package/dist/web-components/src/SeekButton.styles.d.ts +2 -0
- package/dist/web-components/src/SeekButton.styles.d.ts.map +1 -0
- package/dist/web-components/src/Seekbar.d.ts +101 -0
- package/dist/web-components/src/Seekbar.d.ts.map +1 -0
- package/dist/web-components/src/Seekbar.styles.d.ts +2 -0
- package/dist/web-components/src/Seekbar.styles.d.ts.map +1 -0
- package/dist/web-components/src/Themes.d.ts +5 -0
- package/dist/web-components/src/Themes.d.ts.map +1 -0
- package/dist/web-components/src/VerticalControls.d.ts +49 -0
- package/dist/web-components/src/VerticalControls.d.ts.map +1 -0
- package/dist/web-components/src/VerticalControls.styles.d.ts +2 -0
- package/dist/web-components/src/VerticalControls.styles.d.ts.map +1 -0
- package/dist/web-components/src/VolumeControl.d.ts +21 -0
- package/dist/web-components/src/VolumeControl.d.ts.map +1 -0
- package/dist/web-components/src/VolumeControl.styles.d.ts +2 -0
- package/dist/web-components/src/VolumeControl.styles.d.ts.map +1 -0
- package/dist/web-components/src/icons/IconRegistry.d.ts +24 -0
- package/dist/web-components/src/icons/IconRegistry.d.ts.map +1 -0
- package/dist/web-components/src/index.d.ts +10 -0
- package/dist/web-components/src/index.d.ts.map +1 -0
- package/dist/web-components/src/player-internals/GestureController.d.ts +140 -0
- package/dist/web-components/src/player-internals/GestureController.d.ts.map +1 -0
- package/dist/web-components/src/player-internals/PrefetchController.d.ts +34 -0
- package/dist/web-components/src/player-internals/PrefetchController.d.ts.map +1 -0
- package/dist/web-components/src/player-internals/SettingsMenuController.d.ts +59 -0
- package/dist/web-components/src/player-internals/SettingsMenuController.d.ts.map +1 -0
- package/dist/web-components/src/player-internals/ThumbnailCache.d.ts +64 -0
- package/dist/web-components/src/player-internals/ThumbnailCache.d.ts.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { AdProvider, ProviderContext, ProviderResult, CapabilityInfo, Advertisement, AdBreak, AdErrorType, AdMedia, AdSkipMode, AdVerification, PlayerSource } from '../types';
|
|
2
|
+
|
|
3
|
+
export interface VastDiagnostics {
|
|
4
|
+
fetchDurationMs: number;
|
|
5
|
+
parseDurationMs: number;
|
|
6
|
+
validationDurationMs: number;
|
|
7
|
+
wrapperCount: number;
|
|
8
|
+
selectedMedia: AdMedia | null;
|
|
9
|
+
rejectedMedia: AdMedia[];
|
|
10
|
+
validationWarnings: string[];
|
|
11
|
+
parserVersion: string;
|
|
12
|
+
creativeCount: number;
|
|
13
|
+
podCount: number;
|
|
14
|
+
mediaCandidatesCount: number;
|
|
15
|
+
rejectedCreativesCount: number;
|
|
16
|
+
namespaceUsageDetected: boolean;
|
|
17
|
+
cacheHits: number;
|
|
18
|
+
cacheMisses: number;
|
|
19
|
+
tracking?: TrackingDiagnostics;
|
|
20
|
+
}
|
|
21
|
+
export interface VastAdvertisement extends Advertisement {
|
|
22
|
+
readonly mediaUrl?: string;
|
|
23
|
+
readonly impressionUrls?: string[];
|
|
24
|
+
readonly clickTrackingUrls?: string[];
|
|
25
|
+
readonly errorUrls?: string[];
|
|
26
|
+
readonly universalAdId?: {
|
|
27
|
+
idRegistry: string;
|
|
28
|
+
value: string;
|
|
29
|
+
} | null;
|
|
30
|
+
readonly extensions?: string[];
|
|
31
|
+
readonly adVerifications?: AdVerification[];
|
|
32
|
+
readonly interactiveCreativeFile?: string | null;
|
|
33
|
+
readonly mezzanine?: string | null;
|
|
34
|
+
readonly sequence?: number;
|
|
35
|
+
readonly podPosition?: number;
|
|
36
|
+
readonly podSize?: number;
|
|
37
|
+
readonly companions?: VastAdvertisement[];
|
|
38
|
+
/**
|
|
39
|
+
* NonLinear overlay ads declared inside the SAME <Ad> as this Linear
|
|
40
|
+
* creative (i.e. meant to display concurrently, as an overlay ON TOP of
|
|
41
|
+
* this video ad while it plays) - distinct from `companions`, which are
|
|
42
|
+
* out-of-stream ads for external page slots, and distinct from a NonLinear
|
|
43
|
+
* ad that is its own separate, standalone <Ad> pod entry with no Linear
|
|
44
|
+
* creative at all.
|
|
45
|
+
*/
|
|
46
|
+
readonly nonLinearAds?: VastAdvertisement[];
|
|
47
|
+
}
|
|
48
|
+
export interface CacheEntry {
|
|
49
|
+
xmlText: string;
|
|
50
|
+
timestamp: number;
|
|
51
|
+
}
|
|
52
|
+
export declare class VastCache {
|
|
53
|
+
private cache;
|
|
54
|
+
private maxAgeMs;
|
|
55
|
+
get(url: string): string | null;
|
|
56
|
+
set(url: string, xmlText: string): void;
|
|
57
|
+
clear(): void;
|
|
58
|
+
}
|
|
59
|
+
export interface ParserLimits {
|
|
60
|
+
maxXmlSize: number;
|
|
61
|
+
maxWrapperDepth: number;
|
|
62
|
+
maxCreatives: number;
|
|
63
|
+
maxMediaEntries: number;
|
|
64
|
+
maxTrackingEntries: number;
|
|
65
|
+
maxExtensions: number;
|
|
66
|
+
}
|
|
67
|
+
export interface TrackingDiagnostics {
|
|
68
|
+
requestsCount: number;
|
|
69
|
+
successesCount: number;
|
|
70
|
+
failuresCount: number;
|
|
71
|
+
retriesCount: number;
|
|
72
|
+
duplicateSuppressions: number;
|
|
73
|
+
averageLatencyMs: number;
|
|
74
|
+
lastTransportUsed: 'beacon' | 'fetch' | 'image' | null;
|
|
75
|
+
errorCodesTracked: Record<string, number>;
|
|
76
|
+
}
|
|
77
|
+
export declare class TrackingManager {
|
|
78
|
+
private executedUrls;
|
|
79
|
+
private activeControllers;
|
|
80
|
+
private retryTimers;
|
|
81
|
+
private totalLatency;
|
|
82
|
+
private latencyCount;
|
|
83
|
+
private diagnostics;
|
|
84
|
+
private replaceMacros;
|
|
85
|
+
trackUrl(url: string, errorCode?: number, retryCount?: number): void;
|
|
86
|
+
private sendBeacon;
|
|
87
|
+
private recordSuccess;
|
|
88
|
+
private handleFailure;
|
|
89
|
+
getDiagnostics(): TrackingDiagnostics;
|
|
90
|
+
clearRegistry(): void;
|
|
91
|
+
destroy(): void;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Parses a standalone VAST XML document (fetched or inline text) and extracts
|
|
95
|
+
* the first NonLinear creative it finds, for callers (e.g. HtmlOverlayRenderer)
|
|
96
|
+
* that need to render a NonLinear overlay from a raw VAST tag/XML without going
|
|
97
|
+
* through the full VastProvider ad-break pipeline. Namespace/prefix-safe, unlike
|
|
98
|
+
* a plain CSS `querySelector` walk, since it reuses the same local-name matching
|
|
99
|
+
* VastProvider itself relies on for real ad requests.
|
|
100
|
+
*/
|
|
101
|
+
export declare function parseNonLinearVastXml(xmlText: string): Partial<Advertisement> | null;
|
|
102
|
+
export declare function resolveSkipState(params: {
|
|
103
|
+
mode: AdSkipMode;
|
|
104
|
+
configSkipOffset?: number;
|
|
105
|
+
xmlSkippable?: boolean;
|
|
106
|
+
xmlSkipOffset?: number;
|
|
107
|
+
currentTime: number;
|
|
108
|
+
}): {
|
|
109
|
+
canSkip: boolean;
|
|
110
|
+
skipAvailableAt: number | null;
|
|
111
|
+
};
|
|
112
|
+
export declare function shouldFireBeacon(category: 'impression' | 'quartile' | 'other', config?: {
|
|
113
|
+
trackImpression?: boolean;
|
|
114
|
+
trackQuartiles?: boolean;
|
|
115
|
+
}): boolean;
|
|
116
|
+
export declare function mapVastErrorReason(message: string): {
|
|
117
|
+
type: AdErrorType;
|
|
118
|
+
code: number;
|
|
119
|
+
};
|
|
120
|
+
export declare class VastProvider implements AdProvider {
|
|
121
|
+
readonly name = "VAST";
|
|
122
|
+
readonly capabilities: CapabilityInfo;
|
|
123
|
+
private context;
|
|
124
|
+
private manager;
|
|
125
|
+
private cache;
|
|
126
|
+
private trackingManager;
|
|
127
|
+
private isCacheEnabled;
|
|
128
|
+
private renderingStrategy;
|
|
129
|
+
private originalSource;
|
|
130
|
+
private skipModeConfig;
|
|
131
|
+
private skipOffsetConfig?;
|
|
132
|
+
private trackingConfig?;
|
|
133
|
+
private currentAd;
|
|
134
|
+
private currentAdBreak;
|
|
135
|
+
private currentAdIndex;
|
|
136
|
+
private adVideoElement;
|
|
137
|
+
private canSkipAd;
|
|
138
|
+
private impressionFired;
|
|
139
|
+
private milestones;
|
|
140
|
+
private cleanupListeners;
|
|
141
|
+
private cleanupClick;
|
|
142
|
+
private bufferingTimeoutId;
|
|
143
|
+
private simidRuntime;
|
|
144
|
+
private limits;
|
|
145
|
+
private diagnostics;
|
|
146
|
+
init(context: ProviderContext): ProviderResult;
|
|
147
|
+
requestAds(adTagUrl: string, config?: Record<string, unknown>): Promise<ProviderResult>;
|
|
148
|
+
private fetchVastXml;
|
|
149
|
+
private validateVastStructure;
|
|
150
|
+
private normalizeAdNode;
|
|
151
|
+
private normalizeNonLinearAdNode;
|
|
152
|
+
private normalizeCompanionNode;
|
|
153
|
+
/**
|
|
154
|
+
* Fallback for an <Ad> that contains only <CompanionAds><Companion>
|
|
155
|
+
* creatives with no Linear or standalone NonLinear creative - matches
|
|
156
|
+
* neither normalizeAdNode nor normalizeNonLinearAdNode, so without this
|
|
157
|
+
* the whole <Ad> (and its companions) would be silently dropped.
|
|
158
|
+
*/
|
|
159
|
+
private normalizeCompanionOnlyAdNode;
|
|
160
|
+
/**
|
|
161
|
+
* Extracts NonLinear overlay ads declared inside the same <Ad> as a Linear
|
|
162
|
+
* creative (via a sibling <Creative><NonLinearAds><NonLinear>...) - the
|
|
163
|
+
* standard VAST pattern for an overlay banner shown concurrently over a
|
|
164
|
+
* playing video ad. Reuses the same per-NonLinear-element extraction as the
|
|
165
|
+
* standalone-NonLinear-ad-pod path (normalizeNonLinearAdNode).
|
|
166
|
+
*/
|
|
167
|
+
private extractConcurrentNonLinearAds;
|
|
168
|
+
private selectMediaFile;
|
|
169
|
+
private mapError;
|
|
170
|
+
/**
|
|
171
|
+
* Package-internal accessor used by VmapProvider to read/replace the pod
|
|
172
|
+
* this VastProvider is currently tracking when it stitches together a
|
|
173
|
+
* unified break spanning multiple VMAP-scheduled VAST tag fetches.
|
|
174
|
+
*/
|
|
175
|
+
getInternalAdBreak(): AdBreak | null;
|
|
176
|
+
/**
|
|
177
|
+
* Package-internal setter used by VmapProvider (see getInternalAdBreak) to
|
|
178
|
+
* install a unified, multi-tag-fetch break onto this VastProvider before
|
|
179
|
+
* calling playAdBreak().
|
|
180
|
+
*/
|
|
181
|
+
setInternalAdBreak(adBreak: AdBreak): void;
|
|
182
|
+
getVastDiagnostics(): VastDiagnostics;
|
|
183
|
+
playAdBreak(): Promise<void>;
|
|
184
|
+
private playCurrentAdInPod;
|
|
185
|
+
pauseAd(): void;
|
|
186
|
+
resumeAd(): void;
|
|
187
|
+
setVolume(volume: number): void;
|
|
188
|
+
setMuted(muted: boolean): void;
|
|
189
|
+
private fireTrackingEvent;
|
|
190
|
+
private fireErrorTracking;
|
|
191
|
+
private setupAdVideoListeners;
|
|
192
|
+
private checkMilestones;
|
|
193
|
+
private setupClickThrough;
|
|
194
|
+
private handleAdComplete;
|
|
195
|
+
private handlePlaybackError;
|
|
196
|
+
private cleanupPlaybackResources;
|
|
197
|
+
skipAd(): void;
|
|
198
|
+
onSourceLoaded(_source?: PlayerSource): void;
|
|
199
|
+
reset(): void;
|
|
200
|
+
destroy(): void;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=VastProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VastProvider.d.ts","sourceRoot":"","sources":["../../../../core/src/providers/VastProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { AdProvider, ProviderContext, ProviderResult, CapabilityInfo, PlayerSource } from '../types';
|
|
2
|
+
|
|
3
|
+
export interface FrequencyCapConfig {
|
|
4
|
+
minTimeBetweenBreaks?: number;
|
|
5
|
+
minContentWatched?: number;
|
|
6
|
+
maxAdsSession?: number;
|
|
7
|
+
maxAdsPerHour?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface VmapDiagnostics {
|
|
10
|
+
parsedBreaksCount: number;
|
|
11
|
+
registeredBreaksCount: number;
|
|
12
|
+
playedBreaksCount: number;
|
|
13
|
+
cancelledBreaksCount: number;
|
|
14
|
+
dynamicInsertions: number;
|
|
15
|
+
repeatSchedulingCount: number;
|
|
16
|
+
playlistResets: number;
|
|
17
|
+
liveScheduleUpdates: number;
|
|
18
|
+
frequencyCapSuppressions: number;
|
|
19
|
+
}
|
|
20
|
+
/** Shape accepted by registerBreak()/replaceBreak() for dynamically-inserted
|
|
21
|
+
* VMAP breaks - timeOffset may be a raw numeric second offset or a VMAP-style
|
|
22
|
+
* string ('start' | 'end' | '<seconds>' | '<pct>%'). */
|
|
23
|
+
export interface VmapDynamicAdBreak {
|
|
24
|
+
id: string;
|
|
25
|
+
timeOffset: string | number;
|
|
26
|
+
breakType?: string;
|
|
27
|
+
adTagUrl: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ScheduledBreak {
|
|
30
|
+
id: string;
|
|
31
|
+
timeOffset: string;
|
|
32
|
+
breakType: string;
|
|
33
|
+
repeatAfter?: string;
|
|
34
|
+
adTagUrl: string;
|
|
35
|
+
resolvedTime: number;
|
|
36
|
+
isPlayed: boolean;
|
|
37
|
+
isRepeat?: boolean;
|
|
38
|
+
trackingUrls?: {
|
|
39
|
+
event: string;
|
|
40
|
+
url: string;
|
|
41
|
+
}[];
|
|
42
|
+
}
|
|
43
|
+
export declare function parseBreakTrackingEvents(breakNode: Element): {
|
|
44
|
+
event: string;
|
|
45
|
+
url: string;
|
|
46
|
+
}[];
|
|
47
|
+
export declare class VmapProvider implements AdProvider {
|
|
48
|
+
readonly name = "VMAP";
|
|
49
|
+
readonly capabilities: CapabilityInfo;
|
|
50
|
+
private context;
|
|
51
|
+
private manager;
|
|
52
|
+
private vmapTagUrl;
|
|
53
|
+
private scheduledBreaks;
|
|
54
|
+
private hasDurationResolved;
|
|
55
|
+
private lastBreakTime;
|
|
56
|
+
private sessionAdCount;
|
|
57
|
+
private hourlyAdTimestamps;
|
|
58
|
+
private frequencyCap;
|
|
59
|
+
private limits;
|
|
60
|
+
private trackingManager;
|
|
61
|
+
private timeUpdateListener;
|
|
62
|
+
private durationChangeListener;
|
|
63
|
+
private loadedMetadataListener;
|
|
64
|
+
private endedListener;
|
|
65
|
+
private seekedListener;
|
|
66
|
+
private diagnostics;
|
|
67
|
+
init(context: ProviderContext): ProviderResult;
|
|
68
|
+
requestAds(vmapUrl: string, config?: Record<string, unknown>): Promise<ProviderResult>;
|
|
69
|
+
private fetchVmapXml;
|
|
70
|
+
private parseVmapAdBreaks;
|
|
71
|
+
private resolveCuePoints;
|
|
72
|
+
private generateRepeatSchedules;
|
|
73
|
+
private setupTimelineListeners;
|
|
74
|
+
private evaluateCueHits;
|
|
75
|
+
private checkFrequencyCappingRules;
|
|
76
|
+
private fireBreakTracking;
|
|
77
|
+
private executeAdBreaksSequence;
|
|
78
|
+
registerBreak(adBreak: VmapDynamicAdBreak): void;
|
|
79
|
+
/** True if there are unplayed VMAP-scheduled breaks - used to detect the
|
|
80
|
+
* unsupported combination with an active AdScheduler manual schedule. */
|
|
81
|
+
hasScheduledBreaks(): boolean;
|
|
82
|
+
removeBreak(id: string): void;
|
|
83
|
+
replaceBreak(id: string, adBreak: VmapDynamicAdBreak): void;
|
|
84
|
+
clearBreaks(): void;
|
|
85
|
+
onSourceLoaded(_source?: PlayerSource): void;
|
|
86
|
+
getCuePoints(): number[];
|
|
87
|
+
getVmapDiagnostics(): VmapDiagnostics;
|
|
88
|
+
private resetSchedule;
|
|
89
|
+
private cleanupListeners;
|
|
90
|
+
playAdBreak(): Promise<void>;
|
|
91
|
+
pauseAd(): void;
|
|
92
|
+
resumeAd(): void;
|
|
93
|
+
setVolume(volume: number): void;
|
|
94
|
+
setMuted(muted: boolean): void;
|
|
95
|
+
skipAd(): void;
|
|
96
|
+
destroy(): void;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=VmapProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VmapProvider.d.ts","sourceRoot":"","sources":["../../../../core/src/providers/VmapProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AdsRequestConfig } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Shared fetch-with-policy for ad document XML (VAST/VMAP): timeout,
|
|
5
|
+
* retry-with-backoff on 5xx, custom headers, credentials. Used by both
|
|
6
|
+
* VastProvider and VmapProvider so their network behavior never drifts.
|
|
7
|
+
*/
|
|
8
|
+
export declare function fetchXmlWithPolicy(url: string, signal: AbortSignal, options?: AdsRequestConfig): Promise<string>;
|
|
9
|
+
//# sourceMappingURL=fetchXmlWithPolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchXmlWithPolicy.d.ts","sourceRoot":"","sources":["../../../../core/src/providers/fetchXmlWithPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CA6DjB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { SimidMessage, SimidConfig } from './types';
|
|
2
|
+
|
|
3
|
+
export declare class SimidBridge {
|
|
4
|
+
private config;
|
|
5
|
+
private allowedOrigins;
|
|
6
|
+
private pendingRequests;
|
|
7
|
+
private messageListeners;
|
|
8
|
+
private globalListener;
|
|
9
|
+
private targetWindow;
|
|
10
|
+
private sessionId;
|
|
11
|
+
private messageCounter;
|
|
12
|
+
private creativeOrigin;
|
|
13
|
+
private readonly debugLogging;
|
|
14
|
+
constructor(config: SimidConfig);
|
|
15
|
+
/**
|
|
16
|
+
* @param creativeOrigin - the actual origin the creative iframe was loaded
|
|
17
|
+
* from (derived from its URL). Used to pick a correct, specific
|
|
18
|
+
* postMessage targetOrigin when allowedOrigins lists more than one
|
|
19
|
+
* non-'*' origin - without this, outbound messages would only ever be
|
|
20
|
+
* addressed to whichever origin happened to be first in that list.
|
|
21
|
+
*/
|
|
22
|
+
init(targetWindow: Window, sessionId: string, creativeOrigin?: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Update the sessionId used in outbound messages.
|
|
25
|
+
* Called after receiving 'createSession' from the creative to adopt the creative's sessionId.
|
|
26
|
+
*/
|
|
27
|
+
updateSessionId(sessionId: string): void;
|
|
28
|
+
postMessage(type: string, data?: unknown, correlationId?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Post a SIMID 1.0 compliant 'resolve' response.
|
|
31
|
+
* Per SIMID 1.0 §3.2 and Google SDK, resolve message args MUST be { messageId: <originalId>, value: <data> }.
|
|
32
|
+
*/
|
|
33
|
+
postResolve(originalMessageId: string | number, value?: unknown): string;
|
|
34
|
+
/**
|
|
35
|
+
* Post a SIMID 1.0 compliant 'reject' response.
|
|
36
|
+
*/
|
|
37
|
+
postReject(originalMessageId: string | number, errorData?: unknown): string;
|
|
38
|
+
sendRequest(type: string, data?: unknown, timeoutMs?: number): Promise<SimidMessage>;
|
|
39
|
+
addMessageListener(listener: (msg: SimidMessage) => void): void;
|
|
40
|
+
removeMessageListener(listener: (msg: SimidMessage) => void): void;
|
|
41
|
+
private setupGlobalListener;
|
|
42
|
+
destroy(): void;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=SimidBridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimidBridge.d.ts","sourceRoot":"","sources":["../../../../core/src/simid/SimidBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAepD,qBAAa,WAAW;IAeV,OAAO,CAAC,MAAM;IAd1B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,eAAe,CAIlB;IACL,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,cAAc,CAAgD;IACtE,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;gBAEnB,MAAM,EAAE,WAAW;IAKvC;;;;;;OAMG;IACI,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAO5E;;;OAGG;IACI,eAAe,CAAC,SAAS,EAAE,MAAM;IAIjC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM;IAsDhF;;;OAGG;IACI,WAAW,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,GAAE,OAAY,GAAG,MAAM;IASnF;;OAEG;IACI,UAAU,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,GAAE,OAAY,GAAG,MAAM;IASzE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBxF,kBAAkB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI;IAIxD,qBAAqB,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI;IAIlE,OAAO,CAAC,mBAAmB;IA+FpB,OAAO;CAgBf"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SimidConfig, SimidDiagnostics, SimidCapabilities, SimidPublicSession, SimidAdInput } from './types';
|
|
2
|
+
import { SimidSession } from './SimidSession';
|
|
3
|
+
|
|
4
|
+
export declare class SimidManager {
|
|
5
|
+
private activeSession;
|
|
6
|
+
private diagnostics;
|
|
7
|
+
private config;
|
|
8
|
+
constructor(config?: SimidConfig);
|
|
9
|
+
/** Package-internal accessor used by SimidRuntime to read developer-set
|
|
10
|
+
* options (onSimidClickThru, allowClickThru, maxDurationExtensionSec)
|
|
11
|
+
* without reaching into a private field. */
|
|
12
|
+
getConfig(): SimidConfig;
|
|
13
|
+
detectCapabilities(): SimidCapabilities;
|
|
14
|
+
hasSimidCreative(ad: SimidAdInput | null | undefined): boolean;
|
|
15
|
+
createSession(ad: SimidAdInput): SimidSession | null;
|
|
16
|
+
getActiveSession(): SimidSession | null;
|
|
17
|
+
getPublicSession(): SimidPublicSession | null;
|
|
18
|
+
getDiagnostics(): SimidDiagnostics;
|
|
19
|
+
destroy(): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=SimidManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimidManager.d.ts","sourceRoot":"","sources":["../../../../core/src/simid/SimidManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,CAAC,EAAE,WAAW;IAwBhC;;gDAE4C;IACrC,SAAS,IAAI,WAAW;IAIxB,kBAAkB,IAAI,iBAAiB;IAavC,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAQ9D,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI;IA8BpD,gBAAgB,IAAI,YAAY,GAAG,IAAI;IAIvC,gBAAgB,IAAI,kBAAkB,GAAG,IAAI;IAU7C,cAAc,IAAI,gBAAgB;IAalC,OAAO;CAMf"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { SimidConfig, SimidSessionState, SimidDiagnostics, SimidDiagnosticsData, SimidPublicSession, SimidAdInput } from './types';
|
|
2
|
+
import { SimidManager } from './SimidManager';
|
|
3
|
+
import { PlayerController } from '../PlayerController';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* SimidRuntime - Production runtime execution layer for SIMID interactive creatives.
|
|
7
|
+
*
|
|
8
|
+
* This class coordinates:
|
|
9
|
+
* - Iframe creation / teardown inside the existing ad overlay container
|
|
10
|
+
* - The full handshake flow (playerInit → creativeReady → playerReady → running)
|
|
11
|
+
* - Interactive command handling (pause, resume, resize, volume, mute, etc.)
|
|
12
|
+
* - Runtime event emission via the player controller's existing event system
|
|
13
|
+
* - Memory-safe cleanup on destroy, source switch, skip, error, and completion
|
|
14
|
+
*
|
|
15
|
+
* It does NOT own the ad lifecycle - that remains with AdsManager and the providers.
|
|
16
|
+
* It activates only when a VAST creative contains an interactiveCreativeFile.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SimidRuntime {
|
|
19
|
+
private simidManager;
|
|
20
|
+
private iframe;
|
|
21
|
+
private adContainer;
|
|
22
|
+
private controller;
|
|
23
|
+
private handshakeStartTime;
|
|
24
|
+
private messagesSent;
|
|
25
|
+
private messagesReceived;
|
|
26
|
+
private validationFailures;
|
|
27
|
+
private processedMessageIds;
|
|
28
|
+
private config?;
|
|
29
|
+
constructor(config?: SimidConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Detect whether a normalized VAST ad contains an interactive creative.
|
|
32
|
+
* Delegates to SimidManager.hasSimidCreative(). No XML re-parsing.
|
|
33
|
+
*/
|
|
34
|
+
hasSimidCreative(ad: SimidAdInput | null | undefined): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Start the SIMID runtime for a given ad.
|
|
37
|
+
* Creates the iframe, initiates the session, runs the handshake.
|
|
38
|
+
* Returns true if SIMID is successfully activated.
|
|
39
|
+
*
|
|
40
|
+
* @param ad - The normalized VAST advertisement with interactiveCreativeFile
|
|
41
|
+
* @param container - The existing ad overlay container element
|
|
42
|
+
* @param controller - The PlayerController (for event emission & state queries)
|
|
43
|
+
*/
|
|
44
|
+
startRuntime(ad: SimidAdInput, container: HTMLElement, controller: PlayerController): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Clean up all SIMID runtime resources.
|
|
47
|
+
* Safe to call multiple times and from any state.
|
|
48
|
+
*/
|
|
49
|
+
destroyRuntime(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get the underlying SimidManager (for diagnostics access).
|
|
52
|
+
*/
|
|
53
|
+
getSimidManager(): SimidManager;
|
|
54
|
+
/**
|
|
55
|
+
* Get extended runtime diagnostics.
|
|
56
|
+
*/
|
|
57
|
+
getRuntimeDiagnostics(): SimidDiagnostics & {
|
|
58
|
+
iframeLoaded: boolean;
|
|
59
|
+
handshakeDurationMs: number;
|
|
60
|
+
messagesSent: number;
|
|
61
|
+
messagesReceived: number;
|
|
62
|
+
validationFailures: number;
|
|
63
|
+
sessionState: SimidSessionState | null;
|
|
64
|
+
sessionLifetimeMs: number;
|
|
65
|
+
};
|
|
66
|
+
private createIframe;
|
|
67
|
+
private waitForIframeLoad;
|
|
68
|
+
private removeIframe;
|
|
69
|
+
private sendToCreative;
|
|
70
|
+
private handleRuntimeMessage;
|
|
71
|
+
private handleRequestClickThru;
|
|
72
|
+
private handleRequestChangeAdDuration;
|
|
73
|
+
private durationCutoffListener;
|
|
74
|
+
private scheduleAdDurationCutoff;
|
|
75
|
+
private clearDurationCutoff;
|
|
76
|
+
private handleRequestFatalError;
|
|
77
|
+
private handleRequestMute;
|
|
78
|
+
private handleRequestAdParameters;
|
|
79
|
+
private getSafeDuration;
|
|
80
|
+
private getSafeRemainingTime;
|
|
81
|
+
private handleGetMediaState;
|
|
82
|
+
private handleRequestPause;
|
|
83
|
+
private handleRequestResume;
|
|
84
|
+
private handleRequestResize;
|
|
85
|
+
private handleRequestFullscreen;
|
|
86
|
+
private handleRequestExitFullscreen;
|
|
87
|
+
private handleRequestCollapse;
|
|
88
|
+
private handleRequestExpand;
|
|
89
|
+
private handleRequestVolume;
|
|
90
|
+
private handleRequestDuration;
|
|
91
|
+
private handleRequestCurrentTime;
|
|
92
|
+
private handleRequestRemainingTime;
|
|
93
|
+
private handleRequestPlayerState;
|
|
94
|
+
private handleRequestCreativeData;
|
|
95
|
+
private handleRequestSkip;
|
|
96
|
+
private handleRequestStop;
|
|
97
|
+
private handleReportTracking;
|
|
98
|
+
getPublicDiagnostics(): SimidDiagnosticsData;
|
|
99
|
+
getPublicSession(): SimidPublicSession | null;
|
|
100
|
+
isRuntimeActive(): boolean;
|
|
101
|
+
private respond;
|
|
102
|
+
private rejectRequest;
|
|
103
|
+
/**
|
|
104
|
+
* `event`/`detail` are constrained to `PlayerEvents` (every `simid*` event
|
|
105
|
+
* is declared there with its own detail shape), but individual call sites
|
|
106
|
+
* above pass a loosely-shaped object per SIMID command handler rather than
|
|
107
|
+
* each exact declared shape - `as never` is a narrow, targeted escape for
|
|
108
|
+
* that mismatch, not a general `any`.
|
|
109
|
+
*/
|
|
110
|
+
private emitEvent;
|
|
111
|
+
private waitForState;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=SimidRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimidRuntime.d.ts","sourceRoot":"","sources":["../../../../core/src/simid/SimidRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA+B,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,YAAY,EAAoE,MAAM,SAAS,CAAC;AAElO,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAqB5D;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,mBAAmB,CAAqB;IAEhD,OAAO,CAAC,MAAM,CAAC,CAAc;gBAEjB,MAAM,CAAC,EAAE,WAAW;IAOhC;;;OAGG;IACI,gBAAgB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAIrE;;;;;;;;OAQG;IACU,YAAY,CACvB,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,OAAO,CAAC;IA6HnB;;;OAGG;IACI,cAAc;IAqBrB;;OAEG;IACI,eAAe,IAAI,YAAY;IAItC;;OAEG;IACI,qBAAqB,IAAI,gBAAgB,GAAG;QACjD,YAAY,EAAE,OAAO,CAAC;QACtB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAC;QACvC,iBAAiB,EAAE,MAAM,CAAC;KAC3B;IAsBD,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,oBAAoB;IAwJ5B,OAAO,CAAC,sBAAsB;IA6D9B,OAAO,CAAC,6BAA6B;IAsCrC,OAAO,CAAC,sBAAsB,CAEd;IAEhB,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,oBAAoB;IAkBrB,oBAAoB,IAAI,oBAAoB;IAI5C,gBAAgB,IAAI,kBAAkB,GAAG,IAAI;IAI7C,eAAe,IAAI,OAAO;IAKjC,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,aAAa;IAWrB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,YAAY;CAyCrB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { SimidSessionState, SimidCreative, SimidConfig, SimidError } from './types';
|
|
2
|
+
import { SimidBridge } from './SimidBridge';
|
|
3
|
+
|
|
4
|
+
export declare class SimidSession {
|
|
5
|
+
readonly creative: SimidCreative;
|
|
6
|
+
private config;
|
|
7
|
+
private onStateChange?;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
private state;
|
|
10
|
+
private bridge;
|
|
11
|
+
private handshakeTimer;
|
|
12
|
+
private creativeTimer;
|
|
13
|
+
private errors;
|
|
14
|
+
private initMessageId;
|
|
15
|
+
constructor(creative: SimidCreative, config: SimidConfig, onStateChange?: ((state: SimidSessionState, session: SimidSession) => void) | undefined);
|
|
16
|
+
/**
|
|
17
|
+
* When the developer hasn't explicitly set allowedOrigins, default to the
|
|
18
|
+
* interactive creative's own origin rather than an insecure wildcard - an
|
|
19
|
+
* explicit ['*'] from the developer is still honored as an opt-in choice.
|
|
20
|
+
*
|
|
21
|
+
* If the creative is same-origin with the host page, SimidRuntime's iframe
|
|
22
|
+
* sandboxing (resolveSafeSandbox) deliberately forces it into an opaque
|
|
23
|
+
* origin to close the allow-scripts+allow-same-origin escape - so the
|
|
24
|
+
* postMessage events it actually sends will report `event.origin` as the
|
|
25
|
+
* literal string "null", not its nominal URL origin. The default must
|
|
26
|
+
* match that, or every message from that (correctly sandboxed) creative
|
|
27
|
+
* gets rejected by the allowlist check in SimidBridge.
|
|
28
|
+
*/
|
|
29
|
+
private static resolveEffectiveConfig;
|
|
30
|
+
getSessionState(): SimidSessionState;
|
|
31
|
+
getBridge(): SimidBridge;
|
|
32
|
+
getErrors(): SimidError[];
|
|
33
|
+
init(targetWindow: Window, creativeOrigin?: string): void;
|
|
34
|
+
start(): void;
|
|
35
|
+
complete(): void;
|
|
36
|
+
destroy(): void;
|
|
37
|
+
transitionTo(newState: SimidSessionState): void;
|
|
38
|
+
/**
|
|
39
|
+
* Record the messageId of the 'init' we sent, so we can match the creative's 'resolve'.
|
|
40
|
+
* Called by SimidRuntime immediately after sending 'init'.
|
|
41
|
+
*/
|
|
42
|
+
setInitMessageId(messageId: string): void;
|
|
43
|
+
private handleIncomingMessage;
|
|
44
|
+
private handleError;
|
|
45
|
+
private cleanupTimers;
|
|
46
|
+
private clearHandshakeTimer;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=SimidSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimidSession.d.ts","sourceRoot":"","sources":["../../../../core/src/simid/SimidSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAgC,MAAM,SAAS,CAAC;AAClH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,qBAAa,YAAY;aAUL,QAAQ,EAAE,aAAa;IACvC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa,CAAC;IAXjB,SAAS,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,aAAa,CAAuB;gBAG1B,QAAQ,EAAE,aAAa,EAC/B,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,GAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,KAAK,IAAI,aAAA;IAOnF;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiB9B,eAAe,IAAI,iBAAiB;IAIpC,SAAS,IAAI,WAAW;IAIxB,SAAS,IAAI,UAAU,EAAE;IAIzB,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAYlD,KAAK;IAcL,QAAQ;IAMR,OAAO;IAQP,YAAY,CAAC,QAAQ,EAAE,iBAAiB;IAW/C;;;OAGG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAIzC,OAAO,CAAC,qBAAqB;IAmE7B,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,mBAAmB;CAM5B"}
|