@credal/actions 0.2.203 → 0.2.206

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.
Files changed (76) hide show
  1. package/dist/actions/actionMapper.js +8 -1
  2. package/dist/actions/autogen/templates.d.ts +3 -0
  3. package/dist/actions/autogen/templates.js +151 -1
  4. package/dist/actions/autogen/types.d.ts +97 -0
  5. package/dist/actions/autogen/types.js +54 -4
  6. package/dist/actions/providers/ashby/addCandidateToProject.d.ts +3 -0
  7. package/dist/actions/providers/ashby/addCandidateToProject.js +31 -0
  8. package/dist/actions/providers/ashby/createCandidate.d.ts +3 -0
  9. package/dist/actions/providers/ashby/createCandidate.js +38 -0
  10. package/dist/actions/providers/ashby/createNote.d.ts +3 -0
  11. package/dist/actions/providers/ashby/createNote.js +31 -0
  12. package/dist/actions/providers/ashby/getCandidateInfo.d.ts +3 -0
  13. package/dist/actions/providers/ashby/getCandidateInfo.js +33 -0
  14. package/dist/actions/providers/ashby/listCandidateNotes.d.ts +3 -0
  15. package/dist/actions/providers/ashby/listCandidateNotes.js +33 -0
  16. package/dist/actions/providers/ashby/listCandidates.d.ts +3 -0
  17. package/dist/actions/providers/ashby/listCandidates.js +30 -0
  18. package/dist/actions/providers/ashby/searchCandidates.d.ts +3 -0
  19. package/dist/actions/providers/ashby/searchCandidates.js +34 -0
  20. package/dist/actions/providers/ashby/updateCandidate.d.ts +3 -0
  21. package/dist/actions/providers/ashby/updateCandidate.js +56 -0
  22. package/dist/actions/providers/github/searchRepository.js +7 -7
  23. package/dist/actions/providers/gong/getGongTranscripts.d.ts +3 -0
  24. package/dist/actions/providers/gong/getGongTranscripts.js +315 -0
  25. package/dist/actions/providers/google-oauth/addTextToTopOfDoc.js +5 -13
  26. package/dist/actions/providers/google-oauth/createNewGoogleDoc.js +10 -123
  27. package/dist/actions/providers/google-oauth/utils/googleDocsMarkdown.d.ts +88 -0
  28. package/dist/actions/providers/google-oauth/utils/googleDocsMarkdown.js +350 -0
  29. package/dist/actions/providers/jamf/getJamfComputerInventory.d.ts +3 -0
  30. package/dist/actions/providers/jamf/getJamfComputerInventory.js +37 -0
  31. package/dist/actions/providers/jamf/getJamfFileVaultRecoveryKey.d.ts +3 -0
  32. package/dist/actions/providers/jamf/getJamfFileVaultRecoveryKey.js +39 -0
  33. package/dist/actions/providers/jamf/getJamfUserComputerId.d.ts +3 -0
  34. package/dist/actions/providers/jamf/getJamfUserComputerId.js +45 -0
  35. package/dist/actions/providers/jamf/lockJamfComputerById.d.ts +3 -0
  36. package/dist/actions/providers/jamf/lockJamfComputerById.js +39 -0
  37. package/dist/actions/providers/jira/commentJiraTicketWithMentions.d.ts +3 -0
  38. package/dist/actions/providers/jira/commentJiraTicketWithMentions.js +39 -0
  39. package/dist/actions/providers/jira/convertMentionsInAdf.d.ts +21 -0
  40. package/dist/actions/providers/jira/convertMentionsInAdf.js +125 -0
  41. package/dist/actions/providers/jira/updateServiceDeskRequest.d.ts +3 -0
  42. package/dist/actions/providers/jira/updateServiceDeskRequest.js +72 -0
  43. package/dist/actions/providers/jira/utils.d.ts +1 -1
  44. package/dist/actions/providers/jira/utils.js +1 -0
  45. package/dist/actions/providers/kandji/getFVRecoveryKeyForDevice.d.ts +3 -0
  46. package/dist/actions/providers/kandji/getFVRecoveryKeyForDevice.js +85 -0
  47. package/dist/actions/providers/microsoft/sendOutlookEmail.d.ts +3 -0
  48. package/dist/actions/providers/microsoft/sendOutlookEmail.js +48 -0
  49. package/dist/actions/providers/okta/addUserToGroup.d.ts +3 -0
  50. package/dist/actions/providers/okta/addUserToGroup.js +56 -0
  51. package/dist/actions/providers/okta/getOktaGroup.d.ts +3 -0
  52. package/dist/actions/providers/okta/getOktaGroup.js +73 -0
  53. package/dist/actions/providers/okta/getOktaUser.d.ts +3 -0
  54. package/dist/actions/providers/okta/getOktaUser.js +40 -0
  55. package/dist/actions/providers/okta/listMFA.d.ts +3 -0
  56. package/dist/actions/providers/okta/listMFA.js +52 -0
  57. package/dist/actions/providers/okta/listOktaGroupMembers.d.ts +3 -0
  58. package/dist/actions/providers/okta/listOktaGroupMembers.js +99 -0
  59. package/dist/actions/providers/okta/listOktaGroups.d.ts +3 -0
  60. package/dist/actions/providers/okta/listOktaGroups.js +92 -0
  61. package/dist/actions/providers/okta/listOktaUserGroups.d.ts +3 -0
  62. package/dist/actions/providers/okta/listOktaUserGroups.js +83 -0
  63. package/dist/actions/providers/okta/listOktaUsers.d.ts +3 -0
  64. package/dist/actions/providers/okta/listOktaUsers.js +100 -0
  65. package/dist/actions/providers/okta/removeUserFromGroup.d.ts +3 -0
  66. package/dist/actions/providers/okta/removeUserFromGroup.js +56 -0
  67. package/dist/actions/providers/okta/resetMFA.d.ts +3 -0
  68. package/dist/actions/providers/okta/resetMFA.js +62 -0
  69. package/dist/actions/providers/okta/resetPassword.d.ts +3 -0
  70. package/dist/actions/providers/okta/resetPassword.js +57 -0
  71. package/dist/actions/providers/okta/triggerOktaWorkflow.d.ts +3 -0
  72. package/dist/actions/providers/okta/triggerOktaWorkflow.js +44 -0
  73. package/dist/actions/providers/salesforce/executeReport.js +2 -1
  74. package/dist/actions/providers/salesforce/fetchSalesforceSchema.d.ts +3 -0
  75. package/dist/actions/providers/salesforce/fetchSalesforceSchema.js +40 -0
  76. package/package.json +4 -2
@@ -0,0 +1,31 @@
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 { axiosClient } from "../../util/axiosClient.js";
11
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
12
+ const createNote = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
13
+ const { candidateId, note } = params;
14
+ const { authToken } = authParams;
15
+ if (!authToken) {
16
+ throw new Error(MISSING_AUTH_TOKEN);
17
+ }
18
+ const response = yield axiosClient.post(`https://api.ashbyhq.com/candidate.createNote`, {
19
+ candidateId,
20
+ note,
21
+ }, {
22
+ auth: {
23
+ username: authToken,
24
+ password: "",
25
+ },
26
+ });
27
+ if (!response.data.success) {
28
+ throw new Error(response.data.errors.join("; "));
29
+ }
30
+ });
31
+ export default createNote;
@@ -0,0 +1,3 @@
1
+ import type { ashbyGetCandidateInfoFunction } from "../../autogen/types.js";
2
+ declare const getCandidateInfo: ashbyGetCandidateInfoFunction;
3
+ export default getCandidateInfo;
@@ -0,0 +1,33 @@
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 { axiosClient } from "../../util/axiosClient.js";
11
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
12
+ const getCandidateInfo = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
13
+ const { candidateId } = params;
14
+ const { authToken } = authParams;
15
+ if (!authToken) {
16
+ throw new Error(MISSING_AUTH_TOKEN);
17
+ }
18
+ const response = yield axiosClient.post(`https://api.ashbyhq.com/candidate.info`, {
19
+ id: candidateId,
20
+ }, {
21
+ auth: {
22
+ username: authToken,
23
+ password: "",
24
+ },
25
+ });
26
+ if (!response.data.success) {
27
+ throw new Error(response.data.errors.join("; "));
28
+ }
29
+ return {
30
+ candidate: response.data,
31
+ };
32
+ });
33
+ export default getCandidateInfo;
@@ -0,0 +1,3 @@
1
+ import type { ashbyListCandidateNotesFunction } from "../../autogen/types.js";
2
+ declare const listCandidateNotes: ashbyListCandidateNotesFunction;
3
+ export default listCandidateNotes;
@@ -0,0 +1,33 @@
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 { axiosClient } from "../../util/axiosClient.js";
11
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
12
+ const listCandidateNotes = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
13
+ const { candidateId } = params;
14
+ const { authToken } = authParams;
15
+ if (!authToken) {
16
+ throw new Error(MISSING_AUTH_TOKEN);
17
+ }
18
+ const response = yield axiosClient.post(`https://api.ashbyhq.com/candidate.listNotes`, {
19
+ candidateId,
20
+ }, {
21
+ auth: {
22
+ username: authToken,
23
+ password: "",
24
+ },
25
+ });
26
+ if (!response.data.success) {
27
+ throw new Error(response.data.errors.join("; "));
28
+ }
29
+ return {
30
+ notes: response.data.results,
31
+ };
32
+ });
33
+ export default listCandidateNotes;
@@ -0,0 +1,3 @@
1
+ import type { ashbyListCandidatesFunction } from "../../autogen/types.js";
2
+ declare const listCandidates: ashbyListCandidatesFunction;
3
+ export default listCandidates;
@@ -0,0 +1,30 @@
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 { axiosClient } from "../../util/axiosClient.js";
11
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
12
+ const listCandidates = (_a) => __awaiter(void 0, [_a], void 0, function* ({ authParams, }) {
13
+ const { authToken } = authParams;
14
+ if (!authToken) {
15
+ throw new Error(MISSING_AUTH_TOKEN);
16
+ }
17
+ const response = yield axiosClient.post(`https://api.ashbyhq.com/candidate.list`, null, {
18
+ auth: {
19
+ username: authToken,
20
+ password: "",
21
+ },
22
+ });
23
+ if (!response.data.success) {
24
+ throw new Error(response.data.errors.join("; "));
25
+ }
26
+ return {
27
+ candidates: response.data.results,
28
+ };
29
+ });
30
+ export default listCandidates;
@@ -0,0 +1,3 @@
1
+ import type { ashbySearchCandidatesFunction } from "../../autogen/types.js";
2
+ declare const searchCandidates: ashbySearchCandidatesFunction;
3
+ export default searchCandidates;
@@ -0,0 +1,34 @@
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 { axiosClient } from "../../util/axiosClient.js";
11
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
12
+ const searchCandidates = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
13
+ const { email, name } = params;
14
+ const { authToken } = authParams;
15
+ if (!authToken) {
16
+ throw new Error(MISSING_AUTH_TOKEN);
17
+ }
18
+ const response = yield axiosClient.post(`https://api.ashbyhq.com/candidate.search`, {
19
+ email,
20
+ name,
21
+ }, {
22
+ auth: {
23
+ username: authToken,
24
+ password: "",
25
+ },
26
+ });
27
+ if (!response.data.success) {
28
+ throw new Error(response.data.errors.join("; "));
29
+ }
30
+ return {
31
+ candidates: response.data.results,
32
+ };
33
+ });
34
+ export default searchCandidates;
@@ -0,0 +1,3 @@
1
+ import type { ashbyUpdateCandidateFunction } from "../../autogen/types.js";
2
+ declare const updateCandidate: ashbyUpdateCandidateFunction;
3
+ export default updateCandidate;
@@ -0,0 +1,56 @@
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 { axiosClient } from "../../util/axiosClient.js";
11
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
12
+ const updateCandidate = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
13
+ const { authToken } = authParams;
14
+ if (!authToken) {
15
+ throw new Error(MISSING_AUTH_TOKEN);
16
+ }
17
+ const body = {
18
+ candidateId: params.candidateId,
19
+ };
20
+ if (params.name !== undefined)
21
+ body.name = params.name;
22
+ if (params.email !== undefined)
23
+ body.email = params.email;
24
+ if (params.phoneNumber !== undefined)
25
+ body.phoneNumber = params.phoneNumber;
26
+ if (params.linkedInUrl !== undefined)
27
+ body.linkedInUrl = params.linkedInUrl;
28
+ if (params.githubUrl !== undefined)
29
+ body.githubUrl = params.githubUrl;
30
+ if (params.websiteUrl !== undefined)
31
+ body.websiteUrl = params.websiteUrl;
32
+ if (params.alternateEmail !== undefined)
33
+ body.alternateEmail = params.alternateEmail;
34
+ if (params.socialLinks !== undefined)
35
+ body.socialLinks = params.socialLinks;
36
+ if (params.sourceId !== undefined)
37
+ body.sourceId = params.sourceId;
38
+ if (params.creditedToUserId !== undefined)
39
+ body.creditedToUserId = params.creditedToUserId;
40
+ if (params.location !== undefined)
41
+ body.location = params.location;
42
+ if (params.createdAt !== undefined)
43
+ body.createdAt = params.createdAt;
44
+ if (params.sendNotifications !== undefined)
45
+ body.sendNotifications = params.sendNotifications;
46
+ const response = yield axiosClient.post(`https://api.ashbyhq.com/candidate.update`, body, {
47
+ auth: {
48
+ username: authToken,
49
+ password: "",
50
+ },
51
+ });
52
+ if (!response.data.success) {
53
+ throw new Error(response.data.errors.join("; "));
54
+ }
55
+ });
56
+ export default updateCandidate;
@@ -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.html_url,
50
+ url: item.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.html_url,
71
+ url: item.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, _b, _c;
79
+ var _a;
80
80
  return ({
81
81
  filename: f.filename,
82
82
  status: f.status,
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"),
83
+ patch: (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n").slice(0, MAX_PATCH_LINES).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, _b, _c;
107
+ var _a;
108
108
  return ({
109
109
  filename: f.filename,
110
110
  status: f.status,
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"),
111
+ patch: (_a = f.patch) === null || _a === void 0 ? void 0 : _a.split("\n").slice(0, MAX_PATCH_LINES).join("\n"),
112
112
  });
113
113
  })
114
114
  : undefined;
115
115
  return {
116
116
  number: item.number,
117
117
  title: item.title,
118
- url: item.html_url,
118
+ html_url: item.html_url,
119
119
  state: item.state,
120
120
  isPullRequest: isPR,
121
121
  body: item.body,
@@ -0,0 +1,3 @@
1
+ import type { gongGetGongTranscriptsFunction } from "../../autogen/types.js";
2
+ declare const getGongTranscripts: gongGetGongTranscriptsFunction;
3
+ export default getGongTranscripts;
@@ -0,0 +1,315 @@
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
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
21
+ import axios, { AxiosError } from "axios";
22
+ import { z } from "zod";
23
+ import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
24
+ const UserSchema = z
25
+ .object({
26
+ id: z.string(),
27
+ firstName: z.string(),
28
+ lastName: z.string(),
29
+ title: z.string().nullable(),
30
+ emailAddress: z.string(),
31
+ })
32
+ .partial()
33
+ .passthrough();
34
+ const CallSchema = z
35
+ .object({
36
+ metaData: z.object({
37
+ id: z.string(),
38
+ primaryUserId: z.string(),
39
+ started: z.string(),
40
+ isPrivate: z.boolean(),
41
+ title: z.string(),
42
+ }),
43
+ parties: z.array(z
44
+ .object({
45
+ id: z.string(),
46
+ name: z.string(),
47
+ userId: z.string(),
48
+ emailAddress: z.string(),
49
+ speakerId: z.string().nullable(),
50
+ })
51
+ .partial()
52
+ .passthrough()),
53
+ content: z.object({
54
+ trackers: z.array(z.object({
55
+ id: z.string(),
56
+ name: z.string(),
57
+ })),
58
+ }),
59
+ })
60
+ .partial()
61
+ .passthrough();
62
+ const SentenceSchema = z
63
+ .object({
64
+ start: z.number(),
65
+ end: z.number(),
66
+ text: z.string(),
67
+ })
68
+ .partial()
69
+ .passthrough();
70
+ const TranscriptSchema = z
71
+ .object({
72
+ callId: z.string(),
73
+ transcript: z.array(z
74
+ .object({
75
+ speakerId: z.string(),
76
+ topic: z.string().nullable(),
77
+ sentences: z.array(SentenceSchema),
78
+ })
79
+ .partial()
80
+ .passthrough()),
81
+ })
82
+ .partial()
83
+ .passthrough();
84
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
85
+ const GongResponseSchema = z.object({
86
+ users: z.array(UserSchema).optional(),
87
+ calls: z.array(CallSchema).optional(),
88
+ callTranscripts: z.array(TranscriptSchema).optional(),
89
+ cursor: z.string().optional(),
90
+ });
91
+ function getUsers(authToken) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ var _a;
94
+ const results = [];
95
+ let cursor = undefined;
96
+ do {
97
+ const response = yield axios.get(`https://api.gong.io/v2/users` + (cursor ? `?cursor=${cursor}` : ""), {
98
+ headers: {
99
+ Authorization: `Bearer ${authToken}`,
100
+ "Content-Type": "application/json",
101
+ },
102
+ });
103
+ if (!response) {
104
+ return results;
105
+ }
106
+ for (const user of (_a = response.data.users) !== null && _a !== void 0 ? _a : []) {
107
+ const parsedUser = UserSchema.safeParse(user);
108
+ if (parsedUser.success) {
109
+ results.push(parsedUser.data);
110
+ }
111
+ }
112
+ cursor = response.data.cursor;
113
+ } while (cursor);
114
+ return results;
115
+ });
116
+ }
117
+ function getCalls(authToken_1) {
118
+ return __awaiter(this, arguments, void 0, function* (authToken, params = {}) {
119
+ let results = [];
120
+ let cursor = undefined;
121
+ do {
122
+ const response = yield axios.post(`https://api.gong.io/v2/calls/extensive` + (cursor ? `?cursor=${cursor}` : ""), {
123
+ filter: Object.assign({}, params),
124
+ contentSelector: {
125
+ exposedFields: {
126
+ parties: true,
127
+ content: {
128
+ trackers: true,
129
+ },
130
+ },
131
+ },
132
+ }, {
133
+ headers: {
134
+ Authorization: `Bearer ${authToken}`,
135
+ "Content-Type": "application/json",
136
+ },
137
+ });
138
+ if (!response) {
139
+ return results;
140
+ }
141
+ const parsedItems = z.array(CallSchema).safeParse(response.data.calls);
142
+ if (parsedItems.success) {
143
+ results = [...results, ...parsedItems.data];
144
+ }
145
+ else {
146
+ return results;
147
+ }
148
+ cursor = response.data.cursor;
149
+ } while (cursor);
150
+ return results;
151
+ });
152
+ }
153
+ function getTranscripts(authToken_1) {
154
+ return __awaiter(this, arguments, void 0, function* (authToken, params = {}) {
155
+ let results = [];
156
+ let cursor = undefined;
157
+ do {
158
+ const response = yield axios.post(`https://api.gong.io/v2/calls/transcript` + (cursor ? `?cursor=${cursor}` : ""), {
159
+ filter: Object.assign({}, params),
160
+ }, {
161
+ headers: {
162
+ Authorization: `Bearer ${authToken}`,
163
+ "Content-Type": "application/json",
164
+ },
165
+ });
166
+ if (!response) {
167
+ return results;
168
+ }
169
+ const parsedItems = z.array(TranscriptSchema).safeParse(response.data.callTranscripts);
170
+ if (parsedItems.success) {
171
+ results = [...results, ...parsedItems.data];
172
+ }
173
+ else {
174
+ return results;
175
+ }
176
+ cursor = response.data.cursor;
177
+ } while (cursor);
178
+ return results;
179
+ });
180
+ }
181
+ // Retrieves transcripts from Gong based on the provided parameters
182
+ const getGongTranscripts = (_a) => __awaiter(void 0, [_a], void 0, function* ({ params, authParams, }) {
183
+ var _b, _c, _d, _e, _f, _g, _h;
184
+ if (!authParams.authToken) {
185
+ return {
186
+ success: false,
187
+ error: MISSING_AUTH_TOKEN,
188
+ };
189
+ }
190
+ if (!authParams.username) {
191
+ return {
192
+ success: false,
193
+ error: "Missing user email",
194
+ };
195
+ }
196
+ try {
197
+ const gongUsers = yield getUsers(authParams.authToken);
198
+ const userEmails = gongUsers.map(user => user.emailAddress);
199
+ if (!userEmails.includes(authParams.username)) {
200
+ return {
201
+ success: false,
202
+ error: "User email not found in Gong users",
203
+ };
204
+ }
205
+ const filteredGongUsers = gongUsers.filter(user => user.title === params.userRole);
206
+ const filteredPrimaryIds = filteredGongUsers.map(user => user.id).filter((id) => id !== undefined);
207
+ if (filteredPrimaryIds.length === 0) {
208
+ return {
209
+ success: false,
210
+ error: "No Gong users found with the specified role",
211
+ };
212
+ }
213
+ const calls = yield getCalls(authParams.authToken, {
214
+ fromDateTime: (_b = params.startDate) !== null && _b !== void 0 ? _b : "",
215
+ toDateTime: (_c = params.endDate) !== null && _c !== void 0 ? _c : "",
216
+ primaryUserIds: filteredPrimaryIds,
217
+ });
218
+ const callsWithTrackers = calls.filter(call => {
219
+ // If the user didn't provide any trackers to filter on, return all calls
220
+ if (!params.trackers || params.trackers.length === 0) {
221
+ return true;
222
+ }
223
+ // Filter out calls that don't have trackers if the user specified trackers
224
+ if (!call.content || !call.content.trackers) {
225
+ return false;
226
+ }
227
+ const trackerNames = call.content.trackers.map(tracker => tracker.name);
228
+ // Check if any of the trackers in the call match the ones provided by the user
229
+ return params.trackers.some(tr => trackerNames.includes(tr));
230
+ });
231
+ const publicCalls = callsWithTrackers.filter(call => {
232
+ if (!call.metaData) {
233
+ return false;
234
+ }
235
+ return !call.metaData.isPrivate;
236
+ });
237
+ if (publicCalls.length === 0) {
238
+ return {
239
+ success: true,
240
+ callTranscripts: [],
241
+ };
242
+ }
243
+ // Get transcripts for the calls we found
244
+ const callTranscripts = yield getTranscripts(authParams.authToken, {
245
+ fromDateTime: (_d = params.startDate) !== null && _d !== void 0 ? _d : "",
246
+ toDateTime: (_e = params.endDate) !== null && _e !== void 0 ? _e : "",
247
+ callIds: publicCalls.map(call => { var _a; return (_a = call.metaData) === null || _a === void 0 ? void 0 : _a.id; }).filter((id) => id !== undefined),
248
+ });
249
+ // Map speaker IDs to names in the transcripts
250
+ const userIdToNameMap = {};
251
+ const userIdToEmailMap = {};
252
+ const callIdToEmails = {};
253
+ publicCalls.forEach(call => {
254
+ var _a;
255
+ // Check if call has parties array
256
+ if (call.parties && Array.isArray(call.parties)) {
257
+ // Iterate through each party in the call
258
+ if ((_a = call.metaData) === null || _a === void 0 ? void 0 : _a.id) {
259
+ callIdToEmails[call.metaData.id] = [];
260
+ call.parties.forEach(party => {
261
+ var _a;
262
+ // Add the mapping of speakerId to name
263
+ if (party.speakerId) {
264
+ if (party.name) {
265
+ userIdToNameMap[party.speakerId] = party.name;
266
+ }
267
+ if (party.emailAddress) {
268
+ userIdToEmailMap[party.speakerId] = party.emailAddress;
269
+ if ((_a = call.metaData) === null || _a === void 0 ? void 0 : _a.id) {
270
+ callIdToEmails[call.metaData.id].push(party.emailAddress);
271
+ }
272
+ }
273
+ }
274
+ });
275
+ }
276
+ }
277
+ });
278
+ const callTranscriptsWithNames = callTranscripts
279
+ .map(callTranscript => {
280
+ var _a, _b, _c, _d, _e, _f, _g, _h;
281
+ const currTranscript = Object.assign({}, callTranscript);
282
+ const callId = callTranscript.callId;
283
+ currTranscript.transcript = (_a = callTranscript.transcript) === null || _a === void 0 ? void 0 : _a.map(transcript => {
284
+ var _a, _b;
285
+ const { speakerId } = transcript, rest = __rest(transcript, ["speakerId"]);
286
+ return Object.assign(Object.assign({}, rest), { speakerName: (_a = userIdToNameMap[speakerId !== null && speakerId !== void 0 ? speakerId : ""]) !== null && _a !== void 0 ? _a : "Unknown", speakerEmail: (_b = userIdToEmailMap[speakerId !== null && speakerId !== void 0 ? speakerId : ""]) !== null && _b !== void 0 ? _b : "Unknown" });
287
+ });
288
+ return Object.assign({ callName: (_d = (_c = (_b = publicCalls.find(call => { var _a; return ((_a = call.metaData) === null || _a === void 0 ? void 0 : _a.id) === callTranscript.callId; })) === null || _b === void 0 ? void 0 : _b.metaData) === null || _c === void 0 ? void 0 : _c.title) !== null && _d !== void 0 ? _d : "", userEmails: (_e = callIdToEmails[callId]) !== null && _e !== void 0 ? _e : [], startTime: (_h = (_g = (_f = publicCalls.find(call => { var _a; return ((_a = call.metaData) === null || _a === void 0 ? void 0 : _a.id) === callTranscript.callId; })) === null || _f === void 0 ? void 0 : _f.metaData) === null || _g === void 0 ? void 0 : _g.started) !== null && _h !== void 0 ? _h : "" }, currTranscript);
289
+ })
290
+ .filter(callTranscript => {
291
+ var _a;
292
+ if (!params.company || params.company === "") {
293
+ return true; // If no company filter is provided, include all transcripts
294
+ }
295
+ for (const email of callIdToEmails[callTranscript.callId]) {
296
+ const companyName = (_a = params.company) === null || _a === void 0 ? void 0 : _a.toLowerCase().replace(/ /g, "");
297
+ if (email.includes(companyName)) {
298
+ return true;
299
+ }
300
+ }
301
+ return false;
302
+ });
303
+ return {
304
+ success: true,
305
+ callTranscripts: callTranscriptsWithNames,
306
+ };
307
+ }
308
+ catch (error) {
309
+ return {
310
+ success: false,
311
+ error: error instanceof AxiosError ? ((_h = (_g = (_f = error.response) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.errors) !== null && _h !== void 0 ? _h : error.message) : error,
312
+ };
313
+ }
314
+ });
315
+ export default getGongTranscripts;
@@ -1,5 +1,6 @@
1
1
  import { axiosClient } from "../../util/axiosClient.js";
2
2
  import { MISSING_AUTH_TOKEN } from "../../util/missingAuthConstants.js";
3
+ import { resolveContentFormat, contentToDocRequests } from "./utils/googleDocsMarkdown.js";
3
4
  const addTextToTopOfDoc = async ({ params, authParams, }) => {
4
5
  if (!authParams.authToken) {
5
6
  return {
@@ -8,21 +9,12 @@ const addTextToTopOfDoc = async ({ params, authParams, }) => {
8
9
  error: MISSING_AUTH_TOKEN,
9
10
  };
10
11
  }
11
- const { documentId, text } = params;
12
+ const { documentId, text, contentFormat } = params;
12
13
  const baseApiUrl = "https://docs.googleapis.com/v1/documents";
14
+ const resolvedFormat = resolveContentFormat({ contentFormat });
13
15
  try {
14
- await axiosClient.post(`${baseApiUrl}/${documentId}:batchUpdate`, {
15
- requests: [
16
- {
17
- insertText: {
18
- location: {
19
- index: 1,
20
- },
21
- text: text + "\n",
22
- },
23
- },
24
- ],
25
- }, {
16
+ const requests = contentToDocRequests({ content: text + "\n", format: resolvedFormat });
17
+ await axiosClient.post(`${baseApiUrl}/${documentId}:batchUpdate`, { requests }, {
26
18
  headers: {
27
19
  Authorization: `Bearer ${authParams.authToken}`,
28
20
  },