@credal/actions 0.2.133 → 0.2.135

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 (34) hide show
  1. package/dist/actions/autogen/templates.js +16 -0
  2. package/dist/actions/autogen/types.d.ts +12 -0
  3. package/dist/actions/autogen/types.js +4 -0
  4. package/dist/actions/providers/confluence/updatePage.js +14 -15
  5. package/dist/actions/providers/generic/fillTemplateAction.d.ts +7 -0
  6. package/dist/actions/providers/generic/fillTemplateAction.js +18 -0
  7. package/dist/actions/providers/generic/genericApiCall.d.ts +3 -0
  8. package/dist/actions/providers/generic/genericApiCall.js +38 -0
  9. package/dist/actions/providers/google-oauth/getDriveContentById.d.ts +3 -0
  10. package/dist/actions/providers/google-oauth/getDriveContentById.js +161 -0
  11. package/dist/actions/providers/google-oauth/searchAndGetDriveContentByKeywords.d.ts +3 -0
  12. package/dist/actions/providers/google-oauth/searchAndGetDriveContentByKeywords.js +47 -0
  13. package/dist/actions/providers/google-oauth/searchDriveAndGetContentByKeywords.d.ts +3 -0
  14. package/dist/actions/providers/google-oauth/searchDriveAndGetContentByKeywords.js +110 -0
  15. package/dist/actions/providers/google-oauth/searchDriveAndGetContentByQuery.d.ts +3 -0
  16. package/dist/actions/providers/google-oauth/searchDriveAndGetContentByQuery.js +78 -0
  17. package/dist/actions/providers/google-oauth/searchDriveByKeywords.js +4 -3
  18. package/dist/actions/providers/google-oauth/searchDriveByKeywordsAndGetFileContent.js +2 -2
  19. package/dist/actions/providers/google-oauth/searchDriveByQuery.js +4 -3
  20. package/dist/actions/providers/google-oauth/searchDriveByQueryAndGetFileContent.js +2 -2
  21. package/dist/actions/providers/google-oauth/utils/extractContentFromDriveFileId.d.ts +15 -0
  22. package/dist/actions/providers/google-oauth/utils/extractContentFromDriveFileId.js +129 -0
  23. package/dist/actions/providers/googlemaps/nearbysearch.d.ts +3 -0
  24. package/dist/actions/providers/googlemaps/nearbysearch.js +96 -0
  25. package/dist/actions/providers/salesforce/updateRecord.js +13 -1
  26. package/dist/actions/providers/snowflake/runSnowflakeQueryWriteResultsToS3.d.ts +3 -0
  27. package/dist/actions/providers/snowflake/runSnowflakeQueryWriteResultsToS3.js +154 -0
  28. package/dist/actions/providers/x/scrapeTweetDataWithNitter.d.ts +3 -0
  29. package/dist/actions/providers/x/scrapeTweetDataWithNitter.js +45 -0
  30. package/dist/utils/pdf.d.ts +1 -1
  31. package/dist/utils/pdf.js +27 -20
  32. package/package.json +1 -2
  33. package/dist/actions/providers/jamf/types.d.ts +0 -8
  34. package/dist/actions/providers/jamf/types.js +0 -7
@@ -7184,6 +7184,10 @@ export const googleOauthSearchDriveByKeywordsDefinition = {
7184
7184
  type: "number",
7185
7185
  description: "The maximum number of files to return",
7186
7186
  },
7187
+ includeTrashed: {
7188
+ type: "boolean",
7189
+ description: "Whether to include trashed files in the search results",
7190
+ },
7187
7191
  },
7188
7192
  },
7189
7193
  output: {
@@ -7252,6 +7256,10 @@ export const googleOauthSearchDriveByQueryDefinition = {
7252
7256
  type: "string",
7253
7257
  description: "The orderBy query for sorting results (e.g., 'modifiedTime desc', 'name', 'createdTime desc'). Defaults to 'modifiedTime desc'",
7254
7258
  },
7259
+ includeTrashed: {
7260
+ type: "boolean",
7261
+ description: "Whether to include trashed files in the search results",
7262
+ },
7255
7263
  },
7256
7264
  },
7257
7265
  output: {
@@ -7324,6 +7332,10 @@ export const googleOauthSearchDriveByKeywordsAndGetFileContentDefinition = {
7324
7332
  type: "string",
7325
7333
  description: "The orderBy query for sorting results (e.g., 'modifiedTime desc', 'name', 'createdTime desc'). Defaults to 'modifiedTime desc'",
7326
7334
  },
7335
+ includeTrashed: {
7336
+ type: "boolean",
7337
+ description: "Whether to include trashed files in the search results",
7338
+ },
7327
7339
  },
7328
7340
  },
7329
7341
  output: {
@@ -7415,6 +7427,10 @@ export const googleOauthSearchDriveByQueryAndGetFileContentDefinition = {
7415
7427
  type: "string",
7416
7428
  description: "The orderBy query for sorting results (e.g., 'modifiedTime desc', 'name', 'createdTime desc'). Defaults to 'modifiedTime desc'",
7417
7429
  },
7430
+ includeTrashed: {
7431
+ type: "boolean",
7432
+ description: "Whether to include trashed files in the search results",
7433
+ },
7418
7434
  },
7419
7435
  },
7420
7436
  output: {
@@ -4403,12 +4403,15 @@ export type googleOauthGetPresentationFunction = ActionFunction<googleOauthGetPr
4403
4403
  export declare const googleOauthSearchDriveByKeywordsParamsSchema: z.ZodObject<{
4404
4404
  keywords: z.ZodArray<z.ZodString, "many">;
4405
4405
  limit: z.ZodOptional<z.ZodNumber>;
4406
+ includeTrashed: z.ZodOptional<z.ZodBoolean>;
4406
4407
  }, "strip", z.ZodTypeAny, {
4407
4408
  keywords: string[];
4408
4409
  limit?: number | undefined;
4410
+ includeTrashed?: boolean | undefined;
4409
4411
  }, {
4410
4412
  keywords: string[];
4411
4413
  limit?: number | undefined;
4414
+ includeTrashed?: boolean | undefined;
4412
4415
  }>;
4413
4416
  export type googleOauthSearchDriveByKeywordsParamsType = z.infer<typeof googleOauthSearchDriveByKeywordsParamsSchema>;
4414
4417
  export declare const googleOauthSearchDriveByKeywordsOutputSchema: z.ZodObject<{
@@ -4456,15 +4459,18 @@ export declare const googleOauthSearchDriveByQueryParamsSchema: z.ZodObject<{
4456
4459
  limit: z.ZodOptional<z.ZodNumber>;
4457
4460
  searchDriveByDrive: z.ZodBoolean;
4458
4461
  orderByQuery: z.ZodOptional<z.ZodString>;
4462
+ includeTrashed: z.ZodOptional<z.ZodBoolean>;
4459
4463
  }, "strip", z.ZodTypeAny, {
4460
4464
  query: string;
4461
4465
  searchDriveByDrive: boolean;
4462
4466
  limit?: number | undefined;
4467
+ includeTrashed?: boolean | undefined;
4463
4468
  orderByQuery?: string | undefined;
4464
4469
  }, {
4465
4470
  query: string;
4466
4471
  searchDriveByDrive: boolean;
4467
4472
  limit?: number | undefined;
4473
+ includeTrashed?: boolean | undefined;
4468
4474
  orderByQuery?: string | undefined;
4469
4475
  }>;
4470
4476
  export type googleOauthSearchDriveByQueryParamsType = z.infer<typeof googleOauthSearchDriveByQueryParamsSchema>;
@@ -4514,16 +4520,19 @@ export declare const googleOauthSearchDriveByKeywordsAndGetFileContentParamsSche
4514
4520
  fileSizeLimit: z.ZodOptional<z.ZodNumber>;
4515
4521
  searchDriveByDrive: z.ZodBoolean;
4516
4522
  orderByQuery: z.ZodOptional<z.ZodString>;
4523
+ includeTrashed: z.ZodOptional<z.ZodBoolean>;
4517
4524
  }, "strip", z.ZodTypeAny, {
4518
4525
  searchDriveByDrive: boolean;
4519
4526
  searchQuery: string;
4520
4527
  limit?: number | undefined;
4528
+ includeTrashed?: boolean | undefined;
4521
4529
  orderByQuery?: string | undefined;
4522
4530
  fileSizeLimit?: number | undefined;
4523
4531
  }, {
4524
4532
  searchDriveByDrive: boolean;
4525
4533
  searchQuery: string;
4526
4534
  limit?: number | undefined;
4535
+ includeTrashed?: boolean | undefined;
4527
4536
  orderByQuery?: string | undefined;
4528
4537
  fileSizeLimit?: number | undefined;
4529
4538
  }>;
@@ -4611,16 +4620,19 @@ export declare const googleOauthSearchDriveByQueryAndGetFileContentParamsSchema:
4611
4620
  fileSizeLimit: z.ZodOptional<z.ZodNumber>;
4612
4621
  searchDriveByDrive: z.ZodBoolean;
4613
4622
  orderByQuery: z.ZodOptional<z.ZodString>;
4623
+ includeTrashed: z.ZodOptional<z.ZodBoolean>;
4614
4624
  }, "strip", z.ZodTypeAny, {
4615
4625
  query: string;
4616
4626
  searchDriveByDrive: boolean;
4617
4627
  limit?: number | undefined;
4628
+ includeTrashed?: boolean | undefined;
4618
4629
  orderByQuery?: string | undefined;
4619
4630
  fileSizeLimit?: number | undefined;
4620
4631
  }, {
4621
4632
  query: string;
4622
4633
  searchDriveByDrive: boolean;
4623
4634
  limit?: number | undefined;
4635
+ includeTrashed?: boolean | undefined;
4624
4636
  orderByQuery?: string | undefined;
4625
4637
  fileSizeLimit?: number | undefined;
4626
4638
  }>;
@@ -2714,6 +2714,7 @@ export const googleOauthGetPresentationOutputSchema = z.object({
2714
2714
  export const googleOauthSearchDriveByKeywordsParamsSchema = z.object({
2715
2715
  keywords: z.array(z.string()).describe("List of keywords to search for in file contents."),
2716
2716
  limit: z.number().describe("The maximum number of files to return").optional(),
2717
+ includeTrashed: z.boolean().describe("Whether to include trashed files in the search results").optional(),
2717
2718
  });
2718
2719
  export const googleOauthSearchDriveByKeywordsOutputSchema = z.object({
2719
2720
  success: z.boolean().describe("Whether the search was successful"),
@@ -2736,6 +2737,7 @@ export const googleOauthSearchDriveByQueryParamsSchema = z.object({
2736
2737
  .string()
2737
2738
  .describe("The orderBy query for sorting results (e.g., 'modifiedTime desc', 'name', 'createdTime desc'). Defaults to 'modifiedTime desc'")
2738
2739
  .optional(),
2740
+ includeTrashed: z.boolean().describe("Whether to include trashed files in the search results").optional(),
2739
2741
  });
2740
2742
  export const googleOauthSearchDriveByQueryOutputSchema = z.object({
2741
2743
  success: z.boolean().describe("Whether the search was successful"),
@@ -2759,6 +2761,7 @@ export const googleOauthSearchDriveByKeywordsAndGetFileContentParamsSchema = z.o
2759
2761
  .string()
2760
2762
  .describe("The orderBy query for sorting results (e.g., 'modifiedTime desc', 'name', 'createdTime desc'). Defaults to 'modifiedTime desc'")
2761
2763
  .optional(),
2764
+ includeTrashed: z.boolean().describe("Whether to include trashed files in the search results").optional(),
2762
2765
  });
2763
2766
  export const googleOauthSearchDriveByKeywordsAndGetFileContentOutputSchema = z.object({
2764
2767
  success: z.boolean().describe("Whether the search was successful"),
@@ -2789,6 +2792,7 @@ export const googleOauthSearchDriveByQueryAndGetFileContentParamsSchema = z.obje
2789
2792
  .string()
2790
2793
  .describe("The orderBy query for sorting results (e.g., 'modifiedTime desc', 'name', 'createdTime desc'). Defaults to 'modifiedTime desc'")
2791
2794
  .optional(),
2795
+ includeTrashed: z.boolean().describe("Whether to include trashed files in the search results").optional(),
2792
2796
  });
2793
2797
  export const googleOauthSearchDriveByQueryAndGetFileContentOutputSchema = z.object({
2794
2798
  success: z.boolean().describe("Whether the search was successful"),
@@ -8,30 +8,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const axios_1 = __importDefault(require("axios"));
16
- function getConfluenceApi(baseUrl, username, apiToken) {
17
- const api = axios_1.default.create({
12
+ const axiosClient_1 = require("../../util/axiosClient");
13
+ function getConfluenceRequestConfig(baseUrl, username, apiToken) {
14
+ return {
18
15
  baseURL: baseUrl,
19
16
  headers: {
20
17
  Accept: "application/json",
21
- // Tokens are associated with a specific user.
22
18
  Authorization: `Basic ${Buffer.from(`${username}:${apiToken}`).toString("base64")}`,
23
19
  },
24
- });
25
- return api;
20
+ };
26
21
  }
27
22
  const confluenceUpdatePage = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
28
- const { pageId, username, content, title } = params;
29
- const { baseUrl, authToken } = authParams;
30
- const api = getConfluenceApi(baseUrl, username, authToken);
23
+ const { pageId, content, title } = params;
24
+ const { baseUrl, authToken, username } = authParams;
25
+ if (!baseUrl || !authToken || !username) {
26
+ throw new Error("Missing required authentication information");
27
+ }
28
+ const config = getConfluenceRequestConfig(baseUrl, username, authToken);
31
29
  // Get current version number
32
- const response = yield api.get(`/api/v2/pages/${pageId}`);
30
+ const response = yield axiosClient_1.axiosClient.get(`/api/v2/pages/${pageId}`, config);
33
31
  const currVersion = response.data.version.number;
34
- yield api.put(`/api/v2/pages/${pageId}`, {
32
+ const payload = {
35
33
  id: pageId,
36
34
  status: "current",
37
35
  title,
@@ -42,6 +40,7 @@ const confluenceUpdatePage = (_a) => __awaiter(void 0, [_a], void 0, function* (
42
40
  version: {
43
41
  number: currVersion + 1,
44
42
  },
45
- });
43
+ };
44
+ yield axiosClient_1.axiosClient.put(`/api/v2/pages/${pageId}`, payload, config);
46
45
  });
47
46
  exports.default = confluenceUpdatePage;
@@ -0,0 +1,7 @@
1
+ import type { ActionFunction } from "../../autogen/types";
2
+ declare const fillTemplateAction: ActionFunction<{
3
+ template: string;
4
+ }, {
5
+ result: string;
6
+ }, unknown>;
7
+ export default fillTemplateAction;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const fillTemplateAction = (_a) => __awaiter(void 0, [_a], void 0, function* ({ template }) {
13
+ // Simply return the template without any modification
14
+ return {
15
+ result: template,
16
+ };
17
+ });
18
+ exports.default = fillTemplateAction;
@@ -0,0 +1,3 @@
1
+ import type { genericUniversalTestActionFunction } from "../../autogen/types";
2
+ declare const genericApiCall: genericUniversalTestActionFunction;
3
+ export default genericApiCall;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const axios_1 = __importDefault(require("axios"));
16
+ const genericApiCall = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, }) {
17
+ try {
18
+ const { endpoint, method, headers, body } = params;
19
+ const response = yield (0, axios_1.default)({
20
+ url: endpoint,
21
+ method,
22
+ headers,
23
+ data: method !== "GET" ? body : undefined,
24
+ });
25
+ return {
26
+ statusCode: response.status,
27
+ headers: response.headers,
28
+ data: response.data,
29
+ };
30
+ }
31
+ catch (error) {
32
+ if (axios_1.default.isAxiosError(error)) {
33
+ throw Error("Axios Error: " + (error.message || "Failed to make API call"));
34
+ }
35
+ throw Error("Error: " + (error || "Failed to make API call"));
36
+ }
37
+ });
38
+ exports.default = genericApiCall;
@@ -0,0 +1,3 @@
1
+ import type { googleOauthGetDriveFileContentByIDFunction } from "../../autogen/types.js";
2
+ declare const getDriveFileContentByID: googleOauthGetDriveFileContentByIDFunction;
3
+ export default getDriveFileContentByID;
@@ -0,0 +1,161 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import pdf from "pdf-parse/lib/pdf-parse.js";
11
+ import { axiosClient } from "../../util/axiosClient.js";
12
+ import mammoth from "mammoth";
13
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
14
+ const getDriveFileContentByID = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
15
+ if (!authParams.authToken) {
16
+ return { success: false, error: MISSING_AUTH_TOKEN };
17
+ }
18
+ const { fileId, limit } = params;
19
+ try {
20
+ // First, get file metadata to determine the file type
21
+ const metadataUrl = `https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}?fields=name,mimeType,size`;
22
+ const metadataRes = yield axiosClient.get(metadataUrl, {
23
+ headers: {
24
+ Authorization: `Bearer ${authParams.authToken}`,
25
+ },
26
+ });
27
+ const { name: fileName, mimeType, size } = metadataRes.data;
28
+ // Check if file is too large (50MB limit for safety)
29
+ if (size && parseInt(size) > 50 * 1024 * 1024) {
30
+ return {
31
+ success: false,
32
+ error: "File too large (>50MB)",
33
+ };
34
+ }
35
+ let content = "";
36
+ // Handle different file types - read content directly
37
+ if (mimeType === "application/vnd.google-apps.document") {
38
+ // Google Docs - download as plain text
39
+ const downloadUrl = `https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}?alt=media&format=txt`;
40
+ const downloadRes = yield axiosClient.get(downloadUrl, {
41
+ headers: {
42
+ Authorization: `Bearer ${authParams.authToken}`,
43
+ },
44
+ responseType: 'text',
45
+ });
46
+ content = downloadRes.data;
47
+ }
48
+ else if (mimeType === "application/vnd.google-apps.spreadsheet") {
49
+ // Google Sheets - download as CSV
50
+ const downloadUrl = `https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}?alt=media&format=csv`;
51
+ const downloadRes = yield axiosClient.get(downloadUrl, {
52
+ headers: {
53
+ Authorization: `Bearer ${authParams.authToken}`,
54
+ },
55
+ responseType: 'text',
56
+ });
57
+ content = downloadRes.data;
58
+ }
59
+ else if (mimeType === "application/vnd.google-apps.presentation") {
60
+ // Google Slides - download as plain text
61
+ const downloadUrl = `https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}?alt=media&format=txt`;
62
+ const downloadRes = yield axiosClient.get(downloadUrl, {
63
+ headers: {
64
+ Authorization: `Bearer ${authParams.authToken}`,
65
+ },
66
+ responseType: 'text',
67
+ });
68
+ content = downloadRes.data;
69
+ }
70
+ else if (mimeType === "application/pdf") {
71
+ // PDF files - use pdf-parse
72
+ const downloadUrl = `https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}?alt=media`;
73
+ const downloadRes = yield axiosClient.get(downloadUrl, {
74
+ headers: {
75
+ Authorization: `Bearer ${authParams.authToken}`,
76
+ },
77
+ responseType: 'arraybuffer',
78
+ });
79
+ try {
80
+ const pdfData = yield pdf(downloadRes.data);
81
+ content = pdfData.text;
82
+ }
83
+ catch (pdfError) {
84
+ return {
85
+ success: false,
86
+ error: `Failed to parse PDF: ${pdfError instanceof Error ? pdfError.message : 'Unknown PDF error'}`,
87
+ };
88
+ }
89
+ }
90
+ else if (mimeType === "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ||
91
+ mimeType === "application/msword") {
92
+ // Word documents (.docx or .doc) - download and extract text using mammoth
93
+ const downloadUrl = `https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}?alt=media`;
94
+ const downloadRes = yield axiosClient.get(downloadUrl, {
95
+ headers: {
96
+ Authorization: `Bearer ${authParams.authToken}`,
97
+ },
98
+ responseType: 'arraybuffer',
99
+ });
100
+ try {
101
+ // mammoth works with .docx files. It will ignore formatting and return raw text
102
+ const result = yield mammoth.extractRawText({ buffer: Buffer.from(downloadRes.data) });
103
+ content = result.value; // raw text
104
+ }
105
+ catch (wordError) {
106
+ return {
107
+ success: false,
108
+ error: `Failed to parse Word document: ${wordError instanceof Error ? wordError.message : 'Unknown Word error'}`,
109
+ };
110
+ }
111
+ }
112
+ else if (mimeType === "text/plain" ||
113
+ mimeType === "text/html" ||
114
+ mimeType === "application/rtf" ||
115
+ (mimeType === null || mimeType === void 0 ? void 0 : mimeType.startsWith("text/"))) {
116
+ // Text-based files
117
+ const downloadUrl = `https://www.googleapis.com/drive/v3/files/${encodeURIComponent(fileId)}?alt=media`;
118
+ const downloadRes = yield axiosClient.get(downloadUrl, {
119
+ headers: {
120
+ Authorization: `Bearer ${authParams.authToken}`,
121
+ },
122
+ responseType: 'text',
123
+ });
124
+ content = downloadRes.data;
125
+ }
126
+ else if (mimeType === null || mimeType === void 0 ? void 0 : mimeType.startsWith("image/")) {
127
+ // Skip images
128
+ return {
129
+ success: false,
130
+ error: "Image files are not supported for text extraction",
131
+ };
132
+ }
133
+ else {
134
+ // Unsupported file type
135
+ return {
136
+ success: false,
137
+ error: `Unsupported file type: ${mimeType}`,
138
+ };
139
+ }
140
+ content = content.trim();
141
+ const originalLength = content.length;
142
+ // Naive way to truncate content
143
+ if (limit && content.length > limit) {
144
+ content = content.substring(0, limit);
145
+ }
146
+ return {
147
+ success: true,
148
+ content,
149
+ fileName,
150
+ fileLength: originalLength,
151
+ };
152
+ }
153
+ catch (error) {
154
+ console.error("Error getting Google Drive file content", error);
155
+ return {
156
+ success: false,
157
+ error: error instanceof Error ? error.message : "Unknown error",
158
+ };
159
+ }
160
+ });
161
+ export default getDriveFileContentByID;
@@ -0,0 +1,3 @@
1
+ import type { googleOauthSearchDriveByKeywordsFunction } from "../../autogen/types.js";
2
+ declare const searchDriveByKeywords: googleOauthSearchDriveByKeywordsFunction;
3
+ export default searchDriveByKeywords;
@@ -0,0 +1,47 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { axiosClient } from "../../util/axiosClient.js";
11
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
12
+ const searchDriveByKeywords = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
13
+ var _b;
14
+ if (!authParams.authToken) {
15
+ return { success: false, error: MISSING_AUTH_TOKEN, files: [] };
16
+ }
17
+ const { keywords, limit } = params;
18
+ // Build the query: fullText contains 'keyword1' or fullText contains 'keyword2' ...
19
+ const query = keywords.map(kw => `fullText contains '${kw.replace(/'/g, "\\'")}'`).join(" or ");
20
+ const url = `https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(query)}&fields=files(id,name,mimeType,webViewLink)&supportsAllDrives=true&includeItemsFromAllDrives=true`;
21
+ // 1. Get the file metadata from google drive search
22
+ let files = [];
23
+ try {
24
+ const res = yield axiosClient.get(url, {
25
+ headers: {
26
+ Authorization: `Bearer ${authParams.authToken}`,
27
+ },
28
+ });
29
+ files =
30
+ ((_b = res.data.files) === null || _b === void 0 ? void 0 : _b.map((file) => ({
31
+ id: file.id || "",
32
+ name: file.name || "",
33
+ mimeType: file.mimeType || "",
34
+ url: file.webViewLink || "",
35
+ }))) || [];
36
+ }
37
+ catch (error) {
38
+ console.error("Error searching Google Drive", error);
39
+ return {
40
+ success: false,
41
+ error: error instanceof Error ? error.message : "Unknown error",
42
+ files: [],
43
+ };
44
+ }
45
+ files = limit ? files.splice(0, limit) : files;
46
+ });
47
+ export default searchDriveByKeywords;
@@ -0,0 +1,3 @@
1
+ import type { googleOauthSearchDriveAndGetContentByKeywordsFunction } from "../../autogen/types.js";
2
+ declare const searchDriveAndGetContentByKeywords: googleOauthSearchDriveAndGetContentByKeywordsFunction;
3
+ export default searchDriveAndGetContentByKeywords;
@@ -0,0 +1,110 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { axiosClient } from "../../util/axiosClient.js";
11
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
12
+ import extractContentFromDriveFileId from "./utils/extractContentFromDriveFileId.js";
13
+ import { normalizeText } from "../../../utils/string.js";
14
+ /** Intelligently selects a section of text around the median occurrence of keywords */
15
+ const intelligentSelectByMedianSection = (text, keywords, limit) => {
16
+ if (!text || text.length <= limit)
17
+ return text;
18
+ if (!(keywords === null || keywords === void 0 ? void 0 : keywords.length))
19
+ return text.substring(0, limit);
20
+ // Find all keyword positions (case-insensitive, limited to first 1000 matches)
21
+ const positions = [];
22
+ const normalizedText = normalizeText(text);
23
+ for (const keyword of keywords) {
24
+ if (keyword.length < 3)
25
+ continue; // Skip very short keywords
26
+ let pos = -1;
27
+ const normalizedKeyword = normalizeText(keyword);
28
+ while ((pos = normalizedText.indexOf(normalizedKeyword, pos + 1)) !== -1 && positions.length < 1000) {
29
+ positions.push(pos);
30
+ }
31
+ }
32
+ if (!positions.length)
33
+ return text.substring(0, limit);
34
+ // Find median position (using sort for simplicity, still fast for 1000 elements)
35
+ positions.sort((a, b) => a - b);
36
+ const medianPos = positions[Math.floor(positions.length / 2)];
37
+ // Return window around median
38
+ const half = Math.floor(limit / 2);
39
+ const start = Math.max(0, medianPos - half);
40
+ const end = Math.min(text.length, start + limit);
41
+ return text.substring(start, end);
42
+ };
43
+ const searchDriveAndGetContentByKeywords = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
44
+ var _b;
45
+ if (!authParams.authToken) {
46
+ return { success: false, error: MISSING_AUTH_TOKEN, files: [] };
47
+ }
48
+ const { keywords, fileLimit, fileSizeLimit } = params;
49
+ let files = [];
50
+ // 1. Search for files and get their metadata
51
+ // Build the query: fullText contains 'keyword1' or fullText contains 'keyword2' ...
52
+ const query = keywords.map(kw => `fullText contains '${kw.replace(/'/g, "\\'")}'`).join(" or ");
53
+ const url = `https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(query)}&fields=files(id,name,mimeType,webViewLink)&supportsAllDrives=true&includeItemsFromAllDrives=true`;
54
+ try {
55
+ const res = yield axiosClient.get(url, {
56
+ headers: {
57
+ Authorization: `Bearer ${authParams.authToken}`,
58
+ },
59
+ });
60
+ files =
61
+ ((_b = res.data.files) === null || _b === void 0 ? void 0 : _b.map((file) => ({
62
+ id: file.id,
63
+ name: file.name,
64
+ mimeType: file.mimeType,
65
+ url: file.webViewLink,
66
+ }))) || [];
67
+ }
68
+ catch (error) {
69
+ console.error("Error searching Google Drive", error);
70
+ return {
71
+ success: false,
72
+ error: error instanceof Error ? error.message : "Unknown error",
73
+ files: [],
74
+ };
75
+ }
76
+ files = fileLimit ? files.splice(0, fileLimit) : files;
77
+ // 2. Extract content from files and do some smart range selection
78
+ const processedFiles = yield Promise.all(files
79
+ .filter((file) => file.id && file.mimeType)
80
+ .map((file) => __awaiter(void 0, void 0, void 0, function* () {
81
+ const content = yield extractContentFromDriveFileId({
82
+ params: { fileId: file.id, mimeType: file.mimeType },
83
+ authParams,
84
+ });
85
+ if (content.success) {
86
+ let selectedContent = content.content;
87
+ if (fileSizeLimit && selectedContent && selectedContent.length > fileSizeLimit) {
88
+ selectedContent = intelligentSelectByMedianSection(selectedContent, keywords, fileSizeLimit);
89
+ }
90
+ return {
91
+ id: file.id || "",
92
+ name: file.name || "",
93
+ mimeType: file.mimeType || "",
94
+ url: file.url || "",
95
+ content: selectedContent,
96
+ };
97
+ }
98
+ else {
99
+ return {
100
+ id: file.id || "",
101
+ name: file.name || "",
102
+ mimeType: file.mimeType || "",
103
+ url: file.url || "",
104
+ error: content.error,
105
+ };
106
+ }
107
+ })));
108
+ return { success: true, files: processedFiles };
109
+ });
110
+ export default searchDriveAndGetContentByKeywords;
@@ -0,0 +1,3 @@
1
+ import type { googleOauthSearchDriveAndGetContentByQueryFunction } from "../../autogen/types.js";
2
+ declare const searchDriveAndGetContentByQuery: googleOauthSearchDriveAndGetContentByQueryFunction;
3
+ export default searchDriveAndGetContentByQuery;