@credal/actions 0.1.22 → 0.1.24

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.
@@ -538,6 +538,29 @@ exports.credalCallCopilotDefinition = {
538
538
  },
539
539
  },
540
540
  },
541
+ webSearchResults: {
542
+ type: "array",
543
+ description: "The web search results in the response",
544
+ items: {
545
+ type: "object",
546
+ description: "The web search result in the response",
547
+ required: ["title", "url"],
548
+ properties: {
549
+ title: {
550
+ type: "string",
551
+ description: "The title of the web search result",
552
+ },
553
+ url: {
554
+ type: "string",
555
+ description: "The url of the web search result",
556
+ },
557
+ contents: {
558
+ type: "string",
559
+ description: "The contents of the web search result",
560
+ },
561
+ },
562
+ },
563
+ },
541
564
  },
542
565
  },
543
566
  name: "callCopilot",
@@ -548,7 +571,7 @@ exports.zendeskCreateZendeskTicketDefinition = {
548
571
  scopes: [],
549
572
  parameters: {
550
573
  type: "object",
551
- required: ["subject", "requesterEmail", "subdomain"],
574
+ required: ["subject", "subdomain"],
552
575
  properties: {
553
576
  subject: {
554
577
  type: "string",
@@ -558,10 +581,6 @@ exports.zendeskCreateZendeskTicketDefinition = {
558
581
  type: "string",
559
582
  description: "The body of the ticket",
560
583
  },
561
- requesterEmail: {
562
- type: "string",
563
- description: "The email of the requester",
564
- },
565
584
  subdomain: {
566
585
  type: "string",
567
586
  description: "The subdomain of the Zendesk account",
@@ -545,6 +545,19 @@ export declare const credalCallCopilotOutputSchema: z.ZodObject<{
545
545
  };
546
546
  url?: string | undefined;
547
547
  }>, "many">>;
548
+ webSearchResults: z.ZodOptional<z.ZodArray<z.ZodObject<{
549
+ title: z.ZodString;
550
+ url: z.ZodString;
551
+ contents: z.ZodOptional<z.ZodString>;
552
+ }, "strip", z.ZodTypeAny, {
553
+ title: string;
554
+ url: string;
555
+ contents?: string | undefined;
556
+ }, {
557
+ title: string;
558
+ url: string;
559
+ contents?: string | undefined;
560
+ }>, "many">>;
548
561
  }, "strip", z.ZodTypeAny, {
549
562
  response: string;
550
563
  referencedSources?: {
@@ -565,6 +578,11 @@ export declare const credalCallCopilotOutputSchema: z.ZodObject<{
565
578
  };
566
579
  url?: string | undefined;
567
580
  }[] | undefined;
581
+ webSearchResults?: {
582
+ title: string;
583
+ url: string;
584
+ contents?: string | undefined;
585
+ }[] | undefined;
568
586
  }, {
569
587
  response: string;
570
588
  referencedSources?: {
@@ -585,22 +603,24 @@ export declare const credalCallCopilotOutputSchema: z.ZodObject<{
585
603
  };
586
604
  url?: string | undefined;
587
605
  }[] | undefined;
606
+ webSearchResults?: {
607
+ title: string;
608
+ url: string;
609
+ contents?: string | undefined;
610
+ }[] | undefined;
588
611
  }>;
589
612
  export type credalCallCopilotOutputType = z.infer<typeof credalCallCopilotOutputSchema>;
590
613
  export type credalCallCopilotFunction = ActionFunction<credalCallCopilotParamsType, AuthParamsType, credalCallCopilotOutputType>;
591
614
  export declare const zendeskCreateZendeskTicketParamsSchema: z.ZodObject<{
592
615
  subject: z.ZodString;
593
616
  body: z.ZodOptional<z.ZodString>;
594
- requesterEmail: z.ZodString;
595
617
  subdomain: z.ZodString;
596
618
  }, "strip", z.ZodTypeAny, {
597
619
  subject: string;
598
- requesterEmail: string;
599
620
  subdomain: string;
600
621
  body?: string | undefined;
601
622
  }, {
602
623
  subject: string;
603
- requesterEmail: string;
604
624
  subdomain: string;
605
625
  body?: string | undefined;
606
626
  }>;
@@ -621,11 +641,11 @@ export declare const linkedinCreateShareLinkedinPostUrlParamsSchema: z.ZodObject
621
641
  text: z.ZodOptional<z.ZodString>;
622
642
  url: z.ZodOptional<z.ZodString>;
623
643
  }, "strip", z.ZodTypeAny, {
624
- text?: string | undefined;
625
644
  url?: string | undefined;
626
- }, {
627
645
  text?: string | undefined;
646
+ }, {
628
647
  url?: string | undefined;
648
+ text?: string | undefined;
629
649
  }>;
630
650
  export type linkedinCreateShareLinkedinPostUrlParamsType = z.infer<typeof linkedinCreateShareLinkedinPostUrlParamsSchema>;
631
651
  export declare const linkedinCreateShareLinkedinPostUrlOutputSchema: z.ZodObject<{
@@ -185,11 +185,20 @@ exports.credalCallCopilotOutputSchema = zod_1.z.object({
185
185
  .describe("The source in the data context of the response"))
186
186
  .describe("The sources in the data context of the response")
187
187
  .optional(),
188
+ webSearchResults: zod_1.z
189
+ .array(zod_1.z
190
+ .object({
191
+ title: zod_1.z.string().describe("The title of the web search result"),
192
+ url: zod_1.z.string().describe("The url of the web search result"),
193
+ contents: zod_1.z.string().describe("The contents of the web search result").optional(),
194
+ })
195
+ .describe("The web search result in the response"))
196
+ .describe("The web search results in the response")
197
+ .optional(),
188
198
  });
189
199
  exports.zendeskCreateZendeskTicketParamsSchema = zod_1.z.object({
190
200
  subject: zod_1.z.string().describe("The subject of the ticket"),
191
201
  body: zod_1.z.string().describe("The body of the ticket").optional(),
192
- requesterEmail: zod_1.z.string().describe("The email of the requester"),
193
202
  subdomain: zod_1.z.string().describe("The subdomain of the Zendesk account"),
194
203
  });
195
204
  exports.zendeskCreateZendeskTicketOutputSchema = zod_1.z.object({
@@ -8,28 +8,30 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const axiosClient_1 = require("../../util/axiosClient");
13
- function getConfluenceRequestConfig(baseUrl, username, apiToken) {
14
- return {
15
+ const axios_1 = __importDefault(require("axios"));
16
+ function getConfluenceApi(baseUrl, username, apiToken) {
17
+ const api = axios_1.default.create({
15
18
  baseURL: baseUrl,
16
19
  headers: {
17
20
  Accept: "application/json",
21
+ // Tokens are associated with a specific user.
18
22
  Authorization: `Basic ${Buffer.from(`${username}:${apiToken}`).toString("base64")}`,
19
23
  },
20
- };
24
+ });
25
+ return api;
21
26
  }
22
27
  const confluenceUpdatePage = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
23
- const { pageId, content, title } = params;
24
- const { baseUrl, authToken, username } = authParams;
25
- if (!baseUrl || !authToken || !username) {
26
- throw new Error("Missing required authentication information");
27
- }
28
- const config = getConfluenceRequestConfig(baseUrl, username, authToken);
28
+ const { pageId, username, content, title } = params;
29
+ const { baseUrl, authToken } = authParams;
30
+ const api = getConfluenceApi(baseUrl, username, authToken);
29
31
  // Get current version number
30
- const response = yield axiosClient_1.axiosClient.get(`/api/v2/pages/${pageId}`, config);
32
+ const response = yield api.get(`/api/v2/pages/${pageId}`);
31
33
  const currVersion = response.data.version.number;
32
- const payload = {
34
+ yield api.put(`/api/v2/pages/${pageId}`, {
33
35
  id: pageId,
34
36
  status: "current",
35
37
  title,
@@ -40,7 +42,6 @@ const confluenceUpdatePage = (_a) => __awaiter(void 0, [_a], void 0, function* (
40
42
  version: {
41
43
  number: currVersion + 1,
42
44
  },
43
- };
44
- yield axiosClient_1.axiosClient.put(`/api/v2/pages/${pageId}`, payload, config);
45
+ });
45
46
  });
46
47
  exports.default = confluenceUpdatePage;
@@ -30,6 +30,7 @@ const callCopilot = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params,
30
30
  : "Error getting response",
31
31
  referencedSources: response.sendChatResult.type === "ai_response_result" ? response.sendChatResult.referencedSources : [],
32
32
  sourcesInDataContext: response.sendChatResult.type === "ai_response_result" ? response.sendChatResult.sourcesInDataContext : [],
33
+ webSearchResults: response.sendChatResult.type === "ai_response_result" ? response.sendChatResult.webSearchResults : [],
33
34
  };
34
35
  });
35
36
  exports.default = callCopilot;
@@ -0,0 +1,23 @@
1
+ declare const axios: any;
2
+ declare const WORKDAY_BASE_URL = "https://your-workday-url/ccx/service/YOUR_TENANT/Absence_Management/v43.2";
3
+ declare const TOKEN_URL = "https://your-workday-url/oauth2/YOUR_TENANT/token";
4
+ declare const CLIENT_ID = "your-client-id";
5
+ declare const CLIENT_SECRET = "your-client-secret";
6
+ /**
7
+ * Fetches an OAuth 2.0 access token from Workday.
8
+ */
9
+ declare function getAccessToken(): Promise<any>;
10
+ /**
11
+ * Submits a time-off request to Workday.
12
+ * @param {Object} params - Time-off details.
13
+ * @param {string} params.workerId - Worker's ID in Workday.
14
+ * @param {string} params.startDate - Start date (YYYY-MM-DD).
15
+ * @param {string} params.endDate - End date (YYYY-MM-DD).
16
+ * @param {string} params.timeOffType - Time-off type (e.g., "SICK_LEAVE").
17
+ */
18
+ declare function submitTimeOff({ workerId, startDate, endDate, timeOffType }: {
19
+ workerId: any;
20
+ startDate: any;
21
+ endDate: any;
22
+ timeOffType: any;
23
+ }): Promise<any>;
@@ -0,0 +1,88 @@
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
+ const axios = require("axios");
12
+ const WORKDAY_BASE_URL = "https://your-workday-url/ccx/service/YOUR_TENANT/Absence_Management/v43.2";
13
+ const TOKEN_URL = "https://your-workday-url/oauth2/YOUR_TENANT/token"; // OAuth token endpoint
14
+ const CLIENT_ID = "your-client-id";
15
+ const CLIENT_SECRET = "your-client-secret";
16
+ /**
17
+ * Fetches an OAuth 2.0 access token from Workday.
18
+ */
19
+ function getAccessToken() {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ var _a;
22
+ try {
23
+ const response = yield axios.post(TOKEN_URL, new URLSearchParams({ grant_type: "client_credentials" }), {
24
+ auth: {
25
+ username: CLIENT_ID,
26
+ password: CLIENT_SECRET
27
+ },
28
+ headers: { "Content-Type": "application/x-www-form-urlencoded" }
29
+ });
30
+ return response.data.access_token;
31
+ }
32
+ catch (error) {
33
+ console.error("Error fetching access token:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error.message);
34
+ throw error;
35
+ }
36
+ });
37
+ }
38
+ /**
39
+ * Submits a time-off request to Workday.
40
+ * @param {Object} params - Time-off details.
41
+ * @param {string} params.workerId - Worker's ID in Workday.
42
+ * @param {string} params.startDate - Start date (YYYY-MM-DD).
43
+ * @param {string} params.endDate - End date (YYYY-MM-DD).
44
+ * @param {string} params.timeOffType - Time-off type (e.g., "SICK_LEAVE").
45
+ */
46
+ function submitTimeOff(_a) {
47
+ return __awaiter(this, arguments, void 0, function* ({ workerId, startDate, endDate, timeOffType }) {
48
+ var _b;
49
+ try {
50
+ const token = yield getAccessToken(); // Get OAuth token
51
+ const requestBody = {
52
+ "wd:Enter_Time_Off_Request": {
53
+ "wd:Worker_Reference": {
54
+ "wd:ID": [{ "_": workerId, "$": { "wd:type": "WID" } }]
55
+ },
56
+ "wd:Time_Off_Entries": [
57
+ {
58
+ "wd:Start_Date": startDate,
59
+ "wd:End_Date": endDate,
60
+ "wd:Time_Off_Type_Reference": {
61
+ "wd:ID": [{ "_": timeOffType, "$": { "wd:type": "Time_Off_Type_ID" } }]
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ };
67
+ const response = yield axios.post(`${WORKDAY_BASE_URL}/Enter_Time_Off`, requestBody, {
68
+ headers: {
69
+ "Authorization": `Bearer ${token}`,
70
+ "Content-Type": "application/json"
71
+ }
72
+ });
73
+ console.log("Time-off request submitted successfully:", response.data);
74
+ return response.data;
75
+ }
76
+ catch (error) {
77
+ console.error("Error submitting time-off request:", ((_b = error.response) === null || _b === void 0 ? void 0 : _b.data) || error.message);
78
+ throw error;
79
+ }
80
+ });
81
+ }
82
+ // Example Usage:
83
+ submitTimeOff({
84
+ workerId: "12345",
85
+ startDate: "2025-03-10",
86
+ endDate: "2025-03-12",
87
+ timeOffType: "SICK_LEAVE"
88
+ }).then(console.log).catch(console.error);
@@ -11,8 +11,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const axiosClient_1 = require("../../util/axiosClient");
13
13
  const createZendeskTicket = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
14
- const { apiKey } = authParams;
15
- const { subdomain, subject, body, requesterEmail } = params;
14
+ const { apiKey, username } = authParams;
15
+ const { subdomain, subject, body } = params;
16
16
  const url = `https://${subdomain}.zendesk.com/api/v2/tickets.json`;
17
17
  const payload = {
18
18
  ticket: {
@@ -25,21 +25,18 @@ const createZendeskTicket = (_a) => __awaiter(void 0, [_a], void 0, function* ({
25
25
  if (!apiKey) {
26
26
  throw new Error("API key is required");
27
27
  }
28
- try {
29
- const response = yield axiosClient_1.axiosClient.post(url, payload, {
30
- auth: {
31
- username: `${requesterEmail}/token`,
32
- password: apiKey,
33
- },
34
- headers: {
35
- "Content-Type": "application/json",
36
- },
37
- });
38
- return response.data;
39
- }
40
- catch (error) {
41
- console.error("Error creating ticket", error);
42
- return { ticketId: "Error" };
43
- }
28
+ const response = yield axiosClient_1.axiosClient.post(url, payload, {
29
+ auth: {
30
+ username: `${username}/token`,
31
+ password: apiKey,
32
+ },
33
+ headers: {
34
+ "Content-Type": "application/json",
35
+ },
36
+ });
37
+ return {
38
+ ticketId: response.data.ticket.id,
39
+ ticketUrl: `https://${subdomain}.zendesk.com/requests/${response.data.ticket.id}`,
40
+ };
44
41
  });
45
42
  exports.default = createZendeskTicket;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@credal/actions",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "description": "AI Actions by Credal AI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,3 +0,0 @@
1
- import { googlemapsNearbysearchFunction } from "../../autogen/types";
2
- declare const nearbysearch: googlemapsNearbysearchFunction;
3
- export default nearbysearch;
@@ -1,96 +0,0 @@
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;
@@ -1,3 +0,0 @@
1
- import { xScrapePostDataWithNitterFunction } from "../../autogen/types";
2
- declare const scrapeTweetDataWithNitter: xScrapePostDataWithNitterFunction;
3
- export default scrapeTweetDataWithNitter;
@@ -1,45 +0,0 @@
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 firecrawl_js_1 = __importDefault(require("@mendable/firecrawl-js"));
16
- const scrapeTweetDataWithNitter = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
17
- const tweetUrlRegex = /^(?:https?:\/\/)?(?:www\.)?(?:twitter\.com|x\.com)\/([a-zA-Z0-9_]+)\/status\/(\d+)(?:\?.*)?$/;
18
- if (!tweetUrlRegex.test(params.tweetUrl)) {
19
- throw new Error("Invalid tweet URL. Expected format: https://twitter.com/username/status/id or https://x.com/username/status/id");
20
- }
21
- const nitterUrl = params.tweetUrl.replace(/^(?:https?:\/\/)?(?:www\.)?(?:twitter\.com|x\.com)/i, "https://nitter.net");
22
- // Initialize Firecrawl
23
- if (!authParams.apiKey) {
24
- throw new Error("API key is required for X+Nitter+Firecrawl");
25
- }
26
- const firecrawl = new firecrawl_js_1.default({
27
- apiKey: authParams.apiKey,
28
- });
29
- try {
30
- // Scrape the Nitter URL
31
- const result = yield firecrawl.scrapeUrl(nitterUrl);
32
- if (!result.success) {
33
- throw new Error(`Failed to scrape tweet: ${result.error || "Unknown error"}`);
34
- }
35
- // Extract the tweet text from the scraped content - simple approach - in practice, you might need more robust parsing based on nitter html structure
36
- const tweetContent = result.markdown;
37
- return {
38
- text: tweetContent || "Error scraping with firecrawl",
39
- };
40
- }
41
- catch (error) {
42
- throw new Error(`Error scraping tweet: ${error instanceof Error ? error.message : error}`);
43
- }
44
- });
45
- exports.default = scrapeTweetDataWithNitter;