@budibase/server 1.0.211 → 1.0.212-alpha.10

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 (240) hide show
  1. package/builder/assets/index.88005d52.js +978 -0
  2. package/builder/assets/index.c6912819.css +6 -0
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +438 -383
  5. package/coverage/coverage-final.json +11 -11
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/backup.js.html +9 -6
  10. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/dev.js.html +166 -13
  14. package/coverage/lcov-report/api/controllers/index.html +22 -22
  15. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +47 -17
  25. package/coverage/lcov-report/api/controllers/row/index.html +34 -34
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +95 -11
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +17 -8
  30. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  44. package/coverage/lcov-report/api/index.html +1 -1
  45. package/coverage/lcov-report/api/index.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/dev.js.html +5 -2
  56. package/coverage/lcov-report/api/routes/index.html +1 -1
  57. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  74. package/coverage/lcov-report/automations/actions.js.html +1 -1
  75. package/coverage/lcov-report/automations/automationUtils.js.html +57 -12
  76. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  77. package/coverage/lcov-report/automations/index.html +17 -17
  78. package/coverage/lcov-report/automations/index.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/index.html +1 -1
  86. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggers.js.html +4 -4
  105. package/coverage/lcov-report/constants/index.html +1 -1
  106. package/coverage/lcov-report/constants/index.js.html +1 -1
  107. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  108. package/coverage/lcov-report/constants/screens.js.html +1 -1
  109. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  110. package/coverage/lcov-report/db/index.html +10 -10
  111. package/coverage/lcov-report/db/index.js.html +1 -1
  112. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  116. package/coverage/lcov-report/db/newid.js.html +1 -1
  117. package/coverage/lcov-report/db/utils.js.html +9 -6
  118. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  119. package/coverage/lcov-report/events/index.html +1 -1
  120. package/coverage/lcov-report/events/index.js.html +1 -1
  121. package/coverage/lcov-report/events/utils.js.html +1 -1
  122. package/coverage/lcov-report/index.html +51 -51
  123. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  124. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  125. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  126. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  127. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  128. package/coverage/lcov-report/middleware/index.html +1 -1
  129. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  130. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  131. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  132. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  133. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  134. package/coverage/lcov-report/threads/automation.js.html +2 -2
  135. package/coverage/lcov-report/threads/index.html +1 -1
  136. package/coverage/lcov-report/threads/query.js.html +1 -1
  137. package/coverage/lcov-report/threads/utils.js.html +1 -1
  138. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  139. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  140. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  141. package/coverage/lcov-report/utilities/global.js.html +1 -1
  142. package/coverage/lcov-report/utilities/index.html +15 -15
  143. package/coverage/lcov-report/utilities/index.js.html +27 -9
  144. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  150. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  151. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  152. package/coverage/lcov-report/utilities/security.js.html +1 -1
  153. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  156. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  157. package/coverage/lcov-report/utilities/users.js.html +1 -1
  158. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  159. package/coverage/lcov.info +787 -694
  160. package/dist/api/controllers/application.js +1 -1
  161. package/dist/api/controllers/backup.js +3 -2
  162. package/dist/api/controllers/dev.js +40 -2
  163. package/dist/api/controllers/row/external.js +19 -7
  164. package/dist/api/controllers/row/internalSearch.js +22 -1
  165. package/dist/api/controllers/row/utils.js +3 -0
  166. package/dist/api/controllers/static/index.js +31 -2
  167. package/dist/api/routes/dev.js +2 -1
  168. package/dist/api/routes/static.js +1 -0
  169. package/dist/automations/automationUtils.js +16 -4
  170. package/dist/automations/triggers.js +1 -1
  171. package/dist/db/utils.js +1 -0
  172. package/dist/definitions/datasource.js +1 -0
  173. package/dist/environment.js +2 -1
  174. package/dist/integrations/airtable.js +1 -0
  175. package/dist/integrations/arangodb.js +1 -0
  176. package/dist/integrations/base/sql.js +20 -3
  177. package/dist/integrations/couchdb.js +1 -0
  178. package/dist/integrations/dynamodb.js +1 -0
  179. package/dist/integrations/elasticsearch.js +1 -0
  180. package/dist/integrations/firebase.js +1 -0
  181. package/dist/integrations/googlesheets.js +1 -0
  182. package/dist/integrations/index.js +4 -0
  183. package/dist/integrations/microsoftSqlServer.js +2 -1
  184. package/dist/integrations/mongodb.js +1 -0
  185. package/dist/integrations/mysql.js +2 -1
  186. package/dist/integrations/oracle.js +1 -0
  187. package/dist/integrations/postgres.js +2 -1
  188. package/dist/integrations/redis.js +1 -0
  189. package/dist/integrations/rest.js +1 -0
  190. package/dist/integrations/s3.js +1 -0
  191. package/dist/integrations/snowflake.js +102 -0
  192. package/dist/package.json +7 -6
  193. package/dist/threads/automation.js +1 -1
  194. package/dist/tsconfig.build.tsbuildinfo +1 -1
  195. package/dist/utilities/fileSystem/index.js +16 -6
  196. package/dist/utilities/fileSystem/utilities.js +2 -1
  197. package/dist/utilities/index.js +5 -1
  198. package/package.json +8 -7
  199. package/scripts/integrations/oracle/instantclient/linux/arm64/basiclite-19.10.zip +0 -0
  200. package/scripts/integrations/oracle/instantclient/linux/arm64/install.sh +23 -0
  201. package/scripts/integrations/oracle/instantclient/linux/install.sh +10 -0
  202. package/src/api/controllers/application.ts +5 -1
  203. package/src/api/controllers/backup.js +3 -2
  204. package/src/api/controllers/dev.js +53 -2
  205. package/src/api/controllers/row/external.js +19 -9
  206. package/src/api/controllers/row/internalSearch.js +28 -0
  207. package/src/api/controllers/row/utils.js +3 -0
  208. package/src/api/controllers/static/index.js +41 -2
  209. package/src/api/routes/dev.js +1 -0
  210. package/src/api/routes/static.ts +1 -0
  211. package/src/automations/automationUtils.js +19 -4
  212. package/src/automations/triggers.js +1 -1
  213. package/src/db/utils.js +1 -0
  214. package/src/definitions/common.ts +1 -0
  215. package/src/definitions/datasource.ts +2 -0
  216. package/src/environment.js +3 -1
  217. package/src/integrations/airtable.ts +1 -0
  218. package/src/integrations/arangodb.ts +1 -0
  219. package/src/integrations/base/sql.ts +25 -11
  220. package/src/integrations/couchdb.ts +1 -0
  221. package/src/integrations/dynamodb.ts +1 -0
  222. package/src/integrations/elasticsearch.ts +1 -0
  223. package/src/integrations/firebase.ts +1 -0
  224. package/src/integrations/googlesheets.ts +1 -0
  225. package/src/integrations/index.ts +4 -0
  226. package/src/integrations/microsoftSqlServer.ts +2 -0
  227. package/src/integrations/mongodb.ts +1 -0
  228. package/src/integrations/mysql.ts +2 -0
  229. package/src/integrations/oracle.ts +1 -0
  230. package/src/integrations/postgres.ts +2 -0
  231. package/src/integrations/redis.ts +1 -0
  232. package/src/integrations/rest.ts +1 -0
  233. package/src/integrations/s3.ts +1 -0
  234. package/src/integrations/snowflake.ts +99 -0
  235. package/src/threads/automation.js +1 -1
  236. package/src/utilities/fileSystem/index.js +22 -8
  237. package/src/utilities/fileSystem/utilities.js +2 -0
  238. package/src/utilities/index.js +7 -1
  239. package/builder/assets/index.24307ca0.css +0 -6
  240. package/builder/assets/index.4c5e5a40.js +0 -1315
@@ -17,6 +17,7 @@ module ElasticsearchModule {
17
17
  description:
18
18
  "Elasticsearch is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.",
19
19
  friendlyName: "ElasticSearch",
20
+ type: "Non-relational",
20
21
  datasource: {
21
22
  url: {
22
23
  type: DatasourceFieldTypes.STRING,
@@ -16,6 +16,7 @@ module Firebase {
16
16
  const SCHEMA: Integration = {
17
17
  docs: "https://firebase.google.com/docs/firestore/quickstart",
18
18
  friendlyName: "Firestore",
19
+ type: "Non-relational",
19
20
  description:
20
21
  "Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.",
21
22
  datasource: {
@@ -49,6 +49,7 @@ module GoogleSheetsModule {
49
49
  description:
50
50
  "Create and collaborate on online spreadsheets in real-time and from any device. ",
51
51
  friendlyName: "Google Sheets",
52
+ type: "Spreadsheet",
52
53
  datasource: {
53
54
  spreadsheetId: {
54
55
  display: "Google Sheet URL",
@@ -12,6 +12,7 @@ const rest = require("./rest")
12
12
  const googlesheets = require("./googlesheets")
13
13
  const firebase = require("./firebase")
14
14
  const redis = require("./redis")
15
+ const snowflake = require("./snowflake")
15
16
  const { SourceNames } = require("../definitions/datasource")
16
17
  const environment = require("../environment")
17
18
 
@@ -29,6 +30,7 @@ const DEFINITIONS = {
29
30
  [SourceNames.REST]: rest.schema,
30
31
  [SourceNames.FIRESTORE]: firebase.schema,
31
32
  [SourceNames.REDIS]: redis.schema,
33
+ [SourceNames.SNOWFLAKE]: snowflake.schema,
32
34
  }
33
35
 
34
36
  const INTEGRATIONS = {
@@ -46,6 +48,8 @@ const INTEGRATIONS = {
46
48
  [SourceNames.FIRESTORE]: firebase.integration,
47
49
  [SourceNames.GOOGLE_SHEETS]: googlesheets.integration,
48
50
  [SourceNames.REDIS]: redis.integration,
51
+ [SourceNames.FIREBASE]: firebase.integration,
52
+ [SourceNames.SNOWFLAKE]: snowflake.integration,
49
53
  }
50
54
 
51
55
  // optionally add oracle integration if the oracle binary can be installed
@@ -44,6 +44,7 @@ module MSSQLModule {
44
44
  description:
45
45
  "Microsoft SQL Server is a relational database management system developed by Microsoft. ",
46
46
  friendlyName: "MS SQL Server",
47
+ type: "Relational",
47
48
  datasource: {
48
49
  user: {
49
50
  type: DatasourceFieldTypes.STRING,
@@ -246,6 +247,7 @@ module MSSQLModule {
246
247
  autocolumn: !!autoColumns.find((col: string) => col === name),
247
248
  name: name,
248
249
  ...convertSqlType(def.DATA_TYPE),
250
+ externalType: def.DATA_TYPE,
249
251
  }
250
252
  }
251
253
  tables[tableName] = {
@@ -24,6 +24,7 @@ module MongoDBModule {
24
24
  const SCHEMA: Integration = {
25
25
  docs: "https://github.com/mongodb/node-mongodb-native",
26
26
  friendlyName: "MongoDB",
27
+ type: "Non-relational",
27
28
  description:
28
29
  "MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.",
29
30
  datasource: {
@@ -36,6 +36,7 @@ module MySQLModule {
36
36
  docs: "https://github.com/sidorares/node-mysql2",
37
37
  plus: true,
38
38
  friendlyName: "MySQL",
39
+ type: "Relational",
39
40
  description:
40
41
  "MySQL Database Service is a fully managed database service to deploy cloud-native applications. ",
41
42
  datasource: {
@@ -232,6 +233,7 @@ module MySQLModule {
232
233
  autocolumn: isAuto,
233
234
  constraints,
234
235
  ...convertSqlType(column.Type),
236
+ externalType: column.Type,
235
237
  }
236
238
  }
237
239
  if (!tables[tableName]) {
@@ -40,6 +40,7 @@ module OracleModule {
40
40
  docs: "https://github.com/oracle/node-oracledb",
41
41
  plus: true,
42
42
  friendlyName: "Oracle",
43
+ type: "Relational",
43
44
  description:
44
45
  "Oracle Database is an object-relational database management system developed by Oracle Corporation",
45
46
  datasource: {
@@ -47,6 +47,7 @@ module PostgresModule {
47
47
  docs: "https://node-postgres.com",
48
48
  plus: true,
49
49
  friendlyName: "PostgreSQL",
50
+ type: "Relational",
50
51
  description:
51
52
  "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.",
52
53
  datasource: {
@@ -271,6 +272,7 @@ module PostgresModule {
271
272
  autocolumn: isAuto,
272
273
  name: columnName,
273
274
  ...convertSqlType(column.data_type),
275
+ externalType: column.data_type,
274
276
  }
275
277
  }
276
278
 
@@ -17,6 +17,7 @@ module RedisModule {
17
17
  docs: "https://redis.io/docs/",
18
18
  description: "",
19
19
  friendlyName: "Redis",
20
+ type: "Non-relational",
20
21
  datasource: {
21
22
  host: {
22
23
  type: "string",
@@ -64,6 +64,7 @@ module RestModule {
64
64
  description:
65
65
  "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.",
66
66
  friendlyName: "REST API",
67
+ type: "API",
67
68
  datasource: {
68
69
  url: {
69
70
  type: DatasourceFieldTypes.STRING,
@@ -17,6 +17,7 @@ module S3Module {
17
17
  description:
18
18
  "Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance.",
19
19
  friendlyName: "Amazon S3",
20
+ type: "Object store",
20
21
  datasource: {
21
22
  region: {
22
23
  type: "string",
@@ -0,0 +1,99 @@
1
+ import { Integration, QueryTypes, SqlQuery } from "../definitions/datasource"
2
+ import { Snowflake } from "snowflake-promise"
3
+
4
+ module SnowflakeModule {
5
+ interface SnowflakeConfig {
6
+ account: string
7
+ username: string
8
+ password: string
9
+ warehouse: string
10
+ database: string
11
+ schema: string
12
+ }
13
+
14
+ const SCHEMA: Integration = {
15
+ docs: "https://developers.snowflake.com/",
16
+ description:
17
+ "Snowflake is a solution for data warehousing, data lakes, data engineering, data science, data application development, and securely sharing and consuming shared data.",
18
+ friendlyName: "Snowflake",
19
+ type: "Relational",
20
+ datasource: {
21
+ account: {
22
+ type: "string",
23
+ required: true,
24
+ },
25
+ username: {
26
+ type: "string",
27
+ required: true,
28
+ },
29
+ password: {
30
+ type: "password",
31
+ required: true,
32
+ },
33
+ warehouse: {
34
+ type: "string",
35
+ required: true,
36
+ },
37
+ database: {
38
+ type: "string",
39
+ required: true,
40
+ },
41
+ schema: {
42
+ type: "string",
43
+ required: true,
44
+ },
45
+ },
46
+ query: {
47
+ create: {
48
+ type: QueryTypes.SQL,
49
+ },
50
+ read: {
51
+ type: QueryTypes.SQL,
52
+ },
53
+ update: {
54
+ type: QueryTypes.SQL,
55
+ },
56
+ delete: {
57
+ type: QueryTypes.SQL,
58
+ },
59
+ },
60
+ }
61
+
62
+ class SnowflakeIntegration {
63
+ private client: Snowflake
64
+
65
+ constructor(config: SnowflakeConfig) {
66
+ this.client = new Snowflake(config)
67
+ }
68
+
69
+ async internalQuery(query: SqlQuery) {
70
+ await this.client.connect()
71
+ try {
72
+ return await this.client.execute(query.sql)
73
+ } catch (err: any) {
74
+ throw err?.message.split(":")[1] || err?.message
75
+ }
76
+ }
77
+
78
+ async create(query: SqlQuery) {
79
+ return this.internalQuery(query)
80
+ }
81
+
82
+ async read(query: SqlQuery) {
83
+ return this.internalQuery(query)
84
+ }
85
+
86
+ async update(query: SqlQuery) {
87
+ return this.internalQuery(query)
88
+ }
89
+
90
+ async delete(query: SqlQuery) {
91
+ return this.internalQuery(query)
92
+ }
93
+ }
94
+
95
+ module.exports = {
96
+ schema: SCHEMA,
97
+ integration: SnowflakeIntegration,
98
+ }
99
+ }
@@ -218,7 +218,7 @@ class Orchestrator {
218
218
  }
219
219
  }
220
220
  if (
221
- index === parseInt(env.AUTOMATION_MAX_ITERATIONS) ||
221
+ index === env.AUTOMATION_MAX_ITERATION ||
222
222
  index === parseInt(loopStep.inputs.iterations)
223
223
  ) {
224
224
  this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
@@ -21,6 +21,7 @@ const env = require("../../environment")
21
21
  const {
22
22
  USER_METDATA_PREFIX,
23
23
  LINK_USER_METADATA_PREFIX,
24
+ TABLE_ROW_PREFIX,
24
25
  } = require("../../db/utils")
25
26
  const MemoryStream = require("memorystream")
26
27
  const { getAppId } = require("@budibase/backend-core/context")
@@ -109,6 +110,23 @@ exports.apiFileReturn = contents => {
109
110
  return fs.createReadStream(path)
110
111
  }
111
112
 
113
+ exports.defineFilter = excludeRows => {
114
+ if (excludeRows) {
115
+ return doc =>
116
+ !(
117
+ doc._id.includes(USER_METDATA_PREFIX) ||
118
+ doc._id.includes(LINK_USER_METADATA_PREFIX) ||
119
+ doc._id.includes(TABLE_ROW_PREFIX)
120
+ )
121
+ } else if (!excludeRows) {
122
+ return doc =>
123
+ !(
124
+ doc._id.includes(USER_METDATA_PREFIX) ||
125
+ doc._id.includes(LINK_USER_METADATA_PREFIX)
126
+ )
127
+ }
128
+ }
129
+
112
130
  /**
113
131
  * Local utility to back up the database state for an app, excluding global user
114
132
  * data or user relationships.
@@ -116,14 +134,10 @@ exports.apiFileReturn = contents => {
116
134
  * @param {object} config Config to send to export DB
117
135
  * @returns {*} either a string or a stream of the backup
118
136
  */
119
- const backupAppData = async (appId, config) => {
137
+ const backupAppData = async (appId, config, includeRows) => {
120
138
  return await exports.exportDB(appId, {
121
139
  ...config,
122
- filter: doc =>
123
- !(
124
- doc._id.includes(USER_METDATA_PREFIX) ||
125
- doc._id.includes(LINK_USER_METADATA_PREFIX)
126
- ),
140
+ filter: exports.defineFilter(includeRows),
127
141
  })
128
142
  }
129
143
 
@@ -142,8 +156,8 @@ exports.performBackup = async (appId, backupName) => {
142
156
  * @param {string} appId The ID of the app which is to be backed up.
143
157
  * @returns {*} a readable stream of the backup which is written in real time
144
158
  */
145
- exports.streamBackup = async appId => {
146
- return await backupAppData(appId, { stream: true })
159
+ exports.streamBackup = async (appId, includeRows) => {
160
+ return await backupAppData(appId, { stream: true }, includeRows)
147
161
  }
148
162
 
149
163
  /**
@@ -9,6 +9,7 @@ const {
9
9
  deleteFolder,
10
10
  uploadDirectory,
11
11
  downloadTarball,
12
+ downloadTarballDirect,
12
13
  } = require("@budibase/backend-core/objectStore")
13
14
 
14
15
  /***********************************
@@ -29,4 +30,5 @@ exports.retrieveToTmp = retrieveToTmp
29
30
  exports.deleteFolder = deleteFolder
30
31
  exports.uploadDirectory = uploadDirectory
31
32
  exports.downloadTarball = downloadTarball
33
+ exports.downloadTarballDirect = downloadTarballDirect
32
34
  exports.deleteFiles = deleteFiles
@@ -54,11 +54,17 @@ exports.objectStoreUrl = () => {
54
54
  * @return {string} The URL to be inserted into appPackage response or server rendered
55
55
  * app index file.
56
56
  */
57
- exports.clientLibraryPath = (appId, version) => {
57
+ exports.clientLibraryPath = (appId, version, ctx) => {
58
58
  if (env.isProd()) {
59
+ // TODO: remove - for beta testing UI
60
+ if (ctx && ctx.cookies.get("beta:design_ui")) {
61
+ return "https://cdn.budi.live/beta:design_ui/budibase-client.js"
62
+ }
63
+
59
64
  let url = `${exports.objectStoreUrl()}/${sanitizeKey(
60
65
  appId
61
66
  )}/budibase-client.js`
67
+
62
68
  // append app version to bust the cache
63
69
  if (version) {
64
70
  url += `?v=${version}`