@jaricardodev/ews-javascript-api
Version:
EWS Managed api in JavaScript
920 lines (862 loc) • 245 kB
text/typescript
import { AddDelegateRequest } from "./Requests/AddDelegateRequest";
import { AffectedTaskOccurrence } from "../Enumerations/AffectedTaskOccurrence";
import { AlternateIdBase } from "../Misc/IdConversion/AlternateIdBase";
import { ApplyConversationActionRequest } from "./Requests/ApplyConversationActionRequest";
import { Appointment } from "./ServiceObjects/Items/Appointment";
import { ArchiveItemRequest } from "./Requests/ArchiveItemRequest";
import { ArchiveItemResponse } from "./Responses/ArchiveItemResponse";
import { ArgumentException, ArgumentOutOfRangeException, ArgumentNullException } from "../Exceptions/ArgumentException";
import { ArrayHelper, StringHelper, UriHelper } from "../ExtensionMethods";
import { Attachment } from "../ComplexProperties/Attachment";
import { AttendeeInfo } from "../Misc/Availability/AttendeeInfo";
import { AutodiscoverErrorCode } from "../Enumerations/AutodiscoverErrorCode";
import { AutodiscoverLocalException } from "../Exceptions/AutodiscoverLocalException";
import { AutodiscoverRedirectionUrlValidationCallback } from "../Autodiscover/AutodiscoverServiceDelegates";
import { AutodiscoverService } from "../Autodiscover/AutodiscoverService";
import { AvailabilityData } from "../Enumerations/AvailabilityData";
import { AvailabilityOptions } from "../Misc/Availability/AvailabilityOptions";
import { BodyType } from "../Enumerations/BodyType";
import { CalendarView } from "../Search/CalendarView";
import { ChangeCollection } from "../Sync/ChangeCollection";
import { ClientAccessTokenRequest } from "../ComplexProperties/ClientAccessTokenRequest";
import { ClientAccessTokenType } from "../Enumerations/ClientAccessTokenType";
import { ClientApp } from "../ComplexProperties/ClientApp";
import { ConflictResolutionMode } from "../Enumerations/ConflictResolutionMode";
import { Conversation } from "./ServiceObjects/Items/Conversation";
import { ConversationAction } from "../Misc/ConversationAction";
import { ConversationActionType } from "../Enumerations/ConversationActionType";
import { ConversationId } from "../ComplexProperties/ConversationId";
import { ConversationRequest } from "../ComplexProperties/ConversationRequest";
import { ConversationResponse } from "../ComplexProperties/ConversationResponse";
import { ConversationSortOrder } from "../Enumerations/ConversationSortOrder";
import { ConvertIdRequest } from "./Requests/ConvertIdRequest";
import { ConvertIdResponse } from "./Responses/ConvertIdResponse";
import { CopyFolderRequest } from "./Requests/CopyFolderRequest";
import { CopyItemRequest } from "./Requests/CopyItemRequest";
import { CreateAttachmentRequest } from "./Requests/CreateAttachmentRequest";
import { CreateAttachmentResponse } from "./Responses/CreateAttachmentResponse";
import { CreateFolderRequest } from "./Requests/CreateFolderRequest";
import { CreateItemRequest } from "./Requests/CreateItemRequest";
import { CreateResponseObjectRequest } from "./Requests/CreateResponseObjectRequest";
import { CreateUserConfigurationRequest } from "./Requests/CreateUserConfigurationRequest";
import { DateTime } from "../DateTime";
import { DateTimePrecision } from "../Enumerations/DateTimePrecision";
import { DelegateInformation } from "../Misc/DelegateInformation";
import { DelegateManagementResponse } from "./Responses/DelegateManagementResponse";
import { DelegateUser } from "../ComplexProperties/DelegateUser";
import { DelegateUserResponse } from "./Responses/DelegateUserResponse";
import { DeleteAttachmentRequest } from "./Requests/DeleteAttachmentRequest";
import { DeleteAttachmentResponse } from "./Responses/DeleteAttachmentResponse";
import { DeleteFolderRequest } from "./Requests/DeleteFolderRequest";
import { DeleteItemRequest } from "./Requests/DeleteItemRequest";
import { DeleteMode } from "../Enumerations/DeleteMode";
import { DeleteUserConfigurationRequest } from "./Requests/DeleteUserConfigurationRequest";
import { DisableAppRequest } from "./Requests/DisableAppRequest";
import { DisableReasonType } from "../Enumerations/DisableReasonType";
import { EmailAddress } from "../ComplexProperties/EmailAddress";
import { EmailAddressCollection } from "../ComplexProperties/EmailAddressCollection";
import { EmptyFolderRequest } from "./Requests/EmptyFolderRequest";
import { EventType } from "../Enumerations/EventType";
import { EwsLogging } from "./EwsLogging";
import { EwsUtilities } from "./EwsUtilities";
import { ExchangeVersion } from "../Enumerations/ExchangeVersion";
import { ExpandGroupRequest } from "./Requests/ExpandGroupRequest";
import { ExpandGroupResults } from "../Misc/ExpandGroupResults";
import { FindConversationRequest } from "./Requests/FindConversationRequest";
import { FindConversationResponse } from "./Responses/FindConversationResponse";
import { FindConversationResults } from "../Search/FindConversationResults";
import { FindFolderRequest } from "./Requests/FindFolderRequest";
import { FindFolderResponse } from "./Responses/FindFolderResponse";
import { FindFoldersResults } from "../Search/FindFoldersResults";
import { FindItemRequest } from "./Requests/FindItemRequest";
import { FindItemResponse } from "./Responses/FindItemResponse";
import { FindItemsResults } from "../Search/FindItemsResults";
import { Flag } from "../ComplexProperties/Flag";
import { Folder } from "./ServiceObjects/Folders/Folder";
import { FolderChange } from "../Sync/FolderChange";
import { FolderId } from "../ComplexProperties/FolderId";
import { FolderIdCollection } from "../ComplexProperties/FolderIdCollection";
import { FolderIdWrapper } from "../Misc/FolderIdWrapper";
import { FolderView } from "../Search/FolderView";
import { GetAppManifestsRequest } from "./Requests/GetAppManifestsRequest";
import { GetAppManifestsResponse } from "./Responses/GetAppManifestsResponse";
import { GetAppMarketplaceUrlRequest } from "./Requests/GetAppMarketplaceUrlRequest";
import { GetAppMarketplaceUrlResponse } from "./Responses/GetAppMarketplaceUrlResponse";
import { GetAttachmentRequest } from "./Requests/GetAttachmentRequest";
import { GetAttachmentResponse } from "./Responses/GetAttachmentResponse";
import { GetClientAccessTokenRequest } from "./Requests/GetClientAccessTokenRequest";
import { GetClientAccessTokenResponse } from "./Responses/GetClientAccessTokenResponse";
import { GetClientExtensionResponse } from "./Responses/GetClientExtensionResponse";
import { GetConversationItemsRequest } from "./Requests/GetConversationItemsRequest";
import { GetConversationItemsResponse } from "./Responses/GetConversationItemsResponse";
import { GetDelegateRequest } from "./Requests/GetDelegateRequest";
import { GetDelegateResponse } from "./Responses/GetDelegateResponse";
import { GetDiscoverySearchConfigurationRequest } from "./Requests/GetDiscoverySearchConfigurationRequest";
import { GetDiscoverySearchConfigurationResponse } from "./Responses/GetDiscoverySearchConfigurationResponse";
import { GetEncryptionConfigurationResponse } from "./Responses/GetEncryptionConfigurationResponse";
import { GetEventsRequest } from "./Requests/GetEventsRequest";
import { GetEventsResults } from "../Notifications/GetEventsResults";
import { GetFolderRequest } from "./Requests/GetFolderRequest";
import { GetFolderRequestForLoad } from "./Requests/GetFolderRequestForLoad";
import { GetFolderResponse } from "./Responses/GetFolderResponse";
import { GetHoldOnMailboxesRequest } from "./Requests/GetHoldOnMailboxesRequest";
import { GetHoldOnMailboxesResponse } from "./Responses/GetHoldOnMailboxesResponse";
import { GetInboxRulesRequest } from "./Requests/GetInboxRulesRequest";
import { GetInboxRulesResponse } from "./Responses/GetInboxRulesResponse";
import { GetItemRequest } from "./Requests/GetItemRequest";
import { GetItemRequestForLoad } from "./Requests/GetItemRequestForLoad";
import { GetItemResponse } from "./Responses/GetItemResponse";
import { GetNonIndexableItemDetailsParameters, GetNonIndexableItemStatisticsParameters } from "../MailboxSearch/NonIndexableItemParameters";
import { GetNonIndexableItemDetailsRequest } from "./Requests/GetNonIndexableItemDetailsRequest";
import { GetNonIndexableItemDetailsResponse } from "./Responses/GetNonIndexableItemDetailsResponse";
import { GetNonIndexableItemStatisticsRequest } from "./Requests/GetNonIndexableItemStatisticsRequest";
import { GetNonIndexableItemStatisticsResponse } from "./Responses/GetNonIndexableItemStatisticsResponse";
import { GetPasswordExpirationDateRequest } from "./Requests/GetPasswordExpirationDateRequest";
import { GetRoomListsRequest } from "./Requests/GetRoomListsRequest";
import { GetRoomsRequest } from "./Requests/GetRoomsRequest";
import { GetSearchableMailboxesRequest } from "./Requests/GetSearchableMailboxesRequest";
import { GetSearchableMailboxesResponse } from "./Responses/GetSearchableMailboxesResponse";
import { GetServerTimeZonesRequest } from "./Requests/GetServerTimeZonesRequest";
import { GetServerTimeZonesResponse } from "./Responses/GetServerTimeZonesResponse";
import { GetUserAvailabilityRequest } from "./Requests/GetUserAvailabilityRequest";
import { GetUserAvailabilityResults } from "../Misc/Availability/GetUserAvailabilityResults";
import { GetUserConfigurationRequest } from "./Requests/GetUserConfigurationRequest";
import { GetUserConfigurationResponse } from "./Responses/GetUserConfigurationResponse";
import { GetUserOofSettingsRequest } from "./Requests/GetUserOofSettingsRequest";
import { GetUserRetentionPolicyTagsRequest } from "./Requests/GetUserRetentionPolicyTagsRequest";
import { GetUserRetentionPolicyTagsResponse } from "./Responses/GetUserRetentionPolicyTagsResponse";
import { GetUserSettingsResponse } from "../Autodiscover/Responses/GetUserSettingsResponse";
import { GroupedFindItemsResults } from "../Search/GroupedFindItemsResults";
import { Grouping } from "../Search/Grouping";
import { Guid } from "../Guid";
import { HoldAction } from "../Enumerations/HoldAction";
import { IFileAttachmentContentHandler } from "../Interfaces/IFileAttachmentContentHandler";
import { IXHROptions } from "../Interfaces";
import { IdFormat } from "../Enumerations/IdFormat";
import { ImpersonatedUserId } from "../Misc/ImpersonatedUserId";
import { InstallAppRequest } from "./Requests/InstallAppRequest";
import { Item } from "./ServiceObjects/Items/Item";
import { ItemChange } from "../Sync/ItemChange";
import { ItemId } from "../ComplexProperties/ItemId";
import { KeyValuePair } from "../AltDictionary";
import { Mailbox } from "../ComplexProperties/Mailbox";
import { MailboxQuery } from "../MailboxSearch/MailboxQuery";
import { MailboxSearchLocation } from "../Enumerations/MailboxSearchLocation";
import { ManagementRoles } from "../Misc/ManagementRoles";
import { MarkAllItemsAsReadRequest } from "./Requests/MarkAllItemsAsReadRequest";
import { MarkAsJunkRequest } from "./Requests/MarkAsJunkRequest";
import { MarkAsJunkResponse } from "./Responses/MarkAsJunkResponse";
import { MeetingRequestsDeliveryScope } from "../Enumerations/MeetingRequestsDeliveryScope";
import { MessageDisposition } from "../Enumerations/MessageDisposition";
import { MoveCopyFolderResponse } from "./Responses/MoveCopyFolderResponse";
import { MoveCopyItemResponse } from "./Responses/MoveCopyItemResponse";
import { MoveFolderRequest } from "./Requests/MoveFolderRequest";
import { MoveItemRequest } from "./Requests/MoveItemRequest";
import { NameResolutionCollection } from "../Misc/NameResolutionCollection";
import { OofSettings } from "../ComplexProperties/Availability/OofSettings";
import { PrivilegedUserId } from "../Misc/PrivilegedUserId";
import { PropertyDefinitionBase } from "../PropertyDefinitions/PropertyDefinitionBase";
import { PropertySet } from "./PropertySet";
import { PullSubscription } from "../Notifications/PullSubscription";
import { PushSubscription } from "../Notifications/PushSubscription";
import { RemoveDelegateRequest } from "./Requests/RemoveDelegateRequest";
import { RenderingMode } from "../Enumerations/RenderingMode";
import { ResolveNameSearchLocation } from "../Enumerations/ResolveNameSearchLocation";
import { ResolveNamesRequest } from "./Requests/ResolveNamesRequest";
import { RetentionType } from "../Enumerations/RetentionType";
import { RuleCollection } from "../ComplexProperties/RuleCollection";
import { RuleOperation } from "../ComplexProperties/RuleOperation";
import { SearchFilter } from "../Search/Filters/SearchFilter";
import { SearchFolder } from "./ServiceObjects/Folders/SearchFolder";
import { SearchMailboxesParameters } from "../MailboxSearch/SearchMailboxesParameters";
import { SearchMailboxesRequest } from "./Requests/SearchMailboxesRequest";
import { SearchMailboxesResponse } from "./Responses/SearchMailboxesResponse";
import { SearchPageDirection } from "../Enumerations/SearchPageDirection";
import { SearchResultType } from "../Enumerations/SearchResultType";
import { SendCancellationsMode } from "../Enumerations/SendCancellationsMode";
import { SendInvitationsMode } from "../Enumerations/SendInvitationsMode";
import { SendInvitationsOrCancellationsMode } from "../Enumerations/SendInvitationsOrCancellationsMode";
import { SendItemRequest } from "./Requests/SendItemRequest";
import { ServiceErrorHandling } from "../Enumerations/ServiceErrorHandling";
import { ServiceLocalException } from "../Exceptions/ServiceLocalException";
import { ServiceObject } from "./ServiceObjects/ServiceObject";
import { ServiceRemoteException } from "../Exceptions/ServiceRemoteException";
import { ServiceResponse } from "./Responses/ServiceResponse";
import { ServiceResponseCollection } from "./Responses/ServiceResponseCollection";
import { ServiceValidationException } from "../Exceptions/ServiceValidationException";
import { SetHoldOnMailboxesParameters } from "../MailboxSearch/SetHoldOnMailboxesParameters";
import { SetHoldOnMailboxesRequest } from "./Requests/SetHoldOnMailboxesRequest";
import { SetHoldOnMailboxesResponse } from "./Responses/SetHoldOnMailboxesResponse";
import { SetTeamMailboxRequest } from "./Requests/SetTeamMailboxRequest";
import { SetUserOofSettingsRequest } from "./Requests/SetUserOofSettingsRequest";
import { SoapFaultDetails } from "../Misc/SoapFaultDetails";
import { SortDirection } from "../Enumerations/SortDirection";
import { StreamingSubscription } from "../Notifications/StreamingSubscription";
import { StringList } from "../ComplexProperties/StringList";
import { Strings } from "../Strings";
import { SubscribeToPullNotificationsRequest } from "./Requests/SubscribeToPullNotificationsRequest";
import { SubscribeToPushNotificationsRequest } from "./Requests/SubscribeToPushNotificationsRequest";
import { SubscribeToStreamingNotificationsRequest } from "./Requests/SubscribeToStreamingNotificationsRequest";
import { SyncFolderHierarchyRequest } from "./Requests/SyncFolderHierarchyRequest";
import { SyncFolderItemsRequest } from "./Requests/SyncFolderItemsRequest";
import { SyncFolderItemsScope } from "../Enumerations/SyncFolderItemsScope";
import { TeamMailboxLifecycleState } from "../Enumerations/TeamMailboxLifecycleState";
import { TimeWindow } from "../Misc/Availability/TimeWindow";
import { TimeZoneInfo } from "../TimeZoneInfo";
import { TraceFlags } from "../Enumerations/TraceFlags";
import { UnifiedMessaging } from "../UnifiedMessaging/UnifiedMessaging";
import { UninstallAppRequest } from "./Requests/UninstallAppRequest";
import { UnpinTeamMailboxRequest } from "./Requests/UnpinTeamMailboxRequest";
import { UnsubscribeRequest } from "./Requests/UnsubscribeRequest";
import { UpdateDelegateRequest } from "./Requests/UpdateDelegateRequest";
import { UpdateFolderRequest } from "./Requests/UpdateFolderRequest";
import { UpdateInboxRulesRequest } from "./Requests/UpdateInboxRulesRequest";
import { UpdateItemRequest } from "./Requests/UpdateItemRequest";
import { UpdateItemResponse } from "./Responses/UpdateItemResponse";
import { UpdateUserConfigurationRequest } from "./Requests/UpdateUserConfigurationRequest";
import { Uri } from "../Uri";
import { UserConfiguration } from "../Misc/UserConfiguration";
import { UserConfigurationProperties } from "../Enumerations/UserConfigurationProperties";
import { UserId } from "../ComplexProperties/UserId";
import { UserSettingName } from "../Enumerations/UserSettingName";
import { ViewBase } from "../Search/ViewBase";
import { WellKnownFolderName } from "../Enumerations/WellKnownFolderName";
import { XHRFactory } from "../XHRFactory";
import { ExchangeServiceBase } from "./ExchangeServiceBase";
/**
* Represents a binding to the **Exchange Web Services**.
*
*/
export class ExchangeService extends ExchangeServiceBase {
//#region Constants
private static TargetServerVersionHeaderName: string = "X-EWS-TargetVersion";
//#endregion
//#region Fields
private url: Uri = null;
//private preferredCulture: any = null;// System.Globalization.CultureInfo;
private dateTimePrecision: DateTimePrecision = DateTimePrecision.Default;
private impersonatedUserId: ImpersonatedUserId = null;
private privilegedUserId: PrivilegedUserId = null;
private managementRoles: ManagementRoles = null;
private fileAttachmentContentHandler: IFileAttachmentContentHandler = null;
private unifiedMessaging: UnifiedMessaging = null;
private enableScpLookup: boolean = false; //false for javascript, AD Lookup not implemented
private renderingMode: RenderingMode = RenderingMode.Xml;
private traceEnablePrettyPrinting: boolean = true;
private targetServerVersion: string = null;
private exchange2007CompatibilityMode: boolean = false;
//#endregion
//#region Properties
/**
* Gets or sets the URL of the Exchange Web Services.
*/
get Url(): Uri {
return this.url;
}
set Url(value: Uri) {
this.url = value;
}
/**
* Gets or sets the Id of the user that EWS should impersonate.
*/
get ImpersonatedUserId(): ImpersonatedUserId {
return this.impersonatedUserId;
}
set ImpersonatedUserId(value: ImpersonatedUserId) {
this.impersonatedUserId = value;
}
/**
* @internal Gets or sets the Id of the user that EWS should open his/her mailbox with privileged logon type.
*/
get PrivilegedUserId(): PrivilegedUserId {
return this.privilegedUserId;
}
set PrivilegedUserId(value: PrivilegedUserId) {
this.privilegedUserId = value;
}
/**
* [summary]
*/
get ManagementRoles(): ManagementRoles {
return this.managementRoles;
}
set ManagementRoles(value: ManagementRoles) {
this.managementRoles = value;
}
// /**
// * Gets or sets the preferred culture for messages returned by the Exchange Web Services.
// */
// get PreferredCulture(): CultureInfo {
// return this.preferredCulture;
// }
// set PreferredCulture(value: CultureInfo) {
// this.preferredCulture = value;
// }
/**
* Gets or sets the DateTime precision for DateTime values returned from Exchange Web Services.
*/
get DateTimePrecision(): DateTimePrecision {
return this.dateTimePrecision;
}
set DateTimePrecision(value: DateTimePrecision) {
this.dateTimePrecision = value;
}
/**
* Gets or sets a file attachment content handler.
*/
get FileAttachmentContentHandler(): IFileAttachmentContentHandler {
return this.fileAttachmentContentHandler;
}
set FileAttachmentContentHandler(value: IFileAttachmentContentHandler) {
this.fileAttachmentContentHandler = value;
}
/**
* Gets the time zone this service is scoped to.
*/
get TimeZone(): TimeZoneInfo {
return this.timeZone;
}
/**
* Provides access to the Unified Messaging functionalities.
*/
get UnifiedMessaging(): UnifiedMessaging {
if (this.unifiedMessaging === null) {
this.unifiedMessaging = new UnifiedMessaging(this);
}
return this.unifiedMessaging;
}
/**
* Gets or sets a value indicating whether the AutodiscoverUrl method should perform SCP (Service Connection Point) record lookup when determining the Autodiscover service URL.
*/
get EnableScpLookup(): boolean {
return this.enableScpLookup;
}
set EnableScpLookup(value: boolean) {
this.enableScpLookup = value;
}
/**
* @internal Gets or sets a value indicating whether Exchange2007 compatibility mode is enabled.
* @remarks In order to support E12 servers, the Exchange2007CompatibilityMode property can be used to indicate that we should use "Exchange2007" as the server version string rather than Exchange2007_SP1.
*/
get Exchange2007CompatibilityMode(): boolean {
return this.exchange2007CompatibilityMode;
}
set Exchange2007CompatibilityMode(value: boolean) {
this.exchange2007CompatibilityMode = value;
}
/**
* @internal Gets or sets the method by which the service will serialize the request.
*/
get RenderingMethod(): RenderingMode {
return this.renderingMode;
}
set RenderingMethod(value: RenderingMode) {
throw new Error("Rendering mode not used");
this.renderingMode = value;
}
/**
* Gets or sets a value indicating whether trace output is pretty printed.
*/
get TraceEnablePrettyPrinting(): boolean {
return this.traceEnablePrettyPrinting;
}
set TraceEnablePrettyPrinting(value: boolean) {
this.traceEnablePrettyPrinting = value;
}
/**
* @internal Gets or sets the target server version string (newer than Exchange2013).
*/
get TargetServerVersion(): string {
return this.targetServerVersion;
}
set TargetServerVersion(value: string) {
ExchangeService.ValidateTargetVersion(value);
this.targetServerVersion = value;
}
//#endregion
//#region Response object operations
/**
* @internal Create response object.
*
* @param {ServiceObject} responseObject The response object.
* @param {FolderId} parentFolderId The parent folder id.
* @param {MessageDisposition} messageDisposition The message disposition.
* @return {Promise<Item[]>} The list of items created or modified as a result of the "creation" of the response object :Promise.
*/
InternalCreateResponseObject(responseObject: ServiceObject, parentFolderId: FolderId, messageDisposition: MessageDisposition): Promise<Item[]> {
var request: CreateResponseObjectRequest = new CreateResponseObjectRequest(this, ServiceErrorHandling.ThrowOnError);
request.ParentFolderId = parentFolderId;
request.Items = [responseObject];
request.MessageDisposition = messageDisposition;
return request.Execute().then((responses) => {
return responses.__thisIndexer(0).Items;
});
}
//#endregion
//#region Folder operations
/**
* @internal Binds to folder.
*
* @param {FolderId} folderId The folder id.
* @param {PropertySet} propertySet The property set.
* @return {Promise<TFolder>} Folder object :Promise.
*/
BindToFolder(folderId: FolderId, propertySet: PropertySet): Promise<Folder>;
/**
* @internal Binds to folder.
*
* @param {FolderId} folderId The folder id.
* @param {PropertySet} propertySet The property set.
* @param {folderType} propertySet Type to Cast - pass Folder or subclass itself, not an instance
* @return {Promise<TFolder>} Folder object :Promise.
*/
BindToFolder<TFolder extends Folder>(folderId: FolderId, propertySet: PropertySet,/** pass Folder or subclass itself, not an instance */ folderType: any): Promise<TFolder>;
BindToFolder(folderId: FolderId, propertySet: PropertySet, /** pass Folder or subclass itself, not an instance */ folderType: any = null): Promise<Folder> {
EwsUtilities.ValidateParam(folderId, "folderId");
EwsUtilities.ValidateParam(propertySet, "propertySet");
var request: GetFolderRequest = new GetFolderRequest(this, ServiceErrorHandling.ThrowOnError);
request.FolderIds.Add(folderId);
request.PropertySet = propertySet;
return request.Execute().then((responses) => {
var result = responses.__thisIndexer(0).Folder;
if (folderType != null && !(result instanceof folderType)) { //todo: validate folderType to be not a constructor
throw new ServiceLocalException(
StringHelper.Format(
Strings.FolderTypeNotCompatible,
"Type detection not implemented - ExchangeService.ts - BindToFolder<TFolder>",
"Type detection not implemented"));
}
return result;
});
}
/**
* @internal Copies a folder. Calling this method results in a call to EWS.
*
* @param {FolderId} folderId The folder id.
* @param {FolderId} destinationFolderId The destination folder id.
* @return {Promise<Folder>} Copy of folder :Promise.
*/
CopyFolder(folderId: FolderId, destinationFolderId: FolderId): Promise<Folder> {
var request: CopyFolderRequest = new CopyFolderRequest(this, ServiceErrorHandling.ThrowOnError);
request.DestinationFolderId = destinationFolderId;
request.FolderIds.Add(folderId);
return request.Execute().then((responses) => {
return responses.__thisIndexer(0).Folder;
});
}
/**
* @internal Creates a folder. Calling this method results in a call to EWS.
*
* @param {FolderId} folder The folder.
* @param {FolderId} parentFolderId The parent folder id.
*/
CreateFolder(folder: Folder, parentFolderId: FolderId): Promise<void> {
var request: CreateFolderRequest = new CreateFolderRequest(this, ServiceErrorHandling.ThrowOnError);
request.Folders = [folder];
request.ParentFolderId = parentFolderId;
return <any>request.Execute();
}
/**
* @internal Deletes a folder. Calling this method results in a call to EWS.
*
* @param {FolderId} folderId The folder id.
* @param {DeleteMode} deleteMode The delete mode.
*/
DeleteFolder(folderId: FolderId, deleteMode: DeleteMode): Promise<void> {
EwsUtilities.ValidateParam(folderId, "folderId");
var request: DeleteFolderRequest = new DeleteFolderRequest(this, ServiceErrorHandling.ThrowOnError);
request.FolderIds.Add(folderId);
request.DeleteMode = deleteMode;
return <any>request.Execute();
}
/**
* @internal Empties a folder. Calling this method results in a call to EWS.
*
* @param {FolderId} folderId The folder id.
* @param {DeleteMode} deleteMode The delete mode.
* @param {boolean} deleteSubFolders if set to true empty folder should also delete sub folders.
*/
EmptyFolder(folderId: FolderId, deleteMode: DeleteMode, deleteSubFolders: boolean): Promise<void> {
EwsUtilities.ValidateParam(folderId, "folderId");
var request: EmptyFolderRequest = new EmptyFolderRequest(this, ServiceErrorHandling.ThrowOnError);
request.FolderIds.Add(folderId);
request.DeleteMode = deleteMode;
request.DeleteSubFolders = deleteSubFolders;
return <any>request.Execute();
}
/**
* Obtains a list of folders by searching the sub-folders of the specified folder.
*
* @param {FolderId} parentFolderId The Id of the folder in which to search for folders.
* @param {FolderView} view The view controlling the number of folders returned.
* @return {Promise<FindFoldersResults>} An object representing the results of the search operation :Promise.
*/
FindFolders(parentFolderId: FolderId, view: FolderView): Promise<FindFoldersResults>;
/**
* Obtains a list of folders by searching the sub-folders of the specified folder.
*
* @param {WellKnownFolderName} parentFolderName The name of the folder in which to search for folders.
* @param {FolderView} view The view controlling the number of folders returned.
* @return {Promise<FindFoldersResults>} An object representing the results of the search operation :Promise.
*/
FindFolders(parentFolderName: WellKnownFolderName, view: FolderView): Promise<FindFoldersResults>;
/**
* Obtains a list of folders by searching the sub-folders of the specified folder.
*
* @param {FolderId} parentFolderId The Id of the folder in which to search for folders.
* @param {SearchFilter} searchFilter The search filter. Available search filter classes include SearchFilter.IsEqualTo, SearchFilter.ContainsSubstring and SearchFilter.SearchFilterCollection
* @param {FolderView} view The view controlling the number of folders returned.
* @return {Promise<FindFoldersResults>} An object representing the results of the search operation :Promise.
*/
FindFolders(parentFolderId: FolderId, searchFilter: SearchFilter, view: FolderView): Promise<FindFoldersResults>;
/**
* Obtains a list of folders by searching the sub-folders of the specified folder.
*
* @param {WellKnownFolderName} parentFolderName The name of the folder in which to search for folders.
* @param {SearchFilter} searchFilter The search filter. Available search filter classes include SearchFilter.IsEqualTo, SearchFilter.ContainsSubstring and SearchFilter.SearchFilterCollection
* @param {FolderView} view The view controlling the number of folders returned.
* @return {Promise<FindFoldersResults>} An object representing the results of the search operation :Promise.
*/
FindFolders(parentFolderName: WellKnownFolderName, searchFilter: SearchFilter, view: FolderView): Promise<FindFoldersResults>;
FindFolders(
parentFolderIdOrName: FolderId | WellKnownFolderName,
viewOrSearchFilter: FolderView | SearchFilter,
folderView?: FolderView): Promise<FindFoldersResults> {
//todo: better argument check with ewsutilities
//EwsUtilities.ValidateParam(parentFolderId, "parentFolderId");
//EwsUtilities.ValidateParam(view, "view");
//EwsUtilities.ValidateParamAllowNull(searchFilter, "searchFilter");
var argsLength = arguments.length;
if (argsLength < 2 && argsLength > 3) {
throw new Error("ExchangeService.ts - FindFolders - invalid number of arguments, check documentation and try again.");
}
//position 1 - parentFolderIdOrName
var parentFolderIds: FolderId[] = []
if (typeof parentFolderIdOrName === 'number') {
parentFolderIds.push(new FolderId(parentFolderIdOrName));
}
else if (parentFolderIdOrName instanceof FolderId) {
parentFolderIds.push(parentFolderIdOrName);
}
else {
throw new Error("ExchangeService.ts - FindFolders - incorrect use of parameters, 1st argument must be Folder ID or WellKnownFolderName");
}
var searchFilter: SearchFilter = null;
var view: FolderView = null;
//position 2 - viewOrSearchFilter
if (viewOrSearchFilter instanceof SearchFilter) {
if (!(folderView instanceof FolderView)) {
throw new Error("ExchangeService.ts - FindFolders with " + argsLength + " parameters - incorrect uses of parameter at 3nd position, it must be FolderView when using SearchFilter at 2nd place");
}
searchFilter = viewOrSearchFilter;
}
else if (viewOrSearchFilter instanceof FolderView) {
view = viewOrSearchFilter;
}
else {
throw new Error("ExchangeService.ts - FindFolders - incorrect uses of parameters at 2nd position, must be FolderView or SearchFilter");
}
//position 3 - folderView
if (argsLength == 3) {
view = folderView;
}
return this.InternalFindFolders(
parentFolderIds,
searchFilter, /* searchFilter */
view,
ServiceErrorHandling.ThrowOnError).then((responses) => {
return responses.__thisIndexer(0).Results;
});
}
/**
* Finds folders.
*
* @param {FolderId[]} parentFolderIds The parent folder ids.
* @param {SearchFilter} searchFilter The search filter. Available search filter classes include SearchFilter.IsEqualTo, SearchFilter.ContainsSubstring and SearchFilter.SearchFilterCollection
* @param {FolderView} view The view controlling the number of folders returned.
* @param {ServiceErrorHandling} errorHandlingMode Indicates the type of error handling should be done.
* @return {Promise<ServiceResponseCollection<FindFolderResponse>>} Collection of service responses :Promise.
*/
private InternalFindFolders(parentFolderIds: FolderId[], searchFilter: SearchFilter, view: FolderView, errorHandlingMode: ServiceErrorHandling): Promise<ServiceResponseCollection<FindFolderResponse>> {
var request: FindFolderRequest = new FindFolderRequest(this, errorHandlingMode);
request.ParentFolderIds.AddRange(parentFolderIds);
request.SearchFilter = searchFilter;
request.View = view;
return request.Execute();
}
/**
* @internal Load specified properties for a folder.
*
* @param {Folder} folder The folder.
* @param {PropertySet} propertySet The property set.
*/
LoadPropertiesForFolder(folder: Folder, propertySet: PropertySet): Promise<void> {
EwsUtilities.ValidateParam(folder, "folder");
EwsUtilities.ValidateParam(propertySet, "propertySet");
var request: GetFolderRequestForLoad = new GetFolderRequestForLoad(this, ServiceErrorHandling.ThrowOnError);
request.FolderIds.Add(folder);
request.PropertySet = propertySet;
return <any>request.Execute();
}
/**
* @internal Marks all items in folder as read/unread. Calling this method results in a call to EWS.
*
* @param {FolderId} folderId The folder id.
* @param {boolean} readFlag If true, items marked as read, otherwise unread.
* @param {boolean} suppressReadReceipts If true, suppress read receipts for items.
*/
MarkAllItemsAsRead(folderId: FolderId, readFlag: boolean, suppressReadReceipts: boolean): Promise<void> {
EwsUtilities.ValidateParam(folderId, "folderId");
EwsUtilities.ValidateMethodVersion(this, ExchangeVersion.Exchange2013, "MarkAllItemsAsRead");
var request: MarkAllItemsAsReadRequest = new MarkAllItemsAsReadRequest(this, ServiceErrorHandling.ThrowOnError);
request.FolderIds.Add(folderId);
request.ReadFlag = readFlag;
request.SuppressReadReceipts = suppressReadReceipts;
return <any>request.Execute();
}
/**
* @internal Move a folder.
*
* @param {FolderId} folderId The folder id.
* @param {FolderId} destinationFolderId The destination folder id.
* @return {Promise<Folder>} Moved folder :Promise.
*/
MoveFolder(folderId: FolderId, destinationFolderId: FolderId): Promise<Folder> {
var request: MoveFolderRequest = new MoveFolderRequest(this, ServiceErrorHandling.ThrowOnError);
request.DestinationFolderId = destinationFolderId;
request.FolderIds.Add(folderId);
return request.Execute().then((responses) => {
return responses.__thisIndexer(0).Folder;
});
}
/**
* @internal Updates a folder.
*
* @param {Folder} folder The folder.
*/
UpdateFolder(folder: Folder): Promise<void> {
var request: UpdateFolderRequest = new UpdateFolderRequest(this, ServiceErrorHandling.ThrowOnError);
request.Folders.push(folder);
return request.Execute().then((value) => {
return null;
});
}
//#endregion
//#region Item operations
/**
* Archives multiple items in a single call to EWS.
*
* @param {ItemId[]} itemIds The Ids of the items to move.
* @param {FolderId} sourceFolderId The Id of the folder in primary corresponding to which items are being archived to.
* @return {Promise<ServiceResponseCollection<ArchiveItemResponse>>} A ServiceResponseCollection providing copy results for each of the specified item Ids :Promise.
*/
ArchiveItems<TResponse extends ServiceResponse>(itemIds: ItemId[], sourceFolderId: FolderId): Promise<ServiceResponseCollection<ArchiveItemResponse>> {
var request: ArchiveItemRequest = new ArchiveItemRequest(this, ServiceErrorHandling.ReturnErrors);
request.Ids.AddRange(itemIds);
request.SourceFolderId = sourceFolderId;
return request.Execute();
}
/* //ref: new method, //todo: implement other newer code from ews managed api repo */
/**
* Binds to multiple items in a single call to EWS.
*
* @param {ItemId[]} itemIds The Ids of the items to bind to.
* @param {PropertySet} propertySet The set of properties to load.
* @param {string} anchorMailbox The SmtpAddress of mailbox that hosts all items we need to bind to
* @return {Promise<ServiceResponseCollection<GetItemResponse>>} A ServiceResponseCollection providing results for each of the specified item Ids :Promise.
*/
BindToGroupItems(itemIds: ItemId[], propertySet: PropertySet, anchorMailbox: string): Promise<ServiceResponseCollection<GetItemResponse>> {
EwsUtilities.ValidateParamCollection(itemIds, "itemIds");
EwsUtilities.ValidateParam(propertySet, "propertySet");
EwsUtilities.ValidateParam(propertySet, "anchorMailbox");
return this.InternalBindToItems(
itemIds,
propertySet,
anchorMailbox,
ServiceErrorHandling.ReturnErrors);
}
/**
* @internal Binds to item.
*
* @param {ItemId} itemId The item id.
* @param {PropertySet} propertySet The property set.
* @return {Promise<Item>} Item :Promise.
*/
BindToItem(itemId: ItemId, propertySet: PropertySet): Promise<Item>;
/**
* @internal Binds to item.
*
* @param {ItemId} itemId The item id.
* @param {PropertySet} propertySet The property set.
* @param {<TItem>} itemType Item type class ex: Item, EmailMessage etc..
* @return {Promise<Item>} Item :Promise.
*/
BindToItem<TItem extends Item>(itemId: ItemId, propertySet: PropertySet, itemType: typeof Item /* pass Item or subclass itself, not instance */): Promise<TItem>;
BindToItem(itemId: ItemId, propertySet: PropertySet,/** pass Item or subclass itself, not an instance */ itemType: typeof Item = null): Promise<Item> {
EwsUtilities.ValidateParam(itemId, "itemId");
EwsUtilities.ValidateParam(propertySet, "propertySet");
return this.InternalBindToItems(
[itemId],
propertySet,
null, /* anchorMailbox */
ServiceErrorHandling.ThrowOnError).then((response) => {
var result = response.__thisIndexer(0).Item;
if (itemType != null && !(result instanceof itemType)) { //todo: validate itemType to be not a constructor
throw new ServiceLocalException(
StringHelper.Format(
Strings.ItemTypeNotCompatible,
"Type detection not implemented - ExchangeService.ts - BindToItem<TItem>",
"Type detection not implemented"));
}
return result;
});
}
/**
* Binds to multiple items in a single call to EWS.
*
* @param {ItemId[]} itemIds The Ids of the items to bind to.
* @param {PropertySet} propertySet The set of properties to load.
* @return {Promise<ServiceResponseCollection<GetItemResponse>>} A ServiceResponseCollection providing results for each of the specified item Ids :Promise.
*/
BindToItems(itemIds: ItemId[], propertySet: PropertySet): Promise<ServiceResponseCollection<GetItemResponse>> {
EwsUtilities.ValidateParamCollection(itemIds, "itemIds");
EwsUtilities.ValidateParam(propertySet, "propertySet");
return this.InternalBindToItems(
itemIds,
propertySet,
null, /* anchorMailbox */
ServiceErrorHandling.ReturnErrors);
}
/**
* @internal Copies an item. Calling this method results in a call to EWS.
*
* @param {ItemId} itemId The Id of the item to copy.
* @param {FolderId} destinationFolderId The Id of the folder to copy the item to.
* @return {Promise<Item>} The copy of the item :Promise.
*/
CopyItem(itemId: ItemId, destinationFolderId: FolderId): Promise<Item> {
return this.InternalCopyItems(
[itemId],
destinationFolderId,
null,
ServiceErrorHandling.ThrowOnError).then((response) => {
return response.__thisIndexer(0).Item;
});
}
/**
* Copies multiple items in a single call to EWS.
*
* @param {ItemId[]} itemIds The Ids of the items to copy.
* @param {FolderId} destinationFolderId The Id of the folder to copy the items to.
* @return {Promise<ServiceResponseCollection<MoveCopyItemResponse>>} A ServiceResponseCollection providing copy results for each of the specified item Ids :Promise.
*/
CopyItems(itemIds: ItemId[], destinationFolderId: FolderId): Promise<ServiceResponseCollection<MoveCopyItemResponse>>;
/**
* Copies multiple items in a single call to EWS.
*
* @param {ItemId[]} itemIds The Ids of the items to copy.
* @param {FolderId} destinationFolderId The Id of the folder to copy the items to.
* @param {boolean} returnNewItemIds Flag indicating whether service should return new ItemIds or not.
* @return {Promise<ServiceResponseCollection<MoveCopyItemResponse>>} A ServiceResponseCollection providing copy results for each of the specified item Ids :Promise.
*/
CopyItems(itemIds: ItemId[], destinationFolderId: FolderId, returnNewItemIds: boolean): Promise<ServiceResponseCollection<MoveCopyItemResponse>>;
CopyItems(itemIds: ItemId[], destinationFolderId: FolderId, returnNewItemIds: boolean = null): Promise<ServiceResponseCollection<MoveCopyItemResponse>> {
EwsUtilities.ValidateMethodVersion(
this,
ExchangeVersion.Exchange2010_SP1,
"CopyItems");
return this.InternalCopyItems(
itemIds,
destinationFolderId,
returnNewItemIds,
ServiceErrorHandling.ReturnErrors);
}
/**
* @internal Creates an item. Calling this method results in a call to EWS.
*
* @param {Item} item The item to create.
* @param {FolderId} parentFolderId The Id of the folder in which to place the newly created item. If null, the item is created in its default folders.
* @param {MessageDisposition} messageDisposition Indicates the disposition mode for items of type EmailMessage. Required if item is an EmailMessage instance.
* @param {SendInvitationsMode} sendInvitationsMode Indicates if and how invitations should be sent for item of type Appointment. Required if item is an Appointment instance.
*/
CreateItem(item: Item, parentFolderId: FolderId, messageDisposition: MessageDisposition, sendInvitationsMode: SendInvitationsMode): Promise<void> {
return <any>this.InternalCreateItems(
[item],
parentFolderId,
messageDisposition,
sendInvitationsMode,
ServiceErrorHandling.ThrowOnError);
}
/**
* Creates multiple items in a single EWS call. Supported item classes are EmailMessage, Appointment, Contact, PostItem, Task and Item. CreateItems does not support items that have unsaved attachments.
*
* @param {Item[]} items The items to create.
* @param {FolderId} parentFolderId The Id of the folder in which to place the newly created items. If null, items are created in their default folders.
* @param {MessageDisposition} messageDisposition Indicates the disposition mode for items of type EmailMessage. Required if items contains at least one EmailMessage instance.
* @param {SendInvitationsMode} sendInvitationsMode Indicates if and how invitations should be sent for items of type Appointment. Required if items contains at least one Appointment instance.
* @return {Promise<ServiceResponseCollection<ServiceResponse>>} A ServiceResponseCollection providing creation results for each of the specified items :Promise.
*/
CreateItems(items: Item[], parentFolderId: FolderId, messageDisposition: MessageDisposition, sendInvitationsMode: SendInvitationsMode): Promise<ServiceResponseCollection<ServiceResponse>> {
// All items have to be new.
if (!items.every((item) => item.IsNew)) {
throw new ServiceValidationException(Strings.CreateItemsDoesNotHandleExistingItems);
}
// Make sure that all items do *not* have unprocessed attachments.
if (!items.every((item) => !item.HasUnprocessedAttachmentChanges())) {
throw new ServiceValidationException(Strings.CreateItemsDoesNotAllowAttachments);
}
return this.InternalCreateItems(
items,
parentFolderId,
messageDisposition,
sendInvitationsMode,
ServiceErrorHandling.ReturnErrors);
}
/**
* @internal Deletes an item. Calling this method results in a call to EWS.
*
* @param {ItemId} itemId The Id of the item to delete.
* @param {DeleteMode} deleteMode The deletion mode.
* @param {SendCancellationsMode} sendCancellationsMode Indicates whether cancellation messages should be sent. Required if the item Id represents an Appointment.
* @param {AffectedTaskOccurrence} affectedTaskOccurrences Indicates which instance of a recurring task should be deleted. Required if item Id represents a Task.
*/
DeleteItem(itemId: ItemId, deleteMode: DeleteMode, sendCancellationsMode: SendCancellationsMode, affectedTaskOccurrences: AffectedTaskOccurrence): Promise<void>;
/**
* @internal Deletes an item. Calling this method results in a call to EWS.
*
* @param {ItemId} itemId The Id of the item to delete.
* @param {DeleteMode} deleteMode The deletion mode.
* @param {SendCancellationsMode} sendCancellationsMode Indicates whether cancellation messages should be sent. Required if the item Id represents an Appointment.
* @param {AffectedTaskOccurrence} affectedTaskOccurrences Indicates which instance of a recurring task should be deleted. Required if item Id represents a Task.
* @param {boolean} suppressReadReceipts Whether to suppress read receipts
*/
DeleteItem(itemId: ItemId, deleteMode: DeleteMode, sendCancellationsMode: SendCancellationsMode, affectedTaskOccurrences: AffectedTaskOccurrence, suppressReadReceipts: boolean): Promise<void>;
DeleteItem(itemId: ItemId, deleteMode: DeleteMode, sendCancellationsMode: SendCancellationsMode, affectedTaskOccurrences: AffectedTaskOccurrence, suppressReadReceipts: boolean = false): Promise<void> {
EwsUtilities.ValidateParam(itemId, "itemId");
return <any>this.InternalDeleteItems(
[itemId],
deleteMode,
sendCancellationsMode,
affectedTaskOccurrences,
ServiceErrorHandling.ThrowOnError,
suppressReadReceipts);
}
/**
* Deletes multiple items in a single call to EWS.
*
* @param {ItemId[]} itemIds The Ids of the items to delete.
* @param {DeleteMode} deleteMode The deletion mode.
* @param {SendCancellationsMode} sendCancellationsMode Indicates whether cancellation messages should be sent. Required if the item Id represents an Appointment.
* @param {AffectedTaskOccurrence} affectedTaskOccurrences Indicates which instance of a recurring task should be deleted. Required if item Id represents a Task.
* @return {Promise<ServiceResponseCollection<ServiceResponse>>} A ServiceResponseCollection providing deletion results for each of the specified item Ids :Promise.
*/
DeleteItems(itemIds: ItemId[], deleteMode: DeleteMode, sendCancellationsMode: SendCancellationsMode, affectedTaskOccurrences: AffectedTaskOccurrence): Promise<ServiceResponseCollection<ServiceResponse>>;
/**
* Deletes multiple items in a single call to EWS.
*
* @param {ItemId[]} itemIds The Ids of the items to delete.
* @param {DeleteMode} deleteMode The deletion mode.
* @param {SendCancellationsMode} sendCancellationsMode Indicates whether cancellation messages should be sent. Required if the item Id represents an Appointment.
* @param {AffectedTaskOccurrence} affectedTaskOccurrences Indicates which instance of a recurring task should be deleted. Required if item Id represents a Task.
* @param {boolean} suppressReadReceipts Whether to suppress read receipts
* @return {Promise<ServiceResponseCollection<ServiceRes