/** @packageDocumentation * @module iModelHubClient */ import { ClientRequestContext, GuidString, Id64String } from "@bentley/bentleyjs-core"; import { AccessToken, AuthorizedClientRequestContext, Response, WsgInstance } from "@bentley/itwin-client"; import { IModelBaseHandler } from "./BaseHandler"; import { CodeState } from "./Codes"; import { BaseEventSAS, EventBaseHandler, IModelHubBaseEvent } from "./EventsBase"; import { LockLevel, LockType } from "./Locks"; /** Type of [[IModelHubEvent]]. Event type is used to define which events you wish to receive from your [[EventSubscription]]. See [[EventSubscriptionHandler.create]] and [[EventSubscriptionHandler.update]]. * @public */ export declare enum IModelHubEventType { /** Sent when one or more [[Lock]]s are updated. See [[LockEvent]]. * @internal */ LockEvent = "LockEvent", /** Sent when all [[Lock]]s for a [[Briefcase]] are deleted. See [[AllLocksDeletedEvent]]. * @internal */ AllLocksDeletedEvent = "AllLocksDeletedEvent", /** Sent when a [[ChangeSet]] is successfully pushed. See [[ChangeSetPostPushEvent]]. */ ChangeSetPostPushEvent = "ChangeSetPostPushEvent", /** Sent when a [[ChangeSet]] push has started. See [[ChangeSetPrePushEvent]]. */ ChangeSetPrePushEvent = "ChangeSetPrePushEvent", /** Sent when one or more [Code]($common)s are updated. See [[CodeEvent]]. * @internal */ CodeEvent = "CodeEvent", /** Sent when all [Code]($common)s for a [[Briefcase]] are deleted. See [[AllCodesDeletedEvent]]. * @internal */ AllCodesDeletedEvent = "AllCodesDeletedEvent", /** Sent when a [[Briefcase]] is deleted. See [[BriefcaseDeletedEvent]]. * @internal */ BriefcaseDeletedEvent = "BriefcaseDeletedEvent", /** Sent when an iModel is deleted. See [[iModelDeletedEvent]]. */ iModelDeletedEvent = "iModelDeletedEvent", /** Sent when a new named [[Version]] is created. See [[VersionEvent]]. */ VersionEvent = "VersionEvent", /** * Sent when a new [[Checkpoint]] is generated. See [[CheckpointCreatedEvent]]. * @internal */ CheckpointCreatedEvent = "CheckpointCreatedEvent", /** * Sent when a new [[CheckpointV2]] is generated. See [[CheckpointV2CreatedEvent]]. * @internal */ CheckpointV2CreatedEvent = "CheckpointV2CreatedEvent" } /** @internal @deprecated Use [[IModelHubEventType]] instead */ export declare type EventType = "LockEvent" | "AllLocksDeletedEvent" | "ChangeSetPostPushEvent" | "ChangeSetPrePushEvent" | "CodeEvent" | "AllCodesDeletedEvent" | "BriefcaseDeletedEvent" | "iModelDeletedEvent" | "VersionEvent" | "CheckpointCreatedEvent" | "CheckpointV2CreatedEvent"; /** Base type for all iModelHub events. * @public */ export declare abstract class IModelHubEvent extends IModelHubBaseEvent { /** Id of the iModel where the event occurred. */ iModelId?: GuidString; /** Construct this event from object instance. * @param obj Object instance. * @internal */ fromJson(obj: any): void; } /** Base type for iModelHub events that have BriefcaseId. * @public */ export declare abstract class BriefcaseEvent extends IModelHubEvent { /** Id of the [[Briefcase]] involved in this event. */ briefcaseId: number; /** Construct this event from object instance. * @param obj Object instance. * @internal */ fromJson(obj: any): void; } /** Sent when one or more [[Lock]]s are updated. Lock updates can be very frequent, so it's recommended to not to subscribe to LockEvents, if it's not necessary. * @internal */ export declare class LockEvent extends BriefcaseEvent { /** [[LockType]] of the updated Locks. */ lockType: LockType; /** [[LockLevel]] of the updated Locks. */ lockLevel: LockLevel; /** Id's of the updated Locks. */ objectIds: Id64String[]; /** Id of the [[ChangeSet]] Locks were released with. */ releasedWithChangeSet?: string; /** Construct this event from object instance. * @param obj Object instance. * @internal */ fromJson(obj: any): void; } /** Sent when all [[Lock]]s for a [[Briefcase]] are deleted. Can occur when calling [[LockHandler.deleteAll]] or [[BriefcaseHandler.delete]]. * @internal */ export declare class AllLocksDeletedEvent extends BriefcaseEvent { } /** Sent when a [[ChangeSet]] is successfully pushed. See [[ChangeSetHandler.create]]. It's sent when a new [[ChangeSet]] is successfully pushed to an iModel. See [[ChangeSetPrePushEvent]] for the event indicating the start of a ChangeSet push. * @public */ export declare class ChangeSetPostPushEvent extends BriefcaseEvent { /** Id of the ChangeSet that was pushed. */ changeSetId: string; /** Index of the ChangeSet that was pushed. */ changeSetIndex: string; /** Construct this event from object instance. * @param obj Object instance. * @internal */ fromJson(obj: any): void; } /** Sent when a [[ChangeSet]] push has started. See [[ChangeSetHandler.create]]. ChangeSetPrePushEvent indicates that iModelHub allowed one of the [[Briefcase]]s to push a ChangeSet and all other push attempts will fail, until this push times out or succeeds. See [[ChangeSetPostPushEvent]] for an event indicating a successful push. * @public */ export declare class ChangeSetPrePushEvent extends IModelHubEvent { } /** Sent when one or more [Code]($common)s are updated. See [[CodeHandler.update]]. Code updates can be very frequent, so it's recommended to not to subscribe to CodeEvents, if it's not necessary. * @internal */ export declare class CodeEvent extends BriefcaseEvent { /** Id of the [CodeSpec]($common) for the updated Codes. */ codeSpecId: Id64String; /** Scope of the updated Codes. */ codeScope: string; /** Array of the updated Code values. */ values: string[]; /** State Codes were updated to. */ state: CodeState; /** Construct this event from object instance. * @param obj Object instance. * @internal */ fromJson(obj: any): void; } /** Sent when all [Code]($common)s for a [[Briefcase]] are deleted. Can occur when calling [[CodeHandler.deleteAll]] or [[BriefcaseHandler.delete]]. * @internal */ export declare class AllCodesDeletedEvent extends BriefcaseEvent { } /** Sent when a [[Briefcase]] is deleted. See [[BriefcaseHandler.delete]]. * @internal */ export declare class BriefcaseDeletedEvent extends BriefcaseEvent { } /** Sent when an iModel is deleted. See [[IModelHandler.delete]]. [[EventSubscription]] will be deleted 5 minutes after iModel is deleted, removing all events from subscription queues, making it possible for this event to be missed if not retrieved immediately. * @public */ export declare class IModelDeletedEvent extends IModelHubEvent { } /** Sent when a new named [[Version]] is created. See [[VersionHandler.create]]. * @public */ export declare class VersionEvent extends IModelHubEvent { /** Id of the created Version. */ versionId: GuidString; /** Name of the created Version. */ versionName: string; /** Id of the [[ChangeSet]] that this Version was created for. */ changeSetId: string; /** Construct this event from object instance. * @param obj Object instance. * @internal */ fromJson(obj: any): void; } /** Sent when a new [[Checkpoint]] is generated. [[Checkpoint]]s can be generated daily when there are new [[ChangeSet]]s pushed or when a new [[Version]] is created. * @internal */ export declare class CheckpointCreatedEvent extends IModelHubEvent { /** Index of the [[ChangeSet]] this [[Checkpoint]] was created for. */ changeSetIndex: string; /** Id of the [[ChangeSet]] this [[Checkpoint]] was created for. */ changeSetId: string; /** Id of the [[Version]] this [[Checkpoint]] was created for. */ versionId?: GuidString; /** Construct this event from object instance. * @param obj Object instance. * @internal */ fromJson(obj: any): void; } /** Sent when a new [[CheckpointV2]] is generated. [[CheckpointV2]] might be created for every [[ChangeSet]]. * @internal */ export declare class CheckpointV2CreatedEvent extends IModelHubEvent { /** Index of the [[ChangeSet]] this [[CheckpointV2]] was created for. */ changeSetIndex: string; /** Id of the [[ChangeSet]] this [[CheckpointV2]] was created for. */ changeSetId: string; /** Id of the [[Version]] this [[CheckpointV2]] was created for. */ versionId?: GuidString; /** Construct this event from object instance. * @param obj Object instance. * @internal */ fromJson(obj: any): void; } /** Get EventConstructor which can be used to construct IModelHubEvent * @internal */ declare type EventConstructor = (new () => IModelHubEvent); /** Get constructor from EventType name. * @internal */ export declare function constructorFromEventType(type: IModelHubEventType): EventConstructor; /** Parse [[IModelHubEvent]] from response object. * @param response Response object to parse. * @returns Appropriate event object. * @internal */ export declare function ParseEvent(response: Response): IModelHubEvent; /** Subscription to receive [[IModelHubEvent]]s. Each subscription has a separate queue for events that it hasn't read yet. Subscriptions are deleted, if they are inactive for an hour. Use wsgId of this instance for the methods that require subscriptionId. See [[EventSubscriptionHandler]]. * @public */ export declare class EventSubscription extends WsgInstance { /** Types of the [[IModelHubEvent]]s that this subscription listens to. */ eventTypes?: IModelHubEventType[]; } /** Shared access signature token for getting [[IModelHubEvent]]s. It's used to authenticate for [[EventHandler.getEvent]]. To receive an instance call [[EventHandler.getSASToken]]. * @public */ export declare class EventSAS extends BaseEventSAS { } /** Handler for managing [[EventSubscription]]s. Use [[EventHandler.Subscriptions]] to get an instance of this class. * @public */ export declare class EventSubscriptionHandler { private _handler; /** Constructor for EventSubscriptionHandler. * @param handler Handler for WSG requests. */ constructor(handler: IModelBaseHandler); /** Get relative url for EventSubscription requests. * @param iModelId Id of the iModel. See [[HubIModel]]. * @param instanceId Id of the subscription. */ private getRelativeUrl; /** Create an [[EventSubscription]]. * @param requestContext The client request context * @param iModelId Id of the iModel. See [[HubIModel]]. * @param events Array of IModelHubEventTypes to subscribe to. * @return Created EventSubscription instance. * @throws [Common iModelHub errors]($docs/learning/iModelHub/CommonErrors) */ create(requestContext: AuthorizedClientRequestContext, iModelId: GuidString, events: IModelHubEventType[]): Promise; /** * Create an [[EventSubscription]]. * @param requestContext The client request context * @param iModelId Id of the iModel. See [[HubIModel]]. * @param events Array of EventTypes to subscribe to. * @return Created EventSubscription instance. * @throws [Common iModelHub errors]($docs/learning/iModelHub/CommonErrors) * @internal @deprecated Use IModelHubEventType enum for `events` instead. */ create(requestContext: AuthorizedClientRequestContext, iModelId: GuidString, events: EventType[]): Promise; /** Update an [[EventSubscription]]. Can change the [[EventType]]s specified in the subscription. Must be a valid subscription that was previously created with [[EventSubscriptionHandler.create]] that hasn't expired. * @param requestContext The client request context * @param iModelId Id of the iModel. See [[HubIModel]]. * @param subscription Updated EventSubscription. * @return EventSubscription instance from iModelHub after update. * @throws [[IModelHubError]] with [IModelHubStatus.EventSubscriptionDoesNotExist]($bentley) if [[EventSubscription]] does not exist with the specified subscription.wsgId. * @throws [Common iModelHub errors]($docs/learning/iModelHub/CommonErrors) */ update(requestContext: AuthorizedClientRequestContext, iModelId: GuidString, subscription: EventSubscription): Promise; /** Delete an [[EventSubscription]]. * @param requestContext The client request context * @param iModelId Id of the iModel. See [[HubIModel]]. * @param eventSubscriptionId Id of the EventSubscription. * @returns Resolves if the EventSubscription has been successfully deleted. * @throws [[IModelHubError]] with [IModelHubStatus.EventSubscriptionDoesNotExist]($bentley) if EventSubscription does not exist with the specified subscription.wsgId. * @throws [Common iModelHub errors]($docs/learning/iModelHub/CommonErrors) */ delete(requestContext: AuthorizedClientRequestContext, iModelId: GuidString, eventSubscriptionId: string): Promise; } /** Handler for receiving [[IModelHubEvent]]s. Use [[IModelClient.Events]] to get an instance of this class. * @public */ export declare class EventHandler extends EventBaseHandler { private _subscriptionHandler; /** Constructor for EventHandler. * @param handler Handler for WSG requests. * @internal */ constructor(handler: IModelBaseHandler); /** Get a handler for managing [[EventSubscription]]s. */ get subscriptions(): EventSubscriptionHandler; /** Get relative url for EventSAS requests. * @param iModelId Id of the iModel. See [[HubIModel]]. */ private getEventSASRelativeUrl; /** Get event SAS Token. Used to authenticate for [[EventHandler.getEvent]]. * @param requestContext The client request context * @param iModelId Id of the iModel. See [[HubIModel]]. * @return SAS Token to connect to the topic. * @throws [Common iModelHub errors]($docs/learning/iModelHub/CommonErrors) */ getSASToken(requestContext: AuthorizedClientRequestContext, iModelId: GuidString): Promise; /** Get absolute url for event requests. * @param baseAddress Base address for the serviceBus. * @param subscriptionId Id of the subscription. * @param timeout Optional timeout for long polling. */ private getEventUrl; /** Get [[IModelHubEvent]] from the [[EventSubscription]]. You can use long polling timeout, to have requests return when events are available (or request times out), rather than returning immediately when no events are found. * @param requestContext The client request context * @param sasToken SAS Token used to authenticate. See [[EventSAS.sasToken]]. * @param baseAddress Address for the events. See [[EventSAS.baseAddress]]. * @param subscriptionId Id of the subscription to the topic. See [[EventSubscription]]. * @param timeout Optional timeout duration in seconds for request, when using long polling. * @return IModelHubEvent if it exists, undefined otherwise. * @throws [[IModelHubClientError]] with [IModelHubStatus.UndefinedArgumentError]($bentley) or [IModelHubStatus.InvalidArgumentError]($bentley) if one of the arguments is undefined or has an invalid value. * @throws [ResponseError]($itwin-client) if request has failed. */ getEvent(requestContext: ClientRequestContext, sasToken: string, baseAddress: string, subscriptionId: string, timeout?: number): Promise; /** Create a listener for long polling events from an [[EventSubscription]]. When event is received from the subscription, every registered listener callback is called. This continuously waits for events until all created listeners for that subscriptionId are deleted. [[EventSAS]] token expirations are handled automatically, [AccessToken]($itwin-client) expiration is handled by calling authenticationCallback to get a new token. * @param requestContext The client request context * @param authenticationCallback Callback used to get AccessToken. Only the first registered authenticationCallback for this subscriptionId will be used. * @param subscriptionId Id of EventSubscription. * @param iModelId Id of the iModel. See [[HubIModel]]. * @param listener Callback that is called when an [[IModelHubEvent]] is received. * @returns Function that deletes the created listener. * @throws [[IModelHubClientError]] with [IModelHubStatus.UndefinedArgumentError]($bentley) or [IModelHubStatus.InvalidArgumentError]($bentley) if one of the arguments is undefined or has an invalid value. */ createListener(requestContext: ClientRequestContext, authenticationCallback: () => Promise, subscriptionId: string, iModelId: GuidString, listener: (event: T) => void): () => void; } export {}; //# sourceMappingURL=Events.d.ts.map