@budibase/server 1.3.19-alpha.1 → 1.3.19

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 (302) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.9ce4f8c5.css +6 -0
  3. package/builder/assets/index.a1f7532b.js +876 -0
  4. package/builder/assets/vendor.5e1fe644.css +1 -0
  5. package/builder/assets/vendor.67dbd8fa.js +248 -0
  6. package/builder/index.html +4 -2
  7. package/coverage/clover.xml +388 -441
  8. package/coverage/coverage-final.json +20 -20
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +11 -68
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +46 -46
  18. package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  28. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +12 -207
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +1 -1
  48. package/coverage/lcov-report/api/index.js.html +13 -13
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/index.html +1 -1
  60. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  71. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/utils/index.html +5 -5
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +6 -9
  75. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  77. package/coverage/lcov-report/automations/actions.js.html +1 -1
  78. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  79. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  80. package/coverage/lcov-report/automations/index.html +1 -1
  81. package/coverage/lcov-report/automations/index.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/index.html +1 -1
  89. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +1 -1
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  113. package/coverage/lcov-report/db/index.html +18 -18
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +2 -2
  120. package/coverage/lcov-report/db/utils.js.html +20 -56
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +37 -37
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  130. package/coverage/lcov-report/middleware/currentapp.js.html +40 -46
  131. package/coverage/lcov-report/middleware/index.html +15 -15
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  133. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  137. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  138. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  139. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  140. package/coverage/lcov-report/utilities/global.js.html +16 -16
  141. package/coverage/lcov-report/utilities/index.html +1 -1
  142. package/coverage/lcov-report/utilities/index.js.html +24 -24
  143. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  144. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  147. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +2 -2
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +1 -1
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  158. package/coverage/lcov.info +667 -780
  159. package/dist/api/controllers/application.js +5 -5
  160. package/dist/api/controllers/auth.js +0 -9
  161. package/dist/api/controllers/component.js +1 -14
  162. package/dist/api/controllers/datasource.js +8 -21
  163. package/dist/api/controllers/deploy/index.js +8 -1
  164. package/dist/api/controllers/integration.js +4 -4
  165. package/dist/api/controllers/row/external.js +1 -1
  166. package/dist/api/controllers/screen.js +2 -52
  167. package/dist/api/controllers/static/index.js +0 -1
  168. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  169. package/dist/api/controllers/static/templates/preview.hbs +1 -5
  170. package/dist/api/index.js +1 -1
  171. package/dist/api/routes/application.js +2 -3
  172. package/dist/api/routes/index.js +0 -2
  173. package/dist/api/routes/public/tables.js +1 -1
  174. package/dist/api/routes/table.js +1 -1
  175. package/dist/api/routes/utils/validators.js +1 -2
  176. package/dist/app.js +0 -11
  177. package/dist/db/utils.js +1 -10
  178. package/dist/environment.js +0 -1
  179. package/dist/integrations/airtable.js +129 -126
  180. package/dist/integrations/arangodb.js +89 -86
  181. package/dist/integrations/base/query.js +2 -2
  182. package/dist/integrations/base/sqlTable.js +1 -3
  183. package/dist/integrations/couchdb.js +83 -80
  184. package/dist/integrations/dynamodb.js +164 -161
  185. package/dist/integrations/elasticsearch.js +138 -135
  186. package/dist/integrations/firebase.js +157 -154
  187. package/dist/integrations/googlesheets.js +327 -323
  188. package/dist/integrations/index.js +51 -99
  189. package/dist/integrations/microsoftSqlServer.js +243 -240
  190. package/dist/integrations/mongodb.js +242 -239
  191. package/dist/integrations/mysql.js +219 -215
  192. package/dist/integrations/oracle.js +322 -318
  193. package/dist/integrations/postgres.js +265 -262
  194. package/dist/integrations/redis.js +139 -134
  195. package/dist/integrations/rest.js +292 -289
  196. package/dist/integrations/s3.js +64 -61
  197. package/dist/integrations/snowflake.js +86 -83
  198. package/dist/middleware/currentapp.js +0 -2
  199. package/dist/migrations/functions/backfill/global.js +3 -0
  200. package/dist/migrations/functions/developerQuota.js +49 -0
  201. package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
  202. package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
  203. package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
  204. package/dist/migrations/index.js +10 -0
  205. package/dist/package.json +6 -9
  206. package/dist/tests/utilities/TestConfiguration.js +1 -1
  207. package/dist/threads/query.js +2 -2
  208. package/dist/tsconfig.build.tsbuildinfo +1 -1
  209. package/dist/utilities/fileSystem/index.js +1 -110
  210. package/package.json +7 -10
  211. package/scripts/dev/manage.js +0 -1
  212. package/scripts/localdomain.js +1 -3
  213. package/specs/openapi.json +3 -3
  214. package/specs/openapi.yaml +3 -3
  215. package/specs/resources/query.js +1 -1
  216. package/src/api/controllers/application.ts +2 -1
  217. package/src/api/controllers/auth.js +0 -11
  218. package/src/api/controllers/component.js +2 -21
  219. package/src/api/controllers/datasource.js +8 -21
  220. package/src/api/controllers/deploy/index.ts +6 -1
  221. package/src/api/controllers/integration.js +4 -4
  222. package/src/api/controllers/row/external.js +1 -1
  223. package/src/api/controllers/screen.js +1 -66
  224. package/src/api/controllers/static/index.ts +1 -1
  225. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  226. package/src/api/controllers/static/templates/preview.hbs +1 -5
  227. package/src/api/index.js +1 -1
  228. package/src/api/routes/application.ts +2 -13
  229. package/src/api/routes/index.ts +0 -2
  230. package/src/api/routes/public/tables.ts +1 -1
  231. package/src/api/routes/table.js +1 -1
  232. package/src/api/routes/tests/query.spec.js +25 -8
  233. package/src/api/routes/tests/user.spec.js +2 -0
  234. package/src/api/routes/utils/validators.js +1 -2
  235. package/src/app.ts +0 -14
  236. package/src/db/utils.js +0 -12
  237. package/src/definitions/openapi.ts +3 -3
  238. package/src/environment.js +0 -1
  239. package/src/integrations/airtable.ts +118 -116
  240. package/src/integrations/arangodb.ts +89 -87
  241. package/src/integrations/base/query.ts +2 -2
  242. package/src/integrations/base/sqlTable.ts +1 -3
  243. package/src/integrations/couchdb.ts +89 -83
  244. package/src/integrations/dynamodb.ts +175 -173
  245. package/src/integrations/elasticsearch.ts +122 -120
  246. package/src/integrations/firebase.ts +159 -157
  247. package/src/integrations/googlesheets.ts +338 -328
  248. package/src/integrations/index.ts +21 -64
  249. package/src/integrations/microsoftSqlServer.ts +251 -249
  250. package/src/integrations/mongodb.ts +258 -261
  251. package/src/integrations/mysql.ts +234 -229
  252. package/src/integrations/oracle.ts +380 -373
  253. package/src/integrations/postgres.ts +268 -264
  254. package/src/integrations/redis.ts +132 -128
  255. package/src/integrations/rest.ts +329 -324
  256. package/src/integrations/s3.ts +71 -68
  257. package/src/integrations/snowflake.ts +82 -80
  258. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  259. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  260. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  261. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  262. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  263. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  264. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  265. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  266. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  267. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  268. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  269. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  270. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  271. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  272. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  273. package/src/middleware/currentapp.js +0 -2
  274. package/src/migrations/functions/backfill/global.ts +3 -0
  275. package/src/migrations/functions/developerQuota.ts +15 -0
  276. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  277. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  278. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  279. package/src/migrations/index.ts +16 -0
  280. package/src/module.d.ts +0 -2
  281. package/src/tests/utilities/TestConfiguration.js +1 -1
  282. package/src/threads/query.ts +2 -2
  283. package/src/utilities/fileSystem/index.js +0 -129
  284. package/builder/assets/index.1709d1b3.js +0 -1005
  285. package/builder/assets/index.8f621053.css +0 -6
  286. package/dist/api/controllers/plugin/github.js +0 -69
  287. package/dist/api/controllers/plugin/index.js +0 -200
  288. package/dist/api/controllers/plugin/npm.js +0 -58
  289. package/dist/api/controllers/plugin/uploaders.js +0 -11
  290. package/dist/api/controllers/plugin/utils.js +0 -26
  291. package/dist/watch.js +0 -77
  292. package/dist/websocket.js +0 -22
  293. package/src/api/controllers/plugin/file.ts +0 -15
  294. package/src/api/controllers/plugin/github.ts +0 -75
  295. package/src/api/controllers/plugin/index.ts +0 -215
  296. package/src/api/controllers/plugin/npm.ts +0 -56
  297. package/src/api/controllers/plugin/uploaders.ts +0 -4
  298. package/src/api/controllers/plugin/url.ts +0 -12
  299. package/src/api/controllers/plugin/utils.ts +0 -19
  300. package/src/api/routes/plugin.ts +0 -14
  301. package/src/watch.ts +0 -38
  302. package/src/websocket.ts +0 -26
@@ -16,11 +16,6 @@ const types_1 = require("@budibase/types");
16
16
  const datasource_1 = require("../definitions/datasource");
17
17
  const lodash_1 = require("lodash");
18
18
  const querystring_1 = __importDefault(require("querystring"));
19
- const fetch = require("node-fetch");
20
- const { formatBytes } = require("../utilities");
21
- const { performance } = require("perf_hooks");
22
- const FormData = require("form-data");
23
- const { URLSearchParams } = require("url");
24
19
  const BodyTypes = {
25
20
  NONE: "none",
26
21
  FORM_DATA: "form",
@@ -54,308 +49,316 @@ const coreFields = {
54
49
  type: types_1.DatasourceFieldType.OBJECT,
55
50
  },
56
51
  };
57
- const { parseStringPromise: xmlParser, Builder: XmlBuilder } = require("xml2js");
58
- const SCHEMA = {
59
- docs: "https://github.com/node-fetch/node-fetch",
60
- description: "With the REST API datasource, you can connect, query and pull data from multiple REST APIs. You can then use the retrieved data to build apps.",
61
- friendlyName: "REST API",
62
- type: "API",
63
- datasource: {
64
- url: {
65
- type: types_1.DatasourceFieldType.STRING,
66
- default: "",
67
- required: false,
68
- deprecated: true,
52
+ var RestModule;
53
+ (function (RestModule) {
54
+ const fetch = require("node-fetch");
55
+ const { formatBytes } = require("../utilities");
56
+ const { performance } = require("perf_hooks");
57
+ const FormData = require("form-data");
58
+ const { URLSearchParams } = require("url");
59
+ const { parseStringPromise: xmlParser, Builder: XmlBuilder, } = require("xml2js");
60
+ const SCHEMA = {
61
+ docs: "https://github.com/node-fetch/node-fetch",
62
+ description: "With the REST API datasource, you can connect, query and pull data from multiple REST APIs. You can then use the retrieved data to build apps.",
63
+ friendlyName: "REST API",
64
+ type: "API",
65
+ datasource: {
66
+ url: {
67
+ type: types_1.DatasourceFieldType.STRING,
68
+ default: "",
69
+ required: false,
70
+ deprecated: true,
71
+ },
72
+ defaultHeaders: {
73
+ type: types_1.DatasourceFieldType.OBJECT,
74
+ required: false,
75
+ default: {},
76
+ },
77
+ legacyHttpParser: {
78
+ display: "Legacy HTTP Support",
79
+ type: types_1.DatasourceFieldType.BOOLEAN,
80
+ required: false,
81
+ default: false,
82
+ },
69
83
  },
70
- defaultHeaders: {
71
- type: types_1.DatasourceFieldType.OBJECT,
72
- required: false,
73
- default: {},
84
+ query: {
85
+ create: {
86
+ readable: true,
87
+ displayName: "POST",
88
+ type: types_1.QueryType.FIELDS,
89
+ fields: coreFields,
90
+ },
91
+ read: {
92
+ displayName: "GET",
93
+ readable: true,
94
+ type: types_1.QueryType.FIELDS,
95
+ fields: coreFields,
96
+ },
97
+ update: {
98
+ displayName: "PUT",
99
+ readable: true,
100
+ type: types_1.QueryType.FIELDS,
101
+ fields: coreFields,
102
+ },
103
+ patch: {
104
+ displayName: "PATCH",
105
+ readable: true,
106
+ type: types_1.QueryType.FIELDS,
107
+ fields: coreFields,
108
+ },
109
+ delete: {
110
+ displayName: "DELETE",
111
+ type: types_1.QueryType.FIELDS,
112
+ fields: coreFields,
113
+ },
74
114
  },
75
- legacyHttpParser: {
76
- display: "Legacy HTTP Support",
77
- type: types_1.DatasourceFieldType.BOOLEAN,
78
- required: false,
79
- default: false,
80
- },
81
- },
82
- query: {
83
- create: {
84
- readable: true,
85
- displayName: "POST",
86
- type: types_1.QueryType.FIELDS,
87
- fields: coreFields,
88
- },
89
- read: {
90
- displayName: "GET",
91
- readable: true,
92
- type: types_1.QueryType.FIELDS,
93
- fields: coreFields,
94
- },
95
- update: {
96
- displayName: "PUT",
97
- readable: true,
98
- type: types_1.QueryType.FIELDS,
99
- fields: coreFields,
100
- },
101
- patch: {
102
- displayName: "PATCH",
103
- readable: true,
104
- type: types_1.QueryType.FIELDS,
105
- fields: coreFields,
106
- },
107
- delete: {
108
- displayName: "DELETE",
109
- type: types_1.QueryType.FIELDS,
110
- fields: coreFields,
111
- },
112
- },
113
- };
114
- class RestIntegration {
115
- constructor(config) {
116
- this.headers = {};
117
- this.startTimeMs = performance.now();
118
- this.config = config;
119
- }
120
- parseResponse(response, pagination) {
121
- return __awaiter(this, void 0, void 0, function* () {
122
- let data, raw, headers;
123
- const contentType = response.headers.get("content-type") || "";
124
- try {
125
- if (contentType.includes("application/json")) {
126
- data = yield response.json();
127
- raw = JSON.stringify(data);
128
- }
129
- else if (contentType.includes("text/xml") ||
130
- contentType.includes("application/xml")) {
131
- const rawXml = yield response.text();
132
- data =
133
- (yield xmlParser(rawXml, {
134
- explicitArray: false,
135
- trim: true,
136
- explicitRoot: false,
137
- })) || {};
138
- // there is only one structure, its an array, return the array so it appears as rows
139
- const keys = Object.keys(data);
140
- if (keys.length === 1 && Array.isArray(data[keys[0]])) {
141
- data = data[keys[0]];
115
+ };
116
+ class RestIntegration {
117
+ constructor(config) {
118
+ this.headers = {};
119
+ this.startTimeMs = performance.now();
120
+ this.config = config;
121
+ }
122
+ parseResponse(response, pagination) {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ let data, raw, headers;
125
+ const contentType = response.headers.get("content-type") || "";
126
+ try {
127
+ if (contentType.includes("application/json")) {
128
+ data = yield response.json();
129
+ raw = JSON.stringify(data);
130
+ }
131
+ else if (contentType.includes("text/xml") ||
132
+ contentType.includes("application/xml")) {
133
+ const rawXml = yield response.text();
134
+ data =
135
+ (yield xmlParser(rawXml, {
136
+ explicitArray: false,
137
+ trim: true,
138
+ explicitRoot: false,
139
+ })) || {};
140
+ // there is only one structure, its an array, return the array so it appears as rows
141
+ const keys = Object.keys(data);
142
+ if (keys.length === 1 && Array.isArray(data[keys[0]])) {
143
+ data = data[keys[0]];
144
+ }
145
+ raw = rawXml;
146
+ }
147
+ else {
148
+ data = yield response.text();
149
+ raw = data;
142
150
  }
143
- raw = rawXml;
144
151
  }
145
- else {
146
- data = yield response.text();
147
- raw = data;
152
+ catch (err) {
153
+ throw "Failed to parse response body.";
154
+ }
155
+ const size = formatBytes(response.headers.get("content-length") || Buffer.byteLength(raw, "utf8"));
156
+ const time = `${Math.round(performance.now() - this.startTimeMs)}ms`;
157
+ headers = response.headers.raw();
158
+ for (let [key, value] of Object.entries(headers)) {
159
+ headers[key] = Array.isArray(value) ? value[0] : value;
160
+ }
161
+ // Check if a pagination cursor exists in the response
162
+ let nextCursor = null;
163
+ if (pagination === null || pagination === void 0 ? void 0 : pagination.responseParam) {
164
+ nextCursor = (0, lodash_1.get)(data, pagination.responseParam);
165
+ }
166
+ return {
167
+ data,
168
+ info: {
169
+ code: response.status,
170
+ size,
171
+ time,
172
+ },
173
+ extra: {
174
+ raw,
175
+ headers,
176
+ },
177
+ pagination: {
178
+ cursor: nextCursor,
179
+ },
180
+ };
181
+ });
182
+ }
183
+ getUrl(path, queryString, pagination, paginationValues) {
184
+ // Add pagination params to query string if required
185
+ if ((pagination === null || pagination === void 0 ? void 0 : pagination.location) === "query" && paginationValues) {
186
+ const { pageParam, sizeParam } = pagination;
187
+ const params = new URLSearchParams();
188
+ // Append page number or cursor param if configured
189
+ if (pageParam && paginationValues.page != null) {
190
+ params.append(pageParam, paginationValues.page);
191
+ }
192
+ // Append page size param if configured
193
+ if (sizeParam && paginationValues.limit != null) {
194
+ params.append(sizeParam, paginationValues.limit);
195
+ }
196
+ // Prepend query string with pagination params
197
+ let paginationString = params.toString();
198
+ if (paginationString) {
199
+ queryString = `${paginationString}&${queryString}`;
148
200
  }
149
201
  }
150
- catch (err) {
151
- throw "Failed to parse response body.";
152
- }
153
- const size = formatBytes(response.headers.get("content-length") || Buffer.byteLength(raw, "utf8"));
154
- const time = `${Math.round(performance.now() - this.startTimeMs)}ms`;
155
- headers = response.headers.raw();
156
- for (let [key, value] of Object.entries(headers)) {
157
- headers[key] = Array.isArray(value) ? value[0] : value;
202
+ // make sure the query string is fully encoded
203
+ const main = `${path}?${querystring_1.default.encode(querystring_1.default.decode(queryString))}`;
204
+ let complete = main;
205
+ if (this.config.url && !main.startsWith("http")) {
206
+ complete = !this.config.url ? main : `${this.config.url}/${main}`;
158
207
  }
159
- // Check if a pagination cursor exists in the response
160
- let nextCursor = null;
161
- if (pagination === null || pagination === void 0 ? void 0 : pagination.responseParam) {
162
- nextCursor = (0, lodash_1.get)(data, pagination.responseParam);
208
+ if (!complete.startsWith("http")) {
209
+ complete = `http://${complete}`;
163
210
  }
164
- return {
165
- data,
166
- info: {
167
- code: response.status,
168
- size,
169
- time,
170
- },
171
- extra: {
172
- raw,
173
- headers,
174
- },
175
- pagination: {
176
- cursor: nextCursor,
177
- },
178
- };
179
- });
180
- }
181
- getUrl(path, queryString, pagination, paginationValues) {
182
- // Add pagination params to query string if required
183
- if ((pagination === null || pagination === void 0 ? void 0 : pagination.location) === "query" && paginationValues) {
184
- const { pageParam, sizeParam } = pagination;
185
- const params = new URLSearchParams();
186
- // Append page number or cursor param if configured
187
- if (pageParam && paginationValues.page != null) {
188
- params.append(pageParam, paginationValues.page);
211
+ return complete;
212
+ }
213
+ addBody(bodyType, body, input, pagination, paginationValues) {
214
+ if (!input.headers) {
215
+ input.headers = {};
189
216
  }
190
- // Append page size param if configured
191
- if (sizeParam && paginationValues.limit != null) {
192
- params.append(sizeParam, paginationValues.limit);
217
+ if (bodyType === BodyTypes.NONE) {
218
+ return input;
193
219
  }
194
- // Prepend query string with pagination params
195
- let paginationString = params.toString();
196
- if (paginationString) {
197
- queryString = `${paginationString}&${queryString}`;
220
+ let error, object = {}, string = "";
221
+ try {
222
+ if (body) {
223
+ string = typeof body !== "string" ? JSON.stringify(body) : body;
224
+ object = typeof body === "object" ? body : JSON.parse(body);
225
+ }
198
226
  }
199
- }
200
- // make sure the query string is fully encoded
201
- const main = `${path}?${querystring_1.default.encode(querystring_1.default.decode(queryString))}`;
202
- let complete = main;
203
- if (this.config.url && !main.startsWith("http")) {
204
- complete = !this.config.url ? main : `${this.config.url}/${main}`;
205
- }
206
- if (!complete.startsWith("http")) {
207
- complete = `http://${complete}`;
208
- }
209
- return complete;
210
- }
211
- addBody(bodyType, body, input, pagination, paginationValues) {
212
- if (!input.headers) {
213
- input.headers = {};
214
- }
215
- if (bodyType === BodyTypes.NONE) {
216
- return input;
217
- }
218
- let error, object = {}, string = "";
219
- try {
220
- if (body) {
221
- string = typeof body !== "string" ? JSON.stringify(body) : body;
222
- object = typeof body === "object" ? body : JSON.parse(body);
227
+ catch (err) {
228
+ error = err;
223
229
  }
224
- }
225
- catch (err) {
226
- error = err;
227
- }
228
- // Util to add pagination values to a certain body type
229
- const addPaginationToBody = (insertFn) => {
230
- if ((pagination === null || pagination === void 0 ? void 0 : pagination.location) === "body") {
231
- if ((pagination === null || pagination === void 0 ? void 0 : pagination.pageParam) && (paginationValues === null || paginationValues === void 0 ? void 0 : paginationValues.page) != null) {
232
- insertFn(pagination.pageParam, paginationValues.page);
233
- }
234
- if ((pagination === null || pagination === void 0 ? void 0 : pagination.sizeParam) && (paginationValues === null || paginationValues === void 0 ? void 0 : paginationValues.limit) != null) {
235
- insertFn(pagination.sizeParam, paginationValues.limit);
230
+ // Util to add pagination values to a certain body type
231
+ const addPaginationToBody = (insertFn) => {
232
+ if ((pagination === null || pagination === void 0 ? void 0 : pagination.location) === "body") {
233
+ if ((pagination === null || pagination === void 0 ? void 0 : pagination.pageParam) && (paginationValues === null || paginationValues === void 0 ? void 0 : paginationValues.page) != null) {
234
+ insertFn(pagination.pageParam, paginationValues.page);
235
+ }
236
+ if ((pagination === null || pagination === void 0 ? void 0 : pagination.sizeParam) && (paginationValues === null || paginationValues === void 0 ? void 0 : paginationValues.limit) != null) {
237
+ insertFn(pagination.sizeParam, paginationValues.limit);
238
+ }
236
239
  }
240
+ };
241
+ switch (bodyType) {
242
+ case BodyTypes.TEXT:
243
+ // content type defaults to plaintext
244
+ input.body = string;
245
+ break;
246
+ case BodyTypes.ENCODED:
247
+ const params = new URLSearchParams();
248
+ for (let [key, value] of Object.entries(object)) {
249
+ params.append(key, value);
250
+ }
251
+ addPaginationToBody((key, value) => {
252
+ params.append(key, value);
253
+ });
254
+ input.body = params;
255
+ break;
256
+ case BodyTypes.FORM_DATA:
257
+ const form = new FormData();
258
+ for (let [key, value] of Object.entries(object)) {
259
+ form.append(key, value);
260
+ }
261
+ addPaginationToBody((key, value) => {
262
+ form.append(key, value);
263
+ });
264
+ input.body = form;
265
+ break;
266
+ case BodyTypes.XML:
267
+ if (object != null && Object.keys(object).length) {
268
+ string = new XmlBuilder().buildObject(object);
269
+ }
270
+ input.body = string;
271
+ input.headers["Content-Type"] = "application/xml";
272
+ break;
273
+ case BodyTypes.JSON:
274
+ // if JSON error, throw it
275
+ if (error) {
276
+ throw "Invalid JSON for request body";
277
+ }
278
+ addPaginationToBody((key, value) => {
279
+ object[key] = value;
280
+ });
281
+ input.body = JSON.stringify(object);
282
+ input.headers["Content-Type"] = "application/json";
283
+ break;
237
284
  }
238
- };
239
- switch (bodyType) {
240
- case BodyTypes.TEXT:
241
- // content type defaults to plaintext
242
- input.body = string;
243
- break;
244
- case BodyTypes.ENCODED:
245
- const params = new URLSearchParams();
246
- for (let [key, value] of Object.entries(object)) {
247
- params.append(key, value);
248
- }
249
- addPaginationToBody((key, value) => {
250
- params.append(key, value);
251
- });
252
- input.body = params;
253
- break;
254
- case BodyTypes.FORM_DATA:
255
- const form = new FormData();
256
- for (let [key, value] of Object.entries(object)) {
257
- form.append(key, value);
258
- }
259
- addPaginationToBody((key, value) => {
260
- form.append(key, value);
261
- });
262
- input.body = form;
263
- break;
264
- case BodyTypes.XML:
265
- if (object != null && Object.keys(object).length) {
266
- string = new XmlBuilder().buildObject(object);
267
- }
268
- input.body = string;
269
- input.headers["Content-Type"] = "application/xml";
270
- break;
271
- case BodyTypes.JSON:
272
- // if JSON error, throw it
273
- if (error) {
274
- throw "Invalid JSON for request body";
275
- }
276
- addPaginationToBody((key, value) => {
277
- object[key] = value;
278
- });
279
- input.body = JSON.stringify(object);
280
- input.headers["Content-Type"] = "application/json";
281
- break;
285
+ return input;
282
286
  }
283
- return input;
284
- }
285
- getAuthHeaders(authConfigId) {
286
- let headers = {};
287
- if (this.config.authConfigs && authConfigId) {
288
- const authConfig = this.config.authConfigs.filter(c => c._id === authConfigId)[0];
289
- // check the config still exists before proceeding
290
- // if not - do nothing
291
- if (authConfig) {
292
- let config;
293
- switch (authConfig.type) {
294
- case datasource_1.AuthType.BASIC:
295
- config = authConfig.config;
296
- headers.Authorization = `Basic ${Buffer.from(`${config.username}:${config.password}`).toString("base64")}`;
297
- break;
298
- case datasource_1.AuthType.BEARER:
299
- config = authConfig.config;
300
- headers.Authorization = `Bearer ${config.token}`;
301
- break;
287
+ getAuthHeaders(authConfigId) {
288
+ let headers = {};
289
+ if (this.config.authConfigs && authConfigId) {
290
+ const authConfig = this.config.authConfigs.filter(c => c._id === authConfigId)[0];
291
+ // check the config still exists before proceeding
292
+ // if not - do nothing
293
+ if (authConfig) {
294
+ let config;
295
+ switch (authConfig.type) {
296
+ case datasource_1.AuthType.BASIC:
297
+ config = authConfig.config;
298
+ headers.Authorization = `Basic ${Buffer.from(`${config.username}:${config.password}`).toString("base64")}`;
299
+ break;
300
+ case datasource_1.AuthType.BEARER:
301
+ config = authConfig.config;
302
+ headers.Authorization = `Bearer ${config.token}`;
303
+ break;
304
+ }
302
305
  }
303
306
  }
307
+ return headers;
304
308
  }
305
- return headers;
306
- }
307
- _req(query) {
308
- return __awaiter(this, void 0, void 0, function* () {
309
- const { path = "", queryString = "", headers = {}, method = "GET", disabledHeaders, bodyType, requestBody, authConfigId, pagination, paginationValues, } = query;
310
- const authHeaders = this.getAuthHeaders(authConfigId);
311
- this.headers = Object.assign(Object.assign(Object.assign({}, this.config.defaultHeaders), headers), authHeaders);
312
- if (disabledHeaders) {
313
- for (let headerKey of Object.keys(this.headers)) {
314
- if (disabledHeaders[headerKey]) {
315
- delete this.headers[headerKey];
309
+ _req(query) {
310
+ return __awaiter(this, void 0, void 0, function* () {
311
+ const { path = "", queryString = "", headers = {}, method = "GET", disabledHeaders, bodyType, requestBody, authConfigId, pagination, paginationValues, } = query;
312
+ const authHeaders = this.getAuthHeaders(authConfigId);
313
+ this.headers = Object.assign(Object.assign(Object.assign({}, this.config.defaultHeaders), headers), authHeaders);
314
+ if (disabledHeaders) {
315
+ for (let headerKey of Object.keys(this.headers)) {
316
+ if (disabledHeaders[headerKey]) {
317
+ delete this.headers[headerKey];
318
+ }
316
319
  }
317
320
  }
318
- }
319
- let input = { method, headers: this.headers };
320
- input = this.addBody(bodyType, requestBody, input, pagination, paginationValues);
321
- if (this.config.legacyHttpParser) {
322
- // https://github.com/nodejs/node/issues/43798
323
- input.extraHttpOptions = { insecureHTTPParser: true };
324
- }
325
- this.startTimeMs = performance.now();
326
- const url = this.getUrl(path, queryString, pagination, paginationValues);
327
- const response = yield fetch(url, input);
328
- return yield this.parseResponse(response, pagination);
329
- });
330
- }
331
- create(opts) {
332
- return __awaiter(this, void 0, void 0, function* () {
333
- return this._req(Object.assign(Object.assign({}, opts), { method: "POST" }));
334
- });
335
- }
336
- read(opts) {
337
- return __awaiter(this, void 0, void 0, function* () {
338
- return this._req(Object.assign(Object.assign({}, opts), { method: "GET" }));
339
- });
340
- }
341
- update(opts) {
342
- return __awaiter(this, void 0, void 0, function* () {
343
- return this._req(Object.assign(Object.assign({}, opts), { method: "PUT" }));
344
- });
345
- }
346
- patch(opts) {
347
- return __awaiter(this, void 0, void 0, function* () {
348
- return this._req(Object.assign(Object.assign({}, opts), { method: "PATCH" }));
349
- });
350
- }
351
- delete(opts) {
352
- return __awaiter(this, void 0, void 0, function* () {
353
- return this._req(Object.assign(Object.assign({}, opts), { method: "DELETE" }));
354
- });
321
+ let input = { method, headers: this.headers };
322
+ input = this.addBody(bodyType, requestBody, input, pagination, paginationValues);
323
+ if (this.config.legacyHttpParser) {
324
+ // https://github.com/nodejs/node/issues/43798
325
+ input.extraHttpOptions = { insecureHTTPParser: true };
326
+ }
327
+ this.startTimeMs = performance.now();
328
+ const url = this.getUrl(path, queryString, pagination, paginationValues);
329
+ const response = yield fetch(url, input);
330
+ return yield this.parseResponse(response, pagination);
331
+ });
332
+ }
333
+ create(opts) {
334
+ return __awaiter(this, void 0, void 0, function* () {
335
+ return this._req(Object.assign(Object.assign({}, opts), { method: "POST" }));
336
+ });
337
+ }
338
+ read(opts) {
339
+ return __awaiter(this, void 0, void 0, function* () {
340
+ return this._req(Object.assign(Object.assign({}, opts), { method: "GET" }));
341
+ });
342
+ }
343
+ update(opts) {
344
+ return __awaiter(this, void 0, void 0, function* () {
345
+ return this._req(Object.assign(Object.assign({}, opts), { method: "PUT" }));
346
+ });
347
+ }
348
+ patch(opts) {
349
+ return __awaiter(this, void 0, void 0, function* () {
350
+ return this._req(Object.assign(Object.assign({}, opts), { method: "PATCH" }));
351
+ });
352
+ }
353
+ delete(opts) {
354
+ return __awaiter(this, void 0, void 0, function* () {
355
+ return this._req(Object.assign(Object.assign({}, opts), { method: "DELETE" }));
356
+ });
357
+ }
355
358
  }
356
- }
357
- exports.default = {
358
- schema: SCHEMA,
359
- integration: RestIntegration,
360
- AuthType: datasource_1.AuthType,
361
- };
359
+ module.exports = {
360
+ schema: SCHEMA,
361
+ integration: RestIntegration,
362
+ AuthType: datasource_1.AuthType,
363
+ };
364
+ })(RestModule || (RestModule = {}));