@budibase/backend-core 2.9.19 → 2.9.21-alpha.0

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 (250) hide show
  1. package/dist/index.js +266 -324
  2. package/dist/index.js.map +4 -4
  3. package/dist/index.js.meta.json +1 -1
  4. package/dist/package.json +19 -4
  5. package/dist/plugins.js +1 -1
  6. package/dist/plugins.js.map +1 -1
  7. package/dist/plugins.js.meta.json +1 -1
  8. package/dist/src/security/permissions.d.ts +1 -1
  9. package/dist/tests.js +222 -260
  10. package/dist/tests.js.map +4 -4
  11. package/dist/tests.js.meta.json +1 -1
  12. package/package.json +19 -4
  13. package/dist/tsconfig.build.tsbuildinfo +0 -1
  14. package/src/accounts/accounts.ts +0 -82
  15. package/src/accounts/api.ts +0 -59
  16. package/src/accounts/index.ts +0 -1
  17. package/src/auth/auth.ts +0 -208
  18. package/src/auth/index.ts +0 -1
  19. package/src/auth/tests/auth.spec.ts +0 -14
  20. package/src/blacklist/blacklist.ts +0 -54
  21. package/src/blacklist/index.ts +0 -1
  22. package/src/blacklist/tests/blacklist.spec.ts +0 -46
  23. package/src/cache/appMetadata.ts +0 -88
  24. package/src/cache/base/index.ts +0 -92
  25. package/src/cache/generic.ts +0 -30
  26. package/src/cache/index.ts +0 -5
  27. package/src/cache/tests/writethrough.spec.ts +0 -138
  28. package/src/cache/user.ts +0 -69
  29. package/src/cache/writethrough.ts +0 -133
  30. package/src/configs/configs.ts +0 -257
  31. package/src/configs/index.ts +0 -1
  32. package/src/configs/tests/configs.spec.ts +0 -184
  33. package/src/constants/db.ts +0 -63
  34. package/src/constants/index.ts +0 -2
  35. package/src/constants/misc.ts +0 -50
  36. package/src/context/Context.ts +0 -14
  37. package/src/context/identity.ts +0 -58
  38. package/src/context/index.ts +0 -3
  39. package/src/context/mainContext.ts +0 -310
  40. package/src/context/tests/index.spec.ts +0 -147
  41. package/src/context/types.ts +0 -11
  42. package/src/db/Replication.ts +0 -84
  43. package/src/db/constants.ts +0 -10
  44. package/src/db/couch/DatabaseImpl.ts +0 -238
  45. package/src/db/couch/connections.ts +0 -77
  46. package/src/db/couch/index.ts +0 -5
  47. package/src/db/couch/pouchDB.ts +0 -97
  48. package/src/db/couch/pouchDump.ts +0 -0
  49. package/src/db/couch/utils.ts +0 -50
  50. package/src/db/db.ts +0 -39
  51. package/src/db/errors.ts +0 -14
  52. package/src/db/index.ts +0 -12
  53. package/src/db/lucene.ts +0 -732
  54. package/src/db/searchIndexes/index.ts +0 -1
  55. package/src/db/searchIndexes/searchIndexes.ts +0 -62
  56. package/src/db/tests/index.spec.js +0 -25
  57. package/src/db/tests/lucene.spec.ts +0 -298
  58. package/src/db/tests/pouch.spec.js +0 -62
  59. package/src/db/tests/utils.spec.ts +0 -63
  60. package/src/db/utils.ts +0 -207
  61. package/src/db/views.ts +0 -241
  62. package/src/docIds/conversions.ts +0 -59
  63. package/src/docIds/ids.ts +0 -113
  64. package/src/docIds/index.ts +0 -2
  65. package/src/docIds/newid.ts +0 -5
  66. package/src/docIds/params.ts +0 -174
  67. package/src/docUpdates/index.ts +0 -29
  68. package/src/environment.ts +0 -201
  69. package/src/errors/errors.ts +0 -119
  70. package/src/errors/index.ts +0 -1
  71. package/src/events/analytics.ts +0 -6
  72. package/src/events/asyncEvents/index.ts +0 -2
  73. package/src/events/asyncEvents/publisher.ts +0 -12
  74. package/src/events/asyncEvents/queue.ts +0 -22
  75. package/src/events/backfill.ts +0 -183
  76. package/src/events/documentId.ts +0 -56
  77. package/src/events/events.ts +0 -40
  78. package/src/events/identification.ts +0 -310
  79. package/src/events/index.ts +0 -14
  80. package/src/events/processors/AnalyticsProcessor.ts +0 -64
  81. package/src/events/processors/AuditLogsProcessor.ts +0 -93
  82. package/src/events/processors/LoggingProcessor.ts +0 -37
  83. package/src/events/processors/Processors.ts +0 -52
  84. package/src/events/processors/async/DocumentUpdateProcessor.ts +0 -43
  85. package/src/events/processors/index.ts +0 -19
  86. package/src/events/processors/posthog/PosthogProcessor.ts +0 -118
  87. package/src/events/processors/posthog/index.ts +0 -2
  88. package/src/events/processors/posthog/rateLimiting.ts +0 -106
  89. package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +0 -168
  90. package/src/events/processors/types.ts +0 -1
  91. package/src/events/publishers/account.ts +0 -35
  92. package/src/events/publishers/app.ts +0 -155
  93. package/src/events/publishers/auditLog.ts +0 -26
  94. package/src/events/publishers/auth.ts +0 -73
  95. package/src/events/publishers/automation.ts +0 -110
  96. package/src/events/publishers/backfill.ts +0 -74
  97. package/src/events/publishers/backup.ts +0 -42
  98. package/src/events/publishers/datasource.ts +0 -48
  99. package/src/events/publishers/email.ts +0 -17
  100. package/src/events/publishers/environmentVariable.ts +0 -38
  101. package/src/events/publishers/group.ts +0 -99
  102. package/src/events/publishers/index.ts +0 -24
  103. package/src/events/publishers/installation.ts +0 -38
  104. package/src/events/publishers/layout.ts +0 -26
  105. package/src/events/publishers/license.ts +0 -84
  106. package/src/events/publishers/org.ts +0 -37
  107. package/src/events/publishers/plugin.ts +0 -47
  108. package/src/events/publishers/query.ts +0 -88
  109. package/src/events/publishers/role.ts +0 -62
  110. package/src/events/publishers/rows.ts +0 -29
  111. package/src/events/publishers/screen.ts +0 -36
  112. package/src/events/publishers/serve.ts +0 -43
  113. package/src/events/publishers/table.ts +0 -70
  114. package/src/events/publishers/user.ts +0 -202
  115. package/src/events/publishers/view.ts +0 -107
  116. package/src/featureFlags/index.ts +0 -77
  117. package/src/featureFlags/tests/featureFlags.spec.ts +0 -85
  118. package/src/helpers.ts +0 -9
  119. package/src/index.ts +0 -53
  120. package/src/installation.ts +0 -107
  121. package/src/logging/alerts.ts +0 -26
  122. package/src/logging/correlation/correlation.ts +0 -13
  123. package/src/logging/correlation/index.ts +0 -1
  124. package/src/logging/correlation/middleware.ts +0 -17
  125. package/src/logging/index.ts +0 -4
  126. package/src/logging/pino/logger.ts +0 -232
  127. package/src/logging/pino/middleware.ts +0 -45
  128. package/src/logging/system.ts +0 -81
  129. package/src/logging/tests/system.spec.ts +0 -61
  130. package/src/middleware/adminOnly.ts +0 -9
  131. package/src/middleware/auditLog.ts +0 -6
  132. package/src/middleware/authenticated.ts +0 -193
  133. package/src/middleware/builderOnly.ts +0 -20
  134. package/src/middleware/builderOrAdmin.ts +0 -20
  135. package/src/middleware/csrf.ts +0 -81
  136. package/src/middleware/errorHandling.ts +0 -29
  137. package/src/middleware/index.ts +0 -21
  138. package/src/middleware/internalApi.ts +0 -23
  139. package/src/middleware/joi-validator.ts +0 -45
  140. package/src/middleware/matchers.ts +0 -47
  141. package/src/middleware/passport/datasource/google.ts +0 -95
  142. package/src/middleware/passport/local.ts +0 -54
  143. package/src/middleware/passport/sso/google.ts +0 -77
  144. package/src/middleware/passport/sso/oidc.ts +0 -154
  145. package/src/middleware/passport/sso/sso.ts +0 -165
  146. package/src/middleware/passport/sso/tests/google.spec.ts +0 -67
  147. package/src/middleware/passport/sso/tests/oidc.spec.ts +0 -152
  148. package/src/middleware/passport/sso/tests/sso.spec.ts +0 -197
  149. package/src/middleware/passport/utils.ts +0 -38
  150. package/src/middleware/querystringToBody.ts +0 -28
  151. package/src/middleware/tenancy.ts +0 -36
  152. package/src/middleware/tests/builder.spec.ts +0 -180
  153. package/src/middleware/tests/matchers.spec.ts +0 -134
  154. package/src/migrations/definitions.ts +0 -40
  155. package/src/migrations/index.ts +0 -2
  156. package/src/migrations/migrations.ts +0 -191
  157. package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +0 -11
  158. package/src/migrations/tests/migrations.spec.ts +0 -64
  159. package/src/objectStore/buckets/app.ts +0 -40
  160. package/src/objectStore/buckets/global.ts +0 -29
  161. package/src/objectStore/buckets/index.ts +0 -3
  162. package/src/objectStore/buckets/plugins.ts +0 -71
  163. package/src/objectStore/buckets/tests/app.spec.ts +0 -171
  164. package/src/objectStore/buckets/tests/global.spec.ts +0 -74
  165. package/src/objectStore/buckets/tests/plugins.spec.ts +0 -111
  166. package/src/objectStore/cloudfront.ts +0 -41
  167. package/src/objectStore/index.ts +0 -3
  168. package/src/objectStore/objectStore.ts +0 -440
  169. package/src/objectStore/utils.ts +0 -27
  170. package/src/platform/index.ts +0 -3
  171. package/src/platform/platformDb.ts +0 -6
  172. package/src/platform/tenants.ts +0 -101
  173. package/src/platform/tests/tenants.spec.ts +0 -26
  174. package/src/platform/users.ts +0 -90
  175. package/src/plugin/index.ts +0 -1
  176. package/src/plugin/tests/validation.spec.ts +0 -83
  177. package/src/plugin/utils.ts +0 -156
  178. package/src/queue/constants.ts +0 -6
  179. package/src/queue/inMemoryQueue.ts +0 -141
  180. package/src/queue/index.ts +0 -2
  181. package/src/queue/listeners.ts +0 -195
  182. package/src/queue/queue.ts +0 -54
  183. package/src/redis/index.ts +0 -6
  184. package/src/redis/init.ts +0 -86
  185. package/src/redis/redis.ts +0 -308
  186. package/src/redis/redlockImpl.ts +0 -139
  187. package/src/redis/utils.ts +0 -117
  188. package/src/security/encryption.ts +0 -179
  189. package/src/security/permissions.ts +0 -159
  190. package/src/security/roles.ts +0 -420
  191. package/src/security/sessions.ts +0 -120
  192. package/src/security/tests/encryption.spec.ts +0 -31
  193. package/src/security/tests/permissions.spec.ts +0 -145
  194. package/src/security/tests/sessions.spec.ts +0 -12
  195. package/src/tenancy/db.ts +0 -6
  196. package/src/tenancy/index.ts +0 -2
  197. package/src/tenancy/tenancy.ts +0 -140
  198. package/src/tenancy/tests/tenancy.spec.ts +0 -184
  199. package/src/timers/index.ts +0 -1
  200. package/src/timers/timers.ts +0 -22
  201. package/src/users/db.ts +0 -460
  202. package/src/users/events.ts +0 -176
  203. package/src/users/index.ts +0 -4
  204. package/src/users/lookup.ts +0 -102
  205. package/src/users/users.ts +0 -276
  206. package/src/users/utils.ts +0 -55
  207. package/src/utils/hashing.ts +0 -14
  208. package/src/utils/index.ts +0 -3
  209. package/src/utils/stringUtils.ts +0 -8
  210. package/src/utils/tests/utils.spec.ts +0 -191
  211. package/src/utils/utils.ts +0 -239
  212. package/tests/core/logging.ts +0 -34
  213. package/tests/core/utilities/index.ts +0 -6
  214. package/tests/core/utilities/jestUtils.ts +0 -30
  215. package/tests/core/utilities/mocks/alerts.ts +0 -3
  216. package/tests/core/utilities/mocks/date.ts +0 -2
  217. package/tests/core/utilities/mocks/events.ts +0 -131
  218. package/tests/core/utilities/mocks/fetch.ts +0 -17
  219. package/tests/core/utilities/mocks/index.ts +0 -10
  220. package/tests/core/utilities/mocks/licenses.ts +0 -107
  221. package/tests/core/utilities/mocks/posthog.ts +0 -7
  222. package/tests/core/utilities/structures/Chance.ts +0 -20
  223. package/tests/core/utilities/structures/accounts.ts +0 -115
  224. package/tests/core/utilities/structures/apps.ts +0 -21
  225. package/tests/core/utilities/structures/common.ts +0 -7
  226. package/tests/core/utilities/structures/db.ts +0 -12
  227. package/tests/core/utilities/structures/documents/index.ts +0 -1
  228. package/tests/core/utilities/structures/documents/platform/index.ts +0 -1
  229. package/tests/core/utilities/structures/documents/platform/installation.ts +0 -12
  230. package/tests/core/utilities/structures/generator.ts +0 -2
  231. package/tests/core/utilities/structures/index.ts +0 -15
  232. package/tests/core/utilities/structures/koa.ts +0 -16
  233. package/tests/core/utilities/structures/licenses.ts +0 -167
  234. package/tests/core/utilities/structures/plugins.ts +0 -19
  235. package/tests/core/utilities/structures/quotas.ts +0 -67
  236. package/tests/core/utilities/structures/scim.ts +0 -80
  237. package/tests/core/utilities/structures/shared.ts +0 -19
  238. package/tests/core/utilities/structures/sso.ts +0 -119
  239. package/tests/core/utilities/structures/tenants.ts +0 -5
  240. package/tests/core/utilities/structures/userGroups.ts +0 -10
  241. package/tests/core/utilities/structures/users.ts +0 -73
  242. package/tests/core/utilities/testContainerUtils.ts +0 -98
  243. package/tests/core/utilities/utils/index.ts +0 -1
  244. package/tests/core/utilities/utils/time.ts +0 -3
  245. package/tests/extra/DBTestConfiguration.ts +0 -36
  246. package/tests/extra/index.ts +0 -2
  247. package/tests/extra/testEnv.ts +0 -95
  248. package/tests/index.ts +0 -1
  249. package/tests/jestEnv.ts +0 -6
  250. package/tests/jestSetup.ts +0 -28
@@ -1,179 +0,0 @@
1
- import crypto from "crypto"
2
- import fs from "fs"
3
- import zlib from "zlib"
4
- import env from "../environment"
5
- import { join } from "path"
6
-
7
- const ALGO = "aes-256-ctr"
8
- const SEPARATOR = "-"
9
- const ITERATIONS = 10000
10
- const STRETCH_LENGTH = 32
11
-
12
- const SALT_LENGTH = 16
13
- const IV_LENGTH = 16
14
-
15
- export enum SecretOption {
16
- API = "api",
17
- ENCRYPTION = "encryption",
18
- }
19
-
20
- export function getSecret(secretOption: SecretOption): string {
21
- let secret, secretName
22
- switch (secretOption) {
23
- case SecretOption.ENCRYPTION:
24
- secret = env.ENCRYPTION_KEY
25
- secretName = "ENCRYPTION_KEY"
26
- break
27
- case SecretOption.API:
28
- default:
29
- secret = env.API_ENCRYPTION_KEY
30
- secretName = "API_ENCRYPTION_KEY"
31
- break
32
- }
33
- if (!secret) {
34
- throw new Error(`Secret "${secretName}" has not been set in environment.`)
35
- }
36
- return secret
37
- }
38
-
39
- function stretchString(secret: string, salt: Buffer) {
40
- return crypto.pbkdf2Sync(secret, salt, ITERATIONS, STRETCH_LENGTH, "sha512")
41
- }
42
-
43
- export function encrypt(
44
- input: string,
45
- secretOption: SecretOption = SecretOption.API
46
- ) {
47
- const salt = crypto.randomBytes(SALT_LENGTH)
48
- const stretched = stretchString(getSecret(secretOption), salt)
49
- const cipher = crypto.createCipheriv(ALGO, stretched, salt)
50
- const base = cipher.update(input)
51
- const final = cipher.final()
52
- const encrypted = Buffer.concat([base, final]).toString("hex")
53
- return `${salt.toString("hex")}${SEPARATOR}${encrypted}`
54
- }
55
-
56
- export function decrypt(
57
- input: string,
58
- secretOption: SecretOption = SecretOption.API
59
- ) {
60
- const [salt, encrypted] = input.split(SEPARATOR)
61
- const saltBuffer = Buffer.from(salt, "hex")
62
- const stretched = stretchString(getSecret(secretOption), saltBuffer)
63
- const decipher = crypto.createDecipheriv(ALGO, stretched, saltBuffer)
64
- const base = decipher.update(Buffer.from(encrypted, "hex"))
65
- const final = decipher.final()
66
- return Buffer.concat([base, final]).toString()
67
- }
68
-
69
- export async function encryptFile(
70
- { dir, filename }: { dir: string; filename: string },
71
- secret: string
72
- ) {
73
- const outputFileName = `${filename}.enc`
74
-
75
- const filePath = join(dir, filename)
76
- const inputFile = fs.createReadStream(filePath)
77
- const outputFile = fs.createWriteStream(join(dir, outputFileName))
78
-
79
- const salt = crypto.randomBytes(SALT_LENGTH)
80
- const iv = crypto.randomBytes(IV_LENGTH)
81
- const stretched = stretchString(secret, salt)
82
- const cipher = crypto.createCipheriv(ALGO, stretched, iv)
83
-
84
- outputFile.write(salt)
85
- outputFile.write(iv)
86
-
87
- inputFile.pipe(zlib.createGzip()).pipe(cipher).pipe(outputFile)
88
-
89
- return new Promise<{ filename: string; dir: string }>(r => {
90
- outputFile.on("finish", () => {
91
- r({
92
- filename: outputFileName,
93
- dir,
94
- })
95
- })
96
- })
97
- }
98
-
99
- async function getSaltAndIV(path: string) {
100
- const fileStream = fs.createReadStream(path)
101
-
102
- const salt = await readBytes(fileStream, SALT_LENGTH)
103
- const iv = await readBytes(fileStream, IV_LENGTH)
104
- fileStream.close()
105
- return { salt, iv }
106
- }
107
-
108
- export async function decryptFile(
109
- inputPath: string,
110
- outputPath: string,
111
- secret: string
112
- ) {
113
- const { salt, iv } = await getSaltAndIV(inputPath)
114
- const inputFile = fs.createReadStream(inputPath, {
115
- start: SALT_LENGTH + IV_LENGTH,
116
- })
117
-
118
- const outputFile = fs.createWriteStream(outputPath)
119
-
120
- const stretched = stretchString(secret, salt)
121
- const decipher = crypto.createDecipheriv(ALGO, stretched, iv)
122
-
123
- const unzip = zlib.createGunzip()
124
-
125
- inputFile.pipe(decipher).pipe(unzip).pipe(outputFile)
126
-
127
- return new Promise<void>((res, rej) => {
128
- outputFile.on("finish", () => {
129
- outputFile.close()
130
- res()
131
- })
132
-
133
- inputFile.on("error", e => {
134
- outputFile.close()
135
- rej(e)
136
- })
137
-
138
- decipher.on("error", e => {
139
- outputFile.close()
140
- rej(e)
141
- })
142
-
143
- unzip.on("error", e => {
144
- outputFile.close()
145
- rej(e)
146
- })
147
-
148
- outputFile.on("error", e => {
149
- outputFile.close()
150
- rej(e)
151
- })
152
- })
153
- }
154
-
155
- function readBytes(stream: fs.ReadStream, length: number) {
156
- return new Promise<Buffer>((resolve, reject) => {
157
- let bytesRead = 0
158
- const data: Buffer[] = []
159
-
160
- stream.on("readable", () => {
161
- let chunk
162
-
163
- while ((chunk = stream.read(length - bytesRead)) !== null) {
164
- data.push(chunk)
165
- bytesRead += chunk.length
166
- }
167
-
168
- resolve(Buffer.concat(data))
169
- })
170
-
171
- stream.on("end", () => {
172
- reject(new Error("Insufficient data in the stream."))
173
- })
174
-
175
- stream.on("error", error => {
176
- reject(error)
177
- })
178
- })
179
- }
@@ -1,159 +0,0 @@
1
- import { PermissionType, PermissionLevel } from "@budibase/types"
2
- export { PermissionType, PermissionLevel } from "@budibase/types"
3
- import flatten from "lodash/flatten"
4
- import cloneDeep from "lodash/fp/cloneDeep"
5
-
6
- export type RoleHierarchy = {
7
- permissionId: string
8
- }[]
9
-
10
- export class Permission {
11
- type: PermissionType
12
- level: PermissionLevel
13
-
14
- constructor(type: PermissionType, level: PermissionLevel) {
15
- this.type = type
16
- this.level = level
17
- }
18
- }
19
-
20
- export function levelToNumber(perm: PermissionLevel) {
21
- switch (perm) {
22
- // not everything has execute privileges
23
- case PermissionLevel.EXECUTE:
24
- return 0
25
- case PermissionLevel.READ:
26
- return 1
27
- case PermissionLevel.WRITE:
28
- return 2
29
- case PermissionLevel.ADMIN:
30
- return 3
31
- default:
32
- return -1
33
- }
34
- }
35
-
36
- /**
37
- * Given the specified permission level for the user return the levels they are allowed to carry out.
38
- * @param {string} userPermLevel The permission level of the user.
39
- * @return {string[]} All the permission levels this user is allowed to carry out.
40
- */
41
- export function getAllowedLevels(userPermLevel: PermissionLevel): string[] {
42
- switch (userPermLevel) {
43
- case PermissionLevel.EXECUTE:
44
- return [PermissionLevel.EXECUTE]
45
- case PermissionLevel.READ:
46
- return [PermissionLevel.EXECUTE, PermissionLevel.READ]
47
- case PermissionLevel.WRITE:
48
- case PermissionLevel.ADMIN:
49
- return [
50
- PermissionLevel.EXECUTE,
51
- PermissionLevel.READ,
52
- PermissionLevel.WRITE,
53
- ]
54
- default:
55
- return []
56
- }
57
- }
58
-
59
- export enum BuiltinPermissionID {
60
- PUBLIC = "public",
61
- READ_ONLY = "read_only",
62
- WRITE = "write",
63
- ADMIN = "admin",
64
- POWER = "power",
65
- }
66
-
67
- export const BUILTIN_PERMISSIONS = {
68
- PUBLIC: {
69
- _id: BuiltinPermissionID.PUBLIC,
70
- name: "Public",
71
- permissions: [
72
- new Permission(PermissionType.WEBHOOK, PermissionLevel.EXECUTE),
73
- ],
74
- },
75
- READ_ONLY: {
76
- _id: BuiltinPermissionID.READ_ONLY,
77
- name: "Read only",
78
- permissions: [
79
- new Permission(PermissionType.QUERY, PermissionLevel.READ),
80
- new Permission(PermissionType.TABLE, PermissionLevel.READ),
81
- new Permission(PermissionType.VIEW, PermissionLevel.READ),
82
- ],
83
- },
84
- WRITE: {
85
- _id: BuiltinPermissionID.WRITE,
86
- name: "Read/Write",
87
- permissions: [
88
- new Permission(PermissionType.QUERY, PermissionLevel.WRITE),
89
- new Permission(PermissionType.TABLE, PermissionLevel.WRITE),
90
- new Permission(PermissionType.VIEW, PermissionLevel.READ),
91
- new Permission(PermissionType.AUTOMATION, PermissionLevel.EXECUTE),
92
- ],
93
- },
94
- POWER: {
95
- _id: BuiltinPermissionID.POWER,
96
- name: "Power",
97
- permissions: [
98
- new Permission(PermissionType.TABLE, PermissionLevel.WRITE),
99
- new Permission(PermissionType.USER, PermissionLevel.READ),
100
- new Permission(PermissionType.AUTOMATION, PermissionLevel.EXECUTE),
101
- new Permission(PermissionType.VIEW, PermissionLevel.READ),
102
- new Permission(PermissionType.WEBHOOK, PermissionLevel.READ),
103
- ],
104
- },
105
- ADMIN: {
106
- _id: BuiltinPermissionID.ADMIN,
107
- name: "Admin",
108
- permissions: [
109
- new Permission(PermissionType.TABLE, PermissionLevel.ADMIN),
110
- new Permission(PermissionType.USER, PermissionLevel.ADMIN),
111
- new Permission(PermissionType.AUTOMATION, PermissionLevel.ADMIN),
112
- new Permission(PermissionType.VIEW, PermissionLevel.ADMIN),
113
- new Permission(PermissionType.WEBHOOK, PermissionLevel.READ),
114
- new Permission(PermissionType.QUERY, PermissionLevel.ADMIN),
115
- ],
116
- },
117
- }
118
-
119
- export function getBuiltinPermissions() {
120
- return cloneDeep(BUILTIN_PERMISSIONS)
121
- }
122
-
123
- export function getBuiltinPermissionByID(id: string) {
124
- const perms = Object.values(BUILTIN_PERMISSIONS)
125
- return perms.find(perm => perm._id === id)
126
- }
127
-
128
- export function doesHaveBasePermission(
129
- permType: PermissionType,
130
- permLevel: PermissionLevel,
131
- rolesHierarchy: RoleHierarchy
132
- ) {
133
- const basePermissions = [
134
- ...new Set(rolesHierarchy.map(role => role.permissionId)),
135
- ]
136
- const builtins = Object.values(BUILTIN_PERMISSIONS)
137
- let permissions = flatten(
138
- builtins
139
- .filter(builtin => basePermissions.indexOf(builtin._id) !== -1)
140
- .map(builtin => builtin.permissions)
141
- )
142
- for (let permission of permissions) {
143
- if (
144
- permission.type === permType &&
145
- getAllowedLevels(permission.level).indexOf(permLevel) !== -1
146
- ) {
147
- return true
148
- }
149
- }
150
- return false
151
- }
152
-
153
- export function isPermissionLevelHigherThanRead(level: PermissionLevel) {
154
- return levelToNumber(level) > 1
155
- }
156
-
157
- // utility as a lot of things need simply the builder permission
158
- export const BUILDER = PermissionType.BUILDER
159
- export const GLOBAL_BUILDER = PermissionType.GLOBAL_BUILDER