@budibase/worker 2.1.32-alpha.8 → 2.1.32

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 (182) hide show
  1. package/package.json +23 -13
  2. package/{src/tests/jestSetup.ts → scripts/jestSetup.js} +3 -12
  3. package/scripts/localdomain.js +7 -33
  4. package/src/api/controllers/global/auth.ts +31 -35
  5. package/src/api/controllers/global/configs.js +17 -17
  6. package/src/api/controllers/global/self.ts +2 -2
  7. package/src/api/controllers/global/users.ts +1 -3
  8. package/src/api/controllers/system/{environment.ts → environment.js} +2 -3
  9. package/src/api/controllers/system/{status.ts → status.js} +3 -4
  10. package/src/api/controllers/system/tenants.ts +51 -8
  11. package/src/api/index.ts +6 -29
  12. package/src/api/routes/global/auth.js +39 -22
  13. package/src/api/routes/global/configs.js +9 -9
  14. package/src/api/routes/global/templates.ts +2 -2
  15. package/src/api/routes/global/tests/auth.spec.ts +64 -134
  16. package/src/api/routes/global/tests/configs.spec.ts +35 -34
  17. package/src/api/routes/global/tests/email.spec.ts +3 -4
  18. package/src/api/routes/global/tests/realEmail.spec.ts +3 -2
  19. package/src/api/routes/global/tests/self.spec.ts +4 -3
  20. package/src/api/routes/global/tests/users.spec.ts +43 -51
  21. package/src/api/routes/system/environment.js +8 -0
  22. package/src/api/routes/system/status.js +8 -0
  23. package/src/api/routes/system/tenants.js +12 -0
  24. package/src/api/routes/system/tests/accounts.spec.ts +6 -5
  25. package/src/constants/{index.ts → index.js} +64 -57
  26. package/src/constants/templates/index.js +2 -2
  27. package/src/db/index.js +11 -0
  28. package/src/index.ts +1 -1
  29. package/src/middleware/cloudRestricted.js +2 -2
  30. package/src/tests/TestConfiguration.ts +49 -98
  31. package/src/tests/api/accounts.ts +8 -5
  32. package/src/tests/api/auth.ts +6 -3
  33. package/src/tests/api/configs.ts +8 -15
  34. package/src/tests/api/email.ts +6 -3
  35. package/src/tests/api/index.ts +0 -15
  36. package/src/tests/api/self.ts +6 -11
  37. package/src/tests/api/users.ts +6 -38
  38. package/src/tests/index.ts +1 -5
  39. package/src/tests/structures/accounts.ts +24 -0
  40. package/src/tests/structures/configs.js +6 -6
  41. package/src/tests/structures/index.ts +2 -4
  42. package/src/tests/structures/users.ts +0 -1
  43. package/src/utilities/appService.js +3 -3
  44. package/src/utilities/{email.ts → email.js} +45 -78
  45. package/src/utilities/{redis.ts → redis.js} +24 -29
  46. package/src/utilities/templates.js +49 -0
  47. package/tsconfig.build.json +2 -2
  48. package/tsconfig.json +1 -3
  49. package/__mocks__/aws-sdk.ts +0 -15
  50. package/__mocks__/oauth.ts +0 -57
  51. package/coverage/clover.xml +0 -2160
  52. package/coverage/coverage-final.json +0 -78
  53. package/coverage/lcov-report/base.css +0 -224
  54. package/coverage/lcov-report/block-navigation.js +0 -87
  55. package/coverage/lcov-report/favicon.png +0 -0
  56. package/coverage/lcov-report/index.html +0 -431
  57. package/coverage/lcov-report/prettify.css +0 -1
  58. package/coverage/lcov-report/prettify.js +0 -2
  59. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  60. package/coverage/lcov-report/sorter.js +0 -196
  61. package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +0 -913
  62. package/coverage/lcov-report/src/api/controllers/global/configs.js.html +0 -1390
  63. package/coverage/lcov-report/src/api/controllers/global/email.js.html +0 -193
  64. package/coverage/lcov-report/src/api/controllers/global/index.html +0 -236
  65. package/coverage/lcov-report/src/api/controllers/global/license.ts.html +0 -187
  66. package/coverage/lcov-report/src/api/controllers/global/roles.js.html +0 -289
  67. package/coverage/lcov-report/src/api/controllers/global/self.ts.html +0 -577
  68. package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +0 -316
  69. package/coverage/lcov-report/src/api/controllers/global/users.ts.html +0 -796
  70. package/coverage/lcov-report/src/api/controllers/global/workspaces.js.html +0 -253
  71. package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +0 -148
  72. package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +0 -124
  73. package/coverage/lcov-report/src/api/controllers/system/index.html +0 -191
  74. package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +0 -124
  75. package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +0 -124
  76. package/coverage/lcov-report/src/api/controllers/system/status.ts.html +0 -133
  77. package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +0 -154
  78. package/coverage/lcov-report/src/api/index.html +0 -116
  79. package/coverage/lcov-report/src/api/index.ts.html +0 -583
  80. package/coverage/lcov-report/src/api/routes/global/auth.js.html +0 -349
  81. package/coverage/lcov-report/src/api/routes/global/configs.js.html +0 -460
  82. package/coverage/lcov-report/src/api/routes/global/email.js.html +0 -196
  83. package/coverage/lcov-report/src/api/routes/global/index.html +0 -236
  84. package/coverage/lcov-report/src/api/routes/global/license.ts.html +0 -124
  85. package/coverage/lcov-report/src/api/routes/global/roles.js.html +0 -121
  86. package/coverage/lcov-report/src/api/routes/global/self.ts.html +0 -139
  87. package/coverage/lcov-report/src/api/routes/global/templates.ts.html +0 -196
  88. package/coverage/lcov-report/src/api/routes/global/users.js.html +0 -403
  89. package/coverage/lcov-report/src/api/routes/global/workspaces.js.html +0 -199
  90. package/coverage/lcov-report/src/api/routes/index.html +0 -116
  91. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -193
  92. package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +0 -142
  93. package/coverage/lcov-report/src/api/routes/system/environment.ts.html +0 -109
  94. package/coverage/lcov-report/src/api/routes/system/index.html +0 -191
  95. package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +0 -142
  96. package/coverage/lcov-report/src/api/routes/system/restore.ts.html +0 -109
  97. package/coverage/lcov-report/src/api/routes/system/status.ts.html +0 -109
  98. package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +0 -124
  99. package/coverage/lcov-report/src/api/routes/validation/index.html +0 -131
  100. package/coverage/lcov-report/src/api/routes/validation/index.ts.html +0 -88
  101. package/coverage/lcov-report/src/api/routes/validation/users.ts.html +0 -235
  102. package/coverage/lcov-report/src/constants/index.html +0 -116
  103. package/coverage/lcov-report/src/constants/index.ts.html +0 -613
  104. package/coverage/lcov-report/src/constants/templates/index.html +0 -116
  105. package/coverage/lcov-report/src/constants/templates/index.js.html +0 -304
  106. package/coverage/lcov-report/src/db/index.html +0 -116
  107. package/coverage/lcov-report/src/db/index.ts.html +0 -115
  108. package/coverage/lcov-report/src/environment.ts.html +0 -364
  109. package/coverage/lcov-report/src/index.html +0 -131
  110. package/coverage/lcov-report/src/index.ts.html +0 -397
  111. package/coverage/lcov-report/src/middleware/cloudRestricted.js.html +0 -136
  112. package/coverage/lcov-report/src/middleware/index.html +0 -116
  113. package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +0 -145
  114. package/coverage/lcov-report/src/migrations/functions/index.html +0 -116
  115. package/coverage/lcov-report/src/migrations/index.html +0 -116
  116. package/coverage/lcov-report/src/migrations/index.ts.html +0 -271
  117. package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +0 -262
  118. package/coverage/lcov-report/src/sdk/accounts/index.html +0 -131
  119. package/coverage/lcov-report/src/sdk/accounts/index.ts.html +0 -88
  120. package/coverage/lcov-report/src/sdk/index.html +0 -116
  121. package/coverage/lcov-report/src/sdk/index.ts.html +0 -106
  122. package/coverage/lcov-report/src/sdk/users/events.ts.html +0 -577
  123. package/coverage/lcov-report/src/sdk/users/index.html +0 -146
  124. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -88
  125. package/coverage/lcov-report/src/sdk/users/users.ts.html +0 -1903
  126. package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +0 -1051
  127. package/coverage/lcov-report/src/tests/api/accounts.ts.html +0 -160
  128. package/coverage/lcov-report/src/tests/api/auth.ts.html +0 -220
  129. package/coverage/lcov-report/src/tests/api/base.ts.html +0 -133
  130. package/coverage/lcov-report/src/tests/api/configs.ts.html +0 -226
  131. package/coverage/lcov-report/src/tests/api/email.ts.html +0 -148
  132. package/coverage/lcov-report/src/tests/api/environment.ts.html +0 -130
  133. package/coverage/lcov-report/src/tests/api/index.html +0 -296
  134. package/coverage/lcov-report/src/tests/api/index.ts.html +0 -205
  135. package/coverage/lcov-report/src/tests/api/migrations.ts.html +0 -151
  136. package/coverage/lcov-report/src/tests/api/restore.ts.html +0 -127
  137. package/coverage/lcov-report/src/tests/api/self.ts.html +0 -163
  138. package/coverage/lcov-report/src/tests/api/status.ts.html +0 -121
  139. package/coverage/lcov-report/src/tests/api/tenants.ts.html +0 -130
  140. package/coverage/lcov-report/src/tests/api/users.ts.html +0 -511
  141. package/coverage/lcov-report/src/tests/controllers.js.html +0 -106
  142. package/coverage/lcov-report/src/tests/index.html +0 -146
  143. package/coverage/lcov-report/src/tests/index.ts.html +0 -139
  144. package/coverage/lcov-report/src/tests/mocks/email.js.html +0 -115
  145. package/coverage/lcov-report/src/tests/mocks/index.html +0 -131
  146. package/coverage/lcov-report/src/tests/mocks/index.ts.html +0 -106
  147. package/coverage/lcov-report/src/tests/structures/configs.js.html +0 -313
  148. package/coverage/lcov-report/src/tests/structures/groups.ts.html +0 -118
  149. package/coverage/lcov-report/src/tests/structures/index.html +0 -161
  150. package/coverage/lcov-report/src/tests/structures/index.ts.html +0 -151
  151. package/coverage/lcov-report/src/tests/structures/users.ts.html +0 -196
  152. package/coverage/lcov-report/src/utilities/appService.js.html +0 -184
  153. package/coverage/lcov-report/src/utilities/email.ts.html +0 -850
  154. package/coverage/lcov-report/src/utilities/fileSystem.js.html +0 -100
  155. package/coverage/lcov-report/src/utilities/index.html +0 -206
  156. package/coverage/lcov-report/src/utilities/index.js.html +0 -112
  157. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -424
  158. package/coverage/lcov-report/src/utilities/templates.ts.html +0 -232
  159. package/coverage/lcov-report/src/utilities/users.js.html +0 -136
  160. package/coverage/lcov.info +0 -3986
  161. package/jest.config.ts +0 -29
  162. package/src/api/routes/global/tests/license.spec.ts +0 -31
  163. package/src/api/routes/global/tests/roles.spec.ts +0 -27
  164. package/src/api/routes/global/tests/templates.spec.ts +0 -35
  165. package/src/api/routes/global/tests/workspaces.spec.ts +0 -29
  166. package/src/api/routes/system/environment.ts +0 -8
  167. package/src/api/routes/system/status.ts +0 -8
  168. package/src/api/routes/system/tenants.ts +0 -13
  169. package/src/api/routes/system/tests/environment.spec.ts +0 -29
  170. package/src/api/routes/system/tests/migrations.spec.ts +0 -63
  171. package/src/api/routes/system/tests/restore.spec.ts +0 -36
  172. package/src/api/routes/system/tests/status.spec.ts +0 -48
  173. package/src/api/routes/system/tests/tenants.spec.ts +0 -61
  174. package/src/db/index.ts +0 -10
  175. package/src/middleware/tests/tenancy.spec.ts +0 -73
  176. package/src/tests/api/base.ts +0 -16
  177. package/src/tests/api/environment.ts +0 -15
  178. package/src/tests/api/migrations.ts +0 -22
  179. package/src/tests/api/restore.ts +0 -14
  180. package/src/tests/api/status.ts +0 -12
  181. package/src/tests/api/tenants.ts +0 -15
  182. package/src/utilities/templates.ts +0 -49
@@ -1,9 +1,10 @@
1
1
  jest.mock("nodemailer")
2
- import { TestConfiguration, mocks } from "../../../../tests"
2
+ import { TestConfiguration, API, mocks } from "../../../../tests"
3
3
  import { events } from "@budibase/backend-core"
4
4
 
5
5
  describe("/api/global/self", () => {
6
6
  const config = new TestConfiguration()
7
+ const api = new API(config)
7
8
 
8
9
  beforeAll(async () => {
9
10
  await config.beforeAll()
@@ -23,7 +24,7 @@ describe("/api/global/self", () => {
23
24
  await config.createSession(user)
24
25
 
25
26
  delete user.password
26
- const res = await config.api.self.updateSelf(user)
27
+ const res = await api.self.updateSelf(user)
27
28
 
28
29
  const dbUser = await config.getUser(user.email)
29
30
  user._rev = dbUser._rev
@@ -39,7 +40,7 @@ describe("/api/global/self", () => {
39
40
  await config.createSession(user)
40
41
 
41
42
  user.password = "newPassword"
42
- const res = await config.api.self.updateSelf(user)
43
+ const res = await api.self.updateSelf(user)
43
44
 
44
45
  const dbUser = await config.getUser(user.email)
45
46
  user._rev = dbUser._rev
@@ -6,12 +6,14 @@ import {
6
6
  mocks,
7
7
  structures,
8
8
  TENANT_1,
9
+ API,
9
10
  } from "../../../../tests"
10
11
  const sendMailMock = mocks.email.mock()
11
12
  import { events, tenancy } from "@budibase/backend-core"
12
13
 
13
14
  describe("/api/global/users", () => {
14
15
  const config = new TestConfiguration()
16
+ const api = new API(config)
15
17
 
16
18
  beforeAll(async () => {
17
19
  await config.beforeAll()
@@ -28,10 +30,7 @@ describe("/api/global/users", () => {
28
30
  describe("invite", () => {
29
31
  it("should be able to generate an invitation", async () => {
30
32
  const email = structures.users.newEmail()
31
- const { code, res } = await config.api.users.sendUserInvite(
32
- sendMailMock,
33
- email
34
- )
33
+ const { code, res } = await api.users.sendUserInvite(sendMailMock, email)
35
34
 
36
35
  expect(res.body).toEqual({ message: "Invitation has been sent." })
37
36
  expect(sendMailMock).toHaveBeenCalled()
@@ -40,7 +39,7 @@ describe("/api/global/users", () => {
40
39
  })
41
40
 
42
41
  it("should not be able to generate an invitation for existing user", async () => {
43
- const { code, res } = await config.api.users.sendUserInvite(
42
+ const { code, res } = await api.users.sendUserInvite(
44
43
  sendMailMock,
45
44
  config.defaultUser!.email,
46
45
  400
@@ -54,12 +53,9 @@ describe("/api/global/users", () => {
54
53
 
55
54
  it("should be able to create new user from invite", async () => {
56
55
  const email = structures.users.newEmail()
57
- const { code } = await config.api.users.sendUserInvite(
58
- sendMailMock,
59
- email
60
- )
56
+ const { code } = await api.users.sendUserInvite(sendMailMock, email)
61
57
 
62
- const res = await config.api.users.acceptInvite(code)
58
+ const res = await api.users.acceptInvite(code)
63
59
 
64
60
  expect(res.body._id).toBeDefined()
65
61
  const user = await config.getUser(email)
@@ -78,7 +74,7 @@ describe("/api/global/users", () => {
78
74
  })
79
75
  const request = [newUserInvite(), newUserInvite()]
80
76
 
81
- const res = await config.api.users.sendMultiUserInvite(request)
77
+ const res = await api.users.sendMultiUserInvite(request)
82
78
 
83
79
  const body = res.body as InviteUsersResponse
84
80
  expect(body.successful.length).toBe(2)
@@ -90,7 +86,7 @@ describe("/api/global/users", () => {
90
86
  it("should not be able to generate an invitation for existing user", async () => {
91
87
  const request = [{ email: config.defaultUser!.email, userInfo: {} }]
92
88
 
93
- const res = await config.api.users.sendMultiUserInvite(request)
89
+ const res = await api.users.sendMultiUserInvite(request)
94
90
 
95
91
  const body = res.body as InviteUsersResponse
96
92
  expect(body.successful.length).toBe(0)
@@ -106,7 +102,7 @@ describe("/api/global/users", () => {
106
102
  const user = await config.createUser()
107
103
  jest.clearAllMocks()
108
104
 
109
- const response = await config.api.users.bulkCreateUsers([user])
105
+ const response = await api.users.bulkCreateUsers([user])
110
106
 
111
107
  expect(response.created?.successful.length).toBe(0)
112
108
  expect(response.created?.unsuccessful.length).toBe(1)
@@ -119,7 +115,7 @@ describe("/api/global/users", () => {
119
115
  jest.resetAllMocks()
120
116
 
121
117
  await tenancy.doInTenant(TENANT_1, async () => {
122
- const response = await config.api.users.bulkCreateUsers([user])
118
+ const response = await api.users.bulkCreateUsers([user])
123
119
 
124
120
  expect(response.created?.successful.length).toBe(0)
125
121
  expect(response.created?.unsuccessful.length).toBe(1)
@@ -130,11 +126,11 @@ describe("/api/global/users", () => {
130
126
 
131
127
  it("should ignore accounts using the same email", async () => {
132
128
  const account = structures.accounts.account()
133
- const resp = await config.api.accounts.saveMetadata(account)
129
+ const resp = await api.accounts.saveMetadata(account)
134
130
  const user = structures.users.user({ email: resp.email })
135
131
  jest.clearAllMocks()
136
132
 
137
- const response = await config.api.users.bulkCreateUsers([user])
133
+ const response = await api.users.bulkCreateUsers([user])
138
134
 
139
135
  expect(response.created?.successful.length).toBe(0)
140
136
  expect(response.created?.unsuccessful.length).toBe(1)
@@ -147,11 +143,7 @@ describe("/api/global/users", () => {
147
143
  const admin = structures.users.adminUser()
148
144
  const user = structures.users.user()
149
145
 
150
- const response = await config.api.users.bulkCreateUsers([
151
- builder,
152
- admin,
153
- user,
154
- ])
146
+ const response = await api.users.bulkCreateUsers([builder, admin, user])
155
147
 
156
148
  expect(response.created?.successful.length).toBe(3)
157
149
  expect(response.created?.successful[0].email).toBe(builder.email)
@@ -168,7 +160,7 @@ describe("/api/global/users", () => {
168
160
  it("should be able to create a basic user", async () => {
169
161
  const user = structures.users.user()
170
162
 
171
- await config.api.users.saveUser(user)
163
+ await api.users.saveUser(user)
172
164
 
173
165
  expect(events.user.created).toBeCalledTimes(1)
174
166
  expect(events.user.updated).not.toBeCalled()
@@ -179,7 +171,7 @@ describe("/api/global/users", () => {
179
171
  it("should be able to create an admin user", async () => {
180
172
  const user = structures.users.adminUser()
181
173
 
182
- await config.api.users.saveUser(user)
174
+ await api.users.saveUser(user)
183
175
 
184
176
  expect(events.user.created).toBeCalledTimes(1)
185
177
  expect(events.user.updated).not.toBeCalled()
@@ -190,7 +182,7 @@ describe("/api/global/users", () => {
190
182
  it("should be able to create a builder user", async () => {
191
183
  const user = structures.users.builderUser()
192
184
 
193
- await config.api.users.saveUser(user)
185
+ await api.users.saveUser(user)
194
186
 
195
187
  expect(events.user.created).toBeCalledTimes(1)
196
188
  expect(events.user.updated).not.toBeCalled()
@@ -205,7 +197,7 @@ describe("/api/global/users", () => {
205
197
  app_456: "role2",
206
198
  }
207
199
 
208
- await config.api.users.saveUser(user)
200
+ await api.users.saveUser(user)
209
201
 
210
202
  const savedUser = await config.getUser(user.email)
211
203
  expect(events.user.created).toBeCalledTimes(1)
@@ -221,7 +213,7 @@ describe("/api/global/users", () => {
221
213
  delete user._id
222
214
  delete user._rev
223
215
 
224
- const response = await config.api.users.saveUser(user, 400)
216
+ const response = await api.users.saveUser(user, 400)
225
217
 
226
218
  expect(response.body.message).toBe(`Unavailable`)
227
219
  expect(events.user.created).toBeCalledTimes(0)
@@ -233,7 +225,7 @@ describe("/api/global/users", () => {
233
225
 
234
226
  await tenancy.doInTenant(TENANT_1, async () => {
235
227
  delete user._id
236
- const response = await config.api.users.saveUser(user, 400)
228
+ const response = await api.users.saveUser(user, 400)
237
229
 
238
230
  expect(response.body.message).toBe(`Unavailable`)
239
231
  expect(events.user.created).toBeCalledTimes(0)
@@ -245,7 +237,7 @@ describe("/api/global/users", () => {
245
237
  const account = structures.accounts.cloudAccount()
246
238
  mocks.accounts.getAccount.mockReturnValueOnce(account)
247
239
 
248
- const response = await config.api.users.saveUser(user, 400)
240
+ const response = await api.users.saveUser(user, 400)
249
241
 
250
242
  expect(response.body.message).toBe(`Unavailable`)
251
243
  expect(events.user.created).toBeCalledTimes(0)
@@ -253,20 +245,20 @@ describe("/api/global/users", () => {
253
245
 
254
246
  it("should not be able to create a user with the same email and different casing", async () => {
255
247
  const user = structures.users.user()
256
- await config.api.users.saveUser(user)
248
+ await api.users.saveUser(user)
257
249
 
258
250
  user.email = user.email.toUpperCase()
259
- await config.api.users.saveUser(user, 400)
251
+ await api.users.saveUser(user, 400)
260
252
 
261
253
  expect(events.user.created).toBeCalledTimes(1)
262
254
  })
263
255
 
264
256
  it("should not be able to bulk create a user with the same email and different casing", async () => {
265
257
  const user = structures.users.user()
266
- await config.api.users.saveUser(user)
258
+ await api.users.saveUser(user)
267
259
 
268
260
  user.email = user.email.toUpperCase()
269
- await config.api.users.bulkCreateUsers([user])
261
+ await api.users.bulkCreateUsers([user])
270
262
 
271
263
  expect(events.user.created).toBeCalledTimes(1)
272
264
  })
@@ -277,7 +269,7 @@ describe("/api/global/users", () => {
277
269
  const user = await config.createUser()
278
270
  jest.clearAllMocks()
279
271
 
280
- await config.api.users.saveUser(user)
272
+ await api.users.saveUser(user)
281
273
 
282
274
  expect(events.user.created).not.toBeCalled()
283
275
  expect(events.user.updated).toBeCalledTimes(1)
@@ -292,7 +284,7 @@ describe("/api/global/users", () => {
292
284
 
293
285
  user.forceResetPassword = true
294
286
  user.password = "tempPassword"
295
- await config.api.users.saveUser(user)
287
+ await api.users.saveUser(user)
296
288
 
297
289
  expect(events.user.created).not.toBeCalled()
298
290
  expect(events.user.updated).toBeCalledTimes(1)
@@ -305,7 +297,7 @@ describe("/api/global/users", () => {
305
297
  const user = await config.createUser()
306
298
  jest.clearAllMocks()
307
299
 
308
- await config.api.users.saveUser(structures.users.adminUser(user))
300
+ await api.users.saveUser(structures.users.adminUser(user))
309
301
 
310
302
  expect(events.user.created).not.toBeCalled()
311
303
  expect(events.user.updated).toBeCalledTimes(1)
@@ -317,7 +309,7 @@ describe("/api/global/users", () => {
317
309
  const user = await config.createUser()
318
310
  jest.clearAllMocks()
319
311
 
320
- await config.api.users.saveUser(structures.users.builderUser(user))
312
+ await api.users.saveUser(structures.users.builderUser(user))
321
313
 
322
314
  expect(events.user.created).not.toBeCalled()
323
315
  expect(events.user.updated).toBeCalledTimes(1)
@@ -331,7 +323,7 @@ describe("/api/global/users", () => {
331
323
  user.admin!.global = false
332
324
  user.builder!.global = false
333
325
 
334
- await config.api.users.saveUser(user)
326
+ await api.users.saveUser(user)
335
327
 
336
328
  expect(events.user.created).not.toBeCalled()
337
329
  expect(events.user.updated).toBeCalledTimes(1)
@@ -344,7 +336,7 @@ describe("/api/global/users", () => {
344
336
  jest.clearAllMocks()
345
337
  user.builder!.global = false
346
338
 
347
- await config.api.users.saveUser(user)
339
+ await api.users.saveUser(user)
348
340
 
349
341
  expect(events.user.created).not.toBeCalled()
350
342
  expect(events.user.updated).toBeCalledTimes(1)
@@ -360,7 +352,7 @@ describe("/api/global/users", () => {
360
352
  app_456: "role2",
361
353
  }
362
354
 
363
- await config.api.users.saveUser(user)
355
+ await api.users.saveUser(user)
364
356
 
365
357
  const savedUser = await config.getUser(user.email)
366
358
  expect(events.user.created).not.toBeCalled()
@@ -380,7 +372,7 @@ describe("/api/global/users", () => {
380
372
  jest.clearAllMocks()
381
373
  user.roles = {}
382
374
 
383
- await config.api.users.saveUser(user)
375
+ await api.users.saveUser(user)
384
376
 
385
377
  const savedUser = await config.getUser(user.email)
386
378
  expect(events.user.created).not.toBeCalled()
@@ -403,7 +395,7 @@ describe("/api/global/users", () => {
403
395
  app_456: "role2-edit",
404
396
  }
405
397
 
406
- await config.api.users.saveUser(user)
398
+ await api.users.saveUser(user)
407
399
 
408
400
  const savedUser = await config.getUser(user.email)
409
401
  expect(events.user.created).not.toBeCalled()
@@ -419,7 +411,7 @@ describe("/api/global/users", () => {
419
411
  const user = await config.createUser(structures.users.user({ email }))
420
412
  user.email = "new@test.com"
421
413
 
422
- const response = await config.api.users.saveUser(user, 400)
414
+ const response = await api.users.saveUser(user, 400)
423
415
 
424
416
  const dbUser = await config.getUser(email)
425
417
  user.email = email
@@ -432,7 +424,7 @@ describe("/api/global/users", () => {
432
424
  it("should not be able to bulk delete current user", async () => {
433
425
  const user = await config.defaultUser!
434
426
 
435
- const response = await config.api.users.bulkDeleteUsers([user._id!], 400)
427
+ const response = await api.users.bulkDeleteUsers([user._id!], 400)
436
428
 
437
429
  expect(response.message).toBe("Unable to delete self.")
438
430
  expect(events.user.deleted).not.toBeCalled()
@@ -444,7 +436,7 @@ describe("/api/global/users", () => {
444
436
  account.budibaseUserId = user._id!
445
437
  mocks.accounts.getAccountByTenantId.mockReturnValue(account)
446
438
 
447
- const response = await config.api.users.bulkDeleteUsers([user._id!])
439
+ const response = await api.users.bulkDeleteUsers([user._id!])
448
440
 
449
441
  expect(response.deleted?.successful.length).toBe(0)
450
442
  expect(response.deleted?.unsuccessful.length).toBe(1)
@@ -462,7 +454,7 @@ describe("/api/global/users", () => {
462
454
  const builder = structures.users.builderUser()
463
455
  const admin = structures.users.adminUser()
464
456
  const user = structures.users.user()
465
- const createdUsers = await config.api.users.bulkCreateUsers([
457
+ const createdUsers = await api.users.bulkCreateUsers([
466
458
  builder,
467
459
  admin,
468
460
  user,
@@ -471,7 +463,7 @@ describe("/api/global/users", () => {
471
463
  const toDelete = createdUsers.created?.successful.map(
472
464
  u => u._id!
473
465
  ) as string[]
474
- const response = await config.api.users.bulkDeleteUsers(toDelete)
466
+ const response = await api.users.bulkDeleteUsers(toDelete)
475
467
 
476
468
  expect(response.deleted?.successful.length).toBe(3)
477
469
  expect(response.deleted?.unsuccessful.length).toBe(0)
@@ -486,7 +478,7 @@ describe("/api/global/users", () => {
486
478
  const user = await config.createUser()
487
479
  jest.clearAllMocks()
488
480
 
489
- await config.api.users.deleteUser(user._id!)
481
+ await api.users.deleteUser(user._id!)
490
482
 
491
483
  expect(events.user.deleted).toBeCalledTimes(1)
492
484
  expect(events.user.permissionBuilderRemoved).not.toBeCalled()
@@ -497,7 +489,7 @@ describe("/api/global/users", () => {
497
489
  const user = await config.createUser(structures.users.adminUser())
498
490
  jest.clearAllMocks()
499
491
 
500
- await config.api.users.deleteUser(user._id!)
492
+ await api.users.deleteUser(user._id!)
501
493
 
502
494
  expect(events.user.deleted).toBeCalledTimes(1)
503
495
  expect(events.user.permissionBuilderRemoved).toBeCalledTimes(1)
@@ -508,7 +500,7 @@ describe("/api/global/users", () => {
508
500
  const user = await config.createUser(structures.users.builderUser())
509
501
  jest.clearAllMocks()
510
502
 
511
- await config.api.users.deleteUser(user._id!)
503
+ await api.users.deleteUser(user._id!)
512
504
 
513
505
  expect(events.user.deleted).toBeCalledTimes(1)
514
506
  expect(events.user.permissionBuilderRemoved).toBeCalledTimes(1)
@@ -520,7 +512,7 @@ describe("/api/global/users", () => {
520
512
  const account = structures.accounts.cloudAccount()
521
513
  mocks.accounts.getAccount.mockReturnValueOnce(account)
522
514
 
523
- const response = await config.api.users.deleteUser(user._id!, 400)
515
+ const response = await api.users.deleteUser(user._id!, 400)
524
516
 
525
517
  expect(response.body.message).toBe("Account holder cannot be deleted")
526
518
  })
@@ -531,7 +523,7 @@ describe("/api/global/users", () => {
531
523
  account.email = user.email
532
524
  mocks.accounts.getAccount.mockReturnValueOnce(account)
533
525
 
534
- const response = await config.api.users.deleteUser(user._id!, 400)
526
+ const response = await api.users.deleteUser(user._id!, 400)
535
527
 
536
528
  expect(response.body.message).toBe("Unable to delete self.")
537
529
  })
@@ -0,0 +1,8 @@
1
+ const Router = require("@koa/router")
2
+ const controller = require("../../controllers/system/environment")
3
+
4
+ const router = new Router()
5
+
6
+ router.get("/api/system/environment", controller.fetch)
7
+
8
+ module.exports = router
@@ -0,0 +1,8 @@
1
+ const Router = require("@koa/router")
2
+ const controller = require("../../controllers/system/status")
3
+
4
+ const router = new Router()
5
+
6
+ router.get("/api/system/status", controller.fetch)
7
+
8
+ module.exports = router
@@ -0,0 +1,12 @@
1
+ const Router = require("@koa/router")
2
+ const controller = require("../../controllers/system/tenants")
3
+ const { adminOnly } = require("@budibase/backend-core/auth")
4
+
5
+ const router = new Router()
6
+
7
+ router
8
+ .get("/api/system/tenants/:tenantId/exists", controller.exists)
9
+ .get("/api/system/tenants", adminOnly, controller.fetch)
10
+ .delete("/api/system/tenants/:tenantId", adminOnly, controller.delete)
11
+
12
+ module.exports = router
@@ -1,9 +1,10 @@
1
1
  import sdk from "../../../../sdk"
2
- import { TestConfiguration, structures } from "../../../../tests"
2
+ import { TestConfiguration, structures, API } from "../../../../tests"
3
3
  import { v4 as uuid } from "uuid"
4
4
 
5
5
  describe("accounts", () => {
6
6
  const config = new TestConfiguration()
7
+ const api = new API(config)
7
8
 
8
9
  beforeAll(async () => {
9
10
  await config.beforeAll()
@@ -22,7 +23,7 @@ describe("accounts", () => {
22
23
  it("saves account metadata", async () => {
23
24
  let account = structures.accounts.account()
24
25
 
25
- const response = await config.api.accounts.saveMetadata(account)
26
+ const response = await api.accounts.saveMetadata(account)
26
27
 
27
28
  const id = sdk.accounts.formatAccountMetadataId(account.accountId)
28
29
  const metadata = await sdk.accounts.getMetadata(id)
@@ -33,9 +34,9 @@ describe("accounts", () => {
33
34
  describe("destroyMetadata", () => {
34
35
  it("destroys account metadata", async () => {
35
36
  const account = structures.accounts.account()
36
- await config.api.accounts.saveMetadata(account)
37
+ await api.accounts.saveMetadata(account)
37
38
 
38
- await config.api.accounts.destroyMetadata(account.accountId)
39
+ await api.accounts.destroyMetadata(account.accountId)
39
40
 
40
41
  const deleted = await sdk.accounts.getMetadata(account.accountId)
41
42
  expect(deleted).toBe(undefined)
@@ -44,7 +45,7 @@ describe("accounts", () => {
44
45
  it("destroys account metadata that does not exist", async () => {
45
46
  const id = uuid()
46
47
 
47
- const response = await config.api.accounts.destroyMetadata(id)
48
+ const response = await api.accounts.destroyMetadata(id)
48
49
 
49
50
  expect(response.status).toBe(204)
50
51
  })
@@ -1,97 +1,97 @@
1
- import { constants } from "@budibase/backend-core"
1
+ const { Configs } = require("@budibase/backend-core/constants")
2
2
 
3
- export const LOGO_URL =
3
+ exports.LOGO_URL =
4
4
  "https://d33wubrfki0l68.cloudfront.net/aac32159d7207b5085e74a7ef67afbb7027786c5/2b1fd/img/logo/bb-emblem.svg"
5
5
 
6
- export enum UserStatus {
7
- ACTIVE = "active",
8
- INACTIVE = "inactive",
6
+ exports.UserStatus = {
7
+ ACTIVE: "active",
8
+ INACTIVE: "inactive",
9
9
  }
10
10
 
11
- export const Config = constants.Config
11
+ exports.Configs = Configs
12
12
 
13
- export enum ConfigUpload {
14
- LOGO = "logo",
15
- OIDC_LOGO = "oidc_logo",
13
+ exports.ConfigUploads = {
14
+ LOGO: "logo",
15
+ OIDC_LOGO: "oidc_logo",
16
16
  }
17
17
 
18
- export enum TemplateType {
19
- EMAIL = "email",
18
+ const TemplateTypes = {
19
+ EMAIL: "email",
20
20
  }
21
21
 
22
- export enum EmailTemplatePurpose {
23
- BASE = "base",
24
- PASSWORD_RECOVERY = "password_recovery",
25
- INVITATION = "invitation",
26
- WELCOME = "welcome",
27
- CUSTOM = "custom",
22
+ const EmailTemplatePurpose = {
23
+ BASE: "base",
24
+ PASSWORD_RECOVERY: "password_recovery",
25
+ INVITATION: "invitation",
26
+ WELCOME: "welcome",
27
+ CUSTOM: "custom",
28
28
  }
29
29
 
30
- export enum InternalTemplateBinding {
31
- PLATFORM_URL = "platformUrl",
32
- COMPANY = "company",
33
- LOGO_URL = "logoUrl",
34
- EMAIL = "email",
35
- USER = "user",
36
- REQUEST = "request",
37
- DOCS_URL = "docsUrl",
38
- LOGIN_URL = "loginUrl",
39
- CURRENT_YEAR = "currentYear",
40
- CURRENT_DATE = "currentDate",
41
- BODY = "body",
42
- STYLES = "styles",
43
- RESET_URL = "resetUrl",
44
- RESET_CODE = "resetCode",
45
- INVITE_URL = "inviteUrl",
46
- INVITE_CODE = "inviteUrl",
47
- CONTENTS = "contents",
30
+ const InternalTemplateBindings = {
31
+ PLATFORM_URL: "platformUrl",
32
+ COMPANY: "company",
33
+ LOGO_URL: "logoUrl",
34
+ EMAIL: "email",
35
+ USER: "user",
36
+ REQUEST: "request",
37
+ DOCS_URL: "docsUrl",
38
+ LOGIN_URL: "loginUrl",
39
+ CURRENT_YEAR: "currentYear",
40
+ CURRENT_DATE: "currentDate",
41
+ BODY: "body",
42
+ STYLES: "styles",
43
+ RESET_URL: "resetUrl",
44
+ RESET_CODE: "resetCode",
45
+ INVITE_URL: "inviteUrl",
46
+ INVITE_CODE: "inviteUrl",
47
+ CONTENTS: "contents",
48
48
  }
49
49
 
50
- export const TemplateBindings = {
50
+ const TemplateBindings = {
51
51
  PLATFORM_URL: {
52
- name: InternalTemplateBinding.PLATFORM_URL,
52
+ name: InternalTemplateBindings.PLATFORM_URL,
53
53
  description: "The URL used to access the budibase platform",
54
54
  },
55
55
  COMPANY: {
56
- name: InternalTemplateBinding.COMPANY,
56
+ name: InternalTemplateBindings.COMPANY,
57
57
  description: "The name of your organization",
58
58
  },
59
59
  LOGO_URL: {
60
- name: InternalTemplateBinding.LOGO_URL,
60
+ name: InternalTemplateBindings.LOGO_URL,
61
61
  description: "The URL of your organizations logo.",
62
62
  },
63
63
  EMAIL: {
64
- name: InternalTemplateBinding.EMAIL,
64
+ name: InternalTemplateBindings.EMAIL,
65
65
  description: "The recipients email address.",
66
66
  },
67
67
  USER: {
68
- name: InternalTemplateBinding.USER,
68
+ name: InternalTemplateBindings.USER,
69
69
  description: "The recipients user object.",
70
70
  },
71
71
  REQUEST: {
72
- name: InternalTemplateBinding.REQUEST,
72
+ name: InternalTemplateBindings.REQUEST,
73
73
  description: "Additional request metadata.",
74
74
  },
75
75
  DOCS_URL: {
76
- name: InternalTemplateBinding.DOCS_URL,
76
+ name: InternalTemplateBindings.DOCS_URL,
77
77
  description: "Organization documentation URL.",
78
78
  },
79
79
  LOGIN_URL: {
80
- name: InternalTemplateBinding.LOGIN_URL,
80
+ name: InternalTemplateBindings.LOGIN_URL,
81
81
  description: "The URL used to log into the organization budibase instance.",
82
82
  },
83
83
  CURRENT_YEAR: {
84
- name: InternalTemplateBinding.CURRENT_YEAR,
84
+ name: InternalTemplateBindings.CURRENT_YEAR,
85
85
  description: "The current year.",
86
86
  },
87
87
  CURRENT_DATE: {
88
- name: InternalTemplateBinding.CURRENT_DATE,
88
+ name: InternalTemplateBindings.CURRENT_DATE,
89
89
  description: "The current date.",
90
90
  },
91
91
  }
92
92
 
93
- export const TemplateMetadata = {
94
- [TemplateType.EMAIL]: [
93
+ const TemplateMetadata = {
94
+ [TemplateTypes.EMAIL]: [
95
95
  {
96
96
  name: "Base format",
97
97
  description:
@@ -100,11 +100,11 @@ export const TemplateMetadata = {
100
100
  purpose: EmailTemplatePurpose.BASE,
101
101
  bindings: [
102
102
  {
103
- name: InternalTemplateBinding.BODY,
103
+ name: InternalTemplateBindings.BODY,
104
104
  description: "The main body of another email template.",
105
105
  },
106
106
  {
107
- name: InternalTemplateBinding.STYLES,
107
+ name: InternalTemplateBindings.STYLES,
108
108
  description: "The contents of the Styling email template.",
109
109
  },
110
110
  ],
@@ -117,12 +117,12 @@ export const TemplateMetadata = {
117
117
  purpose: EmailTemplatePurpose.PASSWORD_RECOVERY,
118
118
  bindings: [
119
119
  {
120
- name: InternalTemplateBinding.RESET_URL,
120
+ name: InternalTemplateBindings.RESET_URL,
121
121
  description:
122
122
  "The URL the recipient must click to reset their password.",
123
123
  },
124
124
  {
125
- name: InternalTemplateBinding.RESET_CODE,
125
+ name: InternalTemplateBindings.RESET_CODE,
126
126
  description:
127
127
  "The temporary password reset code used in the recipients password reset URL.",
128
128
  },
@@ -144,12 +144,12 @@ export const TemplateMetadata = {
144
144
  purpose: EmailTemplatePurpose.INVITATION,
145
145
  bindings: [
146
146
  {
147
- name: InternalTemplateBinding.INVITE_URL,
147
+ name: InternalTemplateBindings.INVITE_URL,
148
148
  description:
149
149
  "The URL the recipient must click to accept the invitation and activate their account.",
150
150
  },
151
151
  {
152
- name: InternalTemplateBinding.INVITE_CODE,
152
+ name: InternalTemplateBindings.INVITE_CODE,
153
153
  description:
154
154
  "The temporary invite code used in the recipients invitation URL.",
155
155
  },
@@ -163,7 +163,7 @@ export const TemplateMetadata = {
163
163
  purpose: EmailTemplatePurpose.CUSTOM,
164
164
  bindings: [
165
165
  {
166
- name: InternalTemplateBinding.CONTENTS,
166
+ name: InternalTemplateBindings.CONTENTS,
167
167
  description: "Custom content body.",
168
168
  },
169
169
  ],
@@ -172,5 +172,12 @@ export const TemplateMetadata = {
172
172
  }
173
173
 
174
174
  // all purpose combined
175
- export { EmailTemplatePurpose as TemplatePurpose }
176
- export const GLOBAL_OWNER = "global"
175
+ exports.TemplatePurpose = {
176
+ ...EmailTemplatePurpose,
177
+ }
178
+ exports.TemplateTypes = TemplateTypes
179
+ exports.EmailTemplatePurpose = EmailTemplatePurpose
180
+ exports.TemplateMetadata = TemplateMetadata
181
+ exports.TemplateBindings = TemplateBindings
182
+ exports.InternalTemplateBindings = InternalTemplateBindings
183
+ exports.GLOBAL_OWNER = "global"