UNPKG

@ckeditor/ckeditor5-cloud-services

Version:

CKEditor 5's Cloud Services integration layer.

128 lines (127 loc) 5.47 kB
/** * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options */ /** * @module cloud-services/cloudservicesconfig */ /** * Endpoint address to download the token or a callback that provides the token. */ export type TokenUrl = string | (() => Promise<string>); /** * The configuration for all plugins using CKEditor Cloud Services. * * ```ts * ClassicEditor * .create( document.querySelector( '#editor' ), { * cloudServices: { * tokenUrl: 'https://example.com/cs-token-endpoint', * uploadUrl: 'https://your-organization-id.cke-cs.com/easyimage/upload/' * } * } ) * .then( ... ) * .catch( ... ); * ``` * * See {@link module:core/editor/editorconfig~EditorConfig all editor options}. */ export interface CloudServicesConfig { /** * A token URL or a token request function. * * As a string, it should be a URL to the security token endpoint in your application. * The role of this endpoint is to securely authorize * the end users of your application to use [CKEditor Cloud Services](https://ckeditor.com/ckeditor-cloud-services) only * if they should have access e.g. to upload files with {@glink features/file-management/ckbox CKBox} or to use the * [Collaboration](https://ckeditor.com/docs/cs/latest/guides/collaboration/quick-start.html) service. * * ```ts * ClassicEditor * .create( document.querySelector( '#editor' ), { * cloudServices: { * tokenUrl: 'https://example.com/cs-token-endpoint', * ... * } * } ) * .then( ... ) * .catch( ... ); * ``` * * As a function, it should provide a promise to the token value, * so you can highly customize the token and provide your token URL endpoint. * By using this approach you can set your own headers for the request. * * ```ts * ClassicEditor * .create( document.querySelector( '#editor' ), { * cloudServices: { * tokenUrl: () => new Promise( ( resolve, reject ) => { * const xhr = new XMLHttpRequest(); * * xhr.open( 'GET', 'https://example.com/cs-token-endpoint' ); * * xhr.addEventListener( 'load', () => { * const statusCode = xhr.status; * const xhrResponse = xhr.response; * * if ( statusCode < 200 || statusCode > 299 ) { * return reject( new Error( 'Cannot download new token!' ) ); * } * * return resolve( xhrResponse ); * } ); * * xhr.addEventListener( 'error', () => reject( new Error( 'Network Error' ) ) ); * xhr.addEventListener( 'abort', () => reject( new Error( 'Abort' ) ) ); * * xhr.setRequestHeader( customHeader, customValue ); * * xhr.send(); * } ), * ... * } * } ) * ``` * * If the request to the token endpoint fails, the editor will call the token request function every 5 seconds in attempt * to refresh the token. * * You can find more information about token endpoints in the * [Easy Image](https://ckeditor.com/docs/cs/latest/developer-resources/easy-image/service-details.html) guide * and [Cloud Services - Token endpoint](https://ckeditor.com/docs/cs/latest/developer-resources/security/token-endpoint.html) * documentation. * * Without a properly working token endpoint (token URL) CKEditor plugins will not be able to connect to CKEditor Cloud Services. */ tokenUrl?: TokenUrl; /** * The endpoint URL for [CKEditor Cloud Services](https://ckeditor.com/ckeditor-cloud-services) uploads. * This option must be set for Easy Image to work correctly. * * The upload URL is unique for each customer and can be found in the * [CKEditor Ecosystem customer dashboard](https://dashboard.ckeditor.com) after subscribing to the Easy Image service. * To learn more, check the [Easy Image](https://ckeditor.com/docs/cs/latest/developer-resources/easy-image/service-details.html) guide. * * Note: Easy Image is a legacy product and only maintained for existing clients. * * Note: Make sure to also set the {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} configuration option. */ uploadUrl?: string; /** * The URL for web socket communication, used by the `RealTimeCollaborativeEditing` plugin. Every customer (organization in the CKEditor * Ecosystem dashboard) has their own, unique URLs to communicate with CKEditor Cloud Services. The URL can be found in the * CKEditor Ecosystem customer dashboard. * * Note: Unlike most plugins, `RealTimeCollaborativeEditing` is not included in any CKEditor 5 build and needs to be installed manually. * Check [Collaboration overview](https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/overview.html) for more details. */ webSocketUrl?: string; /** * An optional parameter used for integration with CKEditor Cloud Services when uploading the editor build to cloud services. * * Whenever the editor build or the configuration changes, this parameter should be set to a new, unique value to differentiate * the new bundle (build + configuration) from the old ones. */ bundleVersion?: string; }