@budibase/server 0.0.32 → 0.0.999-alpha.30

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 (977) hide show
  1. package/.dockerignore +6 -0
  2. package/.yarnrc +1 -0
  3. package/Dockerfile +41 -0
  4. package/LICENSE +391 -377
  5. package/__mocks__/@elastic/elasticsearch.ts +24 -0
  6. package/__mocks__/@google-cloud/firestore.ts +36 -0
  7. package/__mocks__/@sendgrid/mail.ts +22 -0
  8. package/__mocks__/airtable.ts +8 -0
  9. package/__mocks__/arangojs.ts +24 -0
  10. package/__mocks__/aws-sdk.ts +80 -0
  11. package/__mocks__/mongodb.ts +39 -0
  12. package/__mocks__/mssql.ts +24 -0
  13. package/__mocks__/mysql2/promise.ts +17 -0
  14. package/__mocks__/mysql2.ts +14 -0
  15. package/__mocks__/node-fetch.ts +201 -0
  16. package/__mocks__/oracledb.ts +31 -0
  17. package/__mocks__/pg.ts +30 -0
  18. package/babel.config.js +3 -0
  19. package/build/entitlements.mac.plist +14 -0
  20. package/build/icon.icns +0 -0
  21. package/build/icon.png +0 -0
  22. package/build/icons/512x512.png +0 -0
  23. package/build/pouchdb.js +9 -0
  24. package/builder/assets/auth0-logo.6fa5973f.png +0 -0
  25. package/builder/assets/backups-default.8c011f1b.png +0 -0
  26. package/builder/assets/bb-emblem.05f7ae7a.svg +80 -0
  27. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  28. package/builder/assets/bb-spaceship.8f6e81e1.svg +227 -0
  29. package/builder/assets/bg.29e85dd5.png +0 -0
  30. package/builder/assets/blankScreenPreview.72634dd1.png +0 -0
  31. package/builder/assets/bulgaria.bd68393d.png +0 -0
  32. package/builder/assets/covanta.72c46c1e.png +0 -0
  33. package/builder/assets/discord.c14881e9.svg +10 -0
  34. package/builder/assets/google-logo.c16467b8.png +0 -0
  35. package/builder/assets/index.c0265b74.css +6 -0
  36. package/builder/assets/index.c977bf31.js +1776 -0
  37. package/builder/assets/integromat.42212f11.png +0 -0
  38. package/builder/assets/listScreenPreview.599c0aae.png +0 -0
  39. package/builder/assets/microsoft-logo.07033b2a.png +0 -0
  40. package/builder/assets/oidc-logo.cb2fff74.png +0 -0
  41. package/builder/assets/okta-logo.61437d3d.png +0 -0
  42. package/builder/assets/onelogin-logo.181cc193.png +0 -0
  43. package/builder/assets/oracle.66592424.png +0 -0
  44. package/builder/assets/remixicon.0ac8bc3c.ttf +0 -0
  45. package/builder/assets/remixicon.64bb3a0f.eot +0 -0
  46. package/builder/assets/remixicon.a10268fe.svg +6835 -0
  47. package/builder/assets/remixicon.c2dacfbc.woff +0 -0
  48. package/builder/assets/remixicon.e61f0d10.woff2 +0 -0
  49. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  50. package/builder/assets/slack.1e1f7cfb.svg +33 -0
  51. package/builder/assets/zapier.3fbd8f5c.png +0 -0
  52. package/builder/index.html +10 -13
  53. package/dist/api/controllers/analytics.js +46 -0
  54. package/dist/api/controllers/apikeys.js +72 -0
  55. package/dist/api/controllers/application.js +575 -0
  56. package/dist/api/controllers/auth.js +80 -0
  57. package/dist/api/controllers/automation.js +303 -0
  58. package/dist/api/controllers/backup.js +37 -0
  59. package/dist/api/controllers/cloud.js +130 -0
  60. package/dist/api/controllers/component.js +59 -0
  61. package/dist/api/controllers/datasource.js +306 -0
  62. package/dist/api/controllers/deploy/Deployment.js +53 -0
  63. package/dist/api/controllers/deploy/index.js +198 -0
  64. package/dist/api/controllers/dev.js +146 -0
  65. package/dist/api/controllers/integration.js +28 -0
  66. package/dist/api/controllers/layout.js +49 -0
  67. package/dist/api/controllers/metadata.js +63 -0
  68. package/dist/api/controllers/migrations.js +29 -0
  69. package/dist/api/controllers/ops.js +40 -0
  70. package/dist/api/controllers/permission.js +162 -0
  71. package/dist/api/controllers/plugin/file.js +24 -0
  72. package/dist/api/controllers/plugin/github.js +69 -0
  73. package/dist/api/controllers/plugin/index.js +112 -0
  74. package/dist/api/controllers/plugin/npm.js +58 -0
  75. package/dist/api/controllers/plugin/uploaders.js +11 -0
  76. package/dist/api/controllers/plugin/url.js +24 -0
  77. package/dist/api/controllers/plugin/utils.js +27 -0
  78. package/dist/api/controllers/public/applications.js +146 -0
  79. package/dist/api/controllers/public/mapping/applications.js +29 -0
  80. package/dist/api/controllers/public/mapping/index.js +11 -0
  81. package/dist/api/controllers/public/mapping/queries.js +36 -0
  82. package/dist/api/controllers/public/mapping/rows.js +24 -0
  83. package/dist/api/controllers/public/mapping/tables.js +23 -0
  84. package/dist/api/controllers/public/mapping/types.js +2 -0
  85. package/dist/api/controllers/public/mapping/users.js +29 -0
  86. package/dist/api/controllers/public/metrics.js +113 -0
  87. package/dist/api/controllers/public/queries.js +58 -0
  88. package/dist/api/controllers/public/rows.js +120 -0
  89. package/dist/api/controllers/public/tables.js +95 -0
  90. package/dist/api/controllers/public/users.js +93 -0
  91. package/dist/api/controllers/public/utils.js +56 -0
  92. package/dist/api/controllers/query/import/index.js +87 -0
  93. package/dist/api/controllers/query/import/sources/base/index.js +75 -0
  94. package/dist/api/controllers/query/import/sources/base/openapi.js +42 -0
  95. package/dist/api/controllers/query/import/sources/curl.js +99 -0
  96. package/dist/api/controllers/query/import/sources/openapi2.js +145 -0
  97. package/dist/api/controllers/query/import/sources/openapi3.js +177 -0
  98. package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +253 -0
  99. package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +1054 -0
  100. package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +253 -0
  101. package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +1225 -0
  102. package/dist/api/controllers/query/index.js +299 -0
  103. package/dist/api/controllers/query/validation.js +53 -0
  104. package/dist/api/controllers/role.js +109 -0
  105. package/dist/api/controllers/routing.js +105 -0
  106. package/dist/api/controllers/row/ExternalRequest.js +676 -0
  107. package/dist/api/controllers/row/external.js +339 -0
  108. package/dist/api/controllers/row/index.js +203 -0
  109. package/dist/api/controllers/row/internal.js +502 -0
  110. package/dist/api/controllers/row/internalSearch.js +28 -0
  111. package/dist/api/controllers/row/staticFormula.js +165 -0
  112. package/dist/api/controllers/row/utils.js +183 -0
  113. package/dist/api/controllers/screen.js +110 -0
  114. package/dist/api/controllers/script.js +30 -0
  115. package/dist/api/controllers/static/index.js +268 -0
  116. package/dist/api/controllers/static/templates/BudibaseApp.svelte +135 -0
  117. package/dist/api/controllers/static/templates/app.hbs +13 -0
  118. package/dist/api/controllers/static/templates/preview.hbs +117 -0
  119. package/dist/api/controllers/table/bulkFormula.js +173 -0
  120. package/dist/api/controllers/table/external.js +279 -0
  121. package/dist/api/controllers/table/index.js +179 -0
  122. package/dist/api/controllers/table/internal.js +194 -0
  123. package/dist/api/controllers/table/utils.js +374 -0
  124. package/dist/api/controllers/templates.js +56 -0
  125. package/dist/api/controllers/user.js +124 -0
  126. package/dist/api/controllers/view/exporters.js +44 -0
  127. package/dist/api/controllers/view/index.js +193 -0
  128. package/dist/api/controllers/view/utils.js +177 -0
  129. package/dist/api/controllers/view/viewBuilder.js +158 -0
  130. package/dist/api/controllers/webhook.js +134 -0
  131. package/dist/api/index.js +56 -0
  132. package/dist/api/routes/analytics.js +34 -0
  133. package/dist/api/routes/apikeys.js +37 -0
  134. package/dist/api/routes/application.js +48 -0
  135. package/dist/api/routes/auth.js +33 -0
  136. package/dist/api/routes/automation.js +50 -0
  137. package/dist/api/routes/backup.js +35 -0
  138. package/dist/api/routes/cloud.js +39 -0
  139. package/dist/api/routes/component.js +35 -0
  140. package/dist/api/routes/datasource.js +43 -0
  141. package/dist/api/routes/deploy.js +37 -0
  142. package/dist/api/routes/dev.js +49 -0
  143. package/dist/api/routes/index.js +77 -0
  144. package/dist/api/routes/integration.js +37 -0
  145. package/dist/api/routes/layout.js +37 -0
  146. package/dist/api/routes/metadata.js +40 -0
  147. package/dist/api/routes/migrations.js +36 -0
  148. package/dist/api/routes/ops.js +52 -0
  149. package/dist/api/routes/permission.js +44 -0
  150. package/dist/api/routes/plugin.js +39 -0
  151. package/dist/api/routes/public/applications.js +174 -0
  152. package/dist/api/routes/public/index.js +131 -0
  153. package/dist/api/routes/public/metrics.js +30 -0
  154. package/dist/api/routes/public/middleware/mapper.js +97 -0
  155. package/dist/api/routes/public/queries.js +72 -0
  156. package/dist/api/routes/public/rows.js +158 -0
  157. package/dist/api/routes/public/tables.js +152 -0
  158. package/dist/api/routes/public/users.js +135 -0
  159. package/dist/api/routes/public/utils/Endpoint.js +36 -0
  160. package/dist/api/routes/query.js +47 -0
  161. package/dist/api/routes/role.js +40 -0
  162. package/dist/api/routes/routing.js +39 -0
  163. package/dist/api/routes/row.js +239 -0
  164. package/dist/api/routes/screen.js +39 -0
  165. package/dist/api/routes/script.js +35 -0
  166. package/dist/api/routes/static.js +80 -0
  167. package/dist/api/routes/table.js +163 -0
  168. package/dist/api/routes/templates.js +37 -0
  169. package/dist/api/routes/user.js +43 -0
  170. package/dist/api/routes/utils/validators.js +238 -0
  171. package/dist/api/routes/view.js +42 -0
  172. package/dist/api/routes/webhook.js +43 -0
  173. package/dist/app.js +132 -0
  174. package/dist/automations/actions.js +137 -0
  175. package/dist/automations/automationUtils.js +173 -0
  176. package/dist/automations/bullboard.js +71 -0
  177. package/dist/automations/index.js +43 -0
  178. package/dist/automations/logging/index.js +53 -0
  179. package/dist/automations/steps/bash.js +111 -0
  180. package/dist/automations/steps/createRow.js +108 -0
  181. package/dist/automations/steps/delay.js +53 -0
  182. package/dist/automations/steps/deleteRow.js +96 -0
  183. package/dist/automations/steps/discord.js +116 -0
  184. package/dist/automations/steps/executeQuery.js +134 -0
  185. package/dist/automations/steps/executeScript.js +106 -0
  186. package/dist/automations/steps/filter.js +112 -0
  187. package/dist/automations/steps/integromat.js +119 -0
  188. package/dist/automations/steps/loop.js +54 -0
  189. package/dist/automations/steps/outgoingWebhook.js +166 -0
  190. package/dist/automations/steps/queryRows.js +216 -0
  191. package/dist/automations/steps/sendSmtpEmail.js +115 -0
  192. package/dist/automations/steps/serverLog.js +65 -0
  193. package/dist/automations/steps/slack.js +98 -0
  194. package/dist/automations/steps/updateRow.js +144 -0
  195. package/dist/automations/steps/utils.js +56 -0
  196. package/dist/automations/steps/zapier.js +117 -0
  197. package/dist/automations/triggerInfo/app.js +36 -0
  198. package/dist/automations/triggerInfo/cron.js +35 -0
  199. package/dist/automations/triggerInfo/index.js +40 -0
  200. package/dist/automations/triggerInfo/rowDeleted.js +36 -0
  201. package/dist/automations/triggerInfo/rowSaved.js +44 -0
  202. package/dist/automations/triggerInfo/rowUpdated.js +44 -0
  203. package/dist/automations/triggerInfo/webhook.js +40 -0
  204. package/dist/automations/triggers.js +180 -0
  205. package/dist/automations/utils.js +264 -0
  206. package/dist/constants/definitions.js +2 -0
  207. package/dist/constants/index.js +181 -0
  208. package/dist/constants/layouts.js +148 -0
  209. package/dist/constants/screens.js +51 -0
  210. package/dist/db/defaultData/datasource_bb_default.js +574 -0
  211. package/dist/db/defaultData/employeeImport.js +155 -0
  212. package/dist/db/defaultData/expensesImport.js +117 -0
  213. package/dist/db/defaultData/inventoryImport.js +109 -0
  214. package/dist/db/defaultData/jobsImport.js +152 -0
  215. package/dist/db/dynamoClient.js +124 -0
  216. package/dist/db/inMemoryView.js +62 -0
  217. package/dist/db/index.js +43 -0
  218. package/dist/db/linkedRows/LinkController.js +392 -0
  219. package/dist/db/linkedRows/LinkDocument.js +33 -0
  220. package/dist/db/linkedRows/index.js +206 -0
  221. package/dist/db/linkedRows/linkUtils.js +131 -0
  222. package/dist/db/newid.js +7 -0
  223. package/dist/db/utils.js +247 -0
  224. package/dist/db/views/staticViews.js +144 -0
  225. package/dist/ddApm.js +11 -0
  226. package/dist/definitions/automations.js +8 -0
  227. package/dist/definitions/common.js +2 -0
  228. package/dist/definitions/datasource.js +7 -0
  229. package/dist/definitions/openapi.js +6 -0
  230. package/dist/environment.js +113 -0
  231. package/dist/events/AutomationEmitter.js +53 -0
  232. package/dist/events/BudibaseEmitter.js +25 -0
  233. package/dist/events/docUpdates/index.js +17 -0
  234. package/dist/events/docUpdates/processors.js +18 -0
  235. package/dist/events/docUpdates/syncUsers.js +49 -0
  236. package/dist/events/index.js +11 -0
  237. package/dist/events/utils.js +43 -0
  238. package/dist/index.js +16 -0
  239. package/dist/integrations/airtable.js +147 -0
  240. package/dist/integrations/arangodb.js +103 -0
  241. package/dist/integrations/base/query.js +32 -0
  242. package/dist/integrations/base/sql.js +600 -0
  243. package/dist/integrations/base/sqlTable.js +160 -0
  244. package/dist/integrations/base/types.js +2 -0
  245. package/dist/integrations/couchdb.js +125 -0
  246. package/dist/integrations/dynamodb.js +194 -0
  247. package/dist/integrations/elasticsearch.js +186 -0
  248. package/dist/integrations/firebase.js +174 -0
  249. package/dist/integrations/googlesheets.js +455 -0
  250. package/dist/integrations/index.js +135 -0
  251. package/dist/integrations/microsoftSqlServer.js +273 -0
  252. package/dist/integrations/mongodb.js +614 -0
  253. package/dist/integrations/mysql.js +256 -0
  254. package/dist/integrations/oracle.js +375 -0
  255. package/dist/integrations/postgres.js +300 -0
  256. package/dist/integrations/queries/sql.js +84 -0
  257. package/dist/integrations/redis.js +168 -0
  258. package/dist/integrations/rest.js +400 -0
  259. package/dist/integrations/s3.js +237 -0
  260. package/dist/integrations/snowflake.js +99 -0
  261. package/dist/integrations/utils.js +295 -0
  262. package/dist/middleware/appInfo.js +22 -0
  263. package/dist/middleware/authorized.js +112 -0
  264. package/dist/middleware/builder.js +93 -0
  265. package/dist/middleware/currentapp.js +103 -0
  266. package/dist/middleware/joi-validator.js +43 -0
  267. package/dist/middleware/publicApi.js +25 -0
  268. package/dist/middleware/resourceId.js +59 -0
  269. package/dist/middleware/selfhost.js +24 -0
  270. package/dist/middleware/utils.js +8 -0
  271. package/dist/migrations/functions/appUrls.js +42 -0
  272. package/dist/migrations/functions/backfill/app/automations.js +31 -0
  273. package/dist/migrations/functions/backfill/app/datasources.js +28 -0
  274. package/dist/migrations/functions/backfill/app/layouts.js +33 -0
  275. package/dist/migrations/functions/backfill/app/queries.js +50 -0
  276. package/dist/migrations/functions/backfill/app/roles.js +28 -0
  277. package/dist/migrations/functions/backfill/app/screens.js +28 -0
  278. package/dist/migrations/functions/backfill/app/tables.js +37 -0
  279. package/dist/migrations/functions/backfill/app.js +176 -0
  280. package/dist/migrations/functions/backfill/global/configs.js +67 -0
  281. package/dist/migrations/functions/backfill/global/quotas.js +60 -0
  282. package/dist/migrations/functions/backfill/global/users.js +50 -0
  283. package/dist/migrations/functions/backfill/global.js +205 -0
  284. package/dist/migrations/functions/backfill/index.js +32 -0
  285. package/dist/migrations/functions/backfill/installation.js +80 -0
  286. package/dist/migrations/functions/syncQuotas.js +50 -0
  287. package/dist/migrations/functions/tableSettings.js +130 -0
  288. package/dist/migrations/functions/usageQuotas/index.js +16 -0
  289. package/dist/migrations/functions/usageQuotas/syncApps.js +25 -0
  290. package/dist/migrations/functions/usageQuotas/syncPlugins.js +23 -0
  291. package/dist/migrations/functions/usageQuotas/syncRows.js +33 -0
  292. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  293. package/dist/migrations/index.js +111 -0
  294. package/dist/migrations/tests/helpers.js +72 -0
  295. package/dist/migrations/tests/structures.js +37 -0
  296. package/dist/package.json +180 -0
  297. package/dist/sdk/app/applications/index.js +28 -0
  298. package/dist/sdk/app/applications/sync.js +164 -0
  299. package/dist/sdk/app/applications/utils.js +21 -0
  300. package/dist/sdk/app/automations/index.js +29 -0
  301. package/dist/sdk/app/automations/webhook.js +54 -0
  302. package/dist/sdk/app/backups/constants.js +6 -0
  303. package/dist/sdk/app/backups/exports.js +184 -0
  304. package/dist/sdk/app/backups/imports.js +170 -0
  305. package/dist/sdk/app/backups/index.js +29 -0
  306. package/dist/sdk/app/backups/statistics.js +73 -0
  307. package/dist/sdk/app/datasources/datasources.js +166 -0
  308. package/dist/sdk/app/datasources/index.js +27 -0
  309. package/dist/sdk/app/queries/index.js +27 -0
  310. package/dist/sdk/app/queries/queries.js +60 -0
  311. package/dist/sdk/app/rows/attachments.js +61 -0
  312. package/dist/sdk/app/rows/index.js +28 -0
  313. package/dist/sdk/app/rows/rows.js +30 -0
  314. package/dist/sdk/app/tables/index.js +65 -0
  315. package/dist/sdk/index.js +27 -0
  316. package/dist/sdk/plugins/index.js +27 -0
  317. package/dist/sdk/plugins/plugins.js +53 -0
  318. package/dist/sdk/users/index.js +27 -0
  319. package/dist/sdk/users/utils.js +87 -0
  320. package/dist/sdk/utils/index.js +29 -0
  321. package/dist/startup.js +158 -0
  322. package/dist/threads/automation.js +449 -0
  323. package/dist/threads/definitions.js +2 -0
  324. package/dist/threads/index.js +137 -0
  325. package/dist/threads/query.js +265 -0
  326. package/dist/threads/utils.js +122 -0
  327. package/dist/tsconfig.build.tsbuildinfo +1 -0
  328. package/dist/utilities/appDirectoryTemplate/package.json +10 -0
  329. package/dist/utilities/budibaseDir.js +5 -0
  330. package/dist/utilities/centralPath.js +27 -0
  331. package/dist/utilities/fileSystem/app.js +88 -0
  332. package/dist/utilities/fileSystem/clientLibrary.js +138 -0
  333. package/dist/utilities/fileSystem/filesystem.js +180 -0
  334. package/dist/utilities/fileSystem/index.js +21 -0
  335. package/dist/utilities/fileSystem/plugin.js +76 -0
  336. package/dist/utilities/fileSystem/processor.js +34 -0
  337. package/dist/utilities/fileSystem/template.js +47 -0
  338. package/dist/utilities/global.js +149 -0
  339. package/dist/utilities/index.js +143 -0
  340. package/dist/utilities/redis.js +117 -0
  341. package/dist/utilities/retry.js +30 -0
  342. package/dist/utilities/routing/index.js +39 -0
  343. package/dist/utilities/rowProcessor/index.js +284 -0
  344. package/dist/utilities/rowProcessor/map.js +99 -0
  345. package/dist/utilities/rowProcessor/utils.js +88 -0
  346. package/dist/utilities/schema.js +108 -0
  347. package/dist/utilities/scriptRunner.js +26 -0
  348. package/dist/utilities/security.js +57 -0
  349. package/dist/utilities/statusCodes.js +9 -0
  350. package/dist/utilities/usageQuota/rows.js +88 -0
  351. package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
  352. package/dist/utilities/users.js +57 -0
  353. package/dist/utilities/workerRequests.js +171 -0
  354. package/dist/watch.js +53 -0
  355. package/dist/websockets/client.js +14 -0
  356. package/dist/websockets/grid.js +60 -0
  357. package/dist/websockets/index.js +17 -0
  358. package/dist/websockets/websocket.js +78 -0
  359. package/docker_run.sh +7 -0
  360. package/jest-testcontainers-config.js +8 -0
  361. package/jest.config.ts +52 -0
  362. package/nodemon.json +10 -0
  363. package/package.json +166 -31
  364. package/pm2.config.js +9 -0
  365. package/scripts/account.js +8 -0
  366. package/scripts/dev/manage.js +119 -0
  367. package/scripts/docs/README.md +31 -0
  368. package/scripts/docs/generate.js +74 -0
  369. package/scripts/docs/toSwagger.js +320 -0
  370. package/scripts/exportAppTemplate.js +64 -0
  371. package/scripts/integrations/customer-categories/docker-compose.yml +28 -0
  372. package/scripts/integrations/customer-categories/init.sql +41 -0
  373. package/scripts/integrations/customer-categories/reset.sh +3 -0
  374. package/scripts/integrations/mssql/data/Dockerfile +9 -0
  375. package/scripts/integrations/mssql/data/entrypoint.sh +25 -0
  376. package/scripts/integrations/mssql/data/setup.sql +80 -0
  377. package/scripts/integrations/mssql/docker-compose.yaml +12 -0
  378. package/scripts/integrations/mssql/reset.sh +3 -0
  379. package/scripts/integrations/mysql/docker-compose.yaml +21 -0
  380. package/scripts/integrations/mysql/init.sql +32 -0
  381. package/scripts/integrations/mysql/reset.sh +3 -0
  382. package/scripts/integrations/oracle/docker-compose.yml +19 -0
  383. package/scripts/integrations/oracle/instantclient/linux/arm64/basiclite-19.10.zip +0 -0
  384. package/scripts/integrations/oracle/instantclient/linux/arm64/install.sh +23 -0
  385. package/scripts/integrations/oracle/instantclient/linux/install.sh +10 -0
  386. package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
  387. package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
  388. package/scripts/integrations/oracle/oracle.md +90 -0
  389. package/scripts/integrations/pg-json/docker-compose.yml +28 -0
  390. package/scripts/integrations/pg-json/init.sql +22 -0
  391. package/scripts/integrations/pg-json/reset.sh +3 -0
  392. package/scripts/integrations/postgres/docker-compose.yml +28 -0
  393. package/scripts/integrations/postgres/emp-skill.sql +46 -0
  394. package/scripts/integrations/postgres/emp-territory.sql +32 -0
  395. package/scripts/integrations/postgres/init.sql +57 -0
  396. package/scripts/integrations/postgres/reset.sh +3 -0
  397. package/scripts/integrations/service-vehicles/docker-compose.yml +28 -0
  398. package/scripts/integrations/service-vehicles/init.sql +52 -0
  399. package/scripts/integrations/service-vehicles/reset.sh +3 -0
  400. package/scripts/load/create-many-apps.js +24 -0
  401. package/scripts/load/create-many-rows.js +30 -0
  402. package/scripts/load/utils.js +66 -0
  403. package/scripts/localdomain.js +52 -0
  404. package/scripts/multiTenancy.js +8 -0
  405. package/scripts/selfhost.js +8 -0
  406. package/scripts/test.sh +14 -0
  407. package/scripts/watchtower-hooks/post-check.sh +1 -0
  408. package/scripts/watchtower-hooks/post-update.sh +1 -0
  409. package/scripts/watchtower-hooks/pre-check.sh +1 -0
  410. package/scripts/watchtower-hooks/pre-update.sh +1 -0
  411. package/specs/generate.ts +92 -0
  412. package/specs/openapi.json +2782 -0
  413. package/specs/openapi.yaml +2111 -0
  414. package/specs/parameters.ts +59 -0
  415. package/specs/resources/application.ts +137 -0
  416. package/specs/resources/index.ts +26 -0
  417. package/specs/resources/metrics.ts +81 -0
  418. package/specs/resources/misc.ts +128 -0
  419. package/specs/resources/query.ts +217 -0
  420. package/specs/resources/row.ts +124 -0
  421. package/specs/resources/table.ts +197 -0
  422. package/specs/resources/user.ts +132 -0
  423. package/specs/resources/utils/Resource.ts +39 -0
  424. package/specs/resources/utils/index.ts +11 -0
  425. package/specs/security.ts +7 -0
  426. package/src/api/controllers/analytics.ts +35 -0
  427. package/src/api/controllers/apikeys.ts +54 -0
  428. package/src/api/controllers/application.ts +633 -0
  429. package/src/api/controllers/auth.ts +72 -0
  430. package/src/api/controllers/automation.ts +302 -0
  431. package/src/api/controllers/backup.ts +21 -0
  432. package/src/api/controllers/cloud.ts +119 -0
  433. package/src/api/controllers/component.ts +58 -0
  434. package/src/api/controllers/datasource.ts +351 -0
  435. package/src/api/controllers/deploy/Deployment.ts +59 -0
  436. package/src/api/controllers/deploy/index.ts +203 -0
  437. package/src/api/controllers/dev.ts +129 -0
  438. package/src/api/controllers/integration.ts +13 -0
  439. package/src/api/controllers/layout.ts +47 -0
  440. package/src/api/controllers/metadata.ts +42 -0
  441. package/src/api/controllers/migrations.ts +14 -0
  442. package/src/api/controllers/ops.ts +32 -0
  443. package/src/api/controllers/permission.ts +178 -0
  444. package/src/api/controllers/plugin/file.ts +15 -0
  445. package/src/api/controllers/plugin/github.ts +75 -0
  446. package/src/api/controllers/plugin/index.ts +101 -0
  447. package/src/api/controllers/plugin/npm.ts +56 -0
  448. package/src/api/controllers/plugin/uploaders.ts +4 -0
  449. package/src/api/controllers/plugin/url.ts +12 -0
  450. package/src/api/controllers/plugin/utils.ts +17 -0
  451. package/src/api/controllers/public/applications.ts +100 -0
  452. package/src/api/controllers/public/mapping/applications.ts +32 -0
  453. package/src/api/controllers/public/mapping/index.ts +13 -0
  454. package/src/api/controllers/public/mapping/queries.ts +39 -0
  455. package/src/api/controllers/public/mapping/rows.ts +31 -0
  456. package/src/api/controllers/public/mapping/tables.ts +26 -0
  457. package/src/api/controllers/public/mapping/types.ts +21 -0
  458. package/src/api/controllers/public/mapping/users.ts +32 -0
  459. package/src/api/controllers/public/metrics.ts +251 -0
  460. package/src/api/controllers/public/queries.ts +20 -0
  461. package/src/api/controllers/public/rows.ts +81 -0
  462. package/src/api/controllers/public/tables.ts +56 -0
  463. package/src/api/controllers/public/users.ts +80 -0
  464. package/src/api/controllers/public/utils.ts +45 -0
  465. package/src/api/controllers/query/import/index.ts +96 -0
  466. package/src/api/controllers/query/import/sources/base/index.ts +98 -0
  467. package/src/api/controllers/query/import/sources/base/openapi.ts +24 -0
  468. package/src/api/controllers/query/import/sources/curl.ts +106 -0
  469. package/src/api/controllers/query/import/sources/openapi2.ts +167 -0
  470. package/src/api/controllers/query/import/sources/openapi3.ts +209 -0
  471. package/src/api/controllers/query/import/sources/tests/curl/curl.spec.js +103 -0
  472. package/src/api/controllers/query/import/sources/tests/curl/data/delete.txt +1 -0
  473. package/src/api/controllers/query/import/sources/tests/curl/data/empty-body.txt +2 -0
  474. package/src/api/controllers/query/import/sources/tests/curl/data/get.txt +1 -0
  475. package/src/api/controllers/query/import/sources/tests/curl/data/headers.txt +3 -0
  476. package/src/api/controllers/query/import/sources/tests/curl/data/patch.txt +2 -0
  477. package/src/api/controllers/query/import/sources/tests/curl/data/path.txt +1 -0
  478. package/src/api/controllers/query/import/sources/tests/curl/data/post.txt +2 -0
  479. package/src/api/controllers/query/import/sources/tests/curl/data/put.txt +2 -0
  480. package/src/api/controllers/query/import/sources/tests/curl/data/query.txt +1 -0
  481. package/src/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +253 -0
  482. package/src/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.yaml +160 -0
  483. package/src/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +1054 -0
  484. package/src/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.yaml +711 -0
  485. package/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js +238 -0
  486. package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +253 -0
  487. package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.yaml +153 -0
  488. package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +1225 -0
  489. package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.yaml +804 -0
  490. package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +240 -0
  491. package/src/api/controllers/query/import/tests/index.spec.js +162 -0
  492. package/src/api/controllers/query/index.ts +307 -0
  493. package/src/api/controllers/query/validation.ts +50 -0
  494. package/src/api/controllers/role.ts +104 -0
  495. package/src/api/controllers/routing.ts +95 -0
  496. package/src/api/controllers/row/ExternalRequest.ts +821 -0
  497. package/src/api/controllers/row/external.ts +304 -0
  498. package/src/api/controllers/row/index.ts +162 -0
  499. package/src/api/controllers/row/internal.ts +500 -0
  500. package/src/api/controllers/row/internalSearch.ts +18 -0
  501. package/src/api/controllers/row/staticFormula.ts +170 -0
  502. package/src/api/controllers/row/utils.ts +156 -0
  503. package/src/api/controllers/screen.ts +126 -0
  504. package/src/api/controllers/script.ts +12 -0
  505. package/src/api/controllers/static/index.ts +241 -0
  506. package/src/api/controllers/static/templates/BudibaseApp.svelte +135 -0
  507. package/src/api/controllers/static/templates/app.hbs +13 -0
  508. package/src/api/controllers/static/templates/preview.hbs +117 -0
  509. package/src/api/controllers/table/bulkFormula.ts +188 -0
  510. package/src/api/controllers/table/external.ts +364 -0
  511. package/src/api/controllers/table/index.ts +143 -0
  512. package/src/api/controllers/table/internal.ts +191 -0
  513. package/src/api/controllers/table/tests/utils.spec.ts +97 -0
  514. package/src/api/controllers/table/utils.ts +422 -0
  515. package/src/api/controllers/templates.ts +43 -0
  516. package/src/api/controllers/user.ts +97 -0
  517. package/src/api/controllers/view/exporters.ts +43 -0
  518. package/src/api/controllers/view/index.ts +192 -0
  519. package/src/api/controllers/view/tests/__snapshots__/viewBuilder.spec.js.snap +147 -0
  520. package/src/api/controllers/view/tests/viewBuilder.spec.js +65 -0
  521. package/src/api/controllers/view/utils.ts +165 -0
  522. package/src/api/controllers/view/viewBuilder.ts +203 -0
  523. package/src/api/controllers/webhook.ts +100 -0
  524. package/src/api/index.ts +63 -0
  525. package/src/api/routes/analytics.ts +9 -0
  526. package/src/api/routes/apikeys.ts +12 -0
  527. package/src/api/routes/application.ts +57 -0
  528. package/src/api/routes/auth.ts +8 -0
  529. package/src/api/routes/automation.ts +87 -0
  530. package/src/api/routes/backup.ts +14 -0
  531. package/src/api/routes/cloud.ts +18 -0
  532. package/src/api/routes/component.ts +14 -0
  533. package/src/api/routes/datasource.ts +60 -0
  534. package/src/api/routes/deploy.ts +20 -0
  535. package/src/api/routes/dev.ts +38 -0
  536. package/src/api/routes/index.ts +73 -0
  537. package/src/api/routes/integration.ts +16 -0
  538. package/src/api/routes/layout.ts +16 -0
  539. package/src/api/routes/metadata.ts +38 -0
  540. package/src/api/routes/migrations.ts +14 -0
  541. package/src/api/routes/ops.ts +30 -0
  542. package/src/api/routes/permission.ts +41 -0
  543. package/src/api/routes/plugin.ts +22 -0
  544. package/src/api/routes/public/applications.ts +195 -0
  545. package/src/api/routes/public/index.ts +145 -0
  546. package/src/api/routes/public/metrics.ts +28 -0
  547. package/src/api/routes/public/middleware/mapper.ts +85 -0
  548. package/src/api/routes/public/queries.ts +76 -0
  549. package/src/api/routes/public/rows.ts +171 -0
  550. package/src/api/routes/public/tables.ts +167 -0
  551. package/src/api/routes/public/tests/compare.spec.ts +185 -0
  552. package/src/api/routes/public/tests/metrics.spec.js +34 -0
  553. package/src/api/routes/public/tests/users.spec.js +38 -0
  554. package/src/api/routes/public/tests/utils.ts +45 -0
  555. package/src/api/routes/public/users.ts +142 -0
  556. package/src/api/routes/public/utils/Endpoint.ts +51 -0
  557. package/src/api/routes/query.ts +61 -0
  558. package/src/api/routes/role.ts +24 -0
  559. package/src/api/routes/routing.ts +14 -0
  560. package/src/api/routes/row.ts +266 -0
  561. package/src/api/routes/screen.ts +23 -0
  562. package/src/api/routes/script.ts +10 -0
  563. package/src/api/routes/static.ts +65 -0
  564. package/src/api/routes/table.ts +170 -0
  565. package/src/api/routes/templates.ts +16 -0
  566. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +93 -0
  567. package/src/api/routes/tests/__snapshots__/view.spec.js.snap +38 -0
  568. package/src/api/routes/tests/analytics.spec.js +62 -0
  569. package/src/api/routes/tests/apikeys.spec.js +59 -0
  570. package/src/api/routes/tests/appSync.spec.ts +31 -0
  571. package/src/api/routes/tests/application.spec.ts +327 -0
  572. package/src/api/routes/tests/auth.spec.js +24 -0
  573. package/src/api/routes/tests/automation.spec.js +349 -0
  574. package/src/api/routes/tests/backup.spec.ts +45 -0
  575. package/src/api/routes/tests/cloud.spec.ts +54 -0
  576. package/src/api/routes/tests/component.spec.js +32 -0
  577. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  578. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  579. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  580. package/src/api/routes/tests/data/export.txt +1 -0
  581. package/src/api/routes/tests/data/old-app.txt +3 -0
  582. package/src/api/routes/tests/datasource.spec.ts +238 -0
  583. package/src/api/routes/tests/dev.spec.js +40 -0
  584. package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
  585. package/src/api/routes/tests/integration.spec.js +52 -0
  586. package/src/api/routes/tests/internalSearch.spec.js +197 -0
  587. package/src/api/routes/tests/layout.spec.js +59 -0
  588. package/src/api/routes/tests/metadata.spec.js +65 -0
  589. package/src/api/routes/tests/misc.spec.js +91 -0
  590. package/src/api/routes/tests/permissions.spec.js +133 -0
  591. package/src/api/routes/tests/plugin.spec.ts +179 -0
  592. package/src/api/routes/tests/query.seq.spec.js +538 -0
  593. package/src/api/routes/tests/role.spec.js +131 -0
  594. package/src/api/routes/tests/routing.spec.js +116 -0
  595. package/src/api/routes/tests/row.spec.js +573 -0
  596. package/src/api/routes/tests/screen.spec.js +103 -0
  597. package/src/api/routes/tests/static.spec.js +140 -0
  598. package/src/api/routes/tests/table.spec.js +302 -0
  599. package/src/api/routes/tests/templates.spec.js +24 -0
  600. package/src/api/routes/tests/user.spec.js +208 -0
  601. package/src/api/routes/tests/utilities/TestFunctions.ts +177 -0
  602. package/src/api/routes/tests/utilities/index.ts +96 -0
  603. package/src/api/routes/tests/view.spec.js +419 -0
  604. package/src/api/routes/tests/webhook.spec.js +134 -0
  605. package/src/api/routes/user.ts +46 -0
  606. package/src/api/routes/utils/validators.ts +240 -0
  607. package/src/api/routes/view.ts +34 -0
  608. package/src/api/routes/webhook.ts +27 -0
  609. package/src/app.ts +114 -0
  610. package/src/automations/actions.ts +109 -0
  611. package/src/automations/automationUtils.ts +163 -0
  612. package/src/automations/bullboard.ts +38 -0
  613. package/src/automations/index.ts +26 -0
  614. package/src/automations/logging/index.ts +38 -0
  615. package/src/automations/steps/bash.ts +81 -0
  616. package/src/automations/steps/createRow.ts +102 -0
  617. package/src/automations/steps/delay.ts +46 -0
  618. package/src/automations/steps/deleteRow.ts +91 -0
  619. package/src/automations/steps/discord.ts +106 -0
  620. package/src/automations/steps/executeQuery.ts +98 -0
  621. package/src/automations/steps/executeScript.ts +83 -0
  622. package/src/automations/steps/filter.ts +105 -0
  623. package/src/automations/steps/integromat.ts +110 -0
  624. package/src/automations/steps/loop.ts +58 -0
  625. package/src/automations/steps/outgoingWebhook.ts +141 -0
  626. package/src/automations/steps/queryRows.ts +196 -0
  627. package/src/automations/steps/sendSmtpEmail.ts +92 -0
  628. package/src/automations/steps/serverLog.ts +59 -0
  629. package/src/automations/steps/slack.ts +87 -0
  630. package/src/automations/steps/updateRow.ts +121 -0
  631. package/src/automations/steps/utils.ts +46 -0
  632. package/src/automations/steps/zapier.ts +108 -0
  633. package/src/automations/tests/automation.spec.ts +99 -0
  634. package/src/automations/tests/bash.spec.js +34 -0
  635. package/src/automations/tests/createRow.spec.ts +46 -0
  636. package/src/automations/tests/delay.spec.js +16 -0
  637. package/src/automations/tests/deleteRow.spec.ts +55 -0
  638. package/src/automations/tests/discord.spec.js +27 -0
  639. package/src/automations/tests/executeQuery.spec.js +48 -0
  640. package/src/automations/tests/executeScript.spec.js +48 -0
  641. package/src/automations/tests/filter.spec.js +49 -0
  642. package/src/automations/tests/loop.spec.ts +45 -0
  643. package/src/automations/tests/outgoingWebhook.spec.js +39 -0
  644. package/src/automations/tests/queryRows.spec.js +117 -0
  645. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  646. package/src/automations/tests/serverLog.spec.js +22 -0
  647. package/src/automations/tests/updateRow.spec.js +44 -0
  648. package/src/automations/tests/utilities/index.ts +60 -0
  649. package/src/automations/tests/zapier.spec.js +27 -0
  650. package/src/automations/triggerInfo/app.ts +40 -0
  651. package/src/automations/triggerInfo/cron.ts +39 -0
  652. package/src/automations/triggerInfo/index.ts +15 -0
  653. package/src/automations/triggerInfo/rowDeleted.ts +40 -0
  654. package/src/automations/triggerInfo/rowSaved.ts +48 -0
  655. package/src/automations/triggerInfo/rowUpdated.ts +48 -0
  656. package/src/automations/triggerInfo/webhook.ts +44 -0
  657. package/src/automations/triggers.ts +156 -0
  658. package/src/automations/unitTests/automationUtils.spec.ts +133 -0
  659. package/src/automations/utils.ts +267 -0
  660. package/src/constants/definitions.ts +42 -0
  661. package/src/constants/index.ts +183 -0
  662. package/src/constants/layouts.ts +147 -0
  663. package/src/constants/screens.ts +48 -0
  664. package/src/db/defaultData/datasource_bb_default.ts +654 -0
  665. package/src/db/defaultData/employeeImport.ts +152 -0
  666. package/src/db/defaultData/expensesImport.ts +114 -0
  667. package/src/db/defaultData/inventoryImport.ts +106 -0
  668. package/src/db/defaultData/jobsImport.ts +158 -0
  669. package/src/db/dynamoClient.ts +147 -0
  670. package/src/db/inMemoryView.ts +55 -0
  671. package/src/db/index.ts +16 -0
  672. package/src/db/linkedRows/LinkController.ts +445 -0
  673. package/src/db/linkedRows/LinkDocument.ts +60 -0
  674. package/src/db/linkedRows/index.ts +217 -0
  675. package/src/db/linkedRows/linkUtils.ts +125 -0
  676. package/src/db/newid.ts +5 -0
  677. package/src/db/tests/linkController.spec.js +236 -0
  678. package/src/db/tests/linkTests.spec.js +65 -0
  679. package/src/db/utils.ts +272 -0
  680. package/src/db/views/staticViews.ts +132 -0
  681. package/src/ddApm.ts +7 -0
  682. package/src/definitions/automations.ts +33 -0
  683. package/src/definitions/common.ts +54 -0
  684. package/src/definitions/datasource.ts +9 -0
  685. package/src/definitions/openapi.ts +1233 -0
  686. package/src/environment.ts +125 -0
  687. package/src/events/AutomationEmitter.ts +58 -0
  688. package/src/events/BudibaseEmitter.ts +29 -0
  689. package/src/events/docUpdates/index.ts +1 -0
  690. package/src/events/docUpdates/processors.ts +14 -0
  691. package/src/events/docUpdates/syncUsers.ts +35 -0
  692. package/src/events/index.ts +6 -0
  693. package/src/events/utils.ts +78 -0
  694. package/src/index.ts +16 -0
  695. package/src/integration-test/postgres.spec.ts +1026 -0
  696. package/src/integrations/airtable.ts +148 -0
  697. package/src/integrations/arangodb.ts +110 -0
  698. package/src/integrations/base/query.ts +18 -0
  699. package/src/integrations/base/sql.ts +651 -0
  700. package/src/integrations/base/sqlTable.ts +202 -0
  701. package/src/integrations/base/types.ts +134 -0
  702. package/src/integrations/couchdb.ts +133 -0
  703. package/src/integrations/dynamodb.ts +220 -0
  704. package/src/integrations/elasticsearch.ts +187 -0
  705. package/src/integrations/firebase.ts +187 -0
  706. package/src/integrations/googlesheets.ts +511 -0
  707. package/src/integrations/index.ts +125 -0
  708. package/src/integrations/microsoftSqlServer.ts +312 -0
  709. package/src/integrations/mongodb.ts +638 -0
  710. package/src/integrations/mysql.ts +300 -0
  711. package/src/integrations/oracle.ts +435 -0
  712. package/src/integrations/postgres.ts +336 -0
  713. package/src/integrations/queries/sql.ts +81 -0
  714. package/src/integrations/redis.ts +163 -0
  715. package/src/integrations/rest.ts +436 -0
  716. package/src/integrations/s3.ts +260 -0
  717. package/src/integrations/snowflake.ts +97 -0
  718. package/src/integrations/tests/TestConfiguration.js +0 -0
  719. package/src/integrations/tests/airtable.spec.ts +75 -0
  720. package/src/integrations/tests/arangodb.spec.ts +38 -0
  721. package/src/integrations/tests/couchdb.spec.ts +86 -0
  722. package/src/integrations/tests/dynamodb.spec.ts +155 -0
  723. package/src/integrations/tests/elasticsearch.spec.ts +82 -0
  724. package/src/integrations/tests/firebase.spec.ts +97 -0
  725. package/src/integrations/tests/googlesheets.spec.ts +126 -0
  726. package/src/integrations/tests/microsoftSqlServer.spec.ts +56 -0
  727. package/src/integrations/tests/mongo.spec.ts +334 -0
  728. package/src/integrations/tests/mysql.spec.ts +133 -0
  729. package/src/integrations/tests/oracle.spec.ts +96 -0
  730. package/src/integrations/tests/postgres.spec.ts +81 -0
  731. package/src/integrations/tests/redis.spec.ts +88 -0
  732. package/src/integrations/tests/rest.spec.ts +595 -0
  733. package/src/integrations/tests/s3.spec.ts +112 -0
  734. package/src/integrations/tests/sql.spec.ts +639 -0
  735. package/src/integrations/utils.ts +330 -0
  736. package/src/middleware/appInfo.ts +20 -0
  737. package/src/middleware/authorized.ts +131 -0
  738. package/src/middleware/builder.ts +97 -0
  739. package/src/middleware/currentapp.ts +112 -0
  740. package/src/middleware/joi-validator.ts +40 -0
  741. package/src/middleware/publicApi.ts +21 -0
  742. package/src/middleware/resourceId.ts +66 -0
  743. package/src/middleware/selfhost.ts +12 -0
  744. package/src/middleware/tests/authorized.spec.js +163 -0
  745. package/src/middleware/tests/currentapp.spec.js +207 -0
  746. package/src/middleware/tests/resourceId.spec.js +105 -0
  747. package/src/middleware/tests/selfhost.spec.js +43 -0
  748. package/src/middleware/utils.ts +9 -0
  749. package/src/migrations/functions/appUrls.ts +27 -0
  750. package/src/migrations/functions/backfill/app/automations.ts +26 -0
  751. package/src/migrations/functions/backfill/app/datasources.ts +22 -0
  752. package/src/migrations/functions/backfill/app/layouts.ts +29 -0
  753. package/src/migrations/functions/backfill/app/queries.ts +47 -0
  754. package/src/migrations/functions/backfill/app/roles.ts +22 -0
  755. package/src/migrations/functions/backfill/app/screens.ts +22 -0
  756. package/src/migrations/functions/backfill/app/tables.ts +27 -0
  757. package/src/migrations/functions/backfill/app.ts +149 -0
  758. package/src/migrations/functions/backfill/global/configs.ts +73 -0
  759. package/src/migrations/functions/backfill/global/quotas.ts +60 -0
  760. package/src/migrations/functions/backfill/global/users.ts +49 -0
  761. package/src/migrations/functions/backfill/global.ts +213 -0
  762. package/src/migrations/functions/backfill/index.ts +7 -0
  763. package/src/migrations/functions/backfill/installation.ts +50 -0
  764. package/src/migrations/functions/syncQuotas.ts +15 -0
  765. package/src/migrations/functions/tableSettings.ts +145 -0
  766. package/src/migrations/functions/tests/appUrls.spec.js +26 -0
  767. package/src/migrations/functions/tests/syncQuotas.spec.js +26 -0
  768. package/src/migrations/functions/tests/tableSettings.spec.ts +144 -0
  769. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +34 -0
  770. package/src/migrations/functions/usageQuotas/index.ts +3 -0
  771. package/src/migrations/functions/usageQuotas/syncApps.ts +14 -0
  772. package/src/migrations/functions/usageQuotas/syncPlugins.ts +10 -0
  773. package/src/migrations/functions/usageQuotas/syncRows.ts +27 -0
  774. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +35 -0
  775. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +53 -0
  776. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  777. package/src/migrations/index.ts +115 -0
  778. package/src/migrations/tests/helpers.ts +40 -0
  779. package/src/migrations/tests/index.spec.ts +142 -0
  780. package/src/migrations/tests/structures.ts +67 -0
  781. package/src/sdk/app/applications/index.ts +7 -0
  782. package/src/sdk/app/applications/sync.ts +168 -0
  783. package/src/sdk/app/applications/tests/sync.spec.ts +137 -0
  784. package/src/sdk/app/applications/utils.ts +17 -0
  785. package/src/sdk/app/automations/index.ts +5 -0
  786. package/src/sdk/app/automations/webhook.ts +43 -0
  787. package/src/sdk/app/backups/constants.ts +3 -0
  788. package/src/sdk/app/backups/exports.ts +195 -0
  789. package/src/sdk/app/backups/imports.ts +185 -0
  790. package/src/sdk/app/backups/index.ts +9 -0
  791. package/src/sdk/app/backups/statistics.ts +69 -0
  792. package/src/sdk/app/datasources/datasources.ts +162 -0
  793. package/src/sdk/app/datasources/index.ts +5 -0
  794. package/src/sdk/app/queries/index.ts +5 -0
  795. package/src/sdk/app/queries/queries.ts +50 -0
  796. package/src/sdk/app/rows/attachments.ts +60 -0
  797. package/src/sdk/app/rows/index.ts +7 -0
  798. package/src/sdk/app/rows/rows.ts +18 -0
  799. package/src/sdk/app/tables/index.ts +63 -0
  800. package/src/sdk/index.ts +24 -0
  801. package/src/sdk/plugins/index.ts +5 -0
  802. package/src/sdk/plugins/plugins.ts +41 -0
  803. package/src/sdk/tests/attachments.spec.ts +76 -0
  804. package/src/sdk/users/index.ts +5 -0
  805. package/src/sdk/users/tests/utils.spec.ts +128 -0
  806. package/src/sdk/users/utils.ts +93 -0
  807. package/src/sdk/utils/index.ts +16 -0
  808. package/src/startup.ts +138 -0
  809. package/src/tests/jestEnv.ts +11 -0
  810. package/src/tests/jestSetup.ts +22 -0
  811. package/src/tests/utilities/TestConfiguration.ts +768 -0
  812. package/src/tests/utilities/controllers.ts +14 -0
  813. package/src/tests/utilities/index.ts +11 -0
  814. package/src/tests/utilities/structures.ts +289 -0
  815. package/src/threads/automation.ts +502 -0
  816. package/src/threads/definitions.ts +21 -0
  817. package/src/threads/index.ts +111 -0
  818. package/src/threads/query.ts +305 -0
  819. package/src/threads/utils.ts +96 -0
  820. package/src/utilities/appDirectoryTemplate/package.json +10 -0
  821. package/src/utilities/budibaseDir.ts +3 -0
  822. package/src/utilities/centralPath.ts +22 -0
  823. package/src/utilities/fileSystem/app.ts +79 -0
  824. package/src/utilities/fileSystem/clientLibrary.ts +154 -0
  825. package/src/utilities/fileSystem/filesystem.ts +168 -0
  826. package/src/utilities/fileSystem/index.ts +5 -0
  827. package/src/utilities/fileSystem/plugin.ts +73 -0
  828. package/src/utilities/fileSystem/processor.ts +19 -0
  829. package/src/utilities/fileSystem/template.ts +36 -0
  830. package/src/utilities/global.ts +153 -0
  831. package/src/utilities/index.ts +134 -0
  832. package/src/utilities/redis.ts +88 -0
  833. package/src/utilities/retry.ts +18 -0
  834. package/src/utilities/routing/index.ts +32 -0
  835. package/src/utilities/rowProcessor/index.ts +279 -0
  836. package/src/utilities/rowProcessor/map.ts +96 -0
  837. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  838. package/src/utilities/rowProcessor/utils.ts +96 -0
  839. package/src/utilities/schema.ts +141 -0
  840. package/src/utilities/scriptRunner.ts +28 -0
  841. package/src/utilities/security.ts +65 -0
  842. package/{utilities/statusCodes.js → src/utilities/statusCodes.ts} +1 -1
  843. package/src/utilities/tests/test.csv +4 -0
  844. package/src/utilities/usageQuota/rows.ts +80 -0
  845. package/src/utilities/usageQuota/usageQuoteReset.ts +18 -0
  846. package/src/utilities/users.ts +49 -0
  847. package/src/utilities/workerRequests.ts +188 -0
  848. package/src/watch.ts +37 -0
  849. package/src/websockets/client.ts +11 -0
  850. package/src/websockets/grid.ts +55 -0
  851. package/src/websockets/index.ts +14 -0
  852. package/src/websockets/websocket.ts +83 -0
  853. package/tsconfig.build.json +28 -0
  854. package/tsconfig.json +22 -0
  855. package/app.js +0 -20
  856. package/appPackages/_master/access_levels.json +0 -175
  857. package/appPackages/_master/appDefinition.json +0 -527
  858. package/appPackages/_master/main.js +0 -125
  859. package/appPackages/_master/node_modules/.yarn-integrity +0 -20
  860. package/appPackages/_master/node_modules/@budibase/materialdesign-components/README.md +0 -33
  861. package/appPackages/_master/node_modules/@budibase/materialdesign-components/components.json +0 -249
  862. package/appPackages/_master/node_modules/@budibase/materialdesign-components/dist/index.js +0 -11282
  863. package/appPackages/_master/node_modules/@budibase/materialdesign-components/dist/index.js.map +0 -1
  864. package/appPackages/_master/node_modules/@budibase/materialdesign-components/package.json +0 -50
  865. package/appPackages/_master/node_modules/@budibase/standard-components/README.md +0 -33
  866. package/appPackages/_master/node_modules/@budibase/standard-components/components.json +0 -239
  867. package/appPackages/_master/node_modules/@budibase/standard-components/dist/generators.js +0 -198
  868. package/appPackages/_master/node_modules/@budibase/standard-components/dist/index.js +0 -3460
  869. package/appPackages/_master/node_modules/@budibase/standard-components/dist/index.js.map +0 -1
  870. package/appPackages/_master/node_modules/@budibase/standard-components/package.json +0 -38
  871. package/appPackages/_master/package-lock.json +0 -247
  872. package/appPackages/_master/package.json +0 -14
  873. package/appPackages/_master/pages/main/page.json +0 -199
  874. package/appPackages/_master/pages/main/screens/Apps List.json +0 -131
  875. package/appPackages/_master/pages/main/screens/Manage App.json +0 -292
  876. package/appPackages/_master/pages/main/screens/New App.json +0 -410
  877. package/appPackages/_master/pages/main/screens/New Instance.json +0 -227
  878. package/appPackages/_master/pages/unauthenticated/page.json +0 -83
  879. package/appPackages/_master/plugins.js +0 -3
  880. package/appPackages/_master/public/_shared/budibase-logo.png +0 -0
  881. package/appPackages/_master/public/main/budibase-client.js +0 -25115
  882. package/appPackages/_master/public/main/budibase-client.js.map +0 -1
  883. package/appPackages/_master/public/main/index.html +0 -48
  884. package/appPackages/_master/public/main/index.js +0 -3397
  885. package/appPackages/_master/public/main/index.js.map +0 -1
  886. package/appPackages/_master/public/unauthenticated/budibase-client.js +0 -25115
  887. package/appPackages/_master/public/unauthenticated/budibase-client.js.map +0 -1
  888. package/appPackages/_master/public/unauthenticated/index.html +0 -40
  889. package/appPackages/_master/public/unauthenticated/index.js +0 -3397
  890. package/appPackages/_master/public/unauthenticated/index.js.map +0 -1
  891. package/appPackages/_master/yarn.lock +0 -13
  892. package/builder/__app.html +0 -22
  893. package/builder/assets/budibase-emblem-white.svg +0 -29
  894. package/builder/assets/budibase-logo-only.png +0 -0
  895. package/builder/assets/budibase-logo-white.png +0 -0
  896. package/builder/assets/budibase-logo.png +0 -0
  897. package/builder/assets/javascript-logo.svg +0 -1
  898. package/builder/assets/roboto-v20-latin-ext_latin-300.woff +0 -0
  899. package/builder/assets/roboto-v20-latin-ext_latin-300.woff2 +0 -0
  900. package/builder/assets/roboto-v20-latin-ext_latin-500.woff +0 -0
  901. package/builder/assets/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  902. package/builder/assets/roboto-v20-latin-ext_latin-700.woff +0 -0
  903. package/builder/assets/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  904. package/builder/assets/roboto-v20-latin-ext_latin-900.woff +0 -0
  905. package/builder/assets/roboto-v20-latin-ext_latin-900.woff2 +0 -0
  906. package/builder/assets/roboto-v20-latin-ext_latin-regular.woff +0 -0
  907. package/builder/assets/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  908. package/builder/budibase-client.esm.mjs +0 -24948
  909. package/builder/budibase.css +0 -120
  910. package/builder/bundle.css +0 -70
  911. package/builder/bundle.css.map +0 -146
  912. package/builder/bundle.js +0 -99294
  913. package/builder/bundle.js.map +0 -1
  914. package/builder/codemirror.css +0 -349
  915. package/builder/favicon.png +0 -0
  916. package/builder/flatpickr.css +0 -784
  917. package/builder/fonts.css +0 -47
  918. package/builder/global.css +0 -111
  919. package/builder/monokai.css +0 -41
  920. package/builder/uikit.min.css +0 -1
  921. package/config.contributors.js +0 -13
  922. package/config.dev.js +0 -13
  923. package/config.sample.js +0 -33
  924. package/index.js +0 -24
  925. package/initialise/buildAppContext.js +0 -11
  926. package/initialise/createInstanceDb.js +0 -37
  927. package/initialise/createMasterDb.js +0 -34
  928. package/initialise/initialiseBudibase.js +0 -1
  929. package/initialise/initialiseRuntimePackages.js +0 -42
  930. package/middleware/routeHandlers/aggregatesPost.js +0 -12
  931. package/middleware/routeHandlers/appDefault.js +0 -21
  932. package/middleware/routeHandlers/authenticate.js +0 -15
  933. package/middleware/routeHandlers/changeMyPassword.js +0 -9
  934. package/middleware/routeHandlers/createTemporaryAccess.js +0 -17
  935. package/middleware/routeHandlers/createUser.js +0 -10
  936. package/middleware/routeHandlers/deleteRecord.js +0 -9
  937. package/middleware/routeHandlers/disableUser.js +0 -11
  938. package/middleware/routeHandlers/enableUser.js +0 -6
  939. package/middleware/routeHandlers/executeAction.js +0 -9
  940. package/middleware/routeHandlers/getAccessLevels.js +0 -6
  941. package/middleware/routeHandlers/getRecord.js +0 -15
  942. package/middleware/routeHandlers/getUsers.js +0 -6
  943. package/middleware/routeHandlers/helpers.js +0 -15
  944. package/middleware/routeHandlers/index.js +0 -45
  945. package/middleware/routeHandlers/listRecordsGet.js +0 -8
  946. package/middleware/routeHandlers/listRecordsPost.js +0 -12
  947. package/middleware/routeHandlers/lookupField.js +0 -14
  948. package/middleware/routeHandlers/postFiles.js +0 -13
  949. package/middleware/routeHandlers/saveAppHierarchy.js +0 -6
  950. package/middleware/routeHandlers/saveRecord.js +0 -6
  951. package/middleware/routeHandlers/setPasswordFromTemporaryCode.js +0 -20
  952. package/middleware/routeHandlers/upgradeData.js +0 -11
  953. package/middleware/routers.js +0 -330
  954. package/middleware/session.js +0 -24
  955. package/utilities/budibaseApi.js +0 -84
  956. package/utilities/builder/buildPage.js +0 -164
  957. package/utilities/builder/componentLibraryInfo.js +0 -77
  958. package/utilities/builder/convertCssToFiles.js +0 -43
  959. package/utilities/builder/deleteCodeMeta.js +0 -9
  960. package/utilities/builder/getPages.js +0 -20
  961. package/utilities/builder/index.js +0 -165
  962. package/utilities/builder/index.template.html +0 -44
  963. package/utilities/builder/listScreens.js +0 -48
  964. package/utilities/builder/publicPath.js +0 -3
  965. package/utilities/builder/saveBackend.js +0 -28
  966. package/utilities/constructHierarchy.js +0 -8
  967. package/utilities/createAppPackage.js +0 -101
  968. package/utilities/databaseManager.js +0 -4
  969. package/utilities/datastore.js +0 -2
  970. package/utilities/exceptions.js +0 -16
  971. package/utilities/injectedPlugins/createUser.js +0 -19
  972. package/utilities/injectedPlugins/disableUser.js +0 -3
  973. package/utilities/injectedPlugins/enableUser.js +0 -3
  974. package/utilities/injectedPlugins/index.js +0 -76
  975. package/utilities/masterAppInternal.js +0 -384
  976. package/utilities/runtimePackages.js +0 -34
  977. package/utilities/targzAppPackage.js +0 -119
@@ -0,0 +1,45 @@
1
+ import * as setup from "./utilities"
2
+ import { events } from "@budibase/backend-core"
3
+ import sdk from "../../../sdk"
4
+ import { checkBuilderEndpoint } from "./utilities/TestFunctions"
5
+
6
+ describe("/backups", () => {
7
+ let request = setup.getRequest()
8
+ let config = setup.getConfig()
9
+
10
+ afterAll(setup.afterAll)
11
+
12
+ beforeEach(async () => {
13
+ await config.init()
14
+ })
15
+
16
+ describe("exportAppDump", () => {
17
+ it("should be able to export app", async () => {
18
+ const res = await request
19
+ .get(`/api/backups/export?appId=${config.getAppId()}&appname=test`)
20
+ .set(config.defaultHeaders())
21
+ .expect(200)
22
+ expect(res.headers["content-type"]).toEqual("application/gzip")
23
+ expect(events.app.exported).toBeCalledTimes(1)
24
+ })
25
+
26
+ it("should apply authorization to endpoint", async () => {
27
+ await checkBuilderEndpoint({
28
+ config,
29
+ method: "GET",
30
+ url: `/api/backups/export?appId=${config.getAppId()}`,
31
+ })
32
+ })
33
+ })
34
+
35
+ describe("calculateBackupStats", () => {
36
+ it("should be able to calculate the backup statistics", async () => {
37
+ await config.createAutomation()
38
+ await config.createScreen()
39
+ let res = await sdk.backups.calculateBackupStats(config.getAppId()!)
40
+ expect(res.automations).toEqual(1)
41
+ expect(res.datasources).toEqual(1)
42
+ expect(res.screens).toEqual(1)
43
+ })
44
+ })
45
+ })
@@ -0,0 +1,54 @@
1
+ import { App } from "@budibase/types"
2
+
3
+ jest.setTimeout(30000)
4
+
5
+ import { AppStatus } from "../../../db/utils"
6
+
7
+ import * as setup from "./utilities"
8
+
9
+ import { wipeDb } from "./utilities/TestFunctions"
10
+ import { tenancy } from "@budibase/backend-core"
11
+
12
+ describe("/cloud", () => {
13
+ let request = setup.getRequest()!
14
+ let config = setup.getConfig()
15
+
16
+ afterAll(setup.afterAll)
17
+
18
+ beforeAll(async () => {
19
+ // Importing is only allowed in self hosted environments
20
+ await config.init()
21
+ config.modeSelf()
22
+ })
23
+
24
+ describe("import", () => {
25
+ it("should be able to import apps", async () => {
26
+ // first we need to delete any existing apps on the system so it looks clean otherwise the
27
+ // import will not run
28
+ await wipeDb()
29
+
30
+ // Perform the import
31
+ const res = await request
32
+ .post(`/api/cloud/import`)
33
+ .set(config.publicHeaders())
34
+ .attach("importFile", "src/api/routes/tests/data/export-test.tar.gz")
35
+ .expect(200)
36
+ expect(res.body.message).toEqual("Apps successfully imported.")
37
+
38
+ // get a count of apps after the import
39
+ const postImportApps = await request
40
+ .get(`/api/applications?status=${AppStatus.ALL}`)
41
+ .set(config.publicHeaders())
42
+ .expect("Content-Type", /json/)
43
+ .expect(200)
44
+
45
+ const apps = postImportApps.body as App[]
46
+ // There are two apps in the file that was imported so check for this
47
+ expect(apps.length).toEqual(2)
48
+ // The new tenant id was assigned to the imported apps
49
+ expect(tenancy.getTenantIDFromAppID(apps[0].appId)).toBe(
50
+ config.getTenantId()
51
+ )
52
+ })
53
+ })
54
+ })
@@ -0,0 +1,32 @@
1
+ const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
2
+ const setup = require("./utilities")
3
+
4
+ describe("/component", () => {
5
+ let request = setup.getRequest()
6
+ let config = setup.getConfig()
7
+
8
+ afterAll(setup.afterAll)
9
+
10
+ beforeAll(async () => {
11
+ await config.init()
12
+ })
13
+
14
+ describe("fetch definitions", () => {
15
+ it("should be able to fetch definitions", async () => {
16
+ const res = await request
17
+ .get(`/api/${config.getAppId()}/components/definitions`)
18
+ .set(config.defaultHeaders())
19
+ .expect("Content-Type", /json/)
20
+ .expect(200)
21
+ expect(res.body["@budibase/standard-components/container"]).toBeDefined()
22
+ })
23
+
24
+ it("should apply authorization to endpoint", async () => {
25
+ await checkBuilderEndpoint({
26
+ config,
27
+ method: "GET",
28
+ url: `/api/${config.getAppId()}/components/definitions`,
29
+ })
30
+ })
31
+ })
32
+ })
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1,3 @@
1
+ {"version":"1.2.9","db_type":"http","start_time":"2022-08-31T13:18:50.740Z","db_info":{"db_name":"app_dev_default_c45f987cfa274060840878557ff2f547","purge_seq":"0-g1AAAABXeJzLYWBgYMpgTmEQTM4vTc5ISXIwNDLXMwBCwxyQVB4LkGRoAFL_gSArkQGP2kSGpHqIoiwAtOgYRA","update_seq":"28-g1AAAABXeJzLYWBgYMpgTmEQTM4vTc5ISXIwNDLXMwBCwxyQVB4LkGRoAFL_gSArkQ2P2kSGpHqwIrEsALX-GGA","sizes":{"file":233890,"external":5856,"active":19326},"props":{},"doc_del_count":0,"doc_count":7,"disk_format_version":8,"compact_running":false,"cluster":{"q":2,"n":1,"w":1,"r":1},"instance_start_time":"0","host":"http://localhost:10000/db/app_dev_default_c45f987cfa274060840878557ff2f547/","auto_compaction":false,"adapter":"http"}}
2
+ {"docs":[{"_id":"_design/database","_rev":"4-afb0361e5ebb6b7e464c6c146ac3f559","views":{"by_link":{"map":"function (doc) {\n // everything in this must remain constant as its going to Pouch, no external variables\n if (doc.type === \"link\") {\n let doc1 = doc.doc1;\n let doc2 = doc.doc2;\n emit([doc1.tableId, doc1.rowId], {\n id: doc2.rowId,\n thisId: doc1.rowId,\n fieldName: doc1.fieldName,\n });\n // if linking to same table can't emit twice\n if (doc1.tableId !== doc2.tableId) {\n emit([doc2.tableId, doc2.rowId], {\n id: doc1.rowId,\n thisId: doc2.rowId,\n fieldName: doc2.fieldName,\n });\n }\n }\n }"},"screen_routes":{"map":"function(doc) {\n if (doc._id.startsWith(\"screen_\")) {\n emit(doc._id, {\n id: doc._id,\n routing: doc.routing,\n })\n }\n }"}},"indexes":{"rows":{"index":"function (doc) {\n function idx(input, prev) {\n for (let key of Object.keys(input)) {\n let idxKey = prev != null ? `${prev}.${key}` : key;\n idxKey = idxKey.replace(/ /g, \"_\");\n if (Array.isArray(input[key])) {\n for (let val of input[key]) {\n if (typeof val !== \"object\") {\n // eslint-disable-next-line no-undef\n index(idxKey, val, { store: true });\n }\n }\n }\n else if (key === \"_id\" || key === \"_rev\" || input[key] == null) {\n continue;\n }\n if (typeof input[key] === \"string\") {\n // eslint-disable-next-line no-undef\n index(idxKey, input[key].toLowerCase(), { store: true });\n }\n else if (typeof input[key] !== \"object\") {\n // eslint-disable-next-line no-undef\n index(idxKey, input[key], { store: true });\n }\n else {\n idx(input[key], idxKey);\n }\n }\n }\n if (doc._id.startsWith(\"ro_\")) {\n // eslint-disable-next-line no-undef\n index(\"default\", doc._id);\n idx(doc);\n }\n }","analyzer":"keyword"}},"_revisions":{"start":4,"ids":["afb0361e5ebb6b7e464c6c146ac3f559","d1eafe2832e6554b5d348e16d6a1b0d3","6e20795c5ba67179b478f0337a585b56","0b24e44a44af45e51e562fd124ce3007"]}},{"_id":"app_metadata","_rev":"8-9c8540f72e647e3ca7108978e862ff17","appId":"app_dev_default_c45f987cfa274060840878557ff2f547","type":"app","version":"1.0.79-alpha.7","componentLibraries":["@budibase/standard-components"],"name":"Old App","url":"/old%20app","instance":{"_id":"app_dev_default_c45f987cfa274060840878557ff2f547"},"tenantId":"default","updatedAt":"2022-08-31T13:18:05.273Z","createdAt":"2022-08-31T13:16:36.639Z","status":"development","customTheme":{"navBackground":"var(--spectrum-global-color-blue-600)","navTextColor":"var(--spectrum-global-color-gray-50)","buttonBorderRadius":"4px","primaryColor":"var(--spectrum-global-color-red-600)"},"_revisions":{"start":8,"ids":["9c8540f72e647e3ca7108978e862ff17","5c86ff8a96e1f3b4505e205f25a92656","75473d58cf92b61dbcdcd74157f9e2e1","ebc34a96a7ad678bae76d7d70880f4de","1c7397be4ef470d66bd0fd4b3fe4a002","89222c47e9d254b4885e1818cd0aac79","66bed1c391eabcea6ad3557d8ede5f27","0f1136445fd7c2cf73bb5cf41aaa19d2"]}},{"_id":"layout_private_master","_rev":"12-fa664c0538f1478b2a3695c8909a04e9","componentLibraries":["@budibase/standard-components"],"title":"Old App","favicon":"./_shared/favicon.png","stylesheets":[],"name":"Navigation Layout","props":{"_id":"4f569166-a4f3-47ea-a09e-6d218c75586f","_instanceName":"Navigation Layout","_component":"@budibase/standard-components/layout","_children":[{"_id":"7fcf11e4-6f5b-4085-8e0d-9f3d44c98967","_component":"@budibase/standard-components/screenslot","_instanceName":"Screen slot","_styles":{"normal":{"flex":"1 1 auto","display":"flex","flex-direction":"column","justify-content":"flex-start","align-items":"stretch"},"hover":{},"active":{},"selected":{}},"_children":[]}],"_styles":{"active":{},"hover":{},"normal":{},"selected":{}},"title":"Custom Title","navigation":"Left","width":"Small","links":[{"text":"Home","url":"/"}],"hideLogo":true,"hideTitle":false},"_revisions":{"start":12,"ids":["fa664c0538f1478b2a3695c8909a04e9","54b4084d5c10369ecd7a3b33d4cb7775","61e5d376e9f00d20d9905bf011680943","f222416fe5bcf0085ceb72bdc94327c1","b6d9abe1caa1a8ffec0b1e8cb7324c4b","85a347b8c8acb5ad4e31929384062e05","a7ce68d677f2fa7e9a0d54b2fb4275bb","83811e8befcdac752cdbe16cd8b33fa0","362cb9ad2c87ef9c92c58c0a41ed69d4","0a3bba6cdc98539abb3a4e98e13ef98a","d964020cc8907b37047bcd2bd1387735","156b45a34bbee17b6a4a97bfaaeb6f90"]}},{"_id":"layout_public_master","_rev":"1-c7d57c9c42e9e8f988d82f0e6cc7d32c","componentLibraries":["@budibase/standard-components"],"title":"Old App","favicon":"./_shared/favicon.png","stylesheets":[],"name":"Empty Layout","props":{"_id":"3723ffa1-f9e0-4c05-8013-98195c788ed6","_instanceName":"Empty Layout","_component":"@budibase/standard-components/layout","_children":[{"_id":"7fcf11e4-6f5b-4085-8e0d-9f3d44c98967","_component":"@budibase/standard-components/screenslot","_instanceName":"Screen slot","_styles":{"normal":{"flex":"1 1 auto","display":"flex","flex-direction":"column","justify-content":"flex-start","align-items":"stretch"},"hover":{},"active":{},"selected":{}},"_children":[]}],"_styles":{"active":{},"hover":{},"normal":{},"selected":{}},"navigation":"None","width":"Large","links":[{"text":"Home","url":"/"}]}},{"_id":"screen_c483ef802772479196a28c8a6eafe6a5","_rev":"1-db29ceb02c9c6c1ade847c8086d28a70","layoutId":"layout_private_master","props":{"_id":"cafd93b74e18b45a49a58c894d7ef29b4","_component":"@budibase/standard-components/container","_styles":{"normal":{},"hover":{},"active":{},"selected":{}},"_children":[],"_instanceName":"Home","direction":"column","hAlign":"stretch","vAlign":"top","size":"grow","gap":"M"},"routing":{"route":"/home","roleId":"BASIC"},"name":"cafd93b74e18b45a49a58c894d7ef29b4","template":"createFromScratch"},{"_id":"ta_users","_rev":"1-30a4344f056c24cf776d5736eb3c7ed5","type":"table","views":{},"name":"Users","schema":{"email":{"type":"string","constraints":{"type":"string","email":true,"length":{"maximum":""},"presence":true},"fieldName":"email","name":"email"},"firstName":{"name":"firstName","fieldName":"firstName","type":"string","constraints":{"type":"string","presence":false}},"lastName":{"name":"lastName","fieldName":"lastName","type":"string","constraints":{"type":"string","presence":false}},"roleId":{"fieldName":"roleId","name":"roleId","type":"options","constraints":{"type":"string","presence":false,"inclusion":["ADMIN","POWER","BASIC","PUBLIC"]}},"status":{"fieldName":"status","name":"status","type":"options","constraints":{"type":"string","presence":false,"inclusion":["active","inactive"]}}},"primaryDisplay":"email"}]}
3
+ {"seq":"28-g1AAAACbeJzLYWBgYMpgTmEQTM4vTc5ISXIwNDLXMwBCwxyQVCJDUv3___-zMpgTxXKBAuxJiZYGxgZG2DTgMSaPBUgyNACp_1DT2MCmGRmZWBglG2PTlwUAEaUn-w"}
@@ -0,0 +1,238 @@
1
+ jest.mock("pg")
2
+ import * as setup from "./utilities"
3
+ import { checkBuilderEndpoint } from "./utilities/TestFunctions"
4
+ import { checkCacheForDynamicVariable } from "../../../threads/utils"
5
+ import { context, events } from "@budibase/backend-core"
6
+ import sdk from "../../../sdk"
7
+
8
+ import tk from "timekeeper"
9
+ import { mocks } from "@budibase/backend-core/tests"
10
+ tk.freeze(mocks.date.MOCK_DATE)
11
+
12
+ let { basicDatasource } = setup.structures
13
+ const pg = require("pg")
14
+
15
+ describe("/datasources", () => {
16
+ let request = setup.getRequest()
17
+ let config = setup.getConfig()
18
+ let datasource: any
19
+
20
+ afterAll(setup.afterAll)
21
+
22
+ async function setupTest() {
23
+ await config.init()
24
+ datasource = await config.createDatasource()
25
+ jest.clearAllMocks()
26
+ }
27
+
28
+ beforeAll(setupTest)
29
+
30
+ describe("create", () => {
31
+ it("should create a new datasource", async () => {
32
+ const res = await request
33
+ .post(`/api/datasources`)
34
+ .send(basicDatasource())
35
+ .set(config.defaultHeaders())
36
+ .expect("Content-Type", /json/)
37
+ .expect(200)
38
+
39
+ expect(res.body.datasource.name).toEqual("Test")
40
+ expect(res.body.errors).toBeUndefined()
41
+ expect(events.datasource.created).toBeCalledTimes(1)
42
+ })
43
+ })
44
+
45
+ describe("update", () => {
46
+ it("should update an existing datasource", async () => {
47
+ datasource.name = "Updated Test"
48
+ const res = await request
49
+ .put(`/api/datasources/${datasource._id}`)
50
+ .send(datasource)
51
+ .set(config.defaultHeaders())
52
+ .expect("Content-Type", /json/)
53
+ .expect(200)
54
+
55
+ expect(res.body.datasource.name).toEqual("Updated Test")
56
+ expect(res.body.errors).toBeUndefined()
57
+ expect(events.datasource.updated).toBeCalledTimes(1)
58
+ })
59
+
60
+ describe("dynamic variables", () => {
61
+ async function preview(
62
+ datasource: any,
63
+ fields: { path: string; queryString: string }
64
+ ) {
65
+ return config.previewQuery(
66
+ request,
67
+ config,
68
+ datasource,
69
+ fields,
70
+ undefined,
71
+ ""
72
+ )
73
+ }
74
+
75
+ it("should invalidate changed or removed variables", async () => {
76
+ const { datasource, query } = await config.dynamicVariableDatasource()
77
+ // preview once to cache variables
78
+ await preview(datasource, {
79
+ path: "www.test.com",
80
+ queryString: "test={{ variable3 }}",
81
+ })
82
+ // check variables in cache
83
+ let contents = await checkCacheForDynamicVariable(
84
+ query._id,
85
+ "variable3"
86
+ )
87
+ expect(contents.rows.length).toEqual(1)
88
+
89
+ // update the datasource to remove the variables
90
+ datasource.config.dynamicVariables = []
91
+ const res = await request
92
+ .put(`/api/datasources/${datasource._id}`)
93
+ .send(datasource)
94
+ .set(config.defaultHeaders())
95
+ .expect("Content-Type", /json/)
96
+ .expect(200)
97
+ expect(res.body.errors).toBeUndefined()
98
+
99
+ // check variables no longer in cache
100
+ contents = await checkCacheForDynamicVariable(query._id, "variable3")
101
+ expect(contents).toBe(null)
102
+ })
103
+ })
104
+ })
105
+
106
+ describe("fetch", () => {
107
+ beforeAll(setupTest)
108
+
109
+ it("returns all the datasources from the server", async () => {
110
+ const res = await request
111
+ .get(`/api/datasources`)
112
+ .set(config.defaultHeaders())
113
+ .expect("Content-Type", /json/)
114
+ .expect(200)
115
+
116
+ const datasources = res.body
117
+
118
+ // remove non-deterministic fields
119
+ for (let source of datasources) {
120
+ delete source._id
121
+ delete source._rev
122
+ }
123
+
124
+ expect(datasources).toMatchSnapshot()
125
+ })
126
+
127
+ it("should apply authorization to endpoint", async () => {
128
+ await checkBuilderEndpoint({
129
+ config,
130
+ method: "GET",
131
+ url: `/api/datasources`,
132
+ })
133
+ })
134
+ })
135
+
136
+ describe("find", () => {
137
+ it("should be able to find a datasource", async () => {
138
+ const res = await request
139
+ .get(`/api/datasources/${datasource._id}`)
140
+ .set(config.defaultHeaders())
141
+ .expect(200)
142
+ expect(res.body._rev).toBeDefined()
143
+ expect(res.body._id).toEqual(datasource._id)
144
+ })
145
+ })
146
+
147
+ describe("query", () => {
148
+ it("should be able to query a pg datasource", async () => {
149
+ const res = await request
150
+ .post(`/api/datasources/query`)
151
+ .send({
152
+ endpoint: {
153
+ datasourceId: datasource._id,
154
+ operation: "READ",
155
+ // table name below
156
+ entityId: "users",
157
+ },
158
+ resource: {
159
+ fields: ["users.name", "users.age"],
160
+ },
161
+ filters: {
162
+ string: {
163
+ name: "John",
164
+ },
165
+ },
166
+ })
167
+ .set(config.defaultHeaders())
168
+ .expect(200)
169
+ // this is mock data, can't test it
170
+ expect(res.body).toBeDefined()
171
+ const expSql = `select "users"."name" as "users.name", "users"."age" as "users.age" from (select * from "users" where "users"."name" ilike $1 limit $2) as "users"`
172
+ expect(pg.queryMock).toHaveBeenCalledWith(expSql, ["John%", 5000])
173
+ })
174
+ })
175
+
176
+ describe("destroy", () => {
177
+ beforeAll(setupTest)
178
+
179
+ it("deletes queries for the datasource after deletion and returns a success message", async () => {
180
+ await config.createQuery()
181
+
182
+ await request
183
+ .delete(`/api/datasources/${datasource._id}/${datasource._rev}`)
184
+ .set(config.defaultHeaders())
185
+ .expect(200)
186
+
187
+ const res = await request
188
+ .get(`/api/datasources`)
189
+ .set(config.defaultHeaders())
190
+ .expect("Content-Type", /json/)
191
+ .expect(200)
192
+
193
+ expect(res.body.length).toEqual(1)
194
+ expect(events.datasource.deleted).toBeCalledTimes(1)
195
+ })
196
+
197
+ it("should apply authorization to endpoint", async () => {
198
+ await checkBuilderEndpoint({
199
+ config,
200
+ method: "DELETE",
201
+ url: `/api/datasources/${datasource._id}/${datasource._rev}`,
202
+ })
203
+ })
204
+ })
205
+
206
+ describe("check secret replacement", () => {
207
+ async function makeDatasource() {
208
+ datasource = basicDatasource()
209
+ datasource.datasource.config.password = "testing"
210
+ const res = await request
211
+ .post(`/api/datasources`)
212
+ .send(datasource)
213
+ .set(config.defaultHeaders())
214
+ .expect("Content-Type", /json/)
215
+ .expect(200)
216
+ return res.body.datasource
217
+ }
218
+
219
+ it("should save a datasource with password", async () => {
220
+ const datasource = await makeDatasource()
221
+ expect(datasource.config.password).toBe("--secret-value--")
222
+ })
223
+
224
+ it("should not the password on update with the --secret-value--", async () => {
225
+ const datasource = await makeDatasource()
226
+ await request
227
+ .put(`/api/datasources/${datasource._id}`)
228
+ .send(datasource)
229
+ .set(config.defaultHeaders())
230
+ .expect("Content-Type", /json/)
231
+ .expect(200)
232
+ await context.doInAppContext(config.getAppId(), async () => {
233
+ const dbDatasource: any = await sdk.datasources.get(datasource._id)
234
+ expect(dbDatasource.config.password).toBe("testing")
235
+ })
236
+ })
237
+ })
238
+ })
@@ -0,0 +1,40 @@
1
+ const setup = require("./utilities")
2
+ const { events } = require("@budibase/backend-core")
3
+ const version = require("../../../../package.json").version
4
+
5
+ describe("/dev", () => {
6
+ let request = setup.getRequest()
7
+ let config = setup.getConfig()
8
+
9
+ afterAll(setup.afterAll)
10
+
11
+ beforeAll(async () => {
12
+ await config.init()
13
+ jest.clearAllMocks()
14
+ })
15
+
16
+ describe("revert", () => {
17
+ it("should revert the application", async () => {
18
+ await request
19
+ .post(`/api/dev/${config.getAppId()}/revert`)
20
+ .set(config.defaultHeaders())
21
+ .expect("Content-Type", /json/)
22
+ .expect(200)
23
+ expect(events.app.reverted).toBeCalledTimes(1)
24
+ })
25
+ })
26
+
27
+ describe("version", () => {
28
+ it("should get the installation version", async () => {
29
+ const res = await request
30
+ .get(`/api/dev/version`)
31
+ .set(config.defaultHeaders())
32
+ .expect("Content-Type", /json/)
33
+ .expect(200)
34
+
35
+ expect(res.body.version).toBe(version)
36
+ expect(events.installation.versionChecked).toBeCalledTimes(1)
37
+ expect(events.installation.versionChecked).toBeCalledWith(version)
38
+ })
39
+ })
40
+ })
@@ -0,0 +1,144 @@
1
+ const pg = require("pg")
2
+ jest.mock("pg", () => {
3
+ return {
4
+ Client: jest.fn().mockImplementation(() => ({
5
+ connect: jest.fn(),
6
+ query: jest.fn().mockImplementation(() => ({ rows: [] })),
7
+ end: jest.fn().mockImplementation((fn: any) => fn()),
8
+ })),
9
+ queryMock: jest.fn().mockImplementation(() => {}),
10
+ on: jest.fn(),
11
+ }
12
+ })
13
+ import * as setup from "./utilities"
14
+ import { mocks } from "@budibase/backend-core/tests"
15
+ import { env, events } from "@budibase/backend-core"
16
+ const structures = setup.structures
17
+
18
+ env._set("ENCRYPTION_KEY", "budibase")
19
+ mocks.licenses.useEnvironmentVariables()
20
+
21
+ describe("/api/env/variables", () => {
22
+ let request = setup.getRequest()
23
+ let config = setup.getConfig()
24
+
25
+ afterAll(setup.afterAll)
26
+
27
+ beforeAll(async () => {
28
+ await config.init()
29
+ })
30
+
31
+ it("should be able check the status of env var API", async () => {
32
+ const res = await request
33
+ .get(`/api/env/variables/status`)
34
+ .set(config.defaultHeaders())
35
+ .expect("Content-Type", /json/)
36
+ .expect(200)
37
+
38
+ expect(res.body.encryptionKeyAvailable).toEqual(true)
39
+ })
40
+
41
+ it("should be able to create an environment variable", async () => {
42
+ await request
43
+ .post(`/api/env/variables`)
44
+ .send(structures.basicEnvironmentVariable("test", "test"))
45
+ .set(config.defaultHeaders())
46
+ .expect(200)
47
+ })
48
+
49
+ it("should be able to fetch the 'test' variable name", async () => {
50
+ const res = await request
51
+ .get(`/api/env/variables`)
52
+ .set(config.defaultHeaders())
53
+ .expect("Content-Type", /json/)
54
+ .expect(200)
55
+ expect(res.body.variables.length).toEqual(1)
56
+ expect(res.body.variables[0]).toEqual("test")
57
+ })
58
+
59
+ it("should be able to update the environment variable 'test'", async () => {
60
+ const varName = "test"
61
+ await request
62
+ .patch(`/api/env/variables/${varName}`)
63
+ .send(structures.basicEnvironmentVariable("test", "test1"))
64
+ .set(config.defaultHeaders())
65
+ .expect(200)
66
+ })
67
+
68
+ it("should be able to delete the environment variable 'test'", async () => {
69
+ const varName = "test"
70
+ await request
71
+ .delete(`/api/env/variables/${varName}`)
72
+ .set(config.defaultHeaders())
73
+ .expect(200)
74
+ })
75
+
76
+ it("should create a datasource (using the environment variable) and query", async () => {
77
+ const datasourceBase = structures.basicDatasource()
78
+ await request
79
+ .post(`/api/env/variables`)
80
+ .send(structures.basicEnvironmentVariable("test", "test"))
81
+ .set(config.defaultHeaders())
82
+
83
+ datasourceBase.datasource.config = {
84
+ password: "{{ env.test }}",
85
+ }
86
+ const response = await request
87
+ .post(`/api/datasources`)
88
+ .send(datasourceBase)
89
+ .set(config.defaultHeaders())
90
+ .expect("Content-Type", /json/)
91
+ .expect(200)
92
+ expect(response.body.datasource._id).toBeDefined()
93
+
94
+ const response2 = await request
95
+ .post(`/api/queries`)
96
+ .send(structures.basicQuery(response.body.datasource._id))
97
+ .set(config.defaultHeaders())
98
+ .expect("Content-Type", /json/)
99
+ .expect(200)
100
+ expect(response2.body._id).toBeDefined()
101
+ })
102
+
103
+ it("should run a query preview and check the mocked results", async () => {
104
+ const datasourceBase = structures.basicDatasource()
105
+ await request
106
+ .post(`/api/env/variables`)
107
+ .send(structures.basicEnvironmentVariable("test", "test"))
108
+ .set(config.defaultHeaders())
109
+
110
+ datasourceBase.datasource.config = {
111
+ password: "{{ env.test }}",
112
+ }
113
+ const response = await request
114
+ .post(`/api/datasources`)
115
+ .send(datasourceBase)
116
+ .set(config.defaultHeaders())
117
+ .expect("Content-Type", /json/)
118
+ .expect(200)
119
+ expect(response.body.datasource._id).toBeDefined()
120
+
121
+ const query = {
122
+ datasourceId: response.body.datasource._id,
123
+ parameters: {},
124
+ fields: {},
125
+ queryVerb: "read",
126
+ name: response.body.datasource.name,
127
+ }
128
+ const res = await request
129
+ .post(`/api/queries/preview`)
130
+ .send(query)
131
+ .set(config.defaultHeaders())
132
+ .expect("Content-Type", /json/)
133
+ .expect(200)
134
+ expect(res.body.rows.length).toEqual(0)
135
+ expect(events.query.previewed).toBeCalledTimes(1)
136
+ // API doesn't include config in response
137
+ delete response.body.datasource.config
138
+ expect(events.query.previewed).toBeCalledWith(
139
+ response.body.datasource,
140
+ query
141
+ )
142
+ expect(pg.Client).toHaveBeenCalledWith({ password: "test", ssl: undefined })
143
+ })
144
+ })
@@ -0,0 +1,52 @@
1
+ const { checkBuilderEndpoint } = require("./utilities/TestFunctions")
2
+ const setup = require("./utilities")
3
+
4
+ describe("/integrations", () => {
5
+ let request = setup.getRequest()
6
+ let config = setup.getConfig()
7
+
8
+ afterAll(setup.afterAll)
9
+
10
+ beforeAll(async () => {
11
+ await config.init()
12
+ })
13
+
14
+ describe("fetch", () => {
15
+ it("should be able to get all integration definitions", async () => {
16
+ const res = await request
17
+ .get(`/api/integrations`)
18
+ .set(config.defaultHeaders())
19
+ .expect("Content-Type", /json/)
20
+ .expect(200)
21
+ expect(res.body.POSTGRES).toBeDefined()
22
+ expect(res.body.POSTGRES.friendlyName).toEqual("PostgreSQL")
23
+ })
24
+
25
+ it("should apply authorization to endpoint", async () => {
26
+ await checkBuilderEndpoint({
27
+ config,
28
+ method: "GET",
29
+ url: `/api/integrations`,
30
+ })
31
+ })
32
+ })
33
+
34
+ describe("find", () => {
35
+ it("should be able to get postgres definition", async () => {
36
+ const res = await request
37
+ .get(`/api/integrations/POSTGRES`)
38
+ .set(config.defaultHeaders())
39
+ .expect("Content-Type", /json/)
40
+ .expect(200)
41
+ expect(res.body.friendlyName).toEqual("PostgreSQL")
42
+ })
43
+
44
+ it("should apply authorization to endpoint", async () => {
45
+ await checkBuilderEndpoint({
46
+ config,
47
+ method: "GET",
48
+ url: `/api/integrations/POSTGRES`,
49
+ })
50
+ })
51
+ })
52
+ })