@opentabs-dev/opentabs-plugin-microsoft-word 0.0.74
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 +159 -0
- package/dist/adapter.iife.js +15874 -0
- package/dist/adapter.iife.js.map +7 -0
- package/dist/docx-utils.d.ts +63 -0
- package/dist/docx-utils.d.ts.map +1 -0
- package/dist/docx-utils.js +370 -0
- package/dist/docx-utils.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/microsoft-word-api.d.ts +17 -0
- package/dist/microsoft-word-api.d.ts.map +1 -0
- package/dist/microsoft-word-api.js +142 -0
- package/dist/microsoft-word-api.js.map +1 -0
- package/dist/tools/append-to-document.d.ts +8 -0
- package/dist/tools/append-to-document.d.ts.map +1 -0
- package/dist/tools/append-to-document.js +26 -0
- package/dist/tools/append-to-document.js.map +1 -0
- package/dist/tools/copy-item.d.ts +9 -0
- package/dist/tools/copy-item.d.ts.map +1 -0
- package/dist/tools/copy-item.js +69 -0
- package/dist/tools/copy-item.js.map +1 -0
- package/dist/tools/create-document.d.ts +20 -0
- package/dist/tools/create-document.d.ts.map +1 -0
- package/dist/tools/create-document.js +73 -0
- package/dist/tools/create-document.js.map +1 -0
- package/dist/tools/create-folder.d.ts +20 -0
- package/dist/tools/create-folder.d.ts.map +1 -0
- package/dist/tools/create-folder.js +30 -0
- package/dist/tools/create-folder.js.map +1 -0
- package/dist/tools/create-sharing-link.d.ts +22 -0
- package/dist/tools/create-sharing-link.d.ts.map +1 -0
- package/dist/tools/create-sharing-link.js +31 -0
- package/dist/tools/create-sharing-link.js.map +1 -0
- package/dist/tools/delete-item.d.ts +7 -0
- package/dist/tools/delete-item.d.ts.map +1 -0
- package/dist/tools/delete-item.js +24 -0
- package/dist/tools/delete-item.js.map +1 -0
- package/dist/tools/delete-permission.d.ts +8 -0
- package/dist/tools/delete-permission.d.ts.map +1 -0
- package/dist/tools/delete-permission.js +23 -0
- package/dist/tools/delete-permission.js.map +1 -0
- package/dist/tools/docx-edit-helpers.d.ts +10 -0
- package/dist/tools/docx-edit-helpers.d.ts.map +1 -0
- package/dist/tools/docx-edit-helpers.js +103 -0
- package/dist/tools/docx-edit-helpers.js.map +1 -0
- package/dist/tools/get-active-document.d.ts +18 -0
- package/dist/tools/get-active-document.d.ts.map +1 -0
- package/dist/tools/get-active-document.js +50 -0
- package/dist/tools/get-active-document.js.map +1 -0
- package/dist/tools/get-current-user.d.ts +9 -0
- package/dist/tools/get-current-user.d.ts.map +1 -0
- package/dist/tools/get-current-user.js +23 -0
- package/dist/tools/get-current-user.js.map +1 -0
- package/dist/tools/get-document-text.d.ts +8 -0
- package/dist/tools/get-document-text.d.ts.map +1 -0
- package/dist/tools/get-document-text.js +87 -0
- package/dist/tools/get-document-text.js.map +1 -0
- package/dist/tools/get-drive.d.ts +15 -0
- package/dist/tools/get-drive.d.ts.map +1 -0
- package/dist/tools/get-drive.js +19 -0
- package/dist/tools/get-drive.js.map +1 -0
- package/dist/tools/get-file-content.d.ts +8 -0
- package/dist/tools/get-file-content.d.ts.map +1 -0
- package/dist/tools/get-file-content.js +74 -0
- package/dist/tools/get-file-content.js.map +1 -0
- package/dist/tools/get-item.d.ts +19 -0
- package/dist/tools/get-item.d.ts.map +1 -0
- package/dist/tools/get-item.js +25 -0
- package/dist/tools/get-item.js.map +1 -0
- package/dist/tools/get-preview-url.d.ts +7 -0
- package/dist/tools/get-preview-url.d.ts.map +1 -0
- package/dist/tools/get-preview-url.js +22 -0
- package/dist/tools/get-preview-url.js.map +1 -0
- package/dist/tools/list-children.d.ts +21 -0
- package/dist/tools/list-children.d.ts.map +1 -0
- package/dist/tools/list-children.js +33 -0
- package/dist/tools/list-children.js.map +1 -0
- package/dist/tools/list-permissions.d.ts +13 -0
- package/dist/tools/list-permissions.d.ts.map +1 -0
- package/dist/tools/list-permissions.js +23 -0
- package/dist/tools/list-permissions.js.map +1 -0
- package/dist/tools/list-recent-documents.d.ts +19 -0
- package/dist/tools/list-recent-documents.d.ts.map +1 -0
- package/dist/tools/list-recent-documents.js +27 -0
- package/dist/tools/list-recent-documents.js.map +1 -0
- package/dist/tools/list-shared-with-me.d.ts +19 -0
- package/dist/tools/list-shared-with-me.d.ts.map +1 -0
- package/dist/tools/list-shared-with-me.js +28 -0
- package/dist/tools/list-shared-with-me.js.map +1 -0
- package/dist/tools/list-versions.d.ts +11 -0
- package/dist/tools/list-versions.d.ts.map +1 -0
- package/dist/tools/list-versions.js +23 -0
- package/dist/tools/list-versions.js.map +1 -0
- package/dist/tools/move-item.d.ts +20 -0
- package/dist/tools/move-item.d.ts.map +1 -0
- package/dist/tools/move-item.js +27 -0
- package/dist/tools/move-item.js.map +1 -0
- package/dist/tools/rename-item.d.ts +20 -0
- package/dist/tools/rename-item.d.ts.map +1 -0
- package/dist/tools/rename-item.js +27 -0
- package/dist/tools/rename-item.js.map +1 -0
- package/dist/tools/replace-text-in-document.d.ts +10 -0
- package/dist/tools/replace-text-in-document.d.ts.map +1 -0
- package/dist/tools/replace-text-in-document.js +31 -0
- package/dist/tools/replace-text-in-document.js.map +1 -0
- package/dist/tools/restore-version.d.ts +8 -0
- package/dist/tools/restore-version.d.ts.map +1 -0
- package/dist/tools/restore-version.js +23 -0
- package/dist/tools/restore-version.js.map +1 -0
- package/dist/tools/schemas.d.ts +155 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +90 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/search-files.d.ts +20 -0
- package/dist/tools/search-files.d.ts.map +1 -0
- package/dist/tools/search-files.js +29 -0
- package/dist/tools/search-files.js.map +1 -0
- package/dist/tools/update-document.d.ts +8 -0
- package/dist/tools/update-document.d.ts.map +1 -0
- package/dist/tools/update-document.js +26 -0
- package/dist/tools/update-document.js.map +1 -0
- package/dist/tools/update-file-content.d.ts +21 -0
- package/dist/tools/update-file-content.d.ts.map +1 -0
- package/dist/tools/update-file-content.js +66 -0
- package/dist/tools/update-file-content.js.map +1 -0
- package/dist/tools/upload-file.d.ts +21 -0
- package/dist/tools/upload-file.d.ts.map +1 -0
- package/dist/tools/upload-file.js +64 -0
- package/dist/tools/upload-file.js.map +1 -0
- package/dist/tools.json +1940 -0
- package/package.json +55 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { ToolError, buildQueryString, clearAuthCache, findLocalStorageEntry, getAuthCache, getLocalStorage, setAuthCache, waitUntil, } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
const GRAPH_API_BASE = 'https://graph.microsoft.com/v1.0';
|
|
3
|
+
// Microsoft 365 consumer app MSAL client ID
|
|
4
|
+
const MSAL_CLIENT_ID = '2821b473-fe24-4c86-ba16-62834d6e80c3';
|
|
5
|
+
/**
|
|
6
|
+
* Extract the Microsoft Graph API access token from MSAL localStorage cache.
|
|
7
|
+
* MSAL stores tokens with keys containing the client ID, account ID, and scope.
|
|
8
|
+
* The Graph API token has 'graph.microsoft.com' in its scope key.
|
|
9
|
+
*/
|
|
10
|
+
const getAuth = () => {
|
|
11
|
+
const cached = getAuthCache('microsoft-word');
|
|
12
|
+
if (cached)
|
|
13
|
+
return cached;
|
|
14
|
+
// Find the token keys entry for the MSAL client ID
|
|
15
|
+
const tokenKeysRaw = getLocalStorage(`msal.token.keys.${MSAL_CLIENT_ID}`);
|
|
16
|
+
if (!tokenKeysRaw) {
|
|
17
|
+
// Try finding any MSAL token keys entry dynamically
|
|
18
|
+
const entry = findLocalStorageEntry(key => key.startsWith('msal.token.keys.'));
|
|
19
|
+
if (!entry)
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const keysSource = tokenKeysRaw ?? findLocalStorageEntry(key => key.startsWith('msal.token.keys.'))?.value;
|
|
23
|
+
if (!keysSource)
|
|
24
|
+
return null;
|
|
25
|
+
let tokenKeys;
|
|
26
|
+
try {
|
|
27
|
+
tokenKeys = JSON.parse(keysSource);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (!tokenKeys.accessToken)
|
|
33
|
+
return null;
|
|
34
|
+
// Find the Graph API access token (scope contains graph.microsoft.com)
|
|
35
|
+
for (const key of tokenKeys.accessToken) {
|
|
36
|
+
if (!key.includes('graph.microsoft.com'))
|
|
37
|
+
continue;
|
|
38
|
+
const raw = getLocalStorage(key);
|
|
39
|
+
if (!raw)
|
|
40
|
+
continue;
|
|
41
|
+
try {
|
|
42
|
+
const parsed = JSON.parse(raw);
|
|
43
|
+
if (!parsed.secret)
|
|
44
|
+
continue;
|
|
45
|
+
// Check expiration — MSAL stores expiresOn as epoch seconds string
|
|
46
|
+
const expiresOn = Number.parseInt(parsed.expiresOn, 10);
|
|
47
|
+
if (expiresOn && expiresOn * 1000 < Date.now())
|
|
48
|
+
continue;
|
|
49
|
+
const auth = { token: parsed.secret };
|
|
50
|
+
setAuthCache('microsoft-word', auth);
|
|
51
|
+
return auth;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// skip invalid token entries
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Get the raw Graph API access token.
|
|
61
|
+
* Used by tools that need raw fetch (non-JSON body uploads).
|
|
62
|
+
*/
|
|
63
|
+
export const getGraphToken = () => {
|
|
64
|
+
const auth = getAuth();
|
|
65
|
+
if (!auth)
|
|
66
|
+
throw ToolError.auth('Not authenticated — please sign in to Microsoft 365.');
|
|
67
|
+
return auth.token;
|
|
68
|
+
};
|
|
69
|
+
export const isAuthenticated = () => getAuth() !== null;
|
|
70
|
+
export const waitForAuth = () => waitUntil(() => isAuthenticated(), { interval: 500, timeout: 5000 }).then(() => true, () => false);
|
|
71
|
+
/**
|
|
72
|
+
* Make an authenticated request to the Microsoft Graph API.
|
|
73
|
+
* Handles JSON responses, error classification, and token invalidation.
|
|
74
|
+
*/
|
|
75
|
+
export const api = async (endpoint, options = {}) => {
|
|
76
|
+
const auth = getAuth();
|
|
77
|
+
if (!auth)
|
|
78
|
+
throw ToolError.auth('Not authenticated — please sign in to Microsoft 365.');
|
|
79
|
+
const qs = options.query ? buildQueryString(options.query) : '';
|
|
80
|
+
const url = qs ? `${GRAPH_API_BASE}${endpoint}?${qs}` : `${GRAPH_API_BASE}${endpoint}`;
|
|
81
|
+
const method = options.method ?? 'GET';
|
|
82
|
+
const headers = {
|
|
83
|
+
Authorization: `Bearer ${auth.token}`,
|
|
84
|
+
};
|
|
85
|
+
const init = { method, headers };
|
|
86
|
+
if (options.body) {
|
|
87
|
+
headers['Content-Type'] = 'application/json';
|
|
88
|
+
init.body = JSON.stringify(options.body);
|
|
89
|
+
}
|
|
90
|
+
let response;
|
|
91
|
+
try {
|
|
92
|
+
response = await fetch(url, {
|
|
93
|
+
...init,
|
|
94
|
+
credentials: 'omit',
|
|
95
|
+
signal: AbortSignal.timeout(30_000),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
if (err instanceof DOMException && err.name === 'TimeoutError') {
|
|
100
|
+
throw ToolError.timeout('Microsoft Graph API request timed out.');
|
|
101
|
+
}
|
|
102
|
+
if (err instanceof DOMException && err.name === 'AbortError') {
|
|
103
|
+
throw new ToolError('Request aborted', 'aborted');
|
|
104
|
+
}
|
|
105
|
+
throw new ToolError(`Network error: ${err instanceof Error ? err.message : 'unknown'}`, 'network_error', {
|
|
106
|
+
category: 'internal',
|
|
107
|
+
retryable: true,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (response.status === 204)
|
|
111
|
+
return {};
|
|
112
|
+
if (response.status === 429) {
|
|
113
|
+
const retryAfter = response.headers.get('Retry-After');
|
|
114
|
+
const retryMs = retryAfter ? Number.parseInt(retryAfter, 10) * 1000 : undefined;
|
|
115
|
+
throw ToolError.rateLimited('Microsoft Graph API rate limit exceeded.', retryMs);
|
|
116
|
+
}
|
|
117
|
+
if (response.status === 401 || response.status === 403) {
|
|
118
|
+
clearAuthCache('microsoft-word');
|
|
119
|
+
throw ToolError.auth('Authentication expired — please refresh the page.');
|
|
120
|
+
}
|
|
121
|
+
if (response.status === 404) {
|
|
122
|
+
throw ToolError.notFound('The requested resource was not found.');
|
|
123
|
+
}
|
|
124
|
+
if (!response.ok) {
|
|
125
|
+
let errorMsg = `Microsoft Graph API error (${response.status})`;
|
|
126
|
+
try {
|
|
127
|
+
const errBody = (await response.json());
|
|
128
|
+
if (errBody.error?.message) {
|
|
129
|
+
errorMsg = errBody.error.message;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// ignore parse errors
|
|
134
|
+
}
|
|
135
|
+
if (response.status === 400 || response.status === 422) {
|
|
136
|
+
throw ToolError.validation(errorMsg);
|
|
137
|
+
}
|
|
138
|
+
throw ToolError.internal(errorMsg);
|
|
139
|
+
}
|
|
140
|
+
return (await response.json());
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=microsoft-word-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microsoft-word-api.js","sourceRoot":"","sources":["../src/microsoft-word-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const appendToDocument: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
item_id: z.ZodString;
|
|
4
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
success: z.ZodBoolean;
|
|
7
|
+
}, z.core.$strip>>;
|
|
8
|
+
//# sourceMappingURL=append-to-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"append-to-document.d.ts","sourceRoot":"","sources":["../../src/tools/append-to-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;;kBAwB3B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { appendParagraphsToXml } from '../docx-utils.js';
|
|
4
|
+
import { downloadDocxEntries, uploadModifiedDocx } from './docx-edit-helpers.js';
|
|
5
|
+
export const appendToDocument = defineTool({
|
|
6
|
+
name: 'append_to_document',
|
|
7
|
+
displayName: 'Append to Document',
|
|
8
|
+
description: 'Append paragraphs to the end of an existing Word document (.docx). Downloads the document, adds the new paragraphs after all existing content, and re-uploads. Existing content is preserved.',
|
|
9
|
+
summary: 'Append paragraphs to a Word document',
|
|
10
|
+
icon: 'file-plus-2',
|
|
11
|
+
group: 'Documents',
|
|
12
|
+
input: z.object({
|
|
13
|
+
item_id: z.string().describe('File ID of the .docx document to append to'),
|
|
14
|
+
paragraphs: z.array(z.string()).min(1).describe('Text paragraphs to append at the end of the document'),
|
|
15
|
+
}),
|
|
16
|
+
output: z.object({
|
|
17
|
+
success: z.boolean().describe('Whether the paragraphs were appended'),
|
|
18
|
+
}),
|
|
19
|
+
handle: async (params) => {
|
|
20
|
+
const { entries, documentXml, documentXmlIndex } = await downloadDocxEntries(params.item_id);
|
|
21
|
+
const newXml = appendParagraphsToXml(documentXml, params.paragraphs);
|
|
22
|
+
await uploadModifiedDocx(params.item_id, entries, documentXmlIndex, newXml);
|
|
23
|
+
return { success: true };
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=append-to-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"append-to-document.js","sourceRoot":"","sources":["../../src/tools/append-to-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EACT,+LAA+L;IACjM,OAAO,EAAE,sCAAsC;IAC/C,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QAC1E,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;KACxG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KACtE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE7F,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAErE,MAAM,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAE5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const copyItem: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
item_id: z.ZodString;
|
|
4
|
+
destination_id: z.ZodString;
|
|
5
|
+
name: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
success: z.ZodBoolean;
|
|
8
|
+
}, z.core.$strip>>;
|
|
9
|
+
//# sourceMappingURL=copy-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-item.d.ts","sourceRoot":"","sources":["../../src/tools/copy-item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,QAAQ;;;;;;kBAoEnB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ToolError, clearAuthCache, defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getGraphToken } from '../microsoft-word-api.js';
|
|
4
|
+
const GRAPH_API_BASE = 'https://graph.microsoft.com/v1.0';
|
|
5
|
+
export const copyItem = defineTool({
|
|
6
|
+
name: 'copy_item',
|
|
7
|
+
displayName: 'Copy Item',
|
|
8
|
+
description: 'Copy a file or folder. The copy operation is asynchronous — returns success immediately. The new copy appears in the destination folder shortly after.',
|
|
9
|
+
summary: 'Copy a file or folder',
|
|
10
|
+
icon: 'copy',
|
|
11
|
+
group: 'Files',
|
|
12
|
+
input: z.object({
|
|
13
|
+
item_id: z.string().describe('ID of the file or folder to copy'),
|
|
14
|
+
destination_id: z.string().describe('ID of the destination folder'),
|
|
15
|
+
name: z.string().optional().describe('New name for the copy — defaults to original name'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({
|
|
18
|
+
success: z.boolean().describe('Whether the copy operation was accepted'),
|
|
19
|
+
}),
|
|
20
|
+
handle: async (params) => {
|
|
21
|
+
const token = getGraphToken();
|
|
22
|
+
const url = `${GRAPH_API_BASE}/me/drive/items/${params.item_id}/copy`;
|
|
23
|
+
const body = {
|
|
24
|
+
parentReference: { id: params.destination_id },
|
|
25
|
+
};
|
|
26
|
+
if (params.name !== undefined)
|
|
27
|
+
body.name = params.name;
|
|
28
|
+
let response;
|
|
29
|
+
try {
|
|
30
|
+
response = await fetch(url, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
credentials: 'omit',
|
|
33
|
+
headers: {
|
|
34
|
+
Authorization: `Bearer ${token}`,
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
},
|
|
37
|
+
body: JSON.stringify(body),
|
|
38
|
+
signal: AbortSignal.timeout(30_000),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (err instanceof DOMException && err.name === 'TimeoutError') {
|
|
43
|
+
throw ToolError.timeout('Microsoft Graph API request timed out.');
|
|
44
|
+
}
|
|
45
|
+
throw ToolError.internal(`Network error: ${err instanceof Error ? err.message : 'unknown'}`);
|
|
46
|
+
}
|
|
47
|
+
if (response.status === 401 || response.status === 403) {
|
|
48
|
+
clearAuthCache('microsoft-word');
|
|
49
|
+
throw ToolError.auth('Authentication expired — please refresh the page.');
|
|
50
|
+
}
|
|
51
|
+
if (response.status === 404) {
|
|
52
|
+
throw ToolError.notFound('The requested item was not found.');
|
|
53
|
+
}
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
let errorMsg = `Microsoft Graph API error (${response.status})`;
|
|
56
|
+
try {
|
|
57
|
+
const errBody = (await response.json());
|
|
58
|
+
if (errBody.error?.message)
|
|
59
|
+
errorMsg = errBody.error.message;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// ignore parse errors
|
|
63
|
+
}
|
|
64
|
+
throw ToolError.internal(errorMsg);
|
|
65
|
+
}
|
|
66
|
+
return { success: true };
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=copy-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-item.js","sourceRoot":"","sources":["../../src/tools/copy-item.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const createDocument: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
path: z.ZodString;
|
|
4
|
+
paragraphs: z.ZodArray<z.ZodString>;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
item: z.ZodObject<{
|
|
7
|
+
id: z.ZodString;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
size: z.ZodNumber;
|
|
10
|
+
is_folder: z.ZodBoolean;
|
|
11
|
+
mime_type: z.ZodString;
|
|
12
|
+
web_url: z.ZodString;
|
|
13
|
+
created_at: z.ZodString;
|
|
14
|
+
last_modified_at: z.ZodString;
|
|
15
|
+
parent_path: z.ZodString;
|
|
16
|
+
parent_id: z.ZodString;
|
|
17
|
+
description: z.ZodString;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
//# sourceMappingURL=create-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-document.d.ts","sourceRoot":"","sources":["../../src/tools/create-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;kBAuEzB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { ToolError, clearAuthCache, defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { buildDocx } from '../docx-utils.js';
|
|
4
|
+
import { getGraphToken } from '../microsoft-word-api.js';
|
|
5
|
+
import { driveItemSchema, mapDriveItem } from './schemas.js';
|
|
6
|
+
const GRAPH_API_BASE = 'https://graph.microsoft.com/v1.0';
|
|
7
|
+
export const createDocument = defineTool({
|
|
8
|
+
name: 'create_document',
|
|
9
|
+
displayName: 'Create Document',
|
|
10
|
+
description: 'Create a new Word document (.docx) with the given text content. Each string in the paragraphs array becomes a separate paragraph in the document. The file is created at the specified path in OneDrive.',
|
|
11
|
+
summary: 'Create a new Word document with text',
|
|
12
|
+
icon: 'file-plus',
|
|
13
|
+
group: 'Documents',
|
|
14
|
+
input: z.object({
|
|
15
|
+
path: z
|
|
16
|
+
.string()
|
|
17
|
+
.min(1)
|
|
18
|
+
.describe('File path relative to drive root, must end with .docx (e.g., "Documents/report.docx")'),
|
|
19
|
+
paragraphs: z.array(z.string()).min(1).describe('Array of text paragraphs for the document content'),
|
|
20
|
+
}),
|
|
21
|
+
output: z.object({
|
|
22
|
+
item: driveItemSchema.describe('The created document'),
|
|
23
|
+
}),
|
|
24
|
+
handle: async (params) => {
|
|
25
|
+
const token = getGraphToken();
|
|
26
|
+
const docxBytes = buildDocx(params.paragraphs);
|
|
27
|
+
// Create a clean ArrayBuffer copy for the fetch body.
|
|
28
|
+
// buildDocx returns Uint8Array whose .buffer is ArrayBufferLike — TS doesn't
|
|
29
|
+
// accept that as BodyInit. Constructing a new ArrayBuffer via slice fixes it.
|
|
30
|
+
const body = new ArrayBuffer(docxBytes.byteLength);
|
|
31
|
+
new Uint8Array(body).set(docxBytes);
|
|
32
|
+
const encodedPath = encodeURIComponent(params.path).replace(/%2F/g, '/');
|
|
33
|
+
const url = `${GRAPH_API_BASE}/me/drive/root:/${encodedPath}:/content`;
|
|
34
|
+
let response;
|
|
35
|
+
try {
|
|
36
|
+
response = await fetch(url, {
|
|
37
|
+
method: 'PUT',
|
|
38
|
+
credentials: 'omit',
|
|
39
|
+
headers: {
|
|
40
|
+
Authorization: `Bearer ${token}`,
|
|
41
|
+
'Content-Type': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
42
|
+
},
|
|
43
|
+
body,
|
|
44
|
+
signal: AbortSignal.timeout(30_000),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err instanceof DOMException && err.name === 'TimeoutError') {
|
|
49
|
+
throw ToolError.timeout('Microsoft Graph API request timed out.');
|
|
50
|
+
}
|
|
51
|
+
throw ToolError.internal(`Network error: ${err instanceof Error ? err.message : 'unknown'}`);
|
|
52
|
+
}
|
|
53
|
+
if (response.status === 401 || response.status === 403) {
|
|
54
|
+
clearAuthCache('microsoft-word');
|
|
55
|
+
throw ToolError.auth('Authentication expired — please refresh the page.');
|
|
56
|
+
}
|
|
57
|
+
if (!response.ok) {
|
|
58
|
+
let errorMsg = `Microsoft Graph API error (${response.status})`;
|
|
59
|
+
try {
|
|
60
|
+
const errBody = (await response.json());
|
|
61
|
+
if (errBody.error?.message)
|
|
62
|
+
errorMsg = errBody.error.message;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// ignore parse errors
|
|
66
|
+
}
|
|
67
|
+
throw ToolError.internal(errorMsg);
|
|
68
|
+
}
|
|
69
|
+
const data = (await response.json());
|
|
70
|
+
return { item: mapDriveItem(data) };
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=create-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-document.js","sourceRoot":"","sources":["../../src/tools/create-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const createFolder: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
parent_id: z.ZodOptional<z.ZodString>;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
item: z.ZodObject<{
|
|
7
|
+
id: z.ZodString;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
size: z.ZodNumber;
|
|
10
|
+
is_folder: z.ZodBoolean;
|
|
11
|
+
mime_type: z.ZodString;
|
|
12
|
+
web_url: z.ZodString;
|
|
13
|
+
created_at: z.ZodString;
|
|
14
|
+
last_modified_at: z.ZodString;
|
|
15
|
+
parent_path: z.ZodString;
|
|
16
|
+
parent_id: z.ZodString;
|
|
17
|
+
description: z.ZodString;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
//# sourceMappingURL=create-folder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-folder.d.ts","sourceRoot":"","sources":["../../src/tools/create-folder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;kBAyBvB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { api } from '../microsoft-word-api.js';
|
|
4
|
+
import { driveItemSchema, mapDriveItem } from './schemas.js';
|
|
5
|
+
export const createFolder = defineTool({
|
|
6
|
+
name: 'create_folder',
|
|
7
|
+
displayName: 'Create Folder',
|
|
8
|
+
description: 'Create a new folder. Specify parent_id for nested folders, omit for root.',
|
|
9
|
+
summary: 'Create a folder',
|
|
10
|
+
icon: 'folder-plus',
|
|
11
|
+
group: 'Files',
|
|
12
|
+
input: z.object({
|
|
13
|
+
name: z.string().min(1).describe('Folder name'),
|
|
14
|
+
parent_id: z.string().optional().describe('Parent folder ID — omit for drive root'),
|
|
15
|
+
}),
|
|
16
|
+
output: z.object({ item: driveItemSchema }),
|
|
17
|
+
handle: async (params) => {
|
|
18
|
+
const base = params.parent_id ? `/me/drive/items/${params.parent_id}/children` : '/me/drive/root/children';
|
|
19
|
+
const data = await api(base, {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
body: {
|
|
22
|
+
name: params.name,
|
|
23
|
+
folder: {},
|
|
24
|
+
'@microsoft.graph.conflictBehavior': 'rename',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
return { item: mapDriveItem(data) };
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=create-folder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-folder.js","sourceRoot":"","sources":["../../src/tools/create-folder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAqB,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,2EAA2E;IACxF,OAAO,EAAE,iBAAiB;IAC1B,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACpF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAC3C,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,MAAM,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC;QAE3G,MAAM,IAAI,GAAG,MAAM,GAAG,CAAe,IAAI,EAAE;YACzC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,EAAE;gBACV,mCAAmC,EAAE,QAAQ;aAC9C;SACF,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const createSharingLink: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
item_id: z.ZodString;
|
|
4
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
5
|
+
edit: "edit";
|
|
6
|
+
view: "view";
|
|
7
|
+
embed: "embed";
|
|
8
|
+
}>>;
|
|
9
|
+
scope: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
anonymous: "anonymous";
|
|
11
|
+
organization: "organization";
|
|
12
|
+
}>>;
|
|
13
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
14
|
+
permission: z.ZodObject<{
|
|
15
|
+
id: z.ZodString;
|
|
16
|
+
roles: z.ZodArray<z.ZodString>;
|
|
17
|
+
link_url: z.ZodString;
|
|
18
|
+
link_type: z.ZodString;
|
|
19
|
+
granted_to: z.ZodString;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
}, z.core.$strip>>;
|
|
22
|
+
//# sourceMappingURL=create-sharing-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-sharing-link.d.ts","sourceRoot":"","sources":["../../src/tools/create-sharing-link.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;kBAyB5B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { api } from '../microsoft-word-api.js';
|
|
4
|
+
import { mapPermission, permissionSchema } from './schemas.js';
|
|
5
|
+
export const createSharingLink = defineTool({
|
|
6
|
+
name: 'create_sharing_link',
|
|
7
|
+
displayName: 'Create Sharing Link',
|
|
8
|
+
description: 'Create a sharing link for a file or folder. Returns a URL that can be shared with others.',
|
|
9
|
+
summary: 'Create a sharing link for a file or folder',
|
|
10
|
+
icon: 'link',
|
|
11
|
+
group: 'Sharing',
|
|
12
|
+
input: z.object({
|
|
13
|
+
item_id: z.string().describe('File or folder ID'),
|
|
14
|
+
type: z.enum(['view', 'edit', 'embed']).optional().describe('Link type (default "view")'),
|
|
15
|
+
scope: z.enum(['anonymous', 'organization']).optional().describe('Link scope (default "anonymous")'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({
|
|
18
|
+
permission: permissionSchema.describe('The created sharing permission'),
|
|
19
|
+
}),
|
|
20
|
+
handle: async (params) => {
|
|
21
|
+
const data = await api(`/me/drive/items/${params.item_id}/createLink`, {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
body: {
|
|
24
|
+
type: params.type ?? 'view',
|
|
25
|
+
scope: params.scope ?? 'anonymous',
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
return { permission: mapPermission(data) };
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=create-sharing-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-sharing-link.js","sourceRoot":"","sources":["../../src/tools/create-sharing-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAsB,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEnF,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,2FAA2F;IACxG,OAAO,EAAE,4CAA4C;IACrD,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACzF,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KACrG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAgB,mBAAmB,MAAM,CAAC,OAAO,aAAa,EAAE;YACpF,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,WAAW;aACnC;SACF,CAAC,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const deleteItem: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
item_id: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
5
|
+
success: z.ZodBoolean;
|
|
6
|
+
}, z.core.$strip>>;
|
|
7
|
+
//# sourceMappingURL=delete-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-item.d.ts","sourceRoot":"","sources":["../../src/tools/delete-item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,UAAU;;;;kBAmBrB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { api } from '../microsoft-word-api.js';
|
|
4
|
+
export const deleteItem = defineTool({
|
|
5
|
+
name: 'delete_item',
|
|
6
|
+
displayName: 'Delete Item',
|
|
7
|
+
description: 'Permanently delete a file or folder. This action cannot be undone.',
|
|
8
|
+
summary: 'Delete a file or folder',
|
|
9
|
+
icon: 'trash-2',
|
|
10
|
+
group: 'Files',
|
|
11
|
+
input: z.object({
|
|
12
|
+
item_id: z.string().describe('ID of the file or folder to delete'),
|
|
13
|
+
}),
|
|
14
|
+
output: z.object({
|
|
15
|
+
success: z.boolean().describe('Whether the deletion succeeded'),
|
|
16
|
+
}),
|
|
17
|
+
handle: async (params) => {
|
|
18
|
+
await api(`/me/drive/items/${params.item_id}`, {
|
|
19
|
+
method: 'DELETE',
|
|
20
|
+
});
|
|
21
|
+
return { success: true };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=delete-item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-item.js","sourceRoot":"","sources":["../../src/tools/delete-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE/C,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,oEAAoE;IACjF,OAAO,EAAE,yBAAyB;IAClC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KACnE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAChE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,GAAG,CAAC,mBAAmB,MAAM,CAAC,OAAO,EAAE,EAAE;YAC7C,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const deletePermission: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
item_id: z.ZodString;
|
|
4
|
+
permission_id: z.ZodString;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
success: z.ZodBoolean;
|
|
7
|
+
}, z.core.$strip>>;
|
|
8
|
+
//# sourceMappingURL=delete-permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-permission.d.ts","sourceRoot":"","sources":["../../src/tools/delete-permission.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,gBAAgB;;;;;kBAkB3B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { api } from '../microsoft-word-api.js';
|
|
4
|
+
export const deletePermission = defineTool({
|
|
5
|
+
name: 'delete_permission',
|
|
6
|
+
displayName: 'Delete Permission',
|
|
7
|
+
description: 'Remove a sharing permission from a file or folder.',
|
|
8
|
+
summary: 'Remove a sharing permission',
|
|
9
|
+
icon: 'shield-x',
|
|
10
|
+
group: 'Sharing',
|
|
11
|
+
input: z.object({
|
|
12
|
+
item_id: z.string().describe('File or folder ID'),
|
|
13
|
+
permission_id: z.string().describe('Permission ID to remove'),
|
|
14
|
+
}),
|
|
15
|
+
output: z.object({
|
|
16
|
+
success: z.boolean().describe('Whether the permission was removed'),
|
|
17
|
+
}),
|
|
18
|
+
handle: async ({ item_id, permission_id }) => {
|
|
19
|
+
await api(`/me/drive/items/${item_id}/permissions/${permission_id}`, { method: 'DELETE' });
|
|
20
|
+
return { success: true };
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=delete-permission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-permission.js","sourceRoot":"","sources":["../../src/tools/delete-permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,oDAAoD;IACjE,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAC9D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KACpE,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE;QAC3C,MAAM,GAAG,CAAC,mBAAmB,OAAO,gBAAgB,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ZipEntry } from '../docx-utils.js';
|
|
2
|
+
/** Download a .docx file and return all ZIP entries plus the document.xml as text. */
|
|
3
|
+
export declare function downloadDocxEntries(itemId: string): Promise<{
|
|
4
|
+
entries: ZipEntry[];
|
|
5
|
+
documentXml: string;
|
|
6
|
+
documentXmlIndex: number;
|
|
7
|
+
}>;
|
|
8
|
+
/** Replace the document.xml in entries and re-upload the .docx to OneDrive. */
|
|
9
|
+
export declare function uploadModifiedDocx(itemId: string, entries: ZipEntry[], documentXmlIndex: number, newDocumentXml: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=docx-edit-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docx-edit-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/docx-edit-helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAoC,MAAM,kBAAkB,CAAC;AAMnF,sFAAsF;AACtF,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC,CAuCD;AAED,+EAA+E;AAC/E,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,QAAQ,EAAE,EACnB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|