airbyte-faros-destination 0.1.53

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 (280) hide show
  1. package/README.md +161 -0
  2. package/lib/common/write-stats.d.ts +16 -0
  3. package/lib/common/write-stats.js +48 -0
  4. package/lib/community/hasura-client.d.ts +27 -0
  5. package/lib/community/hasura-client.js +278 -0
  6. package/lib/community/hasura-writer.d.ts +12 -0
  7. package/lib/community/hasura-writer.js +44 -0
  8. package/lib/community/types.d.ts +26 -0
  9. package/lib/community/types.js +9 -0
  10. package/lib/converters/agileaccelerator/agileaccelerator_types.d.ts +315 -0
  11. package/lib/converters/agileaccelerator/agileaccelerator_types.js +81 -0
  12. package/lib/converters/agileaccelerator/common.d.ts +64 -0
  13. package/lib/converters/agileaccelerator/common.js +167 -0
  14. package/lib/converters/agileaccelerator/works.d.ts +7 -0
  15. package/lib/converters/agileaccelerator/works.js +105 -0
  16. package/lib/converters/asana/common.d.ts +39 -0
  17. package/lib/converters/asana/common.js +64 -0
  18. package/lib/converters/asana/projects.d.ts +7 -0
  19. package/lib/converters/asana/projects.js +29 -0
  20. package/lib/converters/asana/sections.d.ts +7 -0
  21. package/lib/converters/asana/sections.js +28 -0
  22. package/lib/converters/asana/stories.d.ts +7 -0
  23. package/lib/converters/asana/stories.js +32 -0
  24. package/lib/converters/asana/tags.d.ts +7 -0
  25. package/lib/converters/asana/tags.js +22 -0
  26. package/lib/converters/asana/tasks.d.ts +11 -0
  27. package/lib/converters/asana/tasks.js +160 -0
  28. package/lib/converters/asana/users.d.ts +7 -0
  29. package/lib/converters/asana/users.js +16 -0
  30. package/lib/converters/backlog/common.d.ts +20 -0
  31. package/lib/converters/backlog/common.js +59 -0
  32. package/lib/converters/backlog/issues.d.ts +7 -0
  33. package/lib/converters/backlog/issues.js +119 -0
  34. package/lib/converters/backlog/models.d.ts +156 -0
  35. package/lib/converters/backlog/models.js +23 -0
  36. package/lib/converters/backlog/projects.d.ts +7 -0
  37. package/lib/converters/backlog/projects.js +78 -0
  38. package/lib/converters/backlog/users.d.ts +7 -0
  39. package/lib/converters/backlog/users.js +26 -0
  40. package/lib/converters/bitbucket/branches.d.ts +7 -0
  41. package/lib/converters/bitbucket/branches.js +31 -0
  42. package/lib/converters/bitbucket/commits.d.ts +7 -0
  43. package/lib/converters/bitbucket/commits.js +50 -0
  44. package/lib/converters/bitbucket/common.d.ts +28 -0
  45. package/lib/converters/bitbucket/common.js +56 -0
  46. package/lib/converters/bitbucket/deployments.d.ts +11 -0
  47. package/lib/converters/bitbucket/deployments.js +100 -0
  48. package/lib/converters/bitbucket/issues.d.ts +12 -0
  49. package/lib/converters/bitbucket/issues.js +111 -0
  50. package/lib/converters/bitbucket/pipeline_steps.d.ts +10 -0
  51. package/lib/converters/bitbucket/pipeline_steps.js +83 -0
  52. package/lib/converters/bitbucket/pipelines.d.ts +8 -0
  53. package/lib/converters/bitbucket/pipelines.js +90 -0
  54. package/lib/converters/bitbucket/pull_request_activities.d.ts +13 -0
  55. package/lib/converters/bitbucket/pull_request_activities.js +112 -0
  56. package/lib/converters/bitbucket/pull_requests.d.ts +10 -0
  57. package/lib/converters/bitbucket/pull_requests.js +95 -0
  58. package/lib/converters/bitbucket/repositories.d.ts +9 -0
  59. package/lib/converters/bitbucket/repositories.js +41 -0
  60. package/lib/converters/bitbucket/types.d.ts +667 -0
  61. package/lib/converters/bitbucket/types.js +2 -0
  62. package/lib/converters/bitbucket/workspace_users.d.ts +7 -0
  63. package/lib/converters/bitbucket/workspace_users.js +31 -0
  64. package/lib/converters/bitbucket/workspaces.d.ts +8 -0
  65. package/lib/converters/bitbucket/workspaces.js +61 -0
  66. package/lib/converters/converter-registry.d.ts +25 -0
  67. package/lib/converters/converter-registry.js +64 -0
  68. package/lib/converters/converter.d.ts +63 -0
  69. package/lib/converters/converter.js +122 -0
  70. package/lib/converters/datadog/common.d.ts +27 -0
  71. package/lib/converters/datadog/common.js +34 -0
  72. package/lib/converters/datadog/incidents.d.ts +9 -0
  73. package/lib/converters/datadog/incidents.js +128 -0
  74. package/lib/converters/datadog/users.d.ts +7 -0
  75. package/lib/converters/datadog/users.js +27 -0
  76. package/lib/converters/docker/common.d.ts +87 -0
  77. package/lib/converters/docker/common.js +76 -0
  78. package/lib/converters/docker/tags.d.ts +8 -0
  79. package/lib/converters/docker/tags.js +98 -0
  80. package/lib/converters/github/assignees.d.ts +7 -0
  81. package/lib/converters/github/assignees.js +16 -0
  82. package/lib/converters/github/branches.d.ts +7 -0
  83. package/lib/converters/github/branches.js +28 -0
  84. package/lib/converters/github/collaborators.d.ts +7 -0
  85. package/lib/converters/github/collaborators.js +19 -0
  86. package/lib/converters/github/commits.d.ts +7 -0
  87. package/lib/converters/github/commits.js +48 -0
  88. package/lib/converters/github/common.d.ts +37 -0
  89. package/lib/converters/github/common.js +130 -0
  90. package/lib/converters/github/issue_labels.d.ts +7 -0
  91. package/lib/converters/github/issue_labels.js +20 -0
  92. package/lib/converters/github/issue_milestones.d.ts +8 -0
  93. package/lib/converters/github/issue_milestones.js +42 -0
  94. package/lib/converters/github/issues.d.ts +9 -0
  95. package/lib/converters/github/issues.js +90 -0
  96. package/lib/converters/github/organizations.d.ts +7 -0
  97. package/lib/converters/github/organizations.js +37 -0
  98. package/lib/converters/github/projects.d.ts +7 -0
  99. package/lib/converters/github/projects.js +21 -0
  100. package/lib/converters/github/pull_request_stats.d.ts +7 -0
  101. package/lib/converters/github/pull_request_stats.js +43 -0
  102. package/lib/converters/github/pull_requests.d.ts +7 -0
  103. package/lib/converters/github/pull_requests.js +63 -0
  104. package/lib/converters/github/releases.d.ts +7 -0
  105. package/lib/converters/github/releases.js +51 -0
  106. package/lib/converters/github/repositories.d.ts +7 -0
  107. package/lib/converters/github/repositories.js +44 -0
  108. package/lib/converters/github/review_comments.d.ts +7 -0
  109. package/lib/converters/github/review_comments.js +39 -0
  110. package/lib/converters/github/reviews.d.ts +7 -0
  111. package/lib/converters/github/reviews.js +58 -0
  112. package/lib/converters/github/tags.d.ts +7 -0
  113. package/lib/converters/github/tags.js +31 -0
  114. package/lib/converters/github/users.d.ts +7 -0
  115. package/lib/converters/github/users.js +19 -0
  116. package/lib/converters/gitlab/branches.d.ts +8 -0
  117. package/lib/converters/gitlab/branches.js +44 -0
  118. package/lib/converters/gitlab/commits.d.ts +7 -0
  119. package/lib/converters/gitlab/commits.js +33 -0
  120. package/lib/converters/gitlab/common.d.ts +30 -0
  121. package/lib/converters/gitlab/common.js +70 -0
  122. package/lib/converters/gitlab/group_labels.d.ts +7 -0
  123. package/lib/converters/gitlab/group_labels.js +15 -0
  124. package/lib/converters/gitlab/group_milestones.d.ts +8 -0
  125. package/lib/converters/gitlab/group_milestones.js +41 -0
  126. package/lib/converters/gitlab/groups.d.ts +7 -0
  127. package/lib/converters/gitlab/groups.js +43 -0
  128. package/lib/converters/gitlab/issues.d.ts +10 -0
  129. package/lib/converters/gitlab/issues.js +79 -0
  130. package/lib/converters/gitlab/jobs.d.ts +11 -0
  131. package/lib/converters/gitlab/jobs.js +75 -0
  132. package/lib/converters/gitlab/merge_request_commits.d.ts +7 -0
  133. package/lib/converters/gitlab/merge_request_commits.js +34 -0
  134. package/lib/converters/gitlab/merge_requests.d.ts +10 -0
  135. package/lib/converters/gitlab/merge_requests.js +65 -0
  136. package/lib/converters/gitlab/pipelines.d.ts +7 -0
  137. package/lib/converters/gitlab/pipelines.js +41 -0
  138. package/lib/converters/gitlab/project_labels.d.ts +7 -0
  139. package/lib/converters/gitlab/project_labels.js +15 -0
  140. package/lib/converters/gitlab/project_milestones.d.ts +8 -0
  141. package/lib/converters/gitlab/project_milestones.js +41 -0
  142. package/lib/converters/gitlab/projects.d.ts +7 -0
  143. package/lib/converters/gitlab/projects.js +51 -0
  144. package/lib/converters/gitlab/releases.d.ts +10 -0
  145. package/lib/converters/gitlab/releases.js +68 -0
  146. package/lib/converters/gitlab/tags.d.ts +10 -0
  147. package/lib/converters/gitlab/tags.js +41 -0
  148. package/lib/converters/gitlab/users.d.ts +7 -0
  149. package/lib/converters/gitlab/users.js +33 -0
  150. package/lib/converters/googlecalendar/calendar_models.d.ts +618 -0
  151. package/lib/converters/googlecalendar/calendar_models.js +2 -0
  152. package/lib/converters/googlecalendar/calendars.d.ts +7 -0
  153. package/lib/converters/googlecalendar/calendars.js +29 -0
  154. package/lib/converters/googlecalendar/common.d.ts +52 -0
  155. package/lib/converters/googlecalendar/common.js +130 -0
  156. package/lib/converters/googlecalendar/events.d.ts +8 -0
  157. package/lib/converters/googlecalendar/events.js +117 -0
  158. package/lib/converters/harness/common.d.ts +105 -0
  159. package/lib/converters/harness/common.js +16 -0
  160. package/lib/converters/harness/executions.d.ts +15 -0
  161. package/lib/converters/harness/executions.js +245 -0
  162. package/lib/converters/jenkins/builds.d.ts +9 -0
  163. package/lib/converters/jenkins/builds.js +74 -0
  164. package/lib/converters/jenkins/common.d.ts +25 -0
  165. package/lib/converters/jenkins/common.js +54 -0
  166. package/lib/converters/jenkins/jobs.d.ts +8 -0
  167. package/lib/converters/jenkins/jobs.js +29 -0
  168. package/lib/converters/jira/board_issues.d.ts +7 -0
  169. package/lib/converters/jira/board_issues.js +28 -0
  170. package/lib/converters/jira/boards.d.ts +7 -0
  171. package/lib/converters/jira/boards.js +34 -0
  172. package/lib/converters/jira/common.d.ts +61 -0
  173. package/lib/converters/jira/common.js +64 -0
  174. package/lib/converters/jira/epics.d.ts +8 -0
  175. package/lib/converters/jira/epics.js +45 -0
  176. package/lib/converters/jira/issue_fields.d.ts +7 -0
  177. package/lib/converters/jira/issue_fields.js +15 -0
  178. package/lib/converters/jira/issues.d.ts +52 -0
  179. package/lib/converters/jira/issues.js +545 -0
  180. package/lib/converters/jira/project_versions.d.ts +9 -0
  181. package/lib/converters/jira/project_versions.js +48 -0
  182. package/lib/converters/jira/projects.d.ts +7 -0
  183. package/lib/converters/jira/projects.js +40 -0
  184. package/lib/converters/jira/pull_requests.d.ts +7 -0
  185. package/lib/converters/jira/pull_requests.js +15 -0
  186. package/lib/converters/jira/sprint_issues.d.ts +7 -0
  187. package/lib/converters/jira/sprint_issues.js +15 -0
  188. package/lib/converters/jira/sprints.d.ts +16 -0
  189. package/lib/converters/jira/sprints.js +80 -0
  190. package/lib/converters/jira/users.d.ts +8 -0
  191. package/lib/converters/jira/users.js +33 -0
  192. package/lib/converters/jira/workflow_statuses.d.ts +7 -0
  193. package/lib/converters/jira/workflow_statuses.js +15 -0
  194. package/lib/converters/jsonata.d.ts +17 -0
  195. package/lib/converters/jsonata.js +47 -0
  196. package/lib/converters/okta/common.d.ts +8 -0
  197. package/lib/converters/okta/common.js +17 -0
  198. package/lib/converters/okta/groups.d.ts +7 -0
  199. package/lib/converters/okta/groups.js +47 -0
  200. package/lib/converters/okta/models.d.ts +102 -0
  201. package/lib/converters/okta/models.js +2 -0
  202. package/lib/converters/okta/users.d.ts +8 -0
  203. package/lib/converters/okta/users.js +73 -0
  204. package/lib/converters/okta_faros/common.d.ts +4 -0
  205. package/lib/converters/okta_faros/common.js +11 -0
  206. package/lib/converters/okta_faros/groups.d.ts +13 -0
  207. package/lib/converters/okta_faros/groups.js +23 -0
  208. package/lib/converters/okta_faros/users.d.ts +13 -0
  209. package/lib/converters/okta_faros/users.js +23 -0
  210. package/lib/converters/pagerduty/common.d.ts +37 -0
  211. package/lib/converters/pagerduty/common.js +40 -0
  212. package/lib/converters/pagerduty/incident_log_entries.d.ts +8 -0
  213. package/lib/converters/pagerduty/incident_log_entries.js +56 -0
  214. package/lib/converters/pagerduty/incidents.d.ts +10 -0
  215. package/lib/converters/pagerduty/incidents.js +127 -0
  216. package/lib/converters/pagerduty/priorities_resource.d.ts +11 -0
  217. package/lib/converters/pagerduty/priorities_resource.js +64 -0
  218. package/lib/converters/pagerduty/users.d.ts +7 -0
  219. package/lib/converters/pagerduty/users.js +26 -0
  220. package/lib/converters/phabricator/commits.d.ts +8 -0
  221. package/lib/converters/phabricator/commits.js +75 -0
  222. package/lib/converters/phabricator/common.d.ts +40 -0
  223. package/lib/converters/phabricator/common.js +107 -0
  224. package/lib/converters/phabricator/repositories.d.ts +7 -0
  225. package/lib/converters/phabricator/repositories.js +56 -0
  226. package/lib/converters/phabricator/revisions.d.ts +7 -0
  227. package/lib/converters/phabricator/revisions.js +83 -0
  228. package/lib/converters/phabricator/users.d.ts +7 -0
  229. package/lib/converters/phabricator/users.js +39 -0
  230. package/lib/converters/shortcut/common.d.ts +16 -0
  231. package/lib/converters/shortcut/common.js +68 -0
  232. package/lib/converters/shortcut/epics.d.ts +7 -0
  233. package/lib/converters/shortcut/epics.js +29 -0
  234. package/lib/converters/shortcut/iterations.d.ts +7 -0
  235. package/lib/converters/shortcut/iterations.js +29 -0
  236. package/lib/converters/shortcut/members.d.ts +7 -0
  237. package/lib/converters/shortcut/members.js +26 -0
  238. package/lib/converters/shortcut/models.d.ts +392 -0
  239. package/lib/converters/shortcut/models.js +30 -0
  240. package/lib/converters/shortcut/projects.d.ts +7 -0
  241. package/lib/converters/shortcut/projects.js +46 -0
  242. package/lib/converters/shortcut/stories.d.ts +7 -0
  243. package/lib/converters/shortcut/stories.js +127 -0
  244. package/lib/converters/squadcast/common.d.ts +169 -0
  245. package/lib/converters/squadcast/common.js +62 -0
  246. package/lib/converters/squadcast/events.d.ts +9 -0
  247. package/lib/converters/squadcast/events.js +53 -0
  248. package/lib/converters/squadcast/incidents.d.ts +10 -0
  249. package/lib/converters/squadcast/incidents.js +141 -0
  250. package/lib/converters/squadcast/services.d.ts +7 -0
  251. package/lib/converters/squadcast/services.js +28 -0
  252. package/lib/converters/squadcast/users.d.ts +7 -0
  253. package/lib/converters/squadcast/users.js +27 -0
  254. package/lib/converters/statuspage/common.d.ts +93 -0
  255. package/lib/converters/statuspage/common.js +80 -0
  256. package/lib/converters/statuspage/incident_updates.d.ts +8 -0
  257. package/lib/converters/statuspage/incident_updates.js +45 -0
  258. package/lib/converters/statuspage/incidents.d.ts +10 -0
  259. package/lib/converters/statuspage/incidents.js +128 -0
  260. package/lib/converters/statuspage/users.d.ts +7 -0
  261. package/lib/converters/statuspage/users.js +26 -0
  262. package/lib/converters/victorops/common.d.ts +16 -0
  263. package/lib/converters/victorops/common.js +24 -0
  264. package/lib/converters/victorops/incidents.d.ts +12 -0
  265. package/lib/converters/victorops/incidents.js +209 -0
  266. package/lib/converters/victorops/teams.d.ts +8 -0
  267. package/lib/converters/victorops/teams.js +30 -0
  268. package/lib/converters/victorops/users.d.ts +8 -0
  269. package/lib/converters/victorops/users.js +33 -0
  270. package/lib/destination-runner.d.ts +12 -0
  271. package/lib/destination-runner.js +22 -0
  272. package/lib/destination.d.ts +42 -0
  273. package/lib/destination.js +508 -0
  274. package/lib/index.d.ts +16 -0
  275. package/lib/index.js +39 -0
  276. package/lib/tsconfig.tsbuildinfo +1 -0
  277. package/package.json +71 -0
  278. package/resources/fetch-primary-keys.sql +16 -0
  279. package/resources/introspection-query.gql +61 -0
  280. package/resources/spec.json +468 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatusPageConverter = exports.IncidentSeverityCategory = exports.IncidentPriorityCategory = exports.IncidentStatusCategory = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.IncidentEventTypeCategory = exports.ComponentStatus = void 0;
4
+ const converter_1 = require("../converter");
5
+ var ComponentStatus;
6
+ (function (ComponentStatus) {
7
+ ComponentStatus["degraded_performance"] = "degraded_performance";
8
+ ComponentStatus["major_outage"] = "major_outage";
9
+ ComponentStatus["operational"] = "operational";
10
+ ComponentStatus["partial_outage"] = "partial_outage";
11
+ ComponentStatus["under_maintenance"] = "under_maintenance";
12
+ })(ComponentStatus = exports.ComponentStatus || (exports.ComponentStatus = {}));
13
+ var IncidentEventTypeCategory;
14
+ (function (IncidentEventTypeCategory) {
15
+ IncidentEventTypeCategory["Created"] = "Created";
16
+ IncidentEventTypeCategory["Acknowledged"] = "Acknowledged";
17
+ IncidentEventTypeCategory["Resolved"] = "Resolved";
18
+ IncidentEventTypeCategory["Custom"] = "Custom";
19
+ })(IncidentEventTypeCategory = exports.IncidentEventTypeCategory || (exports.IncidentEventTypeCategory = {}));
20
+ var StatuspageIncidentImpact;
21
+ (function (StatuspageIncidentImpact) {
22
+ StatuspageIncidentImpact["Critical"] = "critical";
23
+ StatuspageIncidentImpact["Major"] = "major";
24
+ StatuspageIncidentImpact["Minor"] = "minor";
25
+ StatuspageIncidentImpact["None"] = "none";
26
+ })(StatuspageIncidentImpact = exports.StatuspageIncidentImpact || (exports.StatuspageIncidentImpact = {}));
27
+ var StatuspageIncidentStatus;
28
+ (function (StatuspageIncidentStatus) {
29
+ StatuspageIncidentStatus["Identified"] = "identified";
30
+ StatuspageIncidentStatus["Investigating"] = "investigating";
31
+ StatuspageIncidentStatus["Monitoring"] = "monitoring";
32
+ StatuspageIncidentStatus["Postmortem"] = "postmortem";
33
+ StatuspageIncidentStatus["Resolved"] = "resolved";
34
+ })(StatuspageIncidentStatus = exports.StatuspageIncidentStatus || (exports.StatuspageIncidentStatus = {}));
35
+ var IncidentStatusCategory;
36
+ (function (IncidentStatusCategory) {
37
+ IncidentStatusCategory["Identified"] = "Identified";
38
+ IncidentStatusCategory["Investigating"] = "Investigating";
39
+ IncidentStatusCategory["Monitoring"] = "Monitoring";
40
+ IncidentStatusCategory["Resolved"] = "Resolved";
41
+ IncidentStatusCategory["Custom"] = "Custom";
42
+ })(IncidentStatusCategory = exports.IncidentStatusCategory || (exports.IncidentStatusCategory = {}));
43
+ var IncidentPriorityCategory;
44
+ (function (IncidentPriorityCategory) {
45
+ IncidentPriorityCategory["Critical"] = "Critical";
46
+ IncidentPriorityCategory["High"] = "High";
47
+ IncidentPriorityCategory["Medium"] = "Medium";
48
+ IncidentPriorityCategory["Low"] = "Low";
49
+ IncidentPriorityCategory["Custom"] = "Custom";
50
+ })(IncidentPriorityCategory = exports.IncidentPriorityCategory || (exports.IncidentPriorityCategory = {}));
51
+ var IncidentSeverityCategory;
52
+ (function (IncidentSeverityCategory) {
53
+ IncidentSeverityCategory["Sev1"] = "Sev1";
54
+ IncidentSeverityCategory["Sev2"] = "Sev2";
55
+ IncidentSeverityCategory["Sev3"] = "Sev3";
56
+ IncidentSeverityCategory["Sev4"] = "Sev4";
57
+ IncidentSeverityCategory["Sev5"] = "Sev5";
58
+ IncidentSeverityCategory["Custom"] = "Custom";
59
+ })(IncidentSeverityCategory = exports.IncidentSeverityCategory || (exports.IncidentSeverityCategory = {}));
60
+ /** StatusPage converter base */
61
+ class StatusPageConverter extends converter_1.Converter {
62
+ constructor() {
63
+ super(...arguments);
64
+ this.source = 'StatusPage';
65
+ }
66
+ /** Every StatusPage record have id property */
67
+ id(record) {
68
+ var _a, _b;
69
+ return (_b = (_a = record === null || record === void 0 ? void 0 : record.record) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.id;
70
+ }
71
+ statuspageConfig(ctx) {
72
+ var _a, _b;
73
+ return (_b = (_a = ctx.config.source_specific_configs) === null || _a === void 0 ? void 0 : _a.statuspage) !== null && _b !== void 0 ? _b : {};
74
+ }
75
+ applicationMapping(ctx) {
76
+ var _a, _b;
77
+ return ((_b = (0, converter_1.parseObjectConfig)((_a = this.statuspageConfig(ctx)) === null || _a === void 0 ? void 0 : _a.application_mapping, 'Application Mapping')) !== null && _b !== void 0 ? _b : {});
78
+ }
79
+ }
80
+ exports.StatusPageConverter = StatusPageConverter;
@@ -0,0 +1,8 @@
1
+ import { AirbyteRecord } from 'faros-airbyte-cdk';
2
+ import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
3
+ import { StatusPageConverter } from './common';
4
+ export declare class IncidentUpdates extends StatusPageConverter {
5
+ readonly destinationModels: ReadonlyArray<DestinationModel>;
6
+ convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
7
+ private eventType;
8
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IncidentUpdates = void 0;
4
+ const faros_feeds_sdk_1 = require("faros-feeds-sdk");
5
+ const common_1 = require("./common");
6
+ class IncidentUpdates extends common_1.StatusPageConverter {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.destinationModels = [
10
+ 'ims_IncidentEvent',
11
+ ];
12
+ }
13
+ async convert(record, ctx) {
14
+ const source = this.streamName.source;
15
+ const update = record.record.data;
16
+ return [
17
+ {
18
+ model: 'ims_IncidentEvent',
19
+ record: {
20
+ uid: update.id,
21
+ type: this.eventType(update.status),
22
+ createdAt: faros_feeds_sdk_1.Utils.toDate(update.created_at),
23
+ detail: update.body,
24
+ incident: { uid: update.incident_id, source },
25
+ },
26
+ },
27
+ ];
28
+ }
29
+ eventType(updateStatus) {
30
+ const detail = updateStatus;
31
+ switch (updateStatus) {
32
+ case common_1.StatuspageIncidentStatus.Investigating:
33
+ return { category: common_1.IncidentEventTypeCategory.Created, detail };
34
+ case common_1.StatuspageIncidentStatus.Identified:
35
+ return { category: common_1.IncidentEventTypeCategory.Acknowledged, detail };
36
+ case common_1.StatuspageIncidentStatus.Resolved:
37
+ return { category: common_1.IncidentEventTypeCategory.Resolved, detail };
38
+ case common_1.StatuspageIncidentStatus.Monitoring:
39
+ case common_1.StatuspageIncidentStatus.Postmortem:
40
+ default:
41
+ return { category: common_1.IncidentEventTypeCategory.Custom, detail };
42
+ }
43
+ }
44
+ }
45
+ exports.IncidentUpdates = IncidentUpdates;
@@ -0,0 +1,10 @@
1
+ import { AirbyteRecord } from 'faros-airbyte-cdk';
2
+ import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
3
+ import { StatusPageConverter } from './common';
4
+ export declare class Incidents extends StatusPageConverter {
5
+ readonly destinationModels: ReadonlyArray<DestinationModel>;
6
+ convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
7
+ private getPriority;
8
+ private getSeverity;
9
+ private getIncidentStatus;
10
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Incidents = void 0;
4
+ const faros_feeds_sdk_1 = require("faros-feeds-sdk");
5
+ const common_1 = require("./common");
6
+ class Incidents extends common_1.StatusPageConverter {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.destinationModels = [
10
+ 'compute_Application',
11
+ 'ims_Incident',
12
+ 'ims_IncidentApplicationImpact',
13
+ ];
14
+ }
15
+ async convert(record, ctx) {
16
+ var _a;
17
+ const source = this.streamName.source;
18
+ const incident = record.record.data;
19
+ const res = [];
20
+ const applicationMapping = this.applicationMapping(ctx);
21
+ const incidentRef = { uid: incident.id, source };
22
+ const createdAt = faros_feeds_sdk_1.Utils.toDate(incident.created_at);
23
+ let acknowledgedAt = faros_feeds_sdk_1.Utils.toDate(incident.created_at); // StatusPage doesn't have "triggered" semantic status
24
+ const resolvedAt = incident.resolved_at
25
+ ? faros_feeds_sdk_1.Utils.toDate(incident.resolved_at)
26
+ : undefined, updatedAt = faros_feeds_sdk_1.Utils.toDate(incident.updated_at);
27
+ for (const update of incident.incident_updates) {
28
+ const eventTime = faros_feeds_sdk_1.Utils.toDate(update.created_at);
29
+ if (update.status === common_1.StatuspageIncidentStatus.Investigating) {
30
+ acknowledgedAt = eventTime;
31
+ }
32
+ }
33
+ // StatusPage doesn't have incident severity, take "severity" of affected component/service
34
+ let severity = undefined;
35
+ for (const component of incident.components) {
36
+ const thisSeverity = this.getSeverity(component.status);
37
+ if (!severity)
38
+ severity = thisSeverity;
39
+ if (thisSeverity.category < severity.category)
40
+ severity = thisSeverity;
41
+ }
42
+ res.push({
43
+ model: 'ims_Incident',
44
+ record: {
45
+ ...incidentRef,
46
+ title: incident.name,
47
+ description: incident.postmortem_body,
48
+ url: incident.shortlink,
49
+ createdAt,
50
+ updatedAt,
51
+ acknowledgedAt,
52
+ resolvedAt,
53
+ priority: this.getPriority(incident.impact),
54
+ severity,
55
+ status: this.getIncidentStatus(incident.status),
56
+ },
57
+ });
58
+ for (const service of incident.components) {
59
+ let application = { name: service.name, platform: '' };
60
+ if (service.name in applicationMapping &&
61
+ applicationMapping[service.name].name) {
62
+ const mappedApp = applicationMapping[service.name];
63
+ application = {
64
+ name: mappedApp.name,
65
+ platform: (_a = mappedApp.platform) !== null && _a !== void 0 ? _a : application.platform,
66
+ };
67
+ }
68
+ res.push({ model: 'compute_Application', record: application });
69
+ res.push({
70
+ model: 'ims_IncidentApplicationImpact',
71
+ record: {
72
+ incident: incidentRef,
73
+ application,
74
+ },
75
+ });
76
+ }
77
+ return res;
78
+ }
79
+ getPriority(impact) {
80
+ const detail = impact;
81
+ switch (impact) {
82
+ case common_1.StatuspageIncidentImpact.Critical:
83
+ return { category: common_1.IncidentPriorityCategory.Critical, detail };
84
+ case common_1.StatuspageIncidentImpact.Major:
85
+ return { category: common_1.IncidentPriorityCategory.High, detail };
86
+ case common_1.StatuspageIncidentImpact.Minor:
87
+ return { category: common_1.IncidentPriorityCategory.Medium, detail };
88
+ case common_1.StatuspageIncidentImpact.None:
89
+ return { category: common_1.IncidentPriorityCategory.Low, detail };
90
+ default:
91
+ return { category: common_1.IncidentPriorityCategory.Custom, detail };
92
+ }
93
+ }
94
+ getSeverity(componentStatus) {
95
+ const detail = componentStatus;
96
+ switch (componentStatus) {
97
+ case common_1.ComponentStatus.major_outage:
98
+ return { category: common_1.IncidentSeverityCategory.Sev1, detail };
99
+ case common_1.ComponentStatus.partial_outage:
100
+ return { category: common_1.IncidentSeverityCategory.Sev2, detail };
101
+ case common_1.ComponentStatus.degraded_performance:
102
+ return { category: common_1.IncidentSeverityCategory.Sev3, detail };
103
+ case common_1.ComponentStatus.under_maintenance:
104
+ return { category: common_1.IncidentSeverityCategory.Sev4, detail };
105
+ case common_1.ComponentStatus.operational:
106
+ return { category: common_1.IncidentSeverityCategory.Sev5, detail };
107
+ default:
108
+ return { category: common_1.IncidentSeverityCategory.Custom, detail };
109
+ }
110
+ }
111
+ getIncidentStatus(incidentState) {
112
+ const detail = incidentState;
113
+ switch (incidentState) {
114
+ case common_1.StatuspageIncidentStatus.Investigating:
115
+ return { category: common_1.IncidentStatusCategory.Investigating, detail };
116
+ case common_1.StatuspageIncidentStatus.Identified:
117
+ return { category: common_1.IncidentStatusCategory.Identified, detail };
118
+ case common_1.StatuspageIncidentStatus.Monitoring:
119
+ case common_1.StatuspageIncidentStatus.Postmortem:
120
+ return { category: common_1.IncidentStatusCategory.Monitoring, detail };
121
+ case common_1.StatuspageIncidentStatus.Resolved:
122
+ return { category: common_1.IncidentStatusCategory.Resolved, detail };
123
+ default:
124
+ return { category: common_1.IncidentStatusCategory.Custom, detail };
125
+ }
126
+ }
127
+ }
128
+ exports.Incidents = Incidents;
@@ -0,0 +1,7 @@
1
+ import { AirbyteRecord } from 'faros-airbyte-cdk';
2
+ import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
3
+ import { StatusPageConverter } from './common';
4
+ export declare class Users extends StatusPageConverter {
5
+ readonly destinationModels: ReadonlyArray<DestinationModel>;
6
+ convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
7
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Users = void 0;
4
+ const common_1 = require("./common");
5
+ class Users extends common_1.StatusPageConverter {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.destinationModels = ['ims_User'];
9
+ }
10
+ async convert(record, ctx) {
11
+ const source = this.streamName.source;
12
+ const user = record.record.data;
13
+ return [
14
+ {
15
+ model: 'ims_User',
16
+ record: {
17
+ uid: user.id,
18
+ email: user.email,
19
+ name: `${user.first_name} ${user.last_name}`,
20
+ source,
21
+ },
22
+ },
23
+ ];
24
+ }
25
+ }
26
+ exports.Users = Users;
@@ -0,0 +1,16 @@
1
+ import { Converter, StreamContext } from '../converter';
2
+ declare type ApplicationMapping = Record<string, {
3
+ name: string;
4
+ platform?: string;
5
+ }>;
6
+ interface VictorOpsConfig {
7
+ readonly application_mapping?: ApplicationMapping;
8
+ readonly application_field?: string;
9
+ }
10
+ export declare abstract class VictorOpsConverter extends Converter {
11
+ source: string;
12
+ protected victoropsConfig(ctx: StreamContext): VictorOpsConfig;
13
+ protected applicationMapping(ctx: StreamContext): ApplicationMapping;
14
+ protected applicationField(ctx: StreamContext): string;
15
+ }
16
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VictorOpsConverter = void 0;
4
+ const converter_1 = require("../converter");
5
+ const DEFAULT_APPLICATION_FIELD = 'service';
6
+ class VictorOpsConverter extends converter_1.Converter {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.source = 'VictorOps';
10
+ }
11
+ victoropsConfig(ctx) {
12
+ var _a, _b;
13
+ return (_b = (_a = ctx.config.source_specific_configs) === null || _a === void 0 ? void 0 : _a.victorops) !== null && _b !== void 0 ? _b : {};
14
+ }
15
+ applicationMapping(ctx) {
16
+ var _a, _b;
17
+ return ((_b = (0, converter_1.parseObjectConfig)((_a = this.victoropsConfig(ctx)) === null || _a === void 0 ? void 0 : _a.application_mapping, 'Application Mapping')) !== null && _b !== void 0 ? _b : {});
18
+ }
19
+ applicationField(ctx) {
20
+ var _a;
21
+ return ((_a = this.victoropsConfig(ctx).application_field) !== null && _a !== void 0 ? _a : DEFAULT_APPLICATION_FIELD);
22
+ }
23
+ }
24
+ exports.VictorOpsConverter = VictorOpsConverter;
@@ -0,0 +1,12 @@
1
+ import { AirbyteRecord } from 'faros-airbyte-cdk';
2
+ import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
3
+ import { VictorOpsConverter } from './common';
4
+ export declare class Incidents extends VictorOpsConverter {
5
+ private readonly logger;
6
+ readonly destinationModels: ReadonlyArray<DestinationModel>;
7
+ id(record: AirbyteRecord): any;
8
+ convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
9
+ private getSeverity;
10
+ private eventType;
11
+ private getIncidentStatus;
12
+ }
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Incidents = void 0;
4
+ const faros_airbyte_cdk_1 = require("faros-airbyte-cdk");
5
+ const faros_feeds_sdk_1 = require("faros-feeds-sdk");
6
+ const common_1 = require("./common");
7
+ var IncidentStatusCategory;
8
+ (function (IncidentStatusCategory) {
9
+ IncidentStatusCategory["Created"] = "Created";
10
+ IncidentStatusCategory["Identified"] = "Identified";
11
+ IncidentStatusCategory["Investigating"] = "Investigating";
12
+ IncidentStatusCategory["Resolved"] = "Resolved";
13
+ IncidentStatusCategory["Custom"] = "Custom";
14
+ })(IncidentStatusCategory || (IncidentStatusCategory = {}));
15
+ var IncidentSeverityCategory;
16
+ (function (IncidentSeverityCategory) {
17
+ IncidentSeverityCategory["Sev1"] = "Sev1";
18
+ IncidentSeverityCategory["Sev2"] = "Sev2";
19
+ IncidentSeverityCategory["Sev3"] = "Sev3";
20
+ IncidentSeverityCategory["Sev4"] = "Sev4";
21
+ IncidentSeverityCategory["Sev5"] = "Sev5";
22
+ IncidentSeverityCategory["Custom"] = "Custom";
23
+ })(IncidentSeverityCategory || (IncidentSeverityCategory = {}));
24
+ var IncidentEventTypeCategory;
25
+ (function (IncidentEventTypeCategory) {
26
+ IncidentEventTypeCategory["Created"] = "Created";
27
+ IncidentEventTypeCategory["Acknowledged"] = "Acknowledged";
28
+ IncidentEventTypeCategory["Resolved"] = "Resolved";
29
+ IncidentEventTypeCategory["Custom"] = "Custom";
30
+ })(IncidentEventTypeCategory || (IncidentEventTypeCategory = {}));
31
+ class Incidents extends common_1.VictorOpsConverter {
32
+ constructor() {
33
+ super(...arguments);
34
+ this.logger = new faros_airbyte_cdk_1.AirbyteLogger();
35
+ this.destinationModels = [
36
+ 'compute_Application',
37
+ 'ims_Incident',
38
+ 'ims_IncidentApplicationImpact',
39
+ 'ims_IncidentAssignment',
40
+ 'ims_IncidentEvent',
41
+ 'ims_TeamIncidentAssociation',
42
+ ];
43
+ }
44
+ id(record) {
45
+ var _a, _b;
46
+ return (_b = (_a = record === null || record === void 0 ? void 0 : record.record) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.incidentNumber;
47
+ }
48
+ async convert(record, ctx) {
49
+ var _a, _b, _c;
50
+ const source = this.streamName.source;
51
+ const incident = record.record.data;
52
+ const res = [];
53
+ const incidentRef = { uid: incident.incidentNumber, source };
54
+ const createdAt = faros_feeds_sdk_1.Utils.toDate(incident.startTime);
55
+ //VO has service states, e.g. CRITICAL
56
+ let severity = incident.entityState
57
+ ? this.getSeverity(incident.entityState)
58
+ : undefined;
59
+ let acknowledgedAt = undefined, resolvedAt = undefined, updatedAt = faros_feeds_sdk_1.Utils.toDate(incident.startTime);
60
+ for (const transition of incident.transitions) {
61
+ const transitionTime = faros_feeds_sdk_1.Utils.toDate(transition.at);
62
+ res.push({
63
+ model: 'ims_IncidentEvent',
64
+ record: {
65
+ uid: `${transition.name}_${transition.at}`,
66
+ type: this.eventType(transition.name),
67
+ createdAt: transitionTime,
68
+ detail: (_a = transition.message) !== null && _a !== void 0 ? _a : incident.entityDisplayName,
69
+ incident: incidentRef,
70
+ },
71
+ });
72
+ if (['ACKED', 'acknowledged'].includes(transition.name)) {
73
+ //use earliest acknowledgement
74
+ if (!acknowledgedAt || transitionTime < acknowledgedAt) {
75
+ acknowledgedAt = transitionTime;
76
+ }
77
+ if (transition.by) {
78
+ res.push({
79
+ model: 'ims_IncidentAssignment',
80
+ record: {
81
+ incident: incidentRef,
82
+ assignee: {
83
+ uid: transition.by,
84
+ source,
85
+ },
86
+ },
87
+ });
88
+ }
89
+ }
90
+ if (transition.name.toLowerCase() === 'resolved') {
91
+ resolvedAt = faros_feeds_sdk_1.Utils.toDate(transition.at);
92
+ // hopefully we've pulled this incident before it got resolved, and have severity.
93
+ // Once incident is resolved, the service status field resets to 'OK'
94
+ severity = undefined;
95
+ }
96
+ if (updatedAt < transitionTime) {
97
+ updatedAt = transitionTime;
98
+ }
99
+ }
100
+ if ((_b = incident.pagedTeams) === null || _b === void 0 ? void 0 : _b.length) {
101
+ for (const pagedTeam of incident.pagedTeams) {
102
+ const team = {
103
+ uid: pagedTeam,
104
+ source,
105
+ };
106
+ res.push({
107
+ model: 'ims_TeamIncidentAssociation',
108
+ record: {
109
+ incident: incidentRef,
110
+ team,
111
+ },
112
+ });
113
+ }
114
+ }
115
+ res.push({
116
+ model: 'ims_Incident',
117
+ record: {
118
+ ...incidentRef,
119
+ title: incident.entityId,
120
+ description: incident.entityDisplayName,
121
+ url: incident.incidentLink,
122
+ createdAt,
123
+ updatedAt,
124
+ acknowledgedAt,
125
+ resolvedAt,
126
+ priority: undefined,
127
+ severity,
128
+ status: this.getIncidentStatus(incident.currentPhase),
129
+ },
130
+ });
131
+ const appMapping = this.applicationMapping(ctx);
132
+ const appField = this.applicationField(ctx);
133
+ // check optional application field parameter
134
+ const service = appField in incident && typeof incident[appField] === 'string'
135
+ ? incident[appField]
136
+ : incident.service;
137
+ // if we have an app mapping specified, only then write the application and impact records
138
+ if (service && service in appMapping && appMapping[service].name) {
139
+ this.logger.info(`Incident ${incident.incidentNumber} impacted service: ${service}`);
140
+ const application = {
141
+ name: appMapping[service].name,
142
+ platform: (_c = appMapping[service].platform) !== null && _c !== void 0 ? _c : '',
143
+ };
144
+ res.push({
145
+ model: 'compute_Application',
146
+ record: application,
147
+ });
148
+ res.push({
149
+ model: 'ims_IncidentApplicationImpact',
150
+ record: {
151
+ incident: incidentRef,
152
+ application,
153
+ },
154
+ });
155
+ }
156
+ return res;
157
+ }
158
+ getSeverity(state) {
159
+ const detail = state;
160
+ switch (state.toLowerCase()) {
161
+ case 'critical':
162
+ return { category: IncidentSeverityCategory.Sev1, detail };
163
+ case 'warn':
164
+ return { category: IncidentSeverityCategory.Sev3, detail };
165
+ case 'info':
166
+ case 'ok':
167
+ return { category: IncidentSeverityCategory.Sev5, detail };
168
+ default:
169
+ return { category: IncidentSeverityCategory.Custom, detail };
170
+ }
171
+ }
172
+ eventType(transitionType) {
173
+ let eventTypeCategory;
174
+ switch (transitionType) {
175
+ case 'UNACKED':
176
+ case 'triggered':
177
+ eventTypeCategory = IncidentEventTypeCategory.Created;
178
+ break;
179
+ case 'ACKED':
180
+ case 'acknowledged':
181
+ eventTypeCategory = IncidentEventTypeCategory.Acknowledged;
182
+ break;
183
+ case 'RESOLVED':
184
+ case 'resolved':
185
+ eventTypeCategory = IncidentEventTypeCategory.Resolved;
186
+ break;
187
+ default:
188
+ eventTypeCategory = IncidentEventTypeCategory.Custom;
189
+ break;
190
+ }
191
+ return { category: eventTypeCategory, detail: transitionType };
192
+ }
193
+ getIncidentStatus(incidentState) {
194
+ const detail = incidentState;
195
+ switch (incidentState) {
196
+ case 'ACKED':
197
+ case 'acknowledged':
198
+ return { category: IncidentStatusCategory.Identified, detail };
199
+ case 'RESOLVED':
200
+ case 'resolved':
201
+ return { category: IncidentStatusCategory.Resolved, detail };
202
+ case 'UNACKED':
203
+ case 'triggered':
204
+ default:
205
+ return { category: IncidentStatusCategory.Investigating, detail };
206
+ }
207
+ }
208
+ }
209
+ exports.Incidents = Incidents;
@@ -0,0 +1,8 @@
1
+ import { AirbyteRecord } from 'faros-airbyte-cdk';
2
+ import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
3
+ import { VictorOpsConverter } from './common';
4
+ export declare class Teams extends VictorOpsConverter {
5
+ readonly destinationModels: ReadonlyArray<DestinationModel>;
6
+ id(record: AirbyteRecord): any;
7
+ convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
8
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Teams = void 0;
4
+ const common_1 = require("./common");
5
+ class Teams extends common_1.VictorOpsConverter {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.destinationModels = ['ims_Team'];
9
+ }
10
+ id(record) {
11
+ var _a, _b;
12
+ return (_b = (_a = record === null || record === void 0 ? void 0 : record.record) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.slug;
13
+ }
14
+ async convert(record, ctx) {
15
+ const source = this.streamName.source;
16
+ const team = record.record.data;
17
+ return [
18
+ {
19
+ model: 'ims_Team',
20
+ record: {
21
+ uid: team.slug,
22
+ name: team.name,
23
+ url: team._selfUrl,
24
+ source,
25
+ },
26
+ },
27
+ ];
28
+ }
29
+ }
30
+ exports.Teams = Teams;
@@ -0,0 +1,8 @@
1
+ import { AirbyteRecord } from 'faros-airbyte-cdk';
2
+ import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
3
+ import { VictorOpsConverter } from './common';
4
+ export declare class Users extends VictorOpsConverter {
5
+ readonly destinationModels: ReadonlyArray<DestinationModel>;
6
+ id(record: AirbyteRecord): any;
7
+ convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
8
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Users = void 0;
4
+ const common_1 = require("./common");
5
+ class Users extends common_1.VictorOpsConverter {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.destinationModels = ['ims_User'];
9
+ }
10
+ id(record) {
11
+ var _a, _b;
12
+ return (_b = (_a = record === null || record === void 0 ? void 0 : record.record) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.username;
13
+ }
14
+ async convert(record, ctx) {
15
+ const source = this.streamName.source;
16
+ const user = record.record.data;
17
+ if (user.username.startsWith('invited')) {
18
+ return [];
19
+ }
20
+ return [
21
+ {
22
+ model: 'ims_User',
23
+ record: {
24
+ uid: user.username,
25
+ email: user.email,
26
+ name: user.displayName,
27
+ source,
28
+ },
29
+ },
30
+ ];
31
+ }
32
+ }
33
+ exports.Users = Users;