@budibase/server 2.6.19-alpha.2 → 2.6.19-alpha.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 (387) hide show
  1. package/.dockerignore +7 -6
  2. package/Dockerfile +16 -8
  3. package/builder/assets/{index.6c1171e2.js → index.47cc7efc.js} +343 -334
  4. package/builder/assets/{index.07382a47.css → index.ffb6a106.css} +2 -2
  5. package/builder/index.html +2 -2
  6. package/client/manifest.json +5229 -0
  7. package/dist/automation.js +32364 -0
  8. package/dist/automation.js.map +7 -0
  9. package/dist/index.js +44582 -13
  10. package/dist/index.js.map +7 -0
  11. package/dist/query.js +24345 -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 +30 -13
  16. package/pm2.config.js +1 -1
  17. package/scripts/build.js +48 -0
  18. package/src/api/controllers/automation.ts +37 -9
  19. package/src/api/controllers/datasource.ts +16 -0
  20. package/src/api/controllers/row/internal.ts +1 -1
  21. package/src/api/controllers/static/index.ts +3 -3
  22. package/src/api/controllers/table/internal.ts +2 -6
  23. package/src/api/controllers/table/utils.ts +32 -1
  24. package/src/api/controllers/webhook.ts +33 -9
  25. package/src/api/routes/automation.ts +0 -1
  26. package/src/api/routes/datasource.ts +5 -0
  27. package/src/api/routes/static.ts +3 -1
  28. package/src/api/routes/tests/{automation.spec.js → automation.spec.ts} +106 -31
  29. package/src/api/routes/tests/datasource.spec.ts +1 -1
  30. package/src/api/routes/tests/{webhook.spec.js → webhook.spec.ts} +33 -11
  31. package/src/automations/actions.ts +8 -0
  32. package/src/automations/steps/bash.ts +4 -0
  33. package/src/automations/steps/collect.ts +58 -0
  34. package/src/automations/steps/createRow.ts +4 -0
  35. package/src/automations/steps/delay.ts +1 -0
  36. package/src/automations/steps/deleteRow.ts +4 -0
  37. package/src/automations/steps/discord.ts +4 -0
  38. package/src/automations/steps/executeQuery.ts +4 -0
  39. package/src/automations/steps/executeScript.ts +4 -0
  40. package/src/automations/steps/filter.ts +1 -0
  41. package/src/automations/steps/loop.ts +1 -0
  42. package/src/automations/steps/make.ts +4 -0
  43. package/src/automations/steps/openai.ts +106 -0
  44. package/src/automations/steps/outgoingWebhook.ts +4 -0
  45. package/src/automations/steps/queryRows.ts +4 -0
  46. package/src/automations/steps/sendSmtpEmail.ts +4 -0
  47. package/src/automations/steps/serverLog.ts +4 -0
  48. package/src/automations/steps/slack.ts +4 -0
  49. package/src/automations/steps/updateRow.ts +4 -0
  50. package/src/automations/steps/zapier.ts +4 -0
  51. package/src/automations/tests/openai.spec.ts +86 -0
  52. package/src/automations/triggers.ts +3 -2
  53. package/src/constants/index.ts +17 -16
  54. package/src/db/inMemoryView.ts +1 -0
  55. package/src/environment.ts +2 -0
  56. package/src/integration-test/postgres.spec.ts +47 -4
  57. package/src/integrations/airtable.ts +3 -1
  58. package/src/integrations/arangodb.ts +3 -1
  59. package/src/integrations/base/sqlTable.ts +0 -1
  60. package/src/integrations/couchdb.ts +3 -1
  61. package/src/integrations/dynamodb.ts +3 -1
  62. package/src/integrations/elasticsearch.ts +3 -1
  63. package/src/integrations/firebase.ts +3 -1
  64. package/src/integrations/googlesheets.ts +11 -3
  65. package/src/integrations/microsoftSqlServer.ts +18 -2
  66. package/src/integrations/mongodb.ts +3 -1
  67. package/src/integrations/mysql.ts +27 -11
  68. package/src/integrations/oracle.ts +11 -1
  69. package/src/integrations/postgres.ts +27 -10
  70. package/src/integrations/redis.ts +3 -1
  71. package/src/integrations/s3.ts +3 -1
  72. package/src/integrations/snowflake.ts +3 -1
  73. package/src/integrations/tests/googlesheets.spec.ts +41 -9
  74. package/src/sdk/app/automations/index.ts +2 -0
  75. package/src/sdk/app/automations/utils.ts +7 -0
  76. package/src/tests/utilities/TestConfiguration.ts +4 -2
  77. package/src/tests/utilities/structures.ts +42 -0
  78. package/src/threads/automation.ts +39 -0
  79. package/src/utilities/fileSystem/app.ts +1 -1
  80. package/src/utilities/fileSystem/clientLibrary.ts +8 -3
  81. package/src/utilities/fileSystem/filesystem.ts +3 -1
  82. package/tsconfig.build.json +9 -1
  83. package/tsconfig.json +1 -14
  84. package/dist/api/controllers/analytics.js +0 -46
  85. package/dist/api/controllers/apikeys.js +0 -72
  86. package/dist/api/controllers/application.js +0 -574
  87. package/dist/api/controllers/auth.js +0 -80
  88. package/dist/api/controllers/automation.js +0 -303
  89. package/dist/api/controllers/backup.js +0 -37
  90. package/dist/api/controllers/component.js +0 -59
  91. package/dist/api/controllers/datasource.js +0 -337
  92. package/dist/api/controllers/deploy/Deployment.js +0 -53
  93. package/dist/api/controllers/deploy/index.js +0 -198
  94. package/dist/api/controllers/dev.js +0 -146
  95. package/dist/api/controllers/integration.js +0 -28
  96. package/dist/api/controllers/layout.js +0 -49
  97. package/dist/api/controllers/metadata.js +0 -63
  98. package/dist/api/controllers/migrations.js +0 -29
  99. package/dist/api/controllers/ops.js +0 -40
  100. package/dist/api/controllers/permission.js +0 -162
  101. package/dist/api/controllers/plugin/file.js +0 -24
  102. package/dist/api/controllers/plugin/github.js +0 -69
  103. package/dist/api/controllers/plugin/index.js +0 -112
  104. package/dist/api/controllers/plugin/npm.js +0 -58
  105. package/dist/api/controllers/plugin/uploaders.js +0 -11
  106. package/dist/api/controllers/plugin/url.js +0 -24
  107. package/dist/api/controllers/plugin/utils.js +0 -27
  108. package/dist/api/controllers/public/applications.js +0 -146
  109. package/dist/api/controllers/public/mapping/applications.js +0 -29
  110. package/dist/api/controllers/public/mapping/index.js +0 -11
  111. package/dist/api/controllers/public/mapping/queries.js +0 -36
  112. package/dist/api/controllers/public/mapping/rows.js +0 -24
  113. package/dist/api/controllers/public/mapping/tables.js +0 -23
  114. package/dist/api/controllers/public/mapping/types.js +0 -2
  115. package/dist/api/controllers/public/mapping/users.js +0 -29
  116. package/dist/api/controllers/public/metrics.js +0 -113
  117. package/dist/api/controllers/public/queries.js +0 -58
  118. package/dist/api/controllers/public/rows.js +0 -120
  119. package/dist/api/controllers/public/tables.js +0 -95
  120. package/dist/api/controllers/public/users.js +0 -93
  121. package/dist/api/controllers/public/utils.js +0 -56
  122. package/dist/api/controllers/query/import/index.js +0 -87
  123. package/dist/api/controllers/query/import/sources/base/index.js +0 -75
  124. package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
  125. package/dist/api/controllers/query/import/sources/curl.js +0 -99
  126. package/dist/api/controllers/query/import/sources/openapi2.js +0 -145
  127. package/dist/api/controllers/query/import/sources/openapi3.js +0 -177
  128. package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
  129. package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
  130. package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
  131. package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
  132. package/dist/api/controllers/query/index.js +0 -299
  133. package/dist/api/controllers/query/validation.js +0 -53
  134. package/dist/api/controllers/role.js +0 -109
  135. package/dist/api/controllers/routing.js +0 -105
  136. package/dist/api/controllers/row/ExternalRequest.js +0 -683
  137. package/dist/api/controllers/row/external.js +0 -339
  138. package/dist/api/controllers/row/index.js +0 -203
  139. package/dist/api/controllers/row/internal.js +0 -509
  140. package/dist/api/controllers/row/internalSearch.js +0 -28
  141. package/dist/api/controllers/row/staticFormula.js +0 -165
  142. package/dist/api/controllers/row/utils.js +0 -183
  143. package/dist/api/controllers/screen.js +0 -110
  144. package/dist/api/controllers/script.js +0 -30
  145. package/dist/api/controllers/static/index.js +0 -268
  146. package/dist/api/controllers/table/bulkFormula.js +0 -173
  147. package/dist/api/controllers/table/external.js +0 -279
  148. package/dist/api/controllers/table/index.js +0 -179
  149. package/dist/api/controllers/table/internal.js +0 -197
  150. package/dist/api/controllers/table/utils.js +0 -379
  151. package/dist/api/controllers/templates.js +0 -56
  152. package/dist/api/controllers/user.js +0 -124
  153. package/dist/api/controllers/view/exporters.js +0 -46
  154. package/dist/api/controllers/view/index.js +0 -193
  155. package/dist/api/controllers/view/utils.js +0 -177
  156. package/dist/api/controllers/view/viewBuilder.js +0 -158
  157. package/dist/api/controllers/webhook.js +0 -134
  158. package/dist/api/index.js +0 -55
  159. package/dist/api/routes/analytics.js +0 -34
  160. package/dist/api/routes/apikeys.js +0 -37
  161. package/dist/api/routes/application.js +0 -48
  162. package/dist/api/routes/auth.js +0 -33
  163. package/dist/api/routes/automation.js +0 -50
  164. package/dist/api/routes/backup.js +0 -35
  165. package/dist/api/routes/component.js +0 -35
  166. package/dist/api/routes/datasource.js +0 -44
  167. package/dist/api/routes/deploy.js +0 -37
  168. package/dist/api/routes/dev.js +0 -49
  169. package/dist/api/routes/index.js +0 -75
  170. package/dist/api/routes/integration.js +0 -37
  171. package/dist/api/routes/layout.js +0 -37
  172. package/dist/api/routes/metadata.js +0 -40
  173. package/dist/api/routes/migrations.js +0 -36
  174. package/dist/api/routes/ops.js +0 -52
  175. package/dist/api/routes/permission.js +0 -44
  176. package/dist/api/routes/plugin.js +0 -39
  177. package/dist/api/routes/public/applications.js +0 -174
  178. package/dist/api/routes/public/index.js +0 -140
  179. package/dist/api/routes/public/metrics.js +0 -30
  180. package/dist/api/routes/public/middleware/mapper.js +0 -97
  181. package/dist/api/routes/public/queries.js +0 -72
  182. package/dist/api/routes/public/rows.js +0 -158
  183. package/dist/api/routes/public/tables.js +0 -152
  184. package/dist/api/routes/public/users.js +0 -135
  185. package/dist/api/routes/public/utils/Endpoint.js +0 -36
  186. package/dist/api/routes/query.js +0 -47
  187. package/dist/api/routes/role.js +0 -40
  188. package/dist/api/routes/routing.js +0 -39
  189. package/dist/api/routes/row.js +0 -239
  190. package/dist/api/routes/screen.js +0 -39
  191. package/dist/api/routes/script.js +0 -35
  192. package/dist/api/routes/static.js +0 -80
  193. package/dist/api/routes/table.js +0 -163
  194. package/dist/api/routes/templates.js +0 -37
  195. package/dist/api/routes/user.js +0 -43
  196. package/dist/api/routes/utils/validators.js +0 -238
  197. package/dist/api/routes/view.js +0 -42
  198. package/dist/api/routes/webhook.js +0 -43
  199. package/dist/app.js +0 -132
  200. package/dist/automations/actions.js +0 -137
  201. package/dist/automations/automationUtils.js +0 -173
  202. package/dist/automations/bullboard.js +0 -71
  203. package/dist/automations/index.js +0 -43
  204. package/dist/automations/logging/index.js +0 -53
  205. package/dist/automations/steps/bash.js +0 -111
  206. package/dist/automations/steps/createRow.js +0 -108
  207. package/dist/automations/steps/delay.js +0 -53
  208. package/dist/automations/steps/deleteRow.js +0 -96
  209. package/dist/automations/steps/discord.js +0 -116
  210. package/dist/automations/steps/executeQuery.js +0 -134
  211. package/dist/automations/steps/executeScript.js +0 -106
  212. package/dist/automations/steps/filter.js +0 -112
  213. package/dist/automations/steps/loop.js +0 -54
  214. package/dist/automations/steps/make.js +0 -134
  215. package/dist/automations/steps/outgoingWebhook.js +0 -166
  216. package/dist/automations/steps/queryRows.js +0 -216
  217. package/dist/automations/steps/sendSmtpEmail.js +0 -115
  218. package/dist/automations/steps/serverLog.js +0 -65
  219. package/dist/automations/steps/slack.js +0 -98
  220. package/dist/automations/steps/updateRow.js +0 -144
  221. package/dist/automations/steps/utils.js +0 -56
  222. package/dist/automations/steps/zapier.js +0 -130
  223. package/dist/automations/triggerInfo/app.js +0 -36
  224. package/dist/automations/triggerInfo/cron.js +0 -35
  225. package/dist/automations/triggerInfo/index.js +0 -40
  226. package/dist/automations/triggerInfo/rowDeleted.js +0 -36
  227. package/dist/automations/triggerInfo/rowSaved.js +0 -44
  228. package/dist/automations/triggerInfo/rowUpdated.js +0 -44
  229. package/dist/automations/triggerInfo/webhook.js +0 -40
  230. package/dist/automations/triggers.js +0 -181
  231. package/dist/automations/utils.js +0 -275
  232. package/dist/constants/definitions.js +0 -2
  233. package/dist/constants/index.js +0 -181
  234. package/dist/constants/layouts.js +0 -148
  235. package/dist/constants/screens.js +0 -51
  236. package/dist/db/defaultData/datasource_bb_default.js +0 -574
  237. package/dist/db/defaultData/employeeImport.js +0 -155
  238. package/dist/db/defaultData/expensesImport.js +0 -117
  239. package/dist/db/defaultData/inventoryImport.js +0 -109
  240. package/dist/db/defaultData/jobsImport.js +0 -152
  241. package/dist/db/dynamoClient.js +0 -124
  242. package/dist/db/inMemoryView.js +0 -62
  243. package/dist/db/index.js +0 -43
  244. package/dist/db/linkedRows/LinkController.js +0 -392
  245. package/dist/db/linkedRows/LinkDocument.js +0 -33
  246. package/dist/db/linkedRows/index.js +0 -206
  247. package/dist/db/linkedRows/linkUtils.js +0 -131
  248. package/dist/db/newid.js +0 -7
  249. package/dist/db/utils.js +0 -248
  250. package/dist/db/views/staticViews.js +0 -144
  251. package/dist/ddApm.js +0 -11
  252. package/dist/definitions/automations.js +0 -8
  253. package/dist/definitions/common.js +0 -2
  254. package/dist/definitions/datasource.js +0 -7
  255. package/dist/definitions/openapi.js +0 -6
  256. package/dist/environment.js +0 -109
  257. package/dist/events/AutomationEmitter.js +0 -53
  258. package/dist/events/BudibaseEmitter.js +0 -25
  259. package/dist/events/docUpdates/index.js +0 -17
  260. package/dist/events/docUpdates/processors.js +0 -18
  261. package/dist/events/docUpdates/syncUsers.js +0 -49
  262. package/dist/events/index.js +0 -11
  263. package/dist/events/utils.js +0 -43
  264. package/dist/integrations/airtable.js +0 -173
  265. package/dist/integrations/arangodb.js +0 -119
  266. package/dist/integrations/base/query.js +0 -32
  267. package/dist/integrations/base/sql.js +0 -600
  268. package/dist/integrations/base/sqlTable.js +0 -167
  269. package/dist/integrations/base/types.js +0 -2
  270. package/dist/integrations/couchdb.js +0 -140
  271. package/dist/integrations/dynamodb.js +0 -210
  272. package/dist/integrations/elasticsearch.js +0 -201
  273. package/dist/integrations/firebase.js +0 -189
  274. package/dist/integrations/googlesheets.js +0 -484
  275. package/dist/integrations/index.js +0 -138
  276. package/dist/integrations/microsoftSqlServer.js +0 -289
  277. package/dist/integrations/mongodb.js +0 -630
  278. package/dist/integrations/mysql.js +0 -272
  279. package/dist/integrations/oracle.js +0 -404
  280. package/dist/integrations/postgres.js +0 -319
  281. package/dist/integrations/queries/sql.js +0 -84
  282. package/dist/integrations/redis.js +0 -187
  283. package/dist/integrations/rest.js +0 -400
  284. package/dist/integrations/s3.js +0 -256
  285. package/dist/integrations/snowflake.js +0 -114
  286. package/dist/integrations/utils.js +0 -295
  287. package/dist/middleware/appInfo.js +0 -22
  288. package/dist/middleware/authorized.js +0 -112
  289. package/dist/middleware/builder.js +0 -93
  290. package/dist/middleware/currentapp.js +0 -103
  291. package/dist/middleware/joi-validator.js +0 -43
  292. package/dist/middleware/publicApi.js +0 -25
  293. package/dist/middleware/resourceId.js +0 -59
  294. package/dist/middleware/selfhost.js +0 -24
  295. package/dist/middleware/utils.js +0 -8
  296. package/dist/migrations/functions/appUrls.js +0 -42
  297. package/dist/migrations/functions/backfill/app/automations.js +0 -31
  298. package/dist/migrations/functions/backfill/app/datasources.js +0 -28
  299. package/dist/migrations/functions/backfill/app/layouts.js +0 -33
  300. package/dist/migrations/functions/backfill/app/queries.js +0 -49
  301. package/dist/migrations/functions/backfill/app/roles.js +0 -28
  302. package/dist/migrations/functions/backfill/app/screens.js +0 -28
  303. package/dist/migrations/functions/backfill/app/tables.js +0 -37
  304. package/dist/migrations/functions/backfill/app.js +0 -176
  305. package/dist/migrations/functions/backfill/global/configs.js +0 -67
  306. package/dist/migrations/functions/backfill/global/quotas.js +0 -60
  307. package/dist/migrations/functions/backfill/global/users.js +0 -50
  308. package/dist/migrations/functions/backfill/global.js +0 -205
  309. package/dist/migrations/functions/backfill/index.js +0 -32
  310. package/dist/migrations/functions/backfill/installation.js +0 -80
  311. package/dist/migrations/functions/syncQuotas.js +0 -52
  312. package/dist/migrations/functions/tableSettings.js +0 -130
  313. package/dist/migrations/functions/usageQuotas/index.js +0 -16
  314. package/dist/migrations/functions/usageQuotas/syncApps.js +0 -24
  315. package/dist/migrations/functions/usageQuotas/syncPlugins.js +0 -23
  316. package/dist/migrations/functions/usageQuotas/syncRows.js +0 -33
  317. package/dist/migrations/functions/usageQuotas/syncUsers.js +0 -21
  318. package/dist/migrations/functions/userEmailViewCasing.js +0 -24
  319. package/dist/migrations/index.js +0 -111
  320. package/dist/migrations/tests/helpers.js +0 -72
  321. package/dist/migrations/tests/structures.js +0 -37
  322. package/dist/sdk/app/applications/index.js +0 -28
  323. package/dist/sdk/app/applications/sync.js +0 -164
  324. package/dist/sdk/app/applications/utils.js +0 -21
  325. package/dist/sdk/app/automations/index.js +0 -29
  326. package/dist/sdk/app/automations/webhook.js +0 -54
  327. package/dist/sdk/app/backups/constants.js +0 -6
  328. package/dist/sdk/app/backups/exports.js +0 -160
  329. package/dist/sdk/app/backups/imports.js +0 -170
  330. package/dist/sdk/app/backups/index.js +0 -29
  331. package/dist/sdk/app/backups/statistics.js +0 -73
  332. package/dist/sdk/app/datasources/datasources.js +0 -173
  333. package/dist/sdk/app/datasources/index.js +0 -27
  334. package/dist/sdk/app/queries/index.js +0 -27
  335. package/dist/sdk/app/queries/queries.js +0 -60
  336. package/dist/sdk/app/rows/attachments.js +0 -61
  337. package/dist/sdk/app/rows/index.js +0 -28
  338. package/dist/sdk/app/rows/rows.js +0 -30
  339. package/dist/sdk/app/tables/index.js +0 -65
  340. package/dist/sdk/index.js +0 -27
  341. package/dist/sdk/plugins/index.js +0 -27
  342. package/dist/sdk/plugins/plugins.js +0 -53
  343. package/dist/sdk/users/index.js +0 -27
  344. package/dist/sdk/users/utils.js +0 -87
  345. package/dist/sdk/utils/index.js +0 -29
  346. package/dist/startup.js +0 -158
  347. package/dist/threads/automation.js +0 -450
  348. package/dist/threads/definitions.js +0 -2
  349. package/dist/threads/index.js +0 -140
  350. package/dist/threads/query.js +0 -265
  351. package/dist/threads/utils.js +0 -120
  352. package/dist/tsconfig.build.tsbuildinfo +0 -1
  353. package/dist/utilities/appDirectoryTemplate/package.json +0 -10
  354. package/dist/utilities/budibaseDir.js +0 -5
  355. package/dist/utilities/centralPath.js +0 -27
  356. package/dist/utilities/csv.js +0 -33
  357. package/dist/utilities/fileSystem/app.js +0 -88
  358. package/dist/utilities/fileSystem/clientLibrary.js +0 -138
  359. package/dist/utilities/fileSystem/filesystem.js +0 -180
  360. package/dist/utilities/fileSystem/index.js +0 -21
  361. package/dist/utilities/fileSystem/plugin.js +0 -76
  362. package/dist/utilities/fileSystem/processor.js +0 -34
  363. package/dist/utilities/fileSystem/template.js +0 -47
  364. package/dist/utilities/global.js +0 -149
  365. package/dist/utilities/index.js +0 -143
  366. package/dist/utilities/redis.js +0 -117
  367. package/dist/utilities/retry.js +0 -30
  368. package/dist/utilities/routing/index.js +0 -39
  369. package/dist/utilities/rowProcessor/index.js +0 -282
  370. package/dist/utilities/rowProcessor/map.js +0 -116
  371. package/dist/utilities/rowProcessor/utils.js +0 -87
  372. package/dist/utilities/schema.js +0 -112
  373. package/dist/utilities/scriptRunner.js +0 -26
  374. package/dist/utilities/security.js +0 -57
  375. package/dist/utilities/statusCodes.js +0 -9
  376. package/dist/utilities/usageQuota/rows.js +0 -88
  377. package/dist/utilities/usageQuota/usageQuoteReset.js +0 -16
  378. package/dist/utilities/users.js +0 -57
  379. package/dist/utilities/workerRequests.js +0 -171
  380. package/dist/watch.js +0 -53
  381. package/dist/websockets/client.js +0 -14
  382. package/dist/websockets/grid.js +0 -60
  383. package/dist/websockets/index.js +0 -17
  384. package/dist/websockets/websocket.js +0 -78
  385. /package/dist/{api/controllers/static/templates/BudibaseApp.svelte → BudibaseApp-Y5NZEDTC.svelte} +0 -0
  386. /package/dist/{api/controllers/static/templates/app.hbs → app.hbs} +0 -0
  387. /package/dist/{api/controllers/static/templates/preview.hbs → preview.hbs} +0 -0
@@ -20,7 +20,6 @@ import {
20
20
  } from "./utils"
21
21
  import Sql from "./base/sql"
22
22
  import { MSSQLTablesResponse, MSSQLColumn } from "./base/types"
23
-
24
23
  const sqlServer = require("mssql")
25
24
  const DEFAULT_SCHEMA = "dbo"
26
25
 
@@ -41,7 +40,10 @@ const SCHEMA: Integration = {
41
40
  "Microsoft SQL Server is a relational database management system developed by Microsoft. ",
42
41
  friendlyName: "MS SQL Server",
43
42
  type: "Relational",
44
- features: [DatasourceFeature.CONNECTION_CHECKING],
43
+ features: {
44
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
45
+ [DatasourceFeature.FETCH_TABLE_NAMES]: true,
46
+ },
45
47
  datasource: {
46
48
  user: {
47
49
  type: DatasourceFieldType.STRING,
@@ -284,6 +286,20 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
284
286
  this.schemaErrors = final.errors
285
287
  }
286
288
 
289
+ async queryTableNames() {
290
+ let tableInfo: MSSQLTablesResponse[] = await this.runSQL(this.TABLES_SQL)
291
+ const schema = this.config.schema || DEFAULT_SCHEMA
292
+ return tableInfo
293
+ .filter((record: any) => record.TABLE_SCHEMA === schema)
294
+ .map((record: any) => record.TABLE_NAME)
295
+ .filter((name: string) => this.MASTER_TABLES.indexOf(name) === -1)
296
+ }
297
+
298
+ async getTableNames() {
299
+ await this.connect()
300
+ return this.queryTableNames()
301
+ }
302
+
287
303
  async read(query: SqlQuery | string) {
288
304
  await this.connect()
289
305
  const response = await this.internalQuery(getSqlQuery(query))
@@ -40,7 +40,9 @@ const getSchema = () => {
40
40
  type: "Non-relational",
41
41
  description:
42
42
  "MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.",
43
- features: [DatasourceFeature.CONNECTION_CHECKING],
43
+ features: {
44
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
45
+ },
44
46
  datasource: {
45
47
  connectionString: {
46
48
  type: DatasourceFieldType.STRING,
@@ -36,7 +36,10 @@ const SCHEMA: Integration = {
36
36
  type: "Relational",
37
37
  description:
38
38
  "MySQL Database Service is a fully managed database service to deploy cloud-native applications. ",
39
- features: [DatasourceFeature.CONNECTION_CHECKING],
39
+ features: {
40
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
41
+ [DatasourceFeature.FETCH_TABLE_NAMES]: true,
42
+ },
40
43
  datasource: {
41
44
  host: {
42
45
  type: DatasourceFieldType.STRING,
@@ -214,20 +217,11 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
214
217
 
215
218
  async buildSchema(datasourceId: string, entities: Record<string, Table>) {
216
219
  const tables: { [key: string]: Table } = {}
217
- const database = this.config.database
218
220
  await this.connect()
219
221
 
220
222
  try {
221
223
  // get the tables first
222
- const tablesResp: Record<string, string>[] = await this.internalQuery(
223
- { sql: "SHOW TABLES;" },
224
- { connect: false }
225
- )
226
- const tableNames: string[] = tablesResp.map(
227
- (obj: any) =>
228
- obj[`Tables_in_${database}`] ||
229
- obj[`Tables_in_${database.toLowerCase()}`]
230
- )
224
+ const tableNames = await this.queryTableNames()
231
225
  for (let tableName of tableNames) {
232
226
  const primaryKeys = []
233
227
  const schema: TableSchema = {}
@@ -274,6 +268,28 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
274
268
  this.schemaErrors = final.errors
275
269
  }
276
270
 
271
+ async queryTableNames() {
272
+ const database = this.config.database
273
+ const tablesResp: Record<string, string>[] = await this.internalQuery(
274
+ { sql: "SHOW TABLES;" },
275
+ { connect: false }
276
+ )
277
+ return tablesResp.map(
278
+ (obj: any) =>
279
+ obj[`Tables_in_${database}`] ||
280
+ obj[`Tables_in_${database.toLowerCase()}`]
281
+ )
282
+ }
283
+
284
+ async getTableNames() {
285
+ await this.connect()
286
+ try {
287
+ return this.queryTableNames()
288
+ } finally {
289
+ await this.disconnect()
290
+ }
291
+ }
292
+
277
293
  async create(query: SqlQuery | string) {
278
294
  const results = await this.internalQuery(getSqlQuery(query))
279
295
  return results.length ? results : [{ created: true }]
@@ -50,7 +50,10 @@ const SCHEMA: Integration = {
50
50
  type: "Relational",
51
51
  description:
52
52
  "Oracle Database is an object-relational database management system developed by Oracle Corporation",
53
- features: [DatasourceFeature.CONNECTION_CHECKING],
53
+ features: {
54
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
55
+ [DatasourceFeature.FETCH_TABLE_NAMES]: true,
56
+ },
54
57
  datasource: {
55
58
  host: {
56
59
  type: DatasourceFieldType.STRING,
@@ -323,6 +326,13 @@ class OracleIntegration extends Sql implements DatasourcePlus {
323
326
  this.schemaErrors = final.errors
324
327
  }
325
328
 
329
+ async getTableNames() {
330
+ const columnsResponse = await this.internalQuery<OracleColumnsResponse>({
331
+ sql: this.COLUMNS_SQL,
332
+ })
333
+ return (columnsResponse.rows || []).map(row => row.TABLE_NAME)
334
+ }
335
+
326
336
  async testConnection() {
327
337
  const response: ConnectionInfo = {
328
338
  connected: false,
@@ -52,7 +52,10 @@ const SCHEMA: Integration = {
52
52
  type: "Relational",
53
53
  description:
54
54
  "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.",
55
- features: [DatasourceFeature.CONNECTION_CHECKING],
55
+ features: {
56
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
57
+ [DatasourceFeature.FETCH_TABLE_NAMES]: true,
58
+ },
56
59
  datasource: {
57
60
  host: {
58
61
  type: DatasourceFieldType.STRING,
@@ -126,14 +129,15 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
126
129
 
127
130
  COLUMNS_SQL!: string
128
131
 
129
- PRIMARY_KEYS_SQL = `
130
- select tc.table_schema, tc.table_name, kc.column_name as primary_key
131
- from information_schema.table_constraints tc
132
- join
133
- information_schema.key_column_usage kc on kc.table_name = tc.table_name
134
- and kc.table_schema = tc.table_schema
135
- and kc.constraint_name = tc.constraint_name
136
- where tc.constraint_type = 'PRIMARY KEY';
132
+ PRIMARY_KEYS_SQL = () => `
133
+ SELECT pg_namespace.nspname table_schema
134
+ , pg_class.relname table_name
135
+ , pg_attribute.attname primary_key
136
+ FROM pg_class
137
+ JOIN pg_index ON pg_class.oid = pg_index.indrelid AND pg_index.indisprimary
138
+ JOIN pg_attribute ON pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = ANY(pg_index.indkey)
139
+ JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
140
+ WHERE pg_namespace.nspname = '${this.config.schema}';
137
141
  `
138
142
 
139
143
  constructor(config: PostgresConfig) {
@@ -239,7 +243,9 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
239
243
  let tableKeys: { [key: string]: string[] } = {}
240
244
  await this.openConnection()
241
245
  try {
242
- const primaryKeysResponse = await this.client.query(this.PRIMARY_KEYS_SQL)
246
+ const primaryKeysResponse = await this.client.query(
247
+ this.PRIMARY_KEYS_SQL()
248
+ )
243
249
  for (let table of primaryKeysResponse.rows) {
244
250
  const tableName = table.table_name
245
251
  if (!tableKeys[tableName]) {
@@ -311,6 +317,17 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
311
317
  }
312
318
  }
313
319
 
320
+ async getTableNames() {
321
+ try {
322
+ await this.openConnection()
323
+ const columnsResponse: { rows: PostgresColumn[] } =
324
+ await this.client.query(this.COLUMNS_SQL)
325
+ return columnsResponse.rows.map(row => row.table_name)
326
+ } finally {
327
+ await this.closeConnection()
328
+ }
329
+ }
330
+
314
331
  async create(query: SqlQuery | string) {
315
332
  const response = await this.internalQuery(getSqlQuery(query))
316
333
  return response.rows.length ? response.rows : [{ created: true }]
@@ -21,7 +21,9 @@ const SCHEMA: Integration = {
21
21
  "Redis is a caching tool, providing powerful key-value store capabilities.",
22
22
  friendlyName: "Redis",
23
23
  type: "Non-relational",
24
- features: [DatasourceFeature.CONNECTION_CHECKING],
24
+ features: {
25
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
26
+ },
25
27
  datasource: {
26
28
  host: {
27
29
  type: "string",
@@ -24,7 +24,9 @@ const SCHEMA: Integration = {
24
24
  "Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance.",
25
25
  friendlyName: "Amazon S3",
26
26
  type: "Object store",
27
- features: [DatasourceFeature.CONNECTION_CHECKING],
27
+ features: {
28
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
29
+ },
28
30
  datasource: {
29
31
  region: {
30
32
  type: "string",
@@ -22,7 +22,9 @@ const SCHEMA: Integration = {
22
22
  "Snowflake is a solution for data warehousing, data lakes, data engineering, data science, data application development, and securely sharing and consuming shared data.",
23
23
  friendlyName: "Snowflake",
24
24
  type: "Relational",
25
- features: [DatasourceFeature.CONNECTION_CHECKING],
25
+ features: {
26
+ [DatasourceFeature.CONNECTION_CHECKING]: true,
27
+ },
26
28
  datasource: {
27
29
  account: {
28
30
  type: "string",
@@ -17,14 +17,15 @@ jest.mock("google-spreadsheet")
17
17
  const { GoogleSpreadsheet } = require("google-spreadsheet")
18
18
 
19
19
  const sheetsByTitle: { [title: string]: GoogleSpreadsheetWorksheet } = {}
20
+ const sheetsByIndex: GoogleSpreadsheetWorksheet[] = []
21
+ const mockGoogleIntegration = {
22
+ useOAuth2Client: jest.fn(),
23
+ loadInfo: jest.fn(),
24
+ sheetsByTitle,
25
+ sheetsByIndex,
26
+ }
20
27
 
21
- GoogleSpreadsheet.mockImplementation(() => {
22
- return {
23
- useOAuth2Client: jest.fn(),
24
- loadInfo: jest.fn(),
25
- sheetsByTitle,
26
- }
27
- })
28
+ GoogleSpreadsheet.mockImplementation(() => mockGoogleIntegration)
28
29
 
29
30
  import { structures } from "@budibase/backend-core/tests"
30
31
  import TestConfiguration from "../../tests/utilities/TestConfiguration"
@@ -53,6 +54,8 @@ describe("Google Sheets Integration", () => {
53
54
  },
54
55
  })
55
56
  await config.init()
57
+
58
+ jest.clearAllMocks()
56
59
  })
57
60
 
58
61
  function createBasicTable(name: string, columns: string[]): Table {
@@ -88,7 +91,7 @@ describe("Google Sheets Integration", () => {
88
91
  }
89
92
 
90
93
  describe("update table", () => {
91
- test("adding a new field will be adding a new header row", async () => {
94
+ it("adding a new field will be adding a new header row", async () => {
92
95
  await config.doInContext(structures.uuid(), async () => {
93
96
  const tableColumns = ["name", "description", "new field"]
94
97
  const table = createBasicTable(structures.uuid(), tableColumns)
@@ -103,7 +106,7 @@ describe("Google Sheets Integration", () => {
103
106
  })
104
107
  })
105
108
 
106
- test("removing an existing field will remove the header from the google sheet", async () => {
109
+ it("removing an existing field will remove the header from the google sheet", async () => {
107
110
  const sheet = await config.doInContext(structures.uuid(), async () => {
108
111
  const tableColumns = ["name"]
109
112
  const table = createBasicTable(structures.uuid(), tableColumns)
@@ -123,4 +126,33 @@ describe("Google Sheets Integration", () => {
123
126
  expect((sheet.setHeaderRow as any).mock.calls[0][0]).toHaveLength(1)
124
127
  })
125
128
  })
129
+
130
+ describe("getTableNames", () => {
131
+ it("can fetch table names", async () => {
132
+ await config.doInContext(structures.uuid(), async () => {
133
+ const sheetNames: string[] = []
134
+ for (let i = 0; i < 5; i++) {
135
+ const sheet = createSheet({ headerValues: [] })
136
+ sheetsByIndex.push(sheet)
137
+ sheetNames.push(sheet.title)
138
+ }
139
+
140
+ const res = await integration.getTableNames()
141
+
142
+ expect(mockGoogleIntegration.loadInfo).toBeCalledTimes(1)
143
+ expect(res).toEqual(sheetNames)
144
+ })
145
+ })
146
+ })
147
+
148
+ describe("testConnection", () => {
149
+ it("can test successful connections", async () => {
150
+ await config.doInContext(structures.uuid(), async () => {
151
+ const res = await integration.testConnection()
152
+
153
+ expect(mockGoogleIntegration.loadInfo).toBeCalledTimes(1)
154
+ expect(res).toEqual({ connected: true })
155
+ })
156
+ })
157
+ })
126
158
  })
@@ -1,5 +1,7 @@
1
1
  import * as webhook from "./webhook"
2
+ import * as utils from "./utils"
2
3
 
3
4
  export default {
4
5
  webhook,
6
+ utils,
5
7
  }
@@ -0,0 +1,7 @@
1
+ import { Automation, AutomationActionStepId } from "@budibase/types"
2
+
3
+ export function checkForCollectStep(automation: Automation) {
4
+ return automation.definition.steps.some(
5
+ (step: any) => step.stepId === AutomationActionStepId.COLLECT
6
+ )
7
+ }
@@ -373,7 +373,7 @@ class TestConfiguration {
373
373
 
374
374
  // HEADERS
375
375
 
376
- defaultHeaders(extras = {}) {
376
+ defaultHeaders(extras = {}, prodApp = false) {
377
377
  const tenantId = this.getTenantId()
378
378
  const authObj: AuthToken = {
379
379
  userId: this.defaultUserValues.globalUserId,
@@ -390,7 +390,9 @@ class TestConfiguration {
390
390
  ...extras,
391
391
  }
392
392
 
393
- if (this.appId) {
393
+ if (prodApp) {
394
+ headers[constants.Header.APP_ID] = this.prodAppId
395
+ } else if (this.appId) {
394
396
  headers[constants.Header.APP_ID] = this.appId
395
397
  }
396
398
  return headers
@@ -199,6 +199,48 @@ export function loopAutomation(tableId: string, loopOpts?: any): Automation {
199
199
  return automation as Automation
200
200
  }
201
201
 
202
+ export function collectAutomation(tableId?: string): Automation {
203
+ const automation: any = {
204
+ name: "looping",
205
+ type: "automation",
206
+ definition: {
207
+ steps: [
208
+ {
209
+ id: "b",
210
+ type: "ACTION",
211
+ internal: true,
212
+ stepId: AutomationActionStepId.EXECUTE_SCRIPT,
213
+ inputs: {
214
+ code: "return [1,2,3]",
215
+ },
216
+ schema: BUILTIN_ACTION_DEFINITIONS.EXECUTE_SCRIPT.schema,
217
+ },
218
+ {
219
+ id: "c",
220
+ type: "ACTION",
221
+ internal: true,
222
+ stepId: AutomationActionStepId.COLLECT,
223
+ inputs: {
224
+ collection: "{{ literal steps.1.value }}",
225
+ },
226
+ schema: BUILTIN_ACTION_DEFINITIONS.SERVER_LOG.schema,
227
+ },
228
+ ],
229
+ trigger: {
230
+ id: "a",
231
+ type: "TRIGGER",
232
+ event: "row:save",
233
+ stepId: AutomationTriggerStepId.ROW_SAVED,
234
+ inputs: {
235
+ tableId,
236
+ },
237
+ schema: TRIGGER_DEFINITIONS.ROW_SAVED.schema,
238
+ },
239
+ },
240
+ }
241
+ return automation as Automation
242
+ }
243
+
202
244
  export function basicRow(tableId: string) {
203
245
  return {
204
246
  name: "Test Contact",
@@ -68,6 +68,7 @@ class Orchestrator {
68
68
  constructor(job: AutomationJob) {
69
69
  let automation = job.data.automation
70
70
  let triggerOutput = job.data.event
71
+ let timeout = job.data.event.timeout
71
72
  const metadata = triggerOutput.metadata
72
73
  this._chainCount = metadata ? metadata.automationChainCount! : 0
73
74
  this._appId = triggerOutput.appId as string
@@ -240,7 +241,9 @@ class Orchestrator {
240
241
  let loopStepNumber: any = undefined
241
242
  let loopSteps: LoopStep[] | undefined = []
242
243
  let metadata
244
+ let timeoutFlag = false
243
245
  let wasLoopStep = false
246
+ let timeout = this._job.data.event.timeout
244
247
  // check if this is a recurring automation,
245
248
  if (isProdAppID(this._appId) && isRecurring(automation)) {
246
249
  metadata = await this.getMetadata()
@@ -251,6 +254,16 @@ class Orchestrator {
251
254
  }
252
255
 
253
256
  for (let step of automation.definition.steps) {
257
+ if (timeoutFlag) {
258
+ break
259
+ }
260
+
261
+ if (timeout) {
262
+ setTimeout(() => {
263
+ timeoutFlag = true
264
+ }, timeout || 12000)
265
+ }
266
+
254
267
  stepCount++
255
268
  let input: any,
256
269
  iterations = 1,
@@ -495,6 +508,32 @@ export function execute(job: Job, callback: WorkerCallback) {
495
508
  })
496
509
  }
497
510
 
511
+ export function executeSynchronously(job: Job) {
512
+ const appId = job.data.event.appId
513
+ if (!appId) {
514
+ throw new Error("Unable to execute, event doesn't contain app ID.")
515
+ }
516
+
517
+ const timeoutPromise = new Promise((resolve, reject) => {
518
+ setTimeout(() => {
519
+ reject(new Error("Timeout exceeded"))
520
+ }, job.data.event.timeout || 12000)
521
+ })
522
+
523
+ return context.doInAppContext(appId, async () => {
524
+ const envVars = await sdkUtils.getEnvironmentVariables()
525
+ // put into automation thread for whole context
526
+ return context.doInEnvironmentContext(envVars, async () => {
527
+ const automationOrchestrator = new Orchestrator(job)
528
+ const response = await Promise.race([
529
+ automationOrchestrator.execute(),
530
+ timeoutPromise,
531
+ ])
532
+ return response
533
+ })
534
+ })
535
+ }
536
+
498
537
  export const removeStalled = async (job: Job) => {
499
538
  const appId = job.data.event.appId
500
539
  if (!appId) {
@@ -35,7 +35,7 @@ export const getComponentLibraryManifest = async (library: string) => {
35
35
  const filename = "manifest.json"
36
36
 
37
37
  if (env.isDev() || env.isTest()) {
38
- const path = join(TOP_LEVEL_PATH, "../client", filename)
38
+ const path = join(TOP_LEVEL_PATH, "packages/client", filename)
39
39
  // always load from new so that updates are refreshed
40
40
  delete require.cache[require.resolve(path)]
41
41
  return require(path)
@@ -1,4 +1,4 @@
1
- import { join } from "path"
1
+ import path, { join } from "path"
2
2
  import { ObjectStoreBuckets } from "../../constants"
3
3
  import fs from "fs"
4
4
  import { objectStore } from "@budibase/backend-core"
@@ -6,6 +6,10 @@ import { resolve } from "../centralPath"
6
6
  import env from "../../environment"
7
7
  import { TOP_LEVEL_PATH } from "./filesystem"
8
8
 
9
+ export function devClientLibPath() {
10
+ return require.resolve("@budibase/client")
11
+ }
12
+
9
13
  /**
10
14
  * Client library paths in the object store:
11
15
  * Previously, the entire client library package was downloaded from NPM
@@ -89,9 +93,10 @@ export async function updateClientLibrary(appId: string) {
89
93
  let manifest, client
90
94
 
91
95
  if (env.isDev()) {
96
+ const clientPath = devClientLibPath()
92
97
  // Load the symlinked version in dev which is always the newest
93
- manifest = require.resolve("@budibase/client/manifest.json")
94
- client = require.resolve("@budibase/client")
98
+ manifest = join(path.dirname(path.dirname(clientPath)), "manifest.json")
99
+ client = clientPath
95
100
  } else {
96
101
  // Load the bundled version in prod
97
102
  manifest = resolve(TOP_LEVEL_PATH, "client", "manifest.json")
@@ -4,9 +4,11 @@ import { budibaseTempDir } from "../budibaseDir"
4
4
  import { join } from "path"
5
5
  import env from "../../environment"
6
6
  import tar from "tar"
7
+ import environment from "../../environment"
7
8
  const uuid = require("uuid/v4")
8
9
 
9
- export const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..")
10
+ export const TOP_LEVEL_PATH =
11
+ environment.TOP_LEVEL_PATH || join(__dirname, "..", "..", "..")
10
12
 
11
13
  /**
12
14
  * Upon first startup of instance there may not be everything we need in tmp directory, set it up.
@@ -10,7 +10,15 @@
10
10
  "incremental": true,
11
11
  "types": ["node", "jest"],
12
12
  "outDir": "dist/src",
13
- "skipLibCheck": true
13
+ "skipLibCheck": true,
14
+ "baseUrl": ".",
15
+ "paths": {
16
+ "@budibase/types": ["../types/src"],
17
+ "@budibase/backend-core": ["../backend-core/src"],
18
+ "@budibase/backend-core/*": ["../backend-core/*"],
19
+ "@budibase/shared-core": ["../shared-core/src"],
20
+ "@budibase/pro": ["../pro/packages/pro/src"]
21
+ }
14
22
  },
15
23
  "include": ["src/**/*"],
16
24
  "exclude": [
package/tsconfig.json CHANGED
@@ -5,25 +5,12 @@
5
5
  "declaration": true,
6
6
  "sourceMap": true,
7
7
  "baseUrl": ".",
8
- "outDir": "dist",
9
- "paths": {
10
- "@budibase/types": ["../types/src"],
11
- "@budibase/backend-core": ["../backend-core/src"],
12
- "@budibase/backend-core/*": ["../backend-core/*"],
13
- "@budibase/shared-core": ["../shared-core/src"],
14
- "@budibase/pro": ["../pro/packages/pro/src"]
15
- }
8
+ "outDir": "dist"
16
9
  },
17
10
  "ts-node": {
18
11
  "require": ["tsconfig-paths/register"],
19
12
  "swc": true
20
13
  },
21
- "references": [
22
- { "path": "../types" },
23
- { "path": "../backend-core" },
24
- { "path": "../shared-core" },
25
- { "path": "../../../budibase-pro/packages/pro" }
26
- ],
27
14
  "include": ["src/**/*", "specs"],
28
15
  "exclude": ["node_modules", "dist"]
29
16
  }
@@ -1,46 +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
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ping = exports.isEnabled = void 0;
13
- const backend_core_1 = require("@budibase/backend-core");
14
- const types_1 = require("@budibase/types");
15
- const utils_1 = require("../../db/utils");
16
- const backend_core_2 = require("@budibase/backend-core");
17
- const isEnabled = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
18
- const enabled = yield backend_core_1.events.analytics.enabled();
19
- ctx.body = {
20
- enabled,
21
- };
22
- });
23
- exports.isEnabled = isEnabled;
24
- const ping = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
25
- const body = ctx.request.body;
26
- switch (body.source) {
27
- case types_1.PingSource.APP: {
28
- const db = backend_core_2.context.getAppDB({ skip_setup: true });
29
- const appInfo = yield db.get(utils_1.DocumentType.APP_METADATA);
30
- let appId = backend_core_2.context.getAppId();
31
- if ((0, utils_1.isDevAppID)(appId)) {
32
- yield backend_core_1.events.serve.servedAppPreview(appInfo, body.timezone);
33
- }
34
- else {
35
- yield backend_core_1.events.serve.servedApp(appInfo, body.timezone);
36
- }
37
- break;
38
- }
39
- case types_1.PingSource.BUILDER: {
40
- yield backend_core_1.events.serve.servedBuilder(body.timezone);
41
- break;
42
- }
43
- }
44
- ctx.status = 200;
45
- });
46
- exports.ping = ping;