@credal/actions 0.1.87 → 0.1.89
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/dist/actions/actionMapper.js +18 -0
- package/dist/actions/autogen/definitions.d.ts +5 -0
- package/dist/actions/autogen/definitions.js +132 -0
- package/dist/actions/autogen/templates.d.ts +4 -0
- package/dist/actions/autogen/templates.js +267 -3
- package/dist/actions/autogen/types.d.ts +260 -10
- package/dist/actions/autogen/types.js +71 -5
- package/dist/actions/definitions.js +35 -0
- package/dist/actions/groups.js +2 -0
- package/dist/actions/invokeMapper.d.ts +9 -0
- package/dist/actions/invokeMapper.js +33 -0
- package/dist/actions/providers/asana/getTasksDetails.d.ts +3 -0
- package/dist/actions/providers/asana/getTasksDetails.js +99 -0
- package/dist/actions/providers/asana/searchAsanaTasks.d.ts +3 -0
- package/dist/actions/providers/asana/searchAsanaTasks.js +67 -0
- package/dist/actions/providers/confluence/updatePage.d.ts +3 -0
- package/dist/actions/providers/confluence/updatePage.js +43 -0
- package/dist/actions/providers/gong/getGongTranscripts.js +31 -43
- package/dist/actions/providers/google-oauth/searchDriveByKeywords.d.ts +3 -0
- package/dist/actions/providers/google-oauth/searchDriveByKeywords.js +46 -0
- package/dist/actions/providers/googlemaps/nearbysearch.d.ts +3 -0
- package/dist/actions/providers/googlemaps/nearbysearch.js +96 -0
- package/dist/actions/providers/jira/createTicket.d.ts +3 -0
- package/dist/actions/providers/jira/createTicket.js +34 -0
- package/dist/actions/providers/slack/listConversations.d.ts +1 -1
- package/dist/actions/providers/slack/list_conversations.d.ts +3 -0
- package/dist/actions/providers/slack/list_conversations.js +60 -0
- package/dist/actions/providers/slack/summarizeChannel.d.ts +3 -0
- package/dist/actions/providers/slack/summarizeChannel.js +51 -0
- package/dist/actions/schema.js +6 -0
- package/dist/actions/types.js +2 -0
- package/dist/main.js +11 -0
- package/package.json +1 -1
@@ -0,0 +1,99 @@
|
|
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 types_1 = require("../../autogen/types");
|
13
|
+
const axiosClient_1 = require("../../util/axiosClient");
|
14
|
+
const missingAuthConstants_1 = require("../../util/missingAuthConstants");
|
15
|
+
const getTasksDetails = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
16
|
+
var _b, _c, _d;
|
17
|
+
const { authToken } = authParams;
|
18
|
+
const { taskIds } = params;
|
19
|
+
if (!authToken) {
|
20
|
+
return { success: false, errors: [missingAuthConstants_1.MISSING_AUTH_TOKEN] };
|
21
|
+
}
|
22
|
+
const tasks = [];
|
23
|
+
const errors = [];
|
24
|
+
// Process each task ID
|
25
|
+
for (const taskId of taskIds) {
|
26
|
+
try {
|
27
|
+
// Get task details
|
28
|
+
const taskResponse = yield axiosClient_1.axiosClient.get(`https://app.asana.com/api/1.0/tasks/${taskId}?opt_fields=name,notes,assignee,assignee.name,created_at,completed,due_at,approval_status`, {
|
29
|
+
headers: { Authorization: `Bearer ${authToken}` },
|
30
|
+
});
|
31
|
+
const taskData = taskResponse.data.data;
|
32
|
+
// Validate task data exists
|
33
|
+
if (!taskData) {
|
34
|
+
throw new Error(`No data returned for task ${taskId}`);
|
35
|
+
}
|
36
|
+
// Get the stories (comments)
|
37
|
+
const storyResponse = yield axiosClient_1.axiosClient.get(`https://app.asana.com/api/1.0/tasks/${taskId}/stories?opt_fields=text,created_at,created_by,resource_subtype`, {
|
38
|
+
headers: { Authorization: `Bearer ${authToken}` },
|
39
|
+
});
|
40
|
+
// Filter and map comments
|
41
|
+
const comments = storyResponse.data.data
|
42
|
+
.filter(story => story.resource_subtype === "comment_added")
|
43
|
+
.map(story => {
|
44
|
+
var _a;
|
45
|
+
return ({
|
46
|
+
text: story.text,
|
47
|
+
created_at: story.created_at,
|
48
|
+
creator_name: ((_a = story.created_by) === null || _a === void 0 ? void 0 : _a.name) || "Unknown",
|
49
|
+
});
|
50
|
+
});
|
51
|
+
// Handle pagination for comments
|
52
|
+
let nextLink = (_b = storyResponse.data.next_page) === null || _b === void 0 ? void 0 : _b.uri;
|
53
|
+
while (nextLink) {
|
54
|
+
const nextResponse = yield axiosClient_1.axiosClient.get(nextLink, {
|
55
|
+
headers: { Authorization: `Bearer ${authToken}` },
|
56
|
+
});
|
57
|
+
const nextData = nextResponse.data;
|
58
|
+
// Filter for comments and add to the array
|
59
|
+
const additionalComments = nextData.data
|
60
|
+
.filter(story => story.resource_subtype === "comment_added")
|
61
|
+
.map(story => {
|
62
|
+
var _a;
|
63
|
+
return ({
|
64
|
+
text: story.text,
|
65
|
+
created_at: story.created_at,
|
66
|
+
creator_name: ((_a = story.created_by) === null || _a === void 0 ? void 0 : _a.name) || "Unknown",
|
67
|
+
});
|
68
|
+
});
|
69
|
+
comments.push(...additionalComments);
|
70
|
+
nextLink = (_c = nextResponse.data.next_page) === null || _c === void 0 ? void 0 : _c.uri;
|
71
|
+
}
|
72
|
+
const taskDetails = {
|
73
|
+
id: taskData.gid,
|
74
|
+
name: taskData.name || "",
|
75
|
+
notes: taskData.notes || "",
|
76
|
+
assignee_name: ((_d = taskData.assignee) === null || _d === void 0 ? void 0 : _d.name) || "",
|
77
|
+
approval_status: taskData.approval_status || "",
|
78
|
+
completed: taskData.completed || false,
|
79
|
+
created_at: taskData.created_at || "",
|
80
|
+
due_at: taskData.due_at,
|
81
|
+
comments: comments,
|
82
|
+
};
|
83
|
+
tasks.push(taskDetails);
|
84
|
+
}
|
85
|
+
catch (error) {
|
86
|
+
console.warn(`Error getting details for task ${taskId}:`, error);
|
87
|
+
errors.push(JSON.stringify(error));
|
88
|
+
}
|
89
|
+
}
|
90
|
+
if (errors.length > 0 && tasks.length === 0) {
|
91
|
+
return { success: false, errors };
|
92
|
+
}
|
93
|
+
const result = {
|
94
|
+
success: true,
|
95
|
+
results: tasks,
|
96
|
+
};
|
97
|
+
return types_1.asanaGetTasksDetailsOutputSchema.parse(result);
|
98
|
+
});
|
99
|
+
exports.default = getTasksDetails;
|
@@ -0,0 +1,67 @@
|
|
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 axiosClient_1 = require("../../util/axiosClient");
|
13
|
+
const missingAuthConstants_1 = require("../../util/missingAuthConstants");
|
14
|
+
const searchAsanaTasks = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
15
|
+
var _b, _c;
|
16
|
+
const { authToken } = authParams;
|
17
|
+
const { query } = params;
|
18
|
+
if (!authToken) {
|
19
|
+
return { success: false, error: missingAuthConstants_1.MISSING_AUTH_TOKEN };
|
20
|
+
}
|
21
|
+
try {
|
22
|
+
// search api only searches within a workspace, so fetch all workspaces first
|
23
|
+
const workspacesResponse = yield axiosClient_1.axiosClient.get("https://app.asana.com/api/1.0/workspaces", {
|
24
|
+
headers: { Authorization: `Bearer ${authToken}` },
|
25
|
+
});
|
26
|
+
const workspaces = (_b = workspacesResponse === null || workspacesResponse === void 0 ? void 0 : workspacesResponse.data) === null || _b === void 0 ? void 0 : _b.data;
|
27
|
+
if (!Array.isArray(workspaces) || workspaces.length === 0) {
|
28
|
+
throw new Error("No workspaces found");
|
29
|
+
}
|
30
|
+
const matches = [];
|
31
|
+
for (const workspace of workspaces) {
|
32
|
+
const workspaceId = workspace.gid;
|
33
|
+
try {
|
34
|
+
const searchResponse = yield axiosClient_1.axiosClient.get(`https://app.asana.com/api/1.0/workspaces/${workspaceId}/tasks/search`, {
|
35
|
+
headers: { Authorization: `Bearer ${authToken}` },
|
36
|
+
params: {
|
37
|
+
text: query,
|
38
|
+
},
|
39
|
+
});
|
40
|
+
const tasks = (_c = searchResponse === null || searchResponse === void 0 ? void 0 : searchResponse.data) === null || _c === void 0 ? void 0 : _c.data;
|
41
|
+
if (Array.isArray(tasks)) {
|
42
|
+
matches.push(...tasks.map(({ gid, name, resource_type }) => ({
|
43
|
+
id: gid,
|
44
|
+
name,
|
45
|
+
resourceType: resource_type,
|
46
|
+
workspaceId,
|
47
|
+
})));
|
48
|
+
}
|
49
|
+
}
|
50
|
+
catch (searchErr) {
|
51
|
+
console.warn(`Search failed in workspace ${workspaceId}:`, searchErr);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
return {
|
55
|
+
success: true,
|
56
|
+
results: matches,
|
57
|
+
};
|
58
|
+
}
|
59
|
+
catch (error) {
|
60
|
+
console.error("Error searching Asana tasks:", error);
|
61
|
+
return {
|
62
|
+
success: false,
|
63
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
64
|
+
};
|
65
|
+
}
|
66
|
+
});
|
67
|
+
exports.default = searchAsanaTasks;
|
@@ -0,0 +1,43 @@
|
|
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 axiosClient_1 = require("../../util/axiosClient");
|
13
|
+
function getConfluenceRequestConfig(baseUrl, username, apiToken) {
|
14
|
+
return {
|
15
|
+
baseURL: baseUrl,
|
16
|
+
headers: {
|
17
|
+
Accept: "application/json",
|
18
|
+
Authorization: `Basic ${Buffer.from(`${username}:${apiToken}`).toString("base64")}`,
|
19
|
+
},
|
20
|
+
};
|
21
|
+
}
|
22
|
+
const confluenceUpdatePage = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
23
|
+
const { pageId, username, content, title } = params;
|
24
|
+
const { baseUrl, authToken } = authParams;
|
25
|
+
const config = getConfluenceRequestConfig(baseUrl, username, authToken);
|
26
|
+
// Get current version number
|
27
|
+
const response = yield axiosClient_1.axiosClient.get(`/api/v2/pages/${pageId}`, config);
|
28
|
+
const currVersion = response.data.version.number;
|
29
|
+
const payload = {
|
30
|
+
id: pageId,
|
31
|
+
status: "current",
|
32
|
+
title,
|
33
|
+
body: {
|
34
|
+
representation: "storage",
|
35
|
+
value: content,
|
36
|
+
},
|
37
|
+
version: {
|
38
|
+
number: currVersion + 1,
|
39
|
+
},
|
40
|
+
};
|
41
|
+
yield axiosClient_1.axiosClient.put(`/api/v2/pages/${pageId}`, payload, config);
|
42
|
+
});
|
43
|
+
exports.default = confluenceUpdatePage;
|
@@ -66,13 +66,6 @@ const UserSchema = zod_1.z
|
|
66
66
|
})
|
67
67
|
.partial()
|
68
68
|
.passthrough();
|
69
|
-
const TrackerSchema = zod_1.z
|
70
|
-
.object({
|
71
|
-
trackerId: zod_1.z.string(),
|
72
|
-
trackerName: zod_1.z.string(),
|
73
|
-
})
|
74
|
-
.partial()
|
75
|
-
.passthrough();
|
76
69
|
const CallSchema = zod_1.z
|
77
70
|
.object({
|
78
71
|
metaData: zod_1.z.object({
|
@@ -91,6 +84,12 @@ const CallSchema = zod_1.z
|
|
91
84
|
})
|
92
85
|
.partial()
|
93
86
|
.passthrough()),
|
87
|
+
content: zod_1.z.object({
|
88
|
+
trackers: zod_1.z.array(zod_1.z.object({
|
89
|
+
id: zod_1.z.string(),
|
90
|
+
name: zod_1.z.string(),
|
91
|
+
})),
|
92
|
+
}),
|
94
93
|
})
|
95
94
|
.partial()
|
96
95
|
.passthrough();
|
@@ -119,7 +118,6 @@ const TranscriptSchema = zod_1.z
|
|
119
118
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
120
119
|
const GongResponseSchema = zod_1.z.object({
|
121
120
|
users: zod_1.z.array(UserSchema).optional(),
|
122
|
-
keywordTrackers: zod_1.z.array(TrackerSchema).optional(),
|
123
121
|
calls: zod_1.z.array(CallSchema).optional(),
|
124
122
|
callTranscripts: zod_1.z.array(TranscriptSchema).optional(),
|
125
123
|
cursor: zod_1.z.string().optional(),
|
@@ -150,33 +148,6 @@ function getUsers(authToken) {
|
|
150
148
|
return results;
|
151
149
|
});
|
152
150
|
}
|
153
|
-
function getTrackers(authToken) {
|
154
|
-
return __awaiter(this, void 0, void 0, function* () {
|
155
|
-
let results = [];
|
156
|
-
let cursor = undefined;
|
157
|
-
do {
|
158
|
-
const response = yield axios_1.default.get(`https://api.gong.io/v2/settings/trackers` + (cursor ? `?cursor=${cursor}` : ""), {
|
159
|
-
headers: {
|
160
|
-
Authorization: `Bearer ${authToken}`,
|
161
|
-
"Content-Type": "application/json",
|
162
|
-
},
|
163
|
-
params: {},
|
164
|
-
});
|
165
|
-
if (!response) {
|
166
|
-
return results;
|
167
|
-
}
|
168
|
-
const parsedItems = zod_1.z.array(TrackerSchema).safeParse(response.data.keywordTrackers);
|
169
|
-
if (parsedItems.success) {
|
170
|
-
results = [...results, ...parsedItems.data];
|
171
|
-
}
|
172
|
-
else {
|
173
|
-
return results;
|
174
|
-
}
|
175
|
-
cursor = response.data.cursor;
|
176
|
-
} while (cursor);
|
177
|
-
return results;
|
178
|
-
});
|
179
|
-
}
|
180
151
|
function getCalls(authToken_1) {
|
181
152
|
return __awaiter(this, arguments, void 0, function* (authToken, params = {}) {
|
182
153
|
let results = [];
|
@@ -187,6 +158,9 @@ function getCalls(authToken_1) {
|
|
187
158
|
contentSelector: {
|
188
159
|
exposedFields: {
|
189
160
|
parties: true,
|
161
|
+
content: {
|
162
|
+
trackers: true,
|
163
|
+
},
|
190
164
|
},
|
191
165
|
},
|
192
166
|
}, {
|
@@ -270,22 +244,36 @@ const getGongTranscripts = (_a) => __awaiter(void 0, [_a], void 0, function* ({
|
|
270
244
|
error: "No Gong users found with the specified role",
|
271
245
|
};
|
272
246
|
}
|
273
|
-
const trackers = yield getTrackers(authParams.authToken);
|
274
|
-
const filteredTrackers = trackers.filter(tracker => { var _a, _b; return (_a = params.trackers) === null || _a === void 0 ? void 0 : _a.includes((_b = tracker.trackerName) !== null && _b !== void 0 ? _b : ""); });
|
275
247
|
const calls = yield getCalls(authParams.authToken, {
|
276
248
|
fromDateTime: (_b = params.startDate) !== null && _b !== void 0 ? _b : "",
|
277
249
|
toDateTime: (_c = params.endDate) !== null && _c !== void 0 ? _c : "",
|
278
250
|
primaryUserIds: filteredPrimaryIds,
|
279
|
-
trackerIds: filteredTrackers.length > 0
|
280
|
-
? filteredTrackers.map(tracker => tracker.trackerId).filter((id) => id !== undefined)
|
281
|
-
: undefined,
|
282
251
|
});
|
283
|
-
const
|
252
|
+
const callsWithTrackers = calls.filter(call => {
|
253
|
+
// If the user didn't provide any trackers to filter on, return all calls
|
254
|
+
if (!params.trackers || params.trackers.length === 0) {
|
255
|
+
return true;
|
256
|
+
}
|
257
|
+
// Filter out calls that don't have trackers if the user specified trackers
|
258
|
+
if (!call.content || !call.content.trackers) {
|
259
|
+
return false;
|
260
|
+
}
|
261
|
+
const trackerNames = call.content.trackers.map(tracker => tracker.name);
|
262
|
+
// Check if any of the trackers in the call match the ones provided by the user
|
263
|
+
return params.trackers.some(tr => trackerNames.includes(tr));
|
264
|
+
});
|
265
|
+
const publicCalls = callsWithTrackers.filter(call => {
|
284
266
|
if (!call.metaData) {
|
285
267
|
return false;
|
286
268
|
}
|
287
269
|
return !call.metaData.isPrivate;
|
288
270
|
});
|
271
|
+
if (publicCalls.length === 0) {
|
272
|
+
return {
|
273
|
+
success: true,
|
274
|
+
callTranscripts: [],
|
275
|
+
};
|
276
|
+
}
|
289
277
|
// Get transcripts for the calls we found
|
290
278
|
const callTranscripts = yield getTranscripts(authParams.authToken, {
|
291
279
|
fromDateTime: (_d = params.startDate) !== null && _d !== void 0 ? _d : "",
|
@@ -307,14 +295,14 @@ const getGongTranscripts = (_a) => __awaiter(void 0, [_a], void 0, function* ({
|
|
307
295
|
}
|
308
296
|
});
|
309
297
|
const callTranscriptsWithNames = callTranscripts.map(callTranscript => {
|
310
|
-
var _a, _b, _c, _d;
|
298
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
311
299
|
const currTranscript = Object.assign({}, callTranscript);
|
312
300
|
currTranscript.transcript = (_a = callTranscript.transcript) === null || _a === void 0 ? void 0 : _a.map(transcript => {
|
313
301
|
var _a;
|
314
302
|
const { speakerId } = transcript, rest = __rest(transcript, ["speakerId"]);
|
315
303
|
return Object.assign(Object.assign({}, rest), { speakerName: (_a = userIdToNameMap[speakerId !== null && speakerId !== void 0 ? speakerId : ""]) !== null && _a !== void 0 ? _a : "Unknown" });
|
316
304
|
});
|
317
|
-
return Object.assign({ callName: (_d = (_c = (_b = publicCalls.find(call => { var _a; return ((_a = call.metaData) === null || _a === void 0 ? void 0 : _a.id) === callTranscript.callId; })) === null || _b === void 0 ? void 0 : _b.metaData) === null || _c === void 0 ? void 0 : _c.title) !== null && _d !== void 0 ? _d : "" }, currTranscript);
|
305
|
+
return Object.assign({ callName: (_d = (_c = (_b = publicCalls.find(call => { var _a; return ((_a = call.metaData) === null || _a === void 0 ? void 0 : _a.id) === callTranscript.callId; })) === null || _b === void 0 ? void 0 : _b.metaData) === null || _c === void 0 ? void 0 : _c.title) !== null && _d !== void 0 ? _d : "", startTime: (_g = (_f = (_e = publicCalls.find(call => { var _a; return ((_a = call.metaData) === null || _a === void 0 ? void 0 : _a.id) === callTranscript.callId; })) === null || _e === void 0 ? void 0 : _e.metaData) === null || _f === void 0 ? void 0 : _f.started) !== null && _g !== void 0 ? _g : "" }, currTranscript);
|
318
306
|
});
|
319
307
|
return {
|
320
308
|
success: true,
|
@@ -0,0 +1,46 @@
|
|
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 axiosClient_1 = require("../../util/axiosClient");
|
13
|
+
const missingAuthConstants_1 = require("../../util/missingAuthConstants");
|
14
|
+
const searchDriveByKeywords = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
15
|
+
var _b;
|
16
|
+
if (!authParams.authToken) {
|
17
|
+
return { success: false, error: missingAuthConstants_1.MISSING_AUTH_TOKEN, files: [] };
|
18
|
+
}
|
19
|
+
const { keywords } = params;
|
20
|
+
// Build the query: fullText contains 'keyword1' or fullText contains 'keyword2' ...
|
21
|
+
const query = keywords.map(kw => `fullText contains '${kw.replace(/'/g, "\\'")}'`).join(" or ");
|
22
|
+
const url = `https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(query)}&fields=files(id,name,mimeType,webViewLink)&supportsAllDrives=true&includeItemsFromAllDrives=true`;
|
23
|
+
try {
|
24
|
+
const res = yield axiosClient_1.axiosClient.get(url, {
|
25
|
+
headers: {
|
26
|
+
Authorization: `Bearer ${authParams.authToken}`,
|
27
|
+
},
|
28
|
+
});
|
29
|
+
const files = ((_b = res.data.files) === null || _b === void 0 ? void 0 : _b.map((file) => ({
|
30
|
+
id: file.id || "",
|
31
|
+
name: file.name || "",
|
32
|
+
mimeType: file.mimeType || "",
|
33
|
+
url: file.webViewLink || "",
|
34
|
+
}))) || [];
|
35
|
+
return { success: true, files };
|
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
|
+
});
|
46
|
+
exports.default = searchDriveByKeywords;
|
@@ -0,0 +1,96 @@
|
|
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 types_1 = require("../../autogen/types");
|
17
|
+
const INCLUDED_TYPES = [
|
18
|
+
// "monument",
|
19
|
+
// "museum",
|
20
|
+
// "art_gallery",
|
21
|
+
// "sculpture",
|
22
|
+
// "cultural_landmark",
|
23
|
+
// "historical_place",
|
24
|
+
// "performing_arts_theater",
|
25
|
+
// "university",
|
26
|
+
// "aquarium",
|
27
|
+
// "botanical_garden",
|
28
|
+
// "comedy_club",
|
29
|
+
// "park",
|
30
|
+
// "movie_theater",
|
31
|
+
// "national_park",
|
32
|
+
// "garden",
|
33
|
+
// "night_club",
|
34
|
+
// "tourist_attraction",
|
35
|
+
// "water_park",
|
36
|
+
// "zoo",
|
37
|
+
// "bar",
|
38
|
+
"restaurant",
|
39
|
+
// "food_court",
|
40
|
+
// "bakery",
|
41
|
+
// "cafe",
|
42
|
+
// "coffee_shop",
|
43
|
+
// "pub",
|
44
|
+
// "wine_bar",
|
45
|
+
// "spa",
|
46
|
+
// "beach",
|
47
|
+
// "market",
|
48
|
+
// "shopping_mall",
|
49
|
+
// "stadium",
|
50
|
+
];
|
51
|
+
const nearbysearch = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
52
|
+
const url = `https://places.googleapis.com/v1/places:searchNearby`;
|
53
|
+
const fieldMask = [
|
54
|
+
"places.displayName",
|
55
|
+
"places.formattedAddress",
|
56
|
+
"places.priceLevel",
|
57
|
+
"places.rating",
|
58
|
+
"places.primaryTypeDisplayName",
|
59
|
+
"places.editorialSummary",
|
60
|
+
"places.regularOpeningHours",
|
61
|
+
].join(",");
|
62
|
+
const response = yield axios_1.default.post(url, {
|
63
|
+
maxResultCount: 20,
|
64
|
+
includedTypes: INCLUDED_TYPES,
|
65
|
+
locationRestriction: {
|
66
|
+
circle: {
|
67
|
+
center: {
|
68
|
+
latitude: params.latitude,
|
69
|
+
longitude: params.longitude,
|
70
|
+
},
|
71
|
+
radius: 10000,
|
72
|
+
},
|
73
|
+
},
|
74
|
+
}, {
|
75
|
+
headers: {
|
76
|
+
"X-Goog-Api-Key": authParams.apiKey,
|
77
|
+
"X-Goog-FieldMask": fieldMask,
|
78
|
+
"Content-Type": "application/json",
|
79
|
+
},
|
80
|
+
});
|
81
|
+
return types_1.googlemapsNearbysearchOutputSchema.parse({
|
82
|
+
results: response.data.places.map((place) => {
|
83
|
+
var _a, _b;
|
84
|
+
return ({
|
85
|
+
name: place.displayName.text,
|
86
|
+
address: place.formattedAddress,
|
87
|
+
priceLevel: place.priceLevel,
|
88
|
+
rating: place.rating,
|
89
|
+
primaryType: place.primaryTypeDisplayName.text,
|
90
|
+
editorialSummary: ((_a = place.editorialSummary) === null || _a === void 0 ? void 0 : _a.text) || "",
|
91
|
+
openingHours: ((_b = place.regularOpeningHours) === null || _b === void 0 ? void 0 : _b.weekdayDescriptions.join("\n")) || "",
|
92
|
+
});
|
93
|
+
}),
|
94
|
+
});
|
95
|
+
});
|
96
|
+
exports.default = nearbysearch;
|
@@ -0,0 +1,34 @@
|
|
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 createTicket = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
17
|
+
const { authToken, baseUrl } = authParams;
|
18
|
+
const url = `${baseUrl}/rest/api/3/issue`;
|
19
|
+
const payload = {
|
20
|
+
fields: Object.assign({ project: {
|
21
|
+
key: params.projectKey,
|
22
|
+
}, summary: params.summary, description: params.description, issuetype: {
|
23
|
+
name: params.issueType,
|
24
|
+
} }, (params.reporter ? { reporter: { id: params.reporter } } : {})),
|
25
|
+
};
|
26
|
+
const response = yield axios_1.default.post(url, payload, {
|
27
|
+
headers: {
|
28
|
+
Authorization: `Basic ${Buffer.from(`${params.username}:${authToken}`).toString("base64")}`,
|
29
|
+
"Content-Type": "application/json",
|
30
|
+
},
|
31
|
+
});
|
32
|
+
return response.data;
|
33
|
+
});
|
34
|
+
exports.default = createTicket;
|
@@ -0,0 +1,60 @@
|
|
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 web_api_1 = require("@slack/web-api");
|
13
|
+
const slackListConversations = (_a) => __awaiter(void 0, [_a], void 0, function* ({ authParams, }) {
|
14
|
+
var _b;
|
15
|
+
const client = new web_api_1.WebClient(authParams.authToken);
|
16
|
+
const allChannels = [];
|
17
|
+
let cursor;
|
18
|
+
const limit = 100;
|
19
|
+
try {
|
20
|
+
do {
|
21
|
+
const response = yield client.conversations.list({
|
22
|
+
exclude_archived: true,
|
23
|
+
limit: limit,
|
24
|
+
cursor: cursor,
|
25
|
+
});
|
26
|
+
if (!response.ok) {
|
27
|
+
throw new Error(`Slack API error: ${response.error}`);
|
28
|
+
}
|
29
|
+
// Add channels from this page to our results
|
30
|
+
if (response.channels && Array.isArray(response.channels)) {
|
31
|
+
allChannels.push(...response.channels);
|
32
|
+
}
|
33
|
+
// Get cursor for next page
|
34
|
+
cursor = (_b = response.response_metadata) === null || _b === void 0 ? void 0 : _b.next_cursor;
|
35
|
+
// If user specified a limit and we've hit it, stop paginating
|
36
|
+
if (limit && allChannels.length >= limit) {
|
37
|
+
allChannels.splice(limit); // Trim to exact limit
|
38
|
+
break;
|
39
|
+
}
|
40
|
+
} while (cursor && cursor.length > 0);
|
41
|
+
return {
|
42
|
+
channels: allChannels.map(channel => ({
|
43
|
+
id: channel.id,
|
44
|
+
name: channel.name,
|
45
|
+
topic: channel.topic.value,
|
46
|
+
purpose: channel.purpose.value,
|
47
|
+
})),
|
48
|
+
};
|
49
|
+
}
|
50
|
+
catch (error) {
|
51
|
+
if (error instanceof Error) {
|
52
|
+
// Enhance error with more context
|
53
|
+
throw new Error(`Failed to list Slack conversations: ${error.message}`);
|
54
|
+
}
|
55
|
+
else {
|
56
|
+
throw error;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
});
|
60
|
+
exports.default = slackListConversations;
|