@budibase/backend-core 2.9.19 → 2.9.20

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 (241) hide show
  1. package/dist/package.json +19 -4
  2. package/dist/src/security/permissions.d.ts +1 -1
  3. package/package.json +19 -4
  4. package/dist/tsconfig.build.tsbuildinfo +0 -1
  5. package/src/accounts/accounts.ts +0 -82
  6. package/src/accounts/api.ts +0 -59
  7. package/src/accounts/index.ts +0 -1
  8. package/src/auth/auth.ts +0 -208
  9. package/src/auth/index.ts +0 -1
  10. package/src/auth/tests/auth.spec.ts +0 -14
  11. package/src/blacklist/blacklist.ts +0 -54
  12. package/src/blacklist/index.ts +0 -1
  13. package/src/blacklist/tests/blacklist.spec.ts +0 -46
  14. package/src/cache/appMetadata.ts +0 -88
  15. package/src/cache/base/index.ts +0 -92
  16. package/src/cache/generic.ts +0 -30
  17. package/src/cache/index.ts +0 -5
  18. package/src/cache/tests/writethrough.spec.ts +0 -138
  19. package/src/cache/user.ts +0 -69
  20. package/src/cache/writethrough.ts +0 -133
  21. package/src/configs/configs.ts +0 -257
  22. package/src/configs/index.ts +0 -1
  23. package/src/configs/tests/configs.spec.ts +0 -184
  24. package/src/constants/db.ts +0 -63
  25. package/src/constants/index.ts +0 -2
  26. package/src/constants/misc.ts +0 -50
  27. package/src/context/Context.ts +0 -14
  28. package/src/context/identity.ts +0 -58
  29. package/src/context/index.ts +0 -3
  30. package/src/context/mainContext.ts +0 -310
  31. package/src/context/tests/index.spec.ts +0 -147
  32. package/src/context/types.ts +0 -11
  33. package/src/db/Replication.ts +0 -84
  34. package/src/db/constants.ts +0 -10
  35. package/src/db/couch/DatabaseImpl.ts +0 -238
  36. package/src/db/couch/connections.ts +0 -77
  37. package/src/db/couch/index.ts +0 -5
  38. package/src/db/couch/pouchDB.ts +0 -97
  39. package/src/db/couch/pouchDump.ts +0 -0
  40. package/src/db/couch/utils.ts +0 -50
  41. package/src/db/db.ts +0 -39
  42. package/src/db/errors.ts +0 -14
  43. package/src/db/index.ts +0 -12
  44. package/src/db/lucene.ts +0 -732
  45. package/src/db/searchIndexes/index.ts +0 -1
  46. package/src/db/searchIndexes/searchIndexes.ts +0 -62
  47. package/src/db/tests/index.spec.js +0 -25
  48. package/src/db/tests/lucene.spec.ts +0 -298
  49. package/src/db/tests/pouch.spec.js +0 -62
  50. package/src/db/tests/utils.spec.ts +0 -63
  51. package/src/db/utils.ts +0 -207
  52. package/src/db/views.ts +0 -241
  53. package/src/docIds/conversions.ts +0 -59
  54. package/src/docIds/ids.ts +0 -113
  55. package/src/docIds/index.ts +0 -2
  56. package/src/docIds/newid.ts +0 -5
  57. package/src/docIds/params.ts +0 -174
  58. package/src/docUpdates/index.ts +0 -29
  59. package/src/environment.ts +0 -201
  60. package/src/errors/errors.ts +0 -119
  61. package/src/errors/index.ts +0 -1
  62. package/src/events/analytics.ts +0 -6
  63. package/src/events/asyncEvents/index.ts +0 -2
  64. package/src/events/asyncEvents/publisher.ts +0 -12
  65. package/src/events/asyncEvents/queue.ts +0 -22
  66. package/src/events/backfill.ts +0 -183
  67. package/src/events/documentId.ts +0 -56
  68. package/src/events/events.ts +0 -40
  69. package/src/events/identification.ts +0 -310
  70. package/src/events/index.ts +0 -14
  71. package/src/events/processors/AnalyticsProcessor.ts +0 -64
  72. package/src/events/processors/AuditLogsProcessor.ts +0 -93
  73. package/src/events/processors/LoggingProcessor.ts +0 -37
  74. package/src/events/processors/Processors.ts +0 -52
  75. package/src/events/processors/async/DocumentUpdateProcessor.ts +0 -43
  76. package/src/events/processors/index.ts +0 -19
  77. package/src/events/processors/posthog/PosthogProcessor.ts +0 -118
  78. package/src/events/processors/posthog/index.ts +0 -2
  79. package/src/events/processors/posthog/rateLimiting.ts +0 -106
  80. package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +0 -168
  81. package/src/events/processors/types.ts +0 -1
  82. package/src/events/publishers/account.ts +0 -35
  83. package/src/events/publishers/app.ts +0 -155
  84. package/src/events/publishers/auditLog.ts +0 -26
  85. package/src/events/publishers/auth.ts +0 -73
  86. package/src/events/publishers/automation.ts +0 -110
  87. package/src/events/publishers/backfill.ts +0 -74
  88. package/src/events/publishers/backup.ts +0 -42
  89. package/src/events/publishers/datasource.ts +0 -48
  90. package/src/events/publishers/email.ts +0 -17
  91. package/src/events/publishers/environmentVariable.ts +0 -38
  92. package/src/events/publishers/group.ts +0 -99
  93. package/src/events/publishers/index.ts +0 -24
  94. package/src/events/publishers/installation.ts +0 -38
  95. package/src/events/publishers/layout.ts +0 -26
  96. package/src/events/publishers/license.ts +0 -84
  97. package/src/events/publishers/org.ts +0 -37
  98. package/src/events/publishers/plugin.ts +0 -47
  99. package/src/events/publishers/query.ts +0 -88
  100. package/src/events/publishers/role.ts +0 -62
  101. package/src/events/publishers/rows.ts +0 -29
  102. package/src/events/publishers/screen.ts +0 -36
  103. package/src/events/publishers/serve.ts +0 -43
  104. package/src/events/publishers/table.ts +0 -70
  105. package/src/events/publishers/user.ts +0 -202
  106. package/src/events/publishers/view.ts +0 -107
  107. package/src/featureFlags/index.ts +0 -77
  108. package/src/featureFlags/tests/featureFlags.spec.ts +0 -85
  109. package/src/helpers.ts +0 -9
  110. package/src/index.ts +0 -53
  111. package/src/installation.ts +0 -107
  112. package/src/logging/alerts.ts +0 -26
  113. package/src/logging/correlation/correlation.ts +0 -13
  114. package/src/logging/correlation/index.ts +0 -1
  115. package/src/logging/correlation/middleware.ts +0 -17
  116. package/src/logging/index.ts +0 -4
  117. package/src/logging/pino/logger.ts +0 -232
  118. package/src/logging/pino/middleware.ts +0 -45
  119. package/src/logging/system.ts +0 -81
  120. package/src/logging/tests/system.spec.ts +0 -61
  121. package/src/middleware/adminOnly.ts +0 -9
  122. package/src/middleware/auditLog.ts +0 -6
  123. package/src/middleware/authenticated.ts +0 -193
  124. package/src/middleware/builderOnly.ts +0 -20
  125. package/src/middleware/builderOrAdmin.ts +0 -20
  126. package/src/middleware/csrf.ts +0 -81
  127. package/src/middleware/errorHandling.ts +0 -29
  128. package/src/middleware/index.ts +0 -21
  129. package/src/middleware/internalApi.ts +0 -23
  130. package/src/middleware/joi-validator.ts +0 -45
  131. package/src/middleware/matchers.ts +0 -47
  132. package/src/middleware/passport/datasource/google.ts +0 -95
  133. package/src/middleware/passport/local.ts +0 -54
  134. package/src/middleware/passport/sso/google.ts +0 -77
  135. package/src/middleware/passport/sso/oidc.ts +0 -154
  136. package/src/middleware/passport/sso/sso.ts +0 -165
  137. package/src/middleware/passport/sso/tests/google.spec.ts +0 -67
  138. package/src/middleware/passport/sso/tests/oidc.spec.ts +0 -152
  139. package/src/middleware/passport/sso/tests/sso.spec.ts +0 -197
  140. package/src/middleware/passport/utils.ts +0 -38
  141. package/src/middleware/querystringToBody.ts +0 -28
  142. package/src/middleware/tenancy.ts +0 -36
  143. package/src/middleware/tests/builder.spec.ts +0 -180
  144. package/src/middleware/tests/matchers.spec.ts +0 -134
  145. package/src/migrations/definitions.ts +0 -40
  146. package/src/migrations/index.ts +0 -2
  147. package/src/migrations/migrations.ts +0 -191
  148. package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +0 -11
  149. package/src/migrations/tests/migrations.spec.ts +0 -64
  150. package/src/objectStore/buckets/app.ts +0 -40
  151. package/src/objectStore/buckets/global.ts +0 -29
  152. package/src/objectStore/buckets/index.ts +0 -3
  153. package/src/objectStore/buckets/plugins.ts +0 -71
  154. package/src/objectStore/buckets/tests/app.spec.ts +0 -171
  155. package/src/objectStore/buckets/tests/global.spec.ts +0 -74
  156. package/src/objectStore/buckets/tests/plugins.spec.ts +0 -111
  157. package/src/objectStore/cloudfront.ts +0 -41
  158. package/src/objectStore/index.ts +0 -3
  159. package/src/objectStore/objectStore.ts +0 -440
  160. package/src/objectStore/utils.ts +0 -27
  161. package/src/platform/index.ts +0 -3
  162. package/src/platform/platformDb.ts +0 -6
  163. package/src/platform/tenants.ts +0 -101
  164. package/src/platform/tests/tenants.spec.ts +0 -26
  165. package/src/platform/users.ts +0 -90
  166. package/src/plugin/index.ts +0 -1
  167. package/src/plugin/tests/validation.spec.ts +0 -83
  168. package/src/plugin/utils.ts +0 -156
  169. package/src/queue/constants.ts +0 -6
  170. package/src/queue/inMemoryQueue.ts +0 -141
  171. package/src/queue/index.ts +0 -2
  172. package/src/queue/listeners.ts +0 -195
  173. package/src/queue/queue.ts +0 -54
  174. package/src/redis/index.ts +0 -6
  175. package/src/redis/init.ts +0 -86
  176. package/src/redis/redis.ts +0 -308
  177. package/src/redis/redlockImpl.ts +0 -139
  178. package/src/redis/utils.ts +0 -117
  179. package/src/security/encryption.ts +0 -179
  180. package/src/security/permissions.ts +0 -159
  181. package/src/security/roles.ts +0 -420
  182. package/src/security/sessions.ts +0 -120
  183. package/src/security/tests/encryption.spec.ts +0 -31
  184. package/src/security/tests/permissions.spec.ts +0 -145
  185. package/src/security/tests/sessions.spec.ts +0 -12
  186. package/src/tenancy/db.ts +0 -6
  187. package/src/tenancy/index.ts +0 -2
  188. package/src/tenancy/tenancy.ts +0 -140
  189. package/src/tenancy/tests/tenancy.spec.ts +0 -184
  190. package/src/timers/index.ts +0 -1
  191. package/src/timers/timers.ts +0 -22
  192. package/src/users/db.ts +0 -460
  193. package/src/users/events.ts +0 -176
  194. package/src/users/index.ts +0 -4
  195. package/src/users/lookup.ts +0 -102
  196. package/src/users/users.ts +0 -276
  197. package/src/users/utils.ts +0 -55
  198. package/src/utils/hashing.ts +0 -14
  199. package/src/utils/index.ts +0 -3
  200. package/src/utils/stringUtils.ts +0 -8
  201. package/src/utils/tests/utils.spec.ts +0 -191
  202. package/src/utils/utils.ts +0 -239
  203. package/tests/core/logging.ts +0 -34
  204. package/tests/core/utilities/index.ts +0 -6
  205. package/tests/core/utilities/jestUtils.ts +0 -30
  206. package/tests/core/utilities/mocks/alerts.ts +0 -3
  207. package/tests/core/utilities/mocks/date.ts +0 -2
  208. package/tests/core/utilities/mocks/events.ts +0 -131
  209. package/tests/core/utilities/mocks/fetch.ts +0 -17
  210. package/tests/core/utilities/mocks/index.ts +0 -10
  211. package/tests/core/utilities/mocks/licenses.ts +0 -107
  212. package/tests/core/utilities/mocks/posthog.ts +0 -7
  213. package/tests/core/utilities/structures/Chance.ts +0 -20
  214. package/tests/core/utilities/structures/accounts.ts +0 -115
  215. package/tests/core/utilities/structures/apps.ts +0 -21
  216. package/tests/core/utilities/structures/common.ts +0 -7
  217. package/tests/core/utilities/structures/db.ts +0 -12
  218. package/tests/core/utilities/structures/documents/index.ts +0 -1
  219. package/tests/core/utilities/structures/documents/platform/index.ts +0 -1
  220. package/tests/core/utilities/structures/documents/platform/installation.ts +0 -12
  221. package/tests/core/utilities/structures/generator.ts +0 -2
  222. package/tests/core/utilities/structures/index.ts +0 -15
  223. package/tests/core/utilities/structures/koa.ts +0 -16
  224. package/tests/core/utilities/structures/licenses.ts +0 -167
  225. package/tests/core/utilities/structures/plugins.ts +0 -19
  226. package/tests/core/utilities/structures/quotas.ts +0 -67
  227. package/tests/core/utilities/structures/scim.ts +0 -80
  228. package/tests/core/utilities/structures/shared.ts +0 -19
  229. package/tests/core/utilities/structures/sso.ts +0 -119
  230. package/tests/core/utilities/structures/tenants.ts +0 -5
  231. package/tests/core/utilities/structures/userGroups.ts +0 -10
  232. package/tests/core/utilities/structures/users.ts +0 -73
  233. package/tests/core/utilities/testContainerUtils.ts +0 -98
  234. package/tests/core/utilities/utils/index.ts +0 -1
  235. package/tests/core/utilities/utils/time.ts +0 -3
  236. package/tests/extra/DBTestConfiguration.ts +0 -36
  237. package/tests/extra/index.ts +0 -2
  238. package/tests/extra/testEnv.ts +0 -95
  239. package/tests/index.ts +0 -1
  240. package/tests/jestEnv.ts +0 -6
  241. 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