You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

159 lines
4.4 KiB

11 months ago
  1. const { setDataSigner } = require("../middleware/setDataSigner");
  2. const { verifyPayloadIntegrity } = require("../middleware/verifyIntegrity");
  3. const { resolveRepoLoader, resolveRepoLoaderFunction } = require("../utils/extensions/RepoLoader");
  4. const { reqBody } = require("../utils/http");
  5. const { validURL } = require("../utils/url");
  6. const RESYNC_METHODS = require("./resync");
  7. function extensions(app) {
  8. if (!app) return;
  9. app.post(
  10. "/ext/resync-source-document",
  11. [verifyPayloadIntegrity, setDataSigner],
  12. async function (request, response) {
  13. try {
  14. const { type, options } = reqBody(request);
  15. if (!RESYNC_METHODS.hasOwnProperty(type)) throw new Error(`Type "${type}" is not a valid type to sync.`);
  16. return await RESYNC_METHODS[type](options, response);
  17. } catch (e) {
  18. console.error(e);
  19. response.status(200).json({
  20. success: false,
  21. content: null,
  22. reason: e.message || "A processing error occurred.",
  23. });
  24. }
  25. return;
  26. }
  27. )
  28. app.post(
  29. "/ext/:repo_platform-repo",
  30. [verifyPayloadIntegrity, setDataSigner],
  31. async function (request, response) {
  32. try {
  33. const loadRepo = resolveRepoLoaderFunction(request.params.repo_platform);
  34. const { success, reason, data } = await loadRepo(
  35. reqBody(request),
  36. response,
  37. );
  38. response.status(200).json({
  39. success,
  40. reason,
  41. data,
  42. });
  43. } catch (e) {
  44. console.error(e);
  45. response.status(200).json({
  46. success: false,
  47. reason: e.message || "A processing error occurred.",
  48. data: {},
  49. });
  50. }
  51. return;
  52. }
  53. );
  54. // gets all branches for a specific repo
  55. app.post(
  56. "/ext/:repo_platform-repo/branches",
  57. [verifyPayloadIntegrity],
  58. async function (request, response) {
  59. try {
  60. const RepoLoader = resolveRepoLoader(request.params.repo_platform);
  61. const allBranches = await new RepoLoader(
  62. reqBody(request)
  63. ).getRepoBranches();
  64. response.status(200).json({
  65. success: true,
  66. reason: null,
  67. data: {
  68. branches: allBranches,
  69. },
  70. });
  71. } catch (e) {
  72. console.error(e);
  73. response.status(400).json({
  74. success: false,
  75. reason: e.message,
  76. data: {
  77. branches: [],
  78. },
  79. });
  80. }
  81. return;
  82. }
  83. );
  84. app.post(
  85. "/ext/youtube-transcript",
  86. [verifyPayloadIntegrity],
  87. async function (request, response) {
  88. try {
  89. const { loadYouTubeTranscript } = require("../utils/extensions/YoutubeTranscript");
  90. const { success, reason, data } = await loadYouTubeTranscript(
  91. reqBody(request)
  92. );
  93. response.status(200).json({ success, reason, data });
  94. } catch (e) {
  95. console.error(e);
  96. response.status(400).json({
  97. success: false,
  98. reason: e.message,
  99. data: {
  100. title: null,
  101. author: null,
  102. },
  103. });
  104. }
  105. return;
  106. }
  107. );
  108. app.post(
  109. "/ext/website-depth",
  110. [verifyPayloadIntegrity],
  111. async function (request, response) {
  112. try {
  113. const websiteDepth = require("../utils/extensions/WebsiteDepth");
  114. const { url, depth = 1, maxLinks = 20 } = reqBody(request);
  115. if (!validURL(url)) throw new Error("Not a valid URL.");
  116. const scrapedData = await websiteDepth(url, depth, maxLinks);
  117. response.status(200).json({ success: true, data: scrapedData });
  118. } catch (e) {
  119. console.error(e);
  120. response.status(400).json({ success: false, reason: e.message });
  121. }
  122. return;
  123. }
  124. );
  125. app.post(
  126. "/ext/confluence",
  127. [verifyPayloadIntegrity, setDataSigner],
  128. async function (request, response) {
  129. try {
  130. const { loadConfluence } = require("../utils/extensions/Confluence");
  131. const { success, reason, data } = await loadConfluence(
  132. reqBody(request),
  133. response
  134. );
  135. response.status(200).json({ success, reason, data });
  136. } catch (e) {
  137. console.error(e);
  138. response.status(400).json({
  139. success: false,
  140. reason: e.message,
  141. data: {
  142. title: null,
  143. author: null,
  144. },
  145. });
  146. }
  147. return;
  148. }
  149. );
  150. }
  151. module.exports = extensions;