@budibase/server 1.0.193 → 1.0.196

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 (177) hide show
  1. package/builder/assets/index.24307ca0.css +6 -0
  2. package/builder/assets/{index.e175bec8.js → index.815964ef.js} +182 -182
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +17 -5
  5. package/coverage/coverage-final.json +1 -1
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +1 -1
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  45. package/coverage/lcov-report/api/index.html +1 -1
  46. package/coverage/lcov-report/api/index.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/index.html +1 -1
  58. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  72. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  75. package/coverage/lcov-report/automations/actions.js.html +1 -1
  76. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  77. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  78. package/coverage/lcov-report/automations/index.html +1 -1
  79. package/coverage/lcov-report/automations/index.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/index.html +1 -1
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  106. package/coverage/lcov-report/constants/index.html +1 -1
  107. package/coverage/lcov-report/constants/index.js.html +1 -1
  108. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  109. package/coverage/lcov-report/constants/screens.js.html +1 -1
  110. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  111. package/coverage/lcov-report/db/index.html +1 -1
  112. package/coverage/lcov-report/db/index.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  117. package/coverage/lcov-report/db/newid.js.html +1 -1
  118. package/coverage/lcov-report/db/utils.js.html +1 -1
  119. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  120. package/coverage/lcov-report/events/index.html +1 -1
  121. package/coverage/lcov-report/events/index.js.html +1 -1
  122. package/coverage/lcov-report/events/utils.js.html +1 -1
  123. package/coverage/lcov-report/index.html +19 -19
  124. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  125. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  126. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  127. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  128. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  129. package/coverage/lcov-report/middleware/index.html +1 -1
  130. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  131. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  132. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  133. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  134. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  135. package/coverage/lcov-report/threads/automation.js.html +1 -1
  136. package/coverage/lcov-report/threads/index.html +1 -1
  137. package/coverage/lcov-report/threads/query.js.html +1 -1
  138. package/coverage/lcov-report/threads/utils.js.html +1 -1
  139. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  140. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  141. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  142. package/coverage/lcov-report/utilities/global.js.html +1 -1
  143. package/coverage/lcov-report/utilities/index.html +1 -1
  144. package/coverage/lcov-report/utilities/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  146. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  148. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.html +20 -20
  150. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  151. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +86 -11
  152. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  153. package/coverage/lcov-report/utilities/security.js.html +1 -1
  154. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  156. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  157. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  158. package/coverage/lcov-report/utilities/users.js.html +1 -1
  159. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  160. package/coverage/lcov.info +27 -4
  161. package/dist/api/controllers/row/ExternalRequest.js +5 -1
  162. package/dist/integrations/base/sqlTable.js +3 -1
  163. package/dist/integrations/googlesheets.js +3 -2
  164. package/dist/integrations/mysql.js +9 -1
  165. package/dist/integrations/postgres.js +9 -1
  166. package/dist/package.json +5 -5
  167. package/dist/tsconfig.build.tsbuildinfo +1 -1
  168. package/dist/utilities/rowProcessor/utils.js +23 -0
  169. package/package.json +6 -6
  170. package/src/api/controllers/row/ExternalRequest.ts +11 -2
  171. package/src/definitions/common.ts +1 -0
  172. package/src/integrations/base/sqlTable.ts +3 -1
  173. package/src/integrations/googlesheets.ts +6 -2
  174. package/src/integrations/mysql.ts +16 -2
  175. package/src/integrations/postgres.ts +10 -1
  176. package/src/utilities/rowProcessor/utils.js +25 -0
  177. package/builder/assets/index.8a6f249b.css +0 -6
@@ -54,3 +54,26 @@ exports.processFormulas = (table, rows, { dynamic, contextRows } = { dynamic: tr
54
54
  }
55
55
  return single ? rows[0] : rows;
56
56
  };
57
+ /**
58
+ * Processes any date columns and ensures that those without the ignoreTimezones
59
+ * flag set are parsed as UTC rather than local time.
60
+ */
61
+ exports.processDates = (table, rows) => {
62
+ let datesWithTZ = [];
63
+ for (let [column, schema] of Object.entries(table.schema)) {
64
+ if (schema.type !== FieldTypes.DATETIME) {
65
+ continue;
66
+ }
67
+ if (!schema.ignoreTimezones) {
68
+ datesWithTZ.push(column);
69
+ }
70
+ }
71
+ for (let row of rows) {
72
+ for (let col of datesWithTZ) {
73
+ if (row[col] && typeof row[col] === "string" && !row[col].endsWith("Z")) {
74
+ row[col] = new Date(row[col]).toISOString();
75
+ }
76
+ }
77
+ }
78
+ return rows;
79
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.193",
4
+ "version": "1.0.196",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -70,10 +70,10 @@
70
70
  "license": "GPL-3.0",
71
71
  "dependencies": {
72
72
  "@apidevtools/swagger-parser": "^10.0.3",
73
- "@budibase/backend-core": "^1.0.193",
74
- "@budibase/client": "^1.0.193",
75
- "@budibase/pro": "1.0.192",
76
- "@budibase/string-templates": "^1.0.193",
73
+ "@budibase/backend-core": "^1.0.196",
74
+ "@budibase/client": "^1.0.196",
75
+ "@budibase/pro": "1.0.195",
76
+ "@budibase/string-templates": "^1.0.196",
77
77
  "@bull-board/api": "^3.7.0",
78
78
  "@bull-board/koa": "^3.7.0",
79
79
  "@elastic/elasticsearch": "7.10.0",
@@ -184,5 +184,5 @@
184
184
  "optionalDependencies": {
185
185
  "oracledb": "^5.3.0"
186
186
  },
187
- "gitHead": "e578ffe12ea6cda078836628b6e69f41a7048301"
187
+ "gitHead": "a7f4959e853eba49c4de3d7d355a98900eaa0591"
188
188
  }
@@ -29,7 +29,10 @@ import { breakExternalTableId, isSQL } from "../../../integrations/utils"
29
29
  import { processObjectSync } from "@budibase/string-templates"
30
30
  // @ts-ignore
31
31
  import { cloneDeep } from "lodash/fp"
32
- import { processFormulas } from "../../../utilities/rowProcessor/utils"
32
+ import {
33
+ processFormulas,
34
+ processDates,
35
+ } from "../../../utilities/rowProcessor/utils"
33
36
  // @ts-ignore
34
37
  import { getAppDB } from "@budibase/backend-core/context"
35
38
 
@@ -434,7 +437,13 @@ module External {
434
437
  relationships
435
438
  )
436
439
  }
437
- return processFormulas(table, Object.values(finalRows)).map((row: Row) =>
440
+
441
+ // Process some additional data types
442
+ let finalRowArray = Object.values(finalRows)
443
+ finalRowArray = processDates(table, finalRowArray)
444
+ finalRowArray = processFormulas(table, finalRowArray)
445
+
446
+ return finalRowArray.map((row: Row) =>
438
447
  this.squashRelationshipColumns(table, row, relationships)
439
448
  )
440
449
  }
@@ -25,6 +25,7 @@ export interface FieldSchema {
25
25
  formula?: string
26
26
  formulaType?: string
27
27
  main?: boolean
28
+ ignoreTimezones?: boolean
28
29
  meta?: {
29
30
  toTable: string
30
31
  toKey: string
@@ -61,7 +61,9 @@ function generateSchema(
61
61
  schema.boolean(key)
62
62
  break
63
63
  case FieldTypes.DATETIME:
64
- schema.datetime(key)
64
+ schema.datetime(key, {
65
+ useTz: !column.ignoreTimezones,
66
+ })
65
67
  break
66
68
  case FieldTypes.ARRAY:
67
69
  schema.json(key)
@@ -164,11 +164,15 @@ module GoogleSheetsModule {
164
164
  }
165
165
  )
166
166
 
167
+ const json = await response.json()
168
+
167
169
  if (response.status !== 200) {
168
- throw new Error("Error authenticating with google sheets.")
170
+ throw new Error(
171
+ `Error authenticating with google sheets. ${json.error_description}`
172
+ )
169
173
  }
170
174
 
171
- return response.json()
175
+ return json
172
176
  }
173
177
 
174
178
  async connect() {
@@ -15,7 +15,6 @@ import {
15
15
  } from "./utils"
16
16
  import { DatasourcePlus } from "./base/datasourcePlus"
17
17
  import dayjs from "dayjs"
18
- import { FieldTypes } from "../constants"
19
18
  const { NUMBER_REGEX } = require("../utilities")
20
19
 
21
20
  module MySQLModule {
@@ -30,6 +29,7 @@ module MySQLModule {
30
29
  database: string
31
30
  ssl?: { [key: string]: any }
32
31
  rejectUnauthorized: boolean
32
+ typeCast: Function
33
33
  }
34
34
 
35
35
  const SCHEMA: Integration = {
@@ -89,6 +89,8 @@ module MySQLModule {
89
89
  },
90
90
  }
91
91
 
92
+ const TimezoneAwareDateTypes = ["timestamp"]
93
+
92
94
  function bindingTypeCoerce(bindings: any[]) {
93
95
  for (let i = 0; i < bindings.length; i++) {
94
96
  const binding = bindings[i]
@@ -131,7 +133,19 @@ module MySQLModule {
131
133
  }
132
134
  // @ts-ignore
133
135
  delete config.rejectUnauthorized
134
- this.config = config
136
+ this.config = {
137
+ ...config,
138
+ typeCast: function (field: any, next: any) {
139
+ if (
140
+ field.type == "DATETIME" ||
141
+ field.type === "DATE" ||
142
+ field.type === "TIMESTAMP"
143
+ ) {
144
+ return field.string()
145
+ }
146
+ return next()
147
+ },
148
+ }
135
149
  }
136
150
 
137
151
  getBindingIdentifier(): string {
@@ -16,10 +16,19 @@ import {
16
16
  import { DatasourcePlus } from "./base/datasourcePlus"
17
17
 
18
18
  module PostgresModule {
19
- const { Client } = require("pg")
19
+ const { Client, types } = require("pg")
20
20
  const Sql = require("./base/sql")
21
21
  const { escapeDangerousCharacters } = require("../utilities")
22
22
 
23
+ // Return "date" and "timestamp" types as plain strings.
24
+ // This lets us reference the original stored timezone.
25
+ // types is undefined when running in a test env for some reason.
26
+ if (types) {
27
+ types.setTypeParser(1114, (val: any) => val) // timestamp
28
+ types.setTypeParser(1082, (val: any) => val) // date
29
+ types.setTypeParser(1184, (val: any) => val) // timestampz
30
+ }
31
+
23
32
  const JSON_REGEX = /'{.*}'::json/s
24
33
 
25
34
  interface PostgresConfig {
@@ -65,3 +65,28 @@ exports.processFormulas = (
65
65
  }
66
66
  return single ? rows[0] : rows
67
67
  }
68
+
69
+ /**
70
+ * Processes any date columns and ensures that those without the ignoreTimezones
71
+ * flag set are parsed as UTC rather than local time.
72
+ */
73
+ exports.processDates = (table, rows) => {
74
+ let datesWithTZ = []
75
+ for (let [column, schema] of Object.entries(table.schema)) {
76
+ if (schema.type !== FieldTypes.DATETIME) {
77
+ continue
78
+ }
79
+ if (!schema.ignoreTimezones) {
80
+ datesWithTZ.push(column)
81
+ }
82
+ }
83
+
84
+ for (let row of rows) {
85
+ for (let col of datesWithTZ) {
86
+ if (row[col] && typeof row[col] === "string" && !row[col].endsWith("Z")) {
87
+ row[col] = new Date(row[col]).toISOString()
88
+ }
89
+ }
90
+ }
91
+ return rows
92
+ }