microsoft-graph-client 1.0.33 → 1.0.35

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.
Files changed (50) hide show
  1. package/dist/api/calendar.d.ts +6 -2
  2. package/dist/api/calendar.d.ts.map +1 -1
  3. package/dist/api/calendar.js +10 -3
  4. package/dist/api/calendar.js.map +1 -1
  5. package/dist/api/chats.d.ts +133 -4
  6. package/dist/api/chats.d.ts.map +1 -1
  7. package/dist/api/chats.js +194 -17
  8. package/dist/api/chats.js.map +1 -1
  9. package/dist/api/files.js +1 -1
  10. package/dist/api/files.js.map +1 -1
  11. package/dist/api/mail.d.ts.map +1 -1
  12. package/dist/api/mail.js +6 -0
  13. package/dist/api/mail.js.map +1 -1
  14. package/dist/api/messages.d.ts +122 -3
  15. package/dist/api/messages.d.ts.map +1 -1
  16. package/dist/api/messages.js +215 -50
  17. package/dist/api/messages.js.map +1 -1
  18. package/dist/api/users.d.ts +4 -3
  19. package/dist/api/users.d.ts.map +1 -1
  20. package/dist/api/users.js +13 -4
  21. package/dist/api/users.js.map +1 -1
  22. package/dist/types/calendar.d.ts +9 -0
  23. package/dist/types/calendar.d.ts.map +1 -1
  24. package/dist/types/calendar.js +14 -1
  25. package/dist/types/calendar.js.map +1 -1
  26. package/dist/types/chat.d.ts +42 -0
  27. package/dist/types/chat.d.ts.map +1 -1
  28. package/dist/types/file.d.ts +2 -0
  29. package/dist/types/file.d.ts.map +1 -1
  30. package/dist/types/index.d.ts +5 -3
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/types/index.js +2 -0
  33. package/dist/types/index.js.map +1 -1
  34. package/dist/types/mail.d.ts +4 -0
  35. package/dist/types/mail.d.ts.map +1 -1
  36. package/dist/types/message.d.ts +113 -8
  37. package/dist/types/message.d.ts.map +1 -1
  38. package/dist/types/user.d.ts +12 -0
  39. package/dist/types/user.d.ts.map +1 -1
  40. package/dist/types/user.js +4 -1
  41. package/dist/types/user.js.map +1 -1
  42. package/dist/utils/index.d.ts +1 -1
  43. package/dist/utils/index.d.ts.map +1 -1
  44. package/dist/utils/index.js +1 -1
  45. package/dist/utils/index.js.map +1 -1
  46. package/dist/utils/odata.d.ts +59 -8
  47. package/dist/utils/odata.d.ts.map +1 -1
  48. package/dist/utils/odata.js +64 -9
  49. package/dist/utils/odata.js.map +1 -1
  50. package/package.json +1 -1
@@ -1,20 +1,62 @@
1
1
  export type { Chat, ChatType, ConversationMember } from '@microsoft/microsoft-graph-types';
2
2
  export interface GetChatParams {
3
3
  chatId: string;
4
+ /**
5
+ * Optional `$expand` clauses (e.g. `['members']`, `['lastMessagePreview']`).
6
+ * Members are truncated server-side at 25 per documented Graph quirk.
7
+ */
8
+ expand?: string[];
4
9
  }
5
10
  export interface ListChatsParams {
11
+ /**
12
+ * Substring match against chat topic. Server-side filter via
13
+ * `contains(tolower(topic), …)`. Note this is *post-filtered* by Graph
14
+ * against a window of $top chats — see chats.list() doc for details.
15
+ */
6
16
  searchTerm?: string;
17
+ /**
18
+ * Substring match against expanded member display names. Auto-adds
19
+ * `$expand=members`. Subject to the same recency-window post-filter
20
+ * behavior. WARNING: combining this with `chatTypes: ['oneOnOne']` triggers
21
+ * a known Graph bug — see chats.list() doc.
22
+ */
7
23
  memberName?: string;
24
+ /** Exact match against member email. Same caveats as memberName. */
8
25
  memberEmail?: string;
26
+ /** Exact match against the AAD userId of a member. Auto-adds `$expand=members`. */
27
+ memberUserId?: string;
28
+ /**
29
+ * Filter to one or more chat types. Single equality is server-side and
30
+ * efficient. The combination `members/any(displayName) + chatType eq
31
+ * 'oneOnOne'` is broken on Graph and returns 0 — use `memberUserId` instead
32
+ * for the userId predicate which works.
33
+ */
9
34
  chatTypes?: ('oneOnOne' | 'group' | 'meeting')[];
10
35
  expand?: string[];
36
+ /**
37
+ * Page size. Hard-capped at 50 by Graph; values above 50 return HTTP 400.
38
+ * @see https://learn.microsoft.com/en-us/graph/api/chat-list?view=graph-rest-1.0
39
+ */
11
40
  top?: number;
41
+ /**
42
+ * Sort order. The ONLY value Graph allows on `/me/chats` is
43
+ * `'lastMessagePreview/createdDateTime desc'`. Ascending is rejected,
44
+ * other fields are rejected. Pass `true` to enable it; pass `false` or
45
+ * omit to use Graph's default ordering (which is *not* strictly recency).
46
+ *
47
+ * Strongly recommended: always pass `true` so pagination is monotonic.
48
+ */
49
+ orderByLastMessage?: boolean;
12
50
  nextLink?: string;
13
51
  }
14
52
  export interface ListChatsResult {
15
53
  chats: import('@microsoft/microsoft-graph-types').Chat[];
16
54
  nextLink?: string;
17
55
  }
56
+ export interface FindDmParams {
57
+ /** AAD userId of the other party in the 1:1 chat. */
58
+ userId: string;
59
+ }
18
60
  export interface CreateChatParams {
19
61
  chatType: 'oneOnOne' | 'group';
20
62
  members: import('@microsoft/microsoft-graph-types').ConversationMember[];
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/types/chat.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAM3F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,kCAAkC,EAAE,IAAI,EAAE,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC;IAC/B,OAAO,EAAE,OAAO,kCAAkC,EAAE,kBAAkB,EAAE,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/types/chat.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAM3F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,kCAAkC,EAAE,IAAI,EAAE,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC;IAC/B,OAAO,EAAE,OAAO,kCAAkC,EAAE,kBAAkB,EAAE,CAAC;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -40,6 +40,8 @@ export interface GrantFilePermissionParams {
40
40
  export interface SearchFilesParams {
41
41
  query: string;
42
42
  limit?: number;
43
+ /** Numeric `from` offset for pagination (default 0). */
44
+ from_offset?: number;
43
45
  }
44
46
  export interface DriveItemMeetingSource {
45
47
  application?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/types/file.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAMlE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/types/file.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAMlE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -1,11 +1,13 @@
1
1
  export type { GraphApiResponse, GraphClientConfig, GraphError } from './common.js';
2
2
  export { DEFAULT_SCOPES } from './common.js';
3
- export type { GetUserParams, SearchUsersParams, User } from './user.js';
3
+ export type { GetCurrentUserParams, GetUserParams, SearchUsersParams, User } from './user.js';
4
+ export { DEFAULT_USER_SEARCH_SELECT, DEFAULT_USER_SELECT } from './user.js';
4
5
  export type { PreferredPresenceAvailability, PresenceAvailability, SetPreferredPresenceParams, SetPresenceParams, } from './presence.js';
5
- export type { AddChatMemberParams, Chat, ChatType, ConversationMember, CreateChatParams, GetChatParams, ListChatsParams, ListChatsResult, RemoveChatMemberParams, UpdateChatParams, } from './chat.js';
6
- export type { ChatMessage, ChatMessageAttachment, ChatMessageImportance, ChatMessageInfo, ChatMessageMention, GetChatMessagesParams, GetMessageParams, ItemBody, SearchHit, SearchHitsContainer, SearchMessagesParams, SearchRequest, SearchResponse, SearchResult, SendChatMessageParams, SetMessageReactionParams, DeleteChatMessageParams, DownloadHostedContentParams, DownloadHostedContentResult, UnsetMessageReactionParams, UpdateChatMessageParams, } from './message.js';
6
+ export type { AddChatMemberParams, Chat, ChatType, ConversationMember, CreateChatParams, FindDmParams, GetChatParams, ListChatsParams, ListChatsResult, RemoveChatMemberParams, UpdateChatParams, } from './chat.js';
7
+ export type { ChatMessage, ChatMessageAttachment, ChatMessageImportance, ChatMessageInfo, ChatMessageMention, GetChatMessagesParams, GetMessageParams, ItemBody, ListMessagesParams, ListMessagesResult, SearchHit, SearchHitsContainer, SearchMessagesParams, SearchRequest, SearchResponse, SearchResult, SendChatMessageParams, SetMessageReactionParams, DeleteChatMessageParams, DownloadHostedContentParams, DownloadHostedContentResult, UnsetMessageReactionParams, UpdateChatMessageParams, } from './message.js';
7
8
  export type { DeleteMailParams, EmailAddress, FileAttachment, ForwardMailParams, GetMailParams, ListMailAttachmentsParams, ListMailsParams, MarkMailReadParams, Message, ReplyMailParams, SearchMailsParams, SendMailParams, } from './mail.js';
8
9
  export type { Attendee, CancelCalendarEventParams, CreateCalendarEventParams, DateTimeTimeZone, Event, FindMeetingTimesParams, GetCalendarEventsParams, Location, MeetingTimeSuggestion, MeetingTimeSuggestionsResult, NullableOption, RespondToEventParams, UpdateCalendarEventParams, } from './calendar.js';
10
+ export { DEFAULT_EVENT_SELECT } from './calendar.js';
9
11
  export type { DownloadSharePointFileParams, DownloadSharePointFileResult, DriveItem, DriveItemMeetingSource, GetDriveItemParams, GrantFilePermissionParams, SearchFilesParams, UpdateSharePointFileParams, UpdateSharePointFileResult, UploadToSharePointParams, UploadToSharePointResult, } from './file.js';
10
12
  export type { CallTranscript, GetMeetingByJoinUrlParams, GetTranscriptContentParams, ListTranscriptsParams, OnlineMeeting, } from './transcript.js';
11
13
  export type { GetScheduleParams, Room, ScheduleItem } from './place.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGxE,YAAY,EACV,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,mBAAmB,EACnB,IAAI,EACJ,QAAQ,EACR,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,eAAe,EACf,kBAAkB,EAClB,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,QAAQ,EACR,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,EACL,sBAAsB,EACtB,uBAAuB,EACvB,QAAQ,EACR,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACd,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,4BAA4B,EAC5B,4BAA4B,EAC5B,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,cAAc,EACd,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGxE,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAG5E,YAAY,EACV,6BAA6B,EAC7B,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,mBAAmB,EACnB,IAAI,EACJ,QAAQ,EACR,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,eAAe,EACf,kBAAkB,EAClB,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,QAAQ,EACR,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,EACL,sBAAsB,EACtB,uBAAuB,EACvB,QAAQ,EACR,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACd,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,YAAY,EACV,4BAA4B,EAC5B,4BAA4B,EAC5B,SAAS,EACT,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,cAAc,EACd,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGxE,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,2 +1,4 @@
1
1
  export { DEFAULT_SCOPES } from './common.js';
2
+ export { DEFAULT_USER_SEARCH_SELECT, DEFAULT_USER_SELECT } from './user.js';
3
+ export { DEFAULT_EVENT_SELECT } from './calendar.js';
2
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7C,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAoF5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -15,6 +15,8 @@ export interface ListMailsParams {
15
15
  includeBody?: boolean;
16
16
  /** Format for the body: 'text' or 'html' (default: 'html') */
17
17
  bodyFormat?: 'text' | 'html';
18
+ /** Opaque `@odata.nextLink` from a previous response — when set, all other params are ignored. */
19
+ nextLink?: string;
18
20
  }
19
21
  export interface SearchMailsParams {
20
22
  /** Search query string. Searches across subject, body, and participant fields. */
@@ -27,6 +29,8 @@ export interface SearchMailsParams {
27
29
  includeBody?: boolean;
28
30
  /** Format for the body: 'text' or 'html' (default: 'html') */
29
31
  bodyFormat?: 'text' | 'html';
32
+ /** Opaque `@odata.nextLink` from a previous response — when set, all other params are ignored. */
33
+ nextLink?: string;
30
34
  }
31
35
  export interface FileAttachment {
32
36
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../src/types/mail.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAM9E,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2IAA2I;IAC3I,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,yJAAyJ;IACzJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../src/types/mail.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAM9E,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2IAA2I;IAC3I,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,yJAAyJ;IACzJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -37,6 +37,12 @@ export interface SearchHit {
37
37
  };
38
38
  subject?: string;
39
39
  chatId?: string;
40
+ /**
41
+ * Deep link to open the message in Teams. Present on chatMessage hits.
42
+ * Not the same as `webUrl` on DriveItem hits — different entity types
43
+ * use different link field names.
44
+ */
45
+ webLink?: string;
40
46
  channelIdentity?: {
41
47
  teamId?: string;
42
48
  channelId?: string;
@@ -70,13 +76,70 @@ export interface GetMessageParams {
70
76
  export interface GetChatMessagesParams {
71
77
  chatId: string;
72
78
  limit?: number;
73
- /** ISO datetime filter - messages after this time */
79
+ /** ISO datetime filter messages after this time. Client-side filter applied to the returned page. */
74
80
  from?: string;
75
- /** ISO datetime filter - messages before this time */
81
+ /** ISO datetime filter messages before this time. Client-side filter. */
76
82
  to?: string;
77
- /** Filter by sender user ID */
83
+ /**
84
+ * Filter by sender user ID. NOTE: Graph rejects `$filter=from/user/id eq …`
85
+ * with "operationKind 'Equal' is not allowed", so this is applied
86
+ * client-side after the page is fetched. Inherently bounded to the page.
87
+ */
78
88
  fromUser?: string;
79
89
  }
90
+ /**
91
+ * Parameters for `listMessages` — the new caller-driven pagination shape.
92
+ *
93
+ * Replaces `getChatMessages` for new code. Returns the page plus a
94
+ * `nextLink` for the caller to follow. No internal pagination loop, no
95
+ * silently discarded metadata.
96
+ */
97
+ export interface ListMessagesParams {
98
+ chatId: string;
99
+ /** Page size. Default 20. Max is whatever Graph allows on `/chats/{id}/messages` (50). */
100
+ limit?: number;
101
+ /**
102
+ * Server-side filter: only messages whose `lastModifiedDateTime` is greater
103
+ * than this ISO datetime. This is the only message-content-related filter
104
+ * `/chats/{id}/messages` actually supports — `$search`, `contains(body…)`,
105
+ * and `from/user/id eq` are all rejected by Graph.
106
+ *
107
+ * Note: `lastModifiedDateTime` ≠ `createdDateTime`. A message edited later
108
+ * has a more recent `lastModifiedDateTime`. Use `--containing` for content
109
+ * matching if needed.
110
+ */
111
+ since?: string;
112
+ /**
113
+ * Client-side filter: keep only messages whose body content (case-insensitive,
114
+ * substring match) matches this string. Applied AFTER fetching the page,
115
+ * so the count of matches is naturally bounded by the page size. The result
116
+ * tells you how many messages were scanned vs how many matched.
117
+ *
118
+ * Why client-side: see `since` doc — Graph rejects content filters on this
119
+ * endpoint.
120
+ */
121
+ containing?: string;
122
+ /**
123
+ * Client-side filter: keep only messages whose sender user ID matches.
124
+ * Same reason as `containing` — server-side filter is broken.
125
+ */
126
+ fromUser?: string;
127
+ /**
128
+ * Pagination: pass the `nextLink` from a previous response to fetch the
129
+ * next page. When set, all other filter params are ignored (the URL
130
+ * already has them baked in).
131
+ */
132
+ nextLink?: string;
133
+ }
134
+ export interface ListMessagesResult {
135
+ messages: import('@microsoft/microsoft-graph-types').ChatMessage[];
136
+ /** Total messages in this page response (before client-side filtering). */
137
+ scanned: number;
138
+ /** Messages that survived client-side filtering. Equals `messages.length`. */
139
+ matched: number;
140
+ /** Pagination link to the next page, or `undefined` if no more pages. */
141
+ nextLink?: string;
142
+ }
80
143
  export interface SendChatMessageParams {
81
144
  chatId: string;
82
145
  message: string;
@@ -92,14 +155,56 @@ export interface UpdateChatMessageParams {
92
155
  importance?: 'normal' | 'high' | 'urgent';
93
156
  format?: 'text' | 'markdown' | 'html';
94
157
  }
158
+ /**
159
+ * Parameters for `messages.search()`.
160
+ *
161
+ * Mapped to KQL operators on Microsoft Graph's `/search/query` endpoint.
162
+ * The set of supported operators is fixed by Microsoft and documented at
163
+ * https://learn.microsoft.com/en-us/graph/search-concept-chat-messages
164
+ *
165
+ * Important: there is NO server-side way to scope a chatMessage search to a
166
+ * specific chat ID, channel ID, or chat type. Microsoft confirmed this on
167
+ * https://learn.microsoft.com/en-us/answers/questions/5510799 — "All scoping
168
+ * beyond keyword/KQL must be done client-side." This package therefore does
169
+ * not expose `chatId` / `channelId` / `scope` parameters; consumers that need
170
+ * those filters must call `.search()` and filter the returned hits client-side.
171
+ */
95
172
  export interface SearchMessagesParams {
173
+ /**
174
+ * Free-text query string. Combined with the operator-specific params below
175
+ * via `AND`. If everything is omitted, defaults to `*` (match all).
176
+ */
96
177
  query?: string;
97
- scope?: 'all' | 'channels' | 'chats';
98
- limit?: number;
99
- enableTopResults?: boolean;
100
- mentions?: string;
178
+ /** KQL `from:` operator. Accepts display name (quoted if multi-word) or email. NOT user ID. */
101
179
  from?: string;
102
- fromUser?: string;
180
+ /** KQL `to:` operator. Same form as `from`. Partial support for 1:1 chats only per docs. */
181
+ to?: string;
182
+ /** KQL `mentions:` operator. Takes the user ID **without dashes**. */
183
+ mentions?: string;
184
+ /** KQL `IsRead:false` shortcut. */
185
+ unread?: boolean;
186
+ /** KQL `hasAttachment:true` shortcut. */
187
+ hasAttachment?: boolean;
188
+ /** KQL `sent>YYYY-MM-DD`. ISO date or datetime; only the date portion is used. */
189
+ sentAfter?: string;
190
+ /** KQL `sent<YYYY-MM-DD`. ISO date or datetime; only the date portion is used. */
191
+ sentBefore?: string;
192
+ /**
193
+ * Pagination: skip the first N hits. Used for the next-page request.
194
+ * Default 0.
195
+ */
196
+ from_offset?: number;
197
+ /**
198
+ * Page size. Default 25, maximum 500. Values above 500 return HTTP 400
199
+ * with `Max page size should be <= 501.`.
200
+ */
201
+ size?: number;
202
+ /**
203
+ * If true, results are sorted by relevance instead of `dateTime desc`.
204
+ * Surfaces older content that's textually relevant to the query. Default
205
+ * `false` (recency-first).
206
+ */
207
+ enableTopResults?: boolean;
103
208
  }
104
209
  export interface SetMessageReactionParams {
105
210
  chatId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,21 @@
1
1
  export type { User } from '@microsoft/microsoft-graph-types';
2
2
  export interface GetUserParams {
3
3
  userId: string;
4
+ /** Override the default `$select` projection. */
5
+ select?: string[];
4
6
  }
5
7
  export interface SearchUsersParams {
6
8
  query: string;
7
9
  limit?: number;
10
+ /** Override the default `$select` projection. */
11
+ select?: string[];
8
12
  }
13
+ export interface GetCurrentUserParams {
14
+ /** Override the default `$select` projection. */
15
+ select?: string[];
16
+ }
17
+ /** Default profile projection. Matches what every consumer in this monorepo strips to. */
18
+ export declare const DEFAULT_USER_SELECT: string[];
19
+ /** Slimmer projection for list/search results. */
20
+ export declare const DEFAULT_USER_SEARCH_SELECT: string[];
9
21
  //# sourceMappingURL=user.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAM7D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAM7D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,UAA+E,CAAC;AAEhH,kDAAkD;AAClD,eAAO,MAAM,0BAA0B,UAAgC,CAAC"}
@@ -1,2 +1,5 @@
1
- export {};
1
+ /** Default profile projection. Matches what every consumer in this monorepo strips to. */
2
+ export const DEFAULT_USER_SELECT = ['id', 'displayName', 'mail', 'jobTitle', 'department', 'userPrincipalName'];
3
+ /** Slimmer projection for list/search results. */
4
+ export const DEFAULT_USER_SEARCH_SELECT = ['id', 'displayName', 'mail'];
2
5
  //# sourceMappingURL=user.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AAyBA,0FAA0F;AAC1F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;AAEhH,kDAAkD;AAClD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { markdownToHtml, sanitizeHtml } from './markdown.js';
2
- export { escapeODataString } from './odata.js';
2
+ export { escapeODataLiteral, escapeODataString, odataFilterValue } from './odata.js';
3
3
  export { encodeSharePointUrl } from './sharepoint.js';
4
4
  export { extractChatIdFromJoinUrl, extractMeetingInfoFromJoinUrl } from './teams.js';
5
5
  export type { MeetingInfo } from './teams.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AACrF,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AACrF,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { markdownToHtml, sanitizeHtml } from './markdown.js';
2
- export { escapeODataString } from './odata.js';
2
+ export { escapeODataLiteral, escapeODataString, odataFilterValue } from './odata.js';
3
3
  export { encodeSharePointUrl } from './sharepoint.js';
4
4
  export { extractChatIdFromJoinUrl, extractMeetingInfoFromJoinUrl } from './teams.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC"}
@@ -1,17 +1,68 @@
1
1
  /**
2
- * Utilities for working with OData queries
2
+ * Utilities for building OData query parameter values that the Microsoft Graph
3
+ * SDK won't mangle.
4
+ *
5
+ * There are TWO distinct escaping layers when you put a user-supplied string
6
+ * inside an OData filter clause that gets sent to Graph as a query parameter:
7
+ *
8
+ * 1. OData literal escaping — single quotes inside a string literal must be
9
+ * doubled, otherwise the OData parser breaks. This is `escapeODataLiteral`.
10
+ *
11
+ * 2. URL encoding of reserved characters — the Microsoft Graph SDK's
12
+ * `.filter()` and `.query()` builders DO NOT URL-encode the *value* of
13
+ * query parameters. As a result, characters like `&`, `+`, `#`, `?` get
14
+ * passed through verbatim and break the URL parsing on the server side.
15
+ *
16
+ * Empirically verified 2026-04-07: a topic filter for `'fm & fd'` failed
17
+ * with `Invalid filter clause: There is an unterminated string literal at
18
+ * position 28 in 'contains(tolower(topic), 'fm'.` because the SDK sent
19
+ * `?$filter=...'fm & fd'...` and the server parsed the `&` as a query
20
+ * param separator. See test/probe-encoding.mts for the verification.
21
+ *
22
+ * Use `escapeODataLiteral` when you control the URL building yourself (rare).
23
+ * Use `odataFilterValue` when you're going through the SDK's `.filter()` /
24
+ * `.query()` methods, which is what every API class in this package does.
25
+ *
26
+ * @see https://learn.microsoft.com/en-us/graph/filter-query-parameter
27
+ */
28
+ /**
29
+ * Escapes single quotes in an OData string literal.
30
+ *
31
+ * Use this only if you are constructing a fully-formed URL yourself and your
32
+ * URL builder will handle URL encoding separately. In most cases, prefer
33
+ * `odataFilterValue` which combines both layers.
34
+ *
35
+ * @example
36
+ * escapeODataLiteral("Let's Talk") // → "Let''s Talk"
3
37
  */
38
+ export declare function escapeODataLiteral(value: string): string;
4
39
  /**
5
- * Escapes a string for use in OData filter expressions.
6
- * Single quotes are escaped by doubling them (' → '').
40
+ * Prepares a string for safe use as an OData filter value passed through the
41
+ * Microsoft Graph SDK's `.filter()` builder.
42
+ *
43
+ * Applies BOTH escaping layers:
44
+ * 1. OData literal escape (`'` → `''`)
45
+ * 2. URL-encode the result so reserved characters don't break the request URL
7
46
  *
8
- * @param value - The string to escape
9
- * @returns The escaped string safe for OData filters
47
+ * @example
48
+ * // Building a topic filter:
49
+ * const value = odataFilterValue("FM & FD");
50
+ * client.api('/me/chats').filter(`contains(tolower(topic), '${value}')`).get();
51
+ * // The SDK sends: ?$filter=contains(tolower(topic), 'fm%20%26%20fd')
10
52
  *
11
53
  * @example
12
- * // "Let's Talk" "Let''s Talk"
13
- * const escaped = escapeODataString("Let's Talk");
14
- * const filter = `contains(topic, '${escaped}')`;
54
+ * // Filtering by a name with an apostrophe:
55
+ * const value = odataFilterValue("O'Brien");
56
+ * client.api('/me/chats').filter(`contains(displayName, '${value}')`).get();
57
+ * // → 'O%27%27Brien' (literal escape gives O''Brien, URL encode gives O%27%27Brien)
58
+ */
59
+ export declare function odataFilterValue(value: string): string;
60
+ /**
61
+ * @deprecated Use `escapeODataLiteral` (same behavior) for the literal escape,
62
+ * or `odataFilterValue` for the combined literal-escape + URL-encode that you
63
+ * almost always want when going through the Graph SDK builders.
64
+ *
65
+ * Kept temporarily for backwards compatibility with the old name.
15
66
  */
16
67
  export declare function escapeODataString(value: string): string;
17
68
  //# sourceMappingURL=odata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"odata.d.ts","sourceRoot":"","sources":["../../src/utils/odata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD"}
1
+ {"version":3,"file":"odata.d.ts","sourceRoot":"","sources":["../../src/utils/odata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -1,19 +1,74 @@
1
1
  /**
2
- * Utilities for working with OData queries
2
+ * Utilities for building OData query parameter values that the Microsoft Graph
3
+ * SDK won't mangle.
4
+ *
5
+ * There are TWO distinct escaping layers when you put a user-supplied string
6
+ * inside an OData filter clause that gets sent to Graph as a query parameter:
7
+ *
8
+ * 1. OData literal escaping — single quotes inside a string literal must be
9
+ * doubled, otherwise the OData parser breaks. This is `escapeODataLiteral`.
10
+ *
11
+ * 2. URL encoding of reserved characters — the Microsoft Graph SDK's
12
+ * `.filter()` and `.query()` builders DO NOT URL-encode the *value* of
13
+ * query parameters. As a result, characters like `&`, `+`, `#`, `?` get
14
+ * passed through verbatim and break the URL parsing on the server side.
15
+ *
16
+ * Empirically verified 2026-04-07: a topic filter for `'fm & fd'` failed
17
+ * with `Invalid filter clause: There is an unterminated string literal at
18
+ * position 28 in 'contains(tolower(topic), 'fm'.` because the SDK sent
19
+ * `?$filter=...'fm & fd'...` and the server parsed the `&` as a query
20
+ * param separator. See test/probe-encoding.mts for the verification.
21
+ *
22
+ * Use `escapeODataLiteral` when you control the URL building yourself (rare).
23
+ * Use `odataFilterValue` when you're going through the SDK's `.filter()` /
24
+ * `.query()` methods, which is what every API class in this package does.
25
+ *
26
+ * @see https://learn.microsoft.com/en-us/graph/filter-query-parameter
3
27
  */
4
28
  /**
5
- * Escapes a string for use in OData filter expressions.
6
- * Single quotes are escaped by doubling them (' → '').
29
+ * Escapes single quotes in an OData string literal.
7
30
  *
8
- * @param value - The string to escape
9
- * @returns The escaped string safe for OData filters
31
+ * Use this only if you are constructing a fully-formed URL yourself and your
32
+ * URL builder will handle URL encoding separately. In most cases, prefer
33
+ * `odataFilterValue` which combines both layers.
10
34
  *
11
35
  * @example
12
- * // "Let's Talk" → "Let''s Talk"
13
- * const escaped = escapeODataString("Let's Talk");
14
- * const filter = `contains(topic, '${escaped}')`;
36
+ * escapeODataLiteral("Let's Talk") // → "Let''s Talk"
15
37
  */
16
- export function escapeODataString(value) {
38
+ export function escapeODataLiteral(value) {
17
39
  return value.replace(/'/g, "''");
18
40
  }
41
+ /**
42
+ * Prepares a string for safe use as an OData filter value passed through the
43
+ * Microsoft Graph SDK's `.filter()` builder.
44
+ *
45
+ * Applies BOTH escaping layers:
46
+ * 1. OData literal escape (`'` → `''`)
47
+ * 2. URL-encode the result so reserved characters don't break the request URL
48
+ *
49
+ * @example
50
+ * // Building a topic filter:
51
+ * const value = odataFilterValue("FM & FD");
52
+ * client.api('/me/chats').filter(`contains(tolower(topic), '${value}')`).get();
53
+ * // The SDK sends: ?$filter=contains(tolower(topic), 'fm%20%26%20fd')
54
+ *
55
+ * @example
56
+ * // Filtering by a name with an apostrophe:
57
+ * const value = odataFilterValue("O'Brien");
58
+ * client.api('/me/chats').filter(`contains(displayName, '${value}')`).get();
59
+ * // → 'O%27%27Brien' (literal escape gives O''Brien, URL encode gives O%27%27Brien)
60
+ */
61
+ export function odataFilterValue(value) {
62
+ return encodeURIComponent(escapeODataLiteral(value));
63
+ }
64
+ /**
65
+ * @deprecated Use `escapeODataLiteral` (same behavior) for the literal escape,
66
+ * or `odataFilterValue` for the combined literal-escape + URL-encode that you
67
+ * almost always want when going through the Graph SDK builders.
68
+ *
69
+ * Kept temporarily for backwards compatibility with the old name.
70
+ */
71
+ export function escapeODataString(value) {
72
+ return escapeODataLiteral(value);
73
+ }
19
74
  //# sourceMappingURL=odata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"odata.js","sourceRoot":"","sources":["../../src/utils/odata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"odata.js","sourceRoot":"","sources":["../../src/utils/odata.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,kBAAkB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microsoft-graph-client",
3
- "version": "1.0.33",
3
+ "version": "1.0.35",
4
4
  "publish": true,
5
5
  "description": "TypeScript client library for Microsoft Graph API with built-in authentication",
6
6
  "type": "module",