@ckeditor/ckeditor5-cloud-services 41.4.2 → 42.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,6 +11,12 @@ CKEditor 5's [Cloud Services](https://ckeditor.com/ckeditor-cloud-services/
11
11
 
12
12
  See the [`@ckeditor/ckeditor5-cloud-services` package](https://ckeditor.com/docs/ckeditor5/latest/api/cloud-services.html) page in [CKEditor 5 documentation](https://ckeditor.com/docs/ckeditor5/latest/).
13
13
 
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install ckeditor5
18
+ ```
19
+
14
20
  ## License
15
21
 
16
22
  Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html). For full details about the license, please check the `LICENSE.md` file or [https://ckeditor.com/legal/ckeditor-oss-license](https://ckeditor.com/legal/ckeditor-oss-license).
package/dist/index.js CHANGED
@@ -9,10 +9,47 @@ const DEFAULT_OPTIONS = {
9
9
  autoRefresh: true
10
10
  };
11
11
  const DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000;
12
- class Token extends ObservableMixin() {
12
+ /**
13
+ * Class representing the token used for communication with CKEditor Cloud Services.
14
+ * Value of the token is retrieving from the specified URL and is refreshed every 1 hour by default.
15
+ */ class Token extends /* #__PURE__ */ ObservableMixin() {
16
+ /**
17
+ * Base refreshing function.
18
+ */ _refresh;
19
+ _options;
20
+ _tokenRefreshTimeout;
21
+ /**
22
+ * Creates `Token` instance.
23
+ * Method `init` should be called after using the constructor or use `create` method instead.
24
+ *
25
+ * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the
26
+ * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.
27
+ */ constructor(tokenUrlOrRefreshToken, options = {}){
28
+ super();
29
+ if (!tokenUrlOrRefreshToken) {
30
+ /**
31
+ * A `tokenUrl` must be provided as the first constructor argument.
32
+ *
33
+ * @error token-missing-token-url
34
+ */ throw new CKEditorError('token-missing-token-url', this);
35
+ }
36
+ if (options.initValue) {
37
+ this._validateTokenValue(options.initValue);
38
+ }
39
+ this.set('value', options.initValue);
40
+ if (typeof tokenUrlOrRefreshToken === 'function') {
41
+ this._refresh = tokenUrlOrRefreshToken;
42
+ } else {
43
+ this._refresh = ()=>defaultRefreshToken(tokenUrlOrRefreshToken);
44
+ }
45
+ this._options = {
46
+ ...DEFAULT_OPTIONS,
47
+ ...options
48
+ };
49
+ }
13
50
  /**
14
- * Initializes the token.
15
- */ init() {
51
+ * Initializes the token.
52
+ */ init() {
16
53
  return new Promise((resolve, reject)=>{
17
54
  if (!this.value) {
18
55
  this.refreshToken().then(resolve).catch(reject);
@@ -25,8 +62,8 @@ class Token extends ObservableMixin() {
25
62
  });
26
63
  }
27
64
  /**
28
- * Refresh token method. Useful in a method form as it can be override in tests.
29
- */ refreshToken() {
65
+ * Refresh token method. Useful in a method form as it can be override in tests.
66
+ */ refreshToken() {
30
67
  return this._refresh().then((value)=>{
31
68
  this._validateTokenValue(value);
32
69
  this.set('value', value);
@@ -37,15 +74,15 @@ class Token extends ObservableMixin() {
37
74
  });
38
75
  }
39
76
  /**
40
- * Destroys token instance. Stops refreshing.
41
- */ destroy() {
77
+ * Destroys token instance. Stops refreshing.
78
+ */ destroy() {
42
79
  clearTimeout(this._tokenRefreshTimeout);
43
80
  }
44
81
  /**
45
- * Checks whether the provided token follows the JSON Web Tokens (JWT) format.
46
- *
47
- * @param tokenValue The token to validate.
48
- */ _validateTokenValue(tokenValue) {
82
+ * Checks whether the provided token follows the JSON Web Tokens (JWT) format.
83
+ *
84
+ * @param tokenValue The token to validate.
85
+ */ _validateTokenValue(tokenValue) {
49
86
  // The token must be a string.
50
87
  const isString = typeof tokenValue === 'string';
51
88
  // The token must be a plain string without quotes ("").
@@ -55,15 +92,15 @@ class Token extends ObservableMixin() {
55
92
  const isJWTFormat = isString && tokenValue.split('.').length === 3;
56
93
  if (!(isPlainString && isJWTFormat)) {
57
94
  /**
58
- * The provided token must follow the [JSON Web Tokens](https://jwt.io/introduction/) format.
59
- *
60
- * @error token-not-in-jwt-format
61
- */ throw new CKEditorError('token-not-in-jwt-format', this);
95
+ * The provided token must follow the [JSON Web Tokens](https://jwt.io/introduction/) format.
96
+ *
97
+ * @error token-not-in-jwt-format
98
+ */ throw new CKEditorError('token-not-in-jwt-format', this);
62
99
  }
63
100
  }
64
101
  /**
65
- * Registers a refresh token timeout for the time taken from token.
66
- */ _registerRefreshTokenTimeout() {
102
+ * Registers a refresh token timeout for the time taken from token.
103
+ */ _registerRefreshTokenTimeout() {
67
104
  const tokenRefreshTimeoutTime = this._getTokenRefreshTimeoutTime();
68
105
  clearTimeout(this._tokenRefreshTimeout);
69
106
  this._tokenRefreshTimeout = setTimeout(()=>{
@@ -71,10 +108,10 @@ class Token extends ObservableMixin() {
71
108
  }, tokenRefreshTimeoutTime);
72
109
  }
73
110
  /**
74
- * Returns token refresh timeout time calculated from expire time in the token payload.
75
- *
76
- * If the token parse fails or the token payload doesn't contain, the default DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME is returned.
77
- */ _getTokenRefreshTimeoutTime() {
111
+ * Returns token refresh timeout time calculated from expire time in the token payload.
112
+ *
113
+ * If the token parse fails or the token payload doesn't contain, the default DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME is returned.
114
+ */ _getTokenRefreshTimeoutTime() {
78
115
  try {
79
116
  const [, binaryTokenPayload] = this.value.split('.');
80
117
  const { exp: tokenExpireTime } = JSON.parse(atob(binaryTokenPayload));
@@ -88,43 +125,14 @@ class Token extends ObservableMixin() {
88
125
  }
89
126
  }
90
127
  /**
91
- * Creates a initialized {@link module:cloud-services/token/token~Token} instance.
92
- *
93
- * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the
94
- * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.
95
- */ static create(tokenUrlOrRefreshToken, options = {}) {
128
+ * Creates a initialized {@link module:cloud-services/token/token~Token} instance.
129
+ *
130
+ * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the
131
+ * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.
132
+ */ static create(tokenUrlOrRefreshToken, options = {}) {
96
133
  const token = new Token(tokenUrlOrRefreshToken, options);
97
134
  return token.init();
98
135
  }
99
- /**
100
- * Creates `Token` instance.
101
- * Method `init` should be called after using the constructor or use `create` method instead.
102
- *
103
- * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the
104
- * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.
105
- */ constructor(tokenUrlOrRefreshToken, options = {}){
106
- super();
107
- if (!tokenUrlOrRefreshToken) {
108
- /**
109
- * A `tokenUrl` must be provided as the first constructor argument.
110
- *
111
- * @error token-missing-token-url
112
- */ throw new CKEditorError('token-missing-token-url', this);
113
- }
114
- if (options.initValue) {
115
- this._validateTokenValue(options.initValue);
116
- }
117
- this.set('value', options.initValue);
118
- if (typeof tokenUrlOrRefreshToken === 'function') {
119
- this._refresh = tokenUrlOrRefreshToken;
120
- } else {
121
- this._refresh = ()=>defaultRefreshToken(tokenUrlOrRefreshToken);
122
- }
123
- this._options = {
124
- ...DEFAULT_OPTIONS,
125
- ...options
126
- };
127
- }
128
136
  }
129
137
  /**
130
138
  * This function is called in a defined interval by the {@link ~Token} class. It also can be invoked manually.
@@ -139,10 +147,10 @@ class Token extends ObservableMixin() {
139
147
  const xhrResponse = xhr.response;
140
148
  if (statusCode < 200 || statusCode > 299) {
141
149
  /**
142
- * Cannot download new token from the provided url.
143
- *
144
- * @error token-cannot-download-new-token
145
- */ return reject(new CKEditorError('token-cannot-download-new-token', null));
150
+ * Cannot download new token from the provided url.
151
+ *
152
+ * @error token-cannot-download-new-token
153
+ */ return reject(new CKEditorError('token-cannot-download-new-token', null));
146
154
  }
147
155
  return resolve(xhrResponse);
148
156
  });
@@ -153,34 +161,79 @@ class Token extends ObservableMixin() {
153
161
  }
154
162
 
155
163
  const BASE64_HEADER_REG_EXP = /^data:(\S*?);base64,/;
156
- class FileUploader extends EmitterMixin() {
164
+ /**
165
+ * FileUploader class used to upload single file.
166
+ */ class FileUploader extends /* #__PURE__ */ EmitterMixin() {
167
+ /**
168
+ * A file that is being uploaded.
169
+ */ file;
170
+ xhr;
171
+ /**
172
+ * CKEditor Cloud Services access token.
173
+ */ _token;
174
+ /**
175
+ * CKEditor Cloud Services API address.
176
+ */ _apiAddress;
177
+ /**
178
+ * Creates `FileUploader` instance.
179
+ *
180
+ * @param fileOrData A blob object or a data string encoded with Base64.
181
+ * @param token Token used for authentication.
182
+ * @param apiAddress API address.
183
+ */ constructor(fileOrData, token, apiAddress){
184
+ super();
185
+ if (!fileOrData) {
186
+ /**
187
+ * File must be provided as the first argument.
188
+ *
189
+ * @error fileuploader-missing-file
190
+ */ throw new CKEditorError('fileuploader-missing-file', null);
191
+ }
192
+ if (!token) {
193
+ /**
194
+ * Token must be provided as the second argument.
195
+ *
196
+ * @error fileuploader-missing-token
197
+ */ throw new CKEditorError('fileuploader-missing-token', null);
198
+ }
199
+ if (!apiAddress) {
200
+ /**
201
+ * Api address must be provided as the third argument.
202
+ *
203
+ * @error fileuploader-missing-api-address
204
+ */ throw new CKEditorError('fileuploader-missing-api-address', null);
205
+ }
206
+ this.file = _isBase64(fileOrData) ? _base64ToBlob(fileOrData) : fileOrData;
207
+ this._token = token;
208
+ this._apiAddress = apiAddress;
209
+ }
157
210
  /**
158
- * Registers callback on `progress` event.
159
- */ onProgress(callback) {
211
+ * Registers callback on `progress` event.
212
+ */ onProgress(callback) {
160
213
  this.on('progress', (event, data)=>callback(data));
161
214
  return this;
162
215
  }
163
216
  /**
164
- * Registers callback on `error` event. Event is called once when error occurs.
165
- */ onError(callback) {
217
+ * Registers callback on `error` event. Event is called once when error occurs.
218
+ */ onError(callback) {
166
219
  this.once('error', (event, data)=>callback(data));
167
220
  return this;
168
221
  }
169
222
  /**
170
- * Aborts upload process.
171
- */ abort() {
223
+ * Aborts upload process.
224
+ */ abort() {
172
225
  this.xhr.abort();
173
226
  }
174
227
  /**
175
- * Sends XHR request to API.
176
- */ send() {
228
+ * Sends XHR request to API.
229
+ */ send() {
177
230
  this._prepareRequest();
178
231
  this._attachXHRListeners();
179
232
  return this._sendRequest();
180
233
  }
181
234
  /**
182
- * Prepares XHR request.
183
- */ _prepareRequest() {
235
+ * Prepares XHR request.
236
+ */ _prepareRequest() {
184
237
  const xhr = new XMLHttpRequest();
185
238
  xhr.open('POST', this._apiAddress);
186
239
  xhr.setRequestHeader('Authorization', this._token.value);
@@ -188,8 +241,8 @@ class FileUploader extends EmitterMixin() {
188
241
  this.xhr = xhr;
189
242
  }
190
243
  /**
191
- * Attaches listeners to the XHR.
192
- */ _attachXHRListeners() {
244
+ * Attaches listeners to the XHR.
245
+ */ _attachXHRListeners() {
193
246
  const xhr = this.xhr;
194
247
  const onError = (message)=>{
195
248
  return ()=>this.fire('error', message);
@@ -215,8 +268,8 @@ class FileUploader extends EmitterMixin() {
215
268
  });
216
269
  }
217
270
  /**
218
- * Sends XHR request.
219
- */ _sendRequest() {
271
+ * Sends XHR request.
272
+ */ _sendRequest() {
220
273
  const formData = new FormData();
221
274
  const xhr = this.xhr;
222
275
  formData.append('file', this.file);
@@ -227,10 +280,10 @@ class FileUploader extends EmitterMixin() {
227
280
  if (statusCode < 200 || statusCode > 299) {
228
281
  if (xhrResponse.message) {
229
282
  /**
230
- * Uploading file failed.
231
- *
232
- * @error fileuploader-uploading-data-failed
233
- */ return reject(new CKEditorError('fileuploader-uploading-data-failed', this, {
283
+ * Uploading file failed.
284
+ *
285
+ * @error fileuploader-uploading-data-failed
286
+ */ return reject(new CKEditorError('fileuploader-uploading-data-failed', this, {
234
287
  message: xhrResponse.message
235
288
  }));
236
289
  }
@@ -243,39 +296,6 @@ class FileUploader extends EmitterMixin() {
243
296
  xhr.send(formData);
244
297
  });
245
298
  }
246
- /**
247
- * Creates `FileUploader` instance.
248
- *
249
- * @param fileOrData A blob object or a data string encoded with Base64.
250
- * @param token Token used for authentication.
251
- * @param apiAddress API address.
252
- */ constructor(fileOrData, token, apiAddress){
253
- super();
254
- if (!fileOrData) {
255
- /**
256
- * File must be provided as the first argument.
257
- *
258
- * @error fileuploader-missing-file
259
- */ throw new CKEditorError('fileuploader-missing-file', null);
260
- }
261
- if (!token) {
262
- /**
263
- * Token must be provided as the second argument.
264
- *
265
- * @error fileuploader-missing-token
266
- */ throw new CKEditorError('fileuploader-missing-token', null);
267
- }
268
- if (!apiAddress) {
269
- /**
270
- * Api address must be provided as the third argument.
271
- *
272
- * @error fileuploader-missing-api-address
273
- */ throw new CKEditorError('fileuploader-missing-api-address', null);
274
- }
275
- this.file = _isBase64(fileOrData) ? _base64ToBlob(fileOrData) : fileOrData;
276
- this._token = token;
277
- this._apiAddress = apiAddress;
278
- }
279
299
  }
280
300
  /**
281
301
  * Transforms Base64 string data into file.
@@ -299,10 +319,10 @@ class FileUploader extends EmitterMixin() {
299
319
  });
300
320
  } catch (error) {
301
321
  /**
302
- * Problem with decoding Base64 image data.
303
- *
304
- * @error fileuploader-decoding-image-data-error
305
- */ throw new CKEditorError('fileuploader-decoding-image-data-error', null);
322
+ * Problem with decoding Base64 image data.
323
+ *
324
+ * @error fileuploader-decoding-image-data-error
325
+ */ throw new CKEditorError('fileuploader-decoding-image-data-error', null);
306
326
  }
307
327
  }
308
328
  /**
@@ -315,93 +335,138 @@ class FileUploader extends EmitterMixin() {
315
335
  return !!(match && match.length);
316
336
  }
317
337
 
318
- class UploadGateway {
319
- /**
320
- * Creates a {@link module:cloud-services/uploadgateway/fileuploader~FileUploader} instance that wraps
321
- * file upload process. The file is being sent at a time when the
322
- * {@link module:cloud-services/uploadgateway/fileuploader~FileUploader#send} method is called.
323
- *
324
- * ```ts
325
- * const token = await Token.create( 'https://token-endpoint' );
326
- * new UploadGateway( token, 'https://example.org' )
327
- * .upload( 'FILE' )
328
- * .onProgress( ( data ) => console.log( data ) )
329
- * .send()
330
- * .then( ( response ) => console.log( response ) );
331
- * ```
332
- *
333
- * @param {Blob|String} fileOrData A blob object or a data string encoded with Base64.
334
- * @returns {module:cloud-services/uploadgateway/fileuploader~FileUploader} Returns `FileUploader` instance.
335
- */ upload(fileOrData) {
336
- return new FileUploader(fileOrData, this._token, this._apiAddress);
337
- }
338
+ /**
339
+ * UploadGateway abstracts file uploads to CKEditor Cloud Services.
340
+ */ class UploadGateway {
338
341
  /**
339
- * Creates `UploadGateway` instance.
340
- *
341
- * @param token Token used for authentication.
342
- * @param apiAddress API address.
343
- */ constructor(token, apiAddress){
342
+ * CKEditor Cloud Services access token.
343
+ */ _token;
344
+ /**
345
+ * CKEditor Cloud Services API address.
346
+ */ _apiAddress;
347
+ /**
348
+ * Creates `UploadGateway` instance.
349
+ *
350
+ * @param token Token used for authentication.
351
+ * @param apiAddress API address.
352
+ */ constructor(token, apiAddress){
344
353
  if (!token) {
345
354
  /**
346
- * Token must be provided.
347
- *
348
- * @error uploadgateway-missing-token
349
- */ throw new CKEditorError('uploadgateway-missing-token', null);
355
+ * Token must be provided.
356
+ *
357
+ * @error uploadgateway-missing-token
358
+ */ throw new CKEditorError('uploadgateway-missing-token', null);
350
359
  }
351
360
  if (!apiAddress) {
352
361
  /**
353
- * Api address must be provided.
354
- *
355
- * @error uploadgateway-missing-api-address
356
- */ throw new CKEditorError('uploadgateway-missing-api-address', null);
362
+ * Api address must be provided.
363
+ *
364
+ * @error uploadgateway-missing-api-address
365
+ */ throw new CKEditorError('uploadgateway-missing-api-address', null);
357
366
  }
358
367
  this._token = token;
359
368
  this._apiAddress = apiAddress;
360
369
  }
370
+ /**
371
+ * Creates a {@link module:cloud-services/uploadgateway/fileuploader~FileUploader} instance that wraps
372
+ * file upload process. The file is being sent at a time when the
373
+ * {@link module:cloud-services/uploadgateway/fileuploader~FileUploader#send} method is called.
374
+ *
375
+ * ```ts
376
+ * const token = await Token.create( 'https://token-endpoint' );
377
+ * new UploadGateway( token, 'https://example.org' )
378
+ * .upload( 'FILE' )
379
+ * .onProgress( ( data ) => console.log( data ) )
380
+ * .send()
381
+ * .then( ( response ) => console.log( response ) );
382
+ * ```
383
+ *
384
+ * @param {Blob|String} fileOrData A blob object or a data string encoded with Base64.
385
+ * @returns {module:cloud-services/uploadgateway/fileuploader~FileUploader} Returns `FileUploader` instance.
386
+ */ upload(fileOrData) {
387
+ return new FileUploader(fileOrData, this._token, this._apiAddress);
388
+ }
361
389
  }
362
390
 
363
- class CloudServicesCore extends ContextPlugin {
391
+ /**
392
+ * The `CloudServicesCore` plugin exposes the base API for communication with CKEditor Cloud Services.
393
+ */ class CloudServicesCore extends ContextPlugin {
364
394
  /**
365
- * @inheritDoc
366
- */ static get pluginName() {
395
+ * @inheritDoc
396
+ */ static get pluginName() {
367
397
  return 'CloudServicesCore';
368
398
  }
369
399
  /**
370
- * Creates the {@link module:cloud-services/token/token~Token} instance.
371
- *
372
- * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the
373
- * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.
374
- * @param options.initValue Initial value of the token.
375
- * @param options.autoRefresh Specifies whether to start the refresh automatically.
376
- */ createToken(tokenUrlOrRefreshToken, options) {
400
+ * Creates the {@link module:cloud-services/token/token~Token} instance.
401
+ *
402
+ * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the
403
+ * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.
404
+ * @param options.initValue Initial value of the token.
405
+ * @param options.autoRefresh Specifies whether to start the refresh automatically.
406
+ */ createToken(tokenUrlOrRefreshToken, options) {
377
407
  return new Token(tokenUrlOrRefreshToken, options);
378
408
  }
379
409
  /**
380
- * Creates the {@link module:cloud-services/uploadgateway/uploadgateway~UploadGateway} instance.
381
- *
382
- * @param token Token used for authentication.
383
- * @param apiAddress API address.
384
- */ createUploadGateway(token, apiAddress) {
410
+ * Creates the {@link module:cloud-services/uploadgateway/uploadgateway~UploadGateway} instance.
411
+ *
412
+ * @param token Token used for authentication.
413
+ * @param apiAddress API address.
414
+ */ createUploadGateway(token, apiAddress) {
385
415
  return new UploadGateway(token, apiAddress);
386
416
  }
387
417
  }
388
418
 
389
- class CloudServices extends ContextPlugin {
419
+ /**
420
+ * Plugin introducing the integration between CKEditor 5 and CKEditor Cloud Services .
421
+ *
422
+ * It initializes the token provider based on
423
+ * the {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig `config.cloudService`}.
424
+ */ class CloudServices extends ContextPlugin {
425
+ /**
426
+ * The authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the
427
+ * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.
428
+ */ tokenUrl;
429
+ /**
430
+ * The URL to which the files should be uploaded.
431
+ */ uploadUrl;
432
+ /**
433
+ * The URL for web socket communication, used by the `RealTimeCollaborativeEditing` plugin. Every customer (organization in the CKEditor
434
+ * Ecosystem dashboard) has their own, unique URLs to communicate with CKEditor Cloud Services. The URL can be found in the
435
+ * CKEditor Ecosystem customer dashboard.
436
+ *
437
+ * Note: Unlike most plugins, `RealTimeCollaborativeEditing` is not included in any CKEditor 5 build and needs to be installed manually.
438
+ * Check [Collaboration overview](https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/overview.html) for more details.
439
+ */ webSocketUrl;
440
+ /**
441
+ * An optional parameter used for integration with CKEditor Cloud Services when uploading the editor build to cloud services.
442
+ *
443
+ * Whenever the editor build or the configuration changes, this parameter should be set to a new, unique value to differentiate
444
+ * the new bundle (build + configuration) from the old ones.
445
+ */ bundleVersion;
390
446
  /**
391
- * @inheritDoc
392
- */ static get pluginName() {
447
+ * Other plugins use this token for the authorization process. It handles token requesting and refreshing.
448
+ * Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.
449
+ *
450
+ * @readonly
451
+ */ token = null;
452
+ /**
453
+ * A map of token object instances keyed by the token URLs.
454
+ */ _tokens = new Map();
455
+ /**
456
+ * @inheritDoc
457
+ */ static get pluginName() {
393
458
  return 'CloudServices';
394
459
  }
395
460
  /**
396
- * @inheritDoc
397
- */ static get requires() {
461
+ * @inheritDoc
462
+ */ static get requires() {
398
463
  return [
399
464
  CloudServicesCore
400
465
  ];
401
466
  }
402
467
  /**
403
- * @inheritDoc
404
- */ async init() {
468
+ * @inheritDoc
469
+ */ async init() {
405
470
  const config = this.context.config;
406
471
  const options = config.get('cloudServices') || {};
407
472
  for (const [key, value] of Object.entries(options)){
@@ -416,11 +481,11 @@ class CloudServices extends ContextPlugin {
416
481
  this._tokens.set(this.tokenUrl, this.token);
417
482
  }
418
483
  /**
419
- * Registers an additional authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the
420
- * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.
421
- *
422
- * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.
423
- */ async registerTokenUrl(tokenUrl) {
484
+ * Registers an additional authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the
485
+ * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.
486
+ *
487
+ * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.
488
+ */ async registerTokenUrl(tokenUrl) {
424
489
  // Reuse the token instance in case of multiple features using the same token URL.
425
490
  if (this._tokens.has(tokenUrl)) {
426
491
  return this.getTokenFor(tokenUrl);
@@ -431,40 +496,28 @@ class CloudServices extends ContextPlugin {
431
496
  return token;
432
497
  }
433
498
  /**
434
- * Returns an authentication token provider previously registered by {@link #registerTokenUrl}.
435
- *
436
- * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.
437
- */ getTokenFor(tokenUrl) {
499
+ * Returns an authentication token provider previously registered by {@link #registerTokenUrl}.
500
+ *
501
+ * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.
502
+ */ getTokenFor(tokenUrl) {
438
503
  const token = this._tokens.get(tokenUrl);
439
504
  if (!token) {
440
505
  /**
441
- * The provided `tokenUrl` was not registered by {@link module:cloud-services/cloudservices~CloudServices#registerTokenUrl}.
442
- *
443
- * @error cloudservices-token-not-registered
444
- */ throw new CKEditorError('cloudservices-token-not-registered', this);
506
+ * The provided `tokenUrl` was not registered by {@link module:cloud-services/cloudservices~CloudServices#registerTokenUrl}.
507
+ *
508
+ * @error cloudservices-token-not-registered
509
+ */ throw new CKEditorError('cloudservices-token-not-registered', this);
445
510
  }
446
511
  return token;
447
512
  }
448
513
  /**
449
- * @inheritDoc
450
- */ destroy() {
514
+ * @inheritDoc
515
+ */ destroy() {
451
516
  super.destroy();
452
517
  for (const token of this._tokens.values()){
453
518
  token.destroy();
454
519
  }
455
520
  }
456
- constructor(){
457
- super(...arguments);
458
- /**
459
- * Other plugins use this token for the authorization process. It handles token requesting and refreshing.
460
- * Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.
461
- *
462
- * @readonly
463
- */ this.token = null;
464
- /**
465
- * A map of token object instances keyed by the token URLs.
466
- */ this._tokens = new Map();
467
- }
468
521
  }
469
522
 
470
523
  export { CloudServices, CloudServicesCore };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.js","../src/token/token.ts","../src/uploadgateway/fileuploader.ts","../src/uploadgateway/uploadgateway.ts","../src/cloudservicescore.ts","../src/cloudservices.ts"],"names":["DEFAULT_OPTIONS","autoRefresh","DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME","Token","ObservableMixin","init","Promise","resolve","reject","value","refreshToken","then","catch","_options","_registerRefreshTokenTimeout","_refresh","_validateTokenValue","set","destroy","clearTimeout","_tokenRefreshTimeout","tokenValue","isString","isPlainString","test","isJWTFormat","split","length","CKEditorError","tokenRefreshTimeoutTime","_getTokenRefreshTimeoutTime","setTimeout","binaryTokenPayload","exp","tokenExpireTime","JSON","parse","atob","Math","floor","Date","now","err","create","tokenUrlOrRefreshToken","options","token","constructor","initValue","defaultRefreshToken","tokenUrl","xhr","XMLHttpRequest","open","addEventListener","statusCode","status","xhrResponse","response","Error","send","BASE64_HEADER_REG_EXP","FileUploader","EmitterMixin","onProgress","callback","on","event","data","onError","once","abort","_prepareRequest","_attachXHRListeners","_sendRequest","_apiAddress","setRequestHeader","_token","responseType","message","fire","upload","lengthComputable","total","uploaded","loaded","error","formData","FormData","append","file","fileOrData","apiAddress","_isBase64","_base64ToBlob","base64","sliceSize","contentType","match","base64Data","replace","byteArrays","offset","slice","byteNumbers","Array","i","charCodeAt","push","Uint8Array","Blob","type","string","UploadGateway","CloudServicesCore","ContextPlugin","pluginName","createToken","createUploadGateway","CloudServices","requires","config","context","get","key","Object","entries","cloudServicesCore","plugins","_tokens","registerTokenUrl","has","getTokenFor","values","Map"],"mappings":"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","file":"index.js.map","sourcesContent":["import { ContextPlugin } from '@ckeditor/ckeditor5-core/dist/index.js';\nimport { ObservableMixin, CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils/dist/index.js';\n\nconst DEFAULT_OPTIONS = {\n autoRefresh: true\n};\nconst DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000;\nclass Token extends ObservableMixin() {\n /**\n * Initializes the token.\n */ init() {\n return new Promise((resolve, reject)=>{\n if (!this.value) {\n this.refreshToken().then(resolve).catch(reject);\n return;\n }\n if (this._options.autoRefresh) {\n this._registerRefreshTokenTimeout();\n }\n resolve(this);\n });\n }\n /**\n * Refresh token method. Useful in a method form as it can be override in tests.\n */ refreshToken() {\n return this._refresh().then((value)=>{\n this._validateTokenValue(value);\n this.set('value', value);\n if (this._options.autoRefresh) {\n this._registerRefreshTokenTimeout();\n }\n return this;\n });\n }\n /**\n * Destroys token instance. Stops refreshing.\n */ destroy() {\n clearTimeout(this._tokenRefreshTimeout);\n }\n /**\n * Checks whether the provided token follows the JSON Web Tokens (JWT) format.\n *\n * @param tokenValue The token to validate.\n */ _validateTokenValue(tokenValue) {\n // The token must be a string.\n const isString = typeof tokenValue === 'string';\n // The token must be a plain string without quotes (\"\").\n const isPlainString = !/^\".*\"$/.test(tokenValue);\n // JWT token contains 3 parts: header, payload, and signature.\n // Each part is separated by a dot.\n const isJWTFormat = isString && tokenValue.split('.').length === 3;\n if (!(isPlainString && isJWTFormat)) {\n /**\n * The provided token must follow the [JSON Web Tokens](https://jwt.io/introduction/) format.\n *\n * @error token-not-in-jwt-format\n */ throw new CKEditorError('token-not-in-jwt-format', this);\n }\n }\n /**\n * Registers a refresh token timeout for the time taken from token.\n */ _registerRefreshTokenTimeout() {\n const tokenRefreshTimeoutTime = this._getTokenRefreshTimeoutTime();\n clearTimeout(this._tokenRefreshTimeout);\n this._tokenRefreshTimeout = setTimeout(()=>{\n this.refreshToken();\n }, tokenRefreshTimeoutTime);\n }\n /**\n * Returns token refresh timeout time calculated from expire time in the token payload.\n *\n * If the token parse fails or the token payload doesn't contain, the default DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME is returned.\n */ _getTokenRefreshTimeoutTime() {\n try {\n const [, binaryTokenPayload] = this.value.split('.');\n const { exp: tokenExpireTime } = JSON.parse(atob(binaryTokenPayload));\n if (!tokenExpireTime) {\n return DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n }\n const tokenRefreshTimeoutTime = Math.floor((tokenExpireTime * 1000 - Date.now()) / 2);\n return tokenRefreshTimeoutTime;\n } catch (err) {\n return DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n }\n }\n /**\n * Creates a initialized {@link module:cloud-services/token/token~Token} instance.\n *\n * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n */ static create(tokenUrlOrRefreshToken, options = {}) {\n const token = new Token(tokenUrlOrRefreshToken, options);\n return token.init();\n }\n /**\n * Creates `Token` instance.\n * Method `init` should be called after using the constructor or use `create` method instead.\n *\n * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n */ constructor(tokenUrlOrRefreshToken, options = {}){\n super();\n if (!tokenUrlOrRefreshToken) {\n /**\n * A `tokenUrl` must be provided as the first constructor argument.\n *\n * @error token-missing-token-url\n */ throw new CKEditorError('token-missing-token-url', this);\n }\n if (options.initValue) {\n this._validateTokenValue(options.initValue);\n }\n this.set('value', options.initValue);\n if (typeof tokenUrlOrRefreshToken === 'function') {\n this._refresh = tokenUrlOrRefreshToken;\n } else {\n this._refresh = ()=>defaultRefreshToken(tokenUrlOrRefreshToken);\n }\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options\n };\n }\n}\n/**\n * This function is called in a defined interval by the {@link ~Token} class. It also can be invoked manually.\n * It should return a promise, which resolves with the new token value.\n * If any error occurs it should return a rejected promise with an error message.\n */ function defaultRefreshToken(tokenUrl) {\n return new Promise((resolve, reject)=>{\n const xhr = new XMLHttpRequest();\n xhr.open('GET', tokenUrl);\n xhr.addEventListener('load', ()=>{\n const statusCode = xhr.status;\n const xhrResponse = xhr.response;\n if (statusCode < 200 || statusCode > 299) {\n /**\n * Cannot download new token from the provided url.\n *\n * @error token-cannot-download-new-token\n */ return reject(new CKEditorError('token-cannot-download-new-token', null));\n }\n return resolve(xhrResponse);\n });\n xhr.addEventListener('error', ()=>reject(new Error('Network Error')));\n xhr.addEventListener('abort', ()=>reject(new Error('Abort')));\n xhr.send();\n });\n}\n\nconst BASE64_HEADER_REG_EXP = /^data:(\\S*?);base64,/;\nclass FileUploader extends EmitterMixin() {\n /**\n * Registers callback on `progress` event.\n */ onProgress(callback) {\n this.on('progress', (event, data)=>callback(data));\n return this;\n }\n /**\n * Registers callback on `error` event. Event is called once when error occurs.\n */ onError(callback) {\n this.once('error', (event, data)=>callback(data));\n return this;\n }\n /**\n * Aborts upload process.\n */ abort() {\n this.xhr.abort();\n }\n /**\n * Sends XHR request to API.\n */ send() {\n this._prepareRequest();\n this._attachXHRListeners();\n return this._sendRequest();\n }\n /**\n * Prepares XHR request.\n */ _prepareRequest() {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', this._apiAddress);\n xhr.setRequestHeader('Authorization', this._token.value);\n xhr.responseType = 'json';\n this.xhr = xhr;\n }\n /**\n * Attaches listeners to the XHR.\n */ _attachXHRListeners() {\n const xhr = this.xhr;\n const onError = (message)=>{\n return ()=>this.fire('error', message);\n };\n xhr.addEventListener('error', onError('Network Error'));\n xhr.addEventListener('abort', onError('Abort'));\n /* istanbul ignore else -- @preserve */ if (xhr.upload) {\n xhr.upload.addEventListener('progress', (event)=>{\n if (event.lengthComputable) {\n this.fire('progress', {\n total: event.total,\n uploaded: event.loaded\n });\n }\n });\n }\n xhr.addEventListener('load', ()=>{\n const statusCode = xhr.status;\n const xhrResponse = xhr.response;\n if (statusCode < 200 || statusCode > 299) {\n return this.fire('error', xhrResponse.message || xhrResponse.error);\n }\n });\n }\n /**\n * Sends XHR request.\n */ _sendRequest() {\n const formData = new FormData();\n const xhr = this.xhr;\n formData.append('file', this.file);\n return new Promise((resolve, reject)=>{\n xhr.addEventListener('load', ()=>{\n const statusCode = xhr.status;\n const xhrResponse = xhr.response;\n if (statusCode < 200 || statusCode > 299) {\n if (xhrResponse.message) {\n /**\n * Uploading file failed.\n *\n * @error fileuploader-uploading-data-failed\n */ return reject(new CKEditorError('fileuploader-uploading-data-failed', this, {\n message: xhrResponse.message\n }));\n }\n return reject(xhrResponse.error);\n }\n return resolve(xhrResponse);\n });\n xhr.addEventListener('error', ()=>reject(new Error('Network Error')));\n xhr.addEventListener('abort', ()=>reject(new Error('Abort')));\n xhr.send(formData);\n });\n }\n /**\n * Creates `FileUploader` instance.\n *\n * @param fileOrData A blob object or a data string encoded with Base64.\n * @param token Token used for authentication.\n * @param apiAddress API address.\n */ constructor(fileOrData, token, apiAddress){\n super();\n if (!fileOrData) {\n /**\n * File must be provided as the first argument.\n *\n * @error fileuploader-missing-file\n */ throw new CKEditorError('fileuploader-missing-file', null);\n }\n if (!token) {\n /**\n * Token must be provided as the second argument.\n *\n * @error fileuploader-missing-token\n */ throw new CKEditorError('fileuploader-missing-token', null);\n }\n if (!apiAddress) {\n /**\n * Api address must be provided as the third argument.\n *\n * @error fileuploader-missing-api-address\n */ throw new CKEditorError('fileuploader-missing-api-address', null);\n }\n this.file = _isBase64(fileOrData) ? _base64ToBlob(fileOrData) : fileOrData;\n this._token = token;\n this._apiAddress = apiAddress;\n }\n}\n/**\n * Transforms Base64 string data into file.\n *\n * @param base64 String data.\n */ function _base64ToBlob(base64, sliceSize = 512) {\n try {\n const contentType = base64.match(BASE64_HEADER_REG_EXP)[1];\n const base64Data = atob(base64.replace(BASE64_HEADER_REG_EXP, ''));\n const byteArrays = [];\n for(let offset = 0; offset < base64Data.length; offset += sliceSize){\n const slice = base64Data.slice(offset, offset + sliceSize);\n const byteNumbers = new Array(slice.length);\n for(let i = 0; i < slice.length; i++){\n byteNumbers[i] = slice.charCodeAt(i);\n }\n byteArrays.push(new Uint8Array(byteNumbers));\n }\n return new Blob(byteArrays, {\n type: contentType\n });\n } catch (error) {\n /**\n * Problem with decoding Base64 image data.\n *\n * @error fileuploader-decoding-image-data-error\n */ throw new CKEditorError('fileuploader-decoding-image-data-error', null);\n }\n}\n/**\n * Checks that string is Base64.\n */ function _isBase64(string) {\n if (typeof string !== 'string') {\n return false;\n }\n const match = string.match(BASE64_HEADER_REG_EXP);\n return !!(match && match.length);\n}\n\nclass UploadGateway {\n /**\n * Creates a {@link module:cloud-services/uploadgateway/fileuploader~FileUploader} instance that wraps\n * file upload process. The file is being sent at a time when the\n * {@link module:cloud-services/uploadgateway/fileuploader~FileUploader#send} method is called.\n *\n * ```ts\n * const token = await Token.create( 'https://token-endpoint' );\n * new UploadGateway( token, 'https://example.org' )\n * \t.upload( 'FILE' )\n * \t.onProgress( ( data ) => console.log( data ) )\n * \t.send()\n * \t.then( ( response ) => console.log( response ) );\n * ```\n *\n * @param {Blob|String} fileOrData A blob object or a data string encoded with Base64.\n * @returns {module:cloud-services/uploadgateway/fileuploader~FileUploader} Returns `FileUploader` instance.\n */ upload(fileOrData) {\n return new FileUploader(fileOrData, this._token, this._apiAddress);\n }\n /**\n * Creates `UploadGateway` instance.\n *\n * @param token Token used for authentication.\n * @param apiAddress API address.\n */ constructor(token, apiAddress){\n if (!token) {\n /**\n * Token must be provided.\n *\n * @error uploadgateway-missing-token\n */ throw new CKEditorError('uploadgateway-missing-token', null);\n }\n if (!apiAddress) {\n /**\n * Api address must be provided.\n *\n * @error uploadgateway-missing-api-address\n */ throw new CKEditorError('uploadgateway-missing-api-address', null);\n }\n this._token = token;\n this._apiAddress = apiAddress;\n }\n}\n\nclass CloudServicesCore extends ContextPlugin {\n /**\n * @inheritDoc\n */ static get pluginName() {\n return 'CloudServicesCore';\n }\n /**\n * Creates the {@link module:cloud-services/token/token~Token} instance.\n *\n * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n * @param options.initValue Initial value of the token.\n * @param options.autoRefresh Specifies whether to start the refresh automatically.\n */ createToken(tokenUrlOrRefreshToken, options) {\n return new Token(tokenUrlOrRefreshToken, options);\n }\n /**\n * Creates the {@link module:cloud-services/uploadgateway/uploadgateway~UploadGateway} instance.\n *\n * @param token Token used for authentication.\n * @param apiAddress API address.\n */ createUploadGateway(token, apiAddress) {\n return new UploadGateway(token, apiAddress);\n }\n}\n\nclass CloudServices extends ContextPlugin {\n /**\n * @inheritDoc\n */ static get pluginName() {\n return 'CloudServices';\n }\n /**\n * @inheritDoc\n */ static get requires() {\n return [\n CloudServicesCore\n ];\n }\n /**\n * @inheritDoc\n */ async init() {\n const config = this.context.config;\n const options = config.get('cloudServices') || {};\n for (const [key, value] of Object.entries(options)){\n this[key] = value;\n }\n if (!this.tokenUrl) {\n this.token = null;\n return;\n }\n const cloudServicesCore = this.context.plugins.get('CloudServicesCore');\n this.token = await cloudServicesCore.createToken(this.tokenUrl).init();\n this._tokens.set(this.tokenUrl, this.token);\n }\n /**\n * Registers an additional authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the\n * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.\n *\n * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n */ async registerTokenUrl(tokenUrl) {\n // Reuse the token instance in case of multiple features using the same token URL.\n if (this._tokens.has(tokenUrl)) {\n return this.getTokenFor(tokenUrl);\n }\n const cloudServicesCore = this.context.plugins.get('CloudServicesCore');\n const token = await cloudServicesCore.createToken(tokenUrl).init();\n this._tokens.set(tokenUrl, token);\n return token;\n }\n /**\n * Returns an authentication token provider previously registered by {@link #registerTokenUrl}.\n *\n * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n */ getTokenFor(tokenUrl) {\n const token = this._tokens.get(tokenUrl);\n if (!token) {\n /**\n * The provided `tokenUrl` was not registered by {@link module:cloud-services/cloudservices~CloudServices#registerTokenUrl}.\n *\n * @error cloudservices-token-not-registered\n */ throw new CKEditorError('cloudservices-token-not-registered', this);\n }\n return token;\n }\n /**\n * @inheritDoc\n */ destroy() {\n super.destroy();\n for (const token of this._tokens.values()){\n token.destroy();\n }\n }\n constructor(){\n super(...arguments);\n /**\n * Other plugins use this token for the authorization process. It handles token requesting and refreshing.\n * Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.\n *\n * @readonly\n */ this.token = null;\n /**\n * A map of token object instances keyed by the token URLs.\n */ this._tokens = new Map();\n }\n}\n\nexport { CloudServices, CloudServicesCore };\n//# sourceMappingURL=index.js.map\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/token/token\n */\n\n/* globals XMLHttpRequest, setTimeout, clearTimeout, atob */\n\nimport { ObservableMixin, CKEditorError } from 'ckeditor5/src/utils.js';\nimport type { TokenUrl } from '../cloudservicesconfig.js';\n\nconst DEFAULT_OPTIONS = { autoRefresh: true };\nconst DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000;\n\n/**\n * Class representing the token used for communication with CKEditor Cloud Services.\n * Value of the token is retrieving from the specified URL and is refreshed every 1 hour by default.\n */\nexport default class Token extends ObservableMixin() {\n\t/**\n\t * Value of the token.\n\t * The value of the token is undefined if `initValue` is not provided or `init` method was not called.\n\t * `create` method creates token with initialized value from url.\n\t *\n\t * @see module:cloud-services/token/token~InitializedToken\n\t * @observable\n\t * @readonly\n\t */\n\tdeclare public value: string | undefined;\n\n\t/**\n\t * Base refreshing function.\n\t */\n\tprivate _refresh: () => Promise<string>;\n\n\tprivate _options: { initValue?: string; autoRefresh: boolean };\n\n\tprivate _tokenRefreshTimeout?: ReturnType<typeof setTimeout>;\n\n\t/**\n\t * Creates `Token` instance.\n\t * Method `init` should be called after using the constructor or use `create` method instead.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t */\n\tconstructor( tokenUrlOrRefreshToken: TokenUrl, options: TokenOptions = {} ) {\n\t\tsuper();\n\n\t\tif ( !tokenUrlOrRefreshToken ) {\n\t\t\t/**\n\t\t\t * A `tokenUrl` must be provided as the first constructor argument.\n\t\t\t *\n\t\t\t * @error token-missing-token-url\n\t\t\t */\n\t\t\tthrow new CKEditorError(\n\t\t\t\t'token-missing-token-url',\n\t\t\t\tthis\n\t\t\t);\n\t\t}\n\n\t\tif ( options.initValue ) {\n\t\t\tthis._validateTokenValue( options.initValue );\n\t\t}\n\n\t\tthis.set( 'value', options.initValue );\n\n\t\tif ( typeof tokenUrlOrRefreshToken === 'function' ) {\n\t\t\tthis._refresh = tokenUrlOrRefreshToken;\n\t\t} else {\n\t\t\tthis._refresh = () => defaultRefreshToken( tokenUrlOrRefreshToken );\n\t\t}\n\n\t\tthis._options = { ...DEFAULT_OPTIONS, ...options };\n\t}\n\n\t/**\n\t * Initializes the token.\n\t */\n\tpublic init(): Promise<InitializedToken> {\n\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\tif ( !this.value ) {\n\t\t\t\tthis.refreshToken()\n\t\t\t\t\t.then( resolve )\n\t\t\t\t\t.catch( reject );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._options.autoRefresh ) {\n\t\t\t\tthis._registerRefreshTokenTimeout();\n\t\t\t}\n\n\t\t\tresolve( this as InitializedToken );\n\t\t} );\n\t}\n\n\t/**\n\t * Refresh token method. Useful in a method form as it can be override in tests.\n\t */\n\tpublic refreshToken(): Promise<InitializedToken> {\n\t\treturn this._refresh()\n\t\t\t.then( value => {\n\t\t\t\tthis._validateTokenValue( value );\n\t\t\t\tthis.set( 'value', value );\n\n\t\t\t\tif ( this._options.autoRefresh ) {\n\t\t\t\t\tthis._registerRefreshTokenTimeout();\n\t\t\t\t}\n\n\t\t\t\treturn this as InitializedToken;\n\t\t\t} );\n\t}\n\n\t/**\n\t * Destroys token instance. Stops refreshing.\n\t */\n\tpublic destroy(): void {\n\t\tclearTimeout( this._tokenRefreshTimeout );\n\t}\n\n\t/**\n\t * Checks whether the provided token follows the JSON Web Tokens (JWT) format.\n\t *\n\t * @param tokenValue The token to validate.\n\t */\n\tprivate _validateTokenValue( tokenValue: string ) {\n\t\t// The token must be a string.\n\t\tconst isString = typeof tokenValue === 'string';\n\n\t\t// The token must be a plain string without quotes (\"\").\n\t\tconst isPlainString = !/^\".*\"$/.test( tokenValue );\n\n\t\t// JWT token contains 3 parts: header, payload, and signature.\n\t\t// Each part is separated by a dot.\n\t\tconst isJWTFormat = isString && tokenValue.split( '.' ).length === 3;\n\n\t\tif ( !( isPlainString && isJWTFormat ) ) {\n\t\t\t/**\n\t\t\t * The provided token must follow the [JSON Web Tokens](https://jwt.io/introduction/) format.\n\t\t\t *\n\t\t\t * @error token-not-in-jwt-format\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'token-not-in-jwt-format', this );\n\t\t}\n\t}\n\n\t/**\n\t * Registers a refresh token timeout for the time taken from token.\n\t */\n\tprivate _registerRefreshTokenTimeout() {\n\t\tconst tokenRefreshTimeoutTime = this._getTokenRefreshTimeoutTime();\n\n\t\tclearTimeout( this._tokenRefreshTimeout );\n\n\t\tthis._tokenRefreshTimeout = setTimeout( () => {\n\t\t\tthis.refreshToken();\n\t\t}, tokenRefreshTimeoutTime );\n\t}\n\n\t/**\n\t * Returns token refresh timeout time calculated from expire time in the token payload.\n\t *\n\t * If the token parse fails or the token payload doesn't contain, the default DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME is returned.\n\t */\n\tprivate _getTokenRefreshTimeoutTime() {\n\t\ttry {\n\t\t\tconst [ , binaryTokenPayload ] = this.value!.split( '.' );\n\t\t\tconst { exp: tokenExpireTime } = JSON.parse( atob( binaryTokenPayload ) );\n\n\t\t\tif ( !tokenExpireTime ) {\n\t\t\t\treturn DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n\t\t\t}\n\n\t\t\tconst tokenRefreshTimeoutTime = Math.floor( ( ( tokenExpireTime * 1000 ) - Date.now() ) / 2 );\n\n\t\t\treturn tokenRefreshTimeoutTime;\n\t\t} catch ( err ) {\n\t\t\treturn DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n\t\t}\n\t}\n\n\t/**\n\t * Creates a initialized {@link module:cloud-services/token/token~Token} instance.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t */\n\tpublic static create( tokenUrlOrRefreshToken: TokenUrl, options: TokenOptions = {} ): Promise<InitializedToken> {\n\t\tconst token = new Token( tokenUrlOrRefreshToken, options );\n\n\t\treturn token.init();\n\t}\n}\n\n/**\n * A {@link ~Token} instance that has been initialized.\n */\nexport type InitializedToken = Token & { value: string };\n\n/**\n * Options for creating tokens.\n */\nexport interface TokenOptions {\n\n\t/**\n\t * Initial value of the token.\n\t */\n\tinitValue?: string;\n\n\t/**\n\t * Specifies whether to start the refresh automatically.\n\t *\n\t * @default true\n\t */\n\tautoRefresh?: boolean;\n}\n\n/**\n * This function is called in a defined interval by the {@link ~Token} class. It also can be invoked manually.\n * It should return a promise, which resolves with the new token value.\n * If any error occurs it should return a rejected promise with an error message.\n */\nfunction defaultRefreshToken( tokenUrl: string ) {\n\treturn new Promise<string>( ( resolve, reject ) => {\n\t\tconst xhr = new XMLHttpRequest();\n\n\t\txhr.open( 'GET', tokenUrl );\n\n\t\txhr.addEventListener( 'load', () => {\n\t\t\tconst statusCode = xhr.status;\n\t\t\tconst xhrResponse = xhr.response;\n\n\t\t\tif ( statusCode < 200 || statusCode > 299 ) {\n\t\t\t\t/**\n\t\t\t\t * Cannot download new token from the provided url.\n\t\t\t\t *\n\t\t\t\t * @error token-cannot-download-new-token\n\t\t\t\t */\n\t\t\t\treturn reject(\n\t\t\t\t\tnew CKEditorError( 'token-cannot-download-new-token', null )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn resolve( xhrResponse );\n\t\t} );\n\n\t\txhr.addEventListener( 'error', () => reject( new Error( 'Network Error' ) ) );\n\t\txhr.addEventListener( 'abort', () => reject( new Error( 'Abort' ) ) );\n\n\t\txhr.send();\n\t} );\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/uploadgateway/fileuploader\n */\n\n/* globals XMLHttpRequest, FormData, Blob, atob */\n\nimport type { UploadResponse } from 'ckeditor5/src/upload.js';\nimport { EmitterMixin, CKEditorError } from 'ckeditor5/src/utils.js';\nimport type { InitializedToken } from '../token/token.js';\n\nconst BASE64_HEADER_REG_EXP = /^data:(\\S*?);base64,/;\n\n/**\n * FileUploader class used to upload single file.\n */\nexport default class FileUploader extends EmitterMixin() {\n\t/**\n\t * A file that is being uploaded.\n\t */\n\tpublic readonly file: Blob;\n\n\tpublic xhr?: XMLHttpRequest;\n\n\t/**\n\t * CKEditor Cloud Services access token.\n\t */\n\tprivate readonly _token: InitializedToken;\n\n\t/**\n\t * CKEditor Cloud Services API address.\n\t */\n\tprivate readonly _apiAddress: string;\n\n\t/**\n\t * Creates `FileUploader` instance.\n\t *\n\t * @param fileOrData A blob object or a data string encoded with Base64.\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */\n\tconstructor(\n\t\tfileOrData: string | Blob,\n\t\ttoken: InitializedToken,\n\t\tapiAddress: string\n\t) {\n\t\tsuper();\n\n\t\tif ( !fileOrData ) {\n\t\t\t/**\n\t\t\t * File must be provided as the first argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-file\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'fileuploader-missing-file', null );\n\t\t}\n\n\t\tif ( !token ) {\n\t\t\t/**\n\t\t\t * Token must be provided as the second argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-token\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'fileuploader-missing-token', null );\n\t\t}\n\n\t\tif ( !apiAddress ) {\n\t\t\t/**\n\t\t\t * Api address must be provided as the third argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-api-address\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'fileuploader-missing-api-address', null );\n\t\t}\n\n\t\tthis.file = _isBase64( fileOrData ) ? _base64ToBlob( fileOrData ) : fileOrData;\n\n\t\tthis._token = token;\n\t\tthis._apiAddress = apiAddress;\n\t}\n\n\t/**\n\t * Registers callback on `progress` event.\n\t */\n\tpublic onProgress( callback: ( status: { total: number; uploaded: number } ) => void ): this {\n\t\tthis.on<FileUploaderProgressErrorEvent>( 'progress', ( event, data ) => callback( data ) );\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Registers callback on `error` event. Event is called once when error occurs.\n\t */\n\tpublic onError( callback: ( error: string ) => void ): this {\n\t\tthis.once<FileUploaderErrorEvent>( 'error', ( event, data ) => callback( data ) );\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Aborts upload process.\n\t */\n\tpublic abort(): void {\n\t\tthis.xhr!.abort();\n\t}\n\n\t/**\n\t * Sends XHR request to API.\n\t */\n\tpublic send(): Promise<UploadResponse> {\n\t\tthis._prepareRequest();\n\t\tthis._attachXHRListeners();\n\n\t\treturn this._sendRequest();\n\t}\n\n\t/**\n\t * Prepares XHR request.\n\t */\n\tprivate _prepareRequest() {\n\t\tconst xhr = new XMLHttpRequest();\n\n\t\txhr.open( 'POST', this._apiAddress );\n\t\txhr.setRequestHeader( 'Authorization', this._token.value );\n\t\txhr.responseType = 'json';\n\n\t\tthis.xhr = xhr;\n\t}\n\n\t/**\n\t * Attaches listeners to the XHR.\n\t */\n\tprivate _attachXHRListeners() {\n\t\tconst xhr = this.xhr!;\n\n\t\tconst onError = ( message: string ) => {\n\t\t\treturn () => this.fire<FileUploaderErrorEvent>( 'error', message );\n\t\t};\n\n\t\txhr.addEventListener( 'error', onError( 'Network Error' ) );\n\t\txhr.addEventListener( 'abort', onError( 'Abort' ) );\n\n\t\t/* istanbul ignore else -- @preserve */\n\t\tif ( xhr.upload ) {\n\t\t\txhr.upload.addEventListener( 'progress', event => {\n\t\t\t\tif ( event.lengthComputable ) {\n\t\t\t\t\tthis.fire<FileUploaderProgressErrorEvent>( 'progress', {\n\t\t\t\t\t\ttotal: event.total,\n\t\t\t\t\t\tuploaded: event.loaded\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\txhr.addEventListener( 'load', () => {\n\t\t\tconst statusCode = xhr.status;\n\t\t\tconst xhrResponse = xhr.response;\n\n\t\t\tif ( statusCode < 200 || statusCode > 299 ) {\n\t\t\t\treturn this.fire<FileUploaderErrorEvent>( 'error', xhrResponse.message || xhrResponse.error );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Sends XHR request.\n\t */\n\tprivate _sendRequest() {\n\t\tconst formData = new FormData();\n\t\tconst xhr = this.xhr!;\n\n\t\tformData.append( 'file', this.file );\n\n\t\treturn new Promise<UploadResponse>( ( resolve, reject ) => {\n\t\t\txhr.addEventListener( 'load', () => {\n\t\t\t\tconst statusCode = xhr.status;\n\t\t\t\tconst xhrResponse = xhr.response;\n\n\t\t\t\tif ( statusCode < 200 || statusCode > 299 ) {\n\t\t\t\t\tif ( xhrResponse.message ) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Uploading file failed.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * @error fileuploader-uploading-data-failed\n\t\t\t\t\t\t */\n\t\t\t\t\t\treturn reject( new CKEditorError(\n\t\t\t\t\t\t\t'fileuploader-uploading-data-failed',\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t{ message: xhrResponse.message }\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn reject( xhrResponse.error );\n\t\t\t\t}\n\n\t\t\t\treturn resolve( xhrResponse );\n\t\t\t} );\n\n\t\t\txhr.addEventListener( 'error', () => reject( new Error( 'Network Error' ) ) );\n\t\t\txhr.addEventListener( 'abort', () => reject( new Error( 'Abort' ) ) );\n\n\t\t\txhr.send( formData );\n\t\t} );\n\t}\n}\n\n/**\n * Fired when error occurs.\n *\n * @eventName ~FileUploader#error\n * @param error Error message\n */\nexport type FileUploaderErrorEvent = {\n\tname: 'error';\n\targs: [ error: string ];\n};\n\n/**\n * Fired on upload progress.\n *\n * @eventName ~FileUploader#progress\n * @param status Total and uploaded status\n */\nexport type FileUploaderProgressErrorEvent = {\n\tname: 'progress';\n\targs: [ status: { total: number; uploaded: number } ];\n};\n\n/**\n * Transforms Base64 string data into file.\n *\n * @param base64 String data.\n */\nfunction _base64ToBlob( base64: string, sliceSize = 512 ) {\n\ttry {\n\t\tconst contentType = base64.match( BASE64_HEADER_REG_EXP )![ 1 ];\n\t\tconst base64Data = atob( base64.replace( BASE64_HEADER_REG_EXP, '' ) );\n\n\t\tconst byteArrays: Array<Uint8Array> = [];\n\n\t\tfor ( let offset = 0; offset < base64Data.length; offset += sliceSize ) {\n\t\t\tconst slice = base64Data.slice( offset, offset + sliceSize );\n\t\t\tconst byteNumbers = new Array<number>( slice.length );\n\n\t\t\tfor ( let i = 0; i < slice.length; i++ ) {\n\t\t\t\tbyteNumbers[ i ] = slice.charCodeAt( i );\n\t\t\t}\n\n\t\t\tbyteArrays.push( new Uint8Array( byteNumbers ) );\n\t\t}\n\n\t\treturn new Blob( byteArrays, { type: contentType } );\n\t} catch ( error ) {\n\t\t/**\n\t\t * Problem with decoding Base64 image data.\n\t\t *\n\t\t * @error fileuploader-decoding-image-data-error\n\t\t */\n\t\tthrow new CKEditorError( 'fileuploader-decoding-image-data-error', null );\n\t}\n}\n\n/**\n * Checks that string is Base64.\n */\nfunction _isBase64( string: string | Blob ): string is string {\n\tif ( typeof string !== 'string' ) {\n\t\treturn false;\n\t}\n\n\tconst match = string.match( BASE64_HEADER_REG_EXP );\n\treturn !!( match && match.length );\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/uploadgateway/uploadgateway\n */\n\nimport FileUploader from './fileuploader.js';\nimport type { InitializedToken } from '../token/token.js';\nimport { CKEditorError } from 'ckeditor5/src/utils.js';\n\n/**\n * UploadGateway abstracts file uploads to CKEditor Cloud Services.\n */\nexport default class UploadGateway {\n\t/**\n\t * CKEditor Cloud Services access token.\n\t */\n\tprivate readonly _token: InitializedToken;\n\n\t/**\n\t * CKEditor Cloud Services API address.\n\t */\n\tprivate readonly _apiAddress: string;\n\n\t/**\n\t * Creates `UploadGateway` instance.\n\t *\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */\n\tconstructor( token: InitializedToken, apiAddress: string ) {\n\t\tif ( !token ) {\n\t\t\t/**\n\t\t\t * Token must be provided.\n\t\t\t *\n\t\t\t * @error uploadgateway-missing-token\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'uploadgateway-missing-token', null );\n\t\t}\n\n\t\tif ( !apiAddress ) {\n\t\t\t/**\n\t\t\t * Api address must be provided.\n\t\t\t *\n\t\t\t * @error uploadgateway-missing-api-address\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'uploadgateway-missing-api-address', null );\n\t\t}\n\n\t\tthis._token = token;\n\t\tthis._apiAddress = apiAddress;\n\t}\n\n\t/**\n\t * Creates a {@link module:cloud-services/uploadgateway/fileuploader~FileUploader} instance that wraps\n\t * file upload process. The file is being sent at a time when the\n\t * {@link module:cloud-services/uploadgateway/fileuploader~FileUploader#send} method is called.\n\t *\n\t * ```ts\n\t * const token = await Token.create( 'https://token-endpoint' );\n\t * new UploadGateway( token, 'https://example.org' )\n\t * \t.upload( 'FILE' )\n\t * \t.onProgress( ( data ) => console.log( data ) )\n\t * \t.send()\n\t * \t.then( ( response ) => console.log( response ) );\n\t * ```\n\t *\n\t * @param {Blob|String} fileOrData A blob object or a data string encoded with Base64.\n\t * @returns {module:cloud-services/uploadgateway/fileuploader~FileUploader} Returns `FileUploader` instance.\n\t */\n\tpublic upload( fileOrData: string | Blob ): FileUploader {\n\t\treturn new FileUploader( fileOrData, this._token, this._apiAddress );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/cloudservicescore\n */\n\nimport { ContextPlugin } from 'ckeditor5/src/core.js';\nimport type { TokenUrl } from './cloudservicesconfig.js';\nimport Token, { type InitializedToken, type TokenOptions } from './token/token.js';\nimport UploadGateway from './uploadgateway/uploadgateway.js';\n\n/**\n * The `CloudServicesCore` plugin exposes the base API for communication with CKEditor Cloud Services.\n */\nexport default class CloudServicesCore extends ContextPlugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'CloudServicesCore' as const;\n\t}\n\n\t/**\n\t * Creates the {@link module:cloud-services/token/token~Token} instance.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t * @param options.initValue Initial value of the token.\n\t * @param options.autoRefresh Specifies whether to start the refresh automatically.\n\t */\n\tpublic createToken( tokenUrlOrRefreshToken: TokenUrl, options?: TokenOptions ): Token {\n\t\treturn new Token( tokenUrlOrRefreshToken, options );\n\t}\n\n\t/**\n\t * Creates the {@link module:cloud-services/uploadgateway/uploadgateway~UploadGateway} instance.\n\t *\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */\n\tpublic createUploadGateway( token: InitializedToken, apiAddress: string ): UploadGateway {\n\t\treturn new UploadGateway( token, apiAddress );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/cloudservices\n */\n\nimport { ContextPlugin } from 'ckeditor5/src/core.js';\nimport { CKEditorError } from 'ckeditor5/src/utils.js';\nimport CloudServicesCore from './cloudservicescore.js';\nimport type { CloudServicesConfig, TokenUrl } from './cloudservicesconfig.js';\nimport type { InitializedToken } from './token/token.js';\n\n/**\n * Plugin introducing the integration between CKEditor 5 and CKEditor Cloud Services .\n *\n * It initializes the token provider based on\n * the {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig `config.cloudService`}.\n */\nexport default class CloudServices extends ContextPlugin implements CloudServicesConfig {\n\t/**\n\t * The authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the\n\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.\n\t */\n\tpublic readonly tokenUrl?: TokenUrl;\n\n\t/**\n\t * The URL to which the files should be uploaded.\n\t */\n\tpublic readonly uploadUrl?: string;\n\n\t/**\n\t * The URL for web socket communication, used by the `RealTimeCollaborativeEditing` plugin. Every customer (organization in the CKEditor\n\t * Ecosystem dashboard) has their own, unique URLs to communicate with CKEditor Cloud Services. The URL can be found in the\n\t * CKEditor Ecosystem customer dashboard.\n\t *\n\t * Note: Unlike most plugins, `RealTimeCollaborativeEditing` is not included in any CKEditor 5 build and needs to be installed manually.\n\t * Check [Collaboration overview](https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/overview.html) for more details.\n\t */\n\tpublic readonly webSocketUrl?: string;\n\n\t/**\n\t * An optional parameter used for integration with CKEditor Cloud Services when uploading the editor build to cloud services.\n\t *\n\t * Whenever the editor build or the configuration changes, this parameter should be set to a new, unique value to differentiate\n\t * the new bundle (build + configuration) from the old ones.\n\t */\n\tpublic readonly bundleVersion?: string;\n\n\t/**\n\t * Other plugins use this token for the authorization process. It handles token requesting and refreshing.\n\t * Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.\n\t *\n\t * @readonly\n\t */\n\tpublic token: InitializedToken | null = null;\n\n\t/**\n\t * A map of token object instances keyed by the token URLs.\n\t */\n\tprivate readonly _tokens = new Map<TokenUrl, InitializedToken>();\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'CloudServices' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires() {\n\t\treturn [ CloudServicesCore ] as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic async init(): Promise<void> {\n\t\tconst config = this.context.config;\n\n\t\tconst options = config.get( 'cloudServices' ) || {};\n\n\t\tfor ( const [ key, value ] of Object.entries( options ) as Array<[key: keyof CloudServicesConfig, value: any]> ) {\n\t\t\t( this as CloudServicesConfig )[ key ] = value;\n\t\t}\n\n\t\tif ( !this.tokenUrl ) {\n\t\t\tthis.token = null;\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst cloudServicesCore: CloudServicesCore = this.context.plugins.get( 'CloudServicesCore' );\n\n\t\tthis.token = await cloudServicesCore.createToken( this.tokenUrl ).init();\n\n\t\tthis._tokens.set( this.tokenUrl, this.token );\n\t}\n\n\t/**\n\t * Registers an additional authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the\n\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.\n\t *\n\t * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n\t */\n\tpublic async registerTokenUrl( tokenUrl: TokenUrl ): Promise<InitializedToken> {\n\t\t// Reuse the token instance in case of multiple features using the same token URL.\n\t\tif ( this._tokens.has( tokenUrl ) ) {\n\t\t\treturn this.getTokenFor( tokenUrl );\n\t\t}\n\n\t\tconst cloudServicesCore: CloudServicesCore = this.context.plugins.get( 'CloudServicesCore' );\n\t\tconst token = await cloudServicesCore.createToken( tokenUrl ).init();\n\n\t\tthis._tokens.set( tokenUrl, token );\n\n\t\treturn token;\n\t}\n\n\t/**\n\t * Returns an authentication token provider previously registered by {@link #registerTokenUrl}.\n\t *\n\t * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n\t */\n\tpublic getTokenFor( tokenUrl: TokenUrl ): InitializedToken {\n\t\tconst token = this._tokens.get( tokenUrl );\n\n\t\tif ( !token ) {\n\t\t\t/**\n\t\t\t * The provided `tokenUrl` was not registered by {@link module:cloud-services/cloudservices~CloudServices#registerTokenUrl}.\n\t\t\t *\n\t\t\t * @error cloudservices-token-not-registered\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'cloudservices-token-not-registered', this );\n\t\t}\n\n\t\treturn token;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tfor ( const token of this._tokens.values() ) {\n\t\t\ttoken.destroy();\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"sources":["index.js","../src/token/token.ts","../src/uploadgateway/fileuploader.ts","../src/uploadgateway/uploadgateway.ts","../src/cloudservicescore.ts","../src/cloudservices.ts"],"names":["DEFAULT_OPTIONS","autoRefresh","DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME","Token","ObservableMixin","_options","_tokenRefreshTimeout","constructor","tokenUrlOrRefreshToken","options","CKEditorError","initValue","_validateTokenValue","set","_refresh","defaultRefreshToken","Promise","resolve","reject","value","refreshToken","then","catch","_registerRefreshTokenTimeout","clearTimeout","tokenValue","isString","isPlainString","test","isJWTFormat","split","length","tokenRefreshTimeoutTime","_getTokenRefreshTimeoutTime","setTimeout","binaryTokenPayload","exp","tokenExpireTime","JSON","parse","atob","Math","floor","Date","now","err","create","token","init","tokenUrl","xhr","XMLHttpRequest","open","addEventListener","statusCode","status","xhrResponse","response","Error","send","BASE64_HEADER_REG_EXP","FileUploader","EmitterMixin","fileOrData","apiAddress","file","_isBase64","_base64ToBlob","_token","_apiAddress","onProgress","callback","on","event","data","onError","once","abort","_prepareRequest","_attachXHRListeners","_sendRequest","setRequestHeader","responseType","message","fire","upload","lengthComputable","total","uploaded","loaded","error","formData","FormData","append","base64","sliceSize","contentType","match","base64Data","replace","byteArrays","offset","slice","byteNumbers","Array","i","charCodeAt","push","Uint8Array","Blob","type","string","UploadGateway","CloudServicesCore","ContextPlugin","pluginName","createToken","createUploadGateway","CloudServices","_tokens","Map","requires","config","context","get","key","Object","entries","cloudServicesCore","plugins","registerTokenUrl","has","getTokenFor","destroy","values"],"mappings":"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","file":"index.js.map","sourcesContent":["import { ContextPlugin } from '@ckeditor/ckeditor5-core/dist/index.js';\nimport { ObservableMixin, CKEditorError, EmitterMixin } from '@ckeditor/ckeditor5-utils/dist/index.js';\n\nconst DEFAULT_OPTIONS = {\n autoRefresh: true\n};\nconst DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000;\n/**\n * Class representing the token used for communication with CKEditor Cloud Services.\n * Value of the token is retrieving from the specified URL and is refreshed every 1 hour by default.\n */ class Token extends /* #__PURE__ */ ObservableMixin() {\n /**\n\t * Base refreshing function.\n\t */ _refresh;\n _options;\n _tokenRefreshTimeout;\n /**\n\t * Creates `Token` instance.\n\t * Method `init` should be called after using the constructor or use `create` method instead.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t */ constructor(tokenUrlOrRefreshToken, options = {}){\n super();\n if (!tokenUrlOrRefreshToken) {\n /**\n\t\t\t * A `tokenUrl` must be provided as the first constructor argument.\n\t\t\t *\n\t\t\t * @error token-missing-token-url\n\t\t\t */ throw new CKEditorError('token-missing-token-url', this);\n }\n if (options.initValue) {\n this._validateTokenValue(options.initValue);\n }\n this.set('value', options.initValue);\n if (typeof tokenUrlOrRefreshToken === 'function') {\n this._refresh = tokenUrlOrRefreshToken;\n } else {\n this._refresh = ()=>defaultRefreshToken(tokenUrlOrRefreshToken);\n }\n this._options = {\n ...DEFAULT_OPTIONS,\n ...options\n };\n }\n /**\n\t * Initializes the token.\n\t */ init() {\n return new Promise((resolve, reject)=>{\n if (!this.value) {\n this.refreshToken().then(resolve).catch(reject);\n return;\n }\n if (this._options.autoRefresh) {\n this._registerRefreshTokenTimeout();\n }\n resolve(this);\n });\n }\n /**\n\t * Refresh token method. Useful in a method form as it can be override in tests.\n\t */ refreshToken() {\n return this._refresh().then((value)=>{\n this._validateTokenValue(value);\n this.set('value', value);\n if (this._options.autoRefresh) {\n this._registerRefreshTokenTimeout();\n }\n return this;\n });\n }\n /**\n\t * Destroys token instance. Stops refreshing.\n\t */ destroy() {\n clearTimeout(this._tokenRefreshTimeout);\n }\n /**\n\t * Checks whether the provided token follows the JSON Web Tokens (JWT) format.\n\t *\n\t * @param tokenValue The token to validate.\n\t */ _validateTokenValue(tokenValue) {\n // The token must be a string.\n const isString = typeof tokenValue === 'string';\n // The token must be a plain string without quotes (\"\").\n const isPlainString = !/^\".*\"$/.test(tokenValue);\n // JWT token contains 3 parts: header, payload, and signature.\n // Each part is separated by a dot.\n const isJWTFormat = isString && tokenValue.split('.').length === 3;\n if (!(isPlainString && isJWTFormat)) {\n /**\n\t\t\t * The provided token must follow the [JSON Web Tokens](https://jwt.io/introduction/) format.\n\t\t\t *\n\t\t\t * @error token-not-in-jwt-format\n\t\t\t */ throw new CKEditorError('token-not-in-jwt-format', this);\n }\n }\n /**\n\t * Registers a refresh token timeout for the time taken from token.\n\t */ _registerRefreshTokenTimeout() {\n const tokenRefreshTimeoutTime = this._getTokenRefreshTimeoutTime();\n clearTimeout(this._tokenRefreshTimeout);\n this._tokenRefreshTimeout = setTimeout(()=>{\n this.refreshToken();\n }, tokenRefreshTimeoutTime);\n }\n /**\n\t * Returns token refresh timeout time calculated from expire time in the token payload.\n\t *\n\t * If the token parse fails or the token payload doesn't contain, the default DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME is returned.\n\t */ _getTokenRefreshTimeoutTime() {\n try {\n const [, binaryTokenPayload] = this.value.split('.');\n const { exp: tokenExpireTime } = JSON.parse(atob(binaryTokenPayload));\n if (!tokenExpireTime) {\n return DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n }\n const tokenRefreshTimeoutTime = Math.floor((tokenExpireTime * 1000 - Date.now()) / 2);\n return tokenRefreshTimeoutTime;\n } catch (err) {\n return DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n }\n }\n /**\n\t * Creates a initialized {@link module:cloud-services/token/token~Token} instance.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t */ static create(tokenUrlOrRefreshToken, options = {}) {\n const token = new Token(tokenUrlOrRefreshToken, options);\n return token.init();\n }\n}\n/**\n * This function is called in a defined interval by the {@link ~Token} class. It also can be invoked manually.\n * It should return a promise, which resolves with the new token value.\n * If any error occurs it should return a rejected promise with an error message.\n */ function defaultRefreshToken(tokenUrl) {\n return new Promise((resolve, reject)=>{\n const xhr = new XMLHttpRequest();\n xhr.open('GET', tokenUrl);\n xhr.addEventListener('load', ()=>{\n const statusCode = xhr.status;\n const xhrResponse = xhr.response;\n if (statusCode < 200 || statusCode > 299) {\n /**\n\t\t\t\t * Cannot download new token from the provided url.\n\t\t\t\t *\n\t\t\t\t * @error token-cannot-download-new-token\n\t\t\t\t */ return reject(new CKEditorError('token-cannot-download-new-token', null));\n }\n return resolve(xhrResponse);\n });\n xhr.addEventListener('error', ()=>reject(new Error('Network Error')));\n xhr.addEventListener('abort', ()=>reject(new Error('Abort')));\n xhr.send();\n });\n}\n\nconst BASE64_HEADER_REG_EXP = /^data:(\\S*?);base64,/;\n/**\n * FileUploader class used to upload single file.\n */ class FileUploader extends /* #__PURE__ */ EmitterMixin() {\n /**\n\t * A file that is being uploaded.\n\t */ file;\n xhr;\n /**\n\t * CKEditor Cloud Services access token.\n\t */ _token;\n /**\n\t * CKEditor Cloud Services API address.\n\t */ _apiAddress;\n /**\n\t * Creates `FileUploader` instance.\n\t *\n\t * @param fileOrData A blob object or a data string encoded with Base64.\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */ constructor(fileOrData, token, apiAddress){\n super();\n if (!fileOrData) {\n /**\n\t\t\t * File must be provided as the first argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-file\n\t\t\t */ throw new CKEditorError('fileuploader-missing-file', null);\n }\n if (!token) {\n /**\n\t\t\t * Token must be provided as the second argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-token\n\t\t\t */ throw new CKEditorError('fileuploader-missing-token', null);\n }\n if (!apiAddress) {\n /**\n\t\t\t * Api address must be provided as the third argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-api-address\n\t\t\t */ throw new CKEditorError('fileuploader-missing-api-address', null);\n }\n this.file = _isBase64(fileOrData) ? _base64ToBlob(fileOrData) : fileOrData;\n this._token = token;\n this._apiAddress = apiAddress;\n }\n /**\n\t * Registers callback on `progress` event.\n\t */ onProgress(callback) {\n this.on('progress', (event, data)=>callback(data));\n return this;\n }\n /**\n\t * Registers callback on `error` event. Event is called once when error occurs.\n\t */ onError(callback) {\n this.once('error', (event, data)=>callback(data));\n return this;\n }\n /**\n\t * Aborts upload process.\n\t */ abort() {\n this.xhr.abort();\n }\n /**\n\t * Sends XHR request to API.\n\t */ send() {\n this._prepareRequest();\n this._attachXHRListeners();\n return this._sendRequest();\n }\n /**\n\t * Prepares XHR request.\n\t */ _prepareRequest() {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', this._apiAddress);\n xhr.setRequestHeader('Authorization', this._token.value);\n xhr.responseType = 'json';\n this.xhr = xhr;\n }\n /**\n\t * Attaches listeners to the XHR.\n\t */ _attachXHRListeners() {\n const xhr = this.xhr;\n const onError = (message)=>{\n return ()=>this.fire('error', message);\n };\n xhr.addEventListener('error', onError('Network Error'));\n xhr.addEventListener('abort', onError('Abort'));\n /* istanbul ignore else -- @preserve */ if (xhr.upload) {\n xhr.upload.addEventListener('progress', (event)=>{\n if (event.lengthComputable) {\n this.fire('progress', {\n total: event.total,\n uploaded: event.loaded\n });\n }\n });\n }\n xhr.addEventListener('load', ()=>{\n const statusCode = xhr.status;\n const xhrResponse = xhr.response;\n if (statusCode < 200 || statusCode > 299) {\n return this.fire('error', xhrResponse.message || xhrResponse.error);\n }\n });\n }\n /**\n\t * Sends XHR request.\n\t */ _sendRequest() {\n const formData = new FormData();\n const xhr = this.xhr;\n formData.append('file', this.file);\n return new Promise((resolve, reject)=>{\n xhr.addEventListener('load', ()=>{\n const statusCode = xhr.status;\n const xhrResponse = xhr.response;\n if (statusCode < 200 || statusCode > 299) {\n if (xhrResponse.message) {\n /**\n\t\t\t\t\t\t * Uploading file failed.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * @error fileuploader-uploading-data-failed\n\t\t\t\t\t\t */ return reject(new CKEditorError('fileuploader-uploading-data-failed', this, {\n message: xhrResponse.message\n }));\n }\n return reject(xhrResponse.error);\n }\n return resolve(xhrResponse);\n });\n xhr.addEventListener('error', ()=>reject(new Error('Network Error')));\n xhr.addEventListener('abort', ()=>reject(new Error('Abort')));\n xhr.send(formData);\n });\n }\n}\n/**\n * Transforms Base64 string data into file.\n *\n * @param base64 String data.\n */ function _base64ToBlob(base64, sliceSize = 512) {\n try {\n const contentType = base64.match(BASE64_HEADER_REG_EXP)[1];\n const base64Data = atob(base64.replace(BASE64_HEADER_REG_EXP, ''));\n const byteArrays = [];\n for(let offset = 0; offset < base64Data.length; offset += sliceSize){\n const slice = base64Data.slice(offset, offset + sliceSize);\n const byteNumbers = new Array(slice.length);\n for(let i = 0; i < slice.length; i++){\n byteNumbers[i] = slice.charCodeAt(i);\n }\n byteArrays.push(new Uint8Array(byteNumbers));\n }\n return new Blob(byteArrays, {\n type: contentType\n });\n } catch (error) {\n /**\n\t\t * Problem with decoding Base64 image data.\n\t\t *\n\t\t * @error fileuploader-decoding-image-data-error\n\t\t */ throw new CKEditorError('fileuploader-decoding-image-data-error', null);\n }\n}\n/**\n * Checks that string is Base64.\n */ function _isBase64(string) {\n if (typeof string !== 'string') {\n return false;\n }\n const match = string.match(BASE64_HEADER_REG_EXP);\n return !!(match && match.length);\n}\n\n/**\n * UploadGateway abstracts file uploads to CKEditor Cloud Services.\n */ class UploadGateway {\n /**\n\t * CKEditor Cloud Services access token.\n\t */ _token;\n /**\n\t * CKEditor Cloud Services API address.\n\t */ _apiAddress;\n /**\n\t * Creates `UploadGateway` instance.\n\t *\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */ constructor(token, apiAddress){\n if (!token) {\n /**\n\t\t\t * Token must be provided.\n\t\t\t *\n\t\t\t * @error uploadgateway-missing-token\n\t\t\t */ throw new CKEditorError('uploadgateway-missing-token', null);\n }\n if (!apiAddress) {\n /**\n\t\t\t * Api address must be provided.\n\t\t\t *\n\t\t\t * @error uploadgateway-missing-api-address\n\t\t\t */ throw new CKEditorError('uploadgateway-missing-api-address', null);\n }\n this._token = token;\n this._apiAddress = apiAddress;\n }\n /**\n\t * Creates a {@link module:cloud-services/uploadgateway/fileuploader~FileUploader} instance that wraps\n\t * file upload process. The file is being sent at a time when the\n\t * {@link module:cloud-services/uploadgateway/fileuploader~FileUploader#send} method is called.\n\t *\n\t * ```ts\n\t * const token = await Token.create( 'https://token-endpoint' );\n\t * new UploadGateway( token, 'https://example.org' )\n\t * \t.upload( 'FILE' )\n\t * \t.onProgress( ( data ) => console.log( data ) )\n\t * \t.send()\n\t * \t.then( ( response ) => console.log( response ) );\n\t * ```\n\t *\n\t * @param {Blob|String} fileOrData A blob object or a data string encoded with Base64.\n\t * @returns {module:cloud-services/uploadgateway/fileuploader~FileUploader} Returns `FileUploader` instance.\n\t */ upload(fileOrData) {\n return new FileUploader(fileOrData, this._token, this._apiAddress);\n }\n}\n\n/**\n * The `CloudServicesCore` plugin exposes the base API for communication with CKEditor Cloud Services.\n */ class CloudServicesCore extends ContextPlugin {\n /**\n\t * @inheritDoc\n\t */ static get pluginName() {\n return 'CloudServicesCore';\n }\n /**\n\t * Creates the {@link module:cloud-services/token/token~Token} instance.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t * @param options.initValue Initial value of the token.\n\t * @param options.autoRefresh Specifies whether to start the refresh automatically.\n\t */ createToken(tokenUrlOrRefreshToken, options) {\n return new Token(tokenUrlOrRefreshToken, options);\n }\n /**\n\t * Creates the {@link module:cloud-services/uploadgateway/uploadgateway~UploadGateway} instance.\n\t *\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */ createUploadGateway(token, apiAddress) {\n return new UploadGateway(token, apiAddress);\n }\n}\n\n/**\n * Plugin introducing the integration between CKEditor 5 and CKEditor Cloud Services .\n *\n * It initializes the token provider based on\n * the {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig `config.cloudService`}.\n */ class CloudServices extends ContextPlugin {\n /**\n\t * The authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the\n\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.\n\t */ tokenUrl;\n /**\n\t * The URL to which the files should be uploaded.\n\t */ uploadUrl;\n /**\n\t * The URL for web socket communication, used by the `RealTimeCollaborativeEditing` plugin. Every customer (organization in the CKEditor\n\t * Ecosystem dashboard) has their own, unique URLs to communicate with CKEditor Cloud Services. The URL can be found in the\n\t * CKEditor Ecosystem customer dashboard.\n\t *\n\t * Note: Unlike most plugins, `RealTimeCollaborativeEditing` is not included in any CKEditor 5 build and needs to be installed manually.\n\t * Check [Collaboration overview](https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/overview.html) for more details.\n\t */ webSocketUrl;\n /**\n\t * An optional parameter used for integration with CKEditor Cloud Services when uploading the editor build to cloud services.\n\t *\n\t * Whenever the editor build or the configuration changes, this parameter should be set to a new, unique value to differentiate\n\t * the new bundle (build + configuration) from the old ones.\n\t */ bundleVersion;\n /**\n\t * Other plugins use this token for the authorization process. It handles token requesting and refreshing.\n\t * Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.\n\t *\n\t * @readonly\n\t */ token = null;\n /**\n\t * A map of token object instances keyed by the token URLs.\n\t */ _tokens = new Map();\n /**\n\t * @inheritDoc\n\t */ static get pluginName() {\n return 'CloudServices';\n }\n /**\n\t * @inheritDoc\n\t */ static get requires() {\n return [\n CloudServicesCore\n ];\n }\n /**\n\t * @inheritDoc\n\t */ async init() {\n const config = this.context.config;\n const options = config.get('cloudServices') || {};\n for (const [key, value] of Object.entries(options)){\n this[key] = value;\n }\n if (!this.tokenUrl) {\n this.token = null;\n return;\n }\n const cloudServicesCore = this.context.plugins.get('CloudServicesCore');\n this.token = await cloudServicesCore.createToken(this.tokenUrl).init();\n this._tokens.set(this.tokenUrl, this.token);\n }\n /**\n\t * Registers an additional authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the\n\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.\n\t *\n\t * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n\t */ async registerTokenUrl(tokenUrl) {\n // Reuse the token instance in case of multiple features using the same token URL.\n if (this._tokens.has(tokenUrl)) {\n return this.getTokenFor(tokenUrl);\n }\n const cloudServicesCore = this.context.plugins.get('CloudServicesCore');\n const token = await cloudServicesCore.createToken(tokenUrl).init();\n this._tokens.set(tokenUrl, token);\n return token;\n }\n /**\n\t * Returns an authentication token provider previously registered by {@link #registerTokenUrl}.\n\t *\n\t * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n\t */ getTokenFor(tokenUrl) {\n const token = this._tokens.get(tokenUrl);\n if (!token) {\n /**\n\t\t\t * The provided `tokenUrl` was not registered by {@link module:cloud-services/cloudservices~CloudServices#registerTokenUrl}.\n\t\t\t *\n\t\t\t * @error cloudservices-token-not-registered\n\t\t\t */ throw new CKEditorError('cloudservices-token-not-registered', this);\n }\n return token;\n }\n /**\n\t * @inheritDoc\n\t */ destroy() {\n super.destroy();\n for (const token of this._tokens.values()){\n token.destroy();\n }\n }\n}\n\nexport { CloudServices, CloudServicesCore };\n//# sourceMappingURL=index.js.map\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/token/token\n */\n\n/* globals XMLHttpRequest, setTimeout, clearTimeout, atob */\n\nimport { ObservableMixin, CKEditorError } from 'ckeditor5/src/utils.js';\nimport type { TokenUrl } from '../cloudservicesconfig.js';\n\nconst DEFAULT_OPTIONS = { autoRefresh: true };\nconst DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000;\n\n/**\n * Class representing the token used for communication with CKEditor Cloud Services.\n * Value of the token is retrieving from the specified URL and is refreshed every 1 hour by default.\n */\nexport default class Token extends /* #__PURE__ */ ObservableMixin() {\n\t/**\n\t * Value of the token.\n\t * The value of the token is undefined if `initValue` is not provided or `init` method was not called.\n\t * `create` method creates token with initialized value from url.\n\t *\n\t * @see module:cloud-services/token/token~InitializedToken\n\t * @observable\n\t * @readonly\n\t */\n\tdeclare public value: string | undefined;\n\n\t/**\n\t * Base refreshing function.\n\t */\n\tprivate _refresh: () => Promise<string>;\n\n\tprivate _options: { initValue?: string; autoRefresh: boolean };\n\n\tprivate _tokenRefreshTimeout?: ReturnType<typeof setTimeout>;\n\n\t/**\n\t * Creates `Token` instance.\n\t * Method `init` should be called after using the constructor or use `create` method instead.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t */\n\tconstructor( tokenUrlOrRefreshToken: TokenUrl, options: TokenOptions = {} ) {\n\t\tsuper();\n\n\t\tif ( !tokenUrlOrRefreshToken ) {\n\t\t\t/**\n\t\t\t * A `tokenUrl` must be provided as the first constructor argument.\n\t\t\t *\n\t\t\t * @error token-missing-token-url\n\t\t\t */\n\t\t\tthrow new CKEditorError(\n\t\t\t\t'token-missing-token-url',\n\t\t\t\tthis\n\t\t\t);\n\t\t}\n\n\t\tif ( options.initValue ) {\n\t\t\tthis._validateTokenValue( options.initValue );\n\t\t}\n\n\t\tthis.set( 'value', options.initValue );\n\n\t\tif ( typeof tokenUrlOrRefreshToken === 'function' ) {\n\t\t\tthis._refresh = tokenUrlOrRefreshToken;\n\t\t} else {\n\t\t\tthis._refresh = () => defaultRefreshToken( tokenUrlOrRefreshToken );\n\t\t}\n\n\t\tthis._options = { ...DEFAULT_OPTIONS, ...options };\n\t}\n\n\t/**\n\t * Initializes the token.\n\t */\n\tpublic init(): Promise<InitializedToken> {\n\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\tif ( !this.value ) {\n\t\t\t\tthis.refreshToken()\n\t\t\t\t\t.then( resolve )\n\t\t\t\t\t.catch( reject );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._options.autoRefresh ) {\n\t\t\t\tthis._registerRefreshTokenTimeout();\n\t\t\t}\n\n\t\t\tresolve( this as InitializedToken );\n\t\t} );\n\t}\n\n\t/**\n\t * Refresh token method. Useful in a method form as it can be override in tests.\n\t */\n\tpublic refreshToken(): Promise<InitializedToken> {\n\t\treturn this._refresh()\n\t\t\t.then( value => {\n\t\t\t\tthis._validateTokenValue( value );\n\t\t\t\tthis.set( 'value', value );\n\n\t\t\t\tif ( this._options.autoRefresh ) {\n\t\t\t\t\tthis._registerRefreshTokenTimeout();\n\t\t\t\t}\n\n\t\t\t\treturn this as InitializedToken;\n\t\t\t} );\n\t}\n\n\t/**\n\t * Destroys token instance. Stops refreshing.\n\t */\n\tpublic destroy(): void {\n\t\tclearTimeout( this._tokenRefreshTimeout );\n\t}\n\n\t/**\n\t * Checks whether the provided token follows the JSON Web Tokens (JWT) format.\n\t *\n\t * @param tokenValue The token to validate.\n\t */\n\tprivate _validateTokenValue( tokenValue: string ) {\n\t\t// The token must be a string.\n\t\tconst isString = typeof tokenValue === 'string';\n\n\t\t// The token must be a plain string without quotes (\"\").\n\t\tconst isPlainString = !/^\".*\"$/.test( tokenValue );\n\n\t\t// JWT token contains 3 parts: header, payload, and signature.\n\t\t// Each part is separated by a dot.\n\t\tconst isJWTFormat = isString && tokenValue.split( '.' ).length === 3;\n\n\t\tif ( !( isPlainString && isJWTFormat ) ) {\n\t\t\t/**\n\t\t\t * The provided token must follow the [JSON Web Tokens](https://jwt.io/introduction/) format.\n\t\t\t *\n\t\t\t * @error token-not-in-jwt-format\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'token-not-in-jwt-format', this );\n\t\t}\n\t}\n\n\t/**\n\t * Registers a refresh token timeout for the time taken from token.\n\t */\n\tprivate _registerRefreshTokenTimeout() {\n\t\tconst tokenRefreshTimeoutTime = this._getTokenRefreshTimeoutTime();\n\n\t\tclearTimeout( this._tokenRefreshTimeout );\n\n\t\tthis._tokenRefreshTimeout = setTimeout( () => {\n\t\t\tthis.refreshToken();\n\t\t}, tokenRefreshTimeoutTime );\n\t}\n\n\t/**\n\t * Returns token refresh timeout time calculated from expire time in the token payload.\n\t *\n\t * If the token parse fails or the token payload doesn't contain, the default DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME is returned.\n\t */\n\tprivate _getTokenRefreshTimeoutTime() {\n\t\ttry {\n\t\t\tconst [ , binaryTokenPayload ] = this.value!.split( '.' );\n\t\t\tconst { exp: tokenExpireTime } = JSON.parse( atob( binaryTokenPayload ) );\n\n\t\t\tif ( !tokenExpireTime ) {\n\t\t\t\treturn DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n\t\t\t}\n\n\t\t\tconst tokenRefreshTimeoutTime = Math.floor( ( ( tokenExpireTime * 1000 ) - Date.now() ) / 2 );\n\n\t\t\treturn tokenRefreshTimeoutTime;\n\t\t} catch ( err ) {\n\t\t\treturn DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n\t\t}\n\t}\n\n\t/**\n\t * Creates a initialized {@link module:cloud-services/token/token~Token} instance.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t */\n\tpublic static create( tokenUrlOrRefreshToken: TokenUrl, options: TokenOptions = {} ): Promise<InitializedToken> {\n\t\tconst token = new Token( tokenUrlOrRefreshToken, options );\n\n\t\treturn token.init();\n\t}\n}\n\n/**\n * A {@link ~Token} instance that has been initialized.\n */\nexport type InitializedToken = Token & { value: string };\n\n/**\n * Options for creating tokens.\n */\nexport interface TokenOptions {\n\n\t/**\n\t * Initial value of the token.\n\t */\n\tinitValue?: string;\n\n\t/**\n\t * Specifies whether to start the refresh automatically.\n\t *\n\t * @default true\n\t */\n\tautoRefresh?: boolean;\n}\n\n/**\n * This function is called in a defined interval by the {@link ~Token} class. It also can be invoked manually.\n * It should return a promise, which resolves with the new token value.\n * If any error occurs it should return a rejected promise with an error message.\n */\nfunction defaultRefreshToken( tokenUrl: string ) {\n\treturn new Promise<string>( ( resolve, reject ) => {\n\t\tconst xhr = new XMLHttpRequest();\n\n\t\txhr.open( 'GET', tokenUrl );\n\n\t\txhr.addEventListener( 'load', () => {\n\t\t\tconst statusCode = xhr.status;\n\t\t\tconst xhrResponse = xhr.response;\n\n\t\t\tif ( statusCode < 200 || statusCode > 299 ) {\n\t\t\t\t/**\n\t\t\t\t * Cannot download new token from the provided url.\n\t\t\t\t *\n\t\t\t\t * @error token-cannot-download-new-token\n\t\t\t\t */\n\t\t\t\treturn reject(\n\t\t\t\t\tnew CKEditorError( 'token-cannot-download-new-token', null )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn resolve( xhrResponse );\n\t\t} );\n\n\t\txhr.addEventListener( 'error', () => reject( new Error( 'Network Error' ) ) );\n\t\txhr.addEventListener( 'abort', () => reject( new Error( 'Abort' ) ) );\n\n\t\txhr.send();\n\t} );\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/uploadgateway/fileuploader\n */\n\n/* globals XMLHttpRequest, FormData, Blob, atob */\n\nimport type { UploadResponse } from 'ckeditor5/src/upload.js';\nimport { EmitterMixin, CKEditorError } from 'ckeditor5/src/utils.js';\nimport type { InitializedToken } from '../token/token.js';\n\nconst BASE64_HEADER_REG_EXP = /^data:(\\S*?);base64,/;\n\n/**\n * FileUploader class used to upload single file.\n */\nexport default class FileUploader extends /* #__PURE__ */ EmitterMixin() {\n\t/**\n\t * A file that is being uploaded.\n\t */\n\tpublic readonly file: Blob;\n\n\tpublic xhr?: XMLHttpRequest;\n\n\t/**\n\t * CKEditor Cloud Services access token.\n\t */\n\tprivate readonly _token: InitializedToken;\n\n\t/**\n\t * CKEditor Cloud Services API address.\n\t */\n\tprivate readonly _apiAddress: string;\n\n\t/**\n\t * Creates `FileUploader` instance.\n\t *\n\t * @param fileOrData A blob object or a data string encoded with Base64.\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */\n\tconstructor(\n\t\tfileOrData: string | Blob,\n\t\ttoken: InitializedToken,\n\t\tapiAddress: string\n\t) {\n\t\tsuper();\n\n\t\tif ( !fileOrData ) {\n\t\t\t/**\n\t\t\t * File must be provided as the first argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-file\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'fileuploader-missing-file', null );\n\t\t}\n\n\t\tif ( !token ) {\n\t\t\t/**\n\t\t\t * Token must be provided as the second argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-token\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'fileuploader-missing-token', null );\n\t\t}\n\n\t\tif ( !apiAddress ) {\n\t\t\t/**\n\t\t\t * Api address must be provided as the third argument.\n\t\t\t *\n\t\t\t * @error fileuploader-missing-api-address\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'fileuploader-missing-api-address', null );\n\t\t}\n\n\t\tthis.file = _isBase64( fileOrData ) ? _base64ToBlob( fileOrData ) : fileOrData;\n\n\t\tthis._token = token;\n\t\tthis._apiAddress = apiAddress;\n\t}\n\n\t/**\n\t * Registers callback on `progress` event.\n\t */\n\tpublic onProgress( callback: ( status: { total: number; uploaded: number } ) => void ): this {\n\t\tthis.on<FileUploaderProgressErrorEvent>( 'progress', ( event, data ) => callback( data ) );\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Registers callback on `error` event. Event is called once when error occurs.\n\t */\n\tpublic onError( callback: ( error: string ) => void ): this {\n\t\tthis.once<FileUploaderErrorEvent>( 'error', ( event, data ) => callback( data ) );\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Aborts upload process.\n\t */\n\tpublic abort(): void {\n\t\tthis.xhr!.abort();\n\t}\n\n\t/**\n\t * Sends XHR request to API.\n\t */\n\tpublic send(): Promise<UploadResponse> {\n\t\tthis._prepareRequest();\n\t\tthis._attachXHRListeners();\n\n\t\treturn this._sendRequest();\n\t}\n\n\t/**\n\t * Prepares XHR request.\n\t */\n\tprivate _prepareRequest() {\n\t\tconst xhr = new XMLHttpRequest();\n\n\t\txhr.open( 'POST', this._apiAddress );\n\t\txhr.setRequestHeader( 'Authorization', this._token.value );\n\t\txhr.responseType = 'json';\n\n\t\tthis.xhr = xhr;\n\t}\n\n\t/**\n\t * Attaches listeners to the XHR.\n\t */\n\tprivate _attachXHRListeners() {\n\t\tconst xhr = this.xhr!;\n\n\t\tconst onError = ( message: string ) => {\n\t\t\treturn () => this.fire<FileUploaderErrorEvent>( 'error', message );\n\t\t};\n\n\t\txhr.addEventListener( 'error', onError( 'Network Error' ) );\n\t\txhr.addEventListener( 'abort', onError( 'Abort' ) );\n\n\t\t/* istanbul ignore else -- @preserve */\n\t\tif ( xhr.upload ) {\n\t\t\txhr.upload.addEventListener( 'progress', event => {\n\t\t\t\tif ( event.lengthComputable ) {\n\t\t\t\t\tthis.fire<FileUploaderProgressErrorEvent>( 'progress', {\n\t\t\t\t\t\ttotal: event.total,\n\t\t\t\t\t\tuploaded: event.loaded\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\txhr.addEventListener( 'load', () => {\n\t\t\tconst statusCode = xhr.status;\n\t\t\tconst xhrResponse = xhr.response;\n\n\t\t\tif ( statusCode < 200 || statusCode > 299 ) {\n\t\t\t\treturn this.fire<FileUploaderErrorEvent>( 'error', xhrResponse.message || xhrResponse.error );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Sends XHR request.\n\t */\n\tprivate _sendRequest() {\n\t\tconst formData = new FormData();\n\t\tconst xhr = this.xhr!;\n\n\t\tformData.append( 'file', this.file );\n\n\t\treturn new Promise<UploadResponse>( ( resolve, reject ) => {\n\t\t\txhr.addEventListener( 'load', () => {\n\t\t\t\tconst statusCode = xhr.status;\n\t\t\t\tconst xhrResponse = xhr.response;\n\n\t\t\t\tif ( statusCode < 200 || statusCode > 299 ) {\n\t\t\t\t\tif ( xhrResponse.message ) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Uploading file failed.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * @error fileuploader-uploading-data-failed\n\t\t\t\t\t\t */\n\t\t\t\t\t\treturn reject( new CKEditorError(\n\t\t\t\t\t\t\t'fileuploader-uploading-data-failed',\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t{ message: xhrResponse.message }\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn reject( xhrResponse.error );\n\t\t\t\t}\n\n\t\t\t\treturn resolve( xhrResponse );\n\t\t\t} );\n\n\t\t\txhr.addEventListener( 'error', () => reject( new Error( 'Network Error' ) ) );\n\t\t\txhr.addEventListener( 'abort', () => reject( new Error( 'Abort' ) ) );\n\n\t\t\txhr.send( formData );\n\t\t} );\n\t}\n}\n\n/**\n * Fired when error occurs.\n *\n * @eventName ~FileUploader#error\n * @param error Error message\n */\nexport type FileUploaderErrorEvent = {\n\tname: 'error';\n\targs: [ error: string ];\n};\n\n/**\n * Fired on upload progress.\n *\n * @eventName ~FileUploader#progress\n * @param status Total and uploaded status\n */\nexport type FileUploaderProgressErrorEvent = {\n\tname: 'progress';\n\targs: [ status: { total: number; uploaded: number } ];\n};\n\n/**\n * Transforms Base64 string data into file.\n *\n * @param base64 String data.\n */\nfunction _base64ToBlob( base64: string, sliceSize = 512 ) {\n\ttry {\n\t\tconst contentType = base64.match( BASE64_HEADER_REG_EXP )![ 1 ];\n\t\tconst base64Data = atob( base64.replace( BASE64_HEADER_REG_EXP, '' ) );\n\n\t\tconst byteArrays: Array<Uint8Array> = [];\n\n\t\tfor ( let offset = 0; offset < base64Data.length; offset += sliceSize ) {\n\t\t\tconst slice = base64Data.slice( offset, offset + sliceSize );\n\t\t\tconst byteNumbers = new Array<number>( slice.length );\n\n\t\t\tfor ( let i = 0; i < slice.length; i++ ) {\n\t\t\t\tbyteNumbers[ i ] = slice.charCodeAt( i );\n\t\t\t}\n\n\t\t\tbyteArrays.push( new Uint8Array( byteNumbers ) );\n\t\t}\n\n\t\treturn new Blob( byteArrays, { type: contentType } );\n\t} catch ( error ) {\n\t\t/**\n\t\t * Problem with decoding Base64 image data.\n\t\t *\n\t\t * @error fileuploader-decoding-image-data-error\n\t\t */\n\t\tthrow new CKEditorError( 'fileuploader-decoding-image-data-error', null );\n\t}\n}\n\n/**\n * Checks that string is Base64.\n */\nfunction _isBase64( string: string | Blob ): string is string {\n\tif ( typeof string !== 'string' ) {\n\t\treturn false;\n\t}\n\n\tconst match = string.match( BASE64_HEADER_REG_EXP );\n\treturn !!( match && match.length );\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/uploadgateway/uploadgateway\n */\n\nimport FileUploader from './fileuploader.js';\nimport type { InitializedToken } from '../token/token.js';\nimport { CKEditorError } from 'ckeditor5/src/utils.js';\n\n/**\n * UploadGateway abstracts file uploads to CKEditor Cloud Services.\n */\nexport default class UploadGateway {\n\t/**\n\t * CKEditor Cloud Services access token.\n\t */\n\tprivate readonly _token: InitializedToken;\n\n\t/**\n\t * CKEditor Cloud Services API address.\n\t */\n\tprivate readonly _apiAddress: string;\n\n\t/**\n\t * Creates `UploadGateway` instance.\n\t *\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */\n\tconstructor( token: InitializedToken, apiAddress: string ) {\n\t\tif ( !token ) {\n\t\t\t/**\n\t\t\t * Token must be provided.\n\t\t\t *\n\t\t\t * @error uploadgateway-missing-token\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'uploadgateway-missing-token', null );\n\t\t}\n\n\t\tif ( !apiAddress ) {\n\t\t\t/**\n\t\t\t * Api address must be provided.\n\t\t\t *\n\t\t\t * @error uploadgateway-missing-api-address\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'uploadgateway-missing-api-address', null );\n\t\t}\n\n\t\tthis._token = token;\n\t\tthis._apiAddress = apiAddress;\n\t}\n\n\t/**\n\t * Creates a {@link module:cloud-services/uploadgateway/fileuploader~FileUploader} instance that wraps\n\t * file upload process. The file is being sent at a time when the\n\t * {@link module:cloud-services/uploadgateway/fileuploader~FileUploader#send} method is called.\n\t *\n\t * ```ts\n\t * const token = await Token.create( 'https://token-endpoint' );\n\t * new UploadGateway( token, 'https://example.org' )\n\t * \t.upload( 'FILE' )\n\t * \t.onProgress( ( data ) => console.log( data ) )\n\t * \t.send()\n\t * \t.then( ( response ) => console.log( response ) );\n\t * ```\n\t *\n\t * @param {Blob|String} fileOrData A blob object or a data string encoded with Base64.\n\t * @returns {module:cloud-services/uploadgateway/fileuploader~FileUploader} Returns `FileUploader` instance.\n\t */\n\tpublic upload( fileOrData: string | Blob ): FileUploader {\n\t\treturn new FileUploader( fileOrData, this._token, this._apiAddress );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/cloudservicescore\n */\n\nimport { ContextPlugin } from 'ckeditor5/src/core.js';\nimport type { TokenUrl } from './cloudservicesconfig.js';\nimport Token, { type InitializedToken, type TokenOptions } from './token/token.js';\nimport UploadGateway from './uploadgateway/uploadgateway.js';\n\n/**\n * The `CloudServicesCore` plugin exposes the base API for communication with CKEditor Cloud Services.\n */\nexport default class CloudServicesCore extends ContextPlugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'CloudServicesCore' as const;\n\t}\n\n\t/**\n\t * Creates the {@link module:cloud-services/token/token~Token} instance.\n\t *\n\t * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n\t * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n\t * @param options.initValue Initial value of the token.\n\t * @param options.autoRefresh Specifies whether to start the refresh automatically.\n\t */\n\tpublic createToken( tokenUrlOrRefreshToken: TokenUrl, options?: TokenOptions ): Token {\n\t\treturn new Token( tokenUrlOrRefreshToken, options );\n\t}\n\n\t/**\n\t * Creates the {@link module:cloud-services/uploadgateway/uploadgateway~UploadGateway} instance.\n\t *\n\t * @param token Token used for authentication.\n\t * @param apiAddress API address.\n\t */\n\tpublic createUploadGateway( token: InitializedToken, apiAddress: string ): UploadGateway {\n\t\treturn new UploadGateway( token, apiAddress );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module cloud-services/cloudservices\n */\n\nimport { ContextPlugin } from 'ckeditor5/src/core.js';\nimport { CKEditorError } from 'ckeditor5/src/utils.js';\nimport CloudServicesCore from './cloudservicescore.js';\nimport type { CloudServicesConfig, TokenUrl } from './cloudservicesconfig.js';\nimport type { InitializedToken } from './token/token.js';\n\n/**\n * Plugin introducing the integration between CKEditor 5 and CKEditor Cloud Services .\n *\n * It initializes the token provider based on\n * the {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig `config.cloudService`}.\n */\nexport default class CloudServices extends ContextPlugin implements CloudServicesConfig {\n\t/**\n\t * The authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the\n\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.\n\t */\n\tpublic readonly tokenUrl?: TokenUrl;\n\n\t/**\n\t * The URL to which the files should be uploaded.\n\t */\n\tpublic readonly uploadUrl?: string;\n\n\t/**\n\t * The URL for web socket communication, used by the `RealTimeCollaborativeEditing` plugin. Every customer (organization in the CKEditor\n\t * Ecosystem dashboard) has their own, unique URLs to communicate with CKEditor Cloud Services. The URL can be found in the\n\t * CKEditor Ecosystem customer dashboard.\n\t *\n\t * Note: Unlike most plugins, `RealTimeCollaborativeEditing` is not included in any CKEditor 5 build and needs to be installed manually.\n\t * Check [Collaboration overview](https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/overview.html) for more details.\n\t */\n\tpublic readonly webSocketUrl?: string;\n\n\t/**\n\t * An optional parameter used for integration with CKEditor Cloud Services when uploading the editor build to cloud services.\n\t *\n\t * Whenever the editor build or the configuration changes, this parameter should be set to a new, unique value to differentiate\n\t * the new bundle (build + configuration) from the old ones.\n\t */\n\tpublic readonly bundleVersion?: string;\n\n\t/**\n\t * Other plugins use this token for the authorization process. It handles token requesting and refreshing.\n\t * Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.\n\t *\n\t * @readonly\n\t */\n\tpublic token: InitializedToken | null = null;\n\n\t/**\n\t * A map of token object instances keyed by the token URLs.\n\t */\n\tprivate readonly _tokens = new Map<TokenUrl, InitializedToken>();\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'CloudServices' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires() {\n\t\treturn [ CloudServicesCore ] as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic async init(): Promise<void> {\n\t\tconst config = this.context.config;\n\n\t\tconst options = config.get( 'cloudServices' ) || {};\n\n\t\tfor ( const [ key, value ] of Object.entries( options ) as Array<[key: keyof CloudServicesConfig, value: any]> ) {\n\t\t\t( this as CloudServicesConfig )[ key ] = value;\n\t\t}\n\n\t\tif ( !this.tokenUrl ) {\n\t\t\tthis.token = null;\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst cloudServicesCore: CloudServicesCore = this.context.plugins.get( 'CloudServicesCore' );\n\n\t\tthis.token = await cloudServicesCore.createToken( this.tokenUrl ).init();\n\n\t\tthis._tokens.set( this.tokenUrl, this.token );\n\t}\n\n\t/**\n\t * Registers an additional authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the\n\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.\n\t *\n\t * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n\t */\n\tpublic async registerTokenUrl( tokenUrl: TokenUrl ): Promise<InitializedToken> {\n\t\t// Reuse the token instance in case of multiple features using the same token URL.\n\t\tif ( this._tokens.has( tokenUrl ) ) {\n\t\t\treturn this.getTokenFor( tokenUrl );\n\t\t}\n\n\t\tconst cloudServicesCore: CloudServicesCore = this.context.plugins.get( 'CloudServicesCore' );\n\t\tconst token = await cloudServicesCore.createToken( tokenUrl ).init();\n\n\t\tthis._tokens.set( tokenUrl, token );\n\n\t\treturn token;\n\t}\n\n\t/**\n\t * Returns an authentication token provider previously registered by {@link #registerTokenUrl}.\n\t *\n\t * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n\t */\n\tpublic getTokenFor( tokenUrl: TokenUrl ): InitializedToken {\n\t\tconst token = this._tokens.get( tokenUrl );\n\n\t\tif ( !token ) {\n\t\t\t/**\n\t\t\t * The provided `tokenUrl` was not registered by {@link module:cloud-services/cloudservices~CloudServices#registerTokenUrl}.\n\t\t\t *\n\t\t\t * @error cloudservices-token-not-registered\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'cloudservices-token-not-registered', this );\n\t\t}\n\n\t\treturn token;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tfor ( const token of this._tokens.values() ) {\n\t\t\ttoken.destroy();\n\t\t}\n\t}\n}\n"]}
@@ -15,7 +15,7 @@ declare const Token_base: {
15
15
  * Class representing the token used for communication with CKEditor Cloud Services.
16
16
  * Value of the token is retrieving from the specified URL and is refreshed every 1 hour by default.
17
17
  */
18
- export default class Token extends Token_base {
18
+ export default class Token extends /* #__PURE__ */ Token_base {
19
19
  /**
20
20
  * Value of the token.
21
21
  * The value of the token is undefined if `initValue` is not provided or `init` method was not called.
@@ -18,7 +18,7 @@ declare const FileUploader_base: {
18
18
  /**
19
19
  * FileUploader class used to upload single file.
20
20
  */
21
- export default class FileUploader extends FileUploader_base {
21
+ export default class FileUploader extends /* #__PURE__ */ FileUploader_base {
22
22
  /**
23
23
  * A file that is being uploaded.
24
24
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckeditor/ckeditor5-cloud-services",
3
- "version": "41.4.2",
3
+ "version": "42.0.0-alpha.0",
4
4
  "description": "CKEditor 5's Cloud Services integration layer.",
5
5
  "keywords": [
6
6
  "ckeditor",
@@ -12,7 +12,7 @@
12
12
  "type": "module",
13
13
  "main": "src/index.js",
14
14
  "dependencies": {
15
- "ckeditor5": "41.4.2"
15
+ "ckeditor5": "42.0.0-alpha.0"
16
16
  },
17
17
  "author": "CKSource (http://cksource.com/)",
18
18
  "license": "GPL-2.0-or-later",
@@ -11,7 +11,7 @@ declare const Token_base: {
11
11
  * Class representing the token used for communication with CKEditor Cloud Services.
12
12
  * Value of the token is retrieving from the specified URL and is refreshed every 1 hour by default.
13
13
  */
14
- export default class Token extends Token_base {
14
+ export default class Token extends /* #__PURE__ */ Token_base {
15
15
  /**
16
16
  * Value of the token.
17
17
  * The value of the token is undefined if `initValue` is not provided or `init` method was not called.
@@ -13,7 +13,7 @@ const DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000;
13
13
  * Class representing the token used for communication with CKEditor Cloud Services.
14
14
  * Value of the token is retrieving from the specified URL and is refreshed every 1 hour by default.
15
15
  */
16
- export default class Token extends ObservableMixin() {
16
+ export default class Token extends /* #__PURE__ */ ObservableMixin() {
17
17
  /**
18
18
  * Creates `Token` instance.
19
19
  * Method `init` should be called after using the constructor or use `create` method instead.
@@ -14,7 +14,7 @@ declare const FileUploader_base: {
14
14
  /**
15
15
  * FileUploader class used to upload single file.
16
16
  */
17
- export default class FileUploader extends FileUploader_base {
17
+ export default class FileUploader extends /* #__PURE__ */ FileUploader_base {
18
18
  /**
19
19
  * A file that is being uploaded.
20
20
  */
@@ -7,7 +7,7 @@ const BASE64_HEADER_REG_EXP = /^data:(\S*?);base64,/;
7
7
  /**
8
8
  * FileUploader class used to upload single file.
9
9
  */
10
- export default class FileUploader extends EmitterMixin() {
10
+ export default class FileUploader extends /* #__PURE__ */ EmitterMixin() {
11
11
  /**
12
12
  * Creates `FileUploader` instance.
13
13
  *