@budibase/server 1.3.21-alpha.1 → 1.3.21

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 (308) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.8d12d461.css +6 -0
  3. package/builder/assets/index.d354271c.js +879 -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 +390 -451
  8. package/coverage/coverage-final.json +21 -21
  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 +9 -9
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +12 -75
  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 +46 -46
  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 +15 -15
  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 +8 -32
  158. package/coverage/lcov.info +672 -798
  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/rows.js +82 -1
  174. package/dist/api/routes/public/tables.js +1 -1
  175. package/dist/api/routes/table.js +1 -1
  176. package/dist/api/routes/utils/validators.js +2 -20
  177. package/dist/app.js +1 -16
  178. package/dist/db/utils.js +1 -10
  179. package/dist/environment.js +0 -1
  180. package/dist/integrations/airtable.js +129 -126
  181. package/dist/integrations/arangodb.js +89 -86
  182. package/dist/integrations/base/query.js +2 -2
  183. package/dist/integrations/base/sqlTable.js +1 -3
  184. package/dist/integrations/couchdb.js +83 -80
  185. package/dist/integrations/dynamodb.js +164 -161
  186. package/dist/integrations/elasticsearch.js +138 -135
  187. package/dist/integrations/firebase.js +157 -154
  188. package/dist/integrations/googlesheets.js +327 -323
  189. package/dist/integrations/index.js +51 -99
  190. package/dist/integrations/microsoftSqlServer.js +243 -240
  191. package/dist/integrations/mongodb.js +242 -239
  192. package/dist/integrations/mysql.js +219 -215
  193. package/dist/integrations/oracle.js +322 -318
  194. package/dist/integrations/postgres.js +265 -262
  195. package/dist/integrations/redis.js +139 -134
  196. package/dist/integrations/rest.js +292 -289
  197. package/dist/integrations/s3.js +64 -61
  198. package/dist/integrations/snowflake.js +86 -83
  199. package/dist/middleware/currentapp.js +0 -2
  200. package/dist/migrations/functions/backfill/global.js +3 -0
  201. package/dist/migrations/functions/developerQuota.js +49 -0
  202. package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
  203. package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
  204. package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
  205. package/dist/migrations/index.js +10 -0
  206. package/dist/package.json +6 -9
  207. package/dist/tests/utilities/TestConfiguration.js +1 -1
  208. package/dist/threads/query.js +2 -2
  209. package/dist/tsconfig.build.tsbuildinfo +1 -1
  210. package/dist/utilities/fileSystem/index.js +1 -111
  211. package/dist/utilities/workerRequests.js +0 -4
  212. package/package.json +7 -10
  213. package/scripts/dev/manage.js +0 -4
  214. package/scripts/localdomain.js +1 -3
  215. package/specs/openapi.json +112 -115
  216. package/specs/openapi.yaml +94 -96
  217. package/specs/resources/misc.js +0 -116
  218. package/specs/resources/query.js +1 -1
  219. package/src/api/controllers/application.ts +2 -1
  220. package/src/api/controllers/auth.js +0 -11
  221. package/src/api/controllers/component.js +2 -21
  222. package/src/api/controllers/datasource.js +8 -21
  223. package/src/api/controllers/deploy/index.ts +6 -1
  224. package/src/api/controllers/integration.js +4 -4
  225. package/src/api/controllers/public/mapping/types.ts +0 -8
  226. package/src/api/controllers/row/external.js +1 -1
  227. package/src/api/controllers/screen.js +1 -66
  228. package/src/api/controllers/static/index.ts +1 -1
  229. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  230. package/src/api/controllers/static/templates/preview.hbs +1 -5
  231. package/src/api/index.js +1 -1
  232. package/src/api/routes/application.ts +2 -13
  233. package/src/api/routes/index.ts +0 -2
  234. package/src/api/routes/public/rows.ts +82 -1
  235. package/src/api/routes/public/tables.ts +1 -1
  236. package/src/api/routes/table.js +1 -1
  237. package/src/api/routes/tests/query.spec.js +25 -8
  238. package/src/api/routes/tests/user.spec.js +2 -0
  239. package/src/api/routes/utils/validators.js +5 -26
  240. package/src/app.ts +2 -25
  241. package/src/db/utils.js +0 -12
  242. package/src/definitions/openapi.ts +55 -56
  243. package/src/environment.js +0 -1
  244. package/src/integrations/airtable.ts +118 -116
  245. package/src/integrations/arangodb.ts +89 -87
  246. package/src/integrations/base/query.ts +2 -2
  247. package/src/integrations/base/sqlTable.ts +1 -3
  248. package/src/integrations/couchdb.ts +89 -83
  249. package/src/integrations/dynamodb.ts +175 -173
  250. package/src/integrations/elasticsearch.ts +122 -120
  251. package/src/integrations/firebase.ts +159 -157
  252. package/src/integrations/googlesheets.ts +338 -328
  253. package/src/integrations/index.ts +21 -64
  254. package/src/integrations/microsoftSqlServer.ts +251 -249
  255. package/src/integrations/mongodb.ts +258 -261
  256. package/src/integrations/mysql.ts +234 -229
  257. package/src/integrations/oracle.ts +380 -373
  258. package/src/integrations/postgres.ts +268 -264
  259. package/src/integrations/redis.ts +132 -128
  260. package/src/integrations/rest.ts +329 -324
  261. package/src/integrations/s3.ts +71 -68
  262. package/src/integrations/snowflake.ts +82 -80
  263. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  264. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  265. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  266. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  267. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  268. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  269. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  270. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  271. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  272. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  273. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  274. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  275. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  276. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  277. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  278. package/src/middleware/currentapp.js +0 -2
  279. package/src/migrations/functions/backfill/global.ts +3 -0
  280. package/src/migrations/functions/developerQuota.ts +15 -0
  281. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  282. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  283. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  284. package/src/migrations/index.ts +16 -0
  285. package/src/module.d.ts +0 -2
  286. package/src/tests/utilities/TestConfiguration.js +1 -1
  287. package/src/threads/query.ts +2 -2
  288. package/src/utilities/fileSystem/index.js +0 -130
  289. package/src/utilities/workerRequests.js +0 -8
  290. package/builder/assets/index.c9d3f9e8.js +0 -1005
  291. package/builder/assets/index.f1b70f52.css +0 -6
  292. package/dist/api/controllers/plugin/github.js +0 -69
  293. package/dist/api/controllers/plugin/index.js +0 -200
  294. package/dist/api/controllers/plugin/npm.js +0 -58
  295. package/dist/api/controllers/plugin/uploaders.js +0 -11
  296. package/dist/api/controllers/plugin/utils.js +0 -26
  297. package/dist/watch.js +0 -77
  298. package/dist/websocket.js +0 -22
  299. package/src/api/controllers/plugin/file.ts +0 -15
  300. package/src/api/controllers/plugin/github.ts +0 -75
  301. package/src/api/controllers/plugin/index.ts +0 -215
  302. package/src/api/controllers/plugin/npm.ts +0 -56
  303. package/src/api/controllers/plugin/uploaders.ts +0 -4
  304. package/src/api/controllers/plugin/url.ts +0 -12
  305. package/src/api/controllers/plugin/utils.ts +0 -19
  306. package/src/api/routes/plugin.ts +0 -14
  307. package/src/watch.ts +0 -38
  308. 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 = {}));