@vouchfor/embeds 0.0.0-experiment.f9b576b → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. package/dist/es/browser-11f53075.js +433 -0
  2. package/dist/es/browser-11f53075.js.map +1 -0
  3. package/dist/es/embeds.js +8 -13
  4. package/dist/es/embeds.js.map +1 -1
  5. package/dist/es/index-f9437731.js +9984 -0
  6. package/dist/es/index-f9437731.js.map +1 -0
  7. package/dist/es/src/components/PlayerEmbed/controllers/fetcher.d.ts +14 -0
  8. package/dist/es/src/components/PlayerEmbed/controllers/tracking/index.d.ts +36 -0
  9. package/dist/es/src/components/PlayerEmbed/controllers/tracking/utils.d.ts +17 -0
  10. package/dist/es/src/components/PlayerEmbed/index.d.ts +72 -0
  11. package/dist/es/src/components/PlayerEmbed/tests/data.d.ts +3 -0
  12. package/dist/es/src/index.d.ts +1 -0
  13. package/dist/es/src/utils/env.d.ts +12 -0
  14. package/dist/es/src/utils/events.d.ts +2 -0
  15. package/dist/iife/embeds.iife.js +482 -261
  16. package/dist/iife/embeds.iife.js.map +1 -1
  17. package/package.json +22 -11
  18. package/src/components/PlayerEmbed/PlayerEmbed.stories.ts +79 -0
  19. package/src/components/PlayerEmbed/controllers/event-forwarder.ts +47 -0
  20. package/src/components/PlayerEmbed/controllers/fetcher.ts +152 -0
  21. package/src/components/PlayerEmbed/controllers/tracking/index.ts +224 -0
  22. package/src/components/PlayerEmbed/controllers/tracking/utils.ts +95 -0
  23. package/src/components/PlayerEmbed/index.ts +247 -0
  24. package/src/components/PlayerEmbed/tests/PlayerEmbed.spec.ts +80 -0
  25. package/src/components/PlayerEmbed/tests/data.ts +183 -0
  26. package/src/index.ts +1 -1
  27. package/src/utils/env.ts +64 -0
  28. package/src/utils/events.ts +13 -0
  29. package/dist/es/components/InlineEmbed.d.ts +0 -12
  30. package/dist/es/components/index.d.ts +0 -2
  31. package/dist/es/index.d.ts +0 -1
  32. package/src/components/InlineEmbed.stories.ts +0 -119
  33. package/src/components/InlineEmbed.ts +0 -18
  34. package/src/components/index.ts +0 -2
@@ -0,0 +1,247 @@
1
+ import { css, html, LitElement } from 'lit';
2
+ import { customElement, property, state } from 'lit/decorators.js';
3
+ import { ifDefined } from 'lit/directives/if-defined.js';
4
+ import { createRef, ref } from 'lit/directives/ref.js';
5
+
6
+ import type { Scene, Scenes, TemplateInstance } from '@vouchfor/canvas-video';
7
+ import type { MediaPlayer, MediaPlayerProps } from '@vouchfor/media-player';
8
+ import type { Ref } from 'lit/directives/ref.js';
9
+ import type { Environment } from '~/utils/env';
10
+
11
+ import { EventForwardController } from './controllers/event-forwarder';
12
+ import { FetcherController } from './controllers/fetcher';
13
+ import { TrackingController } from './controllers/tracking';
14
+
15
+ import '@vouchfor/media-player';
16
+
17
+ type PlayerEmbedProps = Pick<MediaPlayerProps, 'data' | 'aspectRatio' | 'preload' | 'autoplay' | 'controls'> & {
18
+ env: Environment;
19
+ apiKey: string;
20
+ disableTracking?: boolean;
21
+ trackingSource?: string;
22
+ vouchId?: string;
23
+ templateId?: string;
24
+ // Index of the questions to include starting from 1
25
+ questions?: number[];
26
+ };
27
+
28
+ @customElement('vouch-embed-player')
29
+ class PlayerEmbed extends LitElement {
30
+ static styles = [
31
+ css`
32
+ :host {
33
+ display: flex;
34
+ }
35
+ `
36
+ ];
37
+
38
+ private _mediaPlayerRef: Ref<MediaPlayer> = createRef();
39
+
40
+ @property({ type: Object }) data: PlayerEmbedProps['data'];
41
+ @property({ type: String }) vouchId: PlayerEmbedProps['vouchId'];
42
+ @property({ type: String }) templateId: PlayerEmbedProps['templateId'];
43
+ @property({ type: Array }) questions: PlayerEmbedProps['questions'];
44
+
45
+ @property({ type: String }) env: PlayerEmbedProps['env'] = 'prod';
46
+ @property({ type: String }) apiKey: PlayerEmbedProps['apiKey'] = '';
47
+ @property({ type: Boolean }) disableTracking: PlayerEmbedProps['disableTracking'] = false;
48
+ @property({ type: String }) trackingSource: PlayerEmbedProps['trackingSource'] = 'embedded_player';
49
+
50
+ @property({ type: Array }) controls: PlayerEmbedProps['controls'];
51
+ @property({ type: String }) preload: PlayerEmbedProps['preload'] = 'auto';
52
+ @property({ type: Boolean }) autoplay: PlayerEmbedProps['autoplay'] = false;
53
+ @property({ type: Number }) aspectRatio: PlayerEmbedProps['aspectRatio'] = 0;
54
+
55
+ private eventController = new EventForwardController(this, [
56
+ 'durationchange',
57
+ 'ended',
58
+ 'error',
59
+ 'loadeddata',
60
+ 'pause',
61
+ 'stalled',
62
+ 'play',
63
+ 'playing',
64
+ 'ratechange',
65
+ 'scenechange',
66
+ 'seeking',
67
+ 'seeked',
68
+ 'timeupdate',
69
+ 'volumechange',
70
+ 'waiting',
71
+
72
+ 'video:loadeddata',
73
+ 'video:seeking',
74
+ 'video:seeked',
75
+ 'video:play',
76
+ 'video:playing',
77
+ 'video:pause',
78
+ 'video:stalled',
79
+ 'video:timeupdate',
80
+ 'video:ended',
81
+ 'video:error'
82
+ ]);
83
+ private _fetcherController = new FetcherController(this);
84
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
85
+ // @ts-ignore
86
+ private _trackingController = new TrackingController(this);
87
+
88
+ @state() vouch: PlayerEmbedProps['data'];
89
+ @state() template: TemplateInstance | undefined;
90
+
91
+ get fetching() {
92
+ return this._fetcherController.fetching;
93
+ }
94
+
95
+ get waiting() {
96
+ return this._mediaPlayerRef.value?.waiting;
97
+ }
98
+
99
+ get initialised() {
100
+ return this._mediaPlayerRef.value?.initialised;
101
+ }
102
+
103
+ get seeking() {
104
+ return this._mediaPlayerRef.value?.seeking;
105
+ }
106
+
107
+ get paused() {
108
+ return this._mediaPlayerRef.value?.paused;
109
+ }
110
+
111
+ get captions() {
112
+ return this._mediaPlayerRef.value?.captions;
113
+ }
114
+
115
+ get fullscreen() {
116
+ return this._mediaPlayerRef.value?.fullscreen;
117
+ }
118
+
119
+ get duration() {
120
+ return this._mediaPlayerRef.value?.duration;
121
+ }
122
+
123
+ set currentTime(value: number) {
124
+ if (this._mediaPlayerRef.value) {
125
+ this._mediaPlayerRef.value.currentTime = value;
126
+ }
127
+ }
128
+ get currentTime() {
129
+ return this._mediaPlayerRef.value?.currentTime ?? 0;
130
+ }
131
+
132
+ set playbackRate(value: number) {
133
+ if (this._mediaPlayerRef.value) {
134
+ this._mediaPlayerRef.value.playbackRate = value;
135
+ }
136
+ }
137
+ get playbackRate() {
138
+ return this._mediaPlayerRef.value?.playbackRate ?? 1;
139
+ }
140
+
141
+ set volume(value: number) {
142
+ if (this._mediaPlayerRef.value) {
143
+ this._mediaPlayerRef.value.volume = value;
144
+ }
145
+ }
146
+ get volume() {
147
+ return this._mediaPlayerRef.value?.volume ?? 1;
148
+ }
149
+
150
+ set muted(value: boolean) {
151
+ if (this._mediaPlayerRef.value) {
152
+ this._mediaPlayerRef.value.muted = value;
153
+ }
154
+ }
155
+ get muted() {
156
+ return this._mediaPlayerRef.value?.muted ?? false;
157
+ }
158
+
159
+ get scene(): Scene | null {
160
+ return this._mediaPlayerRef.value?.scene ?? null;
161
+ }
162
+
163
+ get scenes(): Scene[] {
164
+ return this._mediaPlayerRef.value?.scenes ?? [];
165
+ }
166
+
167
+ get sceneConfig(): Scenes | null {
168
+ return this._mediaPlayerRef.value?.sceneConfig ?? null;
169
+ }
170
+
171
+ get videoState() {
172
+ return this._mediaPlayerRef.value?.videoState;
173
+ }
174
+
175
+ get mediaPlayer() {
176
+ return this._mediaPlayerRef.value;
177
+ }
178
+
179
+ play() {
180
+ this._mediaPlayerRef.value?.play();
181
+ }
182
+
183
+ pause() {
184
+ this._mediaPlayerRef.value?.pause();
185
+ }
186
+
187
+ setScene(index: number) {
188
+ this._mediaPlayerRef.value?.setScene(index);
189
+ }
190
+
191
+ private _renderStyles() {
192
+ if (!this.aspectRatio) {
193
+ return html`
194
+ <style>
195
+ :host {
196
+ width: 100%;
197
+ height: 100%;
198
+ }
199
+ </style>
200
+ `;
201
+ }
202
+
203
+ if (typeof this.aspectRatio === 'number') {
204
+ return html`
205
+ <style>
206
+ :host {
207
+ aspect-ratio: ${this.aspectRatio};
208
+ }
209
+ </style>
210
+ `;
211
+ }
212
+
213
+ return null;
214
+ }
215
+
216
+ render() {
217
+ return html`
218
+ ${this._renderStyles()}
219
+ <vmp-media-player
220
+ ${ref(this._mediaPlayerRef)}
221
+ ${this.eventController.register()}
222
+ ?autoplay=${this.autoplay}
223
+ ?loading=${this.fetching}
224
+ .data=${this.vouch}
225
+ .template=${this.template}
226
+ aspectRatio=${ifDefined(this.aspectRatio)}
227
+ preload=${ifDefined(this.preload)}
228
+ .controls=${this.controls}
229
+ ></vmp-media-player>
230
+ `;
231
+ }
232
+ }
233
+
234
+ declare global {
235
+ interface HTMLElementTagNameMap {
236
+ 'vouch-embed-player': PlayerEmbed;
237
+ }
238
+
239
+ namespace JSX {
240
+ interface IntrinsicElements {
241
+ 'vouch-embed-player': PlayerEmbed;
242
+ }
243
+ }
244
+ }
245
+
246
+ export { PlayerEmbed };
247
+ export type { PlayerEmbedProps };
@@ -0,0 +1,80 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
2
+ import { expect, fixture, waitUntil } from '@open-wc/testing';
3
+ import { html } from 'lit';
4
+ import sinon from 'sinon';
5
+
6
+ import type { PlayerEmbed } from '../index.js';
7
+ import type { VideoMap } from '@vouchfor/media-player';
8
+
9
+ import { data } from './data.js';
10
+
11
+ // Can't use typescript aliases with esbuild file transforms apparently
12
+ // No idea what a good way to actually build before testing is, the examples give nothing
13
+ // https://modern-web.dev/guides/test-runner/typescript/
14
+ import '../../../test/lib/embeds.js';
15
+
16
+ function getVideo(videos: VideoMap) {
17
+ return Object.values(videos)[0];
18
+ }
19
+
20
+ function playerLoaded(player: PlayerEmbed) {
21
+ return waitUntil(
22
+ () => {
23
+ return player.mediaPlayer?.initialised;
24
+ },
25
+ 'Player has not loaded video',
26
+ { timeout: 20000 }
27
+ );
28
+ }
29
+
30
+ describe('Embeds', () => {
31
+ it('passes', async () => {
32
+ const player = await fixture<PlayerEmbed>(
33
+ html`<vouch-embed-player env="dev" .data=${data} aspectratio=${1}></vouch-embed-player>`
34
+ );
35
+ // @ts-ignore - accessing private property
36
+ const sendTrackingSpy = sinon.spy(player._trackingController, '_sendTrackingEvent');
37
+ // @ts-ignore - accessing private property
38
+ const createTrackingSpy = sinon.spy(player._trackingController, '_createTrackingEvent');
39
+
40
+ await playerLoaded(player);
41
+ // Have to mute the player because we can't programmatically play videos with sound
42
+ player.muted = true;
43
+ player.play();
44
+ expect(player.paused).eq(false);
45
+ await waitUntil(
46
+ () => {
47
+ // Video plays for 3 seconds
48
+ return (getVideo(player.mediaPlayer!.videos)?.node?.currentTime ?? 0) > 3;
49
+ },
50
+ 'Video did not play for 3 seconds',
51
+ { timeout: 20000 }
52
+ );
53
+ expect(getVideo(player.mediaPlayer!.videos)?.node?.paused).eq(false);
54
+ player.pause();
55
+ expect(getVideo(player.mediaPlayer!.videos)?.node?.paused).eq(true);
56
+ expect(sendTrackingSpy.callCount).to.be.eq(0);
57
+ // Destroy node because events are sent when node is removed from the document
58
+ player.remove();
59
+ expect(sendTrackingSpy.callCount).to.be.eq(1);
60
+ expect(createTrackingSpy.args[0]).to.eql([
61
+ 'VIDEO_PLAYED',
62
+ {
63
+ streamStart: 0
64
+ }
65
+ ]);
66
+ expect(createTrackingSpy.args[1]).to.eql([
67
+ 'VOUCH_RESPONSE_VIEWED',
68
+ {
69
+ answerId: '5c66bb3a-ed68-41a0-a601-a49865104418'
70
+ }
71
+ ]);
72
+ expect(createTrackingSpy.args[2][0]).to.eq('VIDEO_STREAMED');
73
+ // Remove streamStart and streamEnd as these are non-deterministic
74
+ expect({ ...createTrackingSpy.args[2][1], streamStart: undefined, streamEnd: undefined }).to.eql({
75
+ answerId: '5c66bb3a-ed68-41a0-a601-a49865104418',
76
+ streamStart: undefined,
77
+ streamEnd: undefined
78
+ });
79
+ });
80
+ });
@@ -0,0 +1,183 @@
1
+ import type { Vouch } from '@vouchfor/media-player';
2
+
3
+ /* eslint-disable max-lines */
4
+ const data = {
5
+ id: '85a7f7fb-897c-41a4-be7b-2636cf991f2c',
6
+ hashId: '6JQEIPeStt',
7
+ questions: {
8
+ items: [
9
+ {
10
+ id: '5c66bb3a-ed68-41a0-a601-a49865104418',
11
+ title: `"Emoji": 🇯🇵 🙏
12
+ Arabic: خَرَجَ الوَلَدُ.
13
+ Chinese: 简化字不讲理
14
+ Hebrew: עִבְרִית
15
+ Japanese Kanji: 漢字
16
+ Japanese Hiragana: 平仮名
17
+ Japanese Katakana: 片仮名
18
+ Devangari Hindi: ॳॴॶॷऎऒऔ
19
+ Korean Hangul: 정음/正音
20
+ Cyrillic: АБВГДЕЖЗИКЛМН
21
+ Greek: αβγδ`,
22
+ answer: {
23
+ id: '5c66bb3a-ed68-41a0-a601-a49865104418',
24
+ label: null,
25
+ metadata: {
26
+ duration: 18.5
27
+ },
28
+ settings: {
29
+ endOffset: 0,
30
+ startOffset: 0
31
+ },
32
+ media: {
33
+ input:
34
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/5c66bb3a-ed68-41a0-a601-a49865104418/5c66bb3a-ed68-41a0-a601-a49865104418_input.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
35
+ video:
36
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/5c66bb3a-ed68-41a0-a601-a49865104418/5c66bb3a-ed68-41a0-a601-a49865104418.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
37
+ playlist:
38
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/5c66bb3a-ed68-41a0-a601-a49865104418/5c66bb3a-ed68-41a0-a601-a49865104418.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
39
+ thumbnail:
40
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/5c66bb3a-ed68-41a0-a601-a49865104418/5c66bb3a-ed68-41a0-a601-a49865104418_poster.0000001.jpg?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTYzMjM0Mjl9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=SGA54MFpy4jaqKJHKEuxRfjk-~NBFAh1tdW9Y6uYJwc0LFjDDgX1sraerSyohmVhj~-QVIrglY5BvglDIhrFcLJWGTkgj4vhyLprk1a7EDckv0HBgp-k1ZKvoDtt3wBOzrL4GicfXBkuMpIu5jv5MY3xemlJj2a6V~h65XJuLO4u-xS~McH6rS3mRxoNl4GcYUVm4upre1DGQx-5Suy6Ateoxl6xxoF8kg5EL02KxkIGiRpwXJTvVmUuVF0rpBj-IE40MfmhLBQ1NNSXiqb3-HjpkKwhYPvB5APVh23mzGmqJ0P3jbr2F1cU4Jvlqsjb6GVP61wGOz9ITeWPZkOy8A__'
41
+ },
42
+ client: {
43
+ id: '03540d70-1c75-4867-a235-bac842ed6ce4',
44
+ name: 'Not Supplied',
45
+ logoSrc: 'https://logo.clearbit.com/vouchfor.com?size=260'
46
+ },
47
+ contact: {
48
+ id: 'b62f62a3-0cd4-4512-9b52-121cb2f3e72f',
49
+ name: 'Aaron Williams'
50
+ },
51
+ captions: {
52
+ current:
53
+ 'WEBVTT\n\n1\n00:00:01.549 --> 00:00:05.920\n🇯🇵 🙏 こんにちは 藤森 章 です 。 え ? 今 日本 の え ? 東京 に 住ん で\n\n2\n00:00:05.929 --> 00:00:11.359\nいる 高校 三 年 生 です 。 えっと 父親 が 日本 人 で 母親 が は\n\n3\n00:00:11.619 --> 00:00:13.130\nえー 中国 人 な ん です けれど も 。\n\n4\n00:00:13.939 --> 00:00:17.889\nえ ? 上海 に 行っ た 時 に 国際 学校 に 通っ て い た の で 。\n\n5\n00:00:17.899 --> 00:00:20.389\nえー 英語 を 日本 語 、 中国 語 、 三 語 を しゃ ます\n\n6\n00:00:21.030 --> 00:00:23.549\nえー で 、 その 中 で 経験 し た こと な ん です けれど も 、\n\n7\n00:00:24.040 --> 00:00:26.700\n日本 語 の 素晴らしい ところ って いう の は 、\n\n8\n00:00:27.260 --> 00:00:27.809\nやっぱり\n\n9\n00:00:28.489 --> 00:00:31.540\n和歌 に も 見 られる よう な 多彩 な 表現 力 と\n\n10\n00:00:32.349 --> 00:00:33.819\nえ 奥深い\n\n11\n00:00:34.770 --> 00:00:38.520\nえー 、 感情 表現 など に ある と 思い ます 。 えー これ を 見 て\n\n12\n00:00:38.759 --> 00:00:41.599\n日本 語 に 興味 を 持っ た 方 は 、 是非 その\n\n13\n00:00:43.180 --> 00:00:43.770\n奥深い\n\n14\n00:00:44.299 --> 00:00:45.630\n表現 など を え 、\n\n15\n00:00:46.299 --> 00:00:49.209\n見 て 、 感じ て えー 、 触れ て み て ください 。 ありがとう\n\n16\n00:00:49.220 --> 00:00:49.599\nござい まし た 。\n'
54
+ }
55
+ }
56
+ },
57
+ {
58
+ id: '5c66bb3a-ed68-41a0-a601-a49865104418',
59
+ // title: "What is the business problem you're trying to solve?",
60
+ answer: {
61
+ id: '5c66bb3a-ed68-41a0-a601-a49865104418',
62
+ label: 'Hello this label is overridden',
63
+ metadata: {
64
+ duration: 18.5
65
+ },
66
+ settings: {
67
+ endOffset: 0.385945945945946,
68
+ startOffset: 0.3037837837837838,
69
+ crop: {
70
+ x: 0.4,
71
+ y: 0.4,
72
+ width: 0.4,
73
+ height: 0.4
74
+ }
75
+ },
76
+ media: {
77
+ input:
78
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/5c66bb3a-ed68-41a0-a601-a49865104418/5c66bb3a-ed68-41a0-a601-a49865104418_input.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
79
+ video:
80
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/5c66bb3a-ed68-41a0-a601-a49865104418/5c66bb3a-ed68-41a0-a601-a49865104418.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
81
+ playlist:
82
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/5c66bb3a-ed68-41a0-a601-a49865104418/5c66bb3a-ed68-41a0-a601-a49865104418.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
83
+ thumbnail:
84
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/5c66bb3a-ed68-41a0-a601-a49865104418/5c66bb3a-ed68-41a0-a601-a49865104418_poster.0000001.jpg?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTYzMjM0Mjl9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=SGA54MFpy4jaqKJHKEuxRfjk-~NBFAh1tdW9Y6uYJwc0LFjDDgX1sraerSyohmVhj~-QVIrglY5BvglDIhrFcLJWGTkgj4vhyLprk1a7EDckv0HBgp-k1ZKvoDtt3wBOzrL4GicfXBkuMpIu5jv5MY3xemlJj2a6V~h65XJuLO4u-xS~McH6rS3mRxoNl4GcYUVm4upre1DGQx-5Suy6Ateoxl6xxoF8kg5EL02KxkIGiRpwXJTvVmUuVF0rpBj-IE40MfmhLBQ1NNSXiqb3-HjpkKwhYPvB5APVh23mzGmqJ0P3jbr2F1cU4Jvlqsjb6GVP61wGOz9ITeWPZkOy8A__'
85
+ },
86
+ client: {
87
+ id: '03540d70-1c75-4867-a235-bac842ed6ce4',
88
+ logoSrc: 'https://logo.clearbit.com/vouchfor.com?size=260'
89
+ },
90
+ contact: {
91
+ id: 'b62f62a3-0cd4-4512-9b52-121cb2f3e72f',
92
+ name: 'Aaron Williams',
93
+ roleTitle: 'Software Engineer'
94
+ },
95
+ captions: {
96
+ current:
97
+ "WEBVTT\r\n\r\n1\r\n00:00:01.710 --> 00:00:05.250\r\nwe are trying to solve, uh, world hunger.\r\n\r\n2\r\n00:00:05.420 --> 00:00:08.369\r\nI think it's an important goal. Uh, we\r\n\r\n3\r\n00:00:08.380 --> 00:00:09.489\r\nalso would like to get rid of\r\n\r\n4\r\n00:00:09.500 --> 00:00:12.050\r\ntuberculosis. Um, in general. And\r\n\r\n5\r\n00:00:12.060 --> 00:00:15.329\r\nprobably malaria, too. Uh, it's gonna be\r\n\r\n6\r\n00:00:15.340 --> 00:00:17.180\r\na couple of weeks, but I think we can do\r\n\r\n7\r\n00:00:17.190 --> 00:00:17.319\r\nit.\r\n"
98
+ }
99
+ }
100
+ },
101
+ {
102
+ id: 'e77c81a7-f6ef-4eae-91fc-b620d092d8d6',
103
+ title: 'What are the priorities for your business/team this quarter?',
104
+ answer: {
105
+ id: 'e77c81a7-f6ef-4eae-91fc-b620d092d8d6',
106
+ label: null,
107
+ metadata: {
108
+ duration: 16.167
109
+ },
110
+ settings: {
111
+ endOffset: 0,
112
+ startOffset: 0
113
+ },
114
+ media: {
115
+ input:
116
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/e77c81a7-f6ef-4eae-91fc-b620d092d8d6/e77c81a7-f6ef-4eae-91fc-b620d092d8d6_input.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
117
+ video:
118
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/e77c81a7-f6ef-4eae-91fc-b620d092d8d6/e77c81a7-f6ef-4eae-91fc-b620d092d8d6.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
119
+ playlist:
120
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/e77c81a7-f6ef-4eae-91fc-b620d092d8d6/e77c81a7-f6ef-4eae-91fc-b620d092d8d6.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
121
+ thumbnail:
122
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/e77c81a7-f6ef-4eae-91fc-b620d092d8d6/e77c81a7-f6ef-4eae-91fc-b620d092d8d6_poster.0000001.jpg?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTYzMjM0Mjl9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=SGA54MFpy4jaqKJHKEuxRfjk-~NBFAh1tdW9Y6uYJwc0LFjDDgX1sraerSyohmVhj~-QVIrglY5BvglDIhrFcLJWGTkgj4vhyLprk1a7EDckv0HBgp-k1ZKvoDtt3wBOzrL4GicfXBkuMpIu5jv5MY3xemlJj2a6V~h65XJuLO4u-xS~McH6rS3mRxoNl4GcYUVm4upre1DGQx-5Suy6Ateoxl6xxoF8kg5EL02KxkIGiRpwXJTvVmUuVF0rpBj-IE40MfmhLBQ1NNSXiqb3-HjpkKwhYPvB5APVh23mzGmqJ0P3jbr2F1cU4Jvlqsjb6GVP61wGOz9ITeWPZkOy8A__'
123
+ },
124
+ client: {
125
+ id: '03540d70-1c75-4867-a235-bac842ed6ce4',
126
+ name: 'Vouch',
127
+ logoSrc: 'https://logo.clearbit.com/vouchfor.com?size=260'
128
+ },
129
+ contact: {
130
+ id: 'b62f62a3-0cd4-4512-9b52-121cb2f3e72f',
131
+ name: 'Aaron Williams',
132
+ roleTitle: 'Software Engineer'
133
+ },
134
+ captions: {
135
+ current:
136
+ 'WEBVTT\r\n\r\n1\r\n00:00:00.709 --> 00:00:03.059\r\npriorities for this business. Uh, for\r\n\r\n2\r\n00:00:03.069 --> 00:00:06.010\r\nthis quarter, uh, to make more money,\r\n\r\n3\r\n00:00:06.019 --> 00:00:09.050\r\nmore profits, Uh, get everything, uh,\r\n\r\n4\r\n00:00:09.069 --> 00:00:13.439\r\nswept away. All our heuristics should be\r\n\r\n5\r\n00:00:13.529 --> 00:00:15.119\r\ntop of the line.\r\n'
137
+ }
138
+ }
139
+ },
140
+ {
141
+ id: '39fd188d-a4dc-43b9-bac8-32fd71bfbc90',
142
+ title: 'What are your biggest pain points?',
143
+ answer: {
144
+ id: '39fd188d-a4dc-43b9-bac8-32fd71bfbc90',
145
+ label: null,
146
+ metadata: {
147
+ duration: 13.792
148
+ },
149
+ settings: {
150
+ endOffset: 0,
151
+ startOffset: 0
152
+ },
153
+ media: {
154
+ input:
155
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/39fd188d-a4dc-43b9-bac8-32fd71bfbc90/39fd188d-a4dc-43b9-bac8-32fd71bfbc90_input.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
156
+ video:
157
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/39fd188d-a4dc-43b9-bac8-32fd71bfbc90/39fd188d-a4dc-43b9-bac8-32fd71bfbc90.mp4?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
158
+ playlist:
159
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/39fd188d-a4dc-43b9-bac8-32fd71bfbc90/39fd188d-a4dc-43b9-bac8-32fd71bfbc90.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTQ1NDI2MzV9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=vh-ZjBnHDhIIKRe4vr8GHppegY2VIRwXvC~QdX8aV9b5eylmQ~I~EmQ2MKwLOWuQ14DHOF~GU8oAfjXTMWgmZdeu1YzHkDHpQzi1b~NLgipJmpYe9-9OR67MC8jvNTva6OQ5PKsdN6tQBn9vWbBOP5gXEMZLtBP1tsopNu7ZpaUduyPiSVIH5VlWi~KRvMRZnQpHWxfVvnvvxifuk8bODDHh1Ba7MJxrAkdoskzP7xVYO3NbROscTPZ5tKnK9SVt2tnpdW0Aqxj1e2kH6WJhqwgxFfCDqDojMEesx-om71R99U0hMjwDHUF~EDEk6L6wrmD0OfXxbeKd-g5FoTPdJg__',
160
+ thumbnail:
161
+ 'https://d2rxhdlm2q91uk.cloudfront.net/TVik9uTMgE/6JQEIPeStt/39fd188d-a4dc-43b9-bac8-32fd71bfbc90/39fd188d-a4dc-43b9-bac8-32fd71bfbc90_poster.0000001.jpg?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMnJ4aGRsbTJxOTF1ay5jbG91ZGZyb250Lm5ldC9UVmlrOXVUTWdFLyoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjIwMTYzMjM0Mjl9fX1dfQ__&Key-Pair-Id=K2SWKOH0FA5F6M&Signature=SGA54MFpy4jaqKJHKEuxRfjk-~NBFAh1tdW9Y6uYJwc0LFjDDgX1sraerSyohmVhj~-QVIrglY5BvglDIhrFcLJWGTkgj4vhyLprk1a7EDckv0HBgp-k1ZKvoDtt3wBOzrL4GicfXBkuMpIu5jv5MY3xemlJj2a6V~h65XJuLO4u-xS~McH6rS3mRxoNl4GcYUVm4upre1DGQx-5Suy6Ateoxl6xxoF8kg5EL02KxkIGiRpwXJTvVmUuVF0rpBj-IE40MfmhLBQ1NNSXiqb3-HjpkKwhYPvB5APVh23mzGmqJ0P3jbr2F1cU4Jvlqsjb6GVP61wGOz9ITeWPZkOy8A__'
162
+ },
163
+ client: {
164
+ id: '03540d70-1c75-4867-a235-bac842ed6ce4',
165
+ name: 'Vouch',
166
+ logoSrc: 'https://logo.clearbit.com/vouchfor.com?size=260'
167
+ },
168
+ contact: {
169
+ id: 'b62f62a3-0cd4-4512-9b52-121cb2f3e72f',
170
+ name: 'Aaron Williams',
171
+ roleTitle: 'Software Engineer'
172
+ },
173
+ captions: {
174
+ current:
175
+ "WEBVTT\r\n\r\n1\r\n00:00:00.790 --> 00:00:03.269\r\nuh, the biggest pain points this this\r\n\r\n2\r\n00:00:03.279 --> 00:00:07.170\r\nquarter. Um, Jerry has been doing the\r\n\r\n3\r\n00:00:07.179 --> 00:00:09.180\r\nworst work that he's ever been doing.\r\n\r\n4\r\n00:00:09.390 --> 00:00:11.680\r\nAnd we must fire him, Jerry. Goodbye,\r\n\r\n5\r\n00:00:11.689 --> 00:00:12.149\r\nJerry.\r\n"
176
+ }
177
+ }
178
+ }
179
+ ]
180
+ }
181
+ } as Vouch;
182
+
183
+ export { data };
package/src/index.ts CHANGED
@@ -1 +1 @@
1
- export { InlineEmbed } from '~/components/InlineEmbed';
1
+ export { PlayerEmbed } from '~/components/PlayerEmbed';
@@ -0,0 +1,64 @@
1
+ type Environment = 'local' | 'dev' | 'staging' | 'prod';
2
+
3
+ type GetEnvUrlsReturn = {
4
+ videoUrl: string;
5
+ publicApiUrl: string;
6
+ embedApiUrl: string;
7
+ };
8
+
9
+ const devVideoUrl = 'https://d2rxhdlm2q91uk.cloudfront.net';
10
+ const stagingVideoUrl = 'https://d1ix11aj5kfygl.cloudfront.net';
11
+ const prodVideoUrl = 'https://d157jlwnudd93d.cloudfront.net';
12
+
13
+ const devPublicApiUrl = 'https://bshyfw4h5a.execute-api.ap-southeast-2.amazonaws.com/dev';
14
+ const stagingPublicApiUrl = 'https://gyzw7rpbq3.execute-api.ap-southeast-2.amazonaws.com/staging';
15
+ const prodPublicApiUrl = 'https://vfcjuim1l3.execute-api.ap-southeast-2.amazonaws.com/prod';
16
+
17
+ const localEmbedApiUrl = 'http://localhost:6060/v2';
18
+ const devEmbedApiUrl = 'https://embed-dev.vouchfor.com/v2';
19
+ const stagingEmbedApiUrl = 'https://embed-staging.vouchfor.com/v2';
20
+ const prodEmbedApiUrl = 'https://embed.vouchfor.com/v2';
21
+
22
+ // We are handling the case where env is an unknown string so the ts error is a lie
23
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
24
+ // @ts-ignore
25
+ function getEnvUrls(env: Environment): GetEnvUrlsReturn {
26
+ if (!['local', 'dev', 'staging', 'prod'].includes(env)) {
27
+ throw new Error(`Unknown environment: ${env}`);
28
+ }
29
+
30
+ if (env === 'local') {
31
+ return {
32
+ videoUrl: devVideoUrl,
33
+ publicApiUrl: devPublicApiUrl,
34
+ embedApiUrl: localEmbedApiUrl
35
+ };
36
+ }
37
+
38
+ if (env === 'dev') {
39
+ return {
40
+ videoUrl: devVideoUrl,
41
+ publicApiUrl: devPublicApiUrl,
42
+ embedApiUrl: devEmbedApiUrl
43
+ };
44
+ }
45
+
46
+ if (env === 'staging') {
47
+ return {
48
+ videoUrl: stagingVideoUrl,
49
+ publicApiUrl: stagingPublicApiUrl,
50
+ embedApiUrl: stagingEmbedApiUrl
51
+ };
52
+ }
53
+
54
+ if (env === 'prod') {
55
+ return {
56
+ videoUrl: prodVideoUrl,
57
+ publicApiUrl: prodPublicApiUrl,
58
+ embedApiUrl: prodEmbedApiUrl
59
+ };
60
+ }
61
+ }
62
+
63
+ export { devEmbedApiUrl, stagingEmbedApiUrl, prodEmbedApiUrl, getEnvUrls };
64
+ export type { Environment };
@@ -0,0 +1,13 @@
1
+ function forwardEvent(type: string, fromElement: HTMLElement, toElement: HTMLElement) {
2
+ function forwarder(event: Event) {
3
+ toElement.dispatchEvent(new CustomEvent(event.type, event));
4
+ }
5
+
6
+ fromElement.addEventListener(type, forwarder);
7
+
8
+ return () => {
9
+ fromElement.removeEventListener(type, forwarder);
10
+ };
11
+ }
12
+
13
+ export { forwardEvent };
@@ -1,12 +0,0 @@
1
- import { MediaPlayer } from '@vouchfor/media-player';
2
- import type { MediaPlayerProps } from '@vouchfor/media-player';
3
- type InlineEmbedProps = MediaPlayerProps;
4
- declare class InlineEmbed extends MediaPlayer {
5
- }
6
- declare global {
7
- interface HTMLElementTagNameMap {
8
- 'vembed-inline': InlineEmbed;
9
- }
10
- }
11
- export { InlineEmbed };
12
- export type { InlineEmbedProps };
@@ -1,2 +0,0 @@
1
- export { InlineEmbed } from './InlineEmbed';
2
- export type { InlineEmbedProps } from './InlineEmbed';
@@ -1 +0,0 @@
1
- export { InlineEmbed } from './components/InlineEmbed';