@awolve/myoffice 1.6.0

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 (94) hide show
  1. package/README.md +271 -0
  2. package/dist/auth/cache-plugin.d.ts +20 -0
  3. package/dist/auth/cache-plugin.d.ts.map +1 -0
  4. package/dist/auth/cache-plugin.js +49 -0
  5. package/dist/auth/cache-plugin.js.map +1 -0
  6. package/dist/auth/config.d.ts +40 -0
  7. package/dist/auth/config.d.ts.map +1 -0
  8. package/dist/auth/config.js +135 -0
  9. package/dist/auth/config.js.map +1 -0
  10. package/dist/auth/device-code.d.ts +2 -0
  11. package/dist/auth/device-code.d.ts.map +1 -0
  12. package/dist/auth/device-code.js +40 -0
  13. package/dist/auth/device-code.js.map +1 -0
  14. package/dist/auth/index.d.ts +4 -0
  15. package/dist/auth/index.d.ts.map +1 -0
  16. package/dist/auth/index.js +4 -0
  17. package/dist/auth/index.js.map +1 -0
  18. package/dist/auth/login.d.ts +7 -0
  19. package/dist/auth/login.d.ts.map +1 -0
  20. package/dist/auth/login.js +22 -0
  21. package/dist/auth/login.js.map +1 -0
  22. package/dist/auth/token-manager.d.ts +4 -0
  23. package/dist/auth/token-manager.d.ts.map +1 -0
  24. package/dist/auth/token-manager.js +85 -0
  25. package/dist/auth/token-manager.js.map +1 -0
  26. package/dist/cli/formatter.d.ts +5 -0
  27. package/dist/cli/formatter.d.ts.map +1 -0
  28. package/dist/cli/formatter.js +317 -0
  29. package/dist/cli/formatter.js.map +1 -0
  30. package/dist/cli.d.ts +3 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +973 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/core/handler.d.ts +8 -0
  35. package/dist/core/handler.d.ts.map +1 -0
  36. package/dist/core/handler.js +327 -0
  37. package/dist/core/handler.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +924 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/tools/calendar.d.ts +124 -0
  43. package/dist/tools/calendar.d.ts.map +1 -0
  44. package/dist/tools/calendar.js +129 -0
  45. package/dist/tools/calendar.js.map +1 -0
  46. package/dist/tools/chats.d.ts +66 -0
  47. package/dist/tools/chats.d.ts.map +1 -0
  48. package/dist/tools/chats.js +102 -0
  49. package/dist/tools/chats.js.map +1 -0
  50. package/dist/tools/contacts.d.ts +138 -0
  51. package/dist/tools/contacts.d.ts.map +1 -0
  52. package/dist/tools/contacts.js +189 -0
  53. package/dist/tools/contacts.js.map +1 -0
  54. package/dist/tools/index.d.ts +10 -0
  55. package/dist/tools/index.d.ts.map +1 -0
  56. package/dist/tools/index.js +10 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/mail.d.ts +138 -0
  59. package/dist/tools/mail.d.ts.map +1 -0
  60. package/dist/tools/mail.js +187 -0
  61. package/dist/tools/mail.js.map +1 -0
  62. package/dist/tools/onedrive.d.ts +125 -0
  63. package/dist/tools/onedrive.d.ts.map +1 -0
  64. package/dist/tools/onedrive.js +203 -0
  65. package/dist/tools/onedrive.js.map +1 -0
  66. package/dist/tools/planner.d.ts +390 -0
  67. package/dist/tools/planner.d.ts.map +1 -0
  68. package/dist/tools/planner.js +693 -0
  69. package/dist/tools/planner.js.map +1 -0
  70. package/dist/tools/sharepoint.d.ts +138 -0
  71. package/dist/tools/sharepoint.d.ts.map +1 -0
  72. package/dist/tools/sharepoint.js +156 -0
  73. package/dist/tools/sharepoint.js.map +1 -0
  74. package/dist/tools/tasks.d.ts +107 -0
  75. package/dist/tools/tasks.d.ts.map +1 -0
  76. package/dist/tools/tasks.js +131 -0
  77. package/dist/tools/tasks.js.map +1 -0
  78. package/dist/tools/teams.d.ts +66 -0
  79. package/dist/tools/teams.d.ts.map +1 -0
  80. package/dist/tools/teams.js +69 -0
  81. package/dist/tools/teams.js.map +1 -0
  82. package/dist/utils/graph-client.d.ts +15 -0
  83. package/dist/utils/graph-client.d.ts.map +1 -0
  84. package/dist/utils/graph-client.js +126 -0
  85. package/dist/utils/graph-client.js.map +1 -0
  86. package/dist/utils/signature.d.ts +2 -0
  87. package/dist/utils/signature.d.ts.map +1 -0
  88. package/dist/utils/signature.js +17 -0
  89. package/dist/utils/signature.js.map +1 -0
  90. package/dist/utils/version.d.ts +2 -0
  91. package/dist/utils/version.d.ts.map +1 -0
  92. package/dist/utils/version.js +20 -0
  93. package/dist/utils/version.js.map +1 -0
  94. package/package.json +55 -0
@@ -0,0 +1,66 @@
1
+ import { z } from 'zod';
2
+ export declare const listTeamsSchema: z.ZodObject<{
3
+ maxItems: z.ZodOptional<z.ZodNumber>;
4
+ }, "strip", z.ZodTypeAny, {
5
+ maxItems?: number | undefined;
6
+ }, {
7
+ maxItems?: number | undefined;
8
+ }>;
9
+ export declare const listChannelsSchema: z.ZodObject<{
10
+ teamId: z.ZodString;
11
+ }, "strip", z.ZodTypeAny, {
12
+ teamId: string;
13
+ }, {
14
+ teamId: string;
15
+ }>;
16
+ export declare const listChannelMessagesSchema: z.ZodObject<{
17
+ teamId: z.ZodString;
18
+ channelId: z.ZodString;
19
+ maxItems: z.ZodOptional<z.ZodNumber>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ teamId: string;
22
+ channelId: string;
23
+ maxItems?: number | undefined;
24
+ }, {
25
+ teamId: string;
26
+ channelId: string;
27
+ maxItems?: number | undefined;
28
+ }>;
29
+ export declare const postChannelMessageSchema: z.ZodObject<{
30
+ teamId: z.ZodString;
31
+ channelId: z.ZodString;
32
+ content: z.ZodString;
33
+ }, "strip", z.ZodTypeAny, {
34
+ content: string;
35
+ teamId: string;
36
+ channelId: string;
37
+ }, {
38
+ content: string;
39
+ teamId: string;
40
+ channelId: string;
41
+ }>;
42
+ export declare function listTeams(params: z.infer<typeof listTeamsSchema>): Promise<{
43
+ id: string;
44
+ displayName: string;
45
+ description: string | undefined;
46
+ }[]>;
47
+ export declare function listChannels(params: z.infer<typeof listChannelsSchema>): Promise<{
48
+ id: string;
49
+ displayName: string;
50
+ description: string | undefined;
51
+ membershipType: string | undefined;
52
+ }[]>;
53
+ export declare function listChannelMessages(params: z.infer<typeof listChannelMessagesSchema>): Promise<{
54
+ id: string;
55
+ createdAt: string;
56
+ from: string;
57
+ content: string;
58
+ contentType: string;
59
+ subject: string | undefined;
60
+ }[]>;
61
+ export declare function postChannelMessage(params: z.infer<typeof postChannelMessageSchema>): Promise<{
62
+ success: boolean;
63
+ messageId: string;
64
+ message: string;
65
+ }>;
66
+ //# sourceMappingURL=teams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwCxB,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EAInC,CAAC;AAGH,wBAAsB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC;;;;KAatE;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC;;;;;KAa5E;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC;;;;;;;KAgB1F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC;;;;GAqBxF"}
@@ -0,0 +1,69 @@
1
+ import { z } from 'zod';
2
+ import { graphRequest, graphList } from '../utils/graph-client.js';
3
+ // Schemas
4
+ export const listTeamsSchema = z.object({
5
+ maxItems: z.number().optional().describe('Maximum number of teams to return. Default: 50'),
6
+ });
7
+ export const listChannelsSchema = z.object({
8
+ teamId: z.string().describe('The ID of the team'),
9
+ });
10
+ export const listChannelMessagesSchema = z.object({
11
+ teamId: z.string().describe('The ID of the team'),
12
+ channelId: z.string().describe('The ID of the channel'),
13
+ maxItems: z.number().optional().describe('Maximum number of messages to return. Default: 25'),
14
+ });
15
+ export const postChannelMessageSchema = z.object({
16
+ teamId: z.string().describe('The ID of the team'),
17
+ channelId: z.string().describe('The ID of the channel'),
18
+ content: z.string().describe('Message content (supports HTML)'),
19
+ });
20
+ // Tool implementations
21
+ export async function listTeams(params) {
22
+ const { maxItems = 50 } = params;
23
+ const teams = await graphList('/me/joinedTeams?$select=id,displayName,description', { maxItems });
24
+ return teams.map((t) => ({
25
+ id: t.id,
26
+ displayName: t.displayName,
27
+ description: t.description,
28
+ }));
29
+ }
30
+ export async function listChannels(params) {
31
+ const { teamId } = params;
32
+ const channels = await graphList(`/teams/${teamId}/channels?$select=id,displayName,description,membershipType`);
33
+ return channels.map((c) => ({
34
+ id: c.id,
35
+ displayName: c.displayName,
36
+ description: c.description,
37
+ membershipType: c.membershipType,
38
+ }));
39
+ }
40
+ export async function listChannelMessages(params) {
41
+ const { teamId, channelId, maxItems = 25 } = params;
42
+ const messages = await graphList(`/teams/${teamId}/channels/${channelId}/messages?$top=${maxItems}`, { maxItems });
43
+ return messages.map((m) => ({
44
+ id: m.id,
45
+ createdAt: m.createdDateTime,
46
+ from: m.from?.user?.displayName || m.from?.application?.displayName || 'Unknown',
47
+ content: m.body.content,
48
+ contentType: m.body.contentType,
49
+ subject: m.subject,
50
+ }));
51
+ }
52
+ export async function postChannelMessage(params) {
53
+ const { teamId, channelId, content } = params;
54
+ const message = await graphRequest(`/teams/${teamId}/channels/${channelId}/messages`, {
55
+ method: 'POST',
56
+ body: {
57
+ body: {
58
+ contentType: 'html',
59
+ content,
60
+ },
61
+ },
62
+ });
63
+ return {
64
+ success: true,
65
+ messageId: message.id,
66
+ message: 'Message posted to channel',
67
+ };
68
+ }
69
+ //# sourceMappingURL=teams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/tools/teams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAsCnE,UAAU;AACV,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;CAC3F,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CAC9F,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACvD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAChE,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAuC;IACrE,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAEjC,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,oDAAoD,EACpD,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAA0C;IAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE1B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,UAAU,MAAM,6DAA6D,CAC9E,CAAC;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,cAAc,EAAE,CAAC,CAAC,cAAc;KACjC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAiD;IACzF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAEpD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,UAAU,MAAM,aAAa,SAAS,kBAAkB,QAAQ,EAAE,EAClE,EAAE,QAAQ,EAAE,CACb,CAAC;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,SAAS,EAAE,CAAC,CAAC,eAAe;QAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,IAAI,SAAS;QAChF,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;QACvB,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;QAC/B,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAgD;IACvF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE9C,MAAM,OAAO,GAAG,MAAM,YAAY,CAChC,UAAU,MAAM,aAAa,SAAS,WAAW,EACjD;QACE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE;YACJ,IAAI,EAAE;gBACJ,WAAW,EAAE,MAAM;gBACnB,OAAO;aACR;SACF;KACF,CACF,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,OAAO,EAAE,2BAA2B;KACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface GraphRequestOptions {
2
+ method?: 'GET' | 'POST' | 'PATCH' | 'DELETE';
3
+ body?: unknown;
4
+ headers?: Record<string, string>;
5
+ }
6
+ export declare function graphRequest<T>(path: string, options?: GraphRequestOptions): Promise<T>;
7
+ export interface GraphUploadOptions {
8
+ contentType?: string;
9
+ }
10
+ export declare function graphUpload<T>(path: string, content: Buffer | Uint8Array, options?: GraphUploadOptions): Promise<T>;
11
+ export declare function graphUploadLarge<T>(path: string, content: Buffer | Uint8Array, onProgress?: (uploaded: number, total: number) => void): Promise<T>;
12
+ export declare function graphList<T>(path: string, options?: {
13
+ maxItems?: number;
14
+ }): Promise<T[]>;
15
+ //# sourceMappingURL=graph-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../src/utils/graph-client.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,CAAC,CAAC,CAmCZ;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAWD,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACrD,OAAO,CAAC,CAAC,CAAC,CA2DZ;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,CAAC,EAAE,CAAC,CAoBd"}
@@ -0,0 +1,126 @@
1
+ import { getAccessToken } from '../auth/index.js';
2
+ const GRAPH_BASE_URL = 'https://graph.microsoft.com/v1.0';
3
+ export async function graphRequest(path, options = {}) {
4
+ const { method = 'GET', body, headers = {} } = options;
5
+ const accessToken = await getAccessToken();
6
+ const response = await fetch(`${GRAPH_BASE_URL}${path}`, {
7
+ method,
8
+ headers: {
9
+ Authorization: `Bearer ${accessToken}`,
10
+ 'Content-Type': 'application/json',
11
+ ...headers,
12
+ },
13
+ body: body ? JSON.stringify(body) : undefined,
14
+ });
15
+ if (!response.ok) {
16
+ const errorText = await response.text();
17
+ let errorMessage;
18
+ try {
19
+ const errorJson = JSON.parse(errorText);
20
+ errorMessage = errorJson.error?.message || errorText;
21
+ }
22
+ catch {
23
+ errorMessage = errorText;
24
+ }
25
+ throw new Error(`Graph API error (${response.status}): ${errorMessage}`);
26
+ }
27
+ // Handle 204 No Content and 202 Accepted (e.g., sendMail)
28
+ if (response.status === 204 || response.status === 202) {
29
+ return {};
30
+ }
31
+ return response.json();
32
+ }
33
+ export async function graphUpload(path, content, options = {}) {
34
+ const { contentType = 'application/octet-stream' } = options;
35
+ const accessToken = await getAccessToken();
36
+ const response = await fetch(`${GRAPH_BASE_URL}${path}`, {
37
+ method: 'PUT',
38
+ headers: {
39
+ Authorization: `Bearer ${accessToken}`,
40
+ 'Content-Type': contentType,
41
+ },
42
+ body: content,
43
+ });
44
+ if (!response.ok) {
45
+ const errorText = await response.text();
46
+ let errorMessage;
47
+ try {
48
+ const errorJson = JSON.parse(errorText);
49
+ errorMessage = errorJson.error?.message || errorText;
50
+ }
51
+ catch {
52
+ errorMessage = errorText;
53
+ }
54
+ throw new Error(`Graph API error (${response.status}): ${errorMessage}`);
55
+ }
56
+ return response.json();
57
+ }
58
+ // Resumable upload for large files (up to 250GB)
59
+ // Chunk size must be multiple of 320 KiB (327,680 bytes)
60
+ const CHUNK_SIZE = 320 * 1024 * 10; // 3.2 MB chunks
61
+ export async function graphUploadLarge(path, content, onProgress) {
62
+ const accessToken = await getAccessToken();
63
+ const fileSize = content.length;
64
+ // Step 1: Create upload session
65
+ const sessionResponse = await fetch(`${GRAPH_BASE_URL}${path}:/createUploadSession`, {
66
+ method: 'POST',
67
+ headers: {
68
+ Authorization: `Bearer ${accessToken}`,
69
+ 'Content-Type': 'application/json',
70
+ },
71
+ body: JSON.stringify({
72
+ item: {
73
+ '@microsoft.graph.conflictBehavior': 'rename',
74
+ },
75
+ }),
76
+ });
77
+ if (!sessionResponse.ok) {
78
+ const errorText = await sessionResponse.text();
79
+ throw new Error(`Failed to create upload session: ${errorText}`);
80
+ }
81
+ const session = (await sessionResponse.json());
82
+ // Step 2: Upload in chunks
83
+ let uploadedBytes = 0;
84
+ while (uploadedBytes < fileSize) {
85
+ const chunkEnd = Math.min(uploadedBytes + CHUNK_SIZE, fileSize);
86
+ const chunk = content.slice(uploadedBytes, chunkEnd);
87
+ const chunkResponse = await fetch(session.uploadUrl, {
88
+ method: 'PUT',
89
+ headers: {
90
+ 'Content-Length': chunk.length.toString(),
91
+ 'Content-Range': `bytes ${uploadedBytes}-${chunkEnd - 1}/${fileSize}`,
92
+ },
93
+ body: chunk,
94
+ });
95
+ if (!chunkResponse.ok) {
96
+ const errorText = await chunkResponse.text();
97
+ throw new Error(`Upload chunk failed: ${errorText}`);
98
+ }
99
+ uploadedBytes = chunkEnd;
100
+ if (onProgress) {
101
+ onProgress(uploadedBytes, fileSize);
102
+ }
103
+ // Final chunk returns the completed item
104
+ if (uploadedBytes >= fileSize) {
105
+ return chunkResponse.json();
106
+ }
107
+ }
108
+ throw new Error('Upload completed but no response received');
109
+ }
110
+ export async function graphList(path, options = {}) {
111
+ const { maxItems = 100 } = options;
112
+ const items = [];
113
+ let nextLink = path;
114
+ while (nextLink && items.length < maxItems) {
115
+ const url = nextLink.startsWith('http')
116
+ ? nextLink.replace(GRAPH_BASE_URL, '')
117
+ : nextLink;
118
+ const response = await graphRequest(url);
119
+ if (response.value) {
120
+ items.push(...response.value);
121
+ }
122
+ nextLink = response['@odata.nextLink'];
123
+ }
124
+ return items.slice(0, maxItems);
125
+ }
126
+ //# sourceMappingURL=graph-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-client.js","sourceRoot":"","sources":["../../src/utils/graph-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getSignature(): string | null;
2
+ //# sourceMappingURL=signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/utils/signature.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAU5C"}
@@ -0,0 +1,17 @@
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { homedir } from 'os';
3
+ import { join } from 'path';
4
+ const SIGNATURE_FILE = join(homedir(), '.config', 'myoffice-mcp', 'signature.html');
5
+ export function getSignature() {
6
+ try {
7
+ if (existsSync(SIGNATURE_FILE)) {
8
+ const content = readFileSync(SIGNATURE_FILE, 'utf-8');
9
+ return content.trim() || null;
10
+ }
11
+ }
12
+ catch {
13
+ // Ignore errors, return null
14
+ }
15
+ return null;
16
+ }
17
+ //# sourceMappingURL=signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/utils/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;AAEpF,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function getVersion(): string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAWA,wBAAgB,UAAU,IAAI,MAAM,CAanC"}
@@ -0,0 +1,20 @@
1
+ import { readFileSync } from 'fs';
2
+ import { fileURLToPath } from 'url';
3
+ import { dirname, join } from 'path';
4
+ let cachedVersion = null;
5
+ export function getVersion() {
6
+ if (cachedVersion)
7
+ return cachedVersion;
8
+ try {
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+ const packagePath = join(__dirname, '..', '..', 'package.json');
12
+ const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
13
+ cachedVersion = packageJson.version;
14
+ return cachedVersion;
15
+ }
16
+ catch {
17
+ return 'unknown';
18
+ }
19
+ }
20
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/utils/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAOrC,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,MAAM,UAAU,UAAU;IACxB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAChE,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAChF,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC;QACpC,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@awolve/myoffice",
3
+ "version": "1.6.0",
4
+ "description": "CLI and MCP server for personal Microsoft 365 access - email, calendar, tasks, OneDrive, Teams, Planner",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "myoffice-mcp": "dist/index.js",
9
+ "myoffice": "dist/cli.js"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "prepublishOnly": "npm run build",
17
+ "postinstall": "echo '\n✅ @awolve/myoffice installed!\n\nRun: myoffice --help\nOr: npx @awolve/myoffice --help\n'",
18
+ "start": "node dist/index.js",
19
+ "dev": "tsx src/index.ts",
20
+ "login": "tsx src/cli.ts login"
21
+ },
22
+ "dependencies": {
23
+ "@azure/identity": "^4.2.0",
24
+ "@azure/msal-node": "^2.9.0",
25
+ "@modelcontextprotocol/sdk": "^1.0.0",
26
+ "commander": "^12.1.0",
27
+ "zod": "^3.23.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20.14.0",
31
+ "tsx": "^4.15.0",
32
+ "typescript": "^5.5.0"
33
+ },
34
+ "engines": {
35
+ "node": ">=18"
36
+ },
37
+ "files": [
38
+ "dist/**/*",
39
+ "README.md"
40
+ ],
41
+ "author": "Awolve",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/awolve/ops-myoffice.git"
46
+ },
47
+ "keywords": [
48
+ "mcp",
49
+ "microsoft365",
50
+ "outlook",
51
+ "calendar",
52
+ "ai-assistant",
53
+ "claude"
54
+ ]
55
+ }