@budibase/server 2.6.19-alpha.1 → 2.6.19-alpha.11

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 (347) hide show
  1. package/.dockerignore +7 -6
  2. package/Dockerfile +16 -8
  3. package/builder/assets/{index.b9eeb2a8.js → index.7a65d631.js} +357 -349
  4. package/builder/assets/{index.07382a47.css → index.ec1c6a1a.css} +2 -2
  5. package/builder/index.html +2 -2
  6. package/client/manifest.json +5229 -0
  7. package/dist/automation.js +32190 -0
  8. package/dist/automation.js.map +7 -0
  9. package/dist/index.js +44363 -13
  10. package/dist/index.js.map +7 -0
  11. package/dist/query.js +24307 -0
  12. package/dist/query.js.map +7 -0
  13. package/jest.config.ts +3 -0
  14. package/nodemon.json +1 -1
  15. package/package.json +29 -13
  16. package/pm2.config.js +1 -1
  17. package/scripts/build.js +48 -0
  18. package/src/api/controllers/datasource.ts +16 -0
  19. package/src/api/controllers/static/index.ts +3 -3
  20. package/src/api/controllers/table/internal.ts +2 -6
  21. package/src/api/controllers/table/utils.ts +32 -1
  22. package/src/api/routes/datasource.ts +5 -0
  23. package/src/api/routes/static.ts +3 -1
  24. package/src/api/routes/tests/datasource.spec.ts +1 -1
  25. package/src/automations/actions.ts +5 -0
  26. package/src/automations/steps/openai.ts +105 -0
  27. package/src/automations/tests/openai.spec.ts +86 -0
  28. package/src/constants/index.ts +17 -16
  29. package/src/db/inMemoryView.ts +3 -1
  30. package/src/environment.ts +2 -0
  31. package/src/integration-test/postgres.spec.ts +47 -4
  32. package/src/integrations/base/sqlTable.ts +0 -1
  33. package/src/integrations/googlesheets.ts +11 -3
  34. package/src/integrations/microsoftSqlServer.ts +18 -2
  35. package/src/integrations/mysql.ts +27 -11
  36. package/src/integrations/oracle.ts +11 -1
  37. package/src/integrations/postgres.ts +27 -10
  38. package/src/integrations/tests/googlesheets.spec.ts +41 -9
  39. package/src/utilities/fileSystem/app.ts +1 -1
  40. package/src/utilities/fileSystem/clientLibrary.ts +8 -3
  41. package/src/utilities/fileSystem/filesystem.ts +3 -1
  42. package/tsconfig.build.json +9 -1
  43. package/tsconfig.json +1 -14
  44. package/dist/api/controllers/analytics.js +0 -46
  45. package/dist/api/controllers/apikeys.js +0 -72
  46. package/dist/api/controllers/application.js +0 -574
  47. package/dist/api/controllers/auth.js +0 -80
  48. package/dist/api/controllers/automation.js +0 -303
  49. package/dist/api/controllers/backup.js +0 -37
  50. package/dist/api/controllers/component.js +0 -59
  51. package/dist/api/controllers/datasource.js +0 -337
  52. package/dist/api/controllers/deploy/Deployment.js +0 -53
  53. package/dist/api/controllers/deploy/index.js +0 -198
  54. package/dist/api/controllers/dev.js +0 -146
  55. package/dist/api/controllers/integration.js +0 -28
  56. package/dist/api/controllers/layout.js +0 -49
  57. package/dist/api/controllers/metadata.js +0 -63
  58. package/dist/api/controllers/migrations.js +0 -29
  59. package/dist/api/controllers/ops.js +0 -40
  60. package/dist/api/controllers/permission.js +0 -162
  61. package/dist/api/controllers/plugin/file.js +0 -24
  62. package/dist/api/controllers/plugin/github.js +0 -69
  63. package/dist/api/controllers/plugin/index.js +0 -112
  64. package/dist/api/controllers/plugin/npm.js +0 -58
  65. package/dist/api/controllers/plugin/uploaders.js +0 -11
  66. package/dist/api/controllers/plugin/url.js +0 -24
  67. package/dist/api/controllers/plugin/utils.js +0 -27
  68. package/dist/api/controllers/public/applications.js +0 -146
  69. package/dist/api/controllers/public/mapping/applications.js +0 -29
  70. package/dist/api/controllers/public/mapping/index.js +0 -11
  71. package/dist/api/controllers/public/mapping/queries.js +0 -36
  72. package/dist/api/controllers/public/mapping/rows.js +0 -24
  73. package/dist/api/controllers/public/mapping/tables.js +0 -23
  74. package/dist/api/controllers/public/mapping/types.js +0 -2
  75. package/dist/api/controllers/public/mapping/users.js +0 -29
  76. package/dist/api/controllers/public/metrics.js +0 -113
  77. package/dist/api/controllers/public/queries.js +0 -58
  78. package/dist/api/controllers/public/rows.js +0 -120
  79. package/dist/api/controllers/public/tables.js +0 -95
  80. package/dist/api/controllers/public/users.js +0 -93
  81. package/dist/api/controllers/public/utils.js +0 -56
  82. package/dist/api/controllers/query/import/index.js +0 -87
  83. package/dist/api/controllers/query/import/sources/base/index.js +0 -75
  84. package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
  85. package/dist/api/controllers/query/import/sources/curl.js +0 -99
  86. package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
  87. package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
  88. package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
  89. package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
  90. package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
  91. package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
  92. package/dist/api/controllers/query/index.js +0 -299
  93. package/dist/api/controllers/query/validation.js +0 -53
  94. package/dist/api/controllers/role.js +0 -109
  95. package/dist/api/controllers/routing.js +0 -105
  96. package/dist/api/controllers/row/ExternalRequest.js +0 -683
  97. package/dist/api/controllers/row/external.js +0 -339
  98. package/dist/api/controllers/row/index.js +0 -203
  99. package/dist/api/controllers/row/internal.js +0 -509
  100. package/dist/api/controllers/row/internalSearch.js +0 -28
  101. package/dist/api/controllers/row/staticFormula.js +0 -165
  102. package/dist/api/controllers/row/utils.js +0 -183
  103. package/dist/api/controllers/screen.js +0 -110
  104. package/dist/api/controllers/script.js +0 -30
  105. package/dist/api/controllers/static/index.js +0 -268
  106. package/dist/api/controllers/table/bulkFormula.js +0 -173
  107. package/dist/api/controllers/table/external.js +0 -279
  108. package/dist/api/controllers/table/index.js +0 -179
  109. package/dist/api/controllers/table/internal.js +0 -197
  110. package/dist/api/controllers/table/utils.js +0 -379
  111. package/dist/api/controllers/templates.js +0 -56
  112. package/dist/api/controllers/user.js +0 -124
  113. package/dist/api/controllers/view/exporters.js +0 -46
  114. package/dist/api/controllers/view/index.js +0 -193
  115. package/dist/api/controllers/view/utils.js +0 -177
  116. package/dist/api/controllers/view/viewBuilder.js +0 -158
  117. package/dist/api/controllers/webhook.js +0 -134
  118. package/dist/api/index.js +0 -55
  119. package/dist/api/routes/analytics.js +0 -34
  120. package/dist/api/routes/apikeys.js +0 -37
  121. package/dist/api/routes/application.js +0 -48
  122. package/dist/api/routes/auth.js +0 -33
  123. package/dist/api/routes/automation.js +0 -50
  124. package/dist/api/routes/backup.js +0 -35
  125. package/dist/api/routes/component.js +0 -35
  126. package/dist/api/routes/datasource.js +0 -44
  127. package/dist/api/routes/deploy.js +0 -37
  128. package/dist/api/routes/dev.js +0 -49
  129. package/dist/api/routes/index.js +0 -75
  130. package/dist/api/routes/integration.js +0 -37
  131. package/dist/api/routes/layout.js +0 -37
  132. package/dist/api/routes/metadata.js +0 -40
  133. package/dist/api/routes/migrations.js +0 -36
  134. package/dist/api/routes/ops.js +0 -52
  135. package/dist/api/routes/permission.js +0 -44
  136. package/dist/api/routes/plugin.js +0 -39
  137. package/dist/api/routes/public/applications.js +0 -174
  138. package/dist/api/routes/public/index.js +0 -140
  139. package/dist/api/routes/public/metrics.js +0 -30
  140. package/dist/api/routes/public/middleware/mapper.js +0 -97
  141. package/dist/api/routes/public/queries.js +0 -72
  142. package/dist/api/routes/public/rows.js +0 -158
  143. package/dist/api/routes/public/tables.js +0 -152
  144. package/dist/api/routes/public/users.js +0 -135
  145. package/dist/api/routes/public/utils/Endpoint.js +0 -36
  146. package/dist/api/routes/query.js +0 -47
  147. package/dist/api/routes/role.js +0 -40
  148. package/dist/api/routes/routing.js +0 -39
  149. package/dist/api/routes/row.js +0 -239
  150. package/dist/api/routes/screen.js +0 -39
  151. package/dist/api/routes/script.js +0 -35
  152. package/dist/api/routes/static.js +0 -80
  153. package/dist/api/routes/table.js +0 -163
  154. package/dist/api/routes/templates.js +0 -37
  155. package/dist/api/routes/user.js +0 -43
  156. package/dist/api/routes/utils/validators.js +0 -238
  157. package/dist/api/routes/view.js +0 -42
  158. package/dist/api/routes/webhook.js +0 -43
  159. package/dist/app.js +0 -132
  160. package/dist/automations/actions.js +0 -137
  161. package/dist/automations/automationUtils.js +0 -173
  162. package/dist/automations/bullboard.js +0 -71
  163. package/dist/automations/index.js +0 -43
  164. package/dist/automations/logging/index.js +0 -53
  165. package/dist/automations/steps/bash.js +0 -111
  166. package/dist/automations/steps/createRow.js +0 -108
  167. package/dist/automations/steps/delay.js +0 -53
  168. package/dist/automations/steps/deleteRow.js +0 -96
  169. package/dist/automations/steps/discord.js +0 -116
  170. package/dist/automations/steps/executeQuery.js +0 -134
  171. package/dist/automations/steps/executeScript.js +0 -106
  172. package/dist/automations/steps/filter.js +0 -112
  173. package/dist/automations/steps/loop.js +0 -54
  174. package/dist/automations/steps/make.js +0 -134
  175. package/dist/automations/steps/outgoingWebhook.js +0 -166
  176. package/dist/automations/steps/queryRows.js +0 -216
  177. package/dist/automations/steps/sendSmtpEmail.js +0 -115
  178. package/dist/automations/steps/serverLog.js +0 -65
  179. package/dist/automations/steps/slack.js +0 -98
  180. package/dist/automations/steps/updateRow.js +0 -144
  181. package/dist/automations/steps/utils.js +0 -56
  182. package/dist/automations/steps/zapier.js +0 -130
  183. package/dist/automations/triggerInfo/app.js +0 -36
  184. package/dist/automations/triggerInfo/cron.js +0 -35
  185. package/dist/automations/triggerInfo/index.js +0 -40
  186. package/dist/automations/triggerInfo/rowDeleted.js +0 -36
  187. package/dist/automations/triggerInfo/rowSaved.js +0 -44
  188. package/dist/automations/triggerInfo/rowUpdated.js +0 -44
  189. package/dist/automations/triggerInfo/webhook.js +0 -40
  190. package/dist/automations/triggers.js +0 -181
  191. package/dist/automations/utils.js +0 -275
  192. package/dist/constants/definitions.js +0 -2
  193. package/dist/constants/index.js +0 -181
  194. package/dist/constants/layouts.js +0 -148
  195. package/dist/constants/screens.js +0 -51
  196. package/dist/db/defaultData/datasource_bb_default.js +0 -574
  197. package/dist/db/defaultData/employeeImport.js +0 -155
  198. package/dist/db/defaultData/expensesImport.js +0 -117
  199. package/dist/db/defaultData/inventoryImport.js +0 -109
  200. package/dist/db/defaultData/jobsImport.js +0 -152
  201. package/dist/db/dynamoClient.js +0 -124
  202. package/dist/db/inMemoryView.js +0 -62
  203. package/dist/db/index.js +0 -43
  204. package/dist/db/linkedRows/LinkController.js +0 -392
  205. package/dist/db/linkedRows/LinkDocument.js +0 -33
  206. package/dist/db/linkedRows/index.js +0 -206
  207. package/dist/db/linkedRows/linkUtils.js +0 -131
  208. package/dist/db/newid.js +0 -7
  209. package/dist/db/utils.js +0 -248
  210. package/dist/db/views/staticViews.js +0 -144
  211. package/dist/ddApm.js +0 -11
  212. package/dist/definitions/automations.js +0 -8
  213. package/dist/definitions/common.js +0 -2
  214. package/dist/definitions/datasource.js +0 -7
  215. package/dist/definitions/openapi.js +0 -6
  216. package/dist/environment.js +0 -109
  217. package/dist/events/AutomationEmitter.js +0 -53
  218. package/dist/events/BudibaseEmitter.js +0 -25
  219. package/dist/events/docUpdates/index.js +0 -17
  220. package/dist/events/docUpdates/processors.js +0 -18
  221. package/dist/events/docUpdates/syncUsers.js +0 -49
  222. package/dist/events/index.js +0 -11
  223. package/dist/events/utils.js +0 -43
  224. package/dist/integrations/airtable.js +0 -173
  225. package/dist/integrations/arangodb.js +0 -119
  226. package/dist/integrations/base/query.js +0 -32
  227. package/dist/integrations/base/sql.js +0 -600
  228. package/dist/integrations/base/sqlTable.js +0 -167
  229. package/dist/integrations/base/types.js +0 -2
  230. package/dist/integrations/couchdb.js +0 -140
  231. package/dist/integrations/dynamodb.js +0 -210
  232. package/dist/integrations/elasticsearch.js +0 -201
  233. package/dist/integrations/firebase.js +0 -189
  234. package/dist/integrations/googlesheets.js +0 -484
  235. package/dist/integrations/index.js +0 -138
  236. package/dist/integrations/microsoftSqlServer.js +0 -289
  237. package/dist/integrations/mongodb.js +0 -630
  238. package/dist/integrations/mysql.js +0 -272
  239. package/dist/integrations/oracle.js +0 -404
  240. package/dist/integrations/postgres.js +0 -319
  241. package/dist/integrations/queries/sql.js +0 -84
  242. package/dist/integrations/redis.js +0 -187
  243. package/dist/integrations/rest.js +0 -400
  244. package/dist/integrations/s3.js +0 -256
  245. package/dist/integrations/snowflake.js +0 -114
  246. package/dist/integrations/utils.js +0 -295
  247. package/dist/middleware/appInfo.js +0 -22
  248. package/dist/middleware/authorized.js +0 -112
  249. package/dist/middleware/builder.js +0 -93
  250. package/dist/middleware/currentapp.js +0 -103
  251. package/dist/middleware/joi-validator.js +0 -43
  252. package/dist/middleware/publicApi.js +0 -25
  253. package/dist/middleware/resourceId.js +0 -59
  254. package/dist/middleware/selfhost.js +0 -24
  255. package/dist/middleware/utils.js +0 -8
  256. package/dist/migrations/functions/appUrls.js +0 -42
  257. package/dist/migrations/functions/backfill/app/automations.js +0 -31
  258. package/dist/migrations/functions/backfill/app/datasources.js +0 -28
  259. package/dist/migrations/functions/backfill/app/layouts.js +0 -33
  260. package/dist/migrations/functions/backfill/app/queries.js +0 -49
  261. package/dist/migrations/functions/backfill/app/roles.js +0 -28
  262. package/dist/migrations/functions/backfill/app/screens.js +0 -28
  263. package/dist/migrations/functions/backfill/app/tables.js +0 -37
  264. package/dist/migrations/functions/backfill/app.js +0 -176
  265. package/dist/migrations/functions/backfill/global/configs.js +0 -67
  266. package/dist/migrations/functions/backfill/global/quotas.js +0 -60
  267. package/dist/migrations/functions/backfill/global/users.js +0 -50
  268. package/dist/migrations/functions/backfill/global.js +0 -205
  269. package/dist/migrations/functions/backfill/index.js +0 -32
  270. package/dist/migrations/functions/backfill/installation.js +0 -80
  271. package/dist/migrations/functions/syncQuotas.js +0 -52
  272. package/dist/migrations/functions/tableSettings.js +0 -130
  273. package/dist/migrations/functions/usageQuotas/index.js +0 -16
  274. package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
  275. package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
  276. package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
  277. package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
  278. package/dist/migrations/functions/userEmailViewCasing.js +0 -24
  279. package/dist/migrations/index.js +0 -111
  280. package/dist/migrations/tests/helpers.js +0 -72
  281. package/dist/migrations/tests/structures.js +0 -37
  282. package/dist/sdk/app/applications/index.js +0 -28
  283. package/dist/sdk/app/applications/sync.js +0 -164
  284. package/dist/sdk/app/applications/utils.js +0 -21
  285. package/dist/sdk/app/automations/index.js +0 -29
  286. package/dist/sdk/app/automations/webhook.js +0 -54
  287. package/dist/sdk/app/backups/constants.js +0 -6
  288. package/dist/sdk/app/backups/exports.js +0 -160
  289. package/dist/sdk/app/backups/imports.js +0 -170
  290. package/dist/sdk/app/backups/index.js +0 -29
  291. package/dist/sdk/app/backups/statistics.js +0 -73
  292. package/dist/sdk/app/datasources/datasources.js +0 -173
  293. package/dist/sdk/app/datasources/index.js +0 -27
  294. package/dist/sdk/app/queries/index.js +0 -27
  295. package/dist/sdk/app/queries/queries.js +0 -60
  296. package/dist/sdk/app/rows/attachments.js +0 -61
  297. package/dist/sdk/app/rows/index.js +0 -28
  298. package/dist/sdk/app/rows/rows.js +0 -30
  299. package/dist/sdk/app/tables/index.js +0 -65
  300. package/dist/sdk/index.js +0 -27
  301. package/dist/sdk/plugins/index.js +0 -27
  302. package/dist/sdk/plugins/plugins.js +0 -53
  303. package/dist/sdk/users/index.js +0 -27
  304. package/dist/sdk/users/utils.js +0 -87
  305. package/dist/sdk/utils/index.js +0 -29
  306. package/dist/startup.js +0 -158
  307. package/dist/threads/automation.js +0 -450
  308. package/dist/threads/definitions.js +0 -2
  309. package/dist/threads/index.js +0 -140
  310. package/dist/threads/query.js +0 -265
  311. package/dist/threads/utils.js +0 -120
  312. package/dist/tsconfig.build.tsbuildinfo +0 -1
  313. package/dist/utilities/appDirectoryTemplate/package.json +0 -10
  314. package/dist/utilities/budibaseDir.js +0 -5
  315. package/dist/utilities/centralPath.js +0 -27
  316. package/dist/utilities/csv.js +0 -33
  317. package/dist/utilities/fileSystem/app.js +0 -88
  318. package/dist/utilities/fileSystem/clientLibrary.js +0 -138
  319. package/dist/utilities/fileSystem/filesystem.js +0 -180
  320. package/dist/utilities/fileSystem/index.js +0 -21
  321. package/dist/utilities/fileSystem/plugin.js +0 -76
  322. package/dist/utilities/fileSystem/processor.js +0 -34
  323. package/dist/utilities/fileSystem/template.js +0 -47
  324. package/dist/utilities/global.js +0 -149
  325. package/dist/utilities/index.js +0 -143
  326. package/dist/utilities/redis.js +0 -117
  327. package/dist/utilities/retry.js +0 -30
  328. package/dist/utilities/routing/index.js +0 -39
  329. package/dist/utilities/rowProcessor/index.js +0 -282
  330. package/dist/utilities/rowProcessor/map.js +0 -116
  331. package/dist/utilities/rowProcessor/utils.js +0 -87
  332. package/dist/utilities/schema.js +0 -112
  333. package/dist/utilities/scriptRunner.js +0 -26
  334. package/dist/utilities/security.js +0 -57
  335. package/dist/utilities/statusCodes.js +0 -9
  336. package/dist/utilities/usageQuota/rows.js +0 -88
  337. package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
  338. package/dist/utilities/users.js +0 -57
  339. package/dist/utilities/workerRequests.js +0 -171
  340. package/dist/watch.js +0 -53
  341. package/dist/websockets/client.js +0 -14
  342. package/dist/websockets/grid.js +0 -60
  343. package/dist/websockets/index.js +0 -17
  344. package/dist/websockets/websocket.js +0 -78
  345. /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
  346. /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
  347. /package/dist/{api/controllers/static/templates/preview.hbs → preview.hbs} +0 -0
@@ -1,484 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const types_1 = require("@budibase/types");
16
- const google_auth_library_1 = require("google-auth-library");
17
- const utils_1 = require("./utils");
18
- const google_spreadsheet_1 = require("google-spreadsheet");
19
- const node_fetch_1 = __importDefault(require("node-fetch"));
20
- const backend_core_1 = require("@budibase/backend-core");
21
- const shared_core_1 = require("@budibase/shared-core");
22
- const constants_1 = require("../constants");
23
- const ALLOWED_TYPES = [
24
- types_1.FieldType.STRING,
25
- types_1.FieldType.FORMULA,
26
- types_1.FieldType.NUMBER,
27
- types_1.FieldType.LONGFORM,
28
- types_1.FieldType.DATETIME,
29
- types_1.FieldType.OPTIONS,
30
- types_1.FieldType.BOOLEAN,
31
- types_1.FieldType.BARCODEQR,
32
- ];
33
- const SCHEMA = {
34
- plus: true,
35
- auth: {
36
- type: "google",
37
- },
38
- relationships: false,
39
- docs: "https://developers.google.com/sheets/api/quickstart/nodejs",
40
- description: "Create and collaborate on online spreadsheets in real-time and from any device. ",
41
- friendlyName: "Google Sheets",
42
- type: "Spreadsheet",
43
- features: [types_1.DatasourceFeature.CONNECTION_CHECKING],
44
- datasource: {
45
- spreadsheetId: {
46
- display: "Google Sheet URL",
47
- type: types_1.DatasourceFieldType.STRING,
48
- required: true,
49
- },
50
- },
51
- query: {
52
- create: {
53
- type: types_1.QueryType.FIELDS,
54
- fields: {
55
- sheet: {
56
- type: types_1.DatasourceFieldType.STRING,
57
- required: true,
58
- },
59
- row: {
60
- type: types_1.QueryType.JSON,
61
- required: true,
62
- },
63
- },
64
- },
65
- read: {
66
- type: types_1.QueryType.FIELDS,
67
- fields: {
68
- sheet: {
69
- type: types_1.DatasourceFieldType.STRING,
70
- required: true,
71
- },
72
- },
73
- },
74
- update: {
75
- type: types_1.QueryType.FIELDS,
76
- fields: {
77
- sheet: {
78
- type: types_1.DatasourceFieldType.STRING,
79
- required: true,
80
- },
81
- rowIndex: {
82
- type: types_1.DatasourceFieldType.STRING,
83
- required: true,
84
- },
85
- row: {
86
- type: types_1.QueryType.JSON,
87
- required: true,
88
- },
89
- },
90
- },
91
- delete: {
92
- type: types_1.QueryType.FIELDS,
93
- fields: {
94
- sheet: {
95
- type: types_1.DatasourceFieldType.STRING,
96
- required: true,
97
- },
98
- rowIndex: {
99
- type: types_1.DatasourceFieldType.NUMBER,
100
- required: true,
101
- },
102
- },
103
- },
104
- },
105
- };
106
- class GoogleSheetsIntegration {
107
- constructor(config) {
108
- this.tables = {};
109
- this.schemaErrors = {};
110
- this.config = config;
111
- const spreadsheetId = this.cleanSpreadsheetUrl(this.config.spreadsheetId);
112
- this.client = new google_spreadsheet_1.GoogleSpreadsheet(spreadsheetId);
113
- }
114
- testConnection() {
115
- return __awaiter(this, void 0, void 0, function* () {
116
- try {
117
- yield this.connect();
118
- yield this.client.loadInfo();
119
- return { connected: true };
120
- }
121
- catch (e) {
122
- return {
123
- connected: false,
124
- error: e.message,
125
- };
126
- }
127
- });
128
- }
129
- getBindingIdentifier() {
130
- return "";
131
- }
132
- getStringConcat(parts) {
133
- return "";
134
- }
135
- /**
136
- * Pull the spreadsheet ID out from a valid google sheets URL
137
- * @param spreadsheetId - the URL or standard spreadsheetId of the google sheet
138
- * @returns spreadsheet Id of the google sheet
139
- */
140
- cleanSpreadsheetUrl(spreadsheetId) {
141
- if (!spreadsheetId) {
142
- throw new Error("You must set a spreadsheet ID in your configuration to fetch tables.");
143
- }
144
- const parts = spreadsheetId.split("/");
145
- return parts.length > 5 ? parts[5] : spreadsheetId;
146
- }
147
- fetchAccessToken(payload) {
148
- return __awaiter(this, void 0, void 0, function* () {
149
- const response = yield (0, node_fetch_1.default)("https://www.googleapis.com/oauth2/v4/token", {
150
- method: "POST",
151
- body: JSON.stringify(Object.assign(Object.assign({}, payload), { grant_type: "refresh_token" })),
152
- headers: {
153
- "Content-Type": "application/json",
154
- },
155
- });
156
- const json = yield response.json();
157
- if (response.status !== 200) {
158
- throw new Error(`Error authenticating with google sheets. ${json.error_description}`);
159
- }
160
- return json;
161
- });
162
- }
163
- connect() {
164
- var _a;
165
- return __awaiter(this, void 0, void 0, function* () {
166
- try {
167
- // Initialise oAuth client
168
- let googleConfig = yield backend_core_1.configs.getGoogleDatasourceConfig();
169
- if (!googleConfig) {
170
- throw new backend_core_1.HTTPError("Google config not found", 400);
171
- }
172
- const oauthClient = new google_auth_library_1.OAuth2Client({
173
- clientId: googleConfig.clientID,
174
- clientSecret: googleConfig.clientSecret,
175
- });
176
- const tokenResponse = yield this.fetchAccessToken({
177
- client_id: googleConfig.clientID,
178
- client_secret: googleConfig.clientSecret,
179
- refresh_token: this.config.auth.refreshToken,
180
- });
181
- oauthClient.setCredentials({
182
- refresh_token: this.config.auth.refreshToken,
183
- access_token: tokenResponse.access_token,
184
- });
185
- this.client.useOAuth2Client(oauthClient);
186
- yield this.client.loadInfo();
187
- }
188
- catch (err) {
189
- // this happens for xlsx imports
190
- if ((_a = err.message) === null || _a === void 0 ? void 0 : _a.includes("operation is not supported")) {
191
- err.message =
192
- "This operation is not supported - XLSX sheets must be converted.";
193
- }
194
- console.error("Error connecting to google sheets", err);
195
- throw err;
196
- }
197
- });
198
- }
199
- getTableSchema(title, headerValues, id) {
200
- // base table
201
- const table = {
202
- name: title,
203
- primary: [constants_1.GOOGLE_SHEETS_PRIMARY_KEY],
204
- schema: {},
205
- };
206
- if (id) {
207
- table._id = id;
208
- }
209
- // build schema from headers
210
- for (let header of headerValues) {
211
- table.schema[header] = {
212
- name: header,
213
- type: types_1.FieldType.STRING,
214
- };
215
- }
216
- return table;
217
- }
218
- buildSchema(datasourceId, entities) {
219
- return __awaiter(this, void 0, void 0, function* () {
220
- // not fully configured yet
221
- if (!this.config.auth) {
222
- return;
223
- }
224
- yield this.connect();
225
- const sheets = this.client.sheetsByIndex;
226
- const tables = {};
227
- for (let sheet of sheets) {
228
- // must fetch rows to determine schema
229
- yield sheet.getRows();
230
- const id = (0, utils_1.buildExternalTableId)(datasourceId, sheet.title);
231
- tables[sheet.title] = this.getTableSchema(sheet.title, sheet.headerValues, id);
232
- }
233
- const final = (0, utils_1.finaliseExternalTables)(tables, entities);
234
- this.tables = final.tables;
235
- this.schemaErrors = final.errors;
236
- });
237
- }
238
- query(json) {
239
- var _a, _b, _c, _d, _e, _f, _g, _h;
240
- return __awaiter(this, void 0, void 0, function* () {
241
- const sheet = json.endpoint.entityId;
242
- switch (json.endpoint.operation) {
243
- case types_1.Operation.CREATE:
244
- return this.create({ sheet, row: json.body });
245
- case types_1.Operation.BULK_CREATE:
246
- return this.createBulk({ sheet, rows: json.body });
247
- case types_1.Operation.READ:
248
- return this.read(Object.assign(Object.assign({}, json), { sheet }));
249
- case types_1.Operation.UPDATE:
250
- return this.update({
251
- // exclude the header row and zero index
252
- rowIndex: ((_c = (_b = (_a = json.extra) === null || _a === void 0 ? void 0 : _a.idFilter) === null || _b === void 0 ? void 0 : _b.equal) === null || _c === void 0 ? void 0 : _c.rowNumber) - 2,
253
- sheet,
254
- row: json.body,
255
- });
256
- case types_1.Operation.DELETE:
257
- return this.delete({
258
- // exclude the header row and zero index
259
- rowIndex: ((_f = (_e = (_d = json.extra) === null || _d === void 0 ? void 0 : _d.idFilter) === null || _e === void 0 ? void 0 : _e.equal) === null || _f === void 0 ? void 0 : _f.rowNumber) - 2,
260
- sheet,
261
- });
262
- case types_1.Operation.CREATE_TABLE:
263
- return this.createTable((_g = json === null || json === void 0 ? void 0 : json.table) === null || _g === void 0 ? void 0 : _g.name);
264
- case types_1.Operation.UPDATE_TABLE:
265
- return this.updateTable(json.table);
266
- case types_1.Operation.DELETE_TABLE:
267
- return this.deleteTable((_h = json === null || json === void 0 ? void 0 : json.table) === null || _h === void 0 ? void 0 : _h.name);
268
- default:
269
- throw new Error(`GSheets integration does not support "${json.endpoint.operation}".`);
270
- }
271
- });
272
- }
273
- buildRowObject(headers, values, rowNumber) {
274
- const rowObject = { rowNumber };
275
- for (let i = 0; i < headers.length; i++) {
276
- rowObject._id = rowNumber;
277
- rowObject[headers[i]] = values[i];
278
- }
279
- return rowObject;
280
- }
281
- createTable(name) {
282
- return __awaiter(this, void 0, void 0, function* () {
283
- if (!name) {
284
- throw new Error("Must provide name for new sheet.");
285
- }
286
- try {
287
- yield this.connect();
288
- return yield this.client.addSheet({ title: name, headerValues: [name] });
289
- }
290
- catch (err) {
291
- console.error("Error creating new table in google sheets", err);
292
- throw err;
293
- }
294
- });
295
- }
296
- updateTable(table) {
297
- return __awaiter(this, void 0, void 0, function* () {
298
- yield this.connect();
299
- const sheet = this.client.sheetsByTitle[table.name];
300
- yield sheet.loadHeaderRow();
301
- if (table._rename) {
302
- const headers = [];
303
- for (let header of sheet.headerValues) {
304
- if (header === table._rename.old) {
305
- headers.push(table._rename.updated);
306
- }
307
- else {
308
- headers.push(header);
309
- }
310
- }
311
- try {
312
- yield sheet.setHeaderRow(headers);
313
- }
314
- catch (err) {
315
- console.error("Error updating column name in google sheets", err);
316
- throw err;
317
- }
318
- }
319
- else {
320
- const updatedHeaderValues = [...sheet.headerValues];
321
- // add new column - doesn't currently exist
322
- for (let [key, column] of Object.entries(table.schema)) {
323
- if (!ALLOWED_TYPES.includes(column.type)) {
324
- throw new Error(`Column type: ${column.type} not allowed for GSheets integration.`);
325
- }
326
- if (!sheet.headerValues.includes(key) &&
327
- column.type !== types_1.FieldType.FORMULA) {
328
- updatedHeaderValues.push(key);
329
- }
330
- }
331
- // clear out deleted columns
332
- for (let key of sheet.headerValues) {
333
- if (!Object.keys(table.schema).includes(key)) {
334
- const idx = updatedHeaderValues.indexOf(key);
335
- updatedHeaderValues.splice(idx, 1);
336
- }
337
- }
338
- try {
339
- yield sheet.setHeaderRow(updatedHeaderValues);
340
- }
341
- catch (err) {
342
- console.error("Error updating table in google sheets", err);
343
- throw err;
344
- }
345
- }
346
- });
347
- }
348
- deleteTable(sheet) {
349
- return __awaiter(this, void 0, void 0, function* () {
350
- try {
351
- yield this.connect();
352
- const sheetToDelete = this.client.sheetsByTitle[sheet];
353
- return yield sheetToDelete.delete();
354
- }
355
- catch (err) {
356
- console.error("Error deleting table in google sheets", err);
357
- throw err;
358
- }
359
- });
360
- }
361
- create(query) {
362
- return __awaiter(this, void 0, void 0, function* () {
363
- try {
364
- yield this.connect();
365
- const sheet = this.client.sheetsByTitle[query.sheet];
366
- const rowToInsert = typeof query.row === "string" ? JSON.parse(query.row) : query.row;
367
- const row = yield sheet.addRow(rowToInsert);
368
- return [
369
- this.buildRowObject(sheet.headerValues, row._rawData, row._rowNumber),
370
- ];
371
- }
372
- catch (err) {
373
- console.error("Error writing to google sheets", err);
374
- throw err;
375
- }
376
- });
377
- }
378
- createBulk(query) {
379
- return __awaiter(this, void 0, void 0, function* () {
380
- try {
381
- yield this.connect();
382
- const sheet = this.client.sheetsByTitle[query.sheet];
383
- let rowsToInsert = [];
384
- for (let row of query.rows) {
385
- rowsToInsert.push(typeof row === "string" ? JSON.parse(row) : row);
386
- }
387
- const rows = yield sheet.addRows(rowsToInsert);
388
- return rows.map(row => this.buildRowObject(sheet.headerValues, row._rawData, row._rowNumber));
389
- }
390
- catch (err) {
391
- console.error("Error bulk writing to google sheets", err);
392
- throw err;
393
- }
394
- });
395
- }
396
- read(query) {
397
- return __awaiter(this, void 0, void 0, function* () {
398
- try {
399
- yield this.connect();
400
- const sheet = this.client.sheetsByTitle[query.sheet];
401
- let rows = [];
402
- if (query.paginate) {
403
- const limit = query.paginate.limit || 100;
404
- let page = typeof query.paginate.page === "number"
405
- ? query.paginate.page
406
- : parseInt(query.paginate.page || "1");
407
- rows = yield sheet.getRows({
408
- limit,
409
- offset: (page - 1) * limit,
410
- });
411
- }
412
- else {
413
- rows = yield sheet.getRows();
414
- }
415
- const filtered = shared_core_1.dataFilters.runLuceneQuery(rows, query.filters);
416
- const headerValues = sheet.headerValues;
417
- let response = [];
418
- for (let row of filtered) {
419
- response.push(this.buildRowObject(headerValues, row._rawData, row._rowNumber));
420
- }
421
- if (query.sort) {
422
- if (Object.keys(query.sort).length !== 1) {
423
- console.warn("Googlesheets does not support multiple sorting", {
424
- sortInfo: query.sort,
425
- });
426
- }
427
- const [sortField, sortInfo] = Object.entries(query.sort)[0];
428
- response = shared_core_1.dataFilters.luceneSort(response, sortField, sortInfo.direction, sortInfo.type);
429
- }
430
- return response;
431
- }
432
- catch (err) {
433
- console.error("Error reading from google sheets", err);
434
- throw err;
435
- }
436
- });
437
- }
438
- update(query) {
439
- return __awaiter(this, void 0, void 0, function* () {
440
- try {
441
- yield this.connect();
442
- const sheet = this.client.sheetsByTitle[query.sheet];
443
- const rows = yield sheet.getRows();
444
- const row = rows[query.rowIndex];
445
- if (row) {
446
- const updateValues = typeof query.row === "string" ? JSON.parse(query.row) : query.row;
447
- for (let key in updateValues) {
448
- row[key] = updateValues[key];
449
- }
450
- yield row.save();
451
- return [
452
- this.buildRowObject(sheet.headerValues, row._rawData, row._rowNumber),
453
- ];
454
- }
455
- else {
456
- throw new Error("Row does not exist.");
457
- }
458
- }
459
- catch (err) {
460
- console.error("Error reading from google sheets", err);
461
- throw err;
462
- }
463
- });
464
- }
465
- delete(query) {
466
- return __awaiter(this, void 0, void 0, function* () {
467
- yield this.connect();
468
- const sheet = this.client.sheetsByTitle[query.sheet];
469
- const rows = yield sheet.getRows();
470
- const row = rows[query.rowIndex];
471
- if (row) {
472
- yield row.delete();
473
- return [{ deleted: query.rowIndex }];
474
- }
475
- else {
476
- throw new Error("Row does not exist.");
477
- }
478
- });
479
- }
480
- }
481
- exports.default = {
482
- schema: SCHEMA,
483
- integration: GoogleSheetsIntegration,
484
- };
@@ -1,138 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getIntegration = exports.getDefinitions = exports.getDefinition = void 0;
16
- const postgres_1 = __importDefault(require("./postgres"));
17
- const dynamodb_1 = __importDefault(require("./dynamodb"));
18
- const mongodb_1 = __importDefault(require("./mongodb"));
19
- const elasticsearch_1 = __importDefault(require("./elasticsearch"));
20
- const couchdb_1 = __importDefault(require("./couchdb"));
21
- const microsoftSqlServer_1 = __importDefault(require("./microsoftSqlServer"));
22
- const s3_1 = __importDefault(require("./s3"));
23
- const airtable_1 = __importDefault(require("./airtable"));
24
- const mysql_1 = __importDefault(require("./mysql"));
25
- const arangodb_1 = __importDefault(require("./arangodb"));
26
- const rest_1 = __importDefault(require("./rest"));
27
- const googlesheets_1 = __importDefault(require("./googlesheets"));
28
- const firebase_1 = __importDefault(require("./firebase"));
29
- const redis_1 = __importDefault(require("./redis"));
30
- const snowflake_1 = __importDefault(require("./snowflake"));
31
- const oracle_1 = __importDefault(require("./oracle"));
32
- const types_1 = require("@budibase/types");
33
- const fileSystem_1 = require("../utilities/fileSystem");
34
- const environment_1 = __importDefault(require("../environment"));
35
- const lodash_1 = require("lodash");
36
- const sdk_1 = __importDefault(require("../sdk"));
37
- const DEFINITIONS = {
38
- [types_1.SourceName.POSTGRES]: postgres_1.default.schema,
39
- [types_1.SourceName.DYNAMODB]: dynamodb_1.default.schema,
40
- [types_1.SourceName.MONGODB]: mongodb_1.default.schema,
41
- [types_1.SourceName.ELASTICSEARCH]: elasticsearch_1.default.schema,
42
- [types_1.SourceName.COUCHDB]: couchdb_1.default.schema,
43
- [types_1.SourceName.SQL_SERVER]: microsoftSqlServer_1.default.schema,
44
- [types_1.SourceName.S3]: s3_1.default.schema,
45
- [types_1.SourceName.AIRTABLE]: airtable_1.default.schema,
46
- [types_1.SourceName.MYSQL]: mysql_1.default.schema,
47
- [types_1.SourceName.ARANGODB]: arangodb_1.default.schema,
48
- [types_1.SourceName.REST]: rest_1.default.schema,
49
- [types_1.SourceName.FIRESTORE]: firebase_1.default.schema,
50
- [types_1.SourceName.GOOGLE_SHEETS]: googlesheets_1.default.schema,
51
- [types_1.SourceName.REDIS]: redis_1.default.schema,
52
- [types_1.SourceName.SNOWFLAKE]: snowflake_1.default.schema,
53
- [types_1.SourceName.ORACLE]: undefined,
54
- };
55
- const INTEGRATIONS = {
56
- [types_1.SourceName.POSTGRES]: postgres_1.default.integration,
57
- [types_1.SourceName.DYNAMODB]: dynamodb_1.default.integration,
58
- [types_1.SourceName.MONGODB]: mongodb_1.default.integration,
59
- [types_1.SourceName.ELASTICSEARCH]: elasticsearch_1.default.integration,
60
- [types_1.SourceName.COUCHDB]: couchdb_1.default.integration,
61
- [types_1.SourceName.SQL_SERVER]: microsoftSqlServer_1.default.integration,
62
- [types_1.SourceName.S3]: s3_1.default.integration,
63
- [types_1.SourceName.AIRTABLE]: airtable_1.default.integration,
64
- [types_1.SourceName.MYSQL]: mysql_1.default.integration,
65
- [types_1.SourceName.ARANGODB]: arangodb_1.default.integration,
66
- [types_1.SourceName.REST]: rest_1.default.integration,
67
- [types_1.SourceName.FIRESTORE]: firebase_1.default.integration,
68
- [types_1.SourceName.GOOGLE_SHEETS]: googlesheets_1.default.integration,
69
- [types_1.SourceName.REDIS]: redis_1.default.integration,
70
- [types_1.SourceName.FIRESTORE]: firebase_1.default.integration,
71
- [types_1.SourceName.SNOWFLAKE]: snowflake_1.default.integration,
72
- [types_1.SourceName.ORACLE]: undefined,
73
- };
74
- // optionally add oracle integration if the oracle binary can be installed
75
- if (process.arch &&
76
- !process.arch.startsWith("arm") &&
77
- oracle_1.default.integration.isInstalled()) {
78
- DEFINITIONS[types_1.SourceName.ORACLE] = oracle_1.default.schema;
79
- INTEGRATIONS[types_1.SourceName.ORACLE] = oracle_1.default.integration;
80
- }
81
- function getDefinition(source) {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- // check if its integrated, faster
84
- const definition = DEFINITIONS[source];
85
- if (definition) {
86
- return definition;
87
- }
88
- const allDefinitions = yield getDefinitions();
89
- return allDefinitions[source];
90
- });
91
- }
92
- exports.getDefinition = getDefinition;
93
- function getDefinitions() {
94
- return __awaiter(this, void 0, void 0, function* () {
95
- const pluginSchemas = {};
96
- if (environment_1.default.SELF_HOSTED) {
97
- const plugins = yield sdk_1.default.plugins.fetch(types_1.PluginType.DATASOURCE);
98
- // extract the actual schema from each custom
99
- for (let plugin of plugins) {
100
- const sourceId = plugin.name;
101
- pluginSchemas[sourceId] = Object.assign(Object.assign({}, plugin.schema["schema"]), { custom: true });
102
- if (plugin.iconUrl) {
103
- pluginSchemas[sourceId].iconUrl = plugin.iconUrl;
104
- }
105
- }
106
- }
107
- return Object.assign(Object.assign({}, (0, lodash_1.cloneDeep)(DEFINITIONS)), pluginSchemas);
108
- });
109
- }
110
- exports.getDefinitions = getDefinitions;
111
- function getIntegration(integration) {
112
- return __awaiter(this, void 0, void 0, function* () {
113
- if (INTEGRATIONS[integration]) {
114
- return INTEGRATIONS[integration];
115
- }
116
- if (environment_1.default.SELF_HOSTED) {
117
- const plugins = yield sdk_1.default.plugins.fetch(types_1.PluginType.DATASOURCE);
118
- for (let plugin of plugins) {
119
- if (plugin.name === integration) {
120
- // need to use commonJS require due to its dynamic runtime nature
121
- const retrieved = yield (0, fileSystem_1.getDatasourcePlugin)(plugin);
122
- if (retrieved.integration) {
123
- return retrieved.integration;
124
- }
125
- else {
126
- return retrieved;
127
- }
128
- }
129
- }
130
- }
131
- throw new Error("No datasource implementation found.");
132
- });
133
- }
134
- exports.getIntegration = getIntegration;
135
- exports.default = {
136
- getDefinitions,
137
- getIntegration,
138
- };