speechrecorderng 3.10.13 → 3.11.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.
Files changed (99) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/speechrecorderng.mjs +204 -201
  3. package/fesm2022/speechrecorderng.mjs.map +1 -1
  4. package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
  5. package/lib/spr.module.version.d.ts +1 -1
  6. package/lib/ui/canvas_layer_comp.d.ts +1 -1
  7. package/lib/ui/responsive_component.d.ts +1 -1
  8. package/package.json +13 -15
  9. package/esm2022/lib/action/action.mjs +0 -73
  10. package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
  11. package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
  12. package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
  13. package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
  14. package/esm2022/lib/audio/audio_display.mjs +0 -118
  15. package/esm2022/lib/audio/audio_player.mjs +0 -238
  16. package/esm2022/lib/audio/capture/capture.mjs +0 -855
  17. package/esm2022/lib/audio/context.mjs +0 -79
  18. package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
  19. package/esm2022/lib/audio/format.mjs +0 -20
  20. package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
  21. package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
  22. package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
  23. package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
  24. package/esm2022/lib/audio/io/stream.mjs +0 -59
  25. package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
  26. package/esm2022/lib/audio/persistor.mjs +0 -81
  27. package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
  28. package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
  29. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
  30. package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
  31. package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
  32. package/esm2022/lib/audio/playback/player.mjs +0 -402
  33. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
  34. package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
  35. package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
  36. package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
  37. package/esm2022/lib/audio/ui/common.mjs +0 -19
  38. package/esm2022/lib/audio/ui/container.mjs +0 -414
  39. package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
  40. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
  41. package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
  42. package/esm2022/lib/db/inddb.mjs +0 -120
  43. package/esm2022/lib/dsp/utils.mjs +0 -48
  44. package/esm2022/lib/environment/environment.defaults.mjs +0 -9
  45. package/esm2022/lib/io/BinaryReader.mjs +0 -93
  46. package/esm2022/lib/io/BinaryWriter.mjs +0 -80
  47. package/esm2022/lib/io/stream.mjs +0 -259
  48. package/esm2022/lib/math/2d/geometry.mjs +0 -28
  49. package/esm2022/lib/math/complex.mjs +0 -58
  50. package/esm2022/lib/math/dft.mjs +0 -196
  51. package/esm2022/lib/media/utils.mjs +0 -14
  52. package/esm2022/lib/net/uploader.mjs +0 -367
  53. package/esm2022/lib/recorder_component.mjs +0 -65
  54. package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
  55. package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
  56. package/esm2022/lib/speechrecorder/recording.mjs +0 -124
  57. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
  58. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
  59. package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
  60. package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
  61. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
  62. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
  63. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
  64. package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
  65. package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
  66. package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
  67. package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
  68. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
  69. package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
  70. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
  71. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
  72. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
  73. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
  74. package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
  75. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
  76. package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
  77. package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
  78. package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
  79. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
  80. package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
  81. package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
  82. package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
  83. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
  84. package/esm2022/lib/speechrecorderng.component.mjs +0 -392
  85. package/esm2022/lib/speechrecorderng.module.mjs +0 -97
  86. package/esm2022/lib/spr.config.mjs +0 -27
  87. package/esm2022/lib/spr.module.version.mjs +0 -2
  88. package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
  89. package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
  90. package/esm2022/lib/ui/message_dialog.mjs +0 -51
  91. package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
  92. package/esm2022/lib/ui/responsive_component.mjs +0 -24
  93. package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
  94. package/esm2022/lib/utils/ua-parser.mjs +0 -190
  95. package/esm2022/lib/utils/utils.mjs +0 -132
  96. package/esm2022/lib/utils/wake_lock.mjs +0 -114
  97. package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
  98. package/esm2022/public-api.mjs +0 -35
  99. package/esm2022/speechrecorderng.mjs +0 -5
@@ -1,288 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { HttpHeaders } from "@angular/common/http";
3
- import { Observable } from "rxjs";
4
- import { ApiType, SPEECHRECORDER_CONFIG } from "../../../spr.config";
5
- import { UUID } from "../../../utils/utils";
6
- import { RecordingFileUtils } from "../../recording";
7
- import { AudioBufferSource, AudioDataHolder } from "../../../audio/audio_data_holder";
8
- import { BasicRecordingService } from "../../recordings/basic_recording.service";
9
- import { AudioContextProvider } from "../../../audio/context";
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@angular/common/http";
12
- import * as i2 from "../../../spr.config";
13
- export class RecordingFileService extends BasicRecordingService {
14
- static { this.RECOFILE_API_CTX = 'recordingfile'; }
15
- constructor(http, config) {
16
- super(http, config);
17
- this.http = http;
18
- this.config = config;
19
- //private debugDelay:number=10000;
20
- this.debugDelay = 0;
21
- }
22
- recoFileUrl(recordingFileId) {
23
- let encRecfileId = encodeURIComponent(recordingFileId);
24
- let recUrl = this.apiEndPoint + RecordingFileService.RECOFILE_API_CTX + '/' + encRecfileId;
25
- return recUrl;
26
- }
27
- fetchAudiofile(recordingFileId) {
28
- let recUrl = this.recoFileUrl(recordingFileId);
29
- if (this.config && this.config.apiType === ApiType.FILES) {
30
- // for development and demo
31
- // append UUID to make request URL unique to avoid localhost server caching
32
- recUrl = recUrl + '.wav';
33
- }
34
- let headers = new HttpHeaders({
35
- 'Accept': 'audio/wav'
36
- });
37
- return this.http.get(recUrl, {
38
- observe: 'response',
39
- headers: headers,
40
- responseType: 'arraybuffer',
41
- withCredentials: this.withCredentials
42
- });
43
- }
44
- recordingFileDescrObserver(recordingFileId) {
45
- let recUrl = this.recoFileUrl(recordingFileId);
46
- if (this.config && this.config.apiType === ApiType.FILES) {
47
- // for development and demo
48
- // append UUID to make request URL unique to avoid localhost server caching
49
- recUrl = recUrl + '.json?requestUUID=' + UUID.generate();
50
- }
51
- return this.http.get(recUrl, { withCredentials: this.withCredentials });
52
- }
53
- sprRecordingFileDescrObserver(recordingFileId) {
54
- let recUrl = this.recoFileUrl(recordingFileId);
55
- if (this.config && this.config.apiType === ApiType.FILES) {
56
- // for development and demo
57
- // append UUID to make request URL unique to avoid localhost server caching
58
- recUrl = recUrl + '.json?requestUUID=' + UUID.generate();
59
- }
60
- return this.http.get(recUrl, { withCredentials: this.withCredentials });
61
- }
62
- fetchSessionAudiofileById(projectName, sessId, recordingFileId) {
63
- let recUrl = this.recoFileUrl(recordingFileId);
64
- // if (this.config && this.config.apiType === ApiType.FILES) {
65
- // // for development and demo
66
- // // append UUID to make request URL unique to avoid localhost server caching
67
- // recUrl = recUrl + '.wav?requestUUID=' + UUID.generate();
68
- // }
69
- return this.http.get(recUrl, {
70
- observe: 'response',
71
- responseType: 'arraybuffer',
72
- withCredentials: this.withCredentials
73
- });
74
- }
75
- // TODO test
76
- fetchAndApplyRecordingFile(recordingFile) {
77
- let wobs = new Observable(observer => {
78
- if (recordingFile.recordingFileId) {
79
- let obs = this.fetchAudiofile(recordingFile.recordingFileId);
80
- obs.subscribe({ next: resp => {
81
- if (resp.body) {
82
- AudioContextProvider.decodeAudioData(resp.body).then(ab => {
83
- let as = new AudioBufferSource(ab);
84
- RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(as));
85
- if (this.debugDelay > 0) {
86
- window.setTimeout(() => {
87
- observer.next(recordingFile);
88
- observer.complete();
89
- }, this.debugDelay);
90
- }
91
- else {
92
- observer.next(recordingFile);
93
- observer.complete();
94
- }
95
- }).catch(reason => { observer.error(reason); });
96
- }
97
- else {
98
- observer.error('Received no audio data!');
99
- }
100
- },
101
- error: (error) => {
102
- if (error.status == 404) {
103
- // Interpret not as an error, the file ist not recorded yet
104
- observer.next(null);
105
- observer.complete();
106
- }
107
- else {
108
- // all other states are errors
109
- observer.error(error);
110
- observer.complete();
111
- }
112
- }
113
- });
114
- }
115
- else {
116
- observer.error();
117
- }
118
- });
119
- return wobs;
120
- }
121
- fetchRecordingFile(aCtx, recordingFileId) {
122
- let wobs = new Observable(observer => {
123
- let rf = null;
124
- let rfDescrObs = this.recordingFileDescrObserver(recordingFileId);
125
- rfDescrObs.subscribe({ next: value => {
126
- rf = value;
127
- }, error: (error) => {
128
- observer.error(error);
129
- }, complete: () => {
130
- let rfAudioObs = this.fetchAudiofile(recordingFileId);
131
- rfAudioObs.subscribe({
132
- next: resp => {
133
- // Do not use Promise version, which does not work with Safari 13
134
- if (resp.body) {
135
- AudioContextProvider.decodeAudioData(resp.body).then(ab => {
136
- if (rf) {
137
- let as = new AudioBufferSource(ab);
138
- RecordingFileUtils.setAudioData(rf, new AudioDataHolder(as));
139
- }
140
- else {
141
- observer.error('Recording file object null');
142
- }
143
- if (this.debugDelay > 0) {
144
- window.setTimeout(() => {
145
- observer.next(rf);
146
- observer.complete();
147
- }, this.debugDelay);
148
- }
149
- else {
150
- observer.next(rf);
151
- observer.complete();
152
- }
153
- }).catch(reason => { observer.error(reason); });
154
- }
155
- else {
156
- observer.error('Received no audio data');
157
- }
158
- },
159
- error: (error) => {
160
- if (error.status == 404) {
161
- // Interpret not as an error, the file ist not recorded yet
162
- observer.next(null);
163
- observer.complete();
164
- }
165
- else {
166
- // all other states are errors
167
- observer.error(error);
168
- observer.complete();
169
- }
170
- }
171
- });
172
- }
173
- });
174
- });
175
- return wobs;
176
- }
177
- fetchSprRecordingFile(recordingFileId) {
178
- let wobs = new Observable(observer => {
179
- let rf = null;
180
- let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
181
- rfDescrObs.subscribe({ next: value => {
182
- rf = value;
183
- },
184
- error: (error) => {
185
- observer.error(error);
186
- }, complete: () => {
187
- let sampleCnt = null;
188
- if (rf && rf.channels && rf.frames) {
189
- sampleCnt = rf.channels * rf.frames;
190
- }
191
- // TODO use download storage type depending on sample count of file
192
- if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
193
- const baseUrl = this.recoFileUrl(recordingFileId);
194
- const obNetAb = this.chunkAudioRequestToNetAudioBuffer(baseUrl, 0, rf?.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
195
- obNetAb.subscribe({
196
- next: (nab) => {
197
- let adh = new AudioDataHolder(nab);
198
- if (rf) {
199
- RecordingFileUtils.setAudioData(rf, adh);
200
- observer.next(rf);
201
- }
202
- },
203
- complete: () => {
204
- observer.complete();
205
- },
206
- error: (error) => {
207
- if (error.status == 404) {
208
- // Interpret not as an error, the file ist not recorded yet
209
- observer.next(null);
210
- observer.complete();
211
- }
212
- else {
213
- // all other states are errors
214
- observer.error(error);
215
- observer.complete();
216
- }
217
- }
218
- });
219
- }
220
- else {
221
- let rfAudioObs = this.fetchAudiofile(recordingFileId);
222
- rfAudioObs.subscribe({ next: resp => {
223
- // Do not use Promise version, which does not work with Safari 13
224
- if (resp.body) {
225
- AudioContextProvider.decodeAudioData(resp.body).then(ab => {
226
- if (rf) {
227
- let as = new AudioBufferSource(ab);
228
- let adh = new AudioDataHolder(as);
229
- RecordingFileUtils.setAudioData(rf, adh);
230
- }
231
- else {
232
- observer.error('Recording file object null');
233
- }
234
- if (this.debugDelay > 0) {
235
- window.setTimeout(() => {
236
- observer.next(rf);
237
- observer.complete();
238
- }, this.debugDelay);
239
- }
240
- else {
241
- observer.next(rf);
242
- observer.complete();
243
- }
244
- }).catch(reason => { observer.error(reason); });
245
- }
246
- else {
247
- observer.error('Received no audio data');
248
- }
249
- },
250
- error: (error) => {
251
- if (error.status == 404) {
252
- // Interpret not as an error, the file ist not recorded yet
253
- observer.next(null);
254
- observer.complete();
255
- }
256
- else {
257
- // all other states are errors
258
- observer.error(error);
259
- observer.complete();
260
- }
261
- }
262
- });
263
- }
264
- }
265
- });
266
- });
267
- return wobs;
268
- }
269
- saveEditSelection(recordingFileId, editSampleRate, editStartFrame, editEndFrame) {
270
- let recUrl = this.apiEndPoint + RecordingFileService.RECOFILE_API_CTX + '/' + recordingFileId;
271
- if (this.config && this.config.apiType === ApiType.FILES) {
272
- // for development and demo
273
- // append UUID to make request URL unique to avoid localhost server caching
274
- recUrl = recUrl + '.json?requestUUID=' + UUID.generate();
275
- }
276
- //console.log("Path request URL: "+recUrl)
277
- return this.http.patch(recUrl, { editSampleRate: editSampleRate, editStartFrame: editStartFrame, editEndFrame: editEndFrame }, { withCredentials: this.withCredentials });
278
- }
279
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingFileService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
280
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingFileService }); }
281
- }
282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RecordingFileService, decorators: [{
283
- type: Injectable
284
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
285
- type: Inject,
286
- args: [SPEECHRECORDER_CONFIG]
287
- }] }] });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nZmlsZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vcmVjb3JkaW5nZmlsZS9yZWNvcmRpbmdmaWxlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFpQyxXQUFXLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFHaEcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUdoQyxPQUFPLEVBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUF1QixNQUFNLHFCQUFxQixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxQyxPQUFPLEVBQWdCLGtCQUFrQixFQUFtQixNQUFNLGlCQUFpQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUk1RCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEscUJBQXFCO2FBRXRDLHFCQUFnQixHQUFHLGVBQWUsQUFBbEIsQ0FBa0I7SUFLekQsWUFBc0IsSUFBZ0IsRUFBMkMsTUFBNkI7UUFDMUcsS0FBSyxDQUFDLElBQUksRUFBQyxNQUFNLENBQUMsQ0FBQztRQURELFNBQUksR0FBSixJQUFJLENBQVk7UUFBMkMsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFIOUcsa0NBQWtDO1FBQzFCLGVBQVUsR0FBUSxDQUFDLENBQUM7SUFJNUIsQ0FBQztJQUVPLFdBQVcs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LG9CQUFvQixHQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsMENBQTBDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQW1CLE1BQU0sRUFBQyxFQUFDLGNBQWMsRUFBQyxjQUFjLEVBQUMsY0FBYyxFQUFDLGNBQWMsRUFBQyxZQUFZLEVBQUMsWUFBWSxFQUFDLEVBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDckwsQ0FBQzsrR0E1UlUsb0JBQW9CLDRDQU9pQixxQkFBcUI7bUhBUDFELG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVTs7MEJBUWdDLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuXHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5pbXBvcnQge0FwaVR5cGUsIFNQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7VVVJRH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nRmlsZSwgUmVjb3JkaW5nRmlsZVV0aWxzLCBTcHJSZWNvcmRpbmdGaWxlfSBmcm9tIFwiLi4vLi4vcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7QXVkaW9CdWZmZXJTb3VyY2UsIEF1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4uLy4uLy4uL2F1ZGlvL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcbmltcG9ydCB7QmFzaWNSZWNvcmRpbmdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vcmVjb3JkaW5ncy9iYXNpY19yZWNvcmRpbmcuc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi4vLi4vLi4vYXVkaW8vY29udGV4dFwiO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0ZpbGVTZXJ2aWNlIGV4dGVuZHMgQmFzaWNSZWNvcmRpbmdTZXJ2aWNle1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFQ09GSUxFX0FQSV9DVFggPSAncmVjb3JkaW5nZmlsZSdcclxuXHJcbiAgLy9wcml2YXRlIGRlYnVnRGVsYXk6bnVtYmVyPTEwMDAwO1xyXG4gIHByaXZhdGUgZGVidWdEZWxheTpudW1iZXI9MDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoU1BFRUNIUkVDT1JERVJfQ09ORklHKSBwcm90ZWN0ZWQgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuICAgICAgc3VwZXIoaHR0cCxjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNvRmlsZVVybChyZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6c3RyaW5ne1xyXG4gICAgbGV0IGVuY1JlY2ZpbGVJZD1lbmNvZGVVUklDb21wb25lbnQocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgIGxldCByZWNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgUmVjb3JkaW5nRmlsZVNlcnZpY2UuUkVDT0ZJTEVfQVBJX0NUWCArICcvJyArIGVuY1JlY2ZpbGVJZDtcclxuXHJcbiAgICByZXR1cm4gcmVjVXJsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaEF1ZGlvZmlsZShyZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPj4ge1xyXG4gICAgbGV0IHJlY1VybCA9IHRoaXMucmVjb0ZpbGVVcmwocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgcmVjVXJsID0gcmVjVXJsICsgJy53YXYnO1xyXG4gICAgfVxyXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQWNjZXB0JzogJ2F1ZGlvL3dhdidcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHJlY1VybCwge1xyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNvcmRpbmdGaWxlRGVzY3JPYnNlcnZlcihyZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8UmVjb3JkaW5nRmlsZT4ge1xyXG5cclxuICAgIGxldCByZWNVcmwgPSB0aGlzLnJlY29GaWxlVXJsKHJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgIHJlY1VybCA9IHJlY1VybCArICcuanNvbj9yZXF1ZXN0VVVJRD0nK1VVSUQuZ2VuZXJhdGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlY29yZGluZ0ZpbGU+KHJlY1VybCx7IHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHMgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNwclJlY29yZGluZ0ZpbGVEZXNjck9ic2VydmVyKHJlY29yZGluZ0ZpbGVJZDogc3RyaW5nIHwgbnVtYmVyKTogT2JzZXJ2YWJsZTxTcHJSZWNvcmRpbmdGaWxlPiB7XHJcblxyXG4gICAgbGV0IHJlY1VybCA9IHRoaXMucmVjb0ZpbGVVcmwocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgcmVjVXJsID0gcmVjVXJsICsgJy5qc29uP3JlcXVlc3RVVUlEPScrVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8U3ByUmVjb3JkaW5nRmlsZT4ocmVjVXJsLHsgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFscyB9KTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGZldGNoU2Vzc2lvbkF1ZGlvZmlsZUJ5SWQocHJvamVjdE5hbWU6IHN0cmluZywgc2Vzc0lkOiBzdHJpbmcgfCBudW1iZXIsIHJlY29yZGluZ0ZpbGVJZDogc3RyaW5nIHwgbnVtYmVyKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXlCdWZmZXI+PiB7XHJcblxyXG4gICAgbGV0IHJlY1VybCA9IHRoaXMucmVjb0ZpbGVVcmwocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgIC8vIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAvLyAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgLy8gICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgIC8vICAgcmVjVXJsID0gcmVjVXJsICsgJy53YXY/cmVxdWVzdFVVSUQ9JyArIFVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHJlY1VybCwge1xyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFRPRE8gdGVzdFxyXG5cclxuICBmZXRjaEFuZEFwcGx5UmVjb3JkaW5nRmlsZShyZWNvcmRpbmdGaWxlOlNwclJlY29yZGluZ0ZpbGUpOk9ic2VydmFibGU8U3ByUmVjb3JkaW5nRmlsZXxudWxsPiB7XHJcblxyXG4gICAgbGV0IHdvYnMgPSBuZXcgT2JzZXJ2YWJsZTxTcHJSZWNvcmRpbmdGaWxlfG51bGw+KG9ic2VydmVyPT57XHJcbiAgICAgIGlmKHJlY29yZGluZ0ZpbGUucmVjb3JkaW5nRmlsZUlkKSB7XHJcbiAgICAgICAgbGV0IG9icyA9IHRoaXMuZmV0Y2hBdWRpb2ZpbGUocmVjb3JkaW5nRmlsZS5yZWNvcmRpbmdGaWxlSWQpO1xyXG5cclxuICAgICAgICBvYnMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICB7bmV4dDpyZXNwID0+IHtcclxuICAgICAgICAgICAgICBpZihyZXNwLmJvZHkpIHtcclxuICAgICAgICAgICAgICAgIEF1ZGlvQ29udGV4dFByb3ZpZGVyLmRlY29kZUF1ZGlvRGF0YShyZXNwLmJvZHkpLnRoZW4oYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYXM9bmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKTtcclxuICAgICAgICAgICAgICAgICAgUmVjb3JkaW5nRmlsZVV0aWxzLnNldEF1ZGlvRGF0YShyZWNvcmRpbmdGaWxlLG5ldyBBdWRpb0RhdGFIb2xkZXIoYXMpKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdEZWxheSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZWNvcmRpbmdGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5kZWJ1Z0RlbGF5KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlY29yZGluZ0ZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJlYXNvbj0+e29ic2VydmVyLmVycm9yKHJlYXNvbil9KTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdSZWNlaXZlZCBubyBhdWRpbyBkYXRhIScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6KGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHdvYnM7XHJcbiAgfVxyXG5cclxuICBmZXRjaFJlY29yZGluZ0ZpbGUoYUN0eDogQXVkaW9Db250ZXh0LCByZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8UmVjb3JkaW5nRmlsZSB8IG51bGw+IHtcclxuXHJcbiAgICBsZXQgd29icyA9IG5ldyBPYnNlcnZhYmxlPFJlY29yZGluZ0ZpbGUgfCBudWxsPihvYnNlcnZlciA9PiB7XHJcbiAgICAgIGxldCByZjogUmVjb3JkaW5nRmlsZXxudWxsID0gbnVsbDtcclxuICAgICAgbGV0IHJmRGVzY3JPYnMgPSB0aGlzLnJlY29yZGluZ0ZpbGVEZXNjck9ic2VydmVyKHJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICAgIHJmRGVzY3JPYnMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAge25leHQ6dmFsdWUgPT4ge1xyXG4gICAgICAgIHJmID0gdmFsdWU7XHJcbiAgICAgIH0sIGVycm9yOihlcnJvcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSwgY29tcGxldGU6KCkgPT4ge1xyXG4gICAgICAgIGxldCByZkF1ZGlvT2JzID0gdGhpcy5mZXRjaEF1ZGlvZmlsZShyZWNvcmRpbmdGaWxlSWQpO1xyXG4gICAgICAgIHJmQXVkaW9PYnMuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvLyBEbyBub3QgdXNlIFByb21pc2UgdmVyc2lvbiwgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoIFNhZmFyaSAxM1xyXG4gICAgICAgICAgICBpZiAocmVzcC5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgQXVkaW9Db250ZXh0UHJvdmlkZXIuZGVjb2RlQXVkaW9EYXRhKHJlc3AuYm9keSkudGhlbiggYWIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJmKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBhcyA9IG5ldyBBdWRpb0J1ZmZlclNvdXJjZShhYik7XHJcbiAgICAgICAgICAgICAgICAgIFJlY29yZGluZ0ZpbGVVdGlscy5zZXRBdWRpb0RhdGEocmYsIG5ldyBBdWRpb0RhdGFIb2xkZXIoYXMpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKCdSZWNvcmRpbmcgZmlsZSBvYmplY3QgbnVsbCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWdEZWxheSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmYpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sIHRoaXMuZGVidWdEZWxheSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJmKTtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KS5jYXRjaChyZWFzb24gPT4ge29ic2VydmVyLmVycm9yKHJlYXNvbil9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcignUmVjZWl2ZWQgbm8gYXVkaW8gZGF0YScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDQpIHtcclxuICAgICAgICAgICAgICAvLyBJbnRlcnByZXQgbm90IGFzIGFuIGVycm9yLCB0aGUgZmlsZSBpc3Qgbm90IHJlY29yZGVkIHlldFxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIGFsbCBvdGhlciBzdGF0ZXMgYXJlIGVycm9yc1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3b2JzO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hTcHJSZWNvcmRpbmdGaWxlKCByZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8U3ByUmVjb3JkaW5nRmlsZSB8IG51bGw+IHtcclxuXHJcbiAgICBsZXQgd29icyA9IG5ldyBPYnNlcnZhYmxlPFNwclJlY29yZGluZ0ZpbGUgfCBudWxsPihvYnNlcnZlciA9PiB7XHJcbiAgICAgIGxldCByZjogU3ByUmVjb3JkaW5nRmlsZXxudWxsID0gbnVsbDtcclxuICAgICAgbGV0IHJmRGVzY3JPYnMgPSB0aGlzLnNwclJlY29yZGluZ0ZpbGVEZXNjck9ic2VydmVyKHJlY29yZGluZ0ZpbGVJZCk7XHJcbiAgICAgIHJmRGVzY3JPYnMuc3Vic2NyaWJlKHtuZXh0OnZhbHVlID0+IHtcclxuICAgICAgICByZiA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAsIGVycm9yOihlcnJvcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSwgY29tcGxldGU6KCkgPT4ge1xyXG4gICAgICAgIGxldCBzYW1wbGVDbnQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGlmIChyZiAmJiByZi5jaGFubmVscyAmJiByZi5mcmFtZXMpIHtcclxuICAgICAgICAgIHNhbXBsZUNudCA9IHJmLmNoYW5uZWxzICogcmYuZnJhbWVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIHVzZSBkb3dubG9hZCBzdG9yYWdlIHR5cGUgZGVwZW5kaW5nIG9uIHNhbXBsZSBjb3VudCBvZiBmaWxlXHJcbiAgICAgICAgaWYgKHJmICYmIHJmLnNhbXBsZXJhdGUgJiYgc2FtcGxlQ250ICE9IG51bGwgJiYgc2FtcGxlQ250ID4gdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcykge1xyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucmVjb0ZpbGVVcmwocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICAgIGNvbnN0IG9iTmV0QWIgPSB0aGlzLmNodW5rQXVkaW9SZXF1ZXN0VG9OZXRBdWRpb0J1ZmZlcihiYXNlVXJsLCAwLCByZj8uc2FtcGxlcmF0ZSwgQmFzaWNSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfQ0hVTktFRF9ET1dOTE9BRF9TRUNPTkRTLCByZi5mcmFtZXMpO1xyXG4gICAgICAgICAgb2JOZXRBYi5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKG5hYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYWRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihuYWIpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBSZWNvcmRpbmdGaWxlVXRpbHMuc2V0QXVkaW9EYXRhKHJmLCBhZGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmYpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJwcmV0IG5vdCBhcyBhbiBlcnJvciwgdGhlIGZpbGUgaXN0IG5vdCByZWNvcmRlZCB5ZXRcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKClcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgc3RhdGVzIGFyZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBsZXQgcmZBdWRpb09icyA9IHRoaXMuZmV0Y2hBdWRpb2ZpbGUocmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICAgIHJmQXVkaW9PYnMuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHtuZXh0OnJlc3AgPT5cclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgLy8gRG8gbm90IHVzZSBQcm9taXNlIHZlcnNpb24sIHdoaWNoIGRvZXMgbm90IHdvcmsgd2l0aCBTYWZhcmkgMTNcclxuICAgICAgICAgICAgaWYgKHJlc3AuYm9keSkge1xyXG4gICAgICAgICAgICAgIEF1ZGlvQ29udGV4dFByb3ZpZGVyLmRlY29kZUF1ZGlvRGF0YShyZXNwLmJvZHkpLnRoZW4oIGFiID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZikge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYXMgPSBuZXcgQXVkaW9CdWZmZXJTb3VyY2UoYWIpO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgYWRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihhcyk7XHJcbiAgICAgICAgICAgICAgICAgIFJlY29yZGluZ0ZpbGVVdGlscy5zZXRBdWRpb0RhdGEocmYsIGFkaCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcignUmVjb3JkaW5nIGZpbGUgb2JqZWN0IG51bGwnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnRGVsYXkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJmKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9LCB0aGlzLmRlYnVnRGVsYXkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZik7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtvYnNlcnZlci5lcnJvcihyZWFzb24pfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoJ1JlY2VpdmVkIG5vIGF1ZGlvIGRhdGEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICwgZXJyb3I6KGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgICAgICAgIC8vIEludGVycHJldCBub3QgYXMgYW4gZXJyb3IsIHRoZSBmaWxlIGlzdCBub3QgcmVjb3JkZWQgeWV0XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChudWxsKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHN0YXRlcyBhcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHdvYnM7XHJcbiAgfVxyXG5cclxuICBzYXZlRWRpdFNlbGVjdGlvbihyZWNvcmRpbmdGaWxlSWQ6IHN0cmluZyB8IG51bWJlcixlZGl0U2FtcGxlUmF0ZTpudW1iZXJ8bnVsbCxlZGl0U3RhcnRGcmFtZTpudW1iZXJ8bnVsbCxlZGl0RW5kRnJhbWU6bnVtYmVyfG51bGwpOiBPYnNlcnZhYmxlPFNwclJlY29yZGluZ0ZpbGUgfCBudWxsPiB7XHJcbiAgICBsZXQgcmVjVXJsID0gdGhpcy5hcGlFbmRQb2ludCArIFJlY29yZGluZ0ZpbGVTZXJ2aWNlLlJFQ09GSUxFX0FQSV9DVFggKyAnLycgKyByZWNvcmRpbmdGaWxlSWQ7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpVHlwZSA9PT0gQXBpVHlwZS5GSUxFUykge1xyXG4gICAgICAvLyBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlbW9cclxuICAgICAgLy8gYXBwZW5kIFVVSUQgdG8gbWFrZSByZXF1ZXN0IFVSTCB1bmlxdWUgdG8gYXZvaWQgbG9jYWxob3N0IHNlcnZlciBjYWNoaW5nXHJcbiAgICAgIHJlY1VybCA9IHJlY1VybCArICcuanNvbj9yZXF1ZXN0VVVJRD0nK1VVSUQuZ2VuZXJhdGUoKTtcclxuICAgIH1cclxuICAgIC8vY29uc29sZS5sb2coXCJQYXRoIHJlcXVlc3QgVVJMOiBcIityZWNVcmwpXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPFNwclJlY29yZGluZ0ZpbGU+KHJlY1VybCx7ZWRpdFNhbXBsZVJhdGU6ZWRpdFNhbXBsZVJhdGUsZWRpdFN0YXJ0RnJhbWU6ZWRpdFN0YXJ0RnJhbWUsZWRpdEVuZEZyYW1lOmVkaXRFbmRGcmFtZX0seyB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL3Nlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgdHlwZSBTdGF0dXM9IFwiQ1JFQVRFRFwiIHwgXCJMT0FERURcIiB8IFwiU1RBUlRFRF9UUkFJTklOR1wiIHwgXCJTVEFSVEVEXCIgfCBcIkNPTVBMRVRFRFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgVHlwZT0gJ05PUk0nIHwgJ1RFU1QnIHwgJ1RFU1RfREVGX0EnIHwgJ1NJTlVTX1RFU1QnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9ue1xyXG5cclxuICBzZXNzaW9uSWQ6IHN0cmluZyB8IG51bWJlcixcclxuICBzdGF0dXM6IFN0YXR1cyxcclxuICBzZWFsZWQ/OmJvb2xlYW4sXHJcbiAgdHlwZTogVHlwZSxcclxuICBsb2FkZWREYXRlPzpEYXRlLFxyXG4gIHN0YXJ0ZWRUcmFpbmluZ0RhdGU/OkRhdGUsXHJcbiAgc3RhcnRlZERhdGU/OkRhdGUsXHJcbiAgY29tcGxldGVkRGF0ZT86RGF0ZSxcclxuICByZXN0YXJ0ZWREYXRlPzpEYXRlLFxyXG4gIHByb2plY3Q6IHN0cmluZyxcclxuICBzY3JpcHQ6IHN0cmluZyB8IG51bWJlclxyXG5cclxufVxyXG4iXX0=
@@ -1,69 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { ApiType, SPEECHRECORDER_CONFIG } from "../../spr.config";
3
- import { UUID } from "../../utils/utils";
4
- import { Observable } from "rxjs";
5
- import { ProjectService } from "../project/project.service";
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common/http";
8
- import * as i2 from "../../spr.config";
9
- export class SessionService {
10
- get uploadCount() {
11
- return this._uploadCount;
12
- }
13
- static { this.SESSION_API_CTX = 'session'; }
14
- constructor(http, config) {
15
- this.http = http;
16
- this.config = config;
17
- this.apiEndPoint = '';
18
- this.withCredentials = false;
19
- this._uploadCount = 0;
20
- if (config && config.apiEndPoint) {
21
- this.apiEndPoint = config.apiEndPoint;
22
- }
23
- if (this.apiEndPoint !== '') {
24
- this.apiEndPoint = this.apiEndPoint + '/';
25
- }
26
- if (config != null && config.withCredentials != null) {
27
- this.withCredentials = config.withCredentials;
28
- }
29
- this.sessionsUrl = this.apiEndPoint + SessionService.SESSION_API_CTX;
30
- }
31
- sessionObserver(id) {
32
- let sessUrl = this.sessionsUrl + '/' + id;
33
- if (this.config && this.config.apiType === ApiType.FILES) {
34
- // for development and demo
35
- // append UUID to make request URL unique to avoid localhost server caching
36
- sessUrl = sessUrl + '.json?requestUUID=' + UUID.generate();
37
- }
38
- return this.http.get(sessUrl, { withCredentials: this.withCredentials });
39
- }
40
- patchSessionObserver(session, body) {
41
- let sesssUrl = this.apiEndPoint + ProjectService.PROJECT_API_CTX + '/' + session.project + '/' + SessionService.SESSION_API_CTX + '/' + session.sessionId;
42
- let wrapObs = new Observable(subscriber => {
43
- this._uploadCount++;
44
- let obs = this.http.patch(sesssUrl, body, { withCredentials: this.withCredentials });
45
- obs.subscribe({
46
- next: (value) => {
47
- subscriber.next(value);
48
- },
49
- error: error => {
50
- this._uploadCount--;
51
- subscriber.error(error);
52
- }, complete: () => {
53
- this._uploadCount--;
54
- subscriber.complete();
55
- }
56
- });
57
- });
58
- return wrapObs;
59
- }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
61
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionService }); }
62
- }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionService, decorators: [{
64
- type: Injectable
65
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SpeechRecorderConfig, decorators: [{
66
- type: Inject,
67
- args: [SPEECHRECORDER_CONFIG]
68
- }] }] });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3NwZWVjaHJlY29yZGVyL3Nlc3Npb24vc2Vzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBQyxPQUFPLEVBQUUscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFFdEYsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7O0FBSzFELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO2FBQ3NCLG9CQUFlLEdBQUMsU0FBUyxBQUFWLENBQVc7SUFNakQsWUFBb0IsSUFBZSxFQUF3QyxNQUE0QjtRQUFuRixTQUFJLEdBQUosSUFBSSxDQUFXO1FBQXdDLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBTC9GLGdCQUFXLEdBQUMsRUFBRSxDQUFDO1FBRU4sb0JBQWUsR0FBUyxLQUFLLENBQUM7UUFDdkMsaUJBQVksR0FBQyxDQUFDLENBQUM7UUFJckIsSUFBRyxNQUFNLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBRyxJQUFJLENBQUMsV0FBVyxLQUFLLEVBQUUsRUFBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDLFdBQVcsR0FBQyxHQUFHLENBQUE7UUFDdkMsQ0FBQztRQUNELElBQUcsTUFBTSxJQUFFLElBQUksSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFFLElBQUksRUFBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxlQUFlLENBQUM7SUFDdkUsQ0FBQztJQUVELGVBQWUsQ0FBQyxFQUFVO1FBRXhCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pELDJCQUEyQjtZQUMzQiwyRUFBMkU7WUFDM0UsT0FBTyxHQUFHLE9BQU8sR0FBRyxvQkFBb0IsR0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVUsT0FBTyxFQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBRW5GLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFlLEVBQUMsSUFBUTtRQUUzQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLGNBQWMsQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUE7UUFFekosSUFBSSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQVUsVUFBVSxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFVLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDLENBQUM7WUFDNUYsR0FBRyxDQUFDLFNBQVMsQ0FBQztnQkFDZCxJQUFJLEVBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFFYixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QixDQUFDO2dCQUNBLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLENBQUMsRUFBRSxRQUFRLEVBQUMsR0FBRyxFQUFFO29CQUNmLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOytHQTFEVSxjQUFjLDRDQVVtQixxQkFBcUI7bUhBVnRELGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQVc0QixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0FwaVR5cGUsIFNQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc2Vzc2lvblwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7UHJvamVjdFNlcnZpY2V9IGZyb20gXCIuLi9wcm9qZWN0L3Byb2plY3Quc2VydmljZVwiO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uU2VydmljZSB7XHJcbiAgZ2V0IHVwbG9hZENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXBsb2FkQ291bnQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VTU0lPTl9BUElfQ1RYPSdzZXNzaW9uJztcclxuICBwcml2YXRlIGFwaUVuZFBvaW50PScnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbnNVcmw6c3RyaW5nO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgd2l0aENyZWRlbnRpYWxzOmJvb2xlYW49ZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdXBsb2FkQ291bnQ9MDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOkh0dHBDbGllbnQsQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHByaXZhdGUgY29uZmlnPzpTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG5cclxuICAgIGlmKGNvbmZpZyAmJiBjb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgICAgdGhpcy5hcGlFbmRQb2ludD1jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmFwaUVuZFBvaW50ICE9PSAnJyl7XHJcbiAgICAgIHRoaXMuYXBpRW5kUG9pbnQ9dGhpcy5hcGlFbmRQb2ludCsnLydcclxuICAgIH1cclxuICAgIGlmKGNvbmZpZyE9bnVsbCAmJiBjb25maWcud2l0aENyZWRlbnRpYWxzIT1udWxsKXtcclxuICAgICAgdGhpcy53aXRoQ3JlZGVudGlhbHM9Y29uZmlnLndpdGhDcmVkZW50aWFscztcclxuICAgIH1cclxuICAgIHRoaXMuc2Vzc2lvbnNVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYO1xyXG4gIH1cclxuXHJcbiAgc2Vzc2lvbk9ic2VydmVyKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcclxuXHJcbiAgICBsZXQgc2Vzc1VybCA9IHRoaXMuc2Vzc2lvbnNVcmwgKyAnLycgKyBpZDtcclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlUeXBlID09PSBBcGlUeXBlLkZJTEVTKSB7XHJcbiAgICAgIC8vIGZvciBkZXZlbG9wbWVudCBhbmQgZGVtb1xyXG4gICAgICAvLyBhcHBlbmQgVVVJRCB0byBtYWtlIHJlcXVlc3QgVVJMIHVuaXF1ZSB0byBhdm9pZCBsb2NhbGhvc3Qgc2VydmVyIGNhY2hpbmdcclxuICAgICAgc2Vzc1VybCA9IHNlc3NVcmwgKyAnLmpzb24/cmVxdWVzdFVVSUQ9JytVVUlELmdlbmVyYXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTZXNzaW9uPihzZXNzVXJsLHsgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFscyB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwYXRjaFNlc3Npb25PYnNlcnZlcihzZXNzaW9uOlNlc3Npb24sYm9keTphbnkpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcclxuXHJcbiAgICBsZXQgc2Vzc3NVcmwgPSB0aGlzLmFwaUVuZFBvaW50ICsgUHJvamVjdFNlcnZpY2UuUFJPSkVDVF9BUElfQ1RYICsgJy8nICsgc2Vzc2lvbi5wcm9qZWN0ICsgJy8nICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYICsgJy8nICsgc2Vzc2lvbi5zZXNzaW9uSWRcclxuXHJcbiAgICBsZXQgd3JhcE9icyA9IG5ldyBPYnNlcnZhYmxlPFNlc3Npb24+KHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICB0aGlzLl91cGxvYWRDb3VudCsrO1xyXG4gICAgICBsZXQgb2JzID0gdGhpcy5odHRwLnBhdGNoPFNlc3Npb24+KHNlc3NzVXJsLCBib2R5LCB7d2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFsc30pO1xyXG4gICAgICBvYnMuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDoodmFsdWUpID0+XHJcbiAgICAgIHtcclxuICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgICxlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuX3VwbG9hZENvdW50LS07XHJcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0sIGNvbXBsZXRlOigpID0+IHtcclxuICAgICAgICB0aGlzLl91cGxvYWRDb3VudC0tO1xyXG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3cmFwT2JzO1xyXG4gIH1cclxuXHJcbiAgLy8gcHV0U2Vzc2lvbk9ic2VydmVyKHNlc3Npb246IFNlc3Npb24pOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcclxuICAvL1xyXG4gIC8vICAgbGV0IHNlc3NzVXJsID0gdGhpcy5hcGlFbmRQb2ludCArIFByb2plY3RTZXJ2aWNlLlBST0pFQ1RfQVBJX0NUWCArICcvJyArIHNlc3Npb24ucHJvamVjdCArICcvJyArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWCArICcvJyArIHNlc3Npb24uc2Vzc2lvblxyXG4gIC8vXHJcbiAgLy8gICBsZXQgd3JhcE9icyA9IG5ldyBPYnNlcnZhYmxlPFNlc3Npb24+KHN1YnNjcmliZXIgPT4ge1xyXG4gIC8vICAgICB0aGlzLl91cGxvYWRDb3VudCsrO1xyXG4gIC8vICAgICBsZXQgb2JzID0gdGhpcy5odHRwLnB1dDxTZXNzaW9uPihzZXNzc1VybCwgc2Vzc2lvbiwge3dpdGhDcmVkZW50aWFsczogdGhpcy53aXRoQ3JlZGVudGlhbHN9KTtcclxuICAvLyAgICAgb2JzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAvLyAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xyXG4gIC8vICAgICB9LCBlcnJvciA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5fdXBsb2FkQ291bnQtLTtcclxuICAvLyAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcclxuICAvLyAgICAgfSwgKCkgPT4ge1xyXG4gIC8vICAgICAgIHRoaXMuX3VwbG9hZENvdW50LS07XHJcbiAgLy8gICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgcmV0dXJuIHdyYXBPYnM7XHJcbiAgLy8gfVxyXG4gIC8vXHJcblxyXG5cclxufVxyXG5cclxuXHJcblxyXG4iXX0=
@@ -1,46 +0,0 @@
1
- import { Component, Inject } from "@angular/core";
2
- import { MAT_DIALOG_DATA } from "@angular/material/dialog";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/material/dialog";
5
- import * as i2 from "@angular/material/icon";
6
- import * as i3 from "@angular/material/button";
7
- export class SessionFinishedDialog {
8
- constructor(dialogRef, data) {
9
- this.dialogRef = dialogRef;
10
- this.data = data;
11
- }
12
- closeDialog() {
13
- this.dialogRef.close();
14
- }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
16
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SessionFinishedDialog, selector: "spr-session-finished-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon [style.color]="'green'">done_all</mat-icon> Session finished</h1>
17
- <div mat-dialog-content>
18
-
19
- <p>Thank you! The recording session is complete.</p>
20
-
21
- </div>
22
- <div mat-dialog-actions>
23
- <button mat-button (click)="closeDialog()">OK</button>
24
- </div>
25
- `, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] }); }
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SessionFinishedDialog, decorators: [{
28
- type: Component,
29
- args: [{
30
- selector: 'spr-session-finished-dialog',
31
- template: `<h1 mat-dialog-title><mat-icon [style.color]="'green'">done_all</mat-icon> Session finished</h1>
32
- <div mat-dialog-content>
33
-
34
- <p>Thank you! The recording session is complete.</p>
35
-
36
- </div>
37
- <div mat-dialog-actions>
38
- <button mat-button (click)="closeDialog()">OK</button>
39
- </div>
40
- `
41
- }]
42
- }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
43
- type: Inject,
44
- args: [MAT_DIALOG_DATA]
45
- }] }] });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbl9maW5pc2hlZF9kaWFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9uX2ZpbmlzaGVkX2RpYWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDOzs7OztBQWV6RSxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQ1MsU0FBOEMsRUFDckIsSUFBUztRQURsQyxjQUFTLEdBQVQsU0FBUyxDQUFxQztRQUNyQixTQUFJLEdBQUosSUFBSSxDQUFLO0lBQUksQ0FBQztJQUVoRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDOytHQVJVLHFCQUFxQiw4Q0FJdEIsZUFBZTttR0FKZCxxQkFBcUIsbUVBWHRCOzs7Ozs7Ozs7R0FTVDs7NEZBRVUscUJBQXFCO2tCQWJqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLFFBQVEsRUFBRTs7Ozs7Ozs7O0dBU1Q7aUJBQ0Y7OzBCQUtJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc3ByLXNlc3Npb24tZmluaXNoZWQtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZTogYDxoMSBtYXQtZGlhbG9nLXRpdGxlPjxtYXQtaWNvbiBbc3R5bGUuY29sb3JdPVwiJ2dyZWVuJ1wiPmRvbmVfYWxsPC9tYXQtaWNvbj4gU2Vzc2lvbiBmaW5pc2hlZDwvaDE+XHJcbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcblxyXG4gICAgPHA+VGhhbmsgeW91ISBUaGUgcmVjb3JkaW5nIHNlc3Npb24gaXMgY29tcGxldGUuPC9wPlxyXG5cclxuICA8L2Rpdj5cclxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPk9LPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkZpbmlzaGVkRGlhbG9ne1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZXNzaW9uRmluaXNoZWREaWFsb2c+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHsgfVxyXG5cclxuICBjbG9zZURpYWxvZygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=