@vkontakte/videoplayer 1.1.88 → 1.1.89-dev.fdf6110f.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.
@@ -1,405 +1,7 @@
1
- import type { IAudioStream, IConfig, IExternalTextTrack, IOptionalTuningConfig, IPlayer, ISources, ITextTrack, IVideoStream, PlaybackRate } from "@vkontakte/videoplayer-core";
2
- import { ChromecastState, PlaybackState, VideoFormat } from "@vkontakte/videoplayer-core";
3
- import type { AppTracer } from "@vkontakte/videoplayer-shared";
4
- import { type IError, type ILogger, InterfaceLanguage, type IRectangle, type IValueObservable, type QualityLimits, VideoQuality, type InternalsExposure } from "@vkontakte/videoplayer-shared";
5
- import type { ISDKConfig, IUIConfig } from "../config";
6
- import { SeekAction, ThinOneStat } from "@vkontakte/videoplayer-statistics";
7
- import type { InteractiveRange } from "@vkontakte/videoplayer-interactive";
8
- import type { Readable, Writable } from "svelte/store";
9
- import { AdmanWrapper } from "../components/Ads/admanWrapper";
10
- import type { Key, LanguageConfig } from "../translation/types";
11
- import { type AdditionalButtonDeprecated, type ControlBlocksRefs, type ControlsKeys, type HotKeyMapData, type IAnnotationsApi, type IControlInfo, type IDisabledControls, type IInteractiveData, type IPictureInPictureApi, type IPlayerControlsRef, type IPlayerPhase, type ITimelinePreviewThumbsData, type IVideoEpisode, type IVKVideoPlayerCallbacks, type IVKVideoPlayerUICallbacks, type PlaybackStateRealistic, type Position, type Size, type VideoPlaybackRate, type VideoPlayerView, type VideoQualityForRender, type VideoQualityUI, type VideoSubtitle, type VideoSubtitleParsed } from "../types";
12
- import { AdsPlaybackState } from "../types";
13
- import { type QualitySettingsAppliesTo } from "../utils/userSettings";
14
- import type { DebugData } from "./utils";
15
- import type { GridTypes } from "../constans";
16
- import { type PlayPrevChapterDisabledTooltipKey } from "../constans";
17
- import type { UIOneStat } from "../services/statistics";
18
- import type { AdditionalContextMenuItem, AdditionalSettingsMenuItem, ContextMenuItem, SettingsMenuItem } from "../components/Menus/subMenuTabs/types";
19
- import type { AdditionalButton, AdditionalDesktopControlPanelButton } from "../components/Controls/types";
20
- import type { SlotsApi } from "../utils/webAPI/slotsApi";
21
- import type { FocusManager } from "../utils/webAPI/focusManager";
22
- type SetQualityInfo = {
23
- appliesTo?: QualitySettingsAppliesTo;
24
- changeReason?: "default" | "limit-changed";
25
- byUser?: boolean;
26
- };
27
- export interface IAdsState {
28
- position: Writable<number>;
29
- duration: Writable<number>;
30
- playbackState: Writable<AdsPlaybackState>;
31
- canSkip: Writable<boolean>;
32
- secondsToWatchBeforeSkip: Writable<number>;
33
- postrollPassed: Writable<boolean>;
34
- }
35
- export interface IUIState {
36
- t: (key: Key, params?: Record<string, string>) => string;
37
- isMinimalView$: Writable<boolean>;
38
- controlsVisible: Writable<boolean>;
39
- /**
40
- * Точечно скрываем контролы.
41
- */
42
- hiddenControls: Partial<Record<keyof IPlayerControlsRef, Writable<boolean>>>;
43
- /**
44
- * Определяет, могут ли вообще контролы быть показаны.
45
- */
46
- isControlsAvailable: Writable<boolean>;
47
- controlBlocks: { [key in keyof Required<ControlBlocksRefs>] : Writable<IControlInfo | undefined> };
48
- touched: Writable<boolean>;
49
- controls: {
50
- prevButton: Writable<IControlInfo | undefined>;
51
- playButton: Writable<IControlInfo | undefined>;
52
- replayButton: Writable<IControlInfo | undefined>;
53
- nextButton: Writable<IControlInfo | undefined>;
54
- playPrevChapterButton: Writable<IControlInfo | undefined>;
55
- seekToInteractiveButton: Writable<IControlInfo | undefined>;
56
- interactiveGraphButton: Writable<IControlInfo | undefined>;
57
- liveButton: Writable<IControlInfo | undefined>;
58
- time: Writable<IControlInfo | undefined>;
59
- episodes: Writable<IControlInfo | undefined>;
60
- volume: Writable<IControlInfo | undefined>;
61
- subtitles: Writable<IControlInfo | undefined>;
62
- settings: Writable<IControlInfo | undefined>;
63
- context: Writable<IControlInfo | undefined>;
64
- fullscreen: Writable<IControlInfo | undefined>;
65
- chromecast: Writable<IControlInfo | undefined>;
66
- pip: Writable<IControlInfo | undefined>;
67
- "theater-mode-button": Writable<IControlInfo | undefined>;
68
- vkLogo: Writable<IControlInfo | undefined>;
69
- interactiveTimeIndicator: Writable<IControlInfo | undefined>;
70
- timeline: Writable<IControlInfo | undefined>;
71
- autoplayNextToggle: Writable<IControlInfo | undefined>;
72
- disabledControls$: IDisabledControls;
73
- additionalButtons: Writable<IControlInfo | undefined>[];
74
- };
75
- modals: {
76
- hotKeyMap: {
77
- show: Writable<boolean>;
78
- data: Writable<HotKeyMapData>;
79
- };
80
- };
81
- isFullscreen: Writable<boolean>;
82
- isFullscreenOpenedByKeyboard: Writable<boolean>;
83
- rotateAlpha: Writable<number>;
84
- isAutoplay: Writable<boolean>;
85
- debugPanelVisible: Writable<boolean>;
86
- episodes: {
87
- panelOpened$: Writable<boolean>;
88
- openedByKeyboard$: Writable<boolean>;
89
- };
90
- contextMenu: {
91
- visible$: Writable<boolean>;
92
- btnRef$: Writable<HTMLButtonElement | undefined>;
93
- openedByBtnKeyboard$: Writable<boolean>;
94
- openedByHotKey$: Writable<boolean>;
95
- lastActiveElem$: Writable<HTMLButtonElement | undefined>;
96
- showContextMenuBtn$: Writable<boolean>;
97
- position$: Writable<Position>;
98
- };
99
- playerSize: Writable<Size>;
100
- isMobile: Writable<boolean>;
101
- mobileNotReportControlHidden$: Readable<boolean>;
102
- icon3DVideoVisible: Writable<boolean>;
103
- scrubbingInProgress: Writable<boolean>;
104
- volumeChangingInProgress: Writable<boolean>;
105
- is3DVideo: Writable<boolean>;
106
- currentGridType$: Readable<GridTypes>;
107
- interactiveHideMobileControls: Writable<boolean>;
108
- additionalButtonsDeprecated$: Readable<AdditionalButtonDeprecated[]>;
109
- additionalDesktopControlPanelRightButtons$: Readable<AdditionalDesktopControlPanelButton[]>;
110
- additionalSettingsMenuItems$: Readable<SettingsMenuItem[]>;
111
- additionalContextMenuItems$: Readable<ContextMenuItem[]>;
112
- overlayContainer$: Writable<HTMLDivElement | undefined>;
113
- startedByKeyboard$: Writable<boolean>;
114
- autoplayNextEnabled$: Writable<boolean>;
115
- timerNextVideoRunning$: Writable<boolean>;
116
- settingsMenu: {
117
- visible$: Writable<boolean>;
118
- ref$: Writable<HTMLElement | undefined>;
119
- openedByBtnKeyboard$: Writable<boolean>;
120
- };
121
- settingsSubMenu: {
122
- visible$: Writable<boolean>;
123
- ref$: Writable<HTMLElement | undefined>;
124
- name$: Writable<string | undefined>;
125
- };
126
- /**
127
- * Отключаем любое действие пользователя.
128
- */
129
- userActionsDisabled: Writable<boolean>;
130
- /**
131
- * Положение заголовка названия видео.
132
- */
133
- videoTitleInfo: Writable<IControlInfo | undefined>;
134
- /**
135
- * Ускорение видео х2.
136
- */
137
- doubleForwardOn$: Writable<boolean>;
138
- /**
139
- * Определяет, что двойное ускорение видео доступно.
140
- */
141
- doubleForwardAvailable$: Readable<false>;
142
- previewTrackActive: Writable<boolean>;
143
- previewTrackDragInProgress: Writable<boolean>;
144
- previewTrackAvailable: Readable<boolean>;
145
- isPreviewTrackHorizontallyAligned: Readable<boolean>;
146
- }
147
- export interface IWebApi {
148
- pictureInPictureApi?: IPictureInPictureApi;
149
- annotationsApi?: IAnnotationsApi;
150
- slotsApi?: SlotsApi;
151
- focusManager?: FocusManager;
152
- }
153
- export interface IStore {
154
- initVideo: (config: IConfig & {
155
- subtitles?: Omit<IExternalTextTrack, "type">[];
156
- subtitlesForcedLanguage?: string;
157
- }) => void;
158
- videoId?: number;
159
- isClip: boolean;
160
- playerPhase: IPlayerPhase;
161
- interfaceLanguage$: Readable<InterfaceLanguage | string>;
162
- isCyrillicRelatedInterface$: Readable<boolean>;
163
- interactiveData?: IInteractiveData;
164
- vsid: Readable<string | undefined>;
165
- state: {
166
- positionExact$: Readable<number>;
167
- positionWithScrubbing$: Readable<number>;
168
- duration$: Readable<number>;
169
- playbackState$: Readable<PlaybackState | undefined>;
170
- playbackStateRealistic$: Readable<PlaybackStateRealistic | undefined>;
171
- isPlaying$: Readable<boolean>;
172
- isLoaderVisible: Readable<boolean>;
173
- bufferedProgress$: Readable<number>;
174
- isLive$: Readable<boolean | undefined>;
175
- canChangePlaybackSpeed$: Readable<boolean | undefined>;
176
- isActiveLive$: Readable<boolean | undefined>;
177
- isOldestAvailableLive$: Readable<boolean | undefined>;
178
- isRewindableLive$: Readable<boolean>;
179
- isEnded$: Readable<boolean>;
180
- volume$: Readable<number>;
181
- muted$: Readable<boolean>;
182
- trafficSavingEnabled$: Readable<boolean>;
183
- highQualityEnabled$: Readable<boolean>;
184
- availableVideoStreams$: Readable<IVideoStream[]>;
185
- availableAudioStreams$: Readable<IAudioStream[]>;
186
- videoStream$: Readable<IVideoStream | undefined>;
187
- audioStream$: Readable<IAudioStream | undefined>;
188
- currentQuality$: Readable<VideoQuality | undefined>;
189
- autoQualityLimitingAvailable$: Readable<boolean>;
190
- isAutoQualityEnabled$: Readable<boolean | undefined>;
191
- availableQualities$: Readable<VideoQualityForRender[]>;
192
- currentPlaybackRate$: Readable<number>;
193
- availablePlaybackRates$: Readable<VideoPlaybackRate[]>;
194
- currentSubtitle$: Readable<Omit<VideoSubtitle, "selected">>;
195
- availableTextTracks$: Readable<ITextTrack[]>;
196
- availableSubtitlesList$: Readable<VideoSubtitle[]>;
197
- currentSubtitleCaptions$: Readable<VideoSubtitleParsed["texts"]>;
198
- isAutoSubtitleCaptionVisible$: Writable<boolean>;
199
- chromecastState$: Readable<ChromecastState>;
200
- chromecastDeviceName$: Readable<string | undefined>;
201
- chromecastConnected$: Readable<boolean>;
202
- currentFormat$: Readable<VideoFormat | undefined>;
203
- throughputEstimation$: Readable<number | undefined>;
204
- videoBitrate$: Readable<number | undefined>;
205
- videoSize$: Readable<IRectangle | undefined>;
206
- errorLog$: Readable<IError[]>;
207
- crashed$: Readable<boolean>;
208
- isAudioAvailable$: Readable<boolean>;
209
- isAudioDisabled: boolean;
210
- canDownload: boolean;
211
- availableSources$: Readable<ISources | undefined>;
212
- hasMpegSources$: Readable<boolean>;
213
- isInteractive: boolean;
214
- showInteractiveGraph: boolean;
215
- showSeekToInteractive: boolean;
216
- showPlayPrevChapter: boolean;
217
- showInteractiveTimeIndicator: boolean;
218
- isInteractiveTime$: Readable<boolean>;
219
- interactiveEpisodes$: Readable<IVideoEpisode[]>;
220
- isInteractiveExpectation$: Writable<boolean>;
221
- hasInteractiveBranches?: boolean;
222
- playPrevChapterDisabledTooltip: PlayPrevChapterDisabledTooltipKey;
223
- looped$: Writable<boolean>;
224
- loadedMetadata$: Writable<boolean>;
225
- /**
226
- * Определяет, можно ли в целом увидеть/выбрать Авто режим выбора качества.
227
- */
228
- isAutoQualityAvailable$: Readable<boolean>;
229
- };
230
- ui: IUIState;
231
- ads: IAdsState;
232
- webApi: IWebApi;
233
- actions: {
234
- internal: {
235
- preload: () => void;
236
- firstStart: (showAds: boolean) => void;
237
- play: () => void;
238
- pause: () => void;
239
- togglePlay: () => void;
240
- toggleMuted: () => void;
241
- openSettingsMenu: (wasOpenedByKey?: boolean, tick?: () => Promise<void>) => void;
242
- closeSettingsMenu: (fromSubMenu?: boolean) => void;
243
- openSettingsSubMenu: (name: string, ref: HTMLElement) => void;
244
- closeSettingsSubMenu: (ref: HTMLElement, isClosing?: boolean) => void;
245
- setTrafficSavingEnabled: (trafficSavingEnabled: boolean, appliesTo?: QualitySettingsAppliesTo) => void;
246
- setHighQualityEnabled: (highQualityEnabled: boolean, appliesTo?: QualitySettingsAppliesTo) => void;
247
- setVolume: (volume: number) => void;
248
- setMuted: (muted: boolean) => void;
249
- startVolumeChanging: () => void;
250
- stopVolumeChanging: () => void;
251
- setAudioStream: (stream: IAudioStream) => void;
252
- setVideoStream: (stream: IVideoStream) => void;
253
- setQuality: (quality: VideoQualityUI, info?: SetQualityInfo) => void;
254
- setPlaybackRate: (playbackRate: PlaybackRate) => void;
255
- incrementPlaybackRate: () => VideoPlaybackRate;
256
- decrementPlaybackRate: () => VideoPlaybackRate;
257
- setSubtitle: (subtitle?: VideoSubtitle) => void;
258
- toggleSubtitle: () => void;
259
- togglePictureInPicture: () => void;
260
- startScrubbing: (progress: number) => void;
261
- progressScrubbing: (progress: number) => void;
262
- completeScrubbing: (progress: number, forcePrecise?: boolean, action?: ThinOneStat.ActionSeekType | SeekAction) => void;
263
- toggleChromecast: () => void;
264
- seekTime: (time: number, action: SeekAction, forcePrecise?: boolean) => void;
265
- seekEpisodeStartTime: (time: number) => void;
266
- getNextEpisode: () => IVideoEpisode | undefined;
267
- seekToNextEpisode: (episode?: IVideoEpisode) => void;
268
- getPrevEpisode: () => IVideoEpisode | undefined;
269
- seekToPrevEpisode: (episode?: IVideoEpisode) => void;
270
- seekToPercent: (percent: number, action: SeekAction) => void;
271
- switchToActiveLive: () => void;
272
- switchFromAdsToVideo: (callPlay?: boolean) => void;
273
- switchFromVideoToAds: () => void;
274
- skipAd: () => void;
275
- setLiveWaitingStart: (state: boolean) => void;
276
- setLiveWaitingRecover: (state: boolean) => void;
277
- setLiveWaitingRecord: (state: boolean) => void;
278
- clearDelayedBufferingCheckTimeout: () => void;
279
- getDebugTextData: () => string;
280
- getTraceTextData: () => string;
281
- getDebugPanelData: () => DebugData;
282
- getVideoElement: () => HTMLVideoElement | null;
283
- startLogging: () => void;
284
- stopLogging: () => void;
285
- videoRotate: (alphaDiff?: number) => void;
286
- startCameraManualRotation(mx: number, my: number): void;
287
- stopCameraManualRotation(immediate?: boolean): void;
288
- moveCameraFocusPX(xpx: number, ypx: number, dt: number): void;
289
- holdCamera(): void;
290
- releaseCamera(): void;
291
- getVideoEpisodes: () => IVideoEpisode[] | undefined;
292
- getPreviewThumbsData: () => ITimelinePreviewThumbsData | undefined;
293
- downloadVideo: () => void;
294
- addLanguage: (config: LanguageConfig) => void;
295
- setLanguage: (language: InterfaceLanguage | string) => void;
296
- nextMovie: (movieId: number) => void;
297
- correctSeekTimeToInteractive: (time: number) => number;
298
- replayInteractive?: () => void;
299
- stopPlayer?: () => void;
300
- setLooped: (isLooped: boolean) => void;
301
- reportProblem: () => void;
302
- setAutoplayNextEnabled: (autoplayNext: boolean, byUser?: boolean) => void;
303
- setTimerNextVideoRunning: (timerNextVideoRunning: boolean) => void;
304
- prevVideoClick: (byUserAction?: boolean) => void;
305
- nextVideoClick: (byUserAction?: boolean) => void;
306
- nextVideoAnnouncementShow: () => void;
307
- nextVideoAnnouncementClick: () => void;
308
- nextVideoAnnouncementAuto: () => void;
309
- nextVideoAnnouncementCancel: () => void;
310
- checkFullscreenSupport: () => boolean;
311
- changeDoubleForwardOn: (enabled: boolean) => void;
312
- closePreviewTrack: () => void;
313
- previewTrackOpened: () => void;
314
- previewTrackDragStarted: () => void;
315
- previewTrackDragFinished: () => void;
316
- };
317
- external: {
318
- firstStart: (showAds: boolean) => void;
319
- play: () => void;
320
- pause: () => void;
321
- stop: () => void;
322
- seekTime: (time: number) => void;
323
- seekEpisodeStartTime: (time: number) => void;
324
- setPlaybackRate: (playbackRate: PlaybackRate) => void;
325
- setAutoQualityLimits: (limits: QualityLimits) => void;
326
- setMuted: (muted: boolean) => void;
327
- toggleSubtitle: () => void;
328
- changeSubtitle: (enabled: boolean, id?: string) => void;
329
- setVolume: (volume: number) => void;
330
- returnFocusToEpisodes: () => void;
331
- updateAdditionalSettingsItem: (itemId: string, fields: Partial<Omit<AdditionalSettingsMenuItem, "id" | "type">>) => void;
332
- addAdditionalSettingsItem: (newItem: AdditionalSettingsMenuItem) => void;
333
- removeAdditionalSettingsItem: (itemId: string) => void;
334
- updateAdditionalContextItem: (itemId: string, fields: Partial<Omit<AdditionalContextMenuItem, "id">>) => void;
335
- addAdditionalContextItem: (newItem: AdditionalContextMenuItem) => void;
336
- removeAdditionalContextItem: (itemId: string) => void;
337
- updateAdditionalButton: (itemId: string, fields: Partial<Omit<AdditionalButton, "id" | "type">>) => void;
338
- addAdditionalButton: (newButton: AdditionalButton) => void;
339
- removeAdditionalButton: (itemId: string) => void;
340
- setLiveLowLatency: (isLowLatency: boolean) => void;
341
- hideControls: () => void;
342
- showControls: () => void;
343
- setQuality: (quality: VideoQualityUI) => void;
344
- setTrafficSavingEnabled: (trafficSavingEnabled: boolean) => void;
345
- setHighQualityEnabled: (highQualityEnabled: boolean) => void;
346
- changeAudioStream: (id: string) => void;
347
- setMinimalView: (enabled: boolean) => void;
348
- };
349
- };
350
- callbacks?: IVKVideoPlayerCallbacks;
351
- setUiCallbacks: (uiCallbacks: IVKVideoPlayerUICallbacks) => void;
352
- getAdmanWrapper: () => AdmanWrapper;
353
- getLogger: () => ILogger;
354
- getPlayer: () => IPlayer;
355
- destroy(): void;
356
- }
357
- interface IStoreParams {
358
- interfaceLanguage: InterfaceLanguage | string;
359
- isCyrillicRelatedInterface: boolean;
360
- videoId?: number;
361
- isClip: boolean;
362
- isLiveCatchUpMode?: boolean;
363
- isAudioDisabled?: boolean;
364
- canDownload?: boolean;
365
- statAuthToken?: string;
366
- callbacks?: IVKVideoPlayerCallbacks;
367
- webApi?: IWebApi;
368
- videoEpisodes?: IVideoEpisode[];
369
- previewThumbsData?: ITimelinePreviewThumbsData;
370
- uiConfig: IUIConfig;
371
- coreConfig: IOptionalTuningConfig;
372
- metaConfig: ISDKConfig["meta"];
373
- player?: IPlayer;
374
- isInteractive: boolean;
375
- interactiveRanges$?: IValueObservable<InteractiveRange[]>;
376
- isInteractiveTime$?: IValueObservable<boolean>;
377
- replayInteractive?: () => void;
378
- stopPlayer?: () => void;
379
- hasInteractiveBranches?: boolean;
380
- disabledControls: ControlsKeys;
381
- playPrevChapterDisabledTooltip: PlayPrevChapterDisabledTooltipKey;
382
- additionalButtons: Array<AdditionalButtonDeprecated | AdditionalDesktopControlPanelButton>;
383
- additionalSettingsMenuItems: AdditionalSettingsMenuItem[];
384
- additionalContextMenuItems: AdditionalContextMenuItem[];
385
- playPrevVideo: () => void;
386
- playNextVideo: () => void;
387
- /**
388
- * playPrevVideo или playNextVideo могут не вызваться, если обработка следующего видео находится на стороне интегарции,
389
- * поэтому используем данный колбэк.
390
- */
391
- onVideoChanged: (prev: boolean) => void;
392
- looped?: boolean;
393
- statistics?: UIOneStat;
394
- saveRate: boolean;
395
- internalsExposure: InternalsExposure | null;
396
- playerView?: VideoPlayerView;
397
- playerId: string;
398
- appTracer?: AppTracer;
399
- }
1
+ import type { IStore, IStoreParams } from "./types";
2
+ export type { IStore, IAdsState, IUIState } from "./types";
400
3
  /**
401
4
  * Store приложения.
402
5
  * Если будет слишком большим - можно разделить его на модули
403
6
  */
404
- export declare const createStore: ({ interfaceLanguage, isCyrillicRelatedInterface, videoId, isClip, isLiveCatchUpMode, statAuthToken, isAudioDisabled, canDownload, callbacks, webApi, videoEpisodes, previewThumbsData, uiConfig, coreConfig, player: playerInstance, disabledControls, isInteractive, interactiveRanges$, isInteractiveTime$, replayInteractive, stopPlayer, hasInteractiveBranches, playPrevChapterDisabledTooltip, additionalButtons, additionalSettingsMenuItems, additionalContextMenuItems, playPrevVideo, playNextVideo, onVideoChanged, looped, statistics: uiStatistics, saveRate, internalsExposure, playerView, playerId, metaConfig, appTracer }: IStoreParams) => IStore;
405
- export {};
7
+ export declare const createStore: ({ interfaceLanguage, isCyrillicRelatedInterface, isTouch, isLiveCatchUpMode, statAuthToken, isAudioDisabled, canDownload, callbacks, webApi, videoEpisodes: initialVideoEpisodes, previewThumbsData: initialPreviewThumbsData, uiConfig, coreConfig, player: playerInstance, disabledControls, isInteractive, interactiveRanges$, isInteractiveTime$, replayInteractive, stopPlayer, hasInteractiveBranches, playPrevChapterDisabledTooltip, additionalButtons, additionalSettingsMenuItems, additionalContextMenuItems, playPrevVideo, playNextVideo, onVideoChanged, looped, getStatisticsService, saveRate, internalsExposure, playerView, playerId, metaConfig, getAppTracer, getAdmanWrapper, logger }: IStoreParams) => IStore;
@@ -4,5 +4,5 @@ export declare class BaseMicroStore<StateName extends keyof IMicroStores = keyof
4
4
  readonly stateName: StateName;
5
5
  state$: IMicroStores[StateName];
6
6
  subscription: Subscription;
7
- init({ store, microStores, interactiveController, config }: InitMicroStoreParams): Subscription;
7
+ init({ store, microStores, interactiveController, interactiveData }: InitMicroStoreParams): Subscription;
8
8
  }