UNPKG

@sussudio/platform

Version:

Internal APIs for VS Code's service injection the base services.

417 lines (415 loc) 16.7 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { IStringDictionary } from '@sussudio/base/common/collections.mjs'; import { Event } from '@sussudio/base/common/event.mjs'; import { FormattingOptions } from '@sussudio/base/common/jsonFormatter.mjs'; import { IDisposable } from '@sussudio/base/common/lifecycle.mjs'; import { IExtUri } from '@sussudio/base/common/resources.mjs'; import { URI } from '@sussudio/base/common/uri.mjs'; import { IHeaders } from '@sussudio/base/parts/request/common/request.mjs'; import { IEnvironmentService } from '../../environment/common/environment.mjs'; import { IExtensionIdentifier } from '../../extensionManagement/common/extensionManagement.mjs'; import { ILogService } from '../../log/common/log.mjs'; import { IUserDataProfile } from '../../userDataProfile/common/userDataProfile.mjs'; export declare const CONFIGURATION_SYNC_STORE_KEY = 'configurationSync.store'; export declare function getDisallowedIgnoredSettings(): string[]; export declare function getDefaultIgnoredSettings(): string[]; export declare const USER_DATA_SYNC_CONFIGURATION_SCOPE = 'settingsSync'; export interface IUserDataSyncConfiguration { keybindingsPerPlatform?: boolean; ignoredExtensions?: string[]; ignoredSettings?: string[]; } export declare const CONFIG_SYNC_KEYBINDINGS_PER_PLATFORM = 'settingsSync.keybindingsPerPlatform'; export declare function registerConfiguration(): IDisposable; export interface IUserData { ref: string; content: string | null; } export type IAuthenticationProvider = { id: string; scopes: string[]; }; export interface IUserDataSyncStore { readonly url: URI; readonly type: UserDataSyncStoreType; readonly defaultUrl: URI; readonly stableUrl: URI; readonly insidersUrl: URI; readonly canSwitch: boolean; readonly authenticationProviders: IAuthenticationProvider[]; } export declare function isAuthenticationProvider(thing: any): thing is IAuthenticationProvider; export declare const enum SyncResource { Settings = 'settings', Keybindings = 'keybindings', Snippets = 'snippets', Tasks = 'tasks', Extensions = 'extensions', GlobalState = 'globalState', Profiles = 'profiles', } export declare const ALL_SYNC_RESOURCES: SyncResource[]; export declare function getPathSegments(collection: string | undefined, ...paths: string[]): string[]; export declare function getLastSyncResourceUri( collection: string | undefined, syncResource: SyncResource, environmentService: IEnvironmentService, extUri: IExtUri, ): URI; export type IUserDataResourceManifest = Record<ServerResource, string>; export interface IUserDataCollectionManifest { [collectionId: string]: { readonly latest?: IUserDataResourceManifest; }; } export interface IUserDataManifest { readonly latest?: IUserDataResourceManifest; readonly session: string; readonly ref: string; readonly collections?: IUserDataCollectionManifest; } export interface IResourceRefHandle { ref: string; created: number; } export type ServerResource = SyncResource | 'machines' | 'editSessions'; export type UserDataSyncStoreType = 'insiders' | 'stable'; export declare const IUserDataSyncStoreManagementService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataSyncStoreManagementService>; export interface IUserDataSyncStoreManagementService { readonly _serviceBrand: undefined; readonly onDidChangeUserDataSyncStore: Event<void>; readonly userDataSyncStore: IUserDataSyncStore | undefined; switch(type: UserDataSyncStoreType): Promise<void>; getPreviousUserDataSyncStore(): Promise<IUserDataSyncStore | undefined>; } export declare const IUserDataSyncStoreService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataSyncStoreService>; export interface IUserDataSyncStoreService { readonly _serviceBrand: undefined; readonly onDidChangeDonotMakeRequestsUntil: Event<void>; readonly donotMakeRequestsUntil: Date | undefined; readonly onTokenFailed: Event<void>; readonly onTokenSucceed: Event<void>; setAuthToken(token: string, type: string): void; manifest(oldValue: IUserDataManifest | null, headers?: IHeaders): Promise<IUserDataManifest | null>; readResource( resource: ServerResource, oldValue: IUserData | null, collection?: string, headers?: IHeaders, ): Promise<IUserData>; writeResource( resource: ServerResource, content: string, ref: string | null, collection?: string, headers?: IHeaders, ): Promise<string>; deleteResource(resource: ServerResource, ref: string | null, collection?: string): Promise<void>; getAllResourceRefs(resource: ServerResource, collection?: string): Promise<IResourceRefHandle[]>; resolveResourceContent( resource: ServerResource, ref: string, collection?: string, headers?: IHeaders, ): Promise<string | null>; getAllCollections(headers?: IHeaders): Promise<string[]>; createCollection(headers?: IHeaders): Promise<string>; deleteCollection(collection?: string, headers?: IHeaders): Promise<void>; clear(): Promise<void>; } export declare const IUserDataSyncBackupStoreService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataSyncBackupStoreService>; export interface IUserDataSyncBackupStoreService { readonly _serviceBrand: undefined; backup(profile: IUserDataProfile, resource: SyncResource, content: string): Promise<void>; getAllRefs(profile: IUserDataProfile, resource: SyncResource): Promise<IResourceRefHandle[]>; resolveContent(profile: IUserDataProfile, resource: SyncResource, ref: string): Promise<string | null>; } export declare const HEADER_OPERATION_ID = 'x-operation-id'; export declare const HEADER_EXECUTION_ID = 'X-Execution-Id'; export declare function createSyncHeaders(executionId: string): IHeaders; export declare const enum UserDataSyncErrorCode { Unauthorized = 'Unauthorized', NotFound = 'NotFound', MethodNotFound = 'MethodNotFound', Conflict = 'Conflict', Gone = 'Gone', PreconditionFailed = 'PreconditionFailed', TooLarge = 'TooLarge', UpgradeRequired = 'UpgradeRequired', PreconditionRequired = 'PreconditionRequired', TooManyRequests = 'RemoteTooManyRequests', TooManyRequestsAndRetryAfter = 'TooManyRequestsAndRetryAfter', RequestFailed = 'RequestFailed', RequestCanceled = 'RequestCanceled', RequestTimeout = 'RequestTimeout', RequestProtocolNotSupported = 'RequestProtocolNotSupported', RequestPathNotEscaped = 'RequestPathNotEscaped', RequestHeadersNotObject = 'RequestHeadersNotObject', NoCollection = 'NoCollection', NoRef = 'NoRef', EmptyResponse = 'EmptyResponse', TurnedOff = 'TurnedOff', SessionExpired = 'SessionExpired', ServiceChanged = 'ServiceChanged', DefaultServiceChanged = 'DefaultServiceChanged', LocalTooManyProfiles = 'LocalTooManyProfiles', LocalTooManyRequests = 'LocalTooManyRequests', LocalPreconditionFailed = 'LocalPreconditionFailed', LocalInvalidContent = 'LocalInvalidContent', LocalError = 'LocalError', IncompatibleLocalContent = 'IncompatibleLocalContent', IncompatibleRemoteContent = 'IncompatibleRemoteContent', Unknown = 'Unknown', } export declare class UserDataSyncError extends Error { readonly code: UserDataSyncErrorCode; readonly resource?: SyncResource | undefined; readonly operationId?: string | undefined; constructor( message: string, code: UserDataSyncErrorCode, resource?: SyncResource | undefined, operationId?: string | undefined, ); } export declare class UserDataSyncStoreError extends UserDataSyncError { readonly url: string; readonly serverCode: number | undefined; constructor( message: string, url: string, code: UserDataSyncErrorCode, serverCode: number | undefined, operationId: string | undefined, ); } export declare class UserDataAutoSyncError extends UserDataSyncError { constructor(message: string, code: UserDataSyncErrorCode); } export declare namespace UserDataSyncError { function toUserDataSyncError(error: Error): UserDataSyncError; } export interface ISyncUserDataProfile { readonly id: string; readonly collection: string; readonly name: string; readonly shortName?: string; } export interface ISyncExtension { identifier: IExtensionIdentifier; preRelease?: boolean; version?: string; disabled?: boolean; installed?: boolean; state?: IStringDictionary<any>; } export interface ISyncExtensionWithVersion extends ISyncExtension { version: string; } export interface IStorageValue { version: number; value: string; } export interface IGlobalState { storage: IStringDictionary<IStorageValue>; } export declare const enum SyncStatus { Uninitialized = 'uninitialized', Idle = 'idle', Syncing = 'syncing', HasConflicts = 'hasConflicts', } export interface ISyncResourceHandle { created: number; uri: URI; } export interface IRemoteUserData { ref: string; syncData: ISyncData | null; } export interface ISyncData { version: number; machineId?: string; content: string; } export declare const enum Change { None = 0, Added = 1, Modified = 2, Deleted = 3, } export declare const enum MergeState { Preview = 'preview', Conflict = 'conflict', Accepted = 'accepted', } export interface IResourcePreview { readonly baseResource: URI; readonly remoteResource: URI; readonly localResource: URI; readonly previewResource: URI; readonly acceptedResource: URI; readonly localChange: Change; readonly remoteChange: Change; readonly mergeState: MergeState; } export interface IUserDataSyncResource { readonly syncResource: SyncResource; readonly profile: IUserDataProfile; } export interface IUserDataSyncResourceConflicts extends IUserDataSyncResource { readonly conflicts: IResourcePreview[]; } export interface IUserDataSyncResourcePreview extends IUserDataSyncResource { readonly isLastSyncFromCurrentMachine: boolean; readonly resourcePreviews: IResourcePreview[]; } export interface IUserDataSyncResourceError extends IUserDataSyncResource { readonly error: UserDataSyncError; } export interface IUserDataInitializer { initialize(userData: IUserData): Promise<void>; } export interface IUserDataSynchroniser { readonly resource: SyncResource; readonly status: SyncStatus; readonly onDidChangeStatus: Event<SyncStatus>; readonly conflicts: IUserDataSyncResourceConflicts; readonly onDidChangeConflicts: Event<IUserDataSyncResourceConflicts>; readonly onDidChangeLocal: Event<void>; sync(manifest: IUserDataResourceManifest | null, headers: IHeaders): Promise<void>; stop(): Promise<void>; preview( manifest: IUserDataResourceManifest | null, userDataSyncConfiguration: IUserDataSyncConfiguration, headers: IHeaders, ): Promise<IUserDataSyncResourcePreview | null>; accept(resource: URI, content?: string | null): Promise<IUserDataSyncResourcePreview | null>; merge(resource: URI): Promise<IUserDataSyncResourcePreview | null>; discard(resource: URI): Promise<IUserDataSyncResourcePreview | null>; apply(force: boolean, headers: IHeaders): Promise<IUserDataSyncResourcePreview | null>; hasPreviouslySynced(): Promise<boolean>; hasLocalData(): Promise<boolean>; resetLocal(): Promise<void>; resolveContent(resource: URI): Promise<string | null>; replace(content: string): Promise<boolean>; } export declare const SYNC_SERVICE_URL_TYPE = 'sync.store.url.type'; export declare function getEnablementKey(resource: SyncResource): string; export declare const IUserDataSyncEnablementService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataSyncEnablementService>; export interface IUserDataSyncEnablementService { _serviceBrand: any; readonly onDidChangeEnablement: Event<boolean>; isEnabled(): boolean; canToggleEnablement(): boolean; setEnablement(enabled: boolean): void; readonly onDidChangeResourceEnablement: Event<[SyncResource, boolean]>; isResourceEnabled(resource: SyncResource): boolean; setResourceEnablement(resource: SyncResource, enabled: boolean): void; getResourceSyncStateVersion(resource: SyncResource): string | undefined; } export interface IUserDataSyncTask { readonly manifest: IUserDataManifest | null; run(): Promise<void>; stop(): Promise<void>; } export interface IUserDataManualSyncTask { readonly id: string; merge(): Promise<void>; apply(): Promise<void>; stop(): Promise<void>; } export declare const IUserDataSyncService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataSyncService>; export interface IUserDataSyncService { _serviceBrand: any; readonly status: SyncStatus; readonly onDidChangeStatus: Event<SyncStatus>; readonly conflicts: IUserDataSyncResourceConflicts[]; readonly onDidChangeConflicts: Event<IUserDataSyncResourceConflicts[]>; readonly onDidChangeLocal: Event<SyncResource>; readonly onSyncErrors: Event<IUserDataSyncResourceError[]>; readonly lastSyncTime: number | undefined; readonly onDidChangeLastSyncTime: Event<number>; readonly onDidResetRemote: Event<void>; readonly onDidResetLocal: Event<void>; createSyncTask(manifest: IUserDataManifest | null, disableCache?: boolean): Promise<IUserDataSyncTask>; createManualSyncTask(): Promise<IUserDataManualSyncTask>; resolveContent(resource: URI): Promise<string | null>; accept( syncResource: IUserDataSyncResource, resource: URI, content: string | null | undefined, apply: | boolean | { force: boolean; }, ): Promise<void>; reset(): Promise<void>; resetRemote(): Promise<void>; cleanUpRemoteData(): Promise<void>; resetLocal(): Promise<void>; hasLocalData(): Promise<boolean>; hasPreviouslySynced(): Promise<boolean>; getRemoteProfiles(): Promise<ISyncUserDataProfile[]>; getRemoteSyncResourceHandles( syncResource: SyncResource, profile?: ISyncUserDataProfile, ): Promise<ISyncResourceHandle[]>; getLocalSyncResourceHandles(syncResource: SyncResource, profile?: IUserDataProfile): Promise<ISyncResourceHandle[]>; getAssociatedResources(syncResourceHandle: ISyncResourceHandle): Promise< { resource: URI; comparableResource: URI; }[] >; getMachineId(syncResourceHandle: ISyncResourceHandle): Promise<string | undefined>; replace(syncResourceHandle: ISyncResourceHandle): Promise<void>; } export declare const IUserDataSyncResourceProviderService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataSyncResourceProviderService>; export interface IUserDataSyncResourceProviderService { _serviceBrand: any; getRemoteSyncedProfiles(): Promise<ISyncUserDataProfile[]>; getLocalSyncResourceHandles(syncResource: SyncResource, profile: IUserDataProfile): Promise<ISyncResourceHandle[]>; getRemoteSyncResourceHandles( syncResource: SyncResource, profile: ISyncUserDataProfile | undefined, ): Promise<ISyncResourceHandle[]>; getAssociatedResources(syncResourceHandle: ISyncResourceHandle): Promise< { resource: URI; comparableResource: URI; }[] >; getMachineId(syncResourceHandle: ISyncResourceHandle): Promise<string | undefined>; resolveContent(resource: URI): Promise<string | null>; resolveUserDataSyncResource(syncResourceHandle: ISyncResourceHandle): IUserDataSyncResource | undefined; } export declare const IUserDataAutoSyncService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataAutoSyncService>; export interface IUserDataAutoSyncService { _serviceBrand: any; readonly onError: Event<UserDataSyncError>; turnOn(): Promise<void>; turnOff(everywhere: boolean): Promise<void>; triggerSync(sources: string[], hasToLimitSync: boolean, disableCache: boolean): Promise<void>; } export declare const IUserDataSyncUtilService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataSyncUtilService>; export interface IUserDataSyncUtilService { readonly _serviceBrand: undefined; resolveUserBindings(userbindings: string[]): Promise<IStringDictionary<string>>; resolveFormattingOptions(resource: URI): Promise<FormattingOptions>; resolveDefaultIgnoredSettings(): Promise<string[]>; } export declare const IUserDataSyncLogService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IUserDataSyncLogService>; export interface IUserDataSyncLogService extends ILogService {} export interface IConflictSetting { key: string; localValue: any | undefined; remoteValue: any | undefined; } export declare const USER_DATA_SYNC_SCHEME = 'vscode-userdata-sync'; export declare const PREVIEW_DIR_NAME = 'preview'; export declare const EXTENSIONS_SYNC_CONTEXT_KEY = 'extensionsSync';