@budibase/server 0.9.173-alpha.1 → 0.9.173-alpha.2

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 (178) hide show
  1. package/builder/assets/{index.d3613b17.js → index.8a8f7849.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +189 -185
  4. package/coverage/coverage-final.json +13 -13
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/application.js.html +72 -72
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/index.html +15 -15
  17. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/screen.js.html +9 -9
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/user.js.html +3 -3
  37. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  43. package/coverage/lcov-report/api/index.html +1 -1
  44. package/coverage/lcov-report/api/index.js.html +3 -3
  45. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/index.html +1 -1
  58. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  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/view.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  75. package/coverage/lcov-report/automations/actions.js.html +1 -1
  76. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  77. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  78. package/coverage/lcov-report/automations/index.html +19 -19
  79. package/coverage/lcov-report/automations/index.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/deleteRow.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/outgoingWebhook.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  98. package/coverage/lcov-report/automations/thread.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/automations/utils.js.html +28 -28
  109. package/coverage/lcov-report/constants/index.html +1 -1
  110. package/coverage/lcov-report/constants/index.js.html +1 -1
  111. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  112. package/coverage/lcov-report/constants/screens.js.html +2 -2
  113. package/coverage/lcov-report/db/client.js.html +1 -1
  114. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  115. package/coverage/lcov-report/db/index.html +1 -1
  116. package/coverage/lcov-report/db/index.js.html +1 -1
  117. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  118. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  119. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  120. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  121. package/coverage/lcov-report/db/newid.js.html +2 -2
  122. package/coverage/lcov-report/db/utils.js.html +17 -17
  123. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  124. package/coverage/lcov-report/events/index.html +1 -1
  125. package/coverage/lcov-report/events/index.js.html +1 -1
  126. package/coverage/lcov-report/events/utils.js.html +1 -1
  127. package/coverage/lcov-report/index.html +49 -49
  128. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  129. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  130. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  131. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  132. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  133. package/coverage/lcov-report/middleware/currentapp.js.html +51 -24
  134. package/coverage/lcov-report/middleware/index.html +15 -15
  135. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  136. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  137. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  138. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  139. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  140. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  141. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  142. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  143. package/coverage/lcov-report/utilities/global.js.html +27 -27
  144. package/coverage/lcov-report/utilities/index.html +15 -15
  145. package/coverage/lcov-report/utilities/index.js.html +4 -4
  146. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +29 -8
  147. package/coverage/lcov-report/utilities/queue/index.html +15 -15
  148. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  149. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  150. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  151. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  152. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  153. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  154. package/coverage/lcov-report/utilities/security.js.html +1 -1
  155. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +1 -1
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +19 -19
  158. package/coverage/lcov.info +317 -305
  159. package/dist/api/routes/tests/utilities/TestFunctions.js +7 -9
  160. package/dist/middleware/currentapp.js +7 -1
  161. package/dist/package.json +4 -4
  162. package/dist/tests/utilities/TestConfiguration.js +34 -19
  163. package/dist/tests/utilities/controllers.js +1 -0
  164. package/dist/tsconfig.tsbuildinfo +1 -1
  165. package/dist/utilities/queue/inMemoryQueue.js +6 -0
  166. package/package.json +5 -5
  167. package/scripts/jestSetup.js +2 -0
  168. package/src/api/routes/tests/auth.spec.js +1 -2
  169. package/src/api/routes/tests/permissions.spec.js +3 -0
  170. package/src/api/routes/tests/query.spec.js +2 -2
  171. package/src/api/routes/tests/routing.spec.js +24 -8
  172. package/src/api/routes/tests/user.spec.js +1 -1
  173. package/src/api/routes/tests/utilities/TestFunctions.js +7 -9
  174. package/src/api/routes/tests/webhook.spec.js +4 -1
  175. package/src/middleware/currentapp.js +10 -1
  176. package/src/tests/utilities/TestConfiguration.js +47 -19
  177. package/src/tests/utilities/controllers.js +1 -0
  178. package/src/utilities/queue/inMemoryQueue.js +7 -0
@@ -57,9 +57,10 @@ exports.createRequest = (request, method, url, body) => {
57
57
  return req;
58
58
  };
59
59
  exports.checkBuilderEndpoint = ({ config, method, url, body }) => __awaiter(void 0, void 0, void 0, function* () {
60
- const headers = yield config.login("test@test.com", "test", {
60
+ const headers = yield config.login({
61
61
  userId: "us_fail",
62
62
  builder: false,
63
+ prodApp: true,
63
64
  });
64
65
  yield exports
65
66
  .createRequest(config.request, method, url, body)
@@ -67,11 +68,9 @@ exports.checkBuilderEndpoint = ({ config, method, url, body }) => __awaiter(void
67
68
  .expect(403);
68
69
  });
69
70
  exports.checkPermissionsEndpoint = ({ config, method, url, body, passRole, failRole, }) => __awaiter(void 0, void 0, void 0, function* () {
70
- const password = "PASSWORD";
71
- let user = yield config.createUser("pass@budibase.com", password, passRole);
72
- const passHeader = yield config.login("pass@budibase.com", password, {
71
+ const passHeader = yield config.login({
73
72
  roleId: passRole,
74
- userId: user.globalId,
73
+ prodApp: true,
75
74
  });
76
75
  yield exports
77
76
  .createRequest(config.request, method, url, body)
@@ -79,14 +78,13 @@ exports.checkPermissionsEndpoint = ({ config, method, url, body, passRole, failR
79
78
  .expect(200);
80
79
  let failHeader;
81
80
  if (failRole === BUILTIN_ROLE_IDS.PUBLIC) {
82
- failHeader = config.publicHeaders();
81
+ failHeader = config.publicHeaders({ prodApp: true });
83
82
  }
84
83
  else {
85
- user = yield config.createUser("fail@budibase.com", password, failRole);
86
- failHeader = yield config.login("fail@budibase.com", password, {
84
+ failHeader = yield config.login({
87
85
  roleId: failRole,
88
- userId: user.globalId,
89
86
  builder: false,
87
+ prodApp: true,
90
88
  });
91
89
  }
92
90
  yield exports
@@ -12,7 +12,7 @@ const { getAppId, setCookie, getCookie, clearCookie } = require("@budibase/auth"
12
12
  const { Cookies } = require("@budibase/auth").constants;
13
13
  const { getRole } = require("@budibase/auth/roles");
14
14
  const { BUILTIN_ROLE_IDS } = require("@budibase/auth/roles");
15
- const { generateUserMetadataID } = require("../db/utils");
15
+ const { generateUserMetadataID, isDevAppID } = require("../db/utils");
16
16
  const { dbExists } = require("@budibase/auth/db");
17
17
  const { isUserInAppTenant } = require("@budibase/auth/tenancy");
18
18
  const { getCachedSelf } = require("../utilities/global");
@@ -43,6 +43,12 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
43
43
  // if the request app ID wasn't set, update it with the cookie
44
44
  requestAppId = requestAppId || appId;
45
45
  }
46
+ // deny access to application preview
47
+ if (isDevAppID(requestAppId) &&
48
+ (!ctx.user || !ctx.user.builder || !ctx.user.builder.global)) {
49
+ clearCookie(ctx, Cookies.CurrentApp);
50
+ return ctx.redirect("/");
51
+ }
46
52
  let appId, roleId = BUILTIN_ROLE_IDS.PUBLIC;
47
53
  if (!ctx.user) {
48
54
  // not logged in, try to set a cookie for public apps
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "0.9.173-alpha.0",
4
+ "version": "0.9.173-alpha.1",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.js",
7
7
  "repository": {
@@ -68,9 +68,9 @@
68
68
  "author": "Budibase",
69
69
  "license": "AGPL-3.0-or-later",
70
70
  "dependencies": {
71
- "@budibase/auth": "^0.9.173-alpha.0",
72
- "@budibase/client": "^0.9.173-alpha.0",
73
- "@budibase/string-templates": "^0.9.173-alpha.0",
71
+ "@budibase/auth": "^0.9.173-alpha.1",
72
+ "@budibase/client": "^0.9.173-alpha.1",
73
+ "@budibase/string-templates": "^0.9.173-alpha.1",
74
74
  "@elastic/elasticsearch": "7.10.0",
75
75
  "@koa/router": "8.0.0",
76
76
  "@sendgrid/mail": "7.1.1",
@@ -24,7 +24,6 @@ const CouchDB = require("../../db");
24
24
  auth.init(CouchDB);
25
25
  const GLOBAL_USER_ID = "us_uuid1";
26
26
  const EMAIL = "babs@babs.com";
27
- const PASSWORD = "babs_password";
28
27
  class TestConfiguration {
29
28
  constructor(openServer = true) {
30
29
  if (openServer) {
@@ -62,7 +61,7 @@ class TestConfiguration {
62
61
  return request.body;
63
62
  });
64
63
  }
65
- globalUser(id = GLOBAL_USER_ID, builder = true, roles) {
64
+ globalUser({ id = GLOBAL_USER_ID, builder = true, email = EMAIL, roles, } = {}) {
66
65
  return __awaiter(this, void 0, void 0, function* () {
67
66
  const db = getGlobalDB(TENANT_ID);
68
67
  let existing;
@@ -70,13 +69,16 @@ class TestConfiguration {
70
69
  existing = yield db.get(id);
71
70
  }
72
71
  catch (err) {
73
- existing = {};
72
+ existing = { email };
74
73
  }
75
74
  const user = Object.assign(Object.assign({ _id: id }, existing), { roles: roles || {}, tenantId: TENANT_ID });
76
75
  yield createASession(id, { sessionId: "sessionid", tenantId: TENANT_ID });
77
76
  if (builder) {
78
77
  user.builder = { global: true };
79
78
  }
79
+ else {
80
+ user.builder = { global: false };
81
+ }
80
82
  const resp = yield db.put(user);
81
83
  return Object.assign({ _rev: resp._rev }, user);
82
84
  });
@@ -120,28 +122,42 @@ class TestConfiguration {
120
122
  }
121
123
  return headers;
122
124
  }
123
- publicHeaders() {
125
+ publicHeaders({ prodApp = true } = {}) {
126
+ const appId = prodApp ? this.prodAppId : this.appId;
124
127
  const headers = {
125
128
  Accept: "application/json",
126
129
  };
127
- if (this.appId) {
128
- headers[Headers.APP_ID] = this.appId;
130
+ if (appId) {
131
+ headers[Headers.APP_ID] = appId;
129
132
  }
130
133
  return headers;
131
134
  }
132
- roleHeaders({ email = EMAIL, roleId = BUILTIN_ROLE_IDS.ADMIN, builder = false, }) {
135
+ roleHeaders({ email = EMAIL, roleId = BUILTIN_ROLE_IDS.ADMIN, builder = false, prodApp = true, } = {}) {
133
136
  return __awaiter(this, void 0, void 0, function* () {
134
- return this.login(email, PASSWORD, { roleId, builder });
137
+ return this.login({ email, roleId, builder, prodApp });
135
138
  });
136
139
  }
137
140
  createApp(appName) {
138
141
  return __awaiter(this, void 0, void 0, function* () {
142
+ // create dev app
139
143
  this.app = yield this._req({ name: appName }, null, controllers.app.create);
140
144
  this.appId = this.app.appId;
145
+ // create production app
146
+ this.prodApp = yield this.deploy();
147
+ this.prodAppId = this.prodApp.appId;
148
+ this.allApps.push(this.prodApp);
141
149
  this.allApps.push(this.app);
142
150
  return this.app;
143
151
  });
144
152
  }
153
+ deploy() {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ const deployment = yield this._req(null, null, controllers.deploy.deployApp);
156
+ const prodAppId = deployment.appId.replace("_dev", "");
157
+ const appPackage = yield this._req(null, { appId: prodAppId }, controllers.app.fetchAppPackage);
158
+ return appPackage.application;
159
+ });
160
+ }
145
161
  updateTable(config = null) {
146
162
  return __awaiter(this, void 0, void 0, function* () {
147
163
  config = config || basicTable();
@@ -307,30 +323,29 @@ class TestConfiguration {
307
323
  return yield this._req(config, null, controllers.layout.save);
308
324
  });
309
325
  }
310
- createUser(id = null) {
326
+ createUser(id = null, email = EMAIL) {
311
327
  return __awaiter(this, void 0, void 0, function* () {
312
328
  const globalId = !id ? `us_${Math.random()}` : `us_${id}`;
313
- const resp = yield this.globalUser(globalId);
329
+ const resp = yield this.globalUser({ id: globalId, email });
314
330
  yield userCache.invalidateUser(globalId);
315
331
  return Object.assign(Object.assign({}, resp), { globalId });
316
332
  });
317
333
  }
318
- login(email, password, { roleId, userId, builder } = {}) {
334
+ login({ roleId, userId, builder, prodApp = false } = {}) {
319
335
  return __awaiter(this, void 0, void 0, function* () {
336
+ const appId = prodApp ? this.prodAppId : this.appId;
320
337
  userId = !userId ? `us_uuid1` : userId;
321
338
  if (!this.request) {
322
339
  throw "Server has not been opened, cannot login.";
323
340
  }
324
341
  // make sure the user exists in the global DB
325
342
  if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
326
- const appId = `app${this.getAppId().split("app_dev")[1]}`;
327
- yield this.globalUser(userId, builder, {
328
- [appId]: roleId,
343
+ yield this.globalUser({
344
+ userId,
345
+ builder,
346
+ roles: { [this.prodAppId]: roleId },
329
347
  });
330
348
  }
331
- if (!email || !password) {
332
- yield this.createUser();
333
- }
334
349
  yield createASession(userId, {
335
350
  sessionId: "sessionid",
336
351
  tenantId: TENANT_ID,
@@ -343,7 +358,7 @@ class TestConfiguration {
343
358
  };
344
359
  const app = {
345
360
  roleId: roleId,
346
- appId: this.appId,
361
+ appId,
347
362
  };
348
363
  const authToken = jwt.sign(auth, env.JWT_SECRET);
349
364
  const appToken = jwt.sign(app, env.JWT_SECRET);
@@ -355,7 +370,7 @@ class TestConfiguration {
355
370
  `${Cookies.Auth}=${authToken}`,
356
371
  `${Cookies.CurrentApp}=${appToken}`,
357
372
  ],
358
- [Headers.APP_ID]: this.appId,
373
+ [Headers.APP_ID]: appId,
359
374
  };
360
375
  });
361
376
  }
@@ -13,4 +13,5 @@ module.exports = {
13
13
  screen: require("../../api/controllers/screen"),
14
14
  webhook: require("../../api/controllers/webhook"),
15
15
  layout: require("../../api/controllers/layout"),
16
+ deploy: require("../../api/controllers/deploy"),
16
17
  };