@budibase/server 1.3.21-alpha.1 → 1.3.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.8d12d461.css +6 -0
  3. package/builder/assets/index.d354271c.js +879 -0
  4. package/builder/assets/vendor.5e1fe644.css +1 -0
  5. package/builder/assets/vendor.67dbd8fa.js +248 -0
  6. package/builder/index.html +4 -2
  7. package/coverage/clover.xml +390 -451
  8. package/coverage/coverage-final.json +21 -21
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +11 -68
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +46 -46
  18. package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  28. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +12 -207
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +1 -1
  48. package/coverage/lcov-report/api/index.js.html +13 -13
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/index.html +1 -1
  60. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  71. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/utils/index.html +9 -9
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +12 -75
  75. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  77. package/coverage/lcov-report/automations/actions.js.html +1 -1
  78. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  79. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  80. package/coverage/lcov-report/automations/index.html +1 -1
  81. package/coverage/lcov-report/automations/index.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/index.html +1 -1
  89. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +1 -1
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  113. package/coverage/lcov-report/db/index.html +18 -18
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +2 -2
  120. package/coverage/lcov-report/db/utils.js.html +20 -56
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +46 -46
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  130. package/coverage/lcov-report/middleware/currentapp.js.html +40 -46
  131. package/coverage/lcov-report/middleware/index.html +15 -15
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  133. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  137. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  138. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  139. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  140. package/coverage/lcov-report/utilities/global.js.html +16 -16
  141. package/coverage/lcov-report/utilities/index.html +15 -15
  142. package/coverage/lcov-report/utilities/index.js.html +24 -24
  143. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  144. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  147. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +2 -2
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +1 -1
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +8 -32
  158. package/coverage/lcov.info +672 -798
  159. package/dist/api/controllers/application.js +5 -5
  160. package/dist/api/controllers/auth.js +0 -9
  161. package/dist/api/controllers/component.js +1 -14
  162. package/dist/api/controllers/datasource.js +8 -21
  163. package/dist/api/controllers/deploy/index.js +8 -1
  164. package/dist/api/controllers/integration.js +4 -4
  165. package/dist/api/controllers/row/external.js +1 -1
  166. package/dist/api/controllers/screen.js +2 -52
  167. package/dist/api/controllers/static/index.js +0 -1
  168. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  169. package/dist/api/controllers/static/templates/preview.hbs +1 -5
  170. package/dist/api/index.js +1 -1
  171. package/dist/api/routes/application.js +2 -3
  172. package/dist/api/routes/index.js +0 -2
  173. package/dist/api/routes/public/rows.js +82 -1
  174. package/dist/api/routes/public/tables.js +1 -1
  175. package/dist/api/routes/table.js +1 -1
  176. package/dist/api/routes/utils/validators.js +2 -20
  177. package/dist/app.js +1 -16
  178. package/dist/db/utils.js +1 -10
  179. package/dist/environment.js +0 -1
  180. package/dist/integrations/airtable.js +129 -126
  181. package/dist/integrations/arangodb.js +89 -86
  182. package/dist/integrations/base/query.js +2 -2
  183. package/dist/integrations/base/sqlTable.js +1 -3
  184. package/dist/integrations/couchdb.js +83 -80
  185. package/dist/integrations/dynamodb.js +164 -161
  186. package/dist/integrations/elasticsearch.js +138 -135
  187. package/dist/integrations/firebase.js +157 -154
  188. package/dist/integrations/googlesheets.js +327 -323
  189. package/dist/integrations/index.js +51 -99
  190. package/dist/integrations/microsoftSqlServer.js +243 -240
  191. package/dist/integrations/mongodb.js +242 -239
  192. package/dist/integrations/mysql.js +219 -215
  193. package/dist/integrations/oracle.js +322 -318
  194. package/dist/integrations/postgres.js +265 -262
  195. package/dist/integrations/redis.js +139 -134
  196. package/dist/integrations/rest.js +292 -289
  197. package/dist/integrations/s3.js +64 -61
  198. package/dist/integrations/snowflake.js +86 -83
  199. package/dist/middleware/currentapp.js +0 -2
  200. package/dist/migrations/functions/backfill/global.js +3 -0
  201. package/dist/migrations/functions/developerQuota.js +49 -0
  202. package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
  203. package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
  204. package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
  205. package/dist/migrations/index.js +10 -0
  206. package/dist/package.json +6 -9
  207. package/dist/tests/utilities/TestConfiguration.js +1 -1
  208. package/dist/threads/query.js +2 -2
  209. package/dist/tsconfig.build.tsbuildinfo +1 -1
  210. package/dist/utilities/fileSystem/index.js +1 -111
  211. package/dist/utilities/workerRequests.js +0 -4
  212. package/package.json +7 -10
  213. package/scripts/dev/manage.js +0 -4
  214. package/scripts/localdomain.js +1 -3
  215. package/specs/openapi.json +112 -115
  216. package/specs/openapi.yaml +94 -96
  217. package/specs/resources/misc.js +0 -116
  218. package/specs/resources/query.js +1 -1
  219. package/src/api/controllers/application.ts +2 -1
  220. package/src/api/controllers/auth.js +0 -11
  221. package/src/api/controllers/component.js +2 -21
  222. package/src/api/controllers/datasource.js +8 -21
  223. package/src/api/controllers/deploy/index.ts +6 -1
  224. package/src/api/controllers/integration.js +4 -4
  225. package/src/api/controllers/public/mapping/types.ts +0 -8
  226. package/src/api/controllers/row/external.js +1 -1
  227. package/src/api/controllers/screen.js +1 -66
  228. package/src/api/controllers/static/index.ts +1 -1
  229. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  230. package/src/api/controllers/static/templates/preview.hbs +1 -5
  231. package/src/api/index.js +1 -1
  232. package/src/api/routes/application.ts +2 -13
  233. package/src/api/routes/index.ts +0 -2
  234. package/src/api/routes/public/rows.ts +82 -1
  235. package/src/api/routes/public/tables.ts +1 -1
  236. package/src/api/routes/table.js +1 -1
  237. package/src/api/routes/tests/query.spec.js +25 -8
  238. package/src/api/routes/tests/user.spec.js +2 -0
  239. package/src/api/routes/utils/validators.js +5 -26
  240. package/src/app.ts +2 -25
  241. package/src/db/utils.js +0 -12
  242. package/src/definitions/openapi.ts +55 -56
  243. package/src/environment.js +0 -1
  244. package/src/integrations/airtable.ts +118 -116
  245. package/src/integrations/arangodb.ts +89 -87
  246. package/src/integrations/base/query.ts +2 -2
  247. package/src/integrations/base/sqlTable.ts +1 -3
  248. package/src/integrations/couchdb.ts +89 -83
  249. package/src/integrations/dynamodb.ts +175 -173
  250. package/src/integrations/elasticsearch.ts +122 -120
  251. package/src/integrations/firebase.ts +159 -157
  252. package/src/integrations/googlesheets.ts +338 -328
  253. package/src/integrations/index.ts +21 -64
  254. package/src/integrations/microsoftSqlServer.ts +251 -249
  255. package/src/integrations/mongodb.ts +258 -261
  256. package/src/integrations/mysql.ts +234 -229
  257. package/src/integrations/oracle.ts +380 -373
  258. package/src/integrations/postgres.ts +268 -264
  259. package/src/integrations/redis.ts +132 -128
  260. package/src/integrations/rest.ts +329 -324
  261. package/src/integrations/s3.ts +71 -68
  262. package/src/integrations/snowflake.ts +82 -80
  263. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  264. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  265. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  266. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  267. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  268. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  269. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  270. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  271. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  272. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  273. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  274. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  275. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  276. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  277. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  278. package/src/middleware/currentapp.js +0 -2
  279. package/src/migrations/functions/backfill/global.ts +3 -0
  280. package/src/migrations/functions/developerQuota.ts +15 -0
  281. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  282. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  283. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  284. package/src/migrations/index.ts +16 -0
  285. package/src/module.d.ts +0 -2
  286. package/src/tests/utilities/TestConfiguration.js +1 -1
  287. package/src/threads/query.ts +2 -2
  288. package/src/utilities/fileSystem/index.js +0 -130
  289. package/src/utilities/workerRequests.js +0 -8
  290. package/builder/assets/index.c9d3f9e8.js +0 -1005
  291. package/builder/assets/index.f1b70f52.css +0 -6
  292. package/dist/api/controllers/plugin/github.js +0 -69
  293. package/dist/api/controllers/plugin/index.js +0 -200
  294. package/dist/api/controllers/plugin/npm.js +0 -58
  295. package/dist/api/controllers/plugin/uploaders.js +0 -11
  296. package/dist/api/controllers/plugin/utils.js +0 -26
  297. package/dist/watch.js +0 -77
  298. package/dist/websocket.js +0 -22
  299. package/src/api/controllers/plugin/file.ts +0 -15
  300. package/src/api/controllers/plugin/github.ts +0 -75
  301. package/src/api/controllers/plugin/index.ts +0 -215
  302. package/src/api/controllers/plugin/npm.ts +0 -56
  303. package/src/api/controllers/plugin/uploaders.ts +0 -4
  304. package/src/api/controllers/plugin/url.ts +0 -12
  305. package/src/api/controllers/plugin/utils.ts +0 -19
  306. package/src/api/routes/plugin.ts +0 -14
  307. package/src/watch.ts +0 -38
  308. package/src/websocket.ts +0 -26
@@ -18,361 +18,365 @@ const utils_1 = require("./utils");
18
18
  const constants_1 = require("../constants");
19
19
  const google_spreadsheet_1 = require("google-spreadsheet");
20
20
  const environment_1 = __importDefault(require("../environment"));
21
- const { getGlobalDB } = require("@budibase/backend-core/tenancy");
22
- const { getScopedConfig } = require("@budibase/backend-core/db");
23
- const { Configs } = require("@budibase/backend-core/constants");
24
- const fetch = require("node-fetch");
25
- const SCHEMA = {
26
- plus: true,
27
- auth: {
28
- type: "google",
29
- },
30
- relationships: false,
31
- docs: "https://developers.google.com/sheets/api/quickstart/nodejs",
32
- description: "Create and collaborate on online spreadsheets in real-time and from any device. ",
33
- friendlyName: "Google Sheets",
34
- type: "Spreadsheet",
35
- datasource: {
36
- spreadsheetId: {
37
- display: "Google Sheet URL",
38
- type: types_1.DatasourceFieldType.STRING,
39
- required: true,
21
+ var GoogleSheetsModule;
22
+ (function (GoogleSheetsModule) {
23
+ const { getGlobalDB } = require("@budibase/backend-core/tenancy");
24
+ const { getScopedConfig } = require("@budibase/backend-core/db");
25
+ const { Configs } = require("@budibase/backend-core/constants");
26
+ const fetch = require("node-fetch");
27
+ const SCHEMA = {
28
+ plus: true,
29
+ auth: {
30
+ type: "google",
40
31
  },
41
- },
42
- query: {
43
- create: {
44
- type: types_1.QueryType.FIELDS,
45
- fields: {
46
- sheet: {
47
- type: types_1.DatasourceFieldType.STRING,
48
- required: true,
49
- },
50
- row: {
51
- type: types_1.QueryType.JSON,
52
- required: true,
53
- },
32
+ relationships: false,
33
+ docs: "https://developers.google.com/sheets/api/quickstart/nodejs",
34
+ description: "Create and collaborate on online spreadsheets in real-time and from any device. ",
35
+ friendlyName: "Google Sheets",
36
+ type: "Spreadsheet",
37
+ datasource: {
38
+ spreadsheetId: {
39
+ display: "Google Sheet URL",
40
+ type: types_1.DatasourceFieldType.STRING,
41
+ required: true,
54
42
  },
55
43
  },
56
- read: {
57
- type: types_1.QueryType.FIELDS,
58
- fields: {
59
- sheet: {
60
- type: types_1.DatasourceFieldType.STRING,
61
- required: true,
44
+ query: {
45
+ create: {
46
+ type: types_1.QueryType.FIELDS,
47
+ fields: {
48
+ sheet: {
49
+ type: types_1.DatasourceFieldType.STRING,
50
+ required: true,
51
+ },
52
+ row: {
53
+ type: types_1.QueryType.JSON,
54
+ required: true,
55
+ },
62
56
  },
63
57
  },
64
- },
65
- update: {
66
- type: types_1.QueryType.FIELDS,
67
- fields: {
68
- sheet: {
69
- type: types_1.DatasourceFieldType.STRING,
70
- required: true,
71
- },
72
- rowIndex: {
73
- type: types_1.DatasourceFieldType.STRING,
74
- required: true,
75
- },
76
- row: {
77
- type: types_1.QueryType.JSON,
78
- required: true,
58
+ read: {
59
+ type: types_1.QueryType.FIELDS,
60
+ fields: {
61
+ sheet: {
62
+ type: types_1.DatasourceFieldType.STRING,
63
+ required: true,
64
+ },
79
65
  },
80
66
  },
81
- },
82
- delete: {
83
- type: types_1.QueryType.FIELDS,
84
- fields: {
85
- sheet: {
86
- type: types_1.DatasourceFieldType.STRING,
87
- required: true,
67
+ update: {
68
+ type: types_1.QueryType.FIELDS,
69
+ fields: {
70
+ sheet: {
71
+ type: types_1.DatasourceFieldType.STRING,
72
+ required: true,
73
+ },
74
+ rowIndex: {
75
+ type: types_1.DatasourceFieldType.STRING,
76
+ required: true,
77
+ },
78
+ row: {
79
+ type: types_1.QueryType.JSON,
80
+ required: true,
81
+ },
88
82
  },
89
- rowIndex: {
90
- type: types_1.DatasourceFieldType.NUMBER,
91
- required: true,
83
+ },
84
+ delete: {
85
+ type: types_1.QueryType.FIELDS,
86
+ fields: {
87
+ sheet: {
88
+ type: types_1.DatasourceFieldType.STRING,
89
+ required: true,
90
+ },
91
+ rowIndex: {
92
+ type: types_1.DatasourceFieldType.NUMBER,
93
+ required: true,
94
+ },
92
95
  },
93
96
  },
94
97
  },
95
- },
96
- };
97
- class GoogleSheetsIntegration {
98
- constructor(config) {
99
- this.tables = {};
100
- this.schemaErrors = {};
101
- this.config = config;
102
- const spreadsheetId = this.cleanSpreadsheetUrl(this.config.spreadsheetId);
103
- this.client = new google_spreadsheet_1.GoogleSpreadsheet(spreadsheetId);
104
- }
105
- getBindingIdentifier() {
106
- return "";
107
- }
108
- getStringConcat(parts) {
109
- return "";
110
- }
111
- /**
112
- * Pull the spreadsheet ID out from a valid google sheets URL
113
- * @param spreadsheetId - the URL or standard spreadsheetId of the google sheet
114
- * @returns spreadsheet Id of the google sheet
115
- */
116
- cleanSpreadsheetUrl(spreadsheetId) {
117
- if (!spreadsheetId) {
118
- throw new Error("You must set a spreadsheet ID in your configuration to fetch tables.");
98
+ };
99
+ class GoogleSheetsIntegration {
100
+ constructor(config) {
101
+ this.tables = {};
102
+ this.schemaErrors = {};
103
+ this.config = config;
104
+ const spreadsheetId = this.cleanSpreadsheetUrl(this.config.spreadsheetId);
105
+ this.client = new google_spreadsheet_1.GoogleSpreadsheet(spreadsheetId);
119
106
  }
120
- const parts = spreadsheetId.split("/");
121
- return parts.length > 5 ? parts[5] : spreadsheetId;
122
- }
123
- fetchAccessToken(payload) {
124
- return __awaiter(this, void 0, void 0, function* () {
125
- const response = yield fetch("https://www.googleapis.com/oauth2/v4/token", {
126
- method: "POST",
127
- body: JSON.stringify(Object.assign(Object.assign({}, payload), { grant_type: "refresh_token" })),
128
- headers: {
129
- "Content-Type": "application/json",
130
- },
131
- });
132
- const json = yield response.json();
133
- if (response.status !== 200) {
134
- throw new Error(`Error authenticating with google sheets. ${json.error_description}`);
107
+ getBindingIdentifier() {
108
+ return "";
109
+ }
110
+ getStringConcat(parts) {
111
+ return "";
112
+ }
113
+ /**
114
+ * Pull the spreadsheet ID out from a valid google sheets URL
115
+ * @param spreadsheetId - the URL or standard spreadsheetId of the google sheet
116
+ * @returns spreadsheet Id of the google sheet
117
+ */
118
+ cleanSpreadsheetUrl(spreadsheetId) {
119
+ if (!spreadsheetId) {
120
+ throw new Error("You must set a spreadsheet ID in your configuration to fetch tables.");
135
121
  }
136
- return json;
137
- });
138
- }
139
- connect() {
140
- return __awaiter(this, void 0, void 0, function* () {
141
- try {
142
- // Initialise oAuth client
143
- const db = getGlobalDB();
144
- let googleConfig = yield getScopedConfig(db, {
145
- type: Configs.GOOGLE,
122
+ const parts = spreadsheetId.split("/");
123
+ return parts.length > 5 ? parts[5] : spreadsheetId;
124
+ }
125
+ fetchAccessToken(payload) {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ const response = yield fetch("https://www.googleapis.com/oauth2/v4/token", {
128
+ method: "POST",
129
+ body: JSON.stringify(Object.assign(Object.assign({}, payload), { grant_type: "refresh_token" })),
130
+ headers: {
131
+ "Content-Type": "application/json",
132
+ },
146
133
  });
147
- if (!googleConfig) {
148
- googleConfig = {
149
- clientID: environment_1.default.GOOGLE_CLIENT_ID,
150
- clientSecret: environment_1.default.GOOGLE_CLIENT_SECRET,
151
- };
134
+ const json = yield response.json();
135
+ if (response.status !== 200) {
136
+ throw new Error(`Error authenticating with google sheets. ${json.error_description}`);
152
137
  }
153
- const oauthClient = new google_auth_library_1.OAuth2Client({
154
- clientId: googleConfig.clientID,
155
- clientSecret: googleConfig.clientSecret,
156
- });
157
- const tokenResponse = yield this.fetchAccessToken({
158
- client_id: googleConfig.clientID,
159
- client_secret: googleConfig.clientSecret,
160
- refresh_token: this.config.auth.refreshToken,
161
- });
162
- oauthClient.setCredentials({
163
- refresh_token: this.config.auth.refreshToken,
164
- access_token: tokenResponse.access_token,
165
- });
166
- this.client.useOAuth2Client(oauthClient);
167
- yield this.client.loadInfo();
168
- }
169
- catch (err) {
170
- console.error("Error connecting to google sheets", err);
171
- throw err;
172
- }
173
- });
174
- }
175
- buildSchema(datasourceId) {
176
- return __awaiter(this, void 0, void 0, function* () {
177
- yield this.connect();
178
- const sheets = yield this.client.sheetsByIndex;
179
- const tables = {};
180
- for (let sheet of sheets) {
181
- // must fetch rows to determine schema
182
- yield sheet.getRows();
183
- // build schema
184
- const schema = {};
185
- // build schema from headers
186
- for (let header of sheet.headerValues) {
187
- schema[header] = {
188
- name: header,
189
- type: constants_1.FieldTypes.STRING,
190
- };
191
- }
192
- // create tables
193
- tables[sheet.title] = {
194
- _id: (0, utils_1.buildExternalTableId)(datasourceId, sheet.title),
195
- name: sheet.title,
196
- primary: ["rowNumber"],
197
- schema,
198
- };
199
- }
200
- this.tables = tables;
201
- });
202
- }
203
- query(json) {
204
- return __awaiter(this, void 0, void 0, function* () {
205
- const sheet = json.endpoint.entityId;
206
- const handlers = {
207
- [constants_1.DataSourceOperation.CREATE]: () => this.create({ sheet, row: json.body }),
208
- [constants_1.DataSourceOperation.READ]: () => this.read({ sheet }),
209
- [constants_1.DataSourceOperation.UPDATE]: () => {
210
- var _a, _b, _c;
211
- return this.update({
212
- // exclude the header row and zero index
213
- 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,
214
- sheet,
215
- row: json.body,
138
+ return json;
139
+ });
140
+ }
141
+ connect() {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ try {
144
+ // Initialise oAuth client
145
+ const db = getGlobalDB();
146
+ let googleConfig = yield getScopedConfig(db, {
147
+ type: Configs.GOOGLE,
216
148
  });
217
- },
218
- [constants_1.DataSourceOperation.DELETE]: () => {
219
- var _a, _b, _c;
220
- return this.delete({
221
- // exclude the header row and zero index
222
- 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,
223
- sheet,
149
+ if (!googleConfig) {
150
+ googleConfig = {
151
+ clientID: environment_1.default.GOOGLE_CLIENT_ID,
152
+ clientSecret: environment_1.default.GOOGLE_CLIENT_SECRET,
153
+ };
154
+ }
155
+ const oauthClient = new google_auth_library_1.OAuth2Client({
156
+ clientId: googleConfig.clientID,
157
+ clientSecret: googleConfig.clientSecret,
224
158
  });
225
- },
226
- [constants_1.DataSourceOperation.CREATE_TABLE]: () => { var _a; return this.createTable((_a = json === null || json === void 0 ? void 0 : json.table) === null || _a === void 0 ? void 0 : _a.name); },
227
- [constants_1.DataSourceOperation.UPDATE_TABLE]: () => this.updateTable(json.table),
228
- [constants_1.DataSourceOperation.DELETE_TABLE]: () => { var _a; return this.deleteTable((_a = json === null || json === void 0 ? void 0 : json.table) === null || _a === void 0 ? void 0 : _a.name); },
229
- };
230
- const internalQueryMethod = handlers[json.endpoint.operation];
231
- return yield internalQueryMethod();
232
- });
233
- }
234
- buildRowObject(headers, values, rowNumber) {
235
- const rowObject = { rowNumber };
236
- for (let i = 0; i < headers.length; i++) {
237
- rowObject._id = rowNumber;
238
- rowObject[headers[i]] = values[i];
159
+ const tokenResponse = yield this.fetchAccessToken({
160
+ client_id: googleConfig.clientID,
161
+ client_secret: googleConfig.clientSecret,
162
+ refresh_token: this.config.auth.refreshToken,
163
+ });
164
+ oauthClient.setCredentials({
165
+ refresh_token: this.config.auth.refreshToken,
166
+ access_token: tokenResponse.access_token,
167
+ });
168
+ this.client.useOAuth2Client(oauthClient);
169
+ yield this.client.loadInfo();
170
+ }
171
+ catch (err) {
172
+ console.error("Error connecting to google sheets", err);
173
+ throw err;
174
+ }
175
+ });
239
176
  }
240
- return rowObject;
241
- }
242
- createTable(name) {
243
- return __awaiter(this, void 0, void 0, function* () {
244
- try {
177
+ buildSchema(datasourceId) {
178
+ return __awaiter(this, void 0, void 0, function* () {
245
179
  yield this.connect();
246
- return yield this.client.addSheet({ title: name });
247
- }
248
- catch (err) {
249
- console.error("Error creating new table in google sheets", err);
250
- throw err;
251
- }
252
- });
253
- }
254
- updateTable(table) {
255
- return __awaiter(this, void 0, void 0, function* () {
256
- try {
257
- yield this.connect();
258
- const sheet = yield this.client.sheetsByTitle[table.name];
259
- yield sheet.loadHeaderRow();
260
- if (table._rename) {
261
- const headers = [];
180
+ const sheets = yield this.client.sheetsByIndex;
181
+ const tables = {};
182
+ for (let sheet of sheets) {
183
+ // must fetch rows to determine schema
184
+ yield sheet.getRows();
185
+ // build schema
186
+ const schema = {};
187
+ // build schema from headers
262
188
  for (let header of sheet.headerValues) {
263
- if (header === table._rename.old) {
264
- headers.push(table._rename.updated);
265
- }
266
- else {
267
- headers.push(header);
189
+ schema[header] = {
190
+ name: header,
191
+ type: constants_1.FieldTypes.STRING,
192
+ };
193
+ }
194
+ // create tables
195
+ tables[sheet.title] = {
196
+ _id: (0, utils_1.buildExternalTableId)(datasourceId, sheet.title),
197
+ name: sheet.title,
198
+ primary: ["rowNumber"],
199
+ schema,
200
+ };
201
+ }
202
+ this.tables = tables;
203
+ });
204
+ }
205
+ query(json) {
206
+ return __awaiter(this, void 0, void 0, function* () {
207
+ const sheet = json.endpoint.entityId;
208
+ const handlers = {
209
+ [constants_1.DataSourceOperation.CREATE]: () => this.create({ sheet, row: json.body }),
210
+ [constants_1.DataSourceOperation.READ]: () => this.read({ sheet }),
211
+ [constants_1.DataSourceOperation.UPDATE]: () => {
212
+ var _a, _b, _c;
213
+ return this.update({
214
+ // exclude the header row and zero index
215
+ 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,
216
+ sheet,
217
+ row: json.body,
218
+ });
219
+ },
220
+ [constants_1.DataSourceOperation.DELETE]: () => {
221
+ var _a, _b, _c;
222
+ return this.delete({
223
+ // exclude the header row and zero index
224
+ 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,
225
+ sheet,
226
+ });
227
+ },
228
+ [constants_1.DataSourceOperation.CREATE_TABLE]: () => { var _a; return this.createTable((_a = json === null || json === void 0 ? void 0 : json.table) === null || _a === void 0 ? void 0 : _a.name); },
229
+ [constants_1.DataSourceOperation.UPDATE_TABLE]: () => this.updateTable(json.table),
230
+ [constants_1.DataSourceOperation.DELETE_TABLE]: () => { var _a; return this.deleteTable((_a = json === null || json === void 0 ? void 0 : json.table) === null || _a === void 0 ? void 0 : _a.name); },
231
+ };
232
+ const internalQueryMethod = handlers[json.endpoint.operation];
233
+ return yield internalQueryMethod();
234
+ });
235
+ }
236
+ buildRowObject(headers, values, rowNumber) {
237
+ const rowObject = { rowNumber };
238
+ for (let i = 0; i < headers.length; i++) {
239
+ rowObject._id = rowNumber;
240
+ rowObject[headers[i]] = values[i];
241
+ }
242
+ return rowObject;
243
+ }
244
+ createTable(name) {
245
+ return __awaiter(this, void 0, void 0, function* () {
246
+ try {
247
+ yield this.connect();
248
+ const sheet = yield this.client.addSheet({ title: name });
249
+ return sheet;
250
+ }
251
+ catch (err) {
252
+ console.error("Error creating new table in google sheets", err);
253
+ throw err;
254
+ }
255
+ });
256
+ }
257
+ updateTable(table) {
258
+ return __awaiter(this, void 0, void 0, function* () {
259
+ try {
260
+ yield this.connect();
261
+ const sheet = yield this.client.sheetsByTitle[table.name];
262
+ yield sheet.loadHeaderRow();
263
+ if (table._rename) {
264
+ const headers = [];
265
+ for (let header of sheet.headerValues) {
266
+ if (header === table._rename.old) {
267
+ headers.push(table._rename.updated);
268
+ }
269
+ else {
270
+ headers.push(header);
271
+ }
268
272
  }
273
+ yield sheet.setHeaderRow(headers);
274
+ }
275
+ else {
276
+ let newField = Object.keys(table.schema).find(key => !sheet.headerValues.includes(key));
277
+ yield sheet.setHeaderRow([...sheet.headerValues, newField]);
269
278
  }
270
- yield sheet.setHeaderRow(headers);
271
279
  }
272
- else {
273
- let newField = Object.keys(table.schema).find(key => !sheet.headerValues.includes(key));
274
- yield sheet.setHeaderRow([...sheet.headerValues, newField]);
280
+ catch (err) {
281
+ console.error("Error updating table in google sheets", err);
282
+ throw err;
275
283
  }
276
- }
277
- catch (err) {
278
- console.error("Error updating table in google sheets", err);
279
- throw err;
280
- }
281
- });
282
- }
283
- deleteTable(sheet) {
284
- return __awaiter(this, void 0, void 0, function* () {
285
- try {
286
- yield this.connect();
287
- const sheetToDelete = yield this.client.sheetsByTitle[sheet];
288
- return yield sheetToDelete.delete();
289
- }
290
- catch (err) {
291
- console.error("Error deleting table in google sheets", err);
292
- throw err;
293
- }
294
- });
295
- }
296
- create(query) {
297
- return __awaiter(this, void 0, void 0, function* () {
298
- try {
299
- yield this.connect();
300
- const sheet = yield this.client.sheetsByTitle[query.sheet];
301
- const rowToInsert = typeof query.row === "string" ? JSON.parse(query.row) : query.row;
302
- const row = yield sheet.addRow(rowToInsert);
303
- return [
304
- this.buildRowObject(sheet.headerValues, row._rawData, row._rowNumber),
305
- ];
306
- }
307
- catch (err) {
308
- console.error("Error writing to google sheets", err);
309
- throw err;
310
- }
311
- });
312
- }
313
- read(query) {
314
- return __awaiter(this, void 0, void 0, function* () {
315
- try {
316
- yield this.connect();
317
- const sheet = yield this.client.sheetsByTitle[query.sheet];
318
- const rows = yield sheet.getRows();
319
- const headerValues = sheet.headerValues;
320
- const response = [];
321
- for (let row of rows) {
322
- response.push(this.buildRowObject(headerValues, row._rawData, row._rowNumber));
284
+ });
285
+ }
286
+ deleteTable(sheet) {
287
+ return __awaiter(this, void 0, void 0, function* () {
288
+ try {
289
+ yield this.connect();
290
+ const sheetToDelete = yield this.client.sheetsByTitle[sheet];
291
+ return yield sheetToDelete.delete();
323
292
  }
324
- return response;
325
- }
326
- catch (err) {
327
- console.error("Error reading from google sheets", err);
328
- throw err;
329
- }
330
- });
331
- }
332
- update(query) {
333
- return __awaiter(this, void 0, void 0, function* () {
334
- try {
293
+ catch (err) {
294
+ console.error("Error deleting table in google sheets", err);
295
+ throw err;
296
+ }
297
+ });
298
+ }
299
+ create(query) {
300
+ return __awaiter(this, void 0, void 0, function* () {
301
+ try {
302
+ yield this.connect();
303
+ const sheet = yield this.client.sheetsByTitle[query.sheet];
304
+ const rowToInsert = typeof query.row === "string" ? JSON.parse(query.row) : query.row;
305
+ const row = yield sheet.addRow(rowToInsert);
306
+ return [
307
+ this.buildRowObject(sheet.headerValues, row._rawData, row._rowNumber),
308
+ ];
309
+ }
310
+ catch (err) {
311
+ console.error("Error writing to google sheets", err);
312
+ throw err;
313
+ }
314
+ });
315
+ }
316
+ read(query) {
317
+ return __awaiter(this, void 0, void 0, function* () {
318
+ try {
319
+ yield this.connect();
320
+ const sheet = yield this.client.sheetsByTitle[query.sheet];
321
+ const rows = yield sheet.getRows();
322
+ const headerValues = sheet.headerValues;
323
+ const response = [];
324
+ for (let row of rows) {
325
+ response.push(this.buildRowObject(headerValues, row._rawData, row._rowNumber));
326
+ }
327
+ return response;
328
+ }
329
+ catch (err) {
330
+ console.error("Error reading from google sheets", err);
331
+ throw err;
332
+ }
333
+ });
334
+ }
335
+ update(query) {
336
+ return __awaiter(this, void 0, void 0, function* () {
337
+ try {
338
+ yield this.connect();
339
+ const sheet = yield this.client.sheetsByTitle[query.sheet];
340
+ const rows = yield sheet.getRows();
341
+ const row = rows[query.rowIndex];
342
+ if (row) {
343
+ const updateValues = typeof query.row === "string" ? JSON.parse(query.row) : query.row;
344
+ for (let key in updateValues) {
345
+ row[key] = updateValues[key];
346
+ }
347
+ yield row.save();
348
+ return [
349
+ this.buildRowObject(sheet.headerValues, row._rawData, row._rowNumber),
350
+ ];
351
+ }
352
+ else {
353
+ throw new Error("Row does not exist.");
354
+ }
355
+ }
356
+ catch (err) {
357
+ console.error("Error reading from google sheets", err);
358
+ throw err;
359
+ }
360
+ });
361
+ }
362
+ delete(query) {
363
+ return __awaiter(this, void 0, void 0, function* () {
335
364
  yield this.connect();
336
365
  const sheet = yield this.client.sheetsByTitle[query.sheet];
337
366
  const rows = yield sheet.getRows();
338
367
  const row = rows[query.rowIndex];
339
368
  if (row) {
340
- const updateValues = typeof query.row === "string" ? JSON.parse(query.row) : query.row;
341
- for (let key in updateValues) {
342
- row[key] = updateValues[key];
343
- }
344
- yield row.save();
345
- return [
346
- this.buildRowObject(sheet.headerValues, row._rawData, row._rowNumber),
347
- ];
369
+ yield row.delete();
370
+ return [{ deleted: query.rowIndex }];
348
371
  }
349
372
  else {
350
373
  throw new Error("Row does not exist.");
351
374
  }
352
- }
353
- catch (err) {
354
- console.error("Error reading from google sheets", err);
355
- throw err;
356
- }
357
- });
358
- }
359
- delete(query) {
360
- return __awaiter(this, void 0, void 0, function* () {
361
- yield this.connect();
362
- const sheet = yield this.client.sheetsByTitle[query.sheet];
363
- const rows = yield sheet.getRows();
364
- const row = rows[query.rowIndex];
365
- if (row) {
366
- yield row.delete();
367
- return [{ deleted: query.rowIndex }];
368
- }
369
- else {
370
- throw new Error("Row does not exist.");
371
- }
372
- });
375
+ });
376
+ }
373
377
  }
374
- }
375
- exports.default = {
376
- schema: SCHEMA,
377
- integration: GoogleSheetsIntegration,
378
- };
378
+ module.exports = {
379
+ schema: SCHEMA,
380
+ integration: GoogleSheetsIntegration,
381
+ };
382
+ })(GoogleSheetsModule || (GoogleSheetsModule = {}));