@credal/actions 0.2.208 → 0.2.210
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 +8 -1
- package/dist/actions/autogen/templates.d.ts +1 -0
- package/dist/actions/autogen/templates.js +93 -3
- package/dist/actions/autogen/types.d.ts +78 -5
- package/dist/actions/autogen/types.js +41 -1
- package/dist/actions/groups.d.ts +6 -0
- package/dist/actions/groups.js +251 -0
- package/dist/actions/providers/github/fetchFile.d.ts +3 -0
- package/dist/actions/providers/github/fetchFile.js +131 -0
- package/dist/actions/providers/github/getContents.d.ts +3 -0
- package/dist/actions/providers/github/getContents.js +41 -0
- package/dist/actions/providers/github/searchRepository.js +7 -7
- package/dist/actions/providers/google-oauth/getDriveFileContentById.js +2 -18
- package/dist/actions/providers/google-oauth/getSpreadsheetMetadata.d.ts +15 -0
- package/dist/actions/providers/google-oauth/getSpreadsheetMetadata.js +49 -0
- package/dist/actions/providers/slack/archiveChannel.d.ts +3 -0
- package/dist/actions/providers/slack/archiveChannel.js +42 -0
- package/dist/actions/providers/slack/sendMessage.js +62 -21
- package/dist/utils/google.d.ts +1 -0
- package/dist/utils/google.js +48 -22
- package/package.json +1 -1
- package/dist/actions/providers/jira/updateServiceDeskRequest.d.ts +0 -3
- package/dist/actions/providers/jira/updateServiceDeskRequest.js +0 -72
- package/dist/actions/providers/microsoft/sendOutlookEmail.d.ts +0 -3
- package/dist/actions/providers/microsoft/sendOutlookEmail.js +0 -48
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { genericFillTemplateDefinition, confluenceOverwritePageDefinition, googlemapsValidateAddressDefinition, mathAddDefinition, mongoInsertMongoDocDefinition, slackSendMessageDefinition, slackGetChannelMessagesDefinition, slackCreateChannelDefinition, slackArchiveChannelDefinition, snowflakeGetRowByFieldValueDefinition, zendeskCreateZendeskTicketDefinition, zendeskListZendeskTicketsDefinition, zendeskGetTicketDetailsDefinition, zendeskUpdateTicketStatusDefinition, zendeskAddCommentToTicketDefinition, zendeskAssignTicketDefinition, openstreetmapGetLatitudeLongitudeFromLocationDefinition, nwsGetForecastForLocationDefinition, jiraAssignJiraTicketDefinition, jiraCommentJiraTicketDefinition, jiraCreateJiraTicketDefinition, jiraGetJiraTicketDetailsDefinition, jiraGetJiraTicketHistoryDefinition, jiraUpdateJiraTicketDetailsDefinition, jiraUpdateJiraTicketStatusDefinition, jiraGetServiceDesksDefinition, jiraCreateServiceDeskRequestDefinition, googlemapsNearbysearchRestaurantsDefinition, firecrawlScrapeUrlDefinition, resendSendEmailDefinition, linkedinCreateShareLinkedinPostUrlDefinition, googleOauthCreateNewGoogleDocDefinition, xCreateShareXPostUrlDefinition, firecrawlScrapeTweetDataWithNitterDefinition, finnhubSymbolLookupDefinition, finnhubGetBasicFinancialsDefinition, confluenceFetchPageContentDefinition, snowflakeRunSnowflakeQueryDefinition, lookerEnableUserByEmailDefinition, googleOauthUpdateDocDefinition, googleOauthScheduleCalendarMeetingDefinition, googleOauthListCalendarsDefinition, googleOauthListCalendarEventsDefinition, googleOauthUpdateCalendarEventDefinition, googleOauthDeleteCalendarEventDefinition, googleOauthCreateSpreadsheetDefinition, googleOauthUpdateSpreadsheetDefinition, googleOauthCreatePresentationDefinition, googleOauthUpdatePresentationDefinition, googleOauthSearchDriveByKeywordsDefinition, googlemailSearchGmailMessagesDefinition, googlemailListGmailThreadsDefinition, googleOauthListGroupsDefinition, googleOauthGetGroupDefinition, googleOauthListGroupMembersDefinition, googleOauthHasGroupMemberDefinition, googleOauthAddGroupMemberDefinition, googleOauthDeleteGroupMemberDefinition, salesforceUpdateRecordDefinition, salesforceCreateCaseDefinition, salesforceGenerateSalesReportDefinition, salesforceGetRecordDefinition, salesforceGetSalesforceRecordsByQueryDefinition, microsoftMessageTeamsChatDefinition, microsoftMessageTeamsChannelDefinition, asanaCommentTaskDefinition, asanaCreateTaskDefinition, asanaUpdateTaskDefinition, asanaSearchTasksDefinition, githubCreateOrUpdateFileDefinition, githubCreateBranchDefinition, githubCreatePullRequestDefinition, microsoftUpdateSpreadsheetDefinition, microsoftUpdateDocumentDefinition, microsoftCreateDocumentDefinition, microsoftGetDocumentDefinition, salesforceFetchSalesforceSchemaByObjectDefinition, firecrawlDeepResearchDefinition, jiraGetJiraIssuesByQueryDefinition, githubListPullRequestsDefinition, salesforceCreateRecordDefinition, ashbyCreateNoteDefinition, ashbyGetCandidateInfoDefinition, ashbyListCandidatesDefinition, ashbyListCandidateNotesDefinition, ashbySearchCandidatesDefinition, ashbyCreateCandidateDefinition, ashbyUpdateCandidateDefinition, ashbyAddCandidateToProjectDefinition, bingGetTopNSearchResultUrlsDefinition, gongGetGongTranscriptsDefinition, kandjiGetFVRecoveryKeyForDeviceDefinition, asanaListAsanaTasksByProjectDefinition, notionSearchByTitleDefinition, asanaGetTasksDetailsDefinition, jamfGetJamfComputerInventoryDefinition, jamfGetJamfFileVaultRecoveryKeyDefinition, oktaListOktaUsersDefinition, oktaGetOktaUserDefinition, oktaListOktaUserGroupsDefinition, oktaListOktaGroupsDefinition, oktaGetOktaGroupDefinition, oktaListOktaGroupMembersDefinition, oktaRemoveUserFromGroupDefinition, oktaAddUserToGroupDefinition, oktaResetPasswordDefinition, oktaResetMFADefinition, oktaListMFADefinition, jamfGetJamfUserComputerIdDefinition, jamfLockJamfComputerByIdDefinition, oktaTriggerOktaWorkflowDefinition, jiraOrgAssignJiraTicketDefinition, jiraOrgCreateJiraTicketDefinition, jiraOrgCommentJiraTicketDefinition, jiraOrgGetJiraTicketDetailsDefinition, jiraOrgGetJiraTicketHistoryDefinition, jiraOrgUpdateJiraTicketDetailsDefinition, jiraOrgUpdateJiraTicketStatusDefinition, jiraOrgGetJiraIssuesByQueryDefinition, googleOauthGetDriveFileContentByIdDefinition, googleOauthSearchDriveByQueryDefinition, googleOauthSearchDriveByQueryAndGetFileContentDefinition, githubGetFileContentDefinition, githubListDirectoryDefinition, } from "./autogen/templates.js";
|
|
2
|
+
export const ACTION_GROUPS = {
|
|
3
|
+
GENERIC: {
|
|
4
|
+
description: "Generic utility actions",
|
|
5
|
+
actions: [genericFillTemplateDefinition],
|
|
6
|
+
},
|
|
7
|
+
ASANA: {
|
|
8
|
+
description: "Actions for interacting with Asana",
|
|
9
|
+
actions: [
|
|
10
|
+
asanaCommentTaskDefinition,
|
|
11
|
+
asanaCreateTaskDefinition,
|
|
12
|
+
asanaUpdateTaskDefinition,
|
|
13
|
+
asanaSearchTasksDefinition,
|
|
14
|
+
asanaListAsanaTasksByProjectDefinition,
|
|
15
|
+
asanaGetTasksDetailsDefinition,
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
SLACK_LIST_CONVERSATIONS: {
|
|
19
|
+
description: "Actions for interacting with Slack",
|
|
20
|
+
actions: [
|
|
21
|
+
slackSendMessageDefinition,
|
|
22
|
+
slackGetChannelMessagesDefinition,
|
|
23
|
+
slackCreateChannelDefinition,
|
|
24
|
+
slackArchiveChannelDefinition,
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
CONFLUENCE: {
|
|
28
|
+
description: "Action for interacting with Confluence",
|
|
29
|
+
actions: [confluenceOverwritePageDefinition, confluenceFetchPageContentDefinition],
|
|
30
|
+
},
|
|
31
|
+
MATH_ADD: {
|
|
32
|
+
description: "Action for adding two numbers",
|
|
33
|
+
actions: [mathAddDefinition],
|
|
34
|
+
},
|
|
35
|
+
GOOGLE_MAPS: {
|
|
36
|
+
description: "Action for interacting with Google Maps",
|
|
37
|
+
actions: [googlemapsValidateAddressDefinition, googlemapsNearbysearchRestaurantsDefinition],
|
|
38
|
+
},
|
|
39
|
+
GOOGLE_DRIVE: {
|
|
40
|
+
description: "Action for interacting with Google Drive",
|
|
41
|
+
actions: [
|
|
42
|
+
googleOauthCreateNewGoogleDocDefinition,
|
|
43
|
+
googleOauthUpdateDocDefinition,
|
|
44
|
+
googleOauthCreateSpreadsheetDefinition,
|
|
45
|
+
googleOauthUpdateSpreadsheetDefinition,
|
|
46
|
+
googleOauthCreatePresentationDefinition,
|
|
47
|
+
googleOauthUpdatePresentationDefinition,
|
|
48
|
+
googleOauthSearchDriveByKeywordsDefinition,
|
|
49
|
+
googleOauthSearchDriveByQueryDefinition,
|
|
50
|
+
googleOauthSearchDriveByQueryAndGetFileContentDefinition,
|
|
51
|
+
googleOauthGetDriveFileContentByIdDefinition,
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
GOOGLE_CALENDAR: {
|
|
55
|
+
description: "Actions for interacting with Google Calendar",
|
|
56
|
+
actions: [
|
|
57
|
+
googleOauthScheduleCalendarMeetingDefinition,
|
|
58
|
+
googleOauthListCalendarsDefinition,
|
|
59
|
+
googleOauthListCalendarEventsDefinition,
|
|
60
|
+
googleOauthUpdateCalendarEventDefinition,
|
|
61
|
+
googleOauthDeleteCalendarEventDefinition,
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
GMAIL: {
|
|
65
|
+
description: "Actions for interacting with Gmail",
|
|
66
|
+
actions: [googlemailSearchGmailMessagesDefinition, googlemailListGmailThreadsDefinition],
|
|
67
|
+
},
|
|
68
|
+
LINKEDIN_SHARE_POST: {
|
|
69
|
+
description: "Action for creating a share post url on linkedin",
|
|
70
|
+
actions: [linkedinCreateShareLinkedinPostUrlDefinition],
|
|
71
|
+
},
|
|
72
|
+
ZENDESK_ACTIONS: {
|
|
73
|
+
description: "Actions for interacting with Zendesk",
|
|
74
|
+
actions: [
|
|
75
|
+
zendeskCreateZendeskTicketDefinition,
|
|
76
|
+
zendeskListZendeskTicketsDefinition,
|
|
77
|
+
zendeskGetTicketDetailsDefinition,
|
|
78
|
+
zendeskUpdateTicketStatusDefinition,
|
|
79
|
+
zendeskAddCommentToTicketDefinition,
|
|
80
|
+
zendeskAssignTicketDefinition,
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
BING_SEARCH: {
|
|
84
|
+
description: "Action for searching Bing",
|
|
85
|
+
actions: [bingGetTopNSearchResultUrlsDefinition],
|
|
86
|
+
},
|
|
87
|
+
MONGO_INSERT_DOC: {
|
|
88
|
+
description: "Action for inserting a document into a MongoDB collection",
|
|
89
|
+
actions: [mongoInsertMongoDocDefinition],
|
|
90
|
+
},
|
|
91
|
+
SNOWFLAKE_ACTIONS: {
|
|
92
|
+
description: "Action for getting content from a Snowflake table",
|
|
93
|
+
actions: [snowflakeGetRowByFieldValueDefinition, snowflakeRunSnowflakeQueryDefinition],
|
|
94
|
+
},
|
|
95
|
+
JIRA_ACTIONS: {
|
|
96
|
+
description: "Action for interacting with Jira tickets",
|
|
97
|
+
actions: [
|
|
98
|
+
jiraAssignJiraTicketDefinition,
|
|
99
|
+
jiraCreateJiraTicketDefinition,
|
|
100
|
+
jiraCommentJiraTicketDefinition,
|
|
101
|
+
jiraGetJiraTicketDetailsDefinition,
|
|
102
|
+
jiraGetJiraTicketHistoryDefinition,
|
|
103
|
+
jiraUpdateJiraTicketDetailsDefinition,
|
|
104
|
+
jiraUpdateJiraTicketStatusDefinition,
|
|
105
|
+
jiraGetJiraIssuesByQueryDefinition,
|
|
106
|
+
jiraGetServiceDesksDefinition,
|
|
107
|
+
jiraCreateServiceDeskRequestDefinition,
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
JIRA_ORG_ACTIONS: {
|
|
111
|
+
description: "Action for interacting with Jira tickets",
|
|
112
|
+
actions: [
|
|
113
|
+
jiraOrgAssignJiraTicketDefinition,
|
|
114
|
+
jiraOrgCreateJiraTicketDefinition,
|
|
115
|
+
jiraOrgCommentJiraTicketDefinition,
|
|
116
|
+
jiraOrgGetJiraTicketDetailsDefinition,
|
|
117
|
+
jiraOrgGetJiraTicketHistoryDefinition,
|
|
118
|
+
jiraOrgUpdateJiraTicketDetailsDefinition,
|
|
119
|
+
jiraOrgUpdateJiraTicketStatusDefinition,
|
|
120
|
+
jiraOrgGetJiraIssuesByQueryDefinition,
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
OPENSTREETMAP_GET_LATITUDE_LONGITUDE_FROM_LOCATION: {
|
|
124
|
+
description: "Action for getting the latitude and longitude of a location",
|
|
125
|
+
actions: [openstreetmapGetLatitudeLongitudeFromLocationDefinition],
|
|
126
|
+
},
|
|
127
|
+
NWS_GET_FORECAST_FOR_LOCATION: {
|
|
128
|
+
description: "Action for getting the weather forecast for a location",
|
|
129
|
+
actions: [nwsGetForecastForLocationDefinition],
|
|
130
|
+
},
|
|
131
|
+
FIRECRAWL: {
|
|
132
|
+
description: "Actions for interacting with Firecrawl",
|
|
133
|
+
actions: [
|
|
134
|
+
firecrawlScrapeUrlDefinition,
|
|
135
|
+
firecrawlScrapeTweetDataWithNitterDefinition,
|
|
136
|
+
firecrawlDeepResearchDefinition,
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
RESEND: {
|
|
140
|
+
description: "Action for sending an email",
|
|
141
|
+
actions: [resendSendEmailDefinition],
|
|
142
|
+
},
|
|
143
|
+
X: {
|
|
144
|
+
description: "Actions for interacting with X(formerly twitter)",
|
|
145
|
+
actions: [xCreateShareXPostUrlDefinition],
|
|
146
|
+
},
|
|
147
|
+
GONG: {
|
|
148
|
+
description: "Actions for interacting with Gong",
|
|
149
|
+
actions: [gongGetGongTranscriptsDefinition],
|
|
150
|
+
},
|
|
151
|
+
FINNHUB: {
|
|
152
|
+
description: "Action for interacting with Finnhub for stock market data",
|
|
153
|
+
actions: [finnhubSymbolLookupDefinition, finnhubGetBasicFinancialsDefinition],
|
|
154
|
+
},
|
|
155
|
+
JAMF: {
|
|
156
|
+
description: "Actions for interacting with Jamf",
|
|
157
|
+
actions: [
|
|
158
|
+
jamfGetJamfComputerInventoryDefinition,
|
|
159
|
+
jamfGetJamfFileVaultRecoveryKeyDefinition,
|
|
160
|
+
jamfGetJamfUserComputerIdDefinition,
|
|
161
|
+
jamfLockJamfComputerByIdDefinition,
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
LOOKER: {
|
|
165
|
+
description: "Actions for interacting with Looker",
|
|
166
|
+
actions: [lookerEnableUserByEmailDefinition],
|
|
167
|
+
},
|
|
168
|
+
SALESFORCE: {
|
|
169
|
+
description: "Actions for interacting with Salesforce",
|
|
170
|
+
actions: [
|
|
171
|
+
salesforceUpdateRecordDefinition,
|
|
172
|
+
salesforceCreateRecordDefinition,
|
|
173
|
+
salesforceCreateCaseDefinition,
|
|
174
|
+
salesforceGenerateSalesReportDefinition,
|
|
175
|
+
salesforceGetRecordDefinition,
|
|
176
|
+
salesforceGetSalesforceRecordsByQueryDefinition,
|
|
177
|
+
salesforceFetchSalesforceSchemaByObjectDefinition,
|
|
178
|
+
],
|
|
179
|
+
},
|
|
180
|
+
MICROSOFT: {
|
|
181
|
+
description: "Actions for interacting with Microsoft 365",
|
|
182
|
+
actions: [
|
|
183
|
+
microsoftMessageTeamsChatDefinition,
|
|
184
|
+
microsoftMessageTeamsChannelDefinition,
|
|
185
|
+
microsoftUpdateSpreadsheetDefinition,
|
|
186
|
+
microsoftUpdateDocumentDefinition,
|
|
187
|
+
microsoftCreateDocumentDefinition,
|
|
188
|
+
microsoftGetDocumentDefinition,
|
|
189
|
+
],
|
|
190
|
+
},
|
|
191
|
+
KANDJI: {
|
|
192
|
+
description: "Actions for interacting with Kandji",
|
|
193
|
+
actions: [kandjiGetFVRecoveryKeyForDeviceDefinition],
|
|
194
|
+
},
|
|
195
|
+
GITHUB: {
|
|
196
|
+
description: "Actions for interacting with GitHub",
|
|
197
|
+
actions: [
|
|
198
|
+
githubCreateOrUpdateFileDefinition,
|
|
199
|
+
githubCreateBranchDefinition,
|
|
200
|
+
githubCreatePullRequestDefinition,
|
|
201
|
+
githubListPullRequestsDefinition,
|
|
202
|
+
githubGetFileContentDefinition,
|
|
203
|
+
githubListDirectoryDefinition,
|
|
204
|
+
],
|
|
205
|
+
},
|
|
206
|
+
ASHBY: {
|
|
207
|
+
description: "Actions for interacting with Ashby",
|
|
208
|
+
actions: [
|
|
209
|
+
ashbyCreateNoteDefinition,
|
|
210
|
+
ashbyGetCandidateInfoDefinition,
|
|
211
|
+
ashbyListCandidatesDefinition,
|
|
212
|
+
ashbyListCandidateNotesDefinition,
|
|
213
|
+
ashbySearchCandidatesDefinition,
|
|
214
|
+
ashbyCreateCandidateDefinition,
|
|
215
|
+
ashbyUpdateCandidateDefinition,
|
|
216
|
+
ashbyAddCandidateToProjectDefinition,
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
NOTION: {
|
|
220
|
+
description: "Actions for interacting with Notion",
|
|
221
|
+
actions: [notionSearchByTitleDefinition],
|
|
222
|
+
},
|
|
223
|
+
GOOGLE_GROUPS: {
|
|
224
|
+
description: "Google Workspace Groups management actions",
|
|
225
|
+
actions: [
|
|
226
|
+
googleOauthListGroupsDefinition,
|
|
227
|
+
googleOauthGetGroupDefinition,
|
|
228
|
+
googleOauthListGroupMembersDefinition,
|
|
229
|
+
googleOauthHasGroupMemberDefinition,
|
|
230
|
+
googleOauthAddGroupMemberDefinition,
|
|
231
|
+
googleOauthDeleteGroupMemberDefinition,
|
|
232
|
+
],
|
|
233
|
+
},
|
|
234
|
+
OKTA: {
|
|
235
|
+
description: "Actions for interacting with Okta",
|
|
236
|
+
actions: [
|
|
237
|
+
oktaListOktaUsersDefinition,
|
|
238
|
+
oktaGetOktaUserDefinition,
|
|
239
|
+
oktaListOktaUserGroupsDefinition,
|
|
240
|
+
oktaListOktaGroupsDefinition,
|
|
241
|
+
oktaGetOktaGroupDefinition,
|
|
242
|
+
oktaListOktaGroupMembersDefinition,
|
|
243
|
+
oktaRemoveUserFromGroupDefinition,
|
|
244
|
+
oktaAddUserToGroupDefinition,
|
|
245
|
+
oktaResetPasswordDefinition,
|
|
246
|
+
oktaResetMFADefinition,
|
|
247
|
+
oktaListMFADefinition,
|
|
248
|
+
oktaTriggerOktaWorkflowDefinition,
|
|
249
|
+
],
|
|
250
|
+
},
|
|
251
|
+
};
|
|
@@ -0,0 +1,131 @@
|
|
|
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 { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
|
|
11
|
+
// Limits on the number of results to return
|
|
12
|
+
const MAX_CODE_RESULTS = 15;
|
|
13
|
+
const MAX_COMMITS = 10;
|
|
14
|
+
const MAX_FILES_PER_COMMIT = 5;
|
|
15
|
+
const MAX_ISSUES_OR_PRS = 10;
|
|
16
|
+
const MAX_FILES_PER_PR = 5;
|
|
17
|
+
const MAX_PATCH_LINES = 20;
|
|
18
|
+
const MAX_FRAGMENT_LINES = 20;
|
|
19
|
+
const searchRepository = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
|
20
|
+
const { Octokit } = yield import("octokit");
|
|
21
|
+
if (!authParams.authToken) {
|
|
22
|
+
throw new Error(MISSING_AUTH_TOKEN);
|
|
23
|
+
}
|
|
24
|
+
const octokit = new Octokit({ auth: authParams.authToken });
|
|
25
|
+
const { organization, repository, query } = params;
|
|
26
|
+
// Search CODE with text match metadata
|
|
27
|
+
const codeResultsResponse = yield octokit.rest.search.code({
|
|
28
|
+
q: `${query} in:file,path repo:${organization}/${repository}`,
|
|
29
|
+
text_match: true,
|
|
30
|
+
headers: {
|
|
31
|
+
accept: "application/vnd.github.v3.text-match+json",
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const codeResults = codeResultsResponse.data.items.slice(0, MAX_CODE_RESULTS).map(item => ({
|
|
35
|
+
name: item.name,
|
|
36
|
+
path: item.path,
|
|
37
|
+
sha: item.sha,
|
|
38
|
+
url: item.url,
|
|
39
|
+
repository: {
|
|
40
|
+
full_name: item.repository.full_name,
|
|
41
|
+
html_url: item.repository.html_url,
|
|
42
|
+
},
|
|
43
|
+
score: item.score,
|
|
44
|
+
textMatches: item.text_matches
|
|
45
|
+
? item.text_matches.map(match => {
|
|
46
|
+
var _a, _b, _c, _d;
|
|
47
|
+
return ({
|
|
48
|
+
object_url: (_a = match.object_url) !== null && _a !== void 0 ? _a : undefined,
|
|
49
|
+
object_type: (_b = match.object_type) !== null && _b !== void 0 ? _b : undefined,
|
|
50
|
+
fragment: (_c = match.fragment) === null || _c === void 0 ? void 0 : _c.split("\n").slice(0, MAX_FRAGMENT_LINES).join("\n"),
|
|
51
|
+
matches: (_d = match.matches) !== null && _d !== void 0 ? _d : [],
|
|
52
|
+
});
|
|
53
|
+
})
|
|
54
|
+
: [],
|
|
55
|
+
}));
|
|
56
|
+
// Search COMMITS
|
|
57
|
+
const commitResults = yield octokit.rest.search.commits({
|
|
58
|
+
q: `${query} repo:${organization}/${repository}`,
|
|
59
|
+
headers: {
|
|
60
|
+
accept: "application/vnd.github.cloak-preview+json",
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const commitSHAs = commitResults.data.items.slice(0, MAX_COMMITS).map(item => item.sha);
|
|
64
|
+
const commitDetails = yield Promise.all(commitSHAs.map(sha => octokit.rest.repos.getCommit({ owner: organization, repo: repository, ref: sha })));
|
|
65
|
+
const enrichedCommits = commitResults.data.items.slice(0, MAX_COMMITS).map(item => {
|
|
66
|
+
var _a, _b;
|
|
67
|
+
const full = commitDetails.find(c => c.data.sha === item.sha);
|
|
68
|
+
return {
|
|
69
|
+
sha: item.sha,
|
|
70
|
+
url: item.url,
|
|
71
|
+
commit: {
|
|
72
|
+
message: item.commit.message,
|
|
73
|
+
author: item.commit.author,
|
|
74
|
+
},
|
|
75
|
+
score: item.score,
|
|
76
|
+
author: (_a = item.author) !== null && _a !== void 0 ? _a : undefined,
|
|
77
|
+
files: ((_b = full === null || full === void 0 ? void 0 : full.data.files) === null || _b === void 0 ? void 0 : _b.slice(0, MAX_FILES_PER_COMMIT).map(f => {
|
|
78
|
+
var _a;
|
|
79
|
+
return ({
|
|
80
|
+
filename: f.filename,
|
|
81
|
+
status: f.status,
|
|
82
|
+
patch: (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n").slice(0, MAX_PATCH_LINES).join("\n"),
|
|
83
|
+
});
|
|
84
|
+
})) || [],
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
// Search ISSUES & PRs
|
|
88
|
+
const issueResults = yield octokit.rest.search.issuesAndPullRequests({
|
|
89
|
+
q: `${query} repo:${organization}/${repository}`,
|
|
90
|
+
});
|
|
91
|
+
const prItems = issueResults.data.items.filter(item => item.pull_request).slice(0, MAX_ISSUES_OR_PRS);
|
|
92
|
+
const prNumbers = prItems.map(item => item.number);
|
|
93
|
+
const prFiles = yield Promise.all(prNumbers.map(number => octokit.rest.pulls.listFiles({ owner: organization, repo: repository, pull_number: number })));
|
|
94
|
+
const issuesAndPRs = issueResults.data.items
|
|
95
|
+
.slice(0, MAX_ISSUES_OR_PRS)
|
|
96
|
+
.map(item => {
|
|
97
|
+
var _a, _b, _c, _d;
|
|
98
|
+
const isPR = !!item.pull_request;
|
|
99
|
+
const prIndex = prNumbers.indexOf(item.number);
|
|
100
|
+
const files = isPR && prIndex !== -1
|
|
101
|
+
? prFiles[prIndex].data.slice(0, MAX_FILES_PER_PR).map(f => {
|
|
102
|
+
var _a;
|
|
103
|
+
return ({
|
|
104
|
+
filename: f.filename,
|
|
105
|
+
status: f.status,
|
|
106
|
+
patch: (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n").slice(0, MAX_PATCH_LINES).join("\n"),
|
|
107
|
+
});
|
|
108
|
+
})
|
|
109
|
+
: undefined;
|
|
110
|
+
return {
|
|
111
|
+
number: item.number,
|
|
112
|
+
title: item.title,
|
|
113
|
+
html_url: item.html_url,
|
|
114
|
+
state: item.state,
|
|
115
|
+
isPullRequest: isPR,
|
|
116
|
+
body: item.body,
|
|
117
|
+
user: {
|
|
118
|
+
email: (_b = (_a = item.user) === null || _a === void 0 ? void 0 : _a.email) !== null && _b !== void 0 ? _b : undefined,
|
|
119
|
+
name: (_d = (_c = item.user) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : undefined,
|
|
120
|
+
},
|
|
121
|
+
score: item.score,
|
|
122
|
+
files,
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
return {
|
|
126
|
+
code: codeResults,
|
|
127
|
+
commits: enrichedCommits,
|
|
128
|
+
issuesAndPullRequests: issuesAndPRs,
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
export default searchRepository;
|
|
@@ -0,0 +1,41 @@
|
|
|
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 { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
|
|
11
|
+
// Limits on the number of results to return
|
|
12
|
+
const MAX_CODE_RESULTS = 15;
|
|
13
|
+
const MAX_COMMITS = 10;
|
|
14
|
+
const MAX_FILES_PER_COMMIT = 5;
|
|
15
|
+
const MAX_ISSUES_OR_PRS = 10;
|
|
16
|
+
const MAX_FILES_PER_PR = 5;
|
|
17
|
+
const MAX_PATCH_LINES = 20;
|
|
18
|
+
const MAX_FRAGMENT_LINES = 20;
|
|
19
|
+
const searchRepository = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
|
20
|
+
const { Octokit } = yield import("octokit");
|
|
21
|
+
if (!authParams.authToken) {
|
|
22
|
+
throw new Error(MISSING_AUTH_TOKEN);
|
|
23
|
+
}
|
|
24
|
+
const octokit = new Octokit({ auth: authParams.authToken });
|
|
25
|
+
const { organization, repository, query } = params;
|
|
26
|
+
// Search CODE with text match metadata
|
|
27
|
+
const codeResultsResponse = yield octokit.rest.search.code({
|
|
28
|
+
q: `${query} in:file,path repo:${organization}/${repository}`,
|
|
29
|
+
text_match: true,
|
|
30
|
+
headers: {
|
|
31
|
+
accept: "application/vnd.github.v3.text-match+json",
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const commitResults = yield octokit.rest.repos.getCommit({ owner: organization, repo: repository, ref: sha });
|
|
35
|
+
return {
|
|
36
|
+
code: codeResults,
|
|
37
|
+
commits: enrichedCommits,
|
|
38
|
+
issuesAndPullRequests: issuesAndPRs,
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
export default searchRepository;
|
|
@@ -47,7 +47,7 @@ const searchRepository = (_a) => __awaiter(void 0, [_a], void 0, function* ({ pa
|
|
|
47
47
|
name: item.name,
|
|
48
48
|
path: item.path,
|
|
49
49
|
sha: item.sha.slice(0, 7),
|
|
50
|
-
url: item.
|
|
50
|
+
url: item.html_url,
|
|
51
51
|
score: item.score,
|
|
52
52
|
textMatches: item.text_matches
|
|
53
53
|
? item.text_matches.map(match => {
|
|
@@ -68,7 +68,7 @@ const searchRepository = (_a) => __awaiter(void 0, [_a], void 0, function* ({ pa
|
|
|
68
68
|
const full = commitDetails.find(c => c.data.sha === item.sha);
|
|
69
69
|
return {
|
|
70
70
|
sha: item.sha,
|
|
71
|
-
url: item.
|
|
71
|
+
url: item.html_url,
|
|
72
72
|
commit: {
|
|
73
73
|
message: item.commit.message,
|
|
74
74
|
author: item.commit.author,
|
|
@@ -76,11 +76,11 @@ const searchRepository = (_a) => __awaiter(void 0, [_a], void 0, function* ({ pa
|
|
|
76
76
|
score: item.score,
|
|
77
77
|
author: (_a = item.author) !== null && _a !== void 0 ? _a : undefined,
|
|
78
78
|
files: ((_b = full === null || full === void 0 ? void 0 : full.data.files) === null || _b === void 0 ? void 0 : _b.slice(0, MAX_FILES_PER_COMMIT).map(f => {
|
|
79
|
-
var _a;
|
|
79
|
+
var _a, _b, _c;
|
|
80
80
|
return ({
|
|
81
81
|
filename: f.filename,
|
|
82
82
|
status: f.status,
|
|
83
|
-
patch: (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n").slice(0, MAX_PATCH_LINES).join("\n"),
|
|
83
|
+
patch: (_c = (_b = (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n")) === null || _b === void 0 ? void 0 : _b.slice(0, MAX_PATCH_LINES)) === null || _c === void 0 ? void 0 : _c.join("\n"),
|
|
84
84
|
});
|
|
85
85
|
})) || [],
|
|
86
86
|
};
|
|
@@ -104,18 +104,18 @@ const searchRepository = (_a) => __awaiter(void 0, [_a], void 0, function* ({ pa
|
|
|
104
104
|
const prIndex = prNumbers.indexOf(item.number);
|
|
105
105
|
const files = isPR && prIndex !== -1
|
|
106
106
|
? prFiles[prIndex].data.slice(0, MAX_FILES_PER_PR).map(f => {
|
|
107
|
-
var _a;
|
|
107
|
+
var _a, _b, _c;
|
|
108
108
|
return ({
|
|
109
109
|
filename: f.filename,
|
|
110
110
|
status: f.status,
|
|
111
|
-
patch: (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n").slice(0, MAX_PATCH_LINES).join("\n"),
|
|
111
|
+
patch: (_c = (_b = (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n")) === null || _b === void 0 ? void 0 : _b.slice(0, MAX_PATCH_LINES)) === null || _c === void 0 ? void 0 : _c.join("\n"),
|
|
112
112
|
});
|
|
113
113
|
})
|
|
114
114
|
: undefined;
|
|
115
115
|
return {
|
|
116
116
|
number: item.number,
|
|
117
117
|
title: item.title,
|
|
118
|
-
|
|
118
|
+
url: item.html_url,
|
|
119
119
|
state: item.state,
|
|
120
120
|
isPullRequest: isPR,
|
|
121
121
|
body: item.body,
|
|
@@ -2,8 +2,7 @@ import { createAxiosClientWithTimeout } from "../../util/axiosClient.js";
|
|
|
2
2
|
import mammoth from "mammoth";
|
|
3
3
|
import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
|
|
4
4
|
import { extractTextFromPdf } from "../../../utils/pdf.js";
|
|
5
|
-
import { getGoogleDocContent, getGoogleSheetContent, getGoogleSlidesContent } from "../../../utils/google.js";
|
|
6
|
-
import { read, utils } from "xlsx";
|
|
5
|
+
import { getGoogleDocContent, getGoogleSheetContent, getGoogleSlidesContent, parseWorkbookBufferToPlainText, } from "../../../utils/google.js";
|
|
7
6
|
import officeParser from "officeparser";
|
|
8
7
|
const BASE_WEB_URL = "https://drive.google.com/file/d/";
|
|
9
8
|
const BASE_API_URL = "https://www.googleapis.com/drive/v3/files/";
|
|
@@ -112,22 +111,7 @@ const getDriveFileContentById = async ({ params, authParams, }) => {
|
|
|
112
111
|
headers,
|
|
113
112
|
responseType: "arraybuffer",
|
|
114
113
|
});
|
|
115
|
-
|
|
116
|
-
const workbook = read(downloadRes.data, { type: "buffer", sheetStubs: false });
|
|
117
|
-
// Convert sheets to CSV with early termination if charLimit is set
|
|
118
|
-
const sheetTexts = [];
|
|
119
|
-
let totalLength = 0;
|
|
120
|
-
const effectiveLimit = charLimit ? charLimit * 1.5 : 100000; // Process 1.5x limit for safety
|
|
121
|
-
// 2. Convert all sheets to plain text (CSV-style)
|
|
122
|
-
for (const sheetName of workbook.SheetNames) {
|
|
123
|
-
if (totalLength >= effectiveLimit)
|
|
124
|
-
break; // Early termination
|
|
125
|
-
const sheet = workbook.Sheets[sheetName];
|
|
126
|
-
const csv = utils.sheet_to_csv(sheet);
|
|
127
|
-
sheetTexts.push(`--- Sheet: ${sheetName} ---\n${csv}`);
|
|
128
|
-
totalLength += csv.length;
|
|
129
|
-
}
|
|
130
|
-
content = sheetTexts.join("\n").trim();
|
|
114
|
+
content = parseWorkbookBufferToPlainText(downloadRes.data, charLimit);
|
|
131
115
|
}
|
|
132
116
|
else if (mimeType === "application/vnd.openxmlformats-officedocument.presentationml.presentation") {
|
|
133
117
|
// Handle modern PowerPoint files (.pptx only)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { googleOauthGetSpreadsheetMetadataFunction } from "../../autogen/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Fetches metadata for a Google Sheets spreadsheet — title and the list of
|
|
4
|
+
* sheets (name, sheetId, and tab index) — without downloading any cell data.
|
|
5
|
+
*
|
|
6
|
+
* Use this action to discover sheet names and their numeric sheetId values
|
|
7
|
+
* before performing targeted reads or writes. The `sheetId` returned for each
|
|
8
|
+
* sheet is the same integer that appears as `#gid=<n>` in the spreadsheet URL.
|
|
9
|
+
*
|
|
10
|
+
* @param params.spreadsheetId - The ID of the spreadsheet (from its URL)
|
|
11
|
+
* @param authParams.authToken - OAuth2 bearer token with Sheets read scope
|
|
12
|
+
* @returns Spreadsheet title and an array of sheet descriptors, or an error
|
|
13
|
+
*/
|
|
14
|
+
declare const getSpreadsheetMetadata: googleOauthGetSpreadsheetMetadataFunction;
|
|
15
|
+
export default getSpreadsheetMetadata;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
|
|
2
|
+
import { createAxiosClientWithTimeout } from "../../util/axiosClient.js";
|
|
3
|
+
/**
|
|
4
|
+
* Fetches metadata for a Google Sheets spreadsheet — title and the list of
|
|
5
|
+
* sheets (name, sheetId, and tab index) — without downloading any cell data.
|
|
6
|
+
*
|
|
7
|
+
* Use this action to discover sheet names and their numeric sheetId values
|
|
8
|
+
* before performing targeted reads or writes. The `sheetId` returned for each
|
|
9
|
+
* sheet is the same integer that appears as `#gid=<n>` in the spreadsheet URL.
|
|
10
|
+
*
|
|
11
|
+
* @param params.spreadsheetId - The ID of the spreadsheet (from its URL)
|
|
12
|
+
* @param authParams.authToken - OAuth2 bearer token with Sheets read scope
|
|
13
|
+
* @returns Spreadsheet title and an array of sheet descriptors, or an error
|
|
14
|
+
*/
|
|
15
|
+
const getSpreadsheetMetadata = async ({ params, authParams, }) => {
|
|
16
|
+
if (!authParams.authToken) {
|
|
17
|
+
return { success: false, error: MISSING_AUTH_TOKEN };
|
|
18
|
+
}
|
|
19
|
+
const { spreadsheetId } = params;
|
|
20
|
+
const axiosClient = createAxiosClientWithTimeout(15_000);
|
|
21
|
+
try {
|
|
22
|
+
const response = await axiosClient.get(`https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}`, {
|
|
23
|
+
headers: { Authorization: `Bearer ${authParams.authToken}` },
|
|
24
|
+
params: {
|
|
25
|
+
fields: "spreadsheetId,properties/title,sheets/properties(sheetId,title,index)",
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
success: true,
|
|
30
|
+
spreadsheetId: response.data.spreadsheetId,
|
|
31
|
+
spreadsheetTitle: response.data.properties?.title,
|
|
32
|
+
sheets: (response.data.sheets || []).map((sheet) => ({
|
|
33
|
+
sheetId: sheet.properties?.sheetId,
|
|
34
|
+
title: sheet.properties?.title,
|
|
35
|
+
/** 0-based position of this sheet in the spreadsheet tab order */
|
|
36
|
+
index: sheet.properties?.index,
|
|
37
|
+
/** Same integer used in Google Sheets URL fragments like #gid=<n>. */
|
|
38
|
+
gid: sheet.properties?.sheetId,
|
|
39
|
+
})),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return {
|
|
44
|
+
success: false,
|
|
45
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
export default getSpreadsheetMetadata;
|
|
@@ -0,0 +1,42 @@
|
|
|
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 { WebClient } from "@slack/web-api";
|
|
11
|
+
import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
|
|
12
|
+
import { getSlackChannels } from "./helpers.js";
|
|
13
|
+
const archiveChannel = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
|
14
|
+
if (!authParams.authToken) {
|
|
15
|
+
throw new Error(MISSING_AUTH_TOKEN);
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const client = new WebClient(authParams.authToken);
|
|
19
|
+
const { channelName } = params;
|
|
20
|
+
const allChannels = yield getSlackChannels(client);
|
|
21
|
+
const channel = allChannels.find(channel => channel.name == channelName);
|
|
22
|
+
if (!channel || !channel.id) {
|
|
23
|
+
throw Error(`Channel with name ${channelName} not found`);
|
|
24
|
+
}
|
|
25
|
+
yield client.conversations.join({ channel: channel.id });
|
|
26
|
+
const result = yield client.conversations.archive({ channel: channel.id });
|
|
27
|
+
if (!result.ok) {
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
error: result.error || "Unknown error archiving channel",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return { success: true };
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: error instanceof Error ? error.message : "Unknown error archiving channel",
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
export default archiveChannel;
|