@rapidmx/activesync-plugin 1.0.0-beta.2 → 1.0.0-beta.3
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/README.md +4 -4
- package/dist/lib/BaseDeviceSyncStateRoute.js +32 -0
- package/dist/lib/BaseDeviceSyncStateRoute.js.map +1 -1
- package/dist/lib/BaseEasRoute.js +91 -15
- package/dist/lib/BaseEasRoute.js.map +1 -1
- package/dist/lib/EasAuditLog.js +56 -0
- package/dist/lib/EasAuditLog.js.map +1 -0
- package/dist/lib/EasCollectionLease.js +199 -0
- package/dist/lib/EasCollectionLease.js.map +1 -0
- package/dist/lib/EasCollectionStore.js +102 -0
- package/dist/lib/EasCollectionStore.js.map +1 -0
- package/dist/lib/EasCollectionSync.js +294 -0
- package/dist/lib/EasCollectionSync.js.map +1 -0
- package/dist/lib/EasSyncKeyUtils.js +125 -62
- package/dist/lib/EasSyncKeyUtils.js.map +1 -1
- package/dist/lib/MessageMoveRules.js +100 -0
- package/dist/lib/MessageMoveRules.js.map +1 -0
- package/dist/lib/MimeHeaderUtils.js +395 -0
- package/dist/lib/MimeHeaderUtils.js.map +1 -0
- package/dist/lib/RegexPatternUtils.js +30 -0
- package/dist/lib/RegexPatternUtils.js.map +1 -0
- package/dist/lib/RestapiCompat.js +41 -0
- package/dist/lib/RestapiCompat.js.map +1 -0
- package/dist/lib/adapters/CalendarSyncAdapter.js +142 -33
- package/dist/lib/adapters/CalendarSyncAdapter.js.map +1 -1
- package/dist/lib/adapters/EmailSyncAdapter.js +114 -27
- package/dist/lib/adapters/EmailSyncAdapter.js.map +1 -1
- package/dist/lib/adapters/mongo/EmailSyncAdapterMongo.js +2 -1
- package/dist/lib/adapters/mongo/EmailSyncAdapterMongo.js.map +1 -1
- package/dist/lib/adapters/sql/EmailSyncAdapterSQL.js +2 -1
- package/dist/lib/adapters/sql/EmailSyncAdapterSQL.js.map +1 -1
- package/dist/lib/codec/WbxmlDecoder.js +86 -34
- package/dist/lib/codec/WbxmlDecoder.js.map +1 -1
- package/dist/lib/codec/WbxmlEncoder.js +103 -22
- package/dist/lib/codec/WbxmlEncoder.js.map +1 -1
- package/dist/lib/commands/ComposeMailCommand.js +105 -31
- package/dist/lib/commands/ComposeMailCommand.js.map +1 -1
- package/dist/lib/commands/FolderSyncCommand.js +67 -27
- package/dist/lib/commands/FolderSyncCommand.js.map +1 -1
- package/dist/lib/commands/GetItemEstimateCommand.js +80 -59
- package/dist/lib/commands/GetItemEstimateCommand.js.map +1 -1
- package/dist/lib/commands/ItemOperationsCommand.js +219 -56
- package/dist/lib/commands/ItemOperationsCommand.js.map +1 -1
- package/dist/lib/commands/MeetingResponseCommand.js +212 -53
- package/dist/lib/commands/MeetingResponseCommand.js.map +1 -1
- package/dist/lib/commands/MoveItemsCommand.js +54 -21
- package/dist/lib/commands/MoveItemsCommand.js.map +1 -1
- package/dist/lib/commands/PingCommand.js +288 -56
- package/dist/lib/commands/PingCommand.js.map +1 -1
- package/dist/lib/commands/ProvisionCommand.js +34 -17
- package/dist/lib/commands/ProvisionCommand.js.map +1 -1
- package/dist/lib/commands/ResolveRecipientsCommand.js +43 -5
- package/dist/lib/commands/ResolveRecipientsCommand.js.map +1 -1
- package/dist/lib/commands/SearchCommand.js +92 -17
- package/dist/lib/commands/SearchCommand.js.map +1 -1
- package/dist/lib/commands/SettingsCommand.js +2 -1
- package/dist/lib/commands/SettingsCommand.js.map +1 -1
- package/dist/lib/commands/SmartForwardCommand.js +2 -1
- package/dist/lib/commands/SmartForwardCommand.js.map +1 -1
- package/dist/lib/commands/SmartReplyCommand.js +2 -1
- package/dist/lib/commands/SmartReplyCommand.js.map +1 -1
- package/dist/lib/commands/SyncCommand.js +481 -244
- package/dist/lib/commands/SyncCommand.js.map +1 -1
- package/dist/lib/commands/mongo/GetItemEstimateCommandMongo.js +6 -1
- package/dist/lib/commands/mongo/GetItemEstimateCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/ItemOperationsCommandMongo.js +3 -1
- package/dist/lib/commands/mongo/ItemOperationsCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/MeetingResponseCommandMongo.js +2 -1
- package/dist/lib/commands/mongo/MeetingResponseCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/PingCommandMongo.js +23 -0
- package/dist/lib/commands/mongo/PingCommandMongo.js.map +1 -0
- package/dist/lib/commands/mongo/SearchCommandMongo.js +3 -1
- package/dist/lib/commands/mongo/SearchCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/SendMailCommandMongo.js +2 -1
- package/dist/lib/commands/mongo/SendMailCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/SmartForwardCommandMongo.js +2 -1
- package/dist/lib/commands/mongo/SmartForwardCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/SmartReplyCommandMongo.js +2 -1
- package/dist/lib/commands/mongo/SmartReplyCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/SyncCommandMongo.js +7 -1
- package/dist/lib/commands/mongo/SyncCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/index.js +1 -0
- package/dist/lib/commands/mongo/index.js.map +1 -1
- package/dist/lib/commands/sql/GetItemEstimateCommandSQL.js +6 -1
- package/dist/lib/commands/sql/GetItemEstimateCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/ItemOperationsCommandSQL.js +3 -1
- package/dist/lib/commands/sql/ItemOperationsCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/MeetingResponseCommandSQL.js +2 -1
- package/dist/lib/commands/sql/MeetingResponseCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/PingCommandSQL.js +23 -0
- package/dist/lib/commands/sql/PingCommandSQL.js.map +1 -0
- package/dist/lib/commands/sql/SearchCommandSQL.js +3 -1
- package/dist/lib/commands/sql/SearchCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/SendMailCommandSQL.js +2 -1
- package/dist/lib/commands/sql/SendMailCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/SmartForwardCommandSQL.js +2 -1
- package/dist/lib/commands/sql/SmartForwardCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/SmartReplyCommandSQL.js +2 -1
- package/dist/lib/commands/sql/SmartReplyCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/SyncCommandSQL.js +7 -1
- package/dist/lib/commands/sql/SyncCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/index.js +1 -0
- package/dist/lib/commands/sql/index.js.map +1 -1
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/jobs/EasDeviceStateCleanupJob.js +44 -2
- package/dist/lib/jobs/EasDeviceStateCleanupJob.js.map +1 -1
- package/dist/lib/jobs/mongo/EasDeviceStateCleanupJobMongo.js +4 -0
- package/dist/lib/jobs/mongo/EasDeviceStateCleanupJobMongo.js.map +1 -1
- package/dist/lib/jobs/sql/EasDeviceStateCleanupJobSQL.js +9 -0
- package/dist/lib/jobs/sql/EasDeviceStateCleanupJobSQL.js.map +1 -1
- package/dist/lib/models/EasCollectionChunk.js +2 -0
- package/dist/lib/models/EasCollectionChunk.js.map +1 -0
- package/dist/lib/models/EasCollectionState.js +2 -0
- package/dist/lib/models/EasCollectionState.js.map +1 -0
- package/dist/lib/models/mongo/DeviceSyncStateMongo.js +7 -0
- package/dist/lib/models/mongo/DeviceSyncStateMongo.js.map +1 -1
- package/dist/lib/models/mongo/EasCollectionChunkMongo.js +83 -0
- package/dist/lib/models/mongo/EasCollectionChunkMongo.js.map +1 -0
- package/dist/lib/models/mongo/EasCollectionStateMongo.js +162 -0
- package/dist/lib/models/mongo/EasCollectionStateMongo.js.map +1 -0
- package/dist/lib/models/sql/DeviceSyncStateSQL.js +7 -0
- package/dist/lib/models/sql/DeviceSyncStateSQL.js.map +1 -1
- package/dist/lib/models/sql/EasCollectionChunkSQL.js +83 -0
- package/dist/lib/models/sql/EasCollectionChunkSQL.js.map +1 -0
- package/dist/lib/models/sql/EasCollectionStateSQL.js +162 -0
- package/dist/lib/models/sql/EasCollectionStateSQL.js.map +1 -0
- package/dist/lib/mongo/EasRouteMongo.js +2 -2
- package/dist/lib/mongo/EasRouteMongo.js.map +1 -1
- package/dist/lib/mongo.js +2 -0
- package/dist/lib/mongo.js.map +1 -1
- package/dist/lib/sql/EasRouteSQL.js +2 -2
- package/dist/lib/sql/EasRouteSQL.js.map +1 -1
- package/dist/lib/sql.js +2 -0
- package/dist/lib/sql.js.map +1 -1
- package/dist/types/BaseDeviceSyncStateRoute.d.ts +10 -0
- package/dist/types/BaseEasRoute.d.ts +15 -4
- package/dist/types/EasAuditLog.d.ts +47 -0
- package/dist/types/EasCollectionLease.d.ts +60 -0
- package/dist/types/EasCollectionStore.d.ts +51 -0
- package/dist/types/EasCollectionSync.d.ts +96 -0
- package/dist/types/EasCommandHandler.d.ts +7 -4
- package/dist/types/EasSyncKeyUtils.d.ts +73 -42
- package/dist/types/MessageMoveRules.d.ts +45 -0
- package/dist/types/MimeHeaderUtils.d.ts +73 -0
- package/dist/types/RegexPatternUtils.d.ts +14 -0
- package/dist/types/RestapiCompat.d.ts +24 -0
- package/dist/types/adapters/CalendarSyncAdapter.d.ts +47 -18
- package/dist/types/adapters/EasCollectionSyncAdapter.d.ts +18 -2
- package/dist/types/adapters/EmailSyncAdapter.d.ts +24 -7
- package/dist/types/adapters/mongo/EmailSyncAdapterMongo.d.ts +1 -0
- package/dist/types/adapters/sql/EmailSyncAdapterSQL.d.ts +1 -0
- package/dist/types/codec/WbxmlDecoder.d.ts +39 -0
- package/dist/types/codec/WbxmlEncoder.d.ts +36 -1
- package/dist/types/commands/ComposeMailCommand.d.ts +33 -15
- package/dist/types/commands/FolderSyncCommand.d.ts +4 -1
- package/dist/types/commands/GetItemEstimateCommand.d.ts +20 -15
- package/dist/types/commands/ItemOperationsCommand.d.ts +29 -4
- package/dist/types/commands/MeetingResponseCommand.d.ts +52 -13
- package/dist/types/commands/MoveItemsCommand.d.ts +13 -3
- package/dist/types/commands/PingCommand.d.ts +72 -14
- package/dist/types/commands/ProvisionCommand.d.ts +16 -11
- package/dist/types/commands/ResolveRecipientsCommand.d.ts +4 -0
- package/dist/types/commands/SearchCommand.d.ts +13 -1
- package/dist/types/commands/SyncCommand.d.ts +102 -62
- package/dist/types/commands/mongo/GetItemEstimateCommandMongo.d.ts +3 -0
- package/dist/types/commands/mongo/ItemOperationsCommandMongo.d.ts +2 -0
- package/dist/types/commands/mongo/MeetingResponseCommandMongo.d.ts +1 -0
- package/dist/types/commands/mongo/PingCommandMongo.d.ts +8 -0
- package/dist/types/commands/mongo/SearchCommandMongo.d.ts +2 -0
- package/dist/types/commands/mongo/SendMailCommandMongo.d.ts +1 -0
- package/dist/types/commands/mongo/SmartForwardCommandMongo.d.ts +1 -0
- package/dist/types/commands/mongo/SmartReplyCommandMongo.d.ts +1 -0
- package/dist/types/commands/mongo/SyncCommandMongo.d.ts +4 -0
- package/dist/types/commands/mongo/index.d.ts +1 -0
- package/dist/types/commands/sql/GetItemEstimateCommandSQL.d.ts +3 -0
- package/dist/types/commands/sql/ItemOperationsCommandSQL.d.ts +2 -0
- package/dist/types/commands/sql/MeetingResponseCommandSQL.d.ts +1 -0
- package/dist/types/commands/sql/PingCommandSQL.d.ts +8 -0
- package/dist/types/commands/sql/SearchCommandSQL.d.ts +2 -0
- package/dist/types/commands/sql/SendMailCommandSQL.d.ts +1 -0
- package/dist/types/commands/sql/SmartForwardCommandSQL.d.ts +1 -0
- package/dist/types/commands/sql/SmartReplyCommandSQL.d.ts +1 -0
- package/dist/types/commands/sql/SyncCommandSQL.d.ts +4 -0
- package/dist/types/commands/sql/index.d.ts +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/jobs/EasDeviceStateCleanupJob.d.ts +15 -0
- package/dist/types/jobs/mongo/EasDeviceStateCleanupJobMongo.d.ts +2 -0
- package/dist/types/jobs/sql/EasDeviceStateCleanupJobSQL.d.ts +4 -0
- package/dist/types/models/DeviceSyncState.d.ts +13 -2
- package/dist/types/models/EasCollectionChunk.d.ts +20 -0
- package/dist/types/models/EasCollectionState.d.ts +79 -0
- package/dist/types/models/mongo/DeviceSyncStateMongo.d.ts +1 -0
- package/dist/types/models/mongo/EasCollectionChunkMongo.d.ts +16 -0
- package/dist/types/models/mongo/EasCollectionStateMongo.d.ts +27 -0
- package/dist/types/models/sql/DeviceSyncStateSQL.d.ts +1 -0
- package/dist/types/models/sql/EasCollectionChunkSQL.d.ts +16 -0
- package/dist/types/models/sql/EasCollectionStateSQL.d.ts +27 -0
- package/dist/types/mongo.d.ts +2 -0
- package/dist/types/sql.d.ts +2 -0
- package/package.json +267 -238
|
@@ -13,16 +13,29 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
13
13
|
///////////////////////////////////////////////////////////////////////////////
|
|
14
14
|
import { simpleParser } from "mailparser";
|
|
15
15
|
import { ApiError, ObjectDecorators } from "@rapidrest/core";
|
|
16
|
-
import { ACLAction, ACLUtils, ApiErrorMessages, ApiErrors, RepoUtils } from "@rapidrest/service-core";
|
|
17
|
-
import { RecoverableRepoUtils } from "@rapidmx/restapi";
|
|
16
|
+
import { ACLAction, ACLUtils, ApiErrorMessages, ApiErrors, ModelUtils, RepoUtils } from "@rapidrest/service-core";
|
|
17
|
+
import { AuditAction, RecoverableRepoUtils } from "@rapidmx/restapi";
|
|
18
18
|
import { WbxmlCodePage } from "../codec/WbxmlCodePages.js";
|
|
19
19
|
import { childText, element, findChild, findChildren, opaqueElement, textElement } from "../codec/WbxmlElement.js";
|
|
20
20
|
import { decodeConversationId } from "../adapters/EmailSyncAdapter.js";
|
|
21
|
-
|
|
21
|
+
import { hasLiveSendLease, planMessageMove } from "../MessageMoveRules.js";
|
|
22
|
+
import { asEntity, boundIndexedValue } from "../RestapiCompat.js";
|
|
23
|
+
import { EasAuditLog } from "../EasAuditLog.js";
|
|
24
|
+
const { Config, Init, Inject, Logger } = ObjectDecorators;
|
|
22
25
|
/** Caps how many messages `emptyFolderContents`/`moveConversation` process per backing `find()`/delete-batch
|
|
23
26
|
* round - keeps memory bounded and, for `emptyFolderContents`, lets an arbitrarily large folder still be fully
|
|
24
27
|
* emptied via repeated batches rather than one unbounded query. */
|
|
25
28
|
const DEFAULT_BATCH_SIZE = 500;
|
|
29
|
+
/** Default cap on the combined size of the bodies/attachments one `ItemOperations` response embeds. */
|
|
30
|
+
const DEFAULT_MAX_RESPONSE_BYTES = 64 * 1024 * 1024;
|
|
31
|
+
/** [MS-ASCMD] ItemOperations Status 11: the requested data size is too large. */
|
|
32
|
+
const STATUS_TOO_LARGE = "11";
|
|
33
|
+
/** [MS-ASCMD] ItemOperations Status 3: server error. */
|
|
34
|
+
const STATUS_SERVER_ERROR = "3";
|
|
35
|
+
/** [MS-ASCMD] ItemOperations Status 17: the operation completed partially. */
|
|
36
|
+
const STATUS_PARTIAL = "17";
|
|
37
|
+
/** Most batches (of `mail:eas:itemoperations_batch_size` messages) one `EmptyFolderContents` deletes per request. */
|
|
38
|
+
export const MAX_EMPTY_FOLDER_BATCHES = 20;
|
|
26
39
|
/** Truncates UTF-8 text to at most `maxBytes` bytes without splitting a multi-byte character in half - backs
|
|
27
40
|
* off past any trailing UTF-8 continuation byte (`10xxxxxx`) before decoding back to a string. Only ever
|
|
28
41
|
* called once the caller has already confirmed the text exceeds `maxBytes` - trusts that rather than
|
|
@@ -51,7 +64,10 @@ function truncateUtf8(text, maxBytes) {
|
|
|
51
64
|
* `MoveItems` command's per-message `SrcFldId`/`SrcMsgId`/`DstFldId` shape. Every `Message` sharing the
|
|
52
65
|
* decoded `conversationId` across the whole mailbox (not just one folder) that the caller has `UPDATE` on is
|
|
53
66
|
* relocated to `DstFldId`; one lacking permission is silently skipped rather than failing the whole move (a
|
|
54
|
-
* conversation can legitimately span folders the caller doesn't control, e.g. a shared mailbox's Inbox).
|
|
67
|
+
* conversation can legitimately span folders the caller doesn't control, e.g. a shared mailbox's Inbox). The
|
|
68
|
+
* `ConversationId` is looked up bounded and exact-matched in memory (it derives from sender-controlled headers), and
|
|
69
|
+
* each message's move follows `MessageMoveRules.planMessageMove` (never into Outbox, into Drafts only for drafts, out of
|
|
70
|
+
* Outbox cancels the scheduled send) - a refused message counts as failed. An
|
|
55
71
|
* optional `MoveAlways` (a hint to keep auto-moving future messages in this conversation) is accepted but not
|
|
56
72
|
* acted on - this library's `MailFilterRule` has no conversation-scoped condition to key an ongoing rule off
|
|
57
73
|
* of, a documented simplification, not silent data loss (the move itself still happens).
|
|
@@ -63,15 +79,29 @@ function truncateUtf8(text, maxBytes) {
|
|
|
63
79
|
* command's original single-`Fetch` design, not a new gap introduced by adding multi-`Fetch` support.
|
|
64
80
|
* - Only the "inline" delivery method is used (content embedded directly in the WBXML response) - the real
|
|
65
81
|
* spec's "multipart" alternative (WBXML as one part, binary content as a separate part) is not implemented;
|
|
66
|
-
*
|
|
67
|
-
*
|
|
82
|
+
* the combined size of the bodies/attachments embedded in one response is capped at
|
|
83
|
+
* `mail:eas:itemoperations_max_response_bytes` (default 64 MB) - a Fetch that would exceed it gets Status 11
|
|
84
|
+
* ("data too large") instead of content. Attachment access is checked against the owning message's *current*
|
|
85
|
+
* folder (`Attachment.folderUid` is not updated when a message moves).
|
|
68
86
|
* - `Options/BodyPreference`'s `Type`/`TruncationSize` are honored for a `Message` body fetch (plain text,
|
|
69
87
|
* HTML, or - `Type 4` - the raw MIME source verbatim); byte-range fetching (`Range`) is not implemented.
|
|
70
88
|
* - `EmptyFolderContents`'s `DeleteSubFolders` option is rejected outright rather than silently ignored -
|
|
71
89
|
* recursive subfolder deletion is out of scope for this pragmatic subset; emptying a single folder's own
|
|
72
90
|
* `Message`s is the common case this implements.
|
|
73
91
|
*
|
|
74
|
-
*
|
|
92
|
+
* **Bulk operations are bounded and per item**: `EmptyFolderContents` deletes at most `MAX_EMPTY_FOLDER_BATCHES`
|
|
93
|
+
* batches per request, and `Move` at most one batch; a message that fails to delete or move (e.g. a concurrent
|
|
94
|
+
* edit's version conflict) is skipped rather than failing the request, and the operation then reports Status 17
|
|
95
|
+
* (partial success) - or Status 3 when nothing at all succeeded - so the client can retry for the rest.
|
|
96
|
+
* `EmptyFolderContents` skips (as failed) a message whose send is in flight (`MessageMoveRules.hasLiveSendLease`).
|
|
97
|
+
*
|
|
98
|
+
* **Audit**: in a mailbox the caller doesn't own (restapi's `isNonOwnerAccess()` - an administrator or a delegate), a
|
|
99
|
+
* `Fetch` that returns a body or an attachment records one `MESSAGE_CONTENT_ACCESSED` entry per item, and
|
|
100
|
+
* `EmptyFolderContents` records one `MESSAGE_DELETE` entry per delete batch, listing the deleted message uids
|
|
101
|
+
* (`EasAuditLog`).
|
|
102
|
+
*
|
|
103
|
+
* `folderClass`/`messageClass`/`attachmentClass`/`mailboxClass`/`auditLogClass` are supplied by the Mongo/SQL concrete
|
|
104
|
+
* subclasses.
|
|
75
105
|
*
|
|
76
106
|
* @author Jean-Philippe Steinmetz
|
|
77
107
|
*/
|
|
@@ -79,6 +109,7 @@ export class ItemOperationsCommand {
|
|
|
79
109
|
constructor() {
|
|
80
110
|
this.command = "ItemOperations";
|
|
81
111
|
this.maxFetchesPerRequest = 25;
|
|
112
|
+
this.maxResponseBytes = DEFAULT_MAX_RESPONSE_BYTES;
|
|
82
113
|
this.batchSize = DEFAULT_BATCH_SIZE;
|
|
83
114
|
}
|
|
84
115
|
async init() {
|
|
@@ -94,9 +125,13 @@ export class ItemOperationsCommand {
|
|
|
94
125
|
name: this.attachmentClass.name,
|
|
95
126
|
args: [this.attachmentClass],
|
|
96
127
|
});
|
|
128
|
+
this.mailboxRepo = await this._objectFactory.newInstance(RepoUtils, {
|
|
129
|
+
name: this.mailboxClass.name,
|
|
130
|
+
args: [this.mailboxClass],
|
|
131
|
+
});
|
|
97
132
|
}
|
|
98
133
|
async handle(ctx) {
|
|
99
|
-
if (!this.folderRepo || !this.messageRepo || !this.attachmentRepo || !this.blobStore) {
|
|
134
|
+
if (!this.folderRepo || !this.messageRepo || !this.attachmentRepo || !this.mailboxRepo || !this.blobStore) {
|
|
100
135
|
throw new ApiError(ApiErrors.INTERNAL_ERROR, 500, ApiErrorMessages.INTERNAL_ERROR);
|
|
101
136
|
}
|
|
102
137
|
const fetchEls = ctx.request ? findChildren(ctx.request, "Fetch") : [];
|
|
@@ -114,7 +149,11 @@ export class ItemOperationsCommand {
|
|
|
114
149
|
if (fetchEls.length > this.maxFetchesPerRequest) {
|
|
115
150
|
throw new ApiError(ApiErrors.INVALID_REQUEST, 400, `ItemOperations supports at most ${this.maxFetchesPerRequest} Fetch elements per request.`);
|
|
116
151
|
}
|
|
152
|
+
const audit = new EasAuditLog({ objectFactory: this._objectFactory, auditLogClass: this.auditLogClass, mailboxRepo: this.mailboxRepo, config: this.config, logger: this.logger }, ctx, this.command);
|
|
117
153
|
const responseChildren = [];
|
|
154
|
+
// Every fetched body/attachment is embedded inline, so their combined size bounds the response. A Fetch
|
|
155
|
+
// that would push it past `maxResponseBytes` is answered with Status 11 ("data too large") instead of content.
|
|
156
|
+
let remainingBytes = this.maxResponseBytes;
|
|
118
157
|
for (const fetchEl of fetchEls) {
|
|
119
158
|
const store = childText(fetchEl, "Store");
|
|
120
159
|
if (store === "DocumentLibrary") {
|
|
@@ -123,12 +162,14 @@ export class ItemOperationsCommand {
|
|
|
123
162
|
const fileReference = childText(fetchEl, "FileReference");
|
|
124
163
|
const serverId = childText(fetchEl, "ServerId");
|
|
125
164
|
const optionsEl = findChild(fetchEl, "Options");
|
|
126
|
-
|
|
127
|
-
? await this.fetchAttachment(ctx, fileReference)
|
|
128
|
-
: await this.fetchMessage(ctx, serverId, optionsEl)
|
|
165
|
+
const fetched = fileReference
|
|
166
|
+
? await this.fetchAttachment(ctx, audit, fileReference, remainingBytes)
|
|
167
|
+
: await this.fetchMessage(ctx, audit, serverId, optionsEl, remainingBytes);
|
|
168
|
+
remainingBytes -= fetched.bytes;
|
|
169
|
+
responseChildren.push(fetched.element);
|
|
129
170
|
}
|
|
130
171
|
if (emptyEl) {
|
|
131
|
-
responseChildren.push(await this.emptyFolderContents(ctx, emptyEl));
|
|
172
|
+
responseChildren.push(await this.emptyFolderContents(ctx, audit, emptyEl));
|
|
132
173
|
}
|
|
133
174
|
if (moveEl) {
|
|
134
175
|
responseChildren.push(await this.moveConversation(ctx, moveEl));
|
|
@@ -138,7 +179,7 @@ export class ItemOperationsCommand {
|
|
|
138
179
|
element(WbxmlCodePage.ItemOperations, "Response", responseChildren),
|
|
139
180
|
]);
|
|
140
181
|
}
|
|
141
|
-
async fetchMessage(ctx, serverId, optionsEl) {
|
|
182
|
+
async fetchMessage(ctx, audit, serverId, optionsEl, remainingBytes) {
|
|
142
183
|
if (!serverId) {
|
|
143
184
|
throw new ApiError(ApiErrors.INVALID_REQUEST, 400, "Fetch requires either a ServerId or a FileReference.");
|
|
144
185
|
}
|
|
@@ -181,27 +222,47 @@ export class ItemOperationsCommand {
|
|
|
181
222
|
bodyText = truncateUtf8(bodyText, truncationSize);
|
|
182
223
|
truncated = true;
|
|
183
224
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
225
|
+
const bytes = Buffer.byteLength(bodyText, "utf8");
|
|
226
|
+
if (bytes > remainingBytes) {
|
|
227
|
+
return {
|
|
228
|
+
element: element(WbxmlCodePage.ItemOperations, "Fetch", [
|
|
229
|
+
textElement(WbxmlCodePage.ItemOperations, "Status", STATUS_TOO_LARGE),
|
|
230
|
+
textElement(WbxmlCodePage.AirSync, "ServerId", serverId),
|
|
231
|
+
]),
|
|
232
|
+
bytes: 0,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
await audit.record({
|
|
236
|
+
action: AuditAction.MESSAGE_CONTENT_ACCESSED,
|
|
237
|
+
mailboxUid: message.mailboxUid,
|
|
238
|
+
targetType: "Message",
|
|
239
|
+
targetUid: message.uid,
|
|
240
|
+
details: { subject: message.subject, folderUid: message.folderUid, bodyType },
|
|
241
|
+
});
|
|
242
|
+
return {
|
|
243
|
+
element: element(WbxmlCodePage.ItemOperations, "Fetch", [
|
|
244
|
+
textElement(WbxmlCodePage.ItemOperations, "Status", "1"),
|
|
245
|
+
textElement(WbxmlCodePage.AirSync, "Class", "Email"),
|
|
246
|
+
textElement(WbxmlCodePage.AirSync, "CollectionId", message.folderUid),
|
|
247
|
+
textElement(WbxmlCodePage.AirSync, "ServerId", serverId),
|
|
248
|
+
element(WbxmlCodePage.ItemOperations, "Properties", [
|
|
249
|
+
element(WbxmlCodePage.AirSyncBase, "Body", [
|
|
250
|
+
textElement(WbxmlCodePage.AirSyncBase, "Type", bodyType),
|
|
251
|
+
textElement(WbxmlCodePage.AirSyncBase, "EstimatedDataSize", String(estimatedDataSize)),
|
|
252
|
+
textElement(WbxmlCodePage.AirSyncBase, "Truncated", truncated ? "1" : "0"),
|
|
253
|
+
textElement(WbxmlCodePage.AirSyncBase, "Data", bodyText),
|
|
254
|
+
]),
|
|
195
255
|
]),
|
|
196
256
|
]),
|
|
197
|
-
|
|
257
|
+
bytes,
|
|
258
|
+
};
|
|
198
259
|
}
|
|
199
|
-
async emptyFolderContents(ctx, emptyEl) {
|
|
260
|
+
async emptyFolderContents(ctx, audit, emptyEl) {
|
|
200
261
|
// Reuses AirSync's own `CollectionId` (the same tag `Sync`/`Fetch` responses already reference a
|
|
201
262
|
// folder by) rather than a page-specific tag - `WbxmlCodePage.ItemOperations` has no `FolderId` token
|
|
202
263
|
// of its own at all, confirmed against its own tag table.
|
|
203
|
-
const
|
|
204
|
-
if (!
|
|
264
|
+
const requestedFolderUid = childText(emptyEl, "CollectionId");
|
|
265
|
+
if (!requestedFolderUid) {
|
|
205
266
|
throw new ApiError(ApiErrors.INVALID_REQUEST, 400, "EmptyFolderContents requires a CollectionId.");
|
|
206
267
|
}
|
|
207
268
|
const optionsEl = findChild(emptyEl, "Options");
|
|
@@ -209,9 +270,16 @@ export class ItemOperationsCommand {
|
|
|
209
270
|
// Documented gap, not silently ignored - see this class's own doc comment.
|
|
210
271
|
throw new ApiError(ApiErrors.INVALID_REQUEST, 400, "DeleteSubFolders is not supported.");
|
|
211
272
|
}
|
|
212
|
-
if (!(await this.aclUtils.hasPermission(ctx.user,
|
|
273
|
+
if (!(await this.aclUtils.hasPermission(ctx.user, requestedFolderUid, ACLAction.DELETE))) {
|
|
213
274
|
throw new ApiError(ApiErrors.AUTH_PERMISSION_FAILURE, 403, ApiErrorMessages.AUTH_PERMISSION_FAILURE);
|
|
214
275
|
}
|
|
276
|
+
// The batch query below uses the stored folder's own uid, never the client's string, which a query parser
|
|
277
|
+
// could otherwise read as an operator (`ne(x)`) and match every other folder's messages with.
|
|
278
|
+
const folder = await this.folderRepo.findOne(requestedFolderUid, { ignoreACL: true });
|
|
279
|
+
if (!folder) {
|
|
280
|
+
throw new ApiError(ApiErrors.NOT_FOUND, 404, ApiErrorMessages.NOT_FOUND);
|
|
281
|
+
}
|
|
282
|
+
const folderUid = folder.uid;
|
|
215
283
|
// Processed in bounded batches rather than one unbounded `find()` - a folder with a very large number
|
|
216
284
|
// of messages would otherwise force the whole set into memory at once. Deletes within a batch still run
|
|
217
285
|
// sequentially, not via `Promise.all` - the SQL backend (`better-sqlite3`) shares one connection per
|
|
@@ -220,21 +288,52 @@ export class ItemOperationsCommand {
|
|
|
220
288
|
// theoretical). Looping (rather than a single pass) still empties the folder completely, however large -
|
|
221
289
|
// a deleted row no longer matches this same `find()` (soft-deleted rows are excluded from an ordinary
|
|
222
290
|
// query by default), so the loop always terminates once truly empty.
|
|
223
|
-
|
|
291
|
+
//
|
|
292
|
+
// Bounded per request (`MAX_EMPTY_FOLDER_BATCHES`), and a message that fails to delete is remembered and skipped:
|
|
293
|
+
// a batch in which nothing new could be deleted ends the loop instead of spinning on the same failing rows.
|
|
294
|
+
const failed = new Set();
|
|
295
|
+
let deleted = 0;
|
|
296
|
+
let complete = false;
|
|
297
|
+
for (let round = 0; round < MAX_EMPTY_FOLDER_BATCHES; round++) {
|
|
224
298
|
const batch = await this.messageRepo.find({ folderUid, limit: this.batchSize }, {
|
|
225
299
|
ignoreACL: true,
|
|
226
300
|
limit: this.batchSize,
|
|
227
301
|
});
|
|
228
|
-
|
|
302
|
+
const pending = batch.filter((message) => !failed.has(message.uid));
|
|
303
|
+
if (pending.length === 0) {
|
|
304
|
+
complete = batch.length === 0;
|
|
229
305
|
break;
|
|
230
306
|
}
|
|
231
|
-
|
|
232
|
-
|
|
307
|
+
const deletedUids = [];
|
|
308
|
+
for (const message of pending) {
|
|
309
|
+
// A message whose send is in flight is skipped, as restapi's delete refuses it (409).
|
|
310
|
+
if (hasLiveSendLease(message)) {
|
|
311
|
+
failed.add(message.uid);
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
try {
|
|
315
|
+
await this.messageRepo.delete(message.uid, { ignoreACL: true, user: ctx.user });
|
|
316
|
+
deletedUids.push(message.uid);
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
failed.add(message.uid);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
deleted += deletedUids.length;
|
|
323
|
+
if (deletedUids.length > 0) {
|
|
324
|
+
// One entry per batch (at most `batchSize` uids), not one per message: emptying a large folder would
|
|
325
|
+
// otherwise write thousands of rows for one request.
|
|
326
|
+
await audit.record({
|
|
327
|
+
action: AuditAction.MESSAGE_DELETE,
|
|
328
|
+
mailboxUid: folder.mailboxUid,
|
|
329
|
+
targetType: "Folder",
|
|
330
|
+
targetUid: folderUid,
|
|
331
|
+
details: { operation: "EmptyFolderContents", count: deletedUids.length, messageUids: deletedUids },
|
|
332
|
+
});
|
|
233
333
|
}
|
|
234
334
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
]);
|
|
335
|
+
const status = complete && failed.size === 0 ? "1" : deleted === 0 ? STATUS_SERVER_ERROR : STATUS_PARTIAL;
|
|
336
|
+
return element(WbxmlCodePage.ItemOperations, "EmptyFolderContents", [textElement(WbxmlCodePage.ItemOperations, "Status", status)]);
|
|
238
337
|
}
|
|
239
338
|
/**
|
|
240
339
|
* Handles `ItemOperations`' `Move`: relocates every `Message` sharing a decoded `ConversationId` to
|
|
@@ -257,10 +356,16 @@ export class ItemOperationsCommand {
|
|
|
257
356
|
!(await this.aclUtils.hasPermission(ctx.user, dstFldId, ACLAction.CREATE))) {
|
|
258
357
|
return this.moveResponse("3");
|
|
259
358
|
}
|
|
260
|
-
|
|
359
|
+
// The ConversationId is the device's echo of `Message.conversationId`, which comes from sender-controlled
|
|
360
|
+
// `References`/`In-Reply-To` headers: looked up bounded (as restapi stores it) as a `ModelUtils.literal()`, so a
|
|
361
|
+
// value shaped like a query operator (`ne(x)`) is compared as itself, and still exact-matched in memory.
|
|
362
|
+
const conversationId = boundIndexedValue(decodeConversationId(conversationIdEl.opaque));
|
|
261
363
|
// Capped rather than an unbounded `find()` - an unusually long-running thread could otherwise return an
|
|
262
364
|
// unbounded number of rows for one request.
|
|
263
|
-
const messages = await this.messageRepo.find({ mailboxUid: ctx.mailboxUid, conversationId, limit: this.batchSize }, {
|
|
365
|
+
const messages = (await this.messageRepo.find({ mailboxUid: ctx.mailboxUid, conversationId: ModelUtils.literal(conversationId), limit: this.batchSize }, {
|
|
366
|
+
ignoreACL: true,
|
|
367
|
+
limit: this.batchSize,
|
|
368
|
+
})).filter((message) => message.conversationId === conversationId && message.mailboxUid === ctx.mailboxUid);
|
|
264
369
|
if (messages.length === 0) {
|
|
265
370
|
return this.moveResponse("3");
|
|
266
371
|
}
|
|
@@ -270,20 +375,36 @@ export class ItemOperationsCommand {
|
|
|
270
375
|
// transaction within a transaction" (confirmed against real SQL test failures, not theoretical) -
|
|
271
376
|
// updates run sequentially in a plain loop instead.
|
|
272
377
|
const permitted = await Promise.all(messages.map((message) => this.aclUtils.hasPermission(ctx.user, message.folderUid, ACLAction.UPDATE)));
|
|
273
|
-
|
|
378
|
+
const folderTypes = new Map();
|
|
379
|
+
let moved = 0;
|
|
380
|
+
let failed = 0;
|
|
274
381
|
for (let i = 0; i < messages.length; i++) {
|
|
382
|
+
const message = messages[i];
|
|
275
383
|
if (!permitted[i]) {
|
|
276
384
|
continue;
|
|
277
385
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
386
|
+
if (!folderTypes.has(message.folderUid)) {
|
|
387
|
+
folderTypes.set(message.folderUid, (await this.folderRepo.findOne(message.folderUid, { ignoreACL: true }))?.type);
|
|
388
|
+
}
|
|
389
|
+
// Outbox, or Drafts for a message that isn't a draft, is refused per message - see `planMessageMove()`.
|
|
390
|
+
const plan = planMessageMove(message, folderTypes.get(message.folderUid), destFolder.type);
|
|
391
|
+
if (!plan.allowed) {
|
|
392
|
+
failed++;
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
try {
|
|
396
|
+
await this.messageRepo.update({ uid: message.uid, version: message.version, folderUid: dstFldId, ...plan.patch }, asEntity(this.messageRepo, message), { ignoreACL: true, user: ctx.user });
|
|
397
|
+
moved++;
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
failed++;
|
|
401
|
+
}
|
|
281
402
|
}
|
|
282
|
-
if (
|
|
403
|
+
if (moved === 0) {
|
|
283
404
|
return this.moveResponse("3");
|
|
284
405
|
}
|
|
285
406
|
return element(WbxmlCodePage.ItemOperations, "Move", [
|
|
286
|
-
textElement(WbxmlCodePage.ItemOperations, "Status", "1"),
|
|
407
|
+
textElement(WbxmlCodePage.ItemOperations, "Status", failed > 0 ? STATUS_PARTIAL : "1"),
|
|
287
408
|
textElement(WbxmlCodePage.ItemOperations, "DstFldId", dstFldId),
|
|
288
409
|
opaqueElement(WbxmlCodePage.ItemOperations, "ConversationId", conversationIdEl.opaque),
|
|
289
410
|
]);
|
|
@@ -291,27 +412,65 @@ export class ItemOperationsCommand {
|
|
|
291
412
|
moveResponse(status) {
|
|
292
413
|
return element(WbxmlCodePage.ItemOperations, "Move", [textElement(WbxmlCodePage.ItemOperations, "Status", status)]);
|
|
293
414
|
}
|
|
294
|
-
async fetchAttachment(ctx, fileReference) {
|
|
415
|
+
async fetchAttachment(ctx, audit, fileReference, remainingBytes) {
|
|
295
416
|
const attachment = await this.attachmentRepo.findOne(fileReference, { ignoreACL: true });
|
|
296
417
|
if (!attachment) {
|
|
297
418
|
throw new ApiError(ApiErrors.NOT_FOUND, 404, ApiErrorMessages.NOT_FOUND);
|
|
298
419
|
}
|
|
299
|
-
|
|
420
|
+
// Access follows the message as it is filed *now*: `Attachment.folderUid` is denormalized and is not
|
|
421
|
+
// updated when the message is moved, so it can point at a folder the message has since left.
|
|
422
|
+
const message = await this.messageRepo.findOne(attachment.messageUid, { ignoreACL: true });
|
|
423
|
+
if (!message) {
|
|
424
|
+
throw new ApiError(ApiErrors.NOT_FOUND, 404, ApiErrorMessages.NOT_FOUND);
|
|
425
|
+
}
|
|
426
|
+
if (!(await this.aclUtils.hasPermission(ctx.user, message.folderUid, ACLAction.READ))) {
|
|
300
427
|
throw new ApiError(ApiErrors.AUTH_PERMISSION_FAILURE, 403, ApiErrorMessages.AUTH_PERMISSION_FAILURE);
|
|
301
428
|
}
|
|
302
|
-
const
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
element(WbxmlCodePage.ItemOperations, "Properties", [
|
|
307
|
-
textElement(WbxmlCodePage.AirSyncBase, "ContentType", attachment.mimeType),
|
|
308
|
-
// "Inline" delivery per MS-ASCMD: binary content is base64-encoded and embedded directly in the
|
|
309
|
-
// WBXML, rather than this library's own opaque/binary element type.
|
|
310
|
-
textElement(WbxmlCodePage.ItemOperations, "Data", content.toString("base64")),
|
|
429
|
+
const tooLarge = () => ({
|
|
430
|
+
element: element(WbxmlCodePage.ItemOperations, "Fetch", [
|
|
431
|
+
textElement(WbxmlCodePage.ItemOperations, "Status", STATUS_TOO_LARGE),
|
|
432
|
+
textElement(WbxmlCodePage.AirSyncBase, "FileReference", fileReference),
|
|
311
433
|
]),
|
|
312
|
-
|
|
434
|
+
bytes: 0,
|
|
435
|
+
});
|
|
436
|
+
// Checked against the recorded size first, so an oversized attachment is never even loaded.
|
|
437
|
+
if (Math.ceil(attachment.sizeBytes / 3) * 4 > remainingBytes) {
|
|
438
|
+
return tooLarge();
|
|
439
|
+
}
|
|
440
|
+
const data = (await this.blobStore.get(attachment.blobKey)).toString("base64");
|
|
441
|
+
if (data.length > remainingBytes) {
|
|
442
|
+
return tooLarge();
|
|
443
|
+
}
|
|
444
|
+
await audit.record({
|
|
445
|
+
action: AuditAction.MESSAGE_CONTENT_ACCESSED,
|
|
446
|
+
mailboxUid: message.mailboxUid,
|
|
447
|
+
targetType: "Attachment",
|
|
448
|
+
targetUid: attachment.uid,
|
|
449
|
+
details: { messageUid: attachment.messageUid, subject: message.subject, filename: attachment.filename },
|
|
450
|
+
});
|
|
451
|
+
return {
|
|
452
|
+
element: element(WbxmlCodePage.ItemOperations, "Fetch", [
|
|
453
|
+
textElement(WbxmlCodePage.ItemOperations, "Status", "1"),
|
|
454
|
+
textElement(WbxmlCodePage.AirSyncBase, "FileReference", fileReference),
|
|
455
|
+
element(WbxmlCodePage.ItemOperations, "Properties", [
|
|
456
|
+
textElement(WbxmlCodePage.AirSyncBase, "ContentType", attachment.mimeType),
|
|
457
|
+
// "Inline" delivery per MS-ASCMD: binary content is base64-encoded and embedded directly in the
|
|
458
|
+
// WBXML, rather than this library's own opaque/binary element type.
|
|
459
|
+
textElement(WbxmlCodePage.ItemOperations, "Data", data),
|
|
460
|
+
]),
|
|
461
|
+
]),
|
|
462
|
+
bytes: data.length,
|
|
463
|
+
};
|
|
313
464
|
}
|
|
314
465
|
}
|
|
466
|
+
__decorate([
|
|
467
|
+
Config(),
|
|
468
|
+
__metadata("design:type", Object)
|
|
469
|
+
], ItemOperationsCommand.prototype, "config", void 0);
|
|
470
|
+
__decorate([
|
|
471
|
+
Logger,
|
|
472
|
+
__metadata("design:type", Object)
|
|
473
|
+
], ItemOperationsCommand.prototype, "logger", void 0);
|
|
315
474
|
__decorate([
|
|
316
475
|
Inject("BlobStore"),
|
|
317
476
|
__metadata("design:type", Object)
|
|
@@ -324,6 +483,10 @@ __decorate([
|
|
|
324
483
|
Config("mail:eas:itemoperations_max_fetch", 25),
|
|
325
484
|
__metadata("design:type", Number)
|
|
326
485
|
], ItemOperationsCommand.prototype, "maxFetchesPerRequest", void 0);
|
|
486
|
+
__decorate([
|
|
487
|
+
Config("mail:eas:itemoperations_max_response_bytes", DEFAULT_MAX_RESPONSE_BYTES),
|
|
488
|
+
__metadata("design:type", Number)
|
|
489
|
+
], ItemOperationsCommand.prototype, "maxResponseBytes", void 0);
|
|
327
490
|
__decorate([
|
|
328
491
|
Config("mail:eas:itemoperations_batch_size", DEFAULT_BATCH_SIZE),
|
|
329
492
|
__metadata("design:type", Number)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemOperationsCommand.js","sourceRoot":"","sources":["../../../src/commands/ItemOperationsCommand.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAiB,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACrH,OAAO,EAAa,oBAAoB,EAA8C,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAqB,MAAM,0BAA0B,CAAC;AACtI,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAElD;;mEAEmE;AACnE,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B;;;0BAG0B;AAC1B,SAAS,YAAY,CAAC,IAAY,EAAE,QAAgB;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,GAAG,EAAE,CAAC;IACV,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,OAAgB,qBAAqB;IAA3C;QACoB,YAAO,GAAG,gBAAgB,CAAC;QAoBnC,yBAAoB,GAAW,EAAE,CAAC;QAGlC,cAAS,GAAW,kBAAkB,CAAC;IA2QnD,CAAC;IAxQgB,AAAN,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,cAAe,CAAC,WAAW,CAAC,SAAS,EAAE;YAChE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YAC3B,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,cAAe,CAAC,WAAW,CAAC,oBAAoB,EAAE;YAC5E,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;YAC5B,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,cAAe,CAAC,WAAW,CAAC,SAAS,EAAE;YACpE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;YAC/B,IAAI,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC;SAC/B,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAsB;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACnF,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,GAAG,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACzF,CAAC;QACD,qGAAqG;QACrG,qGAAqG;QACrG,mGAAmG;QACnG,uGAAuG;QACvG,gGAAgG;QAChG,oEAAoE;QACpE,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9C,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,mCAAmC,IAAI,CAAC,oBAAoB,8BAA8B,CAAC,CAAC;QACnJ,CAAC;QAED,MAAM,gBAAgB,GAAmB,EAAE,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,IAAI,KAAK,KAAK,iBAAiB,EAAE,CAAC;gBAC9B,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,4CAA4C,CAAC,CAAC;YACrG,CAAC;YACD,MAAM,aAAa,GAAuB,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YAC9E,MAAM,QAAQ,GAAuB,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAChD,gBAAgB,CAAC,IAAI,CACjB,aAAa;gBACT,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC;gBAChD,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAC1D,CAAC;QACN,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACV,gBAAgB,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACT,gBAAgB,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,gBAAgB,EAAE;YAC3D,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC;YACxD,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,EAAE,gBAAgB,CAAC;SACtE,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,YAAY,CACtB,GAAsB,EACtB,QAA4B,EAC5B,SAAmC;QAEnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,sDAAsD,CAAC,CAAC;QAC/G,CAAC;QACD,MAAM,OAAO,GAAwB,MAAM,IAAI,CAAC,WAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACrF,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,uBAAuB,EAAE,GAAG,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxG,MAAM,cAAc,GAAG,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjG,4FAA4F;QAC5F,yFAAyF;QACzF,qGAAqG;QACrG,sGAAsG;QACtG,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,IAAI,QAAgB,CAAC;QACrB,IAAI,aAAa,KAAK,GAAG,EAAE,CAAC;YACxB,QAAQ,GAAG,GAAG,CAAC;YACf,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClF,CAAC;aAAM,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACtC,QAAQ,GAAG,GAAG,CAAC;YACf,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3F,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACvC,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,CAAC;QAED,oGAAoG;QACpG,qGAAqG;QACrG,gEAAgE;QAChE,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE9D,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,iBAAiB,GAAG,cAAc,EAAE,CAAC;YACxG,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAClD,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,OAAO,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,OAAO,EAAE;YAClD,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC;YACxD,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;YACpD,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;YACrE,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;YACxD,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,YAAY,EAAE;gBAChD,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE;oBACvC,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC;oBACxD,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,mBAAmB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;oBACtF,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC1E,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC;iBAC3D,CAAC;aACL,CAAC;SACL,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,GAAsB,EAAE,OAAqB;QAC3E,iGAAiG;QACjG,sGAAsG;QACtG,0DAA0D;QAC1D,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,8CAA8C,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,SAAS,IAAI,SAAS,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACxD,2EAA2E;YAC3E,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,GAAG,EAAE,oCAAoC,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,uBAAuB,EAAE,GAAG,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACzG,CAAC;QAED,sGAAsG;QACtG,wGAAwG;QACxG,qGAAqG;QACrG,kGAAkG;QAClG,mGAAmG;QACnG,yGAAyG;QACzG,sGAAsG;QACtG,qEAAqE;QACrE,SAAS,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAS,EAAE;gBACpF,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,SAAS;aACxB,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM;YACV,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAM,IAAI,CAAC,WAAY,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACrF,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,EAAE;YAChE,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC;SAC3D,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,gBAAgB,CAAC,GAAsB,EAAE,MAAoB;QACvE,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,UAAU,GAAuB,MAAM,IAAI,CAAC,UAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrG,IACI,CAAC,UAAU;YACX,UAAU,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU;YACxC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAC7E,CAAC;YACC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,cAAc,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACrE,wGAAwG;QACxG,4CAA4C;QAC5C,MAAM,QAAQ,GAAc,MAAM,IAAI,CAAC,WAAY,CAAC,IAAI,CACpD,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAS,EAC5E,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAC7C,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,8FAA8F;QAC9F,oGAAoG;QACpG,iGAAiG;QACjG,kGAAkG;QAClG,oDAAoD;QACpD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5I,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,SAAS;YACb,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,CAAC,WAAY,CAAC,MAAM,CAC1B,EAAE,GAAG,EAAG,OAAe,CAAC,GAAG,EAAE,OAAO,EAAG,OAAe,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAS,EAC5F,OAAO,EACP,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACtC,CAAC;YACF,QAAQ,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE;YACjD,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC;YACxD,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC;YAC/D,aAAa,CAAC,aAAa,CAAC,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,MAAM,CAAC;SACzF,CAAC,CAAC;IACP,CAAC;IAEO,YAAY,CAAC,MAAc;QAC/B,OAAO,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACxH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,GAAsB,EAAE,aAAqB;QACvE,MAAM,UAAU,GAA2B,MAAM,IAAI,CAAC,cAAe,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClH,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,QAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,uBAAuB,EAAE,GAAG,EAAE,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAU,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE9D,OAAO,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,OAAO,EAAE;YAClD,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC;YACxD,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC;YACtE,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,YAAY,EAAE;gBAChD,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,UAAU,CAAC,QAAQ,CAAC;gBAC1E,gGAAgG;gBAChG,oEAAoE;gBACpE,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aAChF,CAAC;SACL,CAAC,CAAC;IACP,CAAC;CACJ;AApRW;IADP,MAAM,CAAC,WAAW,CAAC;;wDACU;AAGtB;IADP,MAAM,CAAC,QAAQ,CAAC;8BACE,QAAQ;uDAAC;AAGpB;IADP,MAAM,CAAC,mCAAmC,EAAE,EAAE,CAAC;;mEACN;AAGlC;IADP,MAAM,CAAC,oCAAoC,EAAE,kBAAkB,CAAC;;wDAClB;AAGlC;IADZ,IAAI;;;;iDAcJ"}
|
|
1
|
+
{"version":3,"file":"ItemOperationsCommand.js","sourceRoot":"","sources":["../../../src/commands/ItemOperationsCommand.ts"],"names":[],"mappings":"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"}
|