@rnsk/toolkits 0.0.4 → 0.0.6

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 (109) hide show
  1. package/README.md +13 -8
  2. package/dist/core/index.d.ts +1 -1
  3. package/dist/core/types.d.ts +43 -1
  4. package/dist/core/validate.d.ts +1 -1
  5. package/dist/core/validate.js +14 -2
  6. package/dist/index.d.ts +5 -1
  7. package/dist/index.js +9 -1
  8. package/dist/toolkits/aws/icon.d.ts +5 -0
  9. package/dist/toolkits/aws/icon.js +41 -0
  10. package/dist/toolkits/aws/manifest.d.ts +3 -0
  11. package/dist/toolkits/aws/manifest.js +27 -0
  12. package/dist/toolkits/aws/tools/client.d.ts +13 -0
  13. package/dist/toolkits/aws/tools/client.js +25 -0
  14. package/dist/toolkits/aws/tools/cloudwatch/filter-log-events.d.ts +26 -0
  15. package/dist/toolkits/aws/tools/cloudwatch/filter-log-events.js +45 -0
  16. package/dist/toolkits/aws/tools/cloudwatch/get-metric-data.d.ts +35 -0
  17. package/dist/toolkits/aws/tools/cloudwatch/get-metric-data.js +62 -0
  18. package/dist/toolkits/aws/tools/cloudwatch/list-alarms.d.ts +29 -0
  19. package/dist/toolkits/aws/tools/cloudwatch/list-alarms.js +46 -0
  20. package/dist/toolkits/aws/tools/cloudwatch/list-log-groups.d.ts +25 -0
  21. package/dist/toolkits/aws/tools/cloudwatch/list-log-groups.js +38 -0
  22. package/dist/toolkits/aws/tools/ec2/get-instance.d.ts +65 -0
  23. package/dist/toolkits/aws/tools/ec2/get-instance.js +46 -0
  24. package/dist/toolkits/aws/tools/ec2/list-instances.d.ts +30 -0
  25. package/dist/toolkits/aws/tools/ec2/list-instances.js +46 -0
  26. package/dist/toolkits/aws/tools/ec2/start-instance.d.ts +24 -0
  27. package/dist/toolkits/aws/tools/ec2/start-instance.js +31 -0
  28. package/dist/toolkits/aws/tools/ec2/stop-instance.d.ts +24 -0
  29. package/dist/toolkits/aws/tools/ec2/stop-instance.js +31 -0
  30. package/dist/toolkits/aws/tools/index.d.ts +273 -0
  31. package/dist/toolkits/aws/tools/index.js +68 -0
  32. package/dist/toolkits/gcp/icon.d.ts +5 -0
  33. package/dist/toolkits/gcp/icon.js +5 -0
  34. package/dist/toolkits/gcp/manifest.d.ts +3 -0
  35. package/dist/toolkits/gcp/manifest.js +27 -0
  36. package/dist/toolkits/gcp/tools/client.d.ts +12 -0
  37. package/dist/toolkits/gcp/tools/client.js +24 -0
  38. package/dist/toolkits/gcp/tools/compute/get-instance.d.ts +36 -0
  39. package/dist/toolkits/gcp/tools/compute/get-instance.js +37 -0
  40. package/dist/toolkits/gcp/tools/compute/list-instances.d.ts +20 -0
  41. package/dist/toolkits/gcp/tools/compute/list-instances.js +62 -0
  42. package/dist/toolkits/gcp/tools/compute/start-instance.d.ts +27 -0
  43. package/dist/toolkits/gcp/tools/compute/start-instance.js +29 -0
  44. package/dist/toolkits/gcp/tools/compute/stop-instance.d.ts +27 -0
  45. package/dist/toolkits/gcp/tools/compute/stop-instance.js +29 -0
  46. package/dist/toolkits/gcp/tools/index.d.ts +162 -0
  47. package/dist/toolkits/gcp/tools/index.js +52 -0
  48. package/dist/toolkits/gcp/tools/monitoring/get-metrics.d.ts +26 -0
  49. package/dist/toolkits/gcp/tools/monitoring/get-metrics.js +53 -0
  50. package/dist/toolkits/gcp/tools/monitoring/list-metric-descriptors.d.ts +24 -0
  51. package/dist/toolkits/gcp/tools/monitoring/list-metric-descriptors.js +40 -0
  52. package/dist/toolkits/gmail/manifest.js +1 -1
  53. package/dist/toolkits/google-calendar/manifest.js +1 -6
  54. package/dist/toolkits/google-docs/icon.d.ts +5 -0
  55. package/dist/toolkits/google-docs/icon.js +6 -0
  56. package/dist/toolkits/google-docs/manifest.d.ts +3 -0
  57. package/dist/toolkits/google-docs/manifest.js +40 -0
  58. package/dist/toolkits/google-docs/tools/append-text.d.ts +30 -0
  59. package/dist/toolkits/google-docs/tools/append-text.js +48 -0
  60. package/dist/toolkits/google-docs/tools/copy-document.d.ts +27 -0
  61. package/dist/toolkits/google-docs/tools/copy-document.js +43 -0
  62. package/dist/toolkits/google-docs/tools/create-document.d.ts +26 -0
  63. package/dist/toolkits/google-docs/tools/create-document.js +39 -0
  64. package/dist/toolkits/google-docs/tools/delete-content.d.ts +28 -0
  65. package/dist/toolkits/google-docs/tools/delete-content.js +45 -0
  66. package/dist/toolkits/google-docs/tools/delete-document.d.ts +23 -0
  67. package/dist/toolkits/google-docs/tools/delete-document.js +30 -0
  68. package/dist/toolkits/google-docs/tools/get-document-text.d.ts +26 -0
  69. package/dist/toolkits/google-docs/tools/get-document-text.js +35 -0
  70. package/dist/toolkits/google-docs/tools/get-document.d.ts +5 -0
  71. package/dist/toolkits/google-docs/tools/get-document.js +29 -0
  72. package/dist/toolkits/google-docs/tools/index.d.ts +299 -0
  73. package/dist/toolkits/google-docs/tools/index.js +85 -0
  74. package/dist/toolkits/google-docs/tools/insert-text.d.ts +28 -0
  75. package/dist/toolkits/google-docs/tools/insert-text.js +39 -0
  76. package/dist/toolkits/google-docs/tools/list-documents.d.ts +21 -0
  77. package/dist/toolkits/google-docs/tools/list-documents.js +39 -0
  78. package/dist/toolkits/google-docs/tools/replace-text.d.ts +32 -0
  79. package/dist/toolkits/google-docs/tools/replace-text.js +48 -0
  80. package/dist/toolkits/google-docs/tools/utils.d.ts +12 -0
  81. package/dist/toolkits/google-docs/tools/utils.js +48 -0
  82. package/dist/toolkits/google-drive/icon.d.ts +5 -0
  83. package/dist/toolkits/google-drive/icon.js +6 -0
  84. package/dist/toolkits/google-drive/manifest.d.ts +3 -0
  85. package/dist/toolkits/google-drive/manifest.js +37 -0
  86. package/dist/toolkits/google-drive/tools/copy-file.d.ts +7 -0
  87. package/dist/toolkits/google-drive/tools/copy-file.js +41 -0
  88. package/dist/toolkits/google-drive/tools/create-folder.d.ts +6 -0
  89. package/dist/toolkits/google-drive/tools/create-folder.js +42 -0
  90. package/dist/toolkits/google-drive/tools/delete-file.d.ts +23 -0
  91. package/dist/toolkits/google-drive/tools/delete-file.js +30 -0
  92. package/dist/toolkits/google-drive/tools/download-file.d.ts +30 -0
  93. package/dist/toolkits/google-drive/tools/download-file.js +61 -0
  94. package/dist/toolkits/google-drive/tools/get-file.d.ts +5 -0
  95. package/dist/toolkits/google-drive/tools/get-file.js +31 -0
  96. package/dist/toolkits/google-drive/tools/index.d.ts +188 -0
  97. package/dist/toolkits/google-drive/tools/index.js +85 -0
  98. package/dist/toolkits/google-drive/tools/list-files.d.ts +21 -0
  99. package/dist/toolkits/google-drive/tools/list-files.js +42 -0
  100. package/dist/toolkits/google-drive/tools/move-file.d.ts +7 -0
  101. package/dist/toolkits/google-drive/tools/move-file.js +51 -0
  102. package/dist/toolkits/google-drive/tools/search-files.d.ts +21 -0
  103. package/dist/toolkits/google-drive/tools/search-files.js +36 -0
  104. package/dist/toolkits/google-drive/tools/update-file.d.ts +7 -0
  105. package/dist/toolkits/google-drive/tools/update-file.js +44 -0
  106. package/dist/toolkits/google-drive/tools/upload-file.d.ts +8 -0
  107. package/dist/toolkits/google-drive/tools/upload-file.js +58 -0
  108. package/dist/toolkits/google-sheets/manifest.js +1 -6
  109. package/package.json +22 -2
@@ -0,0 +1,21 @@
1
+ export declare const listDocuments: import("ai").Tool<{
2
+ pageSize: number;
3
+ googleDocsToken: string;
4
+ q?: string | undefined;
5
+ }, {
6
+ error: string;
7
+ details: any;
8
+ documents?: undefined;
9
+ message?: undefined;
10
+ } | {
11
+ documents: any;
12
+ error?: undefined;
13
+ details?: undefined;
14
+ message?: undefined;
15
+ } | {
16
+ error: string;
17
+ message: string;
18
+ details?: undefined;
19
+ documents?: undefined;
20
+ }>;
21
+ //# sourceMappingURL=list-documents.d.ts.map
@@ -0,0 +1,39 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ export const listDocuments = tool({
5
+ description: 'List Google Docs documents in the user\'s Drive.',
6
+ inputSchema: z.object({
7
+ googleDocsToken: z.string().describe('The Google Docs access token'),
8
+ q: z.string().optional().describe('Optional name search query'),
9
+ pageSize: z.number().optional().default(20).describe('Maximum number of documents to return'),
10
+ }),
11
+ execute: async ({ googleDocsToken, q, pageSize = 20 }) => {
12
+ try {
13
+ const url = new URL('https://www.googleapis.com/drive/v3/files');
14
+ let query = "mimeType='application/vnd.google-apps.document' and trashed = false";
15
+ if (q) {
16
+ query += ` and name contains '${q.replace(/'/g, "\\'")}'`;
17
+ }
18
+ url.searchParams.set('q', query);
19
+ url.searchParams.set('pageSize', String(pageSize));
20
+ url.searchParams.set('fields', 'files(id,name,modifiedTime,webViewLink)');
21
+ const response = await fetch(url.toString(), {
22
+ headers: { Authorization: `Bearer ${googleDocsToken}` },
23
+ });
24
+ if (!response.ok) {
25
+ const error = await response.json();
26
+ return { error: 'Failed to list documents', details: error };
27
+ }
28
+ const data = await response.json();
29
+ return { documents: data.files ?? [] };
30
+ }
31
+ catch (error) {
32
+ return {
33
+ error: 'Error listing documents',
34
+ message: error instanceof Error ? error.message : 'Unknown error',
35
+ };
36
+ }
37
+ },
38
+ });
39
+ //# sourceMappingURL=list-documents.js.map
@@ -0,0 +1,32 @@
1
+ export declare const replaceText: import("ai").Tool<{
2
+ googleDocsToken: string;
3
+ documentId: string;
4
+ findText: string;
5
+ replaceText: string;
6
+ matchCase: boolean;
7
+ }, {
8
+ error: string;
9
+ details: any;
10
+ success?: undefined;
11
+ documentId?: undefined;
12
+ occurrencesChanged?: undefined;
13
+ replies?: undefined;
14
+ message?: undefined;
15
+ } | {
16
+ success: boolean;
17
+ documentId: string;
18
+ occurrencesChanged: any;
19
+ replies: any;
20
+ error?: undefined;
21
+ details?: undefined;
22
+ message?: undefined;
23
+ } | {
24
+ error: string;
25
+ message: string;
26
+ details?: undefined;
27
+ success?: undefined;
28
+ documentId?: undefined;
29
+ occurrencesChanged?: undefined;
30
+ replies?: undefined;
31
+ }>;
32
+ //# sourceMappingURL=replace-text.d.ts.map
@@ -0,0 +1,48 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ export const replaceText = tool({
5
+ description: 'Find and replace all occurrences of text in a Google Docs document.',
6
+ inputSchema: z.object({
7
+ googleDocsToken: z.string().describe('The Google Docs access token'),
8
+ documentId: z.string().describe('The ID of the document'),
9
+ findText: z.string().describe('Text to find'),
10
+ replaceText: z.string().describe('Replacement text'),
11
+ matchCase: z.boolean().optional().default(false).describe('Whether the search is case-sensitive'),
12
+ }),
13
+ execute: async ({ googleDocsToken, documentId, findText, replaceText: replacement, matchCase = false }) => {
14
+ try {
15
+ const response = await fetch(`https://docs.googleapis.com/v1/documents/${documentId}:batchUpdate`, {
16
+ method: 'POST',
17
+ headers: {
18
+ Authorization: `Bearer ${googleDocsToken}`,
19
+ 'Content-Type': 'application/json',
20
+ },
21
+ body: JSON.stringify({
22
+ requests: [
23
+ {
24
+ replaceAllText: {
25
+ containsText: { text: findText, matchCase },
26
+ replaceText: replacement,
27
+ },
28
+ },
29
+ ],
30
+ }),
31
+ });
32
+ if (!response.ok) {
33
+ const error = await response.json();
34
+ return { error: 'Failed to replace text', details: error };
35
+ }
36
+ const data = await response.json();
37
+ const occurrencesChanged = data.replies?.[0]?.replaceAllText?.occurrencesChanged ?? 0;
38
+ return { success: true, documentId, occurrencesChanged, replies: data.replies };
39
+ }
40
+ catch (error) {
41
+ return {
42
+ error: 'Error replacing text',
43
+ message: error instanceof Error ? error.message : 'Unknown error',
44
+ };
45
+ }
46
+ },
47
+ });
48
+ //# sourceMappingURL=replace-text.js.map
@@ -0,0 +1,12 @@
1
+ export declare function extractPlainText(document: {
2
+ body?: {
3
+ content?: Array<Record<string, unknown>>;
4
+ };
5
+ title?: string;
6
+ }): string;
7
+ export declare function getDocumentEndIndex(document: {
8
+ body?: {
9
+ content?: Array<Record<string, unknown>>;
10
+ };
11
+ }): number;
12
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1,48 @@
1
+ // @ts-nocheck
2
+ export function extractPlainText(document) {
3
+ const parts = [];
4
+ const content = document.body?.content ?? [];
5
+ for (const element of content) {
6
+ if (element.paragraph) {
7
+ const paragraph = element.paragraph;
8
+ for (const el of paragraph.elements ?? []) {
9
+ if (el.textRun) {
10
+ const textRun = el.textRun;
11
+ if (textRun.content)
12
+ parts.push(textRun.content);
13
+ }
14
+ }
15
+ }
16
+ else if (element.table) {
17
+ const table = element.table;
18
+ for (const row of table.tableRows ?? []) {
19
+ const tableRow = row;
20
+ for (const cell of tableRow.tableCells ?? []) {
21
+ const tableCell = cell;
22
+ for (const cellEl of tableCell.content ?? []) {
23
+ if (cellEl.paragraph) {
24
+ const paragraph = cellEl.paragraph;
25
+ for (const el of paragraph.elements ?? []) {
26
+ if (el.textRun) {
27
+ const textRun = el.textRun;
28
+ if (textRun.content)
29
+ parts.push(textRun.content);
30
+ }
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ return parts.join('');
39
+ }
40
+ export function getDocumentEndIndex(document) {
41
+ const content = document.body?.content ?? [];
42
+ if (content.length === 0)
43
+ return 1;
44
+ const last = content[content.length - 1];
45
+ const endIndex = last.endIndex;
46
+ return typeof endIndex === 'number' ? endIndex - 1 : 1;
47
+ }
48
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,5 @@
1
+ export declare const GDRIVE_ICON: {
2
+ kind: "svg";
3
+ dataUri: string;
4
+ };
5
+ //# sourceMappingURL=icon.d.ts.map
@@ -0,0 +1,6 @@
1
+ const SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="192" height="192" viewBox="0 0 192 192" fill="none"><mask id="a" width="168" height="154" x="12" y="18" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#b43333" d="M63.09 37c14.626-25.333 51.193-25.334 65.819 0l45.033 78c14.626 25.334-3.657 57.001-32.91 57.001H50.967c-29.253 0-47.536-31.667-32.91-57.001z"/></mask><g mask="url(#a)"><path fill="url(#b)" d="M206.905 172.02h-91.888l-19.015-32.934 45.944-79.578z"/><path fill="url(#c)" d="M-14.919 172.006 50.04 59.494v.002L31.032 92.422h38.02L115 172.004l-129.918.001z"/><path fill="url(#d)" d="M96.007-20.085 141.954 59.5l-19.011 32.928H31.048z"/></g><defs><linearGradient id="b" x1="193.6" x2="103.09" y1="165.6" y2="111.21" gradientUnits="userSpaceOnUse"><stop offset=".09" stop-color="#ffe921"/><stop offset="1" stop-color="#fec700"/></linearGradient><linearGradient id="c" x1="114.4" x2="15.53" y1="181.61" y2="121.8" gradientUnits="userSpaceOnUse"><stop offset=".15" stop-color="#a9a8ff"/><stop offset=".33" stop-color="#6d97ff"/><stop offset=".48" stop-color="#3186ff"/></linearGradient><linearGradient id="d" x1="128.88" x2="28.7" y1="37.88" y2="84.64" gradientUnits="userSpaceOnUse"><stop offset=".55" stop-color="#0ebc5f"/><stop offset=".85" stop-color="#78c9ff"/></linearGradient></defs></svg>`;
2
+ export const GDRIVE_ICON = {
3
+ kind: 'svg',
4
+ dataUri: `data:image/svg+xml;base64,${Buffer.from(SVG).toString('base64')}`,
5
+ };
6
+ //# sourceMappingURL=icon.js.map
@@ -0,0 +1,3 @@
1
+ declare const _default: import("../../index.js").ToolkitManifest;
2
+ export default _default;
3
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1,37 @@
1
+ import { defineToolkit, defineTool } from '../../core/define.js';
2
+ import { inferToolScope } from '../../core/scope.js';
3
+ import { GDRIVE_ICON } from './icon.js';
4
+ import { googleDriveTools } from './tools/index.js';
5
+ export default defineToolkit({
6
+ id: 'google-drive',
7
+ displayName: 'Google Drive',
8
+ shortDescription: 'List, search, upload, and manage files and folders in Google Drive.',
9
+ category: 'Document & File Management',
10
+ icon: GDRIVE_ICON,
11
+ auth: {
12
+ type: 'oauth2',
13
+ tokenField: 'googleDriveToken',
14
+ provider: {
15
+ slug: 'google-drive',
16
+ env: { clientId: 'GOOGLE_DRIVE_CLIENT_ID', clientSecret: 'GOOGLE_DRIVE_CLIENT_SECRET' },
17
+ authorizeUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
18
+ tokenUrl: 'https://oauth2.googleapis.com/token',
19
+ scopes: ['https://www.googleapis.com/auth/drive'],
20
+ exchangeStyle: 'form',
21
+ extraAuthParams: { access_type: 'offline', prompt: 'consent' },
22
+ connectDescription: 'Connect Google Drive to browse, upload, and manage files and folders.',
23
+ callbackPath: '/api/auth/google-drive/callback',
24
+ stateCookie: 'google_drive_oauth_state',
25
+ },
26
+ },
27
+ allowedHosts: ['www.googleapis.com'],
28
+ tools: googleDriveTools.map((entry) => defineTool({
29
+ name: entry.name,
30
+ description: entry.description,
31
+ tool: entry.tool,
32
+ requiredAuth: entry.requiredAuth,
33
+ scope: entry.scope ?? inferToolScope(entry.name),
34
+ })),
35
+ meta: { since: '0.0.5' },
36
+ });
37
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1,7 @@
1
+ export declare const copyFile: import("ai").Tool<{
2
+ googleDriveToken: string;
3
+ fileId: string;
4
+ name?: string | undefined;
5
+ parentId?: string | undefined;
6
+ }, any>;
7
+ //# sourceMappingURL=copy-file.d.ts.map
@@ -0,0 +1,41 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ export const copyFile = tool({
5
+ description: 'Copy a file in Google Drive.',
6
+ inputSchema: z.object({
7
+ googleDriveToken: z.string().describe('The Google Drive access token'),
8
+ fileId: z.string().describe('The ID of the file to copy'),
9
+ name: z.string().optional().describe('Name for the copy'),
10
+ parentId: z.string().optional().describe('Parent folder ID for the copy'),
11
+ }),
12
+ execute: async ({ googleDriveToken, fileId, name, parentId }) => {
13
+ try {
14
+ const metadata = {};
15
+ if (name)
16
+ metadata.name = name;
17
+ if (parentId)
18
+ metadata.parents = [parentId];
19
+ const response = await fetch(`https://www.googleapis.com/drive/v3/files/${fileId}/copy`, {
20
+ method: 'POST',
21
+ headers: {
22
+ Authorization: `Bearer ${googleDriveToken}`,
23
+ 'Content-Type': 'application/json',
24
+ },
25
+ body: JSON.stringify(metadata),
26
+ });
27
+ if (!response.ok) {
28
+ const error = await response.json();
29
+ return { error: 'Failed to copy file', details: error };
30
+ }
31
+ return await response.json();
32
+ }
33
+ catch (error) {
34
+ return {
35
+ error: 'Error copying file',
36
+ message: error instanceof Error ? error.message : 'Unknown error',
37
+ };
38
+ }
39
+ },
40
+ });
41
+ //# sourceMappingURL=copy-file.js.map
@@ -0,0 +1,6 @@
1
+ export declare const createFolder: import("ai").Tool<{
2
+ name: string;
3
+ googleDriveToken: string;
4
+ parentId?: string | undefined;
5
+ }, any>;
6
+ //# sourceMappingURL=create-folder.d.ts.map
@@ -0,0 +1,42 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ export const createFolder = tool({
5
+ description: 'Create a new folder in Google Drive.',
6
+ inputSchema: z.object({
7
+ googleDriveToken: z.string().describe('The Google Drive access token'),
8
+ name: z.string().describe('Name of the folder to create'),
9
+ parentId: z.string().optional().describe('Parent folder ID (defaults to root)'),
10
+ }),
11
+ execute: async ({ googleDriveToken, name, parentId }) => {
12
+ try {
13
+ const metadata = {
14
+ name,
15
+ mimeType: 'application/vnd.google-apps.folder',
16
+ };
17
+ if (parentId) {
18
+ metadata.parents = [parentId];
19
+ }
20
+ const response = await fetch('https://www.googleapis.com/drive/v3/files', {
21
+ method: 'POST',
22
+ headers: {
23
+ Authorization: `Bearer ${googleDriveToken}`,
24
+ 'Content-Type': 'application/json',
25
+ },
26
+ body: JSON.stringify(metadata),
27
+ });
28
+ if (!response.ok) {
29
+ const error = await response.json();
30
+ return { error: 'Failed to create folder', details: error };
31
+ }
32
+ return await response.json();
33
+ }
34
+ catch (error) {
35
+ return {
36
+ error: 'Error creating folder',
37
+ message: error instanceof Error ? error.message : 'Unknown error',
38
+ };
39
+ }
40
+ },
41
+ });
42
+ //# sourceMappingURL=create-folder.js.map
@@ -0,0 +1,23 @@
1
+ export declare const deleteFile: import("ai").Tool<{
2
+ googleDriveToken: string;
3
+ fileId: string;
4
+ }, {
5
+ error: string;
6
+ details: any;
7
+ success?: undefined;
8
+ fileId?: undefined;
9
+ message?: undefined;
10
+ } | {
11
+ success: boolean;
12
+ fileId: string;
13
+ error?: undefined;
14
+ details?: undefined;
15
+ message?: undefined;
16
+ } | {
17
+ error: string;
18
+ message: string;
19
+ details?: undefined;
20
+ success?: undefined;
21
+ fileId?: undefined;
22
+ }>;
23
+ //# sourceMappingURL=delete-file.d.ts.map
@@ -0,0 +1,30 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ export const deleteFile = tool({
5
+ description: 'Delete a file or folder in Google Drive (moves to trash).',
6
+ inputSchema: z.object({
7
+ googleDriveToken: z.string().describe('The Google Drive access token'),
8
+ fileId: z.string().describe('The ID of the file or folder to delete'),
9
+ }),
10
+ execute: async ({ googleDriveToken, fileId }) => {
11
+ try {
12
+ const response = await fetch(`https://www.googleapis.com/drive/v3/files/${fileId}`, {
13
+ method: 'DELETE',
14
+ headers: { Authorization: `Bearer ${googleDriveToken}` },
15
+ });
16
+ if (!response.ok) {
17
+ const error = await response.json().catch(() => ({ message: response.statusText }));
18
+ return { error: 'Failed to delete file', details: error };
19
+ }
20
+ return { success: true, fileId };
21
+ }
22
+ catch (error) {
23
+ return {
24
+ error: 'Error deleting file',
25
+ message: error instanceof Error ? error.message : 'Unknown error',
26
+ };
27
+ }
28
+ },
29
+ });
30
+ //# sourceMappingURL=delete-file.js.map
@@ -0,0 +1,30 @@
1
+ export declare const downloadFile: import("ai").Tool<{
2
+ googleDriveToken: string;
3
+ fileId: string;
4
+ exportMimeType?: string | undefined;
5
+ }, {
6
+ error: string;
7
+ details: any;
8
+ id?: undefined;
9
+ name?: undefined;
10
+ mimeType?: undefined;
11
+ content?: undefined;
12
+ message?: undefined;
13
+ } | {
14
+ id: any;
15
+ name: any;
16
+ mimeType: string;
17
+ content: string;
18
+ error?: undefined;
19
+ details?: undefined;
20
+ message?: undefined;
21
+ } | {
22
+ error: string;
23
+ message: string;
24
+ details?: undefined;
25
+ id?: undefined;
26
+ name?: undefined;
27
+ mimeType?: undefined;
28
+ content?: undefined;
29
+ }>;
30
+ //# sourceMappingURL=download-file.d.ts.map
@@ -0,0 +1,61 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ const GOOGLE_EXPORT_MIME = {
5
+ 'application/vnd.google-apps.document': 'text/plain',
6
+ 'application/vnd.google-apps.spreadsheet': 'text/csv',
7
+ 'application/vnd.google-apps.presentation': 'text/plain',
8
+ };
9
+ export const downloadFile = tool({
10
+ description: 'Download file content from Google Drive. Google-native files are exported to a readable format.',
11
+ inputSchema: z.object({
12
+ googleDriveToken: z.string().describe('The Google Drive access token'),
13
+ fileId: z.string().describe('The ID of the file to download'),
14
+ exportMimeType: z.string().optional().describe('Export MIME type for Google-native files (auto-detected if omitted)'),
15
+ }),
16
+ execute: async ({ googleDriveToken, fileId, exportMimeType }) => {
17
+ try {
18
+ const metaUrl = new URL(`https://www.googleapis.com/drive/v3/files/${fileId}`);
19
+ metaUrl.searchParams.set('fields', 'id,name,mimeType');
20
+ const metaResponse = await fetch(metaUrl.toString(), {
21
+ headers: { Authorization: `Bearer ${googleDriveToken}` },
22
+ });
23
+ if (!metaResponse.ok) {
24
+ const error = await metaResponse.json();
25
+ return { error: 'Failed to get file metadata', details: error };
26
+ }
27
+ const meta = await metaResponse.json();
28
+ const mimeType = meta.mimeType;
29
+ const isGoogleNative = mimeType?.startsWith('application/vnd.google-apps.');
30
+ let downloadUrl;
31
+ if (isGoogleNative) {
32
+ const exportType = exportMimeType ?? GOOGLE_EXPORT_MIME[mimeType] ?? 'text/plain';
33
+ downloadUrl = `https://www.googleapis.com/drive/v3/files/${fileId}/export?mimeType=${encodeURIComponent(exportType)}`;
34
+ }
35
+ else {
36
+ downloadUrl = `https://www.googleapis.com/drive/v3/files/${fileId}?alt=media`;
37
+ }
38
+ const response = await fetch(downloadUrl, {
39
+ headers: { Authorization: `Bearer ${googleDriveToken}` },
40
+ });
41
+ if (!response.ok) {
42
+ const error = await response.text();
43
+ return { error: 'Failed to download file', details: error };
44
+ }
45
+ const content = await response.text();
46
+ return {
47
+ id: meta.id,
48
+ name: meta.name,
49
+ mimeType: isGoogleNative ? (exportMimeType ?? GOOGLE_EXPORT_MIME[mimeType] ?? 'text/plain') : mimeType,
50
+ content,
51
+ };
52
+ }
53
+ catch (error) {
54
+ return {
55
+ error: 'Error downloading file',
56
+ message: error instanceof Error ? error.message : 'Unknown error',
57
+ };
58
+ }
59
+ },
60
+ });
61
+ //# sourceMappingURL=download-file.js.map
@@ -0,0 +1,5 @@
1
+ export declare const getFile: import("ai").Tool<{
2
+ googleDriveToken: string;
3
+ fileId: string;
4
+ }, any>;
5
+ //# sourceMappingURL=get-file.d.ts.map
@@ -0,0 +1,31 @@
1
+ // @ts-nocheck
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ export const getFile = tool({
5
+ description: 'Get metadata for a file or folder in Google Drive by ID.',
6
+ inputSchema: z.object({
7
+ googleDriveToken: z.string().describe('The Google Drive access token'),
8
+ fileId: z.string().describe('The ID of the file or folder'),
9
+ }),
10
+ execute: async ({ googleDriveToken, fileId }) => {
11
+ try {
12
+ const url = new URL(`https://www.googleapis.com/drive/v3/files/${fileId}`);
13
+ url.searchParams.set('fields', 'id,name,mimeType,modifiedTime,createdTime,parents,webViewLink,description,size');
14
+ const response = await fetch(url.toString(), {
15
+ headers: { Authorization: `Bearer ${googleDriveToken}` },
16
+ });
17
+ if (!response.ok) {
18
+ const error = await response.json();
19
+ return { error: 'Failed to get file', details: error };
20
+ }
21
+ return await response.json();
22
+ }
23
+ catch (error) {
24
+ return {
25
+ error: 'Error getting file',
26
+ message: error instanceof Error ? error.message : 'Unknown error',
27
+ };
28
+ }
29
+ },
30
+ });
31
+ //# sourceMappingURL=get-file.js.map