@ckeditor/ckeditor5-cloud-services 45.2.1 → 46.0.0-alpha.1
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/build/cloud-services.js +1 -1
- package/dist/index.js +21 -6
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/cloudservices.d.ts +6 -2
- package/src/cloudservices.js +8 -4
- package/src/cloudservicesconfig.d.ts +22 -0
- package/src/cloudservicescore.d.ts +4 -4
- package/src/cloudservicescore.js +3 -3
- package/src/index.d.ts +5 -5
- package/src/index.js +3 -3
- package/src/token/token.d.ts +7 -6
- package/src/token/token.js +12 -5
- package/src/uploadgateway/fileuploader.d.ts +3 -3
- package/src/uploadgateway/fileuploader.js +1 -1
- package/src/uploadgateway/uploadgateway.d.ts +2 -2
- package/src/uploadgateway/uploadgateway.js +2 -2
package/build/cloud-services.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
3
|
* For licensing, see LICENSE.md.
|
|
4
|
-
*/(()=>{var e={237:e=>{"use strict";e.exports=CKEditor5.dll},584:(e,t,r)=>{e.exports=r(237)("./src/utils.js")},782:(e,t,r)=>{e.exports=r(237)("./src/core.js")}},t={};function r(s){var o=t[s];if(void 0!==o)return o.exports;var n=t[s]={exports:{}};return e[s](n,n.exports,r),n.exports}r.d=(e,t)=>{for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};(()=>{"use strict";r.r(s),r.d(s,{CloudServices:()=>d,CloudServicesCore:()=>
|
|
4
|
+
*/(()=>{var e={237:e=>{"use strict";e.exports=CKEditor5.dll},584:(e,t,r)=>{e.exports=r(237)("./src/utils.js")},782:(e,t,r)=>{e.exports=r(237)("./src/core.js")}},t={};function r(s){var o=t[s];if(void 0!==o)return o.exports;var n=t[s]={exports:{}};return e[s](n,n.exports,r),n.exports}r.d=(e,t)=>{for(var s in t)r.o(t,s)&&!r.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};(()=>{"use strict";r.r(s),r.d(s,{CloudServices:()=>d,CloudServicesCore:()=>l,Token:()=>i});var e=r(782),t=r(584);const o={autoRefresh:!0},n=36e5;class i extends((0,t.ObservableMixin)()){_refresh;_options;_tokenRefreshTimeout;_isDestroyed=!1;constructor(e,r={}){if(super(),!e)throw new t.CKEditorError("token-missing-token-url",this);r.initValue&&this._validateTokenValue(r.initValue),this.set("value",r.initValue),this._refresh="function"==typeof e?e:()=>{return r=e,new Promise((e,s)=>{const o=new XMLHttpRequest;o.open("GET",r),o.addEventListener("load",()=>{const r=o.status,n=o.response;return r<200||r>299?s(new t.CKEditorError("token-cannot-download-new-token",null)):e(n)}),o.addEventListener("error",()=>s(new Error("Network Error"))),o.addEventListener("abort",()=>s(new Error("Abort"))),o.send()});var r},this._options={...o,...r}}init(){return new Promise((e,t)=>{this.value?(this._options.autoRefresh&&this._registerRefreshTokenTimeout(),e(this)):this.refreshToken().then(e).catch(t)})}refreshToken(){const e=this._options.autoRefresh;return this._refresh().then(t=>(this._validateTokenValue(t),this.set("value",t),e&&this._registerRefreshTokenTimeout(),this)).catch(r=>{throw(0,t.logWarning)("token-refresh-failed",{autoRefresh:e}),e&&this._registerRefreshTokenTimeout(5e3),r})}destroy(){this._isDestroyed=!0,clearTimeout(this._tokenRefreshTimeout)}_validateTokenValue(e){const r="string"==typeof e,s=!/^".*"$/.test(e),o=r&&3===e.split(".").length;if(!s||!o)throw new t.CKEditorError("token-not-in-jwt-format",this)}_registerRefreshTokenTimeout(e){if(clearTimeout(this._tokenRefreshTimeout),this._isDestroyed)return;const t=e||this._getTokenRefreshTimeoutTime();this._tokenRefreshTimeout=setTimeout(()=>{this.refreshToken()},t)}_getTokenRefreshTimeoutTime(){try{const[,e]=this.value.split("."),{exp:t}=JSON.parse(atob(e));if(!t)return n;t>2147483647&&console.warn("Token expiration time exceeds 32-bit integer range. This might cause unpredictable token refresh timing. Token expiration time should always be provided in seconds.",{tokenExpireTime:t});return Math.floor((1e3*t-Date.now())/2)}catch{return n}}static create(e,t={}){return new i(e,t).init()}}const a=/^data:(\S*?);base64,/;class u extends((0,t.EmitterMixin)()){file;xhr;_token;_apiAddress;constructor(e,r,s){if(super(),!e)throw new t.CKEditorError("fileuploader-missing-file",null);if(!r)throw new t.CKEditorError("fileuploader-missing-token",null);if(!s)throw new t.CKEditorError("fileuploader-missing-api-address",null);this.file=function(e){if("string"!=typeof e)return!1;return!!e.match(a)?.length}(e)?function(e,r=512){try{const t=e.match(a)[1],s=atob(e.replace(a,"")),o=[];for(let e=0;e<s.length;e+=r){const t=s.slice(e,e+r),n=new Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);o.push(new Uint8Array(n))}return new Blob(o,{type:t})}catch{throw new t.CKEditorError("fileuploader-decoding-image-data-error",null)}}(e):e,this._token=r,this._apiAddress=s}onProgress(e){return this.on("progress",(t,r)=>e(r)),this}onError(e){return this.once("error",(t,r)=>e(r)),this}abort(){this.xhr.abort()}send(){return this._prepareRequest(),this._attachXHRListeners(),this._sendRequest()}_prepareRequest(){const e=new XMLHttpRequest;e.open("POST",this._apiAddress),e.setRequestHeader("Authorization",this._token.value),e.responseType="json",this.xhr=e}_attachXHRListeners(){const e=this.xhr,t=e=>()=>this.fire("error",e);e.addEventListener("error",t("Network Error")),e.addEventListener("abort",t("Abort")),e.upload&&e.upload.addEventListener("progress",e=>{e.lengthComputable&&this.fire("progress",{total:e.total,uploaded:e.loaded})}),e.addEventListener("load",()=>{const t=e.status,r=e.response;if(t<200||t>299)return this.fire("error",r.message||r.error)})}_sendRequest(){const e=new FormData,r=this.xhr;return e.append("file",this.file),new Promise((s,o)=>{r.addEventListener("load",()=>{const e=r.status,n=r.response;return e<200||e>299?n.message?o(new t.CKEditorError("fileuploader-uploading-data-failed",this,{message:n.message})):o(n.error):s(n)}),r.addEventListener("error",()=>o(new Error("Network Error"))),r.addEventListener("abort",()=>o(new Error("Abort"))),r.send(e)})}}class h{_token;_apiAddress;constructor(e,r){if(!e)throw new t.CKEditorError("uploadgateway-missing-token",null);if(!r)throw new t.CKEditorError("uploadgateway-missing-api-address",null);this._token=e,this._apiAddress=r}upload(e){return new u(e,this._token,this._apiAddress)}}class l extends e.ContextPlugin{static get pluginName(){return"CloudServicesCore"}static get isOfficialPlugin(){return!0}createToken(e,t){return new i(e,t)}createUploadGateway(e,t){return new h(e,t)}}class d extends e.ContextPlugin{tokenUrl;uploadUrl;webSocketUrl;bundleVersion;autoRefresh=!0;token=null;_tokens=new Map;static get pluginName(){return"CloudServices"}static get isOfficialPlugin(){return!0}static get requires(){return[l]}async init(){const e=this.context.config.get("cloudServices")||{};for(const[t,r]of Object.entries(e))this[t]=r;if(!this.tokenUrl)return void(this.token=null);const t=this.context.plugins.get("CloudServicesCore").createToken(this.tokenUrl,{autoRefresh:this.autoRefresh});try{this.token=await t.init(),this._tokens.set(this.tokenUrl,this.token)}catch(e){throw t.destroy(),e}}async registerTokenUrl(e){if(this._tokens.has(e))return this.getTokenFor(e);const t=this.context.plugins.get("CloudServicesCore"),r=await t.createToken(e,{autoRefresh:this.autoRefresh}).init();return this._tokens.set(e,r),r}getTokenFor(e){const r=this._tokens.get(e);if(!r)throw new t.CKEditorError("cloudservices-token-not-registered",this);return r}destroy(){super.destroy();for(const e of this._tokens.values())e.destroy()}}})(),(window.CKEditor5=window.CKEditor5||{}).cloudServices=s})();
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,8 @@ const TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds
|
|
|
22
22
|
* Cached token options.
|
|
23
23
|
*/ _options;
|
|
24
24
|
/**
|
|
25
|
-
* `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~
|
|
25
|
+
* `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh}
|
|
26
|
+
* is enabled.
|
|
26
27
|
*/ _tokenRefreshTimeout;
|
|
27
28
|
/**
|
|
28
29
|
* Flag indicating whether the token has been destroyed.
|
|
@@ -74,7 +75,7 @@ const TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds
|
|
|
74
75
|
* Refresh token method. Useful in a method form as it can be overridden in tests.
|
|
75
76
|
*
|
|
76
77
|
* This method will be invoked periodically based on the token expiry date after first call to keep the token up-to-date
|
|
77
|
-
* (requires {@link module:cloud-services/token/token~
|
|
78
|
+
* (requires {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option} to be set).
|
|
78
79
|
*
|
|
79
80
|
* If the token refresh fails, the method will retry in 5 seconds intervals until success or the token gets
|
|
80
81
|
* {@link #destroy destroyed}.
|
|
@@ -97,8 +98,8 @@ const TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds
|
|
|
97
98
|
* endpoint is up and running. {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl Learn more}
|
|
98
99
|
* about token configuration.
|
|
99
100
|
*
|
|
100
|
-
* **Note:** If the token's {@link module:cloud-services/token/token~
|
|
101
|
-
* attempts to refresh will be made until success or token's
|
|
101
|
+
* **Note:** If the token's {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option}
|
|
102
|
+
* is enabled, attempts to refresh will be made until success or token's
|
|
102
103
|
* {@link module:cloud-services/token/token~Token#destroy destruction}.
|
|
103
104
|
*
|
|
104
105
|
* @error token-refresh-failed
|
|
@@ -164,6 +165,13 @@ const TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds
|
|
|
164
165
|
if (!tokenExpireTime) {
|
|
165
166
|
return DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;
|
|
166
167
|
}
|
|
168
|
+
// Check if the token expire time exceeds 32-bit integer range
|
|
169
|
+
// It could happen if the token expire time is provided in milliseconds instead of seconds.
|
|
170
|
+
if (tokenExpireTime > 2147483647) {
|
|
171
|
+
console.warn('Token expiration time exceeds 32-bit integer range. This might cause unpredictable token refresh timing. ' + 'Token expiration time should always be provided in seconds.', {
|
|
172
|
+
tokenExpireTime
|
|
173
|
+
});
|
|
174
|
+
}
|
|
167
175
|
const tokenRefreshTimeoutTime = Math.floor((tokenExpireTime * 1000 - Date.now()) / 2);
|
|
168
176
|
return tokenRefreshTimeoutTime;
|
|
169
177
|
} catch {
|
|
@@ -493,6 +501,9 @@ const BASE64_HEADER_REG_EXP = /^data:(\S*?);base64,/;
|
|
|
493
501
|
* Whenever the editor build or the configuration changes, this parameter should be set to a new, unique value to differentiate
|
|
494
502
|
* the new bundle (build + configuration) from the old ones.
|
|
495
503
|
*/ bundleVersion;
|
|
504
|
+
/**
|
|
505
|
+
* Specifies whether the token should be automatically refreshed when it expires.
|
|
506
|
+
*/ autoRefresh = true;
|
|
496
507
|
/**
|
|
497
508
|
* Other plugins use this token for the authorization process. It handles token requesting and refreshing.
|
|
498
509
|
* Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.
|
|
@@ -537,7 +548,9 @@ const BASE64_HEADER_REG_EXP = /^data:(\S*?);base64,/;
|
|
|
537
548
|
// behavior we need to catch the exception and destroy the uninitialized token instance.
|
|
538
549
|
// See: https://github.com/ckeditor/ckeditor5/issues/17531
|
|
539
550
|
const cloudServicesCore = this.context.plugins.get('CloudServicesCore');
|
|
540
|
-
const uninitializedToken = cloudServicesCore.createToken(this.tokenUrl
|
|
551
|
+
const uninitializedToken = cloudServicesCore.createToken(this.tokenUrl, {
|
|
552
|
+
autoRefresh: this.autoRefresh
|
|
553
|
+
});
|
|
541
554
|
try {
|
|
542
555
|
this.token = await uninitializedToken.init();
|
|
543
556
|
this._tokens.set(this.tokenUrl, this.token);
|
|
@@ -557,7 +570,9 @@ const BASE64_HEADER_REG_EXP = /^data:(\S*?);base64,/;
|
|
|
557
570
|
return this.getTokenFor(tokenUrl);
|
|
558
571
|
}
|
|
559
572
|
const cloudServicesCore = this.context.plugins.get('CloudServicesCore');
|
|
560
|
-
const token = await cloudServicesCore.createToken(tokenUrl
|
|
573
|
+
const token = await cloudServicesCore.createToken(tokenUrl, {
|
|
574
|
+
autoRefresh: this.autoRefresh
|
|
575
|
+
}).init();
|
|
561
576
|
this._tokens.set(tokenUrl, token);
|
|
562
577
|
return token;
|
|
563
578
|
}
|
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_FAILED_REFRESH_TIMEOUT_TIME","Token","ObservableMixin","_refresh","_options","_tokenRefreshTimeout","_isDestroyed","tokenUrlOrRefreshToken","options","CKEditorError","initValue","_validateTokenValue","set","defaultRefreshToken","init","Promise","resolve","reject","value","refreshToken","then","catch","_registerRefreshTokenTimeout","err","logWarning","destroy","clearTimeout","tokenValue","isString","isPlainString","test","isJWTFormat","split","length","timeoutTime","tokenRefreshTimeoutTime","_getTokenRefreshTimeoutTime","setTimeout","binaryTokenPayload","exp","tokenExpireTime","JSON","parse","atob","Math","floor","Date","now","create","token","tokenUrl","xhr","XMLHttpRequest","open","addEventListener","statusCode","status","xhrResponse","response","Error","send","BASE64_HEADER_REG_EXP","FileUploader","EmitterMixin","file","_token","_apiAddress","fileOrData","apiAddress","_isBase64","_base64ToBlob","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","isOfficialPlugin","createToken","createUploadGateway","CloudServices","uploadUrl","webSocketUrl","bundleVersion","_tokens","Map","requires","config","context","get","key","Object","entries","cloudServicesCore","plugins","uninitializedToken","registerTokenUrl","has","getTokenFor","values"],"mappings":"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","file":"index.js.map","sourcesContent":["import { ContextPlugin } from '@ckeditor/ckeditor5-core/dist/index.js';\nimport { ObservableMixin, CKEditorError, logWarning, EmitterMixin } from '@ckeditor/ckeditor5-utils/dist/index.js';\n\nconst DEFAULT_OPTIONS = {\n autoRefresh: true\n};\nconst DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000; // 1 hour\nconst TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds\n/**\n * The class representing the token used for communication with CKEditor Cloud Services.\n * The value of the token is retrieved from the specified URL and refreshed every 1 hour by default.\n * If the token retrieval fails, the token will automatically retry in 5 seconds intervals.\n */ class Token extends /* #__PURE__ */ ObservableMixin() {\n /**\n\t * Base refreshing function.\n\t */ _refresh;\n /**\n\t * Cached token options.\n\t */ _options;\n /**\n\t * `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~TokenOptions auto refresh} is enabled.\n\t */ _tokenRefreshTimeout;\n /**\n\t * Flag indicating whether the token has been destroyed.\n\t */ _isDestroyed = false;\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 overridden in tests.\n\t *\n\t * This method will be invoked periodically based on the token expiry date after first call to keep the token up-to-date\n\t * (requires {@link module:cloud-services/token/token~TokenOptions auto refresh option} to be set).\n\t *\n\t * If the token refresh fails, the method will retry in 5 seconds intervals until success or the token gets\n\t * {@link #destroy destroyed}.\n\t */ refreshToken() {\n const autoRefresh = this._options.autoRefresh;\n return this._refresh().then((value)=>{\n this._validateTokenValue(value);\n this.set('value', value);\n if (autoRefresh) {\n this._registerRefreshTokenTimeout();\n }\n return this;\n }).catch((err)=>{\n /**\n\t\t\t\t * You will see this warning when the CKEditor {@link module:cloud-services/token/token~Token token} could not be refreshed.\n\t\t\t\t * This may be a result of a network error, a token endpoint (server) error, or an invalid\n\t\t\t\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl token URL configuration}.\n\t\t\t\t *\n\t\t\t\t * If this warning repeats, please make sure that the configuration is correct and that the token\n\t\t\t\t * endpoint is up and running. {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl Learn more}\n\t\t\t\t * about token configuration.\n\t\t\t\t *\n\t\t\t\t * **Note:** If the token's {@link module:cloud-services/token/token~TokenOptions auto refresh option} is enabled,\n\t\t\t\t * attempts to refresh will be made until success or token's\n\t\t\t\t * {@link module:cloud-services/token/token~Token#destroy destruction}.\n\t\t\t\t *\n\t\t\t\t * @error token-refresh-failed\n\t\t\t\t * @param {boolean} autoRefresh Whether the token will keep auto refreshing.\n\t\t\t\t */ logWarning('token-refresh-failed', {\n autoRefresh\n });\n // If the refresh failed, keep trying to refresh the token. Failing to do so will eventually\n // lead to the disconnection from the RTC service and the editing session (and potential data loss\n // if the user keeps editing).\n if (autoRefresh) {\n this._registerRefreshTokenTimeout(TOKEN_FAILED_REFRESH_TIMEOUT_TIME);\n }\n throw err;\n });\n }\n /**\n\t * Destroys token instance. Stops refreshing.\n\t */ destroy() {\n this._isDestroyed = true;\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(timeoutTime) {\n clearTimeout(this._tokenRefreshTimeout);\n if (this._isDestroyed) {\n return;\n }\n const tokenRefreshTimeoutTime = timeoutTime || this._getTokenRefreshTimeoutTime();\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 {\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 {\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 return !!string.match(BASE64_HEADER_REG_EXP)?.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 * @inheritDoc\n\t */ static get isOfficialPlugin() {\n return true;\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 isOfficialPlugin() {\n return true;\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 // Initialization of the token may fail. By default, the token is being refreshed on the failure.\n // The problem is that if this happens here, then the token refresh interval will be executed even\n // after destroying the editor (as the exception was thrown from `init` method). To prevent that\n // behavior we need to catch the exception and destroy the uninitialized token instance.\n // See: https://github.com/ckeditor/ckeditor5/issues/17531\n const cloudServicesCore = this.context.plugins.get('CloudServicesCore');\n const uninitializedToken = cloudServicesCore.createToken(this.tokenUrl);\n try {\n this.token = await uninitializedToken.init();\n this._tokens.set(this.tokenUrl, this.token);\n } catch (error) {\n uninitializedToken.destroy();\n throw error;\n }\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, Token };\n//# sourceMappingURL=index.js.map\n","/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module cloud-services/token/token\n */\n\nimport { ObservableMixin, CKEditorError, logWarning } from 'ckeditor5/src/utils.js';\nimport type { TokenUrl } from '../cloudservicesconfig.js';\n\nconst DEFAULT_OPTIONS = { autoRefresh: true };\nconst DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000; // 1 hour\nconst TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds\n\n/**\n * The class representing the token used for communication with CKEditor Cloud Services.\n * The value of the token is retrieved from the specified URL and refreshed every 1 hour by default.\n * If the token retrieval fails, the token will automatically retry in 5 seconds intervals.\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\t/**\n\t * Cached token options.\n\t */\n\tprivate _options: { initValue?: string; autoRefresh: boolean };\n\n\t/**\n\t * `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~TokenOptions auto refresh} is enabled.\n\t */\n\tprivate _tokenRefreshTimeout?: ReturnType<typeof setTimeout>;\n\n\t/**\n\t * Flag indicating whether the token has been destroyed.\n\t */\n\tprivate _isDestroyed = false;\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 overridden in tests.\n\t *\n\t * This method will be invoked periodically based on the token expiry date after first call to keep the token up-to-date\n\t * (requires {@link module:cloud-services/token/token~TokenOptions auto refresh option} to be set).\n\t *\n\t * If the token refresh fails, the method will retry in 5 seconds intervals until success or the token gets\n\t * {@link #destroy destroyed}.\n\t */\n\tpublic refreshToken(): Promise<InitializedToken> {\n\t\tconst autoRefresh = this._options.autoRefresh;\n\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 ( 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\t\t.catch( err => {\n\t\t\t\t/**\n\t\t\t\t * You will see this warning when the CKEditor {@link module:cloud-services/token/token~Token token} could not be refreshed.\n\t\t\t\t * This may be a result of a network error, a token endpoint (server) error, or an invalid\n\t\t\t\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl token URL configuration}.\n\t\t\t\t *\n\t\t\t\t * If this warning repeats, please make sure that the configuration is correct and that the token\n\t\t\t\t * endpoint is up and running. {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl Learn more}\n\t\t\t\t * about token configuration.\n\t\t\t\t *\n\t\t\t\t * **Note:** If the token's {@link module:cloud-services/token/token~TokenOptions auto refresh option} is enabled,\n\t\t\t\t * attempts to refresh will be made until success or token's\n\t\t\t\t * {@link module:cloud-services/token/token~Token#destroy destruction}.\n\t\t\t\t *\n\t\t\t\t * @error token-refresh-failed\n\t\t\t\t * @param {boolean} autoRefresh Whether the token will keep auto refreshing.\n\t\t\t\t */\n\t\t\t\tlogWarning( 'token-refresh-failed', { autoRefresh } );\n\n\t\t\t\t// If the refresh failed, keep trying to refresh the token. Failing to do so will eventually\n\t\t\t\t// lead to the disconnection from the RTC service and the editing session (and potential data loss\n\t\t\t\t// if the user keeps editing).\n\t\t\t\tif ( autoRefresh ) {\n\t\t\t\t\tthis._registerRefreshTokenTimeout( TOKEN_FAILED_REFRESH_TIMEOUT_TIME );\n\t\t\t\t}\n\n\t\t\t\tthrow err;\n\t\t\t} );\n\t}\n\n\t/**\n\t * Destroys token instance. Stops refreshing.\n\t */\n\tpublic destroy(): void {\n\t\tthis._isDestroyed = true;\n\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( timeoutTime?: number ) {\n\t\tclearTimeout( this._tokenRefreshTimeout );\n\n\t\tif ( this._isDestroyed ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokenRefreshTimeoutTime = timeoutTime || this._getTokenRefreshTimeoutTime();\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 {\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-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module cloud-services/uploadgateway/fileuploader\n */\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 {\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\treturn !!string.match( BASE64_HEADER_REG_EXP )?.length;\n}\n","/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\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-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\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 * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\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-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\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 override get isOfficialPlugin(): true {\n\t\treturn true;\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\t// Initialization of the token may fail. By default, the token is being refreshed on the failure.\n\t\t// The problem is that if this happens here, then the token refresh interval will be executed even\n\t\t// after destroying the editor (as the exception was thrown from `init` method). To prevent that\n\t\t// behavior we need to catch the exception and destroy the uninitialized token instance.\n\t\t// See: https://github.com/ckeditor/ckeditor5/issues/17531\n\t\tconst cloudServicesCore: CloudServicesCore = this.context.plugins.get( 'CloudServicesCore' );\n\t\tconst uninitializedToken = cloudServicesCore.createToken( this.tokenUrl );\n\n\t\ttry {\n\t\t\tthis.token = await uninitializedToken.init();\n\t\t\tthis._tokens.set( this.tokenUrl, this.token );\n\t\t} catch ( error ) {\n\t\t\tuninitializedToken.destroy();\n\t\t\tthrow error;\n\t\t}\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_FAILED_REFRESH_TIMEOUT_TIME","Token","ObservableMixin","_refresh","_options","_tokenRefreshTimeout","_isDestroyed","tokenUrlOrRefreshToken","options","CKEditorError","initValue","_validateTokenValue","set","defaultRefreshToken","init","Promise","resolve","reject","value","refreshToken","then","catch","_registerRefreshTokenTimeout","err","logWarning","destroy","clearTimeout","tokenValue","isString","isPlainString","test","isJWTFormat","split","length","timeoutTime","tokenRefreshTimeoutTime","_getTokenRefreshTimeoutTime","setTimeout","binaryTokenPayload","exp","tokenExpireTime","JSON","parse","atob","console","warn","Math","floor","Date","now","create","token","tokenUrl","xhr","XMLHttpRequest","open","addEventListener","statusCode","status","xhrResponse","response","Error","send","BASE64_HEADER_REG_EXP","FileUploader","EmitterMixin","file","_token","_apiAddress","fileOrData","apiAddress","_isBase64","_base64ToBlob","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","isOfficialPlugin","createToken","createUploadGateway","CloudServices","uploadUrl","webSocketUrl","bundleVersion","_tokens","Map","requires","config","context","get","key","Object","entries","cloudServicesCore","plugins","uninitializedToken","registerTokenUrl","has","getTokenFor","values"],"mappings":";;;;AAAA,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACtE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;;ACWlH,KAAA,CAAMA,eAAAA,CAAAA,CAAAA,CAAkB;ADRxB,CAAC,CAAC,CAAC,CCQuBC,WAAAA,CAAAA,CAAa;AAAK,CAAA;AAC5C,KAAA,CAAMC,kCAAAA,CAAAA,CAAAA,CAAqC,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC3C,KAAA,CAAMC,iCAAAA,CAAAA,CAAAA,CAAoC,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAE1C,CAAA,CAAA;ADPA,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;AACvF,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO;AACnG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS;ACSzF,CAAA,CAAA,CAAA,CACM,KAAA,CAAMC,KAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAAA,CAAAA,CAA8BC,eAAAA,CAAAA,CAAAA,CAAAA;AAY1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADnBD,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ;ACqB1B,CAAA,CAAA,CAAA,CAAA,CACD,QAAQC;AAER,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADrBD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;ACuBtB,CAAA,CAAA,CAAA,CAAA,CACD,QAAQC;AAER,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADvBD,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO;AAC9H,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO;ACyBZ,CAAA,CAAA,CAAA,CAAA,CACD,oBAAQC;AAER,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADzBD,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS;AACxD,CAAC,CAAC,CAAC,CAAC,CC2BKC,YAAAA,CAAAA,CAAAA,CAAe,KAAA;AAEvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AD3BD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ;AAC5B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO;AAC7F,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACnH,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,SAAS;AC6BhH,CAAA,CAAA,CAAA,CAAA,CACD,WAAA,CAAaC,sBAAgC,CAAA,CAAEC,OAAAA,CAAAA,CAAAA,CAAqC,CAAA,CAAE,CAAG;AD5B1F,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CC6BL,KAAK,CAAA,CAAA;AAEL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAACD,sBAAAA,CAAAA,CAAyB;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AD7BH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ;AACrE,CAAC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AC+B7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACD,KAAA,CAAM,GAAA,CAAIE,aAAAA,CACT,CAAA,KAAA,CAAA,OAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CACA,IAAI,CAAA;AAEN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADjCF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCmCL,EAAA,CAAA,CAAKD,OAAAA,CAAQE,SAAS,CAAA,CAAG;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACC,mBAAmB,CAAEH,OAAAA,CAAQE,SAAS,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACE,GAAG,CAAE,CAAA,KAAA,CAAA,CAAA,CAASJ,OAAAA,CAAQE,SAAS,CAAA;ADnCtC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCqCL,EAAA,CAAA,CAAK,MAAA,CAAOH,sBAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA2B,CAAA,QAAA,CAAA,CAAA,CAAa;ADpCtD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCqCR,IAAI,CAACJ,QAAQ,CAAA,CAAA,CAAGI,sBAAAA;ADpCnB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCqCN,CAAA,IAAA,CAAO;AACN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACJ,QAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAMU,mBAAAA,CAAqBN,sBAAAA,CAAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADpCF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCsCL,IAAI,CAACH,QAAQ,CAAA,CAAA,CAAG;AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAGP,eAAe;AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAGW;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADnCD,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK;ACqCvB,CAAA,CAAA,CAAA,CAAA,CACD,IAAOM,CAAAA,CAAAA,CAAkC;ADpC1C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCqCL,MAAA,CAAO,GAAA,CAAIC,OAAAA,CAAS,CAAEC,OAAAA,CAAAA,CAASC,MAAAA,CAAAA,CAAAA,CAAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAAC,IAAI,CAACC,KAAK,CAAA,CAAG;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACC,YAAY,CAAA,CAAA,CACfC,IAAI,CAAEJ,OAAAA,CAAAA,CACNK,KAAK,CAAEJ,MAAAA,CAAAA;AAET,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,IAAI,CAACb,QAAQ,CAACN,WAAW,CAAA,CAAG;AAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACwB,4BAA4B,CAAA,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEAN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAS,IAAI,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AD1CD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK;AAClF,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AACrH,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;AAChH,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACxG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AC4C5B,CAAA,CAAA,CAAA,CAAA,CACD,YAAOG,CAAAA,CAAAA,CAA0C;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMrB,WAAAA,CAAAA,CAAAA,CAAc,IAAI,CAACM,QAAQ,CAACN,WAAW;AAE7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,IAAI,CAACK,QAAQ,CAAA,CAAA,CAClBiB,IAAI,CAAEF,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA;AD7CV,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CC8CP,IAAI,CAACP,mBAAmB,CAAEO,KAAAA,CAAAA;AD7C9B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CC8CP,IAAI,CAACN,GAAG,CAAE,CAAA,KAAA,CAAA,CAAA,CAASM,KAAAA,CAAAA;AAEnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAKpB,WAAAA,CAAAA,CAAc;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACwB,4BAA4B,CAAA,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,IAAI;AD/Cf,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCgDL,CAAA,CACCD,KAAK,CAAEE,CAAAA,GAAAA,CAAAA,CAAAA,CAAAA;AACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADhDJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS;AAC/H,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;AAC7G,CAAC,CAAC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAChG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;AAC3H,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa;AAChC,CAAC,CAAC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;AACtH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;AAC3E,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1E,CAAC,CAAC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;ACkD1E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACDC,UAAAA,CAAY,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,CAAwB;AAAE1B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AD/CtD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;AAC9F,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;ACkDrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAKA,WAAAA,CAAAA,CAAc;ADhDvB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCiDV,IAAI,CAACwB,4BAA4B,CAAEtB,iCAAAA,CAAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADhDJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCkDP,KAAA,CAAMuB,GAAAA;AACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACF,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADlDD,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAU;ACoD3C,CAAA,CAAA,CAAA,CAAA,CACD,OAAOE,CAAAA,CAAAA,CAAgB;ADnDxB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCoDL,IAAI,CAACnB,YAAY,CAAA,CAAA,CAAG,IAAA;ADnDtB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCqDLoB,YAAAA,CAAc,IAAI,CAACrB,oBAAoB,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADrDD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM;AAC9E,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ;AAC3C,CAAC,CAAC,CAAC,CAAC,CCuDKM,mBAAAA,CAAqBgB,UAAkB,CAAA,CAAG;ADtDnD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;AACrC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCuDL,KAAA,CAAMC,QAAAA,CAAAA,CAAAA,CAAW,MAAA,CAAOD,UAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAe,CAAA,MAAA,CAAA;ADtDzC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;ACyD7D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAME,aAAAA,CAAAA,CAAAA,CAAgB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAASC,IAAI,CAAEH,UAAAA,CAAAA;ADvDxC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS;AACrE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;AC0DxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMI,WAAAA,CAAAA,CAAAA,CAAcH,QAAAA,CAAAA,CAAAA,CAAAA,CAAYD,UAAAA,CAAWK,KAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAMC,MAAM,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AAEnE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAAA,CAAGJ,aAAAA,CAAAA,CAAAA,CAAAA,CAAiBE,WAAU,CAAA,CAAA,CAAM;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADzDH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;AAC/F,CAAC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;AC2D1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACD,KAAA,CAAM,GAAA,CAAItB,aAAAA,CAAe,CAAA,KAAA,CAAA,GAAA,CAAA,EAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,CAA2B,IAAI,CAAA;AACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AD3DD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;AACnE,CAAC,CAAC,CAAC,CAAC,CC6DKa,4BAAAA,CAA8BY,WAAoB,CAAA,CAAG;AD5D9D,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CC6DLR,YAAAA,CAAc,IAAI,CAACrB,oBAAoB,CAAA;AD5DzC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CC8DL,EAAA,CAAA,CAAK,IAAI,CAACC,YAAY,CAAA,CAAG;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM6B,uBAAAA,CAAAA,CAAAA,CAA0BD,WAAAA,CAAAA,CAAAA,CAAAA,CAAe,IAAI,CAACE,2BAA2B,CAAA,CAAA;AD9DjF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCgEL,IAAI,CAAC/B,oBAAoB,CAAA,CAAA,CAAGgC,UAAAA,CAAY,CAAA,CAAA,CAAA,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAClB,YAAY,CAAA,CAAA;AD/DpB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCgEN,CAAA,CAAGgB,uBAAAA,CAAAA;AACJ,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADhED,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO;AACvF,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,kCAAkC,CAAC,EAAE,CAAC,QAAQ;ACkE3H,CAAA,CAAA,CAAA,CAAA,CACD,2BAAQC,CAAAA,CAAAA,CAA8B;ADjEvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCkEL,GAAA,CAAI;ADjEN,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCkER,KAAA,CAAM,CAAA,CAAA,CAAIE,kBAAAA,CAAoB,CAAA,CAAA,CAAG,IAAI,CAACpB,KAAK,CAAEc,KAAK,CAAE,CAAA,CAAA,CAAA,CAAA;ADjEvD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCkER,KAAA,CAAM,CAAA,CAAEO,GAAAA,CAAAA,CAAKC,eAAe,CAAA,CAAE,CAAA,CAAA,CAAGC,IAAAA,CAAKC,KAAK,CAAEC,IAAAA,CAAML,kBAAAA,CAAAA,CAAAA;AAEnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAACE,eAAAA,CAAAA,CAAkB;ADlE3B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCmEX,MAAA,CAAOzC,kCAAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADlEH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;AACrE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO;ACqEnG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAKyC,eAAAA,CAAAA,CAAAA,CAAkB,UAAA,CAAA,CAAa;ADnEvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCoEXI,OAAAA,CAAQC,IAAI,CACX,CAAA,KAAA,CAAA,UAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,GAAA,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,KAAA,CAAA,UAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CACA;AAAEL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAML,uBAAAA,CAAAA,CAAAA,CAA0BW,IAAAA,CAAKC,KAAK,CAAE,CAAE,eAAEP,CAAAA,CAAAA,CAAkB,IAAA,CAAA,CAAA,CAASQ,IAAAA,CAAKC,GAAG,CAAA,CAAC,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA;ADtE7F,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCwER,MAAA,CAAOd,uBAAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,KAAA,CAAA,CAAM;ADvEV,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCwER,MAAA,CAAOpC,kCAAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADxED,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ;AAClF,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACnH,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,SAAS;AC0EhH,CAAA,CAAA,CAAA,CAAA,CACD,MAAA,CAAcmD,MAAAA,CAAQ3C,sBAAgC,CAAA,CAAEC,OAAAA,CAAAA,CAAAA,CAAqC,CAAA,CAAE,CAAA,CAA8B;ADzE9H,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CC0EL,KAAA,CAAM2C,KAAAA,CAAAA,CAAAA,CAAQ,GAAA,CAAIlD,KAAAA,CAAOM,sBAAAA,CAAAA,CAAwBC,OAAAA,CAAAA;AAEjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO2C,KAAAA,CAAMrC,IAAI,CAAA,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA;AACD;AAyBA,CAAA,CAAA;ADlGA,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ;AAC7G,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK;AACtE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO;AAChF,CAAC,CAAC,CAAC,CCoGH,QAAA,CAASD,mBAAAA,CAAqBuC,QAAgB,CAAA,CAAA;ADnG9C,CAAC,CAAC,CAAC,CCoGF,MAAA,CAAO,GAAA,CAAIrC,OAAAA,CAAiB,CAAEC,OAAAA,CAAAA,CAASC,MAAAA,CAAAA,CAAAA,CAAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMoC,GAAAA,CAAAA,CAAAA,CAAM,GAAA,CAAIC,cAAAA,CAAAA,CAAAA;ADnGlB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCqGLD,GAAAA,CAAIE,IAAI,CAAE,CAAA,GAAA,CAAA,CAAA,CAAOH,QAAAA,CAAAA;ADpGnB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCsGLC,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,IAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA;ADrGhC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCsGR,KAAA,CAAMC,UAAAA,CAAAA,CAAAA,CAAaJ,GAAAA,CAAIK,MAAM;ADrGhC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCsGR,KAAA,CAAMC,WAAAA,CAAAA,CAAAA,CAAcN,GAAAA,CAAIO,QAAQ;ADrGnC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CCuGR,EAAA,CAAA,CAAKH,UAAAA,CAAAA,CAAAA,CAAa,GAAA,CAAA,CAAA,CAAA,CAAOA,UAAAA,CAAAA,CAAAA,CAAa,GAAA,CAAA,CAAM;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ADtGJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG;AACtD,CAAC,CAAC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;ACwGnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACD,MAAA,CAAOxC,MAAAA,CACN,GAAA,CAAIR,aAAAA,CAAe,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAmC,IAAA,CAAA,CAAA;AAExD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAOO,OAAAA,CAAS2C,WAAAA,CAAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEAN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,KAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAMvC,MAAAA,CAAQ,GAAA,CAAI4C,KAAAA,CAAO,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AACxDR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,KAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAMvC,MAAAA,CAAQ,GAAA,CAAI4C,KAAAA,CAAO,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAExDR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAIS,IAAI,CAAA,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD;;AClTA,KAAA,CAAMC,qBAAAA,CAAAA,CAAAA,CAAwB,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AAE9B,CAAA,CAAA;AFuMA,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;AErM/C,CAAA,CAAA,CAAA,CACM,KAAA,CAAMC,YAAAA,CAAAA,OAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAAA,CAAAA,CAAqCC,YAAAA,CAAAA,CAAAA,CAAAA;AACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFsMD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AEpM/B,CAAA,CAAA,CAAA,CAAA,CACD,IAAgBC;AFqMjB,CAAC,CAAC,CAAC,CEnMKb,GAAAA;AAEP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFmMD,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;AEjMtC,CAAA,CAAA,CAAA,CAAA,CACD,MAAiBc;AAEjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFiMD,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO;AE/LrC,CAAA,CAAA,CAAA,CAAA,CACD,WAAiBC;AAEjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AF+LD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ;AACnC,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;AACxE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc;AAC9C,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO;AE7L/B,CAAA,CAAA,CAAA,CAAA,CACD,WAAA,CACCC,UAAyB,CAAA,CACzBlB,KAAuB,CAAA,CACvBmB,UAAkB,CACjB;AF0LH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEzLL,KAAK,CAAA,CAAA;AAEL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAACD,UAAAA,CAAAA,CAAa;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFyLH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ;AACjD,CAAC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;AAClC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEvLH,KAAA,CAAM,GAAA,CAAI5D,aAAAA,CAAe,CAAA,YAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAA6B,IAAA,CAAA;AACvD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAAC0C,KAAAA,CAAAA,CAAQ;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFuLH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ;AACnD,CAAC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;AAClC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CErLH,KAAA,CAAM,GAAA,CAAI1C,aAAAA,CAAe,CAAA,YAAA,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAA8B,IAAA,CAAA;AACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAAC6D,UAAAA,CAAAA,CAAa;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFqLH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ;AACxD,CAAC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;AACtC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEnLH,KAAA,CAAM,GAAA,CAAI7D,aAAAA,CAAe,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAoC,IAAA,CAAA;AAC9D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACyD,IAAI,CAAA,CAAA,CAAGK,SAAAA,CAAWF,UAAAA,CAAAA,CAAAA,CAAAA,CAAeG,aAAAA,CAAeH,UAAAA,CAAAA,CAAAA,CAAAA,CAAeA,UAAAA;AFmLtE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEjLL,IAAI,CAACF,MAAM,CAAA,CAAA,CAAGhB,KAAAA;AFkLhB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEjLL,IAAI,CAACiB,WAAW,CAAA,CAAA,CAAGE,UAAAA;AACpB,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFiLD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK;AAC1C,CAAC,CAAC,CAAC,CAAC,CE/KIG,UAAAA,CAAYC,QAAiE,CAAA,CAAS;AAC5F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACC,EAAE,CAA+C,CAAA,QAAA,CAAA,CAAA,CAAY,CAAEC,KAAAA,CAAAA,CAAOC,IAAAA,CAAAA,CAAAA,CAAUH,QAAAA,CAAUG,IAAAA,CAAAA,CAAAA;AAE/F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,IAAI;AACZ,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AF8KD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AAC/E,CAAC,CAAC,CAAC,CAAC,CE5KIC,OAAAA,CAASJ,QAAmC,CAAA,CAAS;AAC3D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACK,IAAI,CAAuC,CAAA,KAAA,CAAA,CAAA,CAAS,CAAEH,KAAAA,CAAAA,CAAOC,IAAAA,CAAAA,CAAAA,CAAUH,QAAAA,CAAUG,IAAAA,CAAAA,CAAAA;AAEtF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,IAAI;AACZ,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AF2KD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;AEzKvB,CAAA,CAAA,CAAA,CAAA,CACD,KAAOG,CAAAA,CAAAA,CAAc;AF0KtB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEzKL,IAAI,CAAC3B,GAAG,CAAE2B,KAAK,CAAA,CAAA;AAChB,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFyKD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;AEvK1B,CAAA,CAAA,CAAA,CAAA,CACD,IAAOlB,CAAAA,CAAAA,CAAgC;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACmB,eAAe,CAAA,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACC,mBAAmB,CAAA,CAAA;AFwK1B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEtKL,MAAA,CAAO,IAAI,CAACC,YAAY,CAAA,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFsKD,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO;AEpKtB,CAAA,CAAA,CAAA,CAAA,CACD,eAAQF,CAAAA,CAAAA,CAAkB;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAM5B,GAAAA,CAAAA,CAAAA,CAAM,GAAA,CAAIC,cAAAA,CAAAA,CAAAA;AAEhBD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAIE,IAAI,CAAE,CAAA,IAAA,CAAA,CAAA,CAAQ,IAAI,CAACa,WAAW,CAAA;AAClCf,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAI+B,gBAAgB,CAAE,CAAA,aAAA,CAAA,CAAA,CAAiB,IAAI,CAACjB,MAAM,CAACjD,KAAK,CAAA;AACxDmC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAIgC,YAAY,CAAA,CAAA,CAAG,CAAA,IAAA,CAAA;AFoKrB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CElKL,IAAI,CAAChC,GAAG,CAAA,CAAA,CAAGA,GAAAA;AACZ,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFkKD,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG;AEhK/B,CAAA,CAAA,CAAA,CAAA,CACD,mBAAQ6B,CAAAA,CAAAA,CAAsB;AFiK/B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEhKL,KAAA,CAAM7B,GAAAA,CAAAA,CAAAA,CAAM,IAAI,CAACA,GAAG;AAEpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMyB,OAAAA,CAAAA,CAAAA,CAAU,CAAEQ,OAAAA,CAAAA,CAAAA,CAAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,CAAA,CAAA,CAAA,CAAM,IAAI,CAACC,IAAI,CAAuC,CAAA,KAAA,CAAA,CAAA,CAASD,OAAAA,CAAAA;AACvE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFgKF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE9JLjC,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,KAAA,CAAA,CAAA,CAASsB,OAAAA,CAAS,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AF+J1C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE9JLzB,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,KAAA,CAAA,CAAA,CAASsB,OAAAA,CAAS,CAAA,KAAA,CAAA,CAAA,CAAA;AAExC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CACA,EAAA,CAAA,CAAKzB,GAAAA,CAAImC,MAAM,CAAA,CAAG;AACjBnC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAImC,MAAM,CAAChC,gBAAgB,CAAE,CAAA,QAAA,CAAA,CAAA,CAAYoB,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA;AF6J5C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE5JX,EAAA,CAAA,CAAKA,KAAAA,CAAMa,gBAAgB,CAAA,CAAG;AF6JlC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE5Jd,IAAI,CAACF,IAAI,CAA+C,CAAA,QAAA,CAAA,CAAA,CAAY;AACnEG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,KAAAA,CAAAA,CAAOd,KAAAA,CAAMc,KAAK;AAClBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAAAA,CAAUf,KAAAA,CAAMgB;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AF6JF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE3JLvC,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,IAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA;AF4JhC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE3JR,KAAA,CAAMC,UAAAA,CAAAA,CAAAA,CAAaJ,GAAAA,CAAIK,MAAM;AF4JhC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE3JR,KAAA,CAAMC,WAAAA,CAAAA,CAAAA,CAAcN,GAAAA,CAAIO,QAAQ;AF4JnC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE1JR,EAAA,CAAA,CAAKH,UAAAA,CAAAA,CAAAA,CAAa,GAAA,CAAA,CAAA,CAAA,CAAOA,UAAAA,CAAAA,CAAAA,CAAa,GAAA,CAAA,CAAM;AF2J/C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CE1JX,MAAA,CAAO,IAAI,CAAC8B,IAAI,CAAuC,CAAA,KAAA,CAAA,CAAA,CAAS5B,WAAAA,CAAY2B,OAAO,CAAA,CAAA,CAAA,CAAI3B,WAAAA,CAAYkC,KAAK,CAAA;AACzG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AF0JD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO;AExJnB,CAAA,CAAA,CAAA,CAAA,CACD,YAAQV,CAAAA,CAAAA,CAAe;AACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMW,QAAAA,CAAAA,CAAAA,CAAW,GAAA,CAAIC,QAAAA,CAAAA,CAAAA;AFyJvB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CExJL,KAAA,CAAM1C,GAAAA,CAAAA,CAAAA,CAAM,IAAI,CAACA,GAAG;AAEpByC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QAAAA,CAASE,MAAM,CAAE,CAAA,IAAA,CAAA,CAAA,CAAQ,IAAI,CAAC9B,IAAI,CAAA;AFwJpC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEtJL,MAAA,CAAO,GAAA,CAAInD,OAAAA,CAAyB,CAAEC,OAAAA,CAAAA,CAASC,MAAAA,CAAAA,CAAAA,CAAAA;AFuJjD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEtJRoC,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,IAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA;AFuJjC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEtJX,KAAA,CAAMC,UAAAA,CAAAA,CAAAA,CAAaJ,GAAAA,CAAIK,MAAM;AFuJjC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEtJX,KAAA,CAAMC,WAAAA,CAAAA,CAAAA,CAAcN,GAAAA,CAAIO,QAAQ;AFuJpC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CErJX,EAAA,CAAA,CAAKH,UAAAA,CAAAA,CAAAA,CAAa,GAAA,CAAA,CAAA,CAAA,CAAOA,UAAAA,CAAAA,CAAAA,CAAa,GAAA,CAAA,CAAM;AFsJhD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CErJd,EAAA,CAAA,CAAKE,WAAAA,CAAY2B,OAAO,CAAA,CAAG;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFsJN,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM;AAC9B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC;AEpJrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACD,MAAA,CAAOrE,MAAAA,CAAQ,GAAA,CAAIR,aAAAA,CAClB,CAAA,YAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CACA,IAAI,CAAA,CACJ;AAAE6E,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAAS3B,WAAAA,CAAY2B;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFmJL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEjJd,MAAA,CAAOrE,MAAAA,CAAQ0C,WAAAA,CAAYkC,KAAK,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO7E,OAAAA,CAAS2C,WAAAA,CAAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEAN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,KAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAMvC,MAAAA,CAAQ,GAAA,CAAI4C,KAAAA,CAAO,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AACxDR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAIG,gBAAgB,CAAE,CAAA,KAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAMvC,MAAAA,CAAQ,GAAA,CAAI4C,KAAAA,CAAO,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAExDR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAIS,IAAI,CAAEgC,QAAAA,CAAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA;AACD;AAwBA,CAAA,CAAA;AFwHA,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1C,CAAC;AACD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI;AEtH3B,CAAA,CAAA,CAAA,CACD,QAAA,CAAStB,aAAAA,CAAeyB,MAAc,CAAA,CAAEC,SAAAA,CAAAA,CAAAA,CAAY,GAAG,CAAA,CAAA;AFuHvD,CAAC,CAAC,CAAC,CEtHF,GAAA,CAAI;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMC,WAAAA,CAAAA,CAAAA,CAAcF,MAAAA,CAAOG,KAAK,CAAErC,qBAAAA,CAAwB,CAAE,CAAA,CAAG;AAC/D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMsC,UAAAA,CAAAA,CAAAA,CAAa1D,IAAAA,CAAMsD,MAAAA,CAAOK,OAAO,CAAEvC,qBAAAA,CAAAA,CAAuB,CAAA,CAAA,CAAA,CAAA;AAEhE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMwC,UAAAA,CAAAA,CAAAA,CAAgC,CAAA,CAAE;AFsH1C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEpHL,GAAA,CAAM,GAAA,CAAIC,MAAAA,CAAAA,CAAAA,CAAS,CAAA,CAAA,CAAGA,MAAAA,CAAAA,CAAAA,CAASH,UAAAA,CAAWpE,MAAM,CAAA,CAAEuE,MAAAA,CAAAA,CAAAA,CAAAA,CAAUN,SAAAA,CAAY;AACvE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMO,KAAAA,CAAAA,CAAAA,CAAQJ,UAAAA,CAAWI,KAAK,CAAED,MAAAA,CAAAA,CAAQA,MAAAA,CAAAA,CAAAA,CAASN,SAAAA,CAAAA;AACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMQ,WAAAA,CAAAA,CAAAA,CAAc,GAAA,CAAIC,KAAAA,CAAeF,KAAAA,CAAMxE,MAAM,CAAA;AAEnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAM,GAAA,CAAI2E,CAAAA,CAAAA,CAAAA,CAAI,CAAA,CAAA,CAAGA,CAAAA,CAAAA,CAAAA,CAAIH,KAAAA,CAAMxE,MAAM,CAAA,CAAE2E,CAAAA,CAAAA,CAAAA,CAAM;AACxCF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,WAAW,CAAEE,CAAAA,CAAG,CAAA,CAAA,CAAGH,KAAAA,CAAMI,UAAU,CAAED,CAAAA,CAAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFoHH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CElHRL,UAAAA,CAAWO,IAAI,CAAE,GAAA,CAAIC,UAAAA,CAAYL,WAAAA,CAAAA,CAAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFmHF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEjHL,MAAA,CAAO,GAAA,CAAIM,IAAAA,CAAMT,UAAAA,CAAAA,CAAY;AFkH/B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CElHsBU,IAAAA,CAAAA,CAAMd;AAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,KAAA,CAAA,CAAM;AACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AFoHF,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;AAC5C,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAC7C,CAAC,CAAC,CAAC,CAAC,CAAC,CElHH,KAAA,CAAM,GAAA,CAAI1F,aAAAA,CAAe,CAAA,YAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAA0C,IAAA,CAAA;AACpE,CAAA,CAAA,CAAA,CAAA;AACD;AAEA,CAAA,CAAA;AFkHA,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM;AAC/B,CAAC,CAAC,CAAC,CEhHH,QAAA,CAAS8D,SAAAA,CAAW2C,MAAqB,CAAA,CAAA;AFiHzC,CAAC,CAAC,CAAC,CEhHF,EAAA,CAAA,CAAK,MAAA,CAAOA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAW,CAAA,MAAA,CAAA,CAAA,CAAW;AFiHnC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CEhHL,MAAA,CAAO,KAAA;AACR,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAO,CAAC,CAACA,MAAAA,CAAOd,KAAK,CAAErC,qBAAAA,CAAAA,CAAAA,CAAyB9B,MAAAA;AACjD;;ACpQA,CAAA,CAAA;AHsXA,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;AGpXjE,CAAA,CAAA,CAAA,CACM,KAAA,CAAMkF,aAAAA,CAAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AHqXD,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;AGnXtC,CAAA,CAAA,CAAA,CAAA,CACD,MAAiBhD;AAEjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AHmXD,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO;AGjXrC,CAAA,CAAA,CAAA,CAAA,CACD,WAAiBC;AAEjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AHiXD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ;AACpC,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc;AAC9C,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO;AG/W/B,CAAA,CAAA,CAAA,CAAA,CACD,WAAA,CAAajB,KAAuB,CAAA,CAAEmB,UAAkB,CAAG;AAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAACnB,KAAAA,CAAAA,CAAQ;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AHgXH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ;AAC5B,CAAC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;AACnC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CG9WH,KAAA,CAAM,GAAA,CAAI1C,aAAAA,CAAe,CAAA,aAAA,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,CAA+B,IAAA,CAAA;AACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAAC6D,UAAAA,CAAAA,CAAa;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AH8WH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ;AAClC,CAAC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;AACvC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CG5WH,KAAA,CAAM,GAAA,CAAI7D,aAAAA,CAAe,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAqC,IAAA,CAAA;AAC/D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AH6WF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CG3WL,IAAI,CAAC0D,MAAM,CAAA,CAAA,CAAGhB,KAAAA;AH4WhB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CG3WL,IAAI,CAACiB,WAAW,CAAA,CAAA,CAAGE,UAAAA;AACpB,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AH2WD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/D,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM;AAC/F,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACN,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;AACtF,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ;AAC5G,CAAC,CAAC,CAAC,CAAC,CGzWIkB,MAAAA,CAAQnB,UAAyB,CAAA,CAAiB;AH0W1D,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CGzWL,MAAA,CAAO,GAAA,CAAIL,YAAAA,CAAcK,UAAAA,CAAAA,CAAY,IAAI,CAACF,MAAM,CAAA,CAAE,IAAI,CAACC,WAAW,CAAA;AACnE,CAAA,CAAA,CAAA,CAAA;AACD;;AC9DA,CAAA,CAAA;AJ0aA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;AACrG,CAAC,CAAC,CAAC,CIxaI,KAAA,CAAMgD,iBAAAA,CAAAA,OAAAA,CAA0BC,aAAAA,CAAAA;AACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AJyaD,CAAC,CAAC,CAAC,CAAC,CAAC;AIvaH,CAAA,CAAA,CAAA,CAAA,CACD,MAAA,CAAA,GAAA,CAAkBC,UAAAA,CAAAA,CAAAA,CAAa;AJwahC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CIvaL,MAAA,CAAO,CAAA,iBAAA,CAAA;AACR,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AJuaD,CAAC,CAAC,CAAC,CAAC,CAAC;AIraH,CAAA,CAAA,CAAA,CAAA,CACD,MAAA,CAAA,GAAA,CAA2BC,gBAAAA,CAAAA,CAAAA,CAAyB;AJsarD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CIraL,MAAA,CAAO,IAAA;AACR,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AJqaD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ;AACxE,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACnH,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,SAAS;AAClH,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK;AACvD,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa;AInajF,CAAA,CAAA,CAAA,CAAA,CACD,WAAOC,CAAajH,sBAAgC,CAAA,CAAEC,OAAmC,CAAA,CAAU;AJoapG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CInaL,MAAA,CAAO,GAAA,CAAIP,KAAAA,CAAOM,sBAAAA,CAAAA,CAAwBC,OAAAA,CAAAA;AAC3C,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AJmaD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,QAAQ;AAChG,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc;AAC9C,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO;AIja/B,CAAA,CAAA,CAAA,CAAA,CACD,mBAAOiH,CAAqBtE,KAAuB,CAAA,CAAEmB,UAAkB,CAAA,CAAkB;AJka1F,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CIjaL,MAAA,CAAO,GAAA,CAAI6C,aAAAA,CAAehE,KAAAA,CAAAA,CAAOmB,UAAAA,CAAAA;AAClC,CAAA,CAAA,CAAA,CAAA;AACD;;ACtCA,CAAA,CAAA;AL0cA,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;AACrF,CAAC;AACD,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAClG,CAAC,CAAC,CAAC,CKxcI,KAAA,CAAMoD,aAAAA,CAAAA,OAAAA,CAAsBL,aAAAA,CAAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALycD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;AAC3G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO;AKvcjG,CAAA,CAAA,CAAA,CAAA,CACD,QAAgBjE;AAEhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALucD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ;AKrc/C,CAAA,CAAA,CAAA,CAAA,CACD,SAAgBuE;AAEhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALqcD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC;AACjI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACzH,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS;AACzC,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ;AACxI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO;AKnclI,CAAA,CAAA,CAAA,CAAA,CACD,YAAgBC;AAEhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALmcD,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ;AAC7H,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnH,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;AKjc1D,CAAA,CAAA,CAAA,CAAA,CACD,aAAgBC;AAEhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALicD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO;AACjF,CAAC,CAAC,CAAC,CAAC,CK/ba/H,WAAAA,CAAAA,CAAAA,CAAuB,IAAA;AAEvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AL+bD,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU;AAC1G,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ;AAC3H,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,CAAC,CK7bIqD,KAAAA,CAAAA,CAAAA,CAAiC,IAAA;AAExC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AL6bD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI;AAC3D,CAAC,CAAC,CAAC,CAAC,CK3bc2E,OAAAA,CAAAA,CAAAA,CAAU,GAAA,CAAIC,GAAAA,CAAAA,CAAAA;AAE/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AL2bD,CAAC,CAAC,CAAC,CAAC,CAAC;AKzbH,CAAA,CAAA,CAAA,CAAA,CACD,MAAA,CAAA,GAAA,CAAkBT,UAAAA,CAAAA,CAAAA,CAAa;AL0bhC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKzbL,MAAA,CAAO,CAAA,aAAA,CAAA;AACR,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALybD,CAAC,CAAC,CAAC,CAAC,CAAC;AKvbH,CAAA,CAAA,CAAA,CAAA,CACD,MAAA,CAAA,GAAA,CAA2BC,gBAAAA,CAAAA,CAAAA,CAAyB;ALwbrD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKvbL,MAAA,CAAO,IAAA;AACR,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALubD,CAAC,CAAC,CAAC,CAAC,CAAC;AKrbH,CAAA,CAAA,CAAA,CAAA,CACD,MAAA,CAAA,GAAA,CAAkBS,QAAAA,CAAAA,CAAAA,CAAW;ALsb9B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKrbL,MAAA,CAAO;AAAEZ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALubD,CAAC,CAAC,CAAC,CAAC,CAAC;AKrbH,CAAA,CAAA,CAAA,CAAA,CACD,KAAA,CAAatG,IAAAA,CAAAA,CAAAA,CAAsB;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMmH,MAAAA,CAAAA,CAAAA,CAAS,IAAI,CAACC,OAAO,CAACD,MAAM;AAElC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMzH,OAAAA,CAAAA,CAAAA,CAAUyH,MAAAA,CAAOE,GAAG,CAAE,CAAA,aAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAC;ALqbpD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKnbL,GAAA,CAAA,CAAM,KAAA,CAAM,CAAEC,GAAAA,CAAAA,CAAKlH,KAAAA,CAAO,CAAA,EAAA,CAAImH,MAAAA,CAAOC,OAAO,CAAE9H,OAAAA,CAAAA,CAAmE;AAChH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,IAA6B,CAAE4H,GAAAA,CAAK,CAAA,CAAA,CAAGlH,KAAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAAC,IAAI,CAACkC,QAAQ,CAAA,CAAG;ALmbxB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKlbR,IAAI,CAACD,KAAK,CAAA,CAAA,CAAG,IAAA;AAEb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA;AACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALkbF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO;AACxG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;AACpG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ;AAC/F,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;AAC7D,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKhbL,KAAA,CAAMoF,iBAAAA,CAAAA,CAAAA,CAAuC,IAAI,CAACL,OAAO,CAACM,OAAO,CAACL,GAAG,CAAE,CAAA,iBAAA,CAAA,CAAA;AACvE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMM,kBAAAA,CAAAA,CAAAA,CAAqBF,iBAAAA,CAAkBf,WAAW,CAAE,IAAI,CAACpE,QAAQ,CAAA,CAAE;ALib3E,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKjbkEtD,WAAAA,CAAAA,CAAa,IAAI,CAACA;AAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALmb3G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKjbL,GAAA,CAAI;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACqD,KAAK,CAAA,CAAA,CAAG,KAAA,CAAMsF,kBAAAA,CAAmB3H,IAAI,CAAA,CAAA;ALkb7C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKjbR,IAAI,CAACgH,OAAO,CAAClH,GAAG,CAAE,IAAI,CAACwC,QAAQ,CAAA,CAAE,IAAI,CAACD,KAAK,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,KAAA,CAAA,CAAQ0C,KAAAA,CAAAA,CAAQ;AACjB4C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,kBAAAA,CAAmBhH,OAAO,CAAA,CAAA;ALkb7B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKjbR,KAAA,CAAMoE,KAAAA;AACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALibD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC;AAC/H,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO;AACnG,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;AACrH,CAAC,CAAC,CAAC,CAAC,CK/aH,KAAA,CAAa6C,gBAAAA,CAAkBtF,QAAkB,CAAA,CAA8B;ALgbhF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;AK9avF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,IAAI,CAAC0E,OAAO,CAACa,GAAG,CAAEvF,QAAAA,CAAAA,CAAAA,CAAa;ALgbtC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CK/aR,MAAA,CAAO,IAAI,CAACwF,WAAW,CAAExF,QAAAA,CAAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALgbF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CK9aL,KAAA,CAAMmF,iBAAAA,CAAAA,CAAAA,CAAuC,IAAI,CAACL,OAAO,CAACM,OAAO,CAACL,GAAG,CAAE,CAAA,iBAAA,CAAA,CAAA;AACvE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMhF,KAAAA,CAAAA,CAAAA,CAAQ,KAAA,CAAMoF,iBAAAA,CAAkBf,WAAW,CAAEpE,QAAAA,CAAAA,CAAU;AL+a/D,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CK/asDtD,WAAAA,CAAAA,CAAa,IAAI,CAACA;AAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIgB,IAAI,CAAA,CAAA;AAErG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAACgH,OAAO,CAAClH,GAAG,CAAEwC,QAAAA,CAAAA,CAAUD,KAAAA,CAAAA;ALgb9B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CK9aL,MAAA,CAAOA,KAAAA;AACR,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AL8aD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC;AAC/F,CAAC,CAAC;AACF,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO;AACrH,CAAC,CAAC,CAAC,CAAC,CK5aIyF,WAAAA,CAAaxF,QAAkB,CAAA,CAAqB;AAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAMD,KAAAA,CAAAA,CAAAA,CAAQ,IAAI,CAAC2E,OAAO,CAACK,GAAG,CAAE/E,QAAAA,CAAAA;AAEhC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAK,CAACD,KAAAA,CAAAA,CAAQ;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AL4aH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAC9H,CAAC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;AK1ajC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACD,KAAA,CAAM,GAAA,CAAI1C,aAAAA,CAAe,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAsC,IAAI,CAAA;AACpE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AL2aF,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CKzaL,MAAA,CAAO0C,KAAAA;AACR,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;ALyaD,CAAC,CAAC,CAAC,CAAC,CAAC;AKvaH,CAAA,CAAA,CAAA,CAAA,CACD,OAAgB1B,CAAAA,CAAAA,CAAgB;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAK,CAACA,OAAAA,CAAAA,CAAAA;AAEN,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAM,KAAA,CAAM0B,KAAAA,CAAAA,EAAAA,CAAS,IAAI,CAAC2E,OAAO,CAACe,MAAM,CAAA,CAAA,CAAK;AAC5C1F,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,KAAAA,CAAM1B,OAAO,CAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACD,CAAA,CAAA,CAAA,CAAA;AACD;;ALwaA,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC","file":"index.js.map","sourcesContent":["import { ContextPlugin } from '@ckeditor/ckeditor5-core/dist/index.js';\nimport { ObservableMixin, CKEditorError, logWarning, EmitterMixin } from '@ckeditor/ckeditor5-utils/dist/index.js';\n\nconst DEFAULT_OPTIONS = {\n autoRefresh: true\n};\nconst DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000; // 1 hour\nconst TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds\n/**\n * The class representing the token used for communication with CKEditor Cloud Services.\n * The value of the token is retrieved from the specified URL and refreshed every 1 hour by default.\n * If the token retrieval fails, the token will automatically retry in 5 seconds intervals.\n */ class Token extends /* #__PURE__ */ ObservableMixin() {\n /**\n\t * Base refreshing function.\n\t */ _refresh;\n /**\n\t * Cached token options.\n\t */ _options;\n /**\n\t * `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh}\n\t * is enabled.\n\t */ _tokenRefreshTimeout;\n /**\n\t * Flag indicating whether the token has been destroyed.\n\t */ _isDestroyed = false;\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 overridden in tests.\n\t *\n\t * This method will be invoked periodically based on the token expiry date after first call to keep the token up-to-date\n\t * (requires {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option} to be set).\n\t *\n\t * If the token refresh fails, the method will retry in 5 seconds intervals until success or the token gets\n\t * {@link #destroy destroyed}.\n\t */ refreshToken() {\n const autoRefresh = this._options.autoRefresh;\n return this._refresh().then((value)=>{\n this._validateTokenValue(value);\n this.set('value', value);\n if (autoRefresh) {\n this._registerRefreshTokenTimeout();\n }\n return this;\n }).catch((err)=>{\n /**\n\t\t\t\t * You will see this warning when the CKEditor {@link module:cloud-services/token/token~Token token} could not be refreshed.\n\t\t\t\t * This may be a result of a network error, a token endpoint (server) error, or an invalid\n\t\t\t\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl token URL configuration}.\n\t\t\t\t *\n\t\t\t\t * If this warning repeats, please make sure that the configuration is correct and that the token\n\t\t\t\t * endpoint is up and running. {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl Learn more}\n\t\t\t\t * about token configuration.\n\t\t\t\t *\n\t\t\t\t * **Note:** If the token's {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option}\n\t\t\t\t * is enabled, attempts to refresh will be made until success or token's\n\t\t\t\t * {@link module:cloud-services/token/token~Token#destroy destruction}.\n\t\t\t\t *\n\t\t\t\t * @error token-refresh-failed\n\t\t\t\t * @param {boolean} autoRefresh Whether the token will keep auto refreshing.\n\t\t\t\t */ logWarning('token-refresh-failed', {\n autoRefresh\n });\n // If the refresh failed, keep trying to refresh the token. Failing to do so will eventually\n // lead to the disconnection from the RTC service and the editing session (and potential data loss\n // if the user keeps editing).\n if (autoRefresh) {\n this._registerRefreshTokenTimeout(TOKEN_FAILED_REFRESH_TIMEOUT_TIME);\n }\n throw err;\n });\n }\n /**\n\t * Destroys token instance. Stops refreshing.\n\t */ destroy() {\n this._isDestroyed = true;\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(timeoutTime) {\n clearTimeout(this._tokenRefreshTimeout);\n if (this._isDestroyed) {\n return;\n }\n const tokenRefreshTimeoutTime = timeoutTime || this._getTokenRefreshTimeoutTime();\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 // Check if the token expire time exceeds 32-bit integer range\n // It could happen if the token expire time is provided in milliseconds instead of seconds.\n if (tokenExpireTime > 2147483647) {\n console.warn('Token expiration time exceeds 32-bit integer range. This might cause unpredictable token refresh timing. ' + 'Token expiration time should always be provided in seconds.', {\n tokenExpireTime\n });\n }\n const tokenRefreshTimeoutTime = Math.floor((tokenExpireTime * 1000 - Date.now()) / 2);\n return tokenRefreshTimeoutTime;\n } catch {\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 {\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 return !!string.match(BASE64_HEADER_REG_EXP)?.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 * @inheritDoc\n\t */ static get isOfficialPlugin() {\n return true;\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 * Specifies whether the token should be automatically refreshed when it expires.\n\t */ autoRefresh = true;\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 isOfficialPlugin() {\n return true;\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 // Initialization of the token may fail. By default, the token is being refreshed on the failure.\n // The problem is that if this happens here, then the token refresh interval will be executed even\n // after destroying the editor (as the exception was thrown from `init` method). To prevent that\n // behavior we need to catch the exception and destroy the uninitialized token instance.\n // See: https://github.com/ckeditor/ckeditor5/issues/17531\n const cloudServicesCore = this.context.plugins.get('CloudServicesCore');\n const uninitializedToken = cloudServicesCore.createToken(this.tokenUrl, {\n autoRefresh: this.autoRefresh\n });\n try {\n this.token = await uninitializedToken.init();\n this._tokens.set(this.tokenUrl, this.token);\n } catch (error) {\n uninitializedToken.destroy();\n throw error;\n }\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, {\n autoRefresh: this.autoRefresh\n }).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, Token };\n//# sourceMappingURL=index.js.map\n","/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module cloud-services/token/token\n */\n\nimport { ObservableMixin, CKEditorError, logWarning } from 'ckeditor5/src/utils.js';\nimport type { TokenUrl } from '../cloudservicesconfig.js';\n\nconst DEFAULT_OPTIONS = { autoRefresh: true };\nconst DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 3600000; // 1 hour\nconst TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds\n\n/**\n * The class representing the token used for communication with CKEditor Cloud Services.\n * The value of the token is retrieved from the specified URL and refreshed every 1 hour by default.\n * If the token retrieval fails, the token will automatically retry in 5 seconds intervals.\n */\nexport 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\t/**\n\t * Cached token options.\n\t */\n\tprivate _options: { initValue?: string; autoRefresh: boolean };\n\n\t/**\n\t * `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh}\n\t * is enabled.\n\t */\n\tprivate _tokenRefreshTimeout?: ReturnType<typeof setTimeout>;\n\n\t/**\n\t * Flag indicating whether the token has been destroyed.\n\t */\n\tprivate _isDestroyed = false;\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: CloudServicesTokenOptions = {} ) {\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 overridden in tests.\n\t *\n\t * This method will be invoked periodically based on the token expiry date after first call to keep the token up-to-date\n\t * (requires {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option} to be set).\n\t *\n\t * If the token refresh fails, the method will retry in 5 seconds intervals until success or the token gets\n\t * {@link #destroy destroyed}.\n\t */\n\tpublic refreshToken(): Promise<InitializedToken> {\n\t\tconst autoRefresh = this._options.autoRefresh;\n\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 ( 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\t\t.catch( err => {\n\t\t\t\t/**\n\t\t\t\t * You will see this warning when the CKEditor {@link module:cloud-services/token/token~Token token} could not be refreshed.\n\t\t\t\t * This may be a result of a network error, a token endpoint (server) error, or an invalid\n\t\t\t\t * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl token URL configuration}.\n\t\t\t\t *\n\t\t\t\t * If this warning repeats, please make sure that the configuration is correct and that the token\n\t\t\t\t * endpoint is up and running. {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl Learn more}\n\t\t\t\t * about token configuration.\n\t\t\t\t *\n\t\t\t\t * **Note:** If the token's {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option}\n\t\t\t\t * is enabled, attempts to refresh will be made until success or token's\n\t\t\t\t * {@link module:cloud-services/token/token~Token#destroy destruction}.\n\t\t\t\t *\n\t\t\t\t * @error token-refresh-failed\n\t\t\t\t * @param {boolean} autoRefresh Whether the token will keep auto refreshing.\n\t\t\t\t */\n\t\t\t\tlogWarning( 'token-refresh-failed', { autoRefresh } );\n\n\t\t\t\t// If the refresh failed, keep trying to refresh the token. Failing to do so will eventually\n\t\t\t\t// lead to the disconnection from the RTC service and the editing session (and potential data loss\n\t\t\t\t// if the user keeps editing).\n\t\t\t\tif ( autoRefresh ) {\n\t\t\t\t\tthis._registerRefreshTokenTimeout( TOKEN_FAILED_REFRESH_TIMEOUT_TIME );\n\t\t\t\t}\n\n\t\t\t\tthrow err;\n\t\t\t} );\n\t}\n\n\t/**\n\t * Destroys token instance. Stops refreshing.\n\t */\n\tpublic destroy(): void {\n\t\tthis._isDestroyed = true;\n\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( timeoutTime?: number ) {\n\t\tclearTimeout( this._tokenRefreshTimeout );\n\n\t\tif ( this._isDestroyed ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokenRefreshTimeoutTime = timeoutTime || this._getTokenRefreshTimeoutTime();\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\t// Check if the token expire time exceeds 32-bit integer range\n\t\t\t// It could happen if the token expire time is provided in milliseconds instead of seconds.\n\t\t\tif ( tokenExpireTime > 2147483647 ) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'Token expiration time exceeds 32-bit integer range. This might cause unpredictable token refresh timing. ' +\n\t\t\t\t\t'Token expiration time should always be provided in seconds.',\n\t\t\t\t\t{ tokenExpireTime }\n\t\t\t\t);\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 {\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: CloudServicesTokenOptions = {} ): 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 CloudServicesTokenOptions {\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-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module cloud-services/uploadgateway/fileuploader\n */\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 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<CloudServicesFileUploaderProgressErrorEvent>( '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<CloudServicesFileUploaderErrorEvent>( '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<CloudServicesFileUploaderErrorEvent>( '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<CloudServicesFileUploaderProgressErrorEvent>( '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<CloudServicesFileUploaderErrorEvent>( '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 CloudServicesFileUploaderErrorEvent = {\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 CloudServicesFileUploaderProgressErrorEvent = {\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 {\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\treturn !!string.match( BASE64_HEADER_REG_EXP )?.length;\n}\n","/**\n * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\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 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-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\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 CloudServicesTokenOptions } 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 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 * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\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?: CloudServicesTokenOptions ): 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-2025, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\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 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 * Specifies whether the token should be automatically refreshed when it expires.\n\t */\n\tpublic readonly autoRefresh: boolean = true;\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 override get isOfficialPlugin(): true {\n\t\treturn true;\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\t// Initialization of the token may fail. By default, the token is being refreshed on the failure.\n\t\t// The problem is that if this happens here, then the token refresh interval will be executed even\n\t\t// after destroying the editor (as the exception was thrown from `init` method). To prevent that\n\t\t// behavior we need to catch the exception and destroy the uninitialized token instance.\n\t\t// See: https://github.com/ckeditor/ckeditor5/issues/17531\n\t\tconst cloudServicesCore: CloudServicesCore = this.context.plugins.get( 'CloudServicesCore' );\n\t\tconst uninitializedToken = cloudServicesCore.createToken( this.tokenUrl, { autoRefresh: this.autoRefresh } );\n\n\t\ttry {\n\t\t\tthis.token = await uninitializedToken.init();\n\t\t\tthis._tokens.set( this.tokenUrl, this.token );\n\t\t} catch ( error ) {\n\t\t\tuninitializedToken.destroy();\n\t\t\tthrow error;\n\t\t}\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, { autoRefresh: this.autoRefresh } ).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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ckeditor/ckeditor5-cloud-services",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "46.0.0-alpha.1",
|
|
4
4
|
"description": "CKEditor 5's Cloud Services integration layer.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ckeditor",
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
"type": "module",
|
|
13
13
|
"main": "src/index.js",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@ckeditor/ckeditor5-core": "
|
|
16
|
-
"@ckeditor/ckeditor5-utils": "
|
|
17
|
-
"ckeditor5": "
|
|
15
|
+
"@ckeditor/ckeditor5-core": "46.0.0-alpha.1",
|
|
16
|
+
"@ckeditor/ckeditor5-utils": "46.0.0-alpha.1",
|
|
17
|
+
"ckeditor5": "46.0.0-alpha.1"
|
|
18
18
|
},
|
|
19
19
|
"author": "CKSource (http://cksource.com/)",
|
|
20
20
|
"license": "SEE LICENSE IN LICENSE.md",
|
package/src/cloudservices.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @module cloud-services/cloudservices
|
|
7
7
|
*/
|
|
8
8
|
import { ContextPlugin } from 'ckeditor5/src/core.js';
|
|
9
|
-
import CloudServicesCore from './cloudservicescore.js';
|
|
9
|
+
import { CloudServicesCore } from './cloudservicescore.js';
|
|
10
10
|
import type { CloudServicesConfig, TokenUrl } from './cloudservicesconfig.js';
|
|
11
11
|
import type { InitializedToken } from './token/token.js';
|
|
12
12
|
/**
|
|
@@ -15,7 +15,7 @@ import type { InitializedToken } from './token/token.js';
|
|
|
15
15
|
* It initializes the token provider based on
|
|
16
16
|
* the {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig `config.cloudService`}.
|
|
17
17
|
*/
|
|
18
|
-
export
|
|
18
|
+
export declare class CloudServices extends ContextPlugin implements CloudServicesConfig {
|
|
19
19
|
/**
|
|
20
20
|
* The authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the
|
|
21
21
|
* {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.
|
|
@@ -41,6 +41,10 @@ export default class CloudServices extends ContextPlugin implements CloudService
|
|
|
41
41
|
* the new bundle (build + configuration) from the old ones.
|
|
42
42
|
*/
|
|
43
43
|
readonly bundleVersion?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Specifies whether the token should be automatically refreshed when it expires.
|
|
46
|
+
*/
|
|
47
|
+
readonly autoRefresh: boolean;
|
|
44
48
|
/**
|
|
45
49
|
* Other plugins use this token for the authorization process. It handles token requesting and refreshing.
|
|
46
50
|
* Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.
|
package/src/cloudservices.js
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { ContextPlugin } from 'ckeditor5/src/core.js';
|
|
9
9
|
import { CKEditorError } from 'ckeditor5/src/utils.js';
|
|
10
|
-
import CloudServicesCore from './cloudservicescore.js';
|
|
10
|
+
import { CloudServicesCore } from './cloudservicescore.js';
|
|
11
11
|
/**
|
|
12
12
|
* Plugin introducing the integration between CKEditor 5 and CKEditor Cloud Services .
|
|
13
13
|
*
|
|
14
14
|
* It initializes the token provider based on
|
|
15
15
|
* the {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig `config.cloudService`}.
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export class CloudServices extends ContextPlugin {
|
|
18
18
|
/**
|
|
19
19
|
* The authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the
|
|
20
20
|
* {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.
|
|
@@ -40,6 +40,10 @@ export default class CloudServices extends ContextPlugin {
|
|
|
40
40
|
* the new bundle (build + configuration) from the old ones.
|
|
41
41
|
*/
|
|
42
42
|
bundleVersion;
|
|
43
|
+
/**
|
|
44
|
+
* Specifies whether the token should be automatically refreshed when it expires.
|
|
45
|
+
*/
|
|
46
|
+
autoRefresh = true;
|
|
43
47
|
/**
|
|
44
48
|
* Other plugins use this token for the authorization process. It handles token requesting and refreshing.
|
|
45
49
|
* Its value is `null` when {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} is not provided.
|
|
@@ -88,7 +92,7 @@ export default class CloudServices extends ContextPlugin {
|
|
|
88
92
|
// behavior we need to catch the exception and destroy the uninitialized token instance.
|
|
89
93
|
// See: https://github.com/ckeditor/ckeditor5/issues/17531
|
|
90
94
|
const cloudServicesCore = this.context.plugins.get('CloudServicesCore');
|
|
91
|
-
const uninitializedToken = cloudServicesCore.createToken(this.tokenUrl);
|
|
95
|
+
const uninitializedToken = cloudServicesCore.createToken(this.tokenUrl, { autoRefresh: this.autoRefresh });
|
|
92
96
|
try {
|
|
93
97
|
this.token = await uninitializedToken.init();
|
|
94
98
|
this._tokens.set(this.tokenUrl, this.token);
|
|
@@ -110,7 +114,7 @@ export default class CloudServices extends ContextPlugin {
|
|
|
110
114
|
return this.getTokenFor(tokenUrl);
|
|
111
115
|
}
|
|
112
116
|
const cloudServicesCore = this.context.plugins.get('CloudServicesCore');
|
|
113
|
-
const token = await cloudServicesCore.createToken(tokenUrl).init();
|
|
117
|
+
const token = await cloudServicesCore.createToken(tokenUrl, { autoRefresh: this.autoRefresh }).init();
|
|
114
118
|
this._tokens.set(tokenUrl, token);
|
|
115
119
|
return token;
|
|
116
120
|
}
|
|
@@ -124,4 +124,26 @@ export interface CloudServicesConfig {
|
|
|
124
124
|
* the new bundle (build + configuration) from the old ones.
|
|
125
125
|
*/
|
|
126
126
|
bundleVersion?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Specifies whether the token should be automatically refreshed when it expires.
|
|
129
|
+
*
|
|
130
|
+
* When set to `false`, the token will not be automatically refreshed, and you will need to handle token refresh manually.
|
|
131
|
+
*
|
|
132
|
+
* ```ts
|
|
133
|
+
* ClassicEditor
|
|
134
|
+
* .create( document.querySelector( '#editor' ), {
|
|
135
|
+
* cloudServices: {
|
|
136
|
+
* tokenUrl: 'https://example.com/cs-token-endpoint',
|
|
137
|
+
* // Disable automatic token refresh.
|
|
138
|
+
* autoRefresh: false,
|
|
139
|
+
* ...
|
|
140
|
+
* }
|
|
141
|
+
* } )
|
|
142
|
+
* .then( ... )
|
|
143
|
+
* .catch( ... );
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* @default true
|
|
147
|
+
*/
|
|
148
|
+
autoRefresh?: boolean;
|
|
127
149
|
}
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { ContextPlugin } from 'ckeditor5/src/core.js';
|
|
9
9
|
import type { TokenUrl } from './cloudservicesconfig.js';
|
|
10
|
-
import Token,
|
|
11
|
-
import UploadGateway from './uploadgateway/uploadgateway.js';
|
|
10
|
+
import { Token, type InitializedToken, type CloudServicesTokenOptions } from './token/token.js';
|
|
11
|
+
import { UploadGateway } from './uploadgateway/uploadgateway.js';
|
|
12
12
|
/**
|
|
13
13
|
* The `CloudServicesCore` plugin exposes the base API for communication with CKEditor Cloud Services.
|
|
14
14
|
*/
|
|
15
|
-
export
|
|
15
|
+
export declare class CloudServicesCore extends ContextPlugin {
|
|
16
16
|
/**
|
|
17
17
|
* @inheritDoc
|
|
18
18
|
*/
|
|
@@ -29,7 +29,7 @@ export default class CloudServicesCore extends ContextPlugin {
|
|
|
29
29
|
* @param options.initValue Initial value of the token.
|
|
30
30
|
* @param options.autoRefresh Specifies whether to start the refresh automatically.
|
|
31
31
|
*/
|
|
32
|
-
createToken(tokenUrlOrRefreshToken: TokenUrl, options?:
|
|
32
|
+
createToken(tokenUrlOrRefreshToken: TokenUrl, options?: CloudServicesTokenOptions): Token;
|
|
33
33
|
/**
|
|
34
34
|
* Creates the {@link module:cloud-services/uploadgateway/uploadgateway~UploadGateway} instance.
|
|
35
35
|
*
|
package/src/cloudservicescore.js
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
* @module cloud-services/cloudservicescore
|
|
7
7
|
*/
|
|
8
8
|
import { ContextPlugin } from 'ckeditor5/src/core.js';
|
|
9
|
-
import Token from './token/token.js';
|
|
10
|
-
import UploadGateway from './uploadgateway/uploadgateway.js';
|
|
9
|
+
import { Token } from './token/token.js';
|
|
10
|
+
import { UploadGateway } from './uploadgateway/uploadgateway.js';
|
|
11
11
|
/**
|
|
12
12
|
* The `CloudServicesCore` plugin exposes the base API for communication with CKEditor Cloud Services.
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
14
|
+
export class CloudServicesCore extends ContextPlugin {
|
|
15
15
|
/**
|
|
16
16
|
* @inheritDoc
|
|
17
17
|
*/
|
package/src/index.d.ts
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module cloud-services
|
|
7
7
|
*/
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
8
|
+
export { CloudServices } from './cloudservices.js';
|
|
9
|
+
export { CloudServicesCore } from './cloudservicescore.js';
|
|
10
10
|
export type { TokenUrl, CloudServicesConfig } from './cloudservicesconfig.js';
|
|
11
|
-
export {
|
|
12
|
-
export type {
|
|
13
|
-
export type {
|
|
11
|
+
export { Token, type InitializedToken, type CloudServicesTokenOptions } from './token/token.js';
|
|
12
|
+
export type { UploadGateway } from './uploadgateway/uploadgateway.js';
|
|
13
|
+
export type { FileUploader, CloudServicesFileUploaderErrorEvent, CloudServicesFileUploaderProgressErrorEvent } from './uploadgateway/fileuploader.js';
|
|
14
14
|
import './augmentation.js';
|
package/src/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module cloud-services
|
|
7
7
|
*/
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
8
|
+
export { CloudServices } from './cloudservices.js';
|
|
9
|
+
export { CloudServicesCore } from './cloudservicescore.js';
|
|
10
|
+
export { Token } from './token/token.js';
|
|
11
11
|
import './augmentation.js';
|
package/src/token/token.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ declare const Token_base: {
|
|
|
12
12
|
* The value of the token is retrieved from the specified URL and refreshed every 1 hour by default.
|
|
13
13
|
* If the token retrieval fails, the token will automatically retry in 5 seconds intervals.
|
|
14
14
|
*/
|
|
15
|
-
export
|
|
15
|
+
export declare class Token extends /* #__PURE__ */ Token_base {
|
|
16
16
|
/**
|
|
17
17
|
* Value of the token.
|
|
18
18
|
* The value of the token is undefined if `initValue` is not provided or `init` method was not called.
|
|
@@ -32,7 +32,8 @@ export default class Token extends /* #__PURE__ */ Token_base {
|
|
|
32
32
|
*/
|
|
33
33
|
private _options;
|
|
34
34
|
/**
|
|
35
|
-
* `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~
|
|
35
|
+
* `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh}
|
|
36
|
+
* is enabled.
|
|
36
37
|
*/
|
|
37
38
|
private _tokenRefreshTimeout?;
|
|
38
39
|
/**
|
|
@@ -46,7 +47,7 @@ export default class Token extends /* #__PURE__ */ Token_base {
|
|
|
46
47
|
* @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the
|
|
47
48
|
* value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.
|
|
48
49
|
*/
|
|
49
|
-
constructor(tokenUrlOrRefreshToken: TokenUrl, options?:
|
|
50
|
+
constructor(tokenUrlOrRefreshToken: TokenUrl, options?: CloudServicesTokenOptions);
|
|
50
51
|
/**
|
|
51
52
|
* Initializes the token.
|
|
52
53
|
*/
|
|
@@ -55,7 +56,7 @@ export default class Token extends /* #__PURE__ */ Token_base {
|
|
|
55
56
|
* Refresh token method. Useful in a method form as it can be overridden in tests.
|
|
56
57
|
*
|
|
57
58
|
* This method will be invoked periodically based on the token expiry date after first call to keep the token up-to-date
|
|
58
|
-
* (requires {@link module:cloud-services/token/token~
|
|
59
|
+
* (requires {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option} to be set).
|
|
59
60
|
*
|
|
60
61
|
* If the token refresh fails, the method will retry in 5 seconds intervals until success or the token gets
|
|
61
62
|
* {@link #destroy destroyed}.
|
|
@@ -87,7 +88,7 @@ export default class Token extends /* #__PURE__ */ Token_base {
|
|
|
87
88
|
* @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the
|
|
88
89
|
* value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.
|
|
89
90
|
*/
|
|
90
|
-
static create(tokenUrlOrRefreshToken: TokenUrl, options?:
|
|
91
|
+
static create(tokenUrlOrRefreshToken: TokenUrl, options?: CloudServicesTokenOptions): Promise<InitializedToken>;
|
|
91
92
|
}
|
|
92
93
|
/**
|
|
93
94
|
* A {@link ~Token} instance that has been initialized.
|
|
@@ -98,7 +99,7 @@ export type InitializedToken = Token & {
|
|
|
98
99
|
/**
|
|
99
100
|
* Options for creating tokens.
|
|
100
101
|
*/
|
|
101
|
-
export interface
|
|
102
|
+
export interface CloudServicesTokenOptions {
|
|
102
103
|
/**
|
|
103
104
|
* Initial value of the token.
|
|
104
105
|
*/
|
package/src/token/token.js
CHANGED
|
@@ -14,7 +14,7 @@ const TOKEN_FAILED_REFRESH_TIMEOUT_TIME = 5000; // 5 seconds
|
|
|
14
14
|
* The value of the token is retrieved from the specified URL and refreshed every 1 hour by default.
|
|
15
15
|
* If the token retrieval fails, the token will automatically retry in 5 seconds intervals.
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export class Token extends /* #__PURE__ */ ObservableMixin() {
|
|
18
18
|
/**
|
|
19
19
|
* Base refreshing function.
|
|
20
20
|
*/
|
|
@@ -24,7 +24,8 @@ export default class Token extends /* #__PURE__ */ ObservableMixin() {
|
|
|
24
24
|
*/
|
|
25
25
|
_options;
|
|
26
26
|
/**
|
|
27
|
-
* `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~
|
|
27
|
+
* `setTimeout()` id for a token refresh when {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh}
|
|
28
|
+
* is enabled.
|
|
28
29
|
*/
|
|
29
30
|
_tokenRefreshTimeout;
|
|
30
31
|
/**
|
|
@@ -81,7 +82,7 @@ export default class Token extends /* #__PURE__ */ ObservableMixin() {
|
|
|
81
82
|
* Refresh token method. Useful in a method form as it can be overridden in tests.
|
|
82
83
|
*
|
|
83
84
|
* This method will be invoked periodically based on the token expiry date after first call to keep the token up-to-date
|
|
84
|
-
* (requires {@link module:cloud-services/token/token~
|
|
85
|
+
* (requires {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option} to be set).
|
|
85
86
|
*
|
|
86
87
|
* If the token refresh fails, the method will retry in 5 seconds intervals until success or the token gets
|
|
87
88
|
* {@link #destroy destroyed}.
|
|
@@ -107,8 +108,8 @@ export default class Token extends /* #__PURE__ */ ObservableMixin() {
|
|
|
107
108
|
* endpoint is up and running. {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl Learn more}
|
|
108
109
|
* about token configuration.
|
|
109
110
|
*
|
|
110
|
-
* **Note:** If the token's {@link module:cloud-services/token/token~
|
|
111
|
-
* attempts to refresh will be made until success or token's
|
|
111
|
+
* **Note:** If the token's {@link module:cloud-services/token/token~CloudServicesTokenOptions auto refresh option}
|
|
112
|
+
* is enabled, attempts to refresh will be made until success or token's
|
|
112
113
|
* {@link module:cloud-services/token/token~Token#destroy destruction}.
|
|
113
114
|
*
|
|
114
115
|
* @error token-refresh-failed
|
|
@@ -178,6 +179,12 @@ export default class Token extends /* #__PURE__ */ ObservableMixin() {
|
|
|
178
179
|
if (!tokenExpireTime) {
|
|
179
180
|
return DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;
|
|
180
181
|
}
|
|
182
|
+
// Check if the token expire time exceeds 32-bit integer range
|
|
183
|
+
// It could happen if the token expire time is provided in milliseconds instead of seconds.
|
|
184
|
+
if (tokenExpireTime > 2147483647) {
|
|
185
|
+
console.warn('Token expiration time exceeds 32-bit integer range. This might cause unpredictable token refresh timing. ' +
|
|
186
|
+
'Token expiration time should always be provided in seconds.', { tokenExpireTime });
|
|
187
|
+
}
|
|
181
188
|
const tokenRefreshTimeoutTime = Math.floor(((tokenExpireTime * 1000) - Date.now()) / 2);
|
|
182
189
|
return tokenRefreshTimeoutTime;
|
|
183
190
|
}
|
|
@@ -14,7 +14,7 @@ declare const FileUploader_base: {
|
|
|
14
14
|
/**
|
|
15
15
|
* FileUploader class used to upload single file.
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export declare class FileUploader extends /* #__PURE__ */ FileUploader_base {
|
|
18
18
|
/**
|
|
19
19
|
* A file that is being uploaded.
|
|
20
20
|
*/
|
|
@@ -74,7 +74,7 @@ export default class FileUploader extends /* #__PURE__ */ FileUploader_base {
|
|
|
74
74
|
* @eventName ~FileUploader#error
|
|
75
75
|
* @param error Error message
|
|
76
76
|
*/
|
|
77
|
-
export type
|
|
77
|
+
export type CloudServicesFileUploaderErrorEvent = {
|
|
78
78
|
name: 'error';
|
|
79
79
|
args: [error: string];
|
|
80
80
|
};
|
|
@@ -84,7 +84,7 @@ export type FileUploaderErrorEvent = {
|
|
|
84
84
|
* @eventName ~FileUploader#progress
|
|
85
85
|
* @param status Total and uploaded status
|
|
86
86
|
*/
|
|
87
|
-
export type
|
|
87
|
+
export type CloudServicesFileUploaderProgressErrorEvent = {
|
|
88
88
|
name: 'progress';
|
|
89
89
|
args: [status: {
|
|
90
90
|
total: number;
|
|
@@ -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
|
|
10
|
+
export class FileUploader extends /* #__PURE__ */ EmitterMixin() {
|
|
11
11
|
/**
|
|
12
12
|
* A file that is being uploaded.
|
|
13
13
|
*/
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module cloud-services/uploadgateway/uploadgateway
|
|
7
7
|
*/
|
|
8
|
-
import FileUploader from './fileuploader.js';
|
|
8
|
+
import { FileUploader } from './fileuploader.js';
|
|
9
9
|
import type { InitializedToken } from '../token/token.js';
|
|
10
10
|
/**
|
|
11
11
|
* UploadGateway abstracts file uploads to CKEditor Cloud Services.
|
|
12
12
|
*/
|
|
13
|
-
export
|
|
13
|
+
export declare class UploadGateway {
|
|
14
14
|
/**
|
|
15
15
|
* CKEditor Cloud Services access token.
|
|
16
16
|
*/
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @module cloud-services/uploadgateway/uploadgateway
|
|
7
7
|
*/
|
|
8
|
-
import FileUploader from './fileuploader.js';
|
|
8
|
+
import { FileUploader } from './fileuploader.js';
|
|
9
9
|
import { CKEditorError } from 'ckeditor5/src/utils.js';
|
|
10
10
|
/**
|
|
11
11
|
* UploadGateway abstracts file uploads to CKEditor Cloud Services.
|
|
12
12
|
*/
|
|
13
|
-
export
|
|
13
|
+
export class UploadGateway {
|
|
14
14
|
/**
|
|
15
15
|
* CKEditor Cloud Services access token.
|
|
16
16
|
*/
|