@credal/actions 0.2.221 → 0.2.223
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 +38 -1
- package/dist/actions/autogen/templates.d.ts +5 -0
- package/dist/actions/autogen/templates.js +570 -0
- package/dist/actions/autogen/types.d.ts +541 -5
- package/dist/actions/autogen/types.js +236 -0
- package/dist/actions/providers/google-oauth/editAGoogleCalendarEvent.js +3 -1
- package/dist/actions/providers/google-oauth/scheduleCalendarMeeting.js +16 -5
- package/dist/actions/providers/google-oauth/updateCalendarEvent.js +2 -0
- package/dist/actions/providers/servicenow/getChangeRequests.d.ts +3 -0
- package/dist/actions/providers/servicenow/getChangeRequests.js +56 -0
- package/dist/actions/providers/servicenow/getIncidents.d.ts +3 -0
- package/dist/actions/providers/servicenow/getIncidents.js +58 -0
- package/dist/actions/providers/servicenow/getRecordsByQuery.d.ts +3 -0
- package/dist/actions/providers/servicenow/getRecordsByQuery.js +42 -0
- package/dist/actions/providers/servicenow/getSCTasks.d.ts +3 -0
- package/dist/actions/providers/servicenow/getSCTasks.js +53 -0
- package/dist/actions/providers/servicenow/getVIPTickets.d.ts +3 -0
- package/dist/actions/providers/servicenow/getVIPTickets.js +61 -0
- package/dist/actions/providers/servicenow/utils/tableQuery.d.ts +22 -0
- package/dist/actions/providers/servicenow/utils/tableQuery.js +62 -0
- package/package.json +1 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AuthParamsType } from "../../../autogen/types.js";
|
|
2
|
+
export declare const DEFAULT_LIMIT = 25;
|
|
3
|
+
export declare const MAX_LIMIT = 10000;
|
|
4
|
+
export type ServiceNowRecord = Record<string, string>;
|
|
5
|
+
export interface QueryServiceNowTableArgs {
|
|
6
|
+
authParams: AuthParamsType;
|
|
7
|
+
tableName: string;
|
|
8
|
+
fields: string[];
|
|
9
|
+
filter?: string;
|
|
10
|
+
baseFilter?: string;
|
|
11
|
+
additionalFields?: string[];
|
|
12
|
+
limit?: number;
|
|
13
|
+
offset?: number;
|
|
14
|
+
}
|
|
15
|
+
export type QueryServiceNowTableResult = {
|
|
16
|
+
records: ServiceNowRecord[];
|
|
17
|
+
} | {
|
|
18
|
+
error: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function queryServiceNowTable({ authParams, tableName, fields, filter, baseFilter, additionalFields, limit, offset, }: QueryServiceNowTableArgs): Promise<QueryServiceNowTableResult>;
|
|
21
|
+
export declare function computeTimeToClosureMinutes(openedAt?: string, closedAt?: string): number | undefined;
|
|
22
|
+
export declare function extractAdditionalFields(record: ServiceNowRecord, additionalFields?: string[]): Record<string, string> | undefined;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ApiError, axiosClient } from "../../../util/axiosClient.js";
|
|
2
|
+
export const DEFAULT_LIMIT = 25;
|
|
3
|
+
export const MAX_LIMIT = 10000;
|
|
4
|
+
// Uses sysparm_display_value=true so choice fields (e.g. state, priority) and reference fields
|
|
5
|
+
// (e.g. assigned_to, request_item) come back as plain human-readable strings rather than nested
|
|
6
|
+
// {value, display_value} objects.
|
|
7
|
+
export async function queryServiceNowTable({ authParams, tableName, fields, filter, baseFilter, additionalFields, limit = DEFAULT_LIMIT, offset = 0, }) {
|
|
8
|
+
const { authToken, baseUrl } = authParams;
|
|
9
|
+
if (!authToken || !baseUrl) {
|
|
10
|
+
return { error: "authToken and baseUrl are required for the ServiceNow API" };
|
|
11
|
+
}
|
|
12
|
+
const cappedLimit = Math.min(limit, MAX_LIMIT);
|
|
13
|
+
const allFields = additionalFields && additionalFields.length > 0 ? [...fields, ...additionalFields] : fields;
|
|
14
|
+
const combinedFilter = [baseFilter, filter].filter(part => !!part).join("^");
|
|
15
|
+
const queryParams = new URLSearchParams();
|
|
16
|
+
queryParams.append("sysparm_limit", cappedLimit.toString());
|
|
17
|
+
queryParams.append("sysparm_offset", offset.toString());
|
|
18
|
+
queryParams.append("sysparm_display_value", "true");
|
|
19
|
+
queryParams.append("sysparm_exclude_reference_link", "true");
|
|
20
|
+
queryParams.append("sysparm_fields", allFields.join(","));
|
|
21
|
+
if (combinedFilter) {
|
|
22
|
+
queryParams.append("sysparm_query", combinedFilter);
|
|
23
|
+
}
|
|
24
|
+
const url = `${baseUrl.replace(/\/+$/, "")}/api/now/table/${encodeURIComponent(tableName)}?${queryParams.toString()}`;
|
|
25
|
+
try {
|
|
26
|
+
const response = await axiosClient.get(url, {
|
|
27
|
+
headers: {
|
|
28
|
+
Accept: "application/json",
|
|
29
|
+
Authorization: `Bearer ${authToken}`,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const result = response.data.result;
|
|
33
|
+
return { records: Array.isArray(result) ? result : [] };
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error(`Error querying ServiceNow table ${tableName}:`, error);
|
|
37
|
+
return { error: error instanceof ApiError ? error.message : "An unknown error occurred" };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function computeTimeToClosureMinutes(openedAt, closedAt) {
|
|
41
|
+
if (!openedAt || !closedAt) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
const openedMs = new Date(openedAt).getTime();
|
|
45
|
+
const closedMs = new Date(closedAt).getTime();
|
|
46
|
+
if (Number.isNaN(openedMs) || Number.isNaN(closedMs) || closedMs < openedMs) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
return Math.round((closedMs - openedMs) / 60000);
|
|
50
|
+
}
|
|
51
|
+
export function extractAdditionalFields(record, additionalFields) {
|
|
52
|
+
if (!additionalFields || additionalFields.length === 0) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
const extra = {};
|
|
56
|
+
for (const field of additionalFields) {
|
|
57
|
+
if (record[field] !== undefined) {
|
|
58
|
+
extra[field] = record[field];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return extra;
|
|
62
|
+
}
|