@rapidmx/mapi-plugin 1.0.0-beta.3 → 1.0.0-beta.5
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/BaseMapiEmsmdbRoute.js +229 -37
- package/dist/lib/BaseMapiEmsmdbRoute.js.map +1 -1
- package/dist/lib/MapiSessionManager.js +404 -48
- package/dist/lib/MapiSessionManager.js.map +1 -1
- package/dist/lib/RegexPatternUtils.js +30 -0
- package/dist/lib/RegexPatternUtils.js.map +1 -0
- package/dist/lib/RopDispatcher.js +130 -19
- package/dist/lib/RopDispatcher.js.map +1 -1
- package/dist/lib/codec/AppointmentRecurrence.js +22 -21
- package/dist/lib/codec/AppointmentRecurrence.js.map +1 -1
- package/dist/lib/codec/BufferCursor.js +41 -12
- package/dist/lib/codec/BufferCursor.js.map +1 -1
- package/dist/lib/codec/GlobalObjectId.js +26 -20
- package/dist/lib/codec/GlobalObjectId.js.map +1 -1
- package/dist/lib/codec/MapiTimeZone.js +43 -10
- package/dist/lib/codec/MapiTimeZone.js.map +1 -1
- package/dist/lib/codec/PropertyValue.js +28 -2
- package/dist/lib/codec/PropertyValue.js.map +1 -1
- package/dist/lib/codec/RopBuffer.js +15 -3
- package/dist/lib/codec/RopBuffer.js.map +1 -1
- package/dist/lib/mongo/MapiEmsmdbRouteMongo.js +2 -1
- package/dist/lib/mongo/MapiEmsmdbRouteMongo.js.map +1 -1
- package/dist/lib/nspi/NspiCodec.js +5 -5
- package/dist/lib/nspi/NspiCodec.js.map +1 -1
- package/dist/lib/nspi/NspiGetMatchesHandler.js +14 -14
- package/dist/lib/nspi/NspiGetMatchesHandler.js.map +1 -1
- package/dist/lib/rop/AddressList.js +109 -0
- package/dist/lib/rop/AddressList.js.map +1 -0
- package/dist/lib/rop/CalendarEventTarget.js +7 -4
- package/dist/lib/rop/CalendarEventTarget.js.map +1 -1
- package/dist/lib/rop/ContactTarget.js +2 -6
- package/dist/lib/rop/ContactTarget.js.map +1 -1
- package/dist/lib/rop/ContentsTable.js +60 -0
- package/dist/lib/rop/ContentsTable.js.map +1 -0
- package/dist/lib/rop/ExecuteBudget.js +82 -0
- package/dist/lib/rop/ExecuteBudget.js.map +1 -0
- package/dist/lib/rop/FastTransferStream.js +99 -2
- package/dist/lib/rop/FastTransferStream.js.map +1 -1
- package/dist/lib/rop/FolderTarget.js +13 -6
- package/dist/lib/rop/FolderTarget.js.map +1 -1
- package/dist/lib/rop/HandleDataCache.js +412 -0
- package/dist/lib/rop/HandleDataCache.js.map +1 -0
- package/dist/lib/rop/MeetingMessageClassHandler.js +194 -48
- package/dist/lib/rop/MeetingMessageClassHandler.js.map +1 -1
- package/dist/lib/rop/MessageBodyStream.js +33 -7
- package/dist/lib/rop/MessageBodyStream.js.map +1 -1
- package/dist/lib/rop/MessageTarget.js +17 -4
- package/dist/lib/rop/MessageTarget.js.map +1 -1
- package/dist/lib/rop/NamedPropertyRegistry.js +8 -5
- package/dist/lib/rop/NamedPropertyRegistry.js.map +1 -1
- package/dist/lib/rop/PropertyResolvers.js +3 -1
- package/dist/lib/rop/PropertyResolvers.js.map +1 -1
- package/dist/lib/rop/RepoPaging.js +54 -0
- package/dist/lib/rop/RepoPaging.js.map +1 -0
- package/dist/lib/rop/RestapiRules.js +52 -0
- package/dist/lib/rop/RestapiRules.js.map +1 -0
- package/dist/lib/rop/RopCreateMessageHandler.js +4 -2
- package/dist/lib/rop/RopCreateMessageHandler.js.map +1 -1
- package/dist/lib/rop/RopDeleteFolderHandler.js +118 -77
- package/dist/lib/rop/RopDeleteFolderHandler.js.map +1 -1
- package/dist/lib/rop/RopDeleteMessagesHandler.js +26 -1
- package/dist/lib/rop/RopDeleteMessagesHandler.js.map +1 -1
- package/dist/lib/rop/RopFastTransferSourceCopyPropertiesHandler.js +14 -14
- package/dist/lib/rop/RopFastTransferSourceCopyPropertiesHandler.js.map +1 -1
- package/dist/lib/rop/RopFastTransferSourceCopyToHandler.js +13 -14
- package/dist/lib/rop/RopFastTransferSourceCopyToHandler.js.map +1 -1
- package/dist/lib/rop/RopFastTransferSourceGetBufferHandler.js +33 -32
- package/dist/lib/rop/RopFastTransferSourceGetBufferHandler.js.map +1 -1
- package/dist/lib/rop/RopGetContentsTableHandler.js +17 -38
- package/dist/lib/rop/RopGetContentsTableHandler.js.map +1 -1
- package/dist/lib/rop/RopGetHierarchyTableHandler.js +4 -2
- package/dist/lib/rop/RopGetHierarchyTableHandler.js.map +1 -1
- package/dist/lib/rop/RopGetPropertiesSpecificHandler.js +6 -8
- package/dist/lib/rop/RopGetPropertiesSpecificHandler.js.map +1 -1
- package/dist/lib/rop/RopHandler.js +5 -1
- package/dist/lib/rop/RopHandler.js.map +1 -1
- package/dist/lib/rop/RopLogonHandler.js +5 -2
- package/dist/lib/rop/RopLogonHandler.js.map +1 -1
- package/dist/lib/rop/RopOpenFolderHandler.js +3 -1
- package/dist/lib/rop/RopOpenFolderHandler.js.map +1 -1
- package/dist/lib/rop/RopOpenMessageHandler.js +3 -1
- package/dist/lib/rop/RopOpenMessageHandler.js.map +1 -1
- package/dist/lib/rop/RopOpenStreamHandler.js +11 -8
- package/dist/lib/rop/RopOpenStreamHandler.js.map +1 -1
- package/dist/lib/rop/RopQueryRowsHandler.js +31 -5
- package/dist/lib/rop/RopQueryRowsHandler.js.map +1 -1
- package/dist/lib/rop/RopReadStreamHandler.js +22 -4
- package/dist/lib/rop/RopReadStreamHandler.js.map +1 -1
- package/dist/lib/rop/RopReleaseHandler.js +4 -1
- package/dist/lib/rop/RopReleaseHandler.js.map +1 -1
- package/dist/lib/rop/RopSaveChangesMessageHandler.js +66 -7
- package/dist/lib/rop/RopSaveChangesMessageHandler.js.map +1 -1
- package/dist/lib/rop/RopSetColumnsHandler.js +6 -8
- package/dist/lib/rop/RopSetColumnsHandler.js.map +1 -1
- package/dist/lib/rop/RopSetPropertiesHandler.js +23 -12
- package/dist/lib/rop/RopSetPropertiesHandler.js.map +1 -1
- package/dist/lib/rop/RopSubmitMessageHandler.js +148 -120
- package/dist/lib/rop/RopSubmitMessageHandler.js.map +1 -1
- package/dist/lib/rop/RopWriteStreamHandler.js +37 -10
- package/dist/lib/rop/RopWriteStreamHandler.js.map +1 -1
- package/dist/lib/rop/TaskTarget.js +2 -6
- package/dist/lib/rop/TaskTarget.js.map +1 -1
- package/dist/lib/rop/TransportSend.js +16 -0
- package/dist/lib/rop/TransportSend.js.map +1 -0
- package/dist/lib/sql/MapiEmsmdbRouteSQL.js +2 -1
- package/dist/lib/sql/MapiEmsmdbRouteSQL.js.map +1 -1
- package/dist/types/BaseMapiEmsmdbRoute.d.ts +59 -2
- package/dist/types/MapiSessionManager.d.ts +218 -63
- package/dist/types/RegexPatternUtils.d.ts +14 -0
- package/dist/types/RopDispatcher.d.ts +47 -11
- package/dist/types/codec/BufferCursor.d.ts +14 -0
- package/dist/types/codec/GlobalObjectId.d.ts +9 -5
- package/dist/types/codec/PropertyValue.d.ts +10 -0
- package/dist/types/codec/RopBuffer.d.ts +7 -0
- package/dist/types/mongo/MapiEmsmdbRouteMongo.d.ts +1 -0
- package/dist/types/nspi/NspiGetMatchesHandler.d.ts +2 -0
- package/dist/types/rop/AddressList.d.ts +48 -0
- package/dist/types/rop/CalendarEventTarget.d.ts +7 -3
- package/dist/types/rop/ContactTarget.d.ts +3 -3
- package/dist/types/rop/ContentsTable.d.ts +16 -0
- package/dist/types/rop/ExecuteBudget.d.ts +48 -0
- package/dist/types/rop/FastTransferStream.d.ts +41 -2
- package/dist/types/rop/FolderTarget.d.ts +3 -2
- package/dist/types/rop/HandleDataCache.d.ts +145 -0
- package/dist/types/rop/MeetingMessageClassHandler.d.ts +23 -29
- package/dist/types/rop/MessageBodyStream.d.ts +16 -7
- package/dist/types/rop/MessageTarget.d.ts +10 -3
- package/dist/types/rop/NamedPropertyRegistry.d.ts +6 -2
- package/dist/types/rop/PropertyResolvers.d.ts +1 -1
- package/dist/types/rop/RepoPaging.d.ts +30 -0
- package/dist/types/rop/RestapiRules.d.ts +32 -0
- package/dist/types/rop/RopCreateMessageHandler.d.ts +1 -0
- package/dist/types/rop/RopDeleteFolderHandler.d.ts +36 -21
- package/dist/types/rop/RopDeleteMessagesHandler.d.ts +7 -0
- package/dist/types/rop/RopFastTransferSourceCopyPropertiesHandler.d.ts +1 -0
- package/dist/types/rop/RopFastTransferSourceCopyToHandler.d.ts +1 -0
- package/dist/types/rop/RopFastTransferSourceGetBufferHandler.d.ts +10 -11
- package/dist/types/rop/RopGetContentsTableHandler.d.ts +7 -13
- package/dist/types/rop/RopGetHierarchyTableHandler.d.ts +1 -0
- package/dist/types/rop/RopHandler.d.ts +40 -1
- package/dist/types/rop/RopOpenFolderHandler.d.ts +1 -0
- package/dist/types/rop/RopOpenMessageHandler.d.ts +1 -0
- package/dist/types/rop/RopOpenStreamHandler.d.ts +1 -0
- package/dist/types/rop/RopQueryRowsHandler.d.ts +3 -0
- package/dist/types/rop/RopReadStreamHandler.d.ts +3 -1
- package/dist/types/rop/RopReleaseHandler.d.ts +1 -0
- package/dist/types/rop/RopSaveChangesMessageHandler.d.ts +16 -1
- package/dist/types/rop/RopSubmitMessageHandler.d.ts +33 -23
- package/dist/types/rop/RopWriteStreamHandler.d.ts +18 -8
- package/dist/types/rop/TaskTarget.d.ts +3 -3
- package/dist/types/rop/TransportSend.d.ts +10 -0
- package/dist/types/sql/MapiEmsmdbRouteSQL.d.ts +1 -0
- package/package.json +3 -3
|
@@ -2,33 +2,144 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import { BufferReader, BufferWriter } from "./codec/BufferCursor.js";
|
|
5
|
+
import { BufferReader, BufferWriter, DecodeError } from "./codec/BufferCursor.js";
|
|
6
|
+
import { ExecuteBudget, WorkBudgetExceededError } from "./rop/ExecuteBudget.js";
|
|
7
|
+
/** The most ROPs processed from one `Execute` request. A real client batches far fewer; anything past this is
|
|
8
|
+
* left unprocessed. */
|
|
9
|
+
export const MAX_ROPS_PER_EXECUTE = 1024;
|
|
10
|
+
/** The largest `RopsList` a response can carry: `RopSize` is a 16-bit count that includes its own 2 bytes. */
|
|
11
|
+
export const MAX_ROPS_LIST_BYTES = 0xffff - 2;
|
|
12
|
+
/** `RopBufferTooSmall`'s `RopId` (`[MS-OXCROPS]` §2.2.15.1). */
|
|
13
|
+
export const ROP_ID_BUFFER_TOO_SMALL = 0xff;
|
|
14
|
+
/** `MAPI_E_CALL_FAILED`: a ROP failed while running (a database error, undecodable stored data, ...). */
|
|
15
|
+
export const ERROR_CALL_FAILED = 0x80004005;
|
|
16
|
+
/** `MAPI_E_TOO_COMPLEX`: the ROP would have gone past this request's `ExecuteBudget`. */
|
|
17
|
+
export const ERROR_TOO_COMPLEX = 0x80040117;
|
|
18
|
+
/** `RopBufferTooSmall`'s fixed fields: `RopId` and `SizeNeeded`. */
|
|
19
|
+
const BUFFER_TOO_SMALL_HEADER_BYTES = 3;
|
|
20
|
+
/** Thrown by `dispatchRops`, before any ROP runs, when the room for responses can't even hold a `RopBufferTooSmall`
|
|
21
|
+
* carrying the whole request. The route answers the `Execute` with `ecBufferTooSmall` ([MS-OXCRPC]). No ROP has run. */
|
|
22
|
+
export class ExecuteBufferTooSmallError extends Error {
|
|
23
|
+
constructor() {
|
|
24
|
+
super("Execute: MaxRopOut is too small for even a RopBufferTooSmall response.");
|
|
25
|
+
this.name = "ExecuteBufferTooSmallError";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Wraps `reader` so that running out of request bytes raises a `DecodeError` (a malformed request) rather than a
|
|
29
|
+
* plain `RangeError`, which a handler may also raise while working on data it read from somewhere else. */
|
|
30
|
+
function decodingReader(reader) {
|
|
31
|
+
return new Proxy(reader, {
|
|
32
|
+
get(target, property) {
|
|
33
|
+
const value = Reflect.get(target, property, target);
|
|
34
|
+
if (typeof value !== "function") {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
return (...args) => {
|
|
38
|
+
try {
|
|
39
|
+
return value.apply(target, args);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
throw err instanceof RangeError && !(err instanceof DecodeError) ? new DecodeError(err.message) : err;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
}
|
|
6
48
|
/**
|
|
7
|
-
* Walks a decoded `RopBuffer`'s `ropsList` blob, dispatching each contained ROP - identified by its own
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
49
|
+
* Walks a decoded `RopBuffer`'s `ropsList` blob, dispatching each contained ROP - identified by its own leading
|
|
50
|
+
* `RopId` byte - to the matching registered handler in turn, collecting every response into one output buffer.
|
|
51
|
+
* Deliberately ROP-agnostic: it knows nothing about any specific ROP's own fields, only how to find the *next* one,
|
|
52
|
+
* via the handler's own advanced `reader` position once `handle()` returns - see `RopBuffer.ts`'s doc comment for
|
|
53
|
+
* why a fully generic split isn't possible for this wire format.
|
|
12
54
|
*
|
|
13
|
-
* An unrecognized `RopId
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
55
|
+
* - **Malformed requests.** An unrecognized `RopId`, or a ROP whose bytes run out or can't be sized (a
|
|
56
|
+
* `DecodeError`), throws a `DecodeError`: nothing after it can be located, so the route answers 400.
|
|
57
|
+
* - **A failing ROP.** Any other error thrown by a handler fails just that ROP: its partial output is dropped, a
|
|
58
|
+
* failure response (`RopId`, the handle index it echoes, `ReturnValue` `MAPI_E_CALL_FAILED` or, past the
|
|
59
|
+
* `ExecuteBudget`, `MAPI_E_TOO_COMPLEX`) takes its place, and the following ROPs still run. The handler has
|
|
60
|
+
* already read its whole request by the time it does work that can fail, so the next ROP is still where the
|
|
61
|
+
* reader points.
|
|
62
|
+
* - **Output space.** Room for a `RopBufferTooSmall` covering the next ROP and everything after it (3 bytes plus
|
|
63
|
+
* those request bytes) is always kept free. `context.ropOutputRemaining` tells each handler the room left *after*
|
|
64
|
+
* that reserve (computed from where the reader stands, so once a handler has read its request it excludes the
|
|
65
|
+
* handler's own bytes). A response that doesn't leave the reserve is replaced by `RopBufferTooSmall` (`SizeNeeded`
|
|
66
|
+
* plus the unprocessed request bytes, from this ROP on, for the client to resend) and processing stops; that always
|
|
67
|
+
* fits, because the reserve for this ROP was kept by the one before it. Handlers that change state by how much they
|
|
68
|
+
* return (`RopQueryRows`, `RopReadStream`, `RopFastTransferSourceGetBuffer`) size their response to the room, so they
|
|
69
|
+
* are never replaced after moving a cursor. Only when the request as a whole can't be covered by a
|
|
70
|
+
* `RopBufferTooSmall` is `ExecuteBufferTooSmallError` thrown, before anything runs, and the route answers the
|
|
71
|
+
* `Execute` with `ecBufferTooSmall` ([MS-OXCRPC]). So a failed `Execute` never follows state already changed and
|
|
72
|
+
* saved, which a retry would skip past.
|
|
18
73
|
*
|
|
19
74
|
* @author Jean-Philippe Steinmetz
|
|
20
75
|
*/
|
|
21
|
-
export async function dispatchRops(ropsList, handlers, context) {
|
|
22
|
-
const
|
|
76
|
+
export async function dispatchRops(ropsList, handlers, context, options = {}) {
|
|
77
|
+
const maxRops = options.maxRops ?? MAX_ROPS_PER_EXECUTE;
|
|
78
|
+
const maxOutputBytes = Math.min(options.maxOutputBytes ?? MAX_ROPS_LIST_BYTES, MAX_ROPS_LIST_BYTES);
|
|
79
|
+
const reader = decodingReader(new BufferReader(ropsList));
|
|
23
80
|
const writer = new BufferWriter();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
81
|
+
context.budget ?? (context.budget = new ExecuteBudget());
|
|
82
|
+
/** Room for a RopBufferTooSmall resending the request from `offset` on (nothing when there is nothing left). */
|
|
83
|
+
const reserveFrom = (offset) => (offset < ropsList.length ? BUFFER_TOO_SMALL_HEADER_BYTES + ropsList.length - offset : 0);
|
|
84
|
+
if (reserveFrom(0) > maxOutputBytes) {
|
|
85
|
+
throw new ExecuteBufferTooSmallError();
|
|
86
|
+
}
|
|
87
|
+
let remaining = maxOutputBytes;
|
|
88
|
+
Object.defineProperty(context, "ropOutputRemaining", {
|
|
89
|
+
configurable: true,
|
|
90
|
+
enumerable: true,
|
|
91
|
+
get: () => Math.max(0, remaining - reserveFrom(reader.position)),
|
|
92
|
+
});
|
|
93
|
+
let processed = 0;
|
|
94
|
+
try {
|
|
95
|
+
// Stops after `maxRops`, so one Execute can't queue unbounded work.
|
|
96
|
+
while (reader.hasMore() && processed++ < maxRops) {
|
|
97
|
+
const start = reader.position;
|
|
98
|
+
const ropId = reader.readUInt8();
|
|
99
|
+
const handler = handlers.get(ropId);
|
|
100
|
+
if (!handler) {
|
|
101
|
+
throw new DecodeError(`RopDispatcher: unsupported RopId 0x${ropId.toString(16)}.`);
|
|
102
|
+
}
|
|
103
|
+
remaining = maxOutputBytes - writer.length;
|
|
104
|
+
let response;
|
|
105
|
+
try {
|
|
106
|
+
const ropWriter = new BufferWriter();
|
|
107
|
+
await handler.handle(reader, ropWriter, context);
|
|
108
|
+
response = ropWriter.toBuffer();
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (err instanceof DecodeError) {
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
response = failureResponse(handler, ropsList, start, err instanceof WorkBudgetExceededError ? ERROR_TOO_COMPLEX : ERROR_CALL_FAILED);
|
|
115
|
+
}
|
|
116
|
+
if (response.length + reserveFrom(reader.position) > remaining) {
|
|
117
|
+
// The reserve kept for this ROP guarantees this fits.
|
|
118
|
+
writer
|
|
119
|
+
.writeUInt8(ROP_ID_BUFFER_TOO_SMALL)
|
|
120
|
+
.writeUInt16LE(Math.min(response.length, 0xffff)) // SizeNeeded
|
|
121
|
+
.writeBytes(ropsList.subarray(start)); // RequestBuffers
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
writer.writeBytes(response);
|
|
29
125
|
}
|
|
30
|
-
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
delete context.ropOutputRemaining;
|
|
31
129
|
}
|
|
32
130
|
return writer.toBuffer();
|
|
33
131
|
}
|
|
132
|
+
/** The response a ROP gets when its handler throws: `RopId`, the handle index its responses echo, `ReturnValue`,
|
|
133
|
+
* then any always-present fields zeroed. Nothing at all for a ROP that never responds. */
|
|
134
|
+
function failureResponse(handler, ropsList, start, returnValue) {
|
|
135
|
+
if (handler.hasNoResponse) {
|
|
136
|
+
return Buffer.alloc(0);
|
|
137
|
+
}
|
|
138
|
+
return new BufferWriter()
|
|
139
|
+
.writeUInt8(handler.ropId)
|
|
140
|
+
.writeUInt8(ropsList[start + (handler.responseHandleIndexOffset ?? 2)] ?? 0)
|
|
141
|
+
.writeUInt32LE(returnValue)
|
|
142
|
+
.writeBytes(Buffer.alloc(handler.failureTailBytes ?? 0))
|
|
143
|
+
.toBuffer();
|
|
144
|
+
}
|
|
34
145
|
//# sourceMappingURL=RopDispatcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RopDispatcher.js","sourceRoot":"","sources":["../../src/RopDispatcher.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"RopDispatcher.js","sourceRoot":"","sources":["../../src/RopDispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,9 @@ import { RecurrenceFrequency } from "@rapidmx/restapi";
|
|
|
15
15
|
* accepted - `MonthNth`/`MonthEnd`/Hijri patterns have no representation in `RecurrenceRule` (no ordinal-
|
|
16
16
|
* weekday field) and decoding one throws a clear, documented error rather than silently guessing.
|
|
17
17
|
* - `DeletedInstanceCount`/`ModifiedInstanceCount` (recurrence exceptions) and the outer structure's
|
|
18
|
-
* `ExceptionCount` are always written as `0
|
|
19
|
-
*
|
|
18
|
+
* `ExceptionCount` are always written as `0`. Decoding reads the deleted occurrences into `RecurrenceRule.exceptions`
|
|
19
|
+
* and ignores the details of modified ones (`ExceptionInfo`), which `RecurrenceRule` can't hold, instead of failing
|
|
20
|
+
* the whole save.
|
|
20
21
|
* - A `YEARLY` rule with `interval > 1` ("every N years", N>1) is encoded as `RecurFrequency=Monthly` with
|
|
21
22
|
* `Period=12*N`, per the spec's own stated rule that "a yearly recurrence pattern is just a monthly pattern
|
|
22
23
|
* that occurs every 12 months" (a plain `RecurFrequency=Yearly` value's `Period` MUST be exactly 12).
|
|
@@ -206,6 +207,14 @@ export function encodeAppointmentRecurrence(rule, startDate, endDate) {
|
|
|
206
207
|
writer.writeUInt32LE(0); // ReservedBlock2Size
|
|
207
208
|
return writer.toBuffer();
|
|
208
209
|
}
|
|
210
|
+
/** Reads a `DeletedInstanceCount`/`ModifiedInstanceCount`-style count followed by that many 4-byte dates. */
|
|
211
|
+
function readDateList(reader) {
|
|
212
|
+
const count = reader.readUInt32LE();
|
|
213
|
+
if (count * 4 > reader.remaining) {
|
|
214
|
+
throw new RangeError(`AppointmentRecurrence: an instance date count of ${count} is larger than the pattern.`);
|
|
215
|
+
}
|
|
216
|
+
return Array.from({ length: count }, () => reader.readUInt32LE());
|
|
217
|
+
}
|
|
209
218
|
/**
|
|
210
219
|
* Decodes an `AppointmentRecurrencePattern` blob (read from `reader`'s current position) back into a
|
|
211
220
|
* `RecurrenceRule`. Throws a clear error for any pattern this pragmatic subset can't represent (see this
|
|
@@ -270,14 +279,10 @@ export function decodeAppointmentRecurrence(reader) {
|
|
|
270
279
|
const endType = reader.readUInt32LE();
|
|
271
280
|
const occurrenceCount = reader.readUInt32LE();
|
|
272
281
|
reader.readUInt32LE(); // FirstDOW
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
const modifiedInstanceCount = reader.readUInt32LE();
|
|
278
|
-
if (modifiedInstanceCount > 0) {
|
|
279
|
-
throw new Error("AppointmentRecurrence: recurrence exceptions (ModifiedInstanceCount > 0) are not supported");
|
|
280
|
-
}
|
|
282
|
+
// DeletedInstanceDates holds the original dates of every deleted *or* modified occurrence; ModifiedInstanceDates
|
|
283
|
+
// the (new) dates of the modified ones. An occurrence deleted outright is in the first list only.
|
|
284
|
+
const deletedDates = readDateList(reader);
|
|
285
|
+
const modifiedDates = new Set(readDateList(reader));
|
|
281
286
|
reader.readUInt32LE(); // StartDate
|
|
282
287
|
const endDateMinutes = reader.readUInt32LE();
|
|
283
288
|
let until;
|
|
@@ -290,16 +295,11 @@ export function decodeAppointmentRecurrence(reader) {
|
|
|
290
295
|
}
|
|
291
296
|
reader.readUInt32LE(); // ReaderVersion2
|
|
292
297
|
reader.readUInt32LE(); // WriterVersion2
|
|
293
|
-
reader.readUInt32LE();
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
299
|
-
const reservedBlock1Size = reader.readUInt32LE();
|
|
300
|
-
reader.readBytes(reservedBlock1Size);
|
|
301
|
-
const reservedBlock2Size = reader.readUInt32LE();
|
|
302
|
-
reader.readBytes(reservedBlock2Size);
|
|
298
|
+
const startTimeOffset = reader.readUInt32LE();
|
|
299
|
+
// Everything after this (ExceptionCount, the variable-length ExceptionInfo/ExtendedException blocks for modified
|
|
300
|
+
// occurrences, and the reserved blocks) describes per-occurrence changes RecurrenceRule has no field for, so it is
|
|
301
|
+
// not read. A modified occurrence that stayed on its day remains an ordinary occurrence; one moved to another day
|
|
302
|
+
// only drops out of its original day, since its new time has nowhere to go.
|
|
303
303
|
return {
|
|
304
304
|
freq,
|
|
305
305
|
interval,
|
|
@@ -308,7 +308,8 @@ export function decodeAppointmentRecurrence(reader) {
|
|
|
308
308
|
...(byMonth ? { byMonth } : {}),
|
|
309
309
|
...(until ? { until } : {}),
|
|
310
310
|
...(count != null ? { count } : {}),
|
|
311
|
-
|
|
311
|
+
// A deleted occurrence's date is midnight (minutes since 1601); its start is that plus the series' start time.
|
|
312
|
+
exceptions: deletedDates.filter((minutes) => !modifiedDates.has(minutes)).map((minutes) => minutesSince1601ToDate(minutes + startTimeOffset)),
|
|
312
313
|
};
|
|
313
314
|
}
|
|
314
315
|
//# sourceMappingURL=AppointmentRecurrence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppointmentRecurrence.js","sourceRoot":"","sources":["../../../src/codec/AppointmentRecurrence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AppointmentRecurrence.js","sourceRoot":"","sources":["../../../src/codec/AppointmentRecurrence.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,17 @@
|
|
|
19
19
|
*
|
|
20
20
|
* @author Jean-Philippe Steinmetz
|
|
21
21
|
*/
|
|
22
|
+
/**
|
|
23
|
+
* A request that can't be decoded: truncated, or carrying a value (such as an unknown property type) whose wire
|
|
24
|
+
* size can't be determined. `RopDispatcher` answers the whole `Execute` with a 400 for one of these, since the bytes
|
|
25
|
+
* of every later ROP can no longer be located.
|
|
26
|
+
*/
|
|
27
|
+
export class DecodeError extends RangeError {
|
|
28
|
+
constructor(message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = "DecodeError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
22
33
|
export class BufferReader {
|
|
23
34
|
constructor(buffer, offset = 0) {
|
|
24
35
|
this.buffer = buffer;
|
|
@@ -33,6 +44,13 @@ export class BufferReader {
|
|
|
33
44
|
hasMore() {
|
|
34
45
|
return this.offset < this.buffer.length;
|
|
35
46
|
}
|
|
47
|
+
/** Moves to `position` (backwards or forwards). Throws a `RangeError` for a position outside the buffer. */
|
|
48
|
+
seek(position) {
|
|
49
|
+
if (position < 0 || position > this.buffer.length) {
|
|
50
|
+
throw new RangeError(`BufferReader.seek(${position}): out of range (buffer length ${this.buffer.length}).`);
|
|
51
|
+
}
|
|
52
|
+
this.offset = position;
|
|
53
|
+
}
|
|
36
54
|
readUInt8() {
|
|
37
55
|
const value = this.buffer.readUInt8(this.offset);
|
|
38
56
|
this.offset += 1;
|
|
@@ -139,71 +157,82 @@ export class BufferReader {
|
|
|
139
157
|
export class BufferWriter {
|
|
140
158
|
constructor() {
|
|
141
159
|
this.chunks = [];
|
|
160
|
+
this.byteLength = 0;
|
|
161
|
+
}
|
|
162
|
+
/** The number of bytes written so far. */
|
|
163
|
+
get length() {
|
|
164
|
+
return this.byteLength;
|
|
165
|
+
}
|
|
166
|
+
push(...buffers) {
|
|
167
|
+
for (const buffer of buffers) {
|
|
168
|
+
this.chunks.push(buffer);
|
|
169
|
+
this.byteLength += buffer.length;
|
|
170
|
+
}
|
|
142
171
|
}
|
|
143
172
|
writeUInt8(value) {
|
|
144
173
|
const buf = Buffer.alloc(1);
|
|
145
174
|
buf.writeUInt8(value, 0);
|
|
146
|
-
this.
|
|
175
|
+
this.push(buf);
|
|
147
176
|
return this;
|
|
148
177
|
}
|
|
149
178
|
writeInt16LE(value) {
|
|
150
179
|
const buf = Buffer.alloc(2);
|
|
151
180
|
buf.writeInt16LE(value, 0);
|
|
152
|
-
this.
|
|
181
|
+
this.push(buf);
|
|
153
182
|
return this;
|
|
154
183
|
}
|
|
155
184
|
writeUInt16LE(value) {
|
|
156
185
|
const buf = Buffer.alloc(2);
|
|
157
186
|
buf.writeUInt16LE(value, 0);
|
|
158
|
-
this.
|
|
187
|
+
this.push(buf);
|
|
159
188
|
return this;
|
|
160
189
|
}
|
|
161
190
|
writeInt32LE(value) {
|
|
162
191
|
const buf = Buffer.alloc(4);
|
|
163
192
|
buf.writeInt32LE(value, 0);
|
|
164
|
-
this.
|
|
193
|
+
this.push(buf);
|
|
165
194
|
return this;
|
|
166
195
|
}
|
|
167
196
|
writeUInt32LE(value) {
|
|
168
197
|
const buf = Buffer.alloc(4);
|
|
169
198
|
buf.writeUInt32LE(value, 0);
|
|
170
|
-
this.
|
|
199
|
+
this.push(buf);
|
|
171
200
|
return this;
|
|
172
201
|
}
|
|
173
202
|
writeFloatLE(value) {
|
|
174
203
|
const buf = Buffer.alloc(4);
|
|
175
204
|
buf.writeFloatLE(value, 0);
|
|
176
|
-
this.
|
|
205
|
+
this.push(buf);
|
|
177
206
|
return this;
|
|
178
207
|
}
|
|
179
208
|
writeDoubleLE(value) {
|
|
180
209
|
const buf = Buffer.alloc(8);
|
|
181
210
|
buf.writeDoubleLE(value, 0);
|
|
182
|
-
this.
|
|
211
|
+
this.push(buf);
|
|
183
212
|
return this;
|
|
184
213
|
}
|
|
185
214
|
writeBigInt64LE(value) {
|
|
186
215
|
const buf = Buffer.alloc(8);
|
|
187
216
|
buf.writeBigInt64LE(value, 0);
|
|
188
|
-
this.
|
|
217
|
+
this.push(buf);
|
|
189
218
|
return this;
|
|
190
219
|
}
|
|
191
220
|
writeBigUInt64LE(value) {
|
|
192
221
|
const buf = Buffer.alloc(8);
|
|
193
222
|
buf.writeBigUInt64LE(value, 0);
|
|
194
|
-
this.
|
|
223
|
+
this.push(buf);
|
|
195
224
|
return this;
|
|
196
225
|
}
|
|
197
226
|
writeBytes(value) {
|
|
198
|
-
this.
|
|
227
|
+
this.push(value);
|
|
199
228
|
return this;
|
|
200
229
|
}
|
|
201
230
|
writeNullTerminatedUtf16LE(value) {
|
|
202
|
-
this.
|
|
231
|
+
this.push(Buffer.from(value, "utf16le"), Buffer.from([0x00, 0x00]));
|
|
203
232
|
return this;
|
|
204
233
|
}
|
|
205
234
|
writeNullTerminatedString8(value) {
|
|
206
|
-
this.
|
|
235
|
+
this.push(Buffer.from(value, "utf-8"), Buffer.from([0x00]));
|
|
207
236
|
return this;
|
|
208
237
|
}
|
|
209
238
|
toBuffer() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BufferCursor.js","sourceRoot":"","sources":["../../../src/codec/BufferCursor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BufferCursor.js","sourceRoot":"","sources":["../../../src/codec/BufferCursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,16 +18,15 @@ import { dateToFiletime } from "./PropertyValue.js";
|
|
|
18
18
|
* and the equivalent `[MS-OXCICAL]` UID-conversion algorithm document: `Data` = the 8-byte ASCII marker
|
|
19
19
|
* `"vCal-Uid"`, then a 4-byte version (`01 00 00 00`), then the UID's own bytes, then one trailing `NUL` -
|
|
20
20
|
* **not** the bare UID bytes this codec originally assumed. `decodeGlobalObjectId` recognizes and unwraps this
|
|
21
|
-
* form (falling back to
|
|
22
|
-
* `OutlookID` - a native-Exchange-generated `GlobalObjectId
|
|
23
|
-
*
|
|
21
|
+
* form (falling back to the hex form below only when the `vCal-Uid` marker isn't present, i.e. an
|
|
22
|
+
* `OutlookID` - a native-Exchange-generated `GlobalObjectId`, decoded to the hex form `[MS-OXCICAL]` gives its
|
|
23
|
+
* iCalendar UID). `encodeGlobalObjectId` now builds the same `VCALID` shape, both so
|
|
24
24
|
* a round trip through this codec models the real wire form and because `MeetingMessageClassHandler.test.ts`'s
|
|
25
25
|
* own test doubles need a realistic fixture to encode.
|
|
26
26
|
*
|
|
27
|
-
* **Pragmatic scope**: `YH`/`YL`/`M`/`D` (
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* subset (see `AppointmentRecurrence.ts`'s own doc comment), so there is nothing to source a real value from.
|
|
27
|
+
* **Pragmatic scope**: `YH`/`YL`/`M`/`D` (set when a `GlobalObjectId` identifies a single occurrence of a recurring
|
|
28
|
+
* series) are always encoded as `0` ("not an exception"); `globalObjectIdInstanceDate` reads them from a client's
|
|
29
|
+
* meeting response.
|
|
31
30
|
* `PidLidCleanGlobalObjectId` (the sibling property real Outlook also sets, identical structure but with
|
|
32
31
|
* `YH`/`YL`/`M`/`D` always zeroed) is therefore byte-identical to this codec's own output and needs no separate
|
|
33
32
|
* implementation - the same value serves both properties.
|
|
@@ -63,23 +62,21 @@ export function encodeGlobalObjectId(icalUid, at) {
|
|
|
63
62
|
writer.writeBytes(data);
|
|
64
63
|
return writer.toBuffer();
|
|
65
64
|
}
|
|
66
|
-
/** Decodes a `GlobalObjectId` BLOB (read from `reader`'s current position) back into the `icalUid` it
|
|
67
|
-
*
|
|
68
|
-
* `
|
|
69
|
-
*
|
|
70
|
-
*
|
|
65
|
+
/** Decodes a `GlobalObjectId` BLOB (read from `reader`'s current position) back into the `icalUid` it stands for.
|
|
66
|
+
* A `VCALID` (see this file's own doc comment) yields the UID it wraps. Anything else is a native `OutlookID`,
|
|
67
|
+
* whose `Data` is binary, not text: per `[MS-OXCICAL]`'s UID conversion, the iCalendar UID of such an object is the
|
|
68
|
+
* uppercase hex of the whole `GlobalObjectId` with the instance date (`YH`/`YL`/`M`/`D`, bytes 16-19) zeroed, so
|
|
69
|
+
* that is what is returned (compare it case-insensitively). Throws if `ByteArrayID` doesn't match the spec's own
|
|
70
|
+
* fixed constant - a real, spec-mandated identity check, not an invented restriction. */
|
|
71
71
|
export function decodeGlobalObjectId(reader) {
|
|
72
72
|
const byteArrayId = reader.readBytes(16);
|
|
73
73
|
if (!byteArrayId.equals(BYTE_ARRAY_ID)) {
|
|
74
74
|
throw new Error("GlobalObjectId: ByteArrayID did not match the required [MS-OXOCAL] constant.");
|
|
75
75
|
}
|
|
76
|
-
reader.
|
|
77
|
-
reader.
|
|
78
|
-
reader.
|
|
79
|
-
|
|
80
|
-
reader.readBigUInt64LE(); // CreationTime - not needed to recover icalUid
|
|
81
|
-
reader.readBytes(8); // X
|
|
82
|
-
const size = reader.readUInt32LE();
|
|
76
|
+
reader.readBytes(4); // YH/YL/M/D
|
|
77
|
+
const creationTimeAndReserved = reader.readBytes(16); // CreationTime + X
|
|
78
|
+
const sizeBytes = reader.readBytes(4);
|
|
79
|
+
const size = sizeBytes.readUInt32LE(0);
|
|
83
80
|
const data = reader.readBytes(size);
|
|
84
81
|
const isVCalId = size >= VCAL_MIN_DATA_LENGTH && data.subarray(0, 8).equals(VCAL_MARKER) && data.subarray(8, 12).equals(VCAL_VERSION);
|
|
85
82
|
if (isVCalId) {
|
|
@@ -87,6 +84,15 @@ export function decodeGlobalObjectId(reader) {
|
|
|
87
84
|
// (BYTECOUNT minus the marker minus the version minus 1 byte for the NUL).
|
|
88
85
|
return data.subarray(12, data.length - 1).toString("utf-8");
|
|
89
86
|
}
|
|
90
|
-
return data.toString("
|
|
87
|
+
return Buffer.concat([byteArrayId, Buffer.alloc(4), creationTimeAndReserved, sizeBytes, data]).toString("hex").toUpperCase();
|
|
88
|
+
}
|
|
89
|
+
/** The `YYYY-MM-DD` occurrence date a `GlobalObjectId` names (`YH`/`YL`/`M`/`D`), or `undefined` when it names the
|
|
90
|
+
* whole series (a zero year). `globalObjectId` must already have decoded successfully. */
|
|
91
|
+
export function globalObjectIdInstanceDate(globalObjectId) {
|
|
92
|
+
const year = (globalObjectId[16] << 8) | globalObjectId[17];
|
|
93
|
+
if (year === 0) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
return `${String(year).padStart(4, "0")}-${String(globalObjectId[18]).padStart(2, "0")}-${String(globalObjectId[19]).padStart(2, "0")}`;
|
|
91
97
|
}
|
|
92
98
|
//# sourceMappingURL=GlobalObjectId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalObjectId.js","sourceRoot":"","sources":["../../../src/codec/GlobalObjectId.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAgB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD
|
|
1
|
+
{"version":3,"file":"GlobalObjectId.js","sourceRoot":"","sources":["../../../src/codec/GlobalObjectId.ts"],"names":[],"mappings":"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"}
|