@credal/actions 0.1.32 → 0.1.35
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 +125 -1
- package/dist/actions/autogen/definitions.d.ts +5 -0
- package/dist/actions/autogen/definitions.js +132 -0
- package/dist/actions/autogen/templates.d.ts +21 -1
- package/dist/actions/autogen/templates.js +3956 -260
- package/dist/actions/autogen/types.d.ts +880 -26
- package/dist/actions/autogen/types.js +1622 -12
- package/dist/actions/definitions.js +35 -0
- package/dist/actions/groups.js +34 -4
- package/dist/actions/invokeMapper.d.ts +9 -0
- package/dist/actions/invokeMapper.js +33 -0
- package/dist/actions/providers/asana/commentAsanaTask.d.ts +3 -0
- package/dist/actions/providers/asana/commentAsanaTask.js +44 -0
- package/dist/actions/providers/asana/createAsanaTask.d.ts +3 -0
- package/dist/actions/providers/asana/createAsanaTask.js +93 -0
- package/dist/actions/providers/asana/updateAsanaTask.d.ts +3 -0
- package/dist/actions/providers/asana/updateAsanaTask.js +50 -0
- package/dist/actions/providers/asana/utils.d.ts +6 -0
- package/dist/actions/providers/asana/utils.js +73 -0
- package/dist/actions/providers/confluence/updatePage.js +9 -13
- package/dist/actions/providers/github/createBranch.d.ts +6 -0
- package/dist/actions/providers/github/createBranch.js +68 -0
- package/dist/actions/providers/github/createOrUpdateFile.d.ts +6 -0
- package/dist/actions/providers/github/createOrUpdateFile.js +75 -0
- package/dist/actions/providers/github/createPullRequest.d.ts +6 -0
- package/dist/actions/providers/github/createPullRequest.js +48 -0
- package/dist/actions/providers/google-oauth/createPresentation.d.ts +6 -0
- package/dist/actions/providers/google-oauth/createPresentation.js +52 -0
- package/dist/actions/providers/google-oauth/createSpreadsheet.d.ts +6 -0
- package/dist/actions/providers/google-oauth/createSpreadsheet.js +62 -0
- package/dist/actions/providers/google-oauth/updateDoc.d.ts +7 -0
- package/dist/actions/providers/google-oauth/updateDoc.js +69 -0
- package/dist/actions/providers/google-oauth/updatePresentation.d.ts +7 -0
- package/dist/actions/providers/google-oauth/updatePresentation.js +64 -0
- package/dist/actions/providers/google-oauth/updateSpreadsheet.d.ts +7 -0
- package/dist/actions/providers/google-oauth/updateSpreadsheet.js +51 -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/commentJiraTicket.d.ts +2 -2
- package/dist/actions/providers/jira/commentJiraTicket.js +2 -2
- package/dist/actions/providers/jira/createTicket.d.ts +3 -0
- package/dist/actions/providers/jira/createTicket.js +34 -0
- package/dist/actions/providers/jira/getJiraTicketDetails.d.ts +3 -0
- package/dist/actions/providers/jira/getJiraTicketDetails.js +40 -0
- package/dist/actions/providers/jira/getJiraTicketHistory.d.ts +3 -0
- package/dist/actions/providers/jira/getJiraTicketHistory.js +41 -0
- package/dist/actions/providers/jira/updateJiraTicketDetails.d.ts +3 -0
- package/dist/actions/providers/jira/updateJiraTicketDetails.js +56 -0
- package/dist/actions/providers/jira/updateJiraTicketStatus.d.ts +3 -0
- package/dist/actions/providers/jira/updateJiraTicketStatus.js +57 -0
- package/dist/actions/providers/microsoft/createDocument.d.ts +3 -0
- package/dist/actions/providers/microsoft/createDocument.js +47 -0
- package/dist/actions/providers/microsoft/getDocument.d.ts +3 -0
- package/dist/actions/providers/microsoft/getDocument.js +45 -0
- package/dist/actions/providers/microsoft/messageTeamsChannel.js +18 -3
- package/dist/actions/providers/microsoft/messageTeamsChat.js +18 -3
- package/dist/actions/providers/microsoft/updateDocument.d.ts +3 -0
- package/dist/actions/providers/microsoft/updateDocument.js +45 -0
- package/dist/actions/providers/microsoft/updateSpreadsheet.d.ts +3 -0
- package/dist/actions/providers/microsoft/updateSpreadsheet.js +56 -0
- package/dist/actions/providers/microsoft/utils.d.ts +7 -2
- package/dist/actions/providers/microsoft/utils.js +26 -14
- package/dist/actions/providers/salesforce/getSalesforceRecordByQuery.d.ts +3 -0
- package/dist/actions/providers/salesforce/getSalesforceRecordByQuery.js +43 -0
- 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 +3 -1
- package/dist/actions/providers/workday/requestTimeOff.d.ts +0 -23
- package/dist/actions/providers/workday/requestTimeOff.js +0 -88
@@ -0,0 +1,56 @@
|
|
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 updateJiraTicketDetails = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
14
|
+
const { authToken, cloudId, baseUrl } = authParams;
|
15
|
+
const { issueId, summary, description, customFields } = params;
|
16
|
+
if (!cloudId || !issueId) {
|
17
|
+
throw new Error("Cloud ID and Issue ID are required to update a Jira ticket");
|
18
|
+
}
|
19
|
+
const apiUrl = `https://api.atlassian.com/ex/jira/${cloudId}/rest/api/3/issue/${issueId}`;
|
20
|
+
const formattedDescription = description
|
21
|
+
? {
|
22
|
+
type: "doc",
|
23
|
+
version: 1,
|
24
|
+
content: [
|
25
|
+
{
|
26
|
+
type: "paragraph",
|
27
|
+
content: [
|
28
|
+
{
|
29
|
+
type: "text",
|
30
|
+
text: description,
|
31
|
+
},
|
32
|
+
],
|
33
|
+
},
|
34
|
+
],
|
35
|
+
}
|
36
|
+
: undefined;
|
37
|
+
const payload = {
|
38
|
+
fields: Object.assign(Object.assign(Object.assign({}, (summary && { summary })), (formattedDescription && { description: formattedDescription })), (customFields && Object.assign({}, customFields))),
|
39
|
+
};
|
40
|
+
try {
|
41
|
+
yield axiosClient_1.axiosClient.put(apiUrl, payload, {
|
42
|
+
headers: {
|
43
|
+
Authorization: `Bearer ${authToken}`,
|
44
|
+
Accept: "application/json",
|
45
|
+
},
|
46
|
+
});
|
47
|
+
return {
|
48
|
+
ticketUrl: `${baseUrl}/browse/${issueId}`,
|
49
|
+
};
|
50
|
+
}
|
51
|
+
catch (error) {
|
52
|
+
console.error("Error updating Jira ticket:", error);
|
53
|
+
throw new Error(error instanceof Error ? error.message : "Unknown error");
|
54
|
+
}
|
55
|
+
});
|
56
|
+
exports.default = updateJiraTicketDetails;
|
@@ -0,0 +1,57 @@
|
|
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 updateJiraTicketStatus = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
14
|
+
const { authToken, cloudId, baseUrl } = authParams;
|
15
|
+
if (!cloudId || !(params === null || params === void 0 ? void 0 : params.issueId) || !(params === null || params === void 0 ? void 0 : params.status)) {
|
16
|
+
throw new Error("Cloud ID, Issue ID, and Status Name are required to update a Jira ticket status");
|
17
|
+
}
|
18
|
+
const { issueId, status } = params;
|
19
|
+
const transitionsUrl = `https://api.atlassian.com/ex/jira/${cloudId}/rest/api/3/issue/${issueId}/transitions`;
|
20
|
+
try {
|
21
|
+
// API takes transition ID, so fetch available transitions the find ID of transition that matches given status name
|
22
|
+
const transitionsResponse = yield axiosClient_1.axiosClient.get(transitionsUrl, {
|
23
|
+
headers: {
|
24
|
+
Authorization: `Bearer ${authToken}`,
|
25
|
+
Accept: "application/json",
|
26
|
+
},
|
27
|
+
});
|
28
|
+
const transitions = transitionsResponse.data.transitions;
|
29
|
+
if (!transitions || transitions.length === 0) {
|
30
|
+
throw new Error("No available transitions found for this issue.");
|
31
|
+
}
|
32
|
+
const transition = transitions.find((t) => t.name.toLowerCase() === status.trim().toLowerCase());
|
33
|
+
if (!transition) {
|
34
|
+
throw new Error(`Status '${status}' not found for this issue. Available statuses: ${transitions.map((t) => t.name).join(", ")}`);
|
35
|
+
}
|
36
|
+
// update status with transition ID
|
37
|
+
yield axiosClient_1.axiosClient.post(transitionsUrl, { transition: { id: transition.id } }, {
|
38
|
+
headers: {
|
39
|
+
Authorization: `Bearer ${authToken}`,
|
40
|
+
Accept: "application/json",
|
41
|
+
"Content-Type": "application/json",
|
42
|
+
},
|
43
|
+
});
|
44
|
+
return {
|
45
|
+
success: true,
|
46
|
+
ticketUrl: `${baseUrl}/browse/${issueId}`,
|
47
|
+
};
|
48
|
+
}
|
49
|
+
catch (error) {
|
50
|
+
console.error("Error updating Jira ticket status: ", error);
|
51
|
+
return {
|
52
|
+
success: false,
|
53
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
54
|
+
};
|
55
|
+
}
|
56
|
+
});
|
57
|
+
exports.default = updateJiraTicketStatus;
|
@@ -0,0 +1,47 @@
|
|
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 templates_1 = require("../../autogen/templates");
|
13
|
+
const utils_1 = require("./utils");
|
14
|
+
const createDocument = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
15
|
+
const { folderId, name, content, siteId } = params;
|
16
|
+
let client = undefined;
|
17
|
+
try {
|
18
|
+
client = yield (0, utils_1.getGraphClient)(authParams, templates_1.microsoftCreateDocumentDefinition.scopes.join(" "));
|
19
|
+
}
|
20
|
+
catch (error) {
|
21
|
+
return {
|
22
|
+
success: false,
|
23
|
+
error: "Error while authorizing: " + (error instanceof Error ? error.message : "Unknown error"),
|
24
|
+
};
|
25
|
+
}
|
26
|
+
const apiEndpointPrefix = siteId ? `/sites/${siteId}` : "/me";
|
27
|
+
const sanitizedFileName = (0, utils_1.validateAndSanitizeFileName)(name);
|
28
|
+
const endpoint = `${apiEndpointPrefix}/drive/items/${folderId || "root"}:/${sanitizedFileName}:/content`;
|
29
|
+
try {
|
30
|
+
// Create or update the document
|
31
|
+
const response = yield client.api(endpoint).put(content);
|
32
|
+
return {
|
33
|
+
success: true,
|
34
|
+
documentId: response.id,
|
35
|
+
documentUrl: response.webUrl,
|
36
|
+
fileName: response.name,
|
37
|
+
};
|
38
|
+
}
|
39
|
+
catch (error) {
|
40
|
+
console.error("Error creating or updating document:", error);
|
41
|
+
return {
|
42
|
+
success: false,
|
43
|
+
error: error instanceof Error ? error.message : "Unknown error occurred",
|
44
|
+
};
|
45
|
+
}
|
46
|
+
});
|
47
|
+
exports.default = createDocument;
|
@@ -0,0 +1,45 @@
|
|
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 utils_1 = require("./utils");
|
13
|
+
const getDocument = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
14
|
+
const { siteId, documentId } = params;
|
15
|
+
let client;
|
16
|
+
try {
|
17
|
+
client = yield (0, utils_1.getGraphClient)(authParams, "Files.ReadWrite Sites.ReadWrite.All");
|
18
|
+
}
|
19
|
+
catch (error) {
|
20
|
+
return {
|
21
|
+
success: false,
|
22
|
+
error: "Error while authorizing: " + (error instanceof Error ? error.message : "Unknown error"),
|
23
|
+
};
|
24
|
+
}
|
25
|
+
try {
|
26
|
+
// Construct the API endpoint
|
27
|
+
const endpoint = siteId
|
28
|
+
? `/sites/${siteId}/drive/items/${documentId}/content`
|
29
|
+
: `/me/drive/items/${documentId}/content`;
|
30
|
+
// Fetch the document content
|
31
|
+
const response = yield client.api(endpoint).get();
|
32
|
+
return {
|
33
|
+
success: true,
|
34
|
+
content: response, // Assuming the response contains the document content
|
35
|
+
};
|
36
|
+
}
|
37
|
+
catch (error) {
|
38
|
+
console.error("Error retrieving document:", error);
|
39
|
+
return {
|
40
|
+
success: false,
|
41
|
+
error: error instanceof Error ? error.message : "Unknown error occurred",
|
42
|
+
};
|
43
|
+
}
|
44
|
+
});
|
45
|
+
exports.default = getDocument;
|
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
9
9
|
});
|
10
10
|
};
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
const templates_1 = require("../../autogen/templates");
|
12
13
|
const utils_1 = require("./utils");
|
13
14
|
const sendMessageToTeamsChannel = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
14
15
|
const { channelId, teamId, message } = params;
|
@@ -27,18 +28,32 @@ const sendMessageToTeamsChannel = (_a) => __awaiter(void 0, [_a], void 0, functi
|
|
27
28
|
error: "Message content is required to send a message",
|
28
29
|
};
|
29
30
|
}
|
31
|
+
let client = undefined;
|
30
32
|
try {
|
31
|
-
|
33
|
+
client = yield (0, utils_1.getGraphClient)(authParams, templates_1.microsoftMessageTeamsChannelDefinition.scopes.join(" "));
|
34
|
+
}
|
35
|
+
catch (error) {
|
36
|
+
return {
|
37
|
+
success: false,
|
38
|
+
error: "Error while authorizing: " + (error instanceof Error ? error.message : "Unknown error"),
|
39
|
+
};
|
40
|
+
}
|
41
|
+
try {
|
42
|
+
const response = yield client.api(`/teams/${teamId}/channels/${channelId}/messages`).post({
|
43
|
+
body: {
|
44
|
+
content: message,
|
45
|
+
},
|
46
|
+
});
|
32
47
|
return {
|
33
48
|
success: true,
|
34
|
-
messageId:
|
49
|
+
messageId: response.id,
|
35
50
|
};
|
36
51
|
}
|
37
52
|
catch (error) {
|
38
53
|
console.error(error);
|
39
54
|
return {
|
40
55
|
success: false,
|
41
|
-
error: error instanceof Error ? error.message : "Unknown error",
|
56
|
+
error: "Error sending message: " + (error instanceof Error ? error.message : "Unknown error"),
|
42
57
|
};
|
43
58
|
}
|
44
59
|
});
|
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
9
9
|
});
|
10
10
|
};
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
const templates_1 = require("../../autogen/templates");
|
12
13
|
const utils_1 = require("./utils");
|
13
14
|
const sendMessageToTeamsChat = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
14
15
|
const { chatId, message } = params;
|
@@ -24,18 +25,32 @@ const sendMessageToTeamsChat = (_a) => __awaiter(void 0, [_a], void 0, function*
|
|
24
25
|
error: "Message content is required to send a message",
|
25
26
|
};
|
26
27
|
}
|
28
|
+
let client = undefined;
|
27
29
|
try {
|
28
|
-
|
30
|
+
client = yield (0, utils_1.getGraphClient)(authParams, templates_1.microsoftMessageTeamsChatDefinition.scopes.join(" "));
|
31
|
+
}
|
32
|
+
catch (error) {
|
33
|
+
return {
|
34
|
+
success: false,
|
35
|
+
error: "Error while authorizing: " + (error instanceof Error ? error.message : "Unknown error"),
|
36
|
+
};
|
37
|
+
}
|
38
|
+
try {
|
39
|
+
const response = yield client.api(`/chats/${chatId}/messages`).post({
|
40
|
+
body: {
|
41
|
+
content: message,
|
42
|
+
},
|
43
|
+
});
|
29
44
|
return {
|
30
45
|
success: true,
|
31
|
-
messageId:
|
46
|
+
messageId: response.id,
|
32
47
|
};
|
33
48
|
}
|
34
49
|
catch (error) {
|
35
50
|
console.error(error);
|
36
51
|
return {
|
37
52
|
success: false,
|
38
|
-
error: error instanceof Error ? error.message : "Unknown error",
|
53
|
+
error: "Error sending message: " + (error instanceof Error ? error.message : "Unknown error"),
|
39
54
|
};
|
40
55
|
}
|
41
56
|
});
|
@@ -0,0 +1,45 @@
|
|
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 templates_1 = require("../../autogen/templates");
|
13
|
+
const utils_1 = require("./utils");
|
14
|
+
const updateDocument = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
15
|
+
const { documentId, content, siteId } = params;
|
16
|
+
let client = undefined;
|
17
|
+
try {
|
18
|
+
client = yield (0, utils_1.getGraphClient)(authParams, templates_1.microsoftUpdateDocumentDefinition.scopes.join(" "));
|
19
|
+
}
|
20
|
+
catch (error) {
|
21
|
+
return {
|
22
|
+
success: false,
|
23
|
+
error: "Error while authorizing: " + (error instanceof Error ? error.message : "Unknown error"),
|
24
|
+
};
|
25
|
+
}
|
26
|
+
try {
|
27
|
+
// Determine the endpoint based on whether siteId is provided
|
28
|
+
const endpoint = siteId
|
29
|
+
? `/sites/${siteId}/drive/items/${documentId}/content`
|
30
|
+
: `/me/drive/items/${documentId}/content`;
|
31
|
+
const response = yield client.api(endpoint).put(content);
|
32
|
+
return {
|
33
|
+
success: true,
|
34
|
+
documentUrl: response.webUrl,
|
35
|
+
};
|
36
|
+
}
|
37
|
+
catch (error) {
|
38
|
+
console.error("Error updating document:", error);
|
39
|
+
return {
|
40
|
+
success: false,
|
41
|
+
error: error instanceof Error ? error.message : "Unknown error occurred",
|
42
|
+
};
|
43
|
+
}
|
44
|
+
});
|
45
|
+
exports.default = updateDocument;
|
@@ -0,0 +1,56 @@
|
|
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 templates_1 = require("../../autogen/templates");
|
13
|
+
const utils_1 = require("./utils");
|
14
|
+
const updateSpreadsheet = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
15
|
+
const { spreadsheetId, range, values, siteId } = params; // Added siteId to destructured params
|
16
|
+
let client = undefined;
|
17
|
+
try {
|
18
|
+
client = yield (0, utils_1.getGraphClient)(authParams, templates_1.microsoftUpdateSpreadsheetDefinition.scopes.join(" "));
|
19
|
+
}
|
20
|
+
catch (error) {
|
21
|
+
return {
|
22
|
+
success: false,
|
23
|
+
error: "Error while authorizing: " + (error instanceof Error ? error.message : "Unknown error"),
|
24
|
+
};
|
25
|
+
}
|
26
|
+
const apiEndpointPrefix = siteId ? `/sites/${siteId}` : "/me";
|
27
|
+
if (!range.includes("!")) {
|
28
|
+
return {
|
29
|
+
success: false,
|
30
|
+
error: "Invalid range format. Expected format: 'SheetName!CellRange'",
|
31
|
+
};
|
32
|
+
}
|
33
|
+
const [sheetName, cellRange] = range.split("!");
|
34
|
+
if (!sheetName || !cellRange) {
|
35
|
+
return {
|
36
|
+
success: false,
|
37
|
+
error: "Invalid range format. Both sheet name and cell range must be specified.",
|
38
|
+
};
|
39
|
+
}
|
40
|
+
const apiEndpoint = `${apiEndpointPrefix}/drive/items/${spreadsheetId}/workbook/worksheets/${sheetName}/range(address='${cellRange}')`;
|
41
|
+
try {
|
42
|
+
const response = yield client.api(apiEndpoint).patch({ values });
|
43
|
+
return {
|
44
|
+
success: true,
|
45
|
+
updatedRange: response.address,
|
46
|
+
};
|
47
|
+
}
|
48
|
+
catch (error) {
|
49
|
+
console.error("Error updating spreadsheet:", error);
|
50
|
+
return {
|
51
|
+
success: false,
|
52
|
+
error: error instanceof Error ? error.message : "Unknown error occurred",
|
53
|
+
};
|
54
|
+
}
|
55
|
+
});
|
56
|
+
exports.default = updateSpreadsheet;
|
@@ -1,4 +1,9 @@
|
|
1
1
|
import { Client } from "@microsoft/microsoft-graph-client";
|
2
2
|
import { AuthParamsType } from "../../autogen/types";
|
3
|
-
export declare function
|
4
|
-
|
3
|
+
export declare function getGraphClient(authParams: AuthParamsType, scope: string): Promise<Client>;
|
4
|
+
/**
|
5
|
+
* Validates and sanitizes a filename for SharePoint or OneDrive.
|
6
|
+
* @param fileName The original filename to validate and sanitize.
|
7
|
+
* @returns A sanitized filename that is safe to use.
|
8
|
+
*/
|
9
|
+
export declare function validateAndSanitizeFileName(fileName: string): string;
|
@@ -9,11 +9,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
9
9
|
});
|
10
10
|
};
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
exports.
|
13
|
-
exports.
|
12
|
+
exports.getGraphClient = getGraphClient;
|
13
|
+
exports.validateAndSanitizeFileName = validateAndSanitizeFileName;
|
14
14
|
const microsoft_graph_client_1 = require("@microsoft/microsoft-graph-client");
|
15
15
|
const axiosClient_1 = require("../../util/axiosClient");
|
16
|
-
function
|
16
|
+
function getGraphClient(authParams, scope) {
|
17
17
|
return __awaiter(this, void 0, void 0, function* () {
|
18
18
|
if (!authParams.clientId ||
|
19
19
|
!authParams.clientSecret ||
|
@@ -26,7 +26,7 @@ function getGraphClientForMessageSend(authParams) {
|
|
26
26
|
const params = new URLSearchParams({
|
27
27
|
client_id: authParams.clientId,
|
28
28
|
client_secret: authParams.clientSecret,
|
29
|
-
scope:
|
29
|
+
scope: `offline_access ${scope}`,
|
30
30
|
grant_type: "refresh_token",
|
31
31
|
refresh_token: authParams.refreshToken,
|
32
32
|
redirect_uri: authParams.redirectUri,
|
@@ -42,14 +42,26 @@ function getGraphClientForMessageSend(authParams) {
|
|
42
42
|
});
|
43
43
|
});
|
44
44
|
}
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
45
|
+
/**
|
46
|
+
* Validates and sanitizes a filename for SharePoint or OneDrive.
|
47
|
+
* @param fileName The original filename to validate and sanitize.
|
48
|
+
* @returns A sanitized filename that is safe to use.
|
49
|
+
*/
|
50
|
+
function validateAndSanitizeFileName(fileName) {
|
51
|
+
// Define invalid characters for SharePoint and OneDrive
|
52
|
+
const invalidCharacters = /[~"#%&*:<>?/{|}\\]/g;
|
53
|
+
// Replace invalid characters with an underscore
|
54
|
+
let sanitizedFileName = fileName.replace(invalidCharacters, "_");
|
55
|
+
// Remove leading or trailing spaces
|
56
|
+
sanitizedFileName = sanitizedFileName.trim();
|
57
|
+
// Replace consecutive periods with a single period
|
58
|
+
sanitizedFileName = sanitizedFileName.replace(/\.{2,}/g, ".");
|
59
|
+
// Ensure the filename does not exceed 400 characters
|
60
|
+
if (sanitizedFileName.length > 400) {
|
61
|
+
const extensionIndex = sanitizedFileName.lastIndexOf(".");
|
62
|
+
const baseName = sanitizedFileName.slice(0, extensionIndex);
|
63
|
+
const extension = sanitizedFileName.slice(extensionIndex);
|
64
|
+
sanitizedFileName = baseName.slice(0, 400 - extension.length) + extension;
|
65
|
+
}
|
66
|
+
return sanitizedFileName;
|
55
67
|
}
|
@@ -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
|
+
const getSalesforceRecordByQuery = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
|
14
|
+
const { authToken, baseUrl } = authParams;
|
15
|
+
const { query, limit } = params;
|
16
|
+
if (!authToken || !baseUrl) {
|
17
|
+
return {
|
18
|
+
success: false,
|
19
|
+
error: "authToken and baseUrl are required for Salesforce API",
|
20
|
+
};
|
21
|
+
}
|
22
|
+
// The API limits the maximum number of records returned to 2000, the limit lets the user set a smaller custom limit
|
23
|
+
const url = `${baseUrl}/services/data/v56.0/query/?q=${encodeURIComponent(query + " LIMIT " + (limit != undefined && limit <= 2000 ? limit : 2000))}`;
|
24
|
+
try {
|
25
|
+
const response = yield axiosClient_1.axiosClient.get(url, {
|
26
|
+
headers: {
|
27
|
+
Authorization: `Bearer ${authToken}`,
|
28
|
+
},
|
29
|
+
});
|
30
|
+
return {
|
31
|
+
success: true,
|
32
|
+
records: response.data,
|
33
|
+
};
|
34
|
+
}
|
35
|
+
catch (error) {
|
36
|
+
console.error("Error retrieving Salesforce record:", error);
|
37
|
+
return {
|
38
|
+
success: false,
|
39
|
+
error: error instanceof Error ? error.message : "An unknown error occurred",
|
40
|
+
};
|
41
|
+
}
|
42
|
+
});
|
43
|
+
exports.default = getSalesforceRecordByQuery;
|
@@ -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;
|