@budibase/backend-core 2.9.40-alpha.6 → 2.10.1

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 (252) hide show
  1. package/dist/index.js +5 -4
  2. package/dist/index.js.map +2 -2
  3. package/dist/index.js.meta.json +1 -1
  4. package/dist/package.json +6 -6
  5. package/dist/src/cache/appMetadata.js +1 -1
  6. package/dist/src/cache/appMetadata.js.map +1 -1
  7. package/dist/src/constants/misc.d.ts +0 -2
  8. package/dist/src/constants/misc.js +0 -2
  9. package/dist/src/constants/misc.js.map +1 -1
  10. package/dist/src/environment.js +5 -4
  11. package/dist/src/environment.js.map +1 -1
  12. package/dist/src/logging/system.d.ts +1 -1
  13. package/dist/src/timers/timers.d.ts +1 -1
  14. package/package.json +6 -6
  15. package/src/accounts/accounts.ts +82 -0
  16. package/src/accounts/api.ts +59 -0
  17. package/src/accounts/index.ts +1 -0
  18. package/src/auth/auth.ts +208 -0
  19. package/src/auth/index.ts +1 -0
  20. package/src/auth/tests/auth.spec.ts +14 -0
  21. package/src/blacklist/blacklist.ts +54 -0
  22. package/src/blacklist/index.ts +1 -0
  23. package/src/blacklist/tests/blacklist.spec.ts +46 -0
  24. package/src/cache/appMetadata.ts +88 -0
  25. package/src/cache/base/index.ts +92 -0
  26. package/src/cache/generic.ts +30 -0
  27. package/src/cache/index.ts +5 -0
  28. package/src/cache/tests/writethrough.spec.ts +138 -0
  29. package/src/cache/user.ts +83 -0
  30. package/src/cache/writethrough.ts +133 -0
  31. package/src/configs/configs.ts +257 -0
  32. package/src/configs/index.ts +1 -0
  33. package/src/configs/tests/configs.spec.ts +184 -0
  34. package/src/constants/db.ts +63 -0
  35. package/src/constants/index.ts +2 -0
  36. package/src/constants/misc.ts +50 -0
  37. package/src/context/Context.ts +14 -0
  38. package/src/context/identity.ts +58 -0
  39. package/src/context/index.ts +3 -0
  40. package/src/context/mainContext.ts +310 -0
  41. package/src/context/tests/index.spec.ts +147 -0
  42. package/src/context/types.ts +11 -0
  43. package/src/db/Replication.ts +84 -0
  44. package/src/db/constants.ts +10 -0
  45. package/src/db/couch/DatabaseImpl.ts +238 -0
  46. package/src/db/couch/connections.ts +77 -0
  47. package/src/db/couch/index.ts +5 -0
  48. package/src/db/couch/pouchDB.ts +97 -0
  49. package/src/db/couch/pouchDump.ts +0 -0
  50. package/src/db/couch/utils.ts +50 -0
  51. package/src/db/db.ts +43 -0
  52. package/src/db/errors.ts +14 -0
  53. package/src/db/index.ts +12 -0
  54. package/src/db/lucene.ts +750 -0
  55. package/src/db/searchIndexes/index.ts +1 -0
  56. package/src/db/searchIndexes/searchIndexes.ts +62 -0
  57. package/src/db/tests/index.spec.js +25 -0
  58. package/src/db/tests/lucene.spec.ts +368 -0
  59. package/src/db/tests/pouch.spec.js +62 -0
  60. package/src/db/tests/utils.spec.ts +63 -0
  61. package/src/db/utils.ts +207 -0
  62. package/src/db/views.ts +241 -0
  63. package/src/docIds/conversions.ts +59 -0
  64. package/src/docIds/ids.ts +113 -0
  65. package/src/docIds/index.ts +2 -0
  66. package/src/docIds/newid.ts +5 -0
  67. package/src/docIds/params.ts +174 -0
  68. package/src/docUpdates/index.ts +29 -0
  69. package/src/environment.ts +201 -0
  70. package/src/errors/errors.ts +119 -0
  71. package/src/errors/index.ts +1 -0
  72. package/src/events/analytics.ts +6 -0
  73. package/src/events/asyncEvents/index.ts +2 -0
  74. package/src/events/asyncEvents/publisher.ts +12 -0
  75. package/src/events/asyncEvents/queue.ts +22 -0
  76. package/src/events/backfill.ts +183 -0
  77. package/src/events/documentId.ts +56 -0
  78. package/src/events/events.ts +40 -0
  79. package/src/events/identification.ts +310 -0
  80. package/src/events/index.ts +14 -0
  81. package/src/events/processors/AnalyticsProcessor.ts +64 -0
  82. package/src/events/processors/AuditLogsProcessor.ts +93 -0
  83. package/src/events/processors/LoggingProcessor.ts +37 -0
  84. package/src/events/processors/Processors.ts +52 -0
  85. package/src/events/processors/async/DocumentUpdateProcessor.ts +43 -0
  86. package/src/events/processors/index.ts +19 -0
  87. package/src/events/processors/posthog/PosthogProcessor.ts +118 -0
  88. package/src/events/processors/posthog/index.ts +2 -0
  89. package/src/events/processors/posthog/rateLimiting.ts +106 -0
  90. package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +168 -0
  91. package/src/events/processors/types.ts +1 -0
  92. package/src/events/publishers/account.ts +35 -0
  93. package/src/events/publishers/app.ts +155 -0
  94. package/src/events/publishers/auditLog.ts +26 -0
  95. package/src/events/publishers/auth.ts +73 -0
  96. package/src/events/publishers/automation.ts +110 -0
  97. package/src/events/publishers/backfill.ts +74 -0
  98. package/src/events/publishers/backup.ts +42 -0
  99. package/src/events/publishers/datasource.ts +48 -0
  100. package/src/events/publishers/email.ts +17 -0
  101. package/src/events/publishers/environmentVariable.ts +38 -0
  102. package/src/events/publishers/group.ts +99 -0
  103. package/src/events/publishers/index.ts +24 -0
  104. package/src/events/publishers/installation.ts +38 -0
  105. package/src/events/publishers/layout.ts +26 -0
  106. package/src/events/publishers/license.ts +84 -0
  107. package/src/events/publishers/org.ts +37 -0
  108. package/src/events/publishers/plugin.ts +47 -0
  109. package/src/events/publishers/query.ts +88 -0
  110. package/src/events/publishers/role.ts +62 -0
  111. package/src/events/publishers/rows.ts +29 -0
  112. package/src/events/publishers/screen.ts +36 -0
  113. package/src/events/publishers/serve.ts +43 -0
  114. package/src/events/publishers/table.ts +70 -0
  115. package/src/events/publishers/user.ts +202 -0
  116. package/src/events/publishers/view.ts +107 -0
  117. package/src/features/index.ts +78 -0
  118. package/src/features/installation.ts +17 -0
  119. package/src/features/tests/featureFlags.spec.ts +85 -0
  120. package/src/helpers.ts +9 -0
  121. package/src/index.ts +54 -0
  122. package/src/installation.ts +107 -0
  123. package/src/logging/alerts.ts +26 -0
  124. package/src/logging/correlation/correlation.ts +13 -0
  125. package/src/logging/correlation/index.ts +1 -0
  126. package/src/logging/correlation/middleware.ts +17 -0
  127. package/src/logging/index.ts +4 -0
  128. package/src/logging/pino/logger.ts +232 -0
  129. package/src/logging/pino/middleware.ts +45 -0
  130. package/src/logging/system.ts +81 -0
  131. package/src/logging/tests/system.spec.ts +61 -0
  132. package/src/middleware/adminOnly.ts +9 -0
  133. package/src/middleware/auditLog.ts +6 -0
  134. package/src/middleware/authenticated.ts +193 -0
  135. package/src/middleware/builderOnly.ts +21 -0
  136. package/src/middleware/builderOrAdmin.ts +21 -0
  137. package/src/middleware/csrf.ts +81 -0
  138. package/src/middleware/errorHandling.ts +29 -0
  139. package/src/middleware/index.ts +21 -0
  140. package/src/middleware/internalApi.ts +23 -0
  141. package/src/middleware/joi-validator.ts +45 -0
  142. package/src/middleware/matchers.ts +47 -0
  143. package/src/middleware/passport/datasource/google.ts +95 -0
  144. package/src/middleware/passport/local.ts +54 -0
  145. package/src/middleware/passport/sso/google.ts +77 -0
  146. package/src/middleware/passport/sso/oidc.ts +154 -0
  147. package/src/middleware/passport/sso/sso.ts +165 -0
  148. package/src/middleware/passport/sso/tests/google.spec.ts +67 -0
  149. package/src/middleware/passport/sso/tests/oidc.spec.ts +152 -0
  150. package/src/middleware/passport/sso/tests/sso.spec.ts +197 -0
  151. package/src/middleware/passport/utils.ts +38 -0
  152. package/src/middleware/querystringToBody.ts +28 -0
  153. package/src/middleware/tenancy.ts +36 -0
  154. package/src/middleware/tests/builder.spec.ts +180 -0
  155. package/src/middleware/tests/matchers.spec.ts +134 -0
  156. package/src/migrations/definitions.ts +40 -0
  157. package/src/migrations/index.ts +2 -0
  158. package/src/migrations/migrations.ts +191 -0
  159. package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +11 -0
  160. package/src/migrations/tests/migrations.spec.ts +64 -0
  161. package/src/objectStore/buckets/app.ts +40 -0
  162. package/src/objectStore/buckets/global.ts +29 -0
  163. package/src/objectStore/buckets/index.ts +3 -0
  164. package/src/objectStore/buckets/plugins.ts +71 -0
  165. package/src/objectStore/buckets/tests/app.spec.ts +171 -0
  166. package/src/objectStore/buckets/tests/global.spec.ts +74 -0
  167. package/src/objectStore/buckets/tests/plugins.spec.ts +111 -0
  168. package/src/objectStore/cloudfront.ts +41 -0
  169. package/src/objectStore/index.ts +3 -0
  170. package/src/objectStore/objectStore.ts +440 -0
  171. package/src/objectStore/utils.ts +27 -0
  172. package/src/platform/index.ts +3 -0
  173. package/src/platform/platformDb.ts +6 -0
  174. package/src/platform/tenants.ts +101 -0
  175. package/src/platform/tests/tenants.spec.ts +26 -0
  176. package/src/platform/users.ts +90 -0
  177. package/src/plugin/index.ts +1 -0
  178. package/src/plugin/tests/validation.spec.ts +83 -0
  179. package/src/plugin/utils.ts +156 -0
  180. package/src/queue/constants.ts +6 -0
  181. package/src/queue/inMemoryQueue.ts +141 -0
  182. package/src/queue/index.ts +2 -0
  183. package/src/queue/listeners.ts +195 -0
  184. package/src/queue/queue.ts +54 -0
  185. package/src/redis/index.ts +6 -0
  186. package/src/redis/init.ts +86 -0
  187. package/src/redis/redis.ts +308 -0
  188. package/src/redis/redlockImpl.ts +139 -0
  189. package/src/redis/utils.ts +117 -0
  190. package/src/security/encryption.ts +179 -0
  191. package/src/security/permissions.ts +158 -0
  192. package/src/security/roles.ts +389 -0
  193. package/src/security/sessions.ts +120 -0
  194. package/src/security/tests/encryption.spec.ts +31 -0
  195. package/src/security/tests/permissions.spec.ts +145 -0
  196. package/src/security/tests/sessions.spec.ts +12 -0
  197. package/src/tenancy/db.ts +6 -0
  198. package/src/tenancy/index.ts +2 -0
  199. package/src/tenancy/tenancy.ts +140 -0
  200. package/src/tenancy/tests/tenancy.spec.ts +184 -0
  201. package/src/timers/index.ts +1 -0
  202. package/src/timers/timers.ts +22 -0
  203. package/src/users/db.ts +484 -0
  204. package/src/users/events.ts +176 -0
  205. package/src/users/index.ts +4 -0
  206. package/src/users/lookup.ts +102 -0
  207. package/src/users/users.ts +276 -0
  208. package/src/users/utils.ts +55 -0
  209. package/src/utils/hashing.ts +14 -0
  210. package/src/utils/index.ts +3 -0
  211. package/src/utils/stringUtils.ts +8 -0
  212. package/src/utils/tests/utils.spec.ts +191 -0
  213. package/src/utils/utils.ts +239 -0
  214. package/tests/core/logging.ts +34 -0
  215. package/tests/core/utilities/index.ts +6 -0
  216. package/tests/core/utilities/jestUtils.ts +30 -0
  217. package/tests/core/utilities/mocks/alerts.ts +3 -0
  218. package/tests/core/utilities/mocks/date.ts +2 -0
  219. package/tests/core/utilities/mocks/events.ts +131 -0
  220. package/tests/core/utilities/mocks/fetch.ts +17 -0
  221. package/tests/core/utilities/mocks/index.ts +10 -0
  222. package/tests/core/utilities/mocks/licenses.ts +115 -0
  223. package/tests/core/utilities/mocks/posthog.ts +7 -0
  224. package/tests/core/utilities/structures/Chance.ts +20 -0
  225. package/tests/core/utilities/structures/accounts.ts +115 -0
  226. package/tests/core/utilities/structures/apps.ts +21 -0
  227. package/tests/core/utilities/structures/common.ts +7 -0
  228. package/tests/core/utilities/structures/db.ts +12 -0
  229. package/tests/core/utilities/structures/documents/index.ts +1 -0
  230. package/tests/core/utilities/structures/documents/platform/index.ts +1 -0
  231. package/tests/core/utilities/structures/documents/platform/installation.ts +12 -0
  232. package/tests/core/utilities/structures/generator.ts +2 -0
  233. package/tests/core/utilities/structures/index.ts +15 -0
  234. package/tests/core/utilities/structures/koa.ts +16 -0
  235. package/tests/core/utilities/structures/licenses.ts +167 -0
  236. package/tests/core/utilities/structures/plugins.ts +19 -0
  237. package/tests/core/utilities/structures/quotas.ts +67 -0
  238. package/tests/core/utilities/structures/scim.ts +80 -0
  239. package/tests/core/utilities/structures/shared.ts +19 -0
  240. package/tests/core/utilities/structures/sso.ts +119 -0
  241. package/tests/core/utilities/structures/tenants.ts +5 -0
  242. package/tests/core/utilities/structures/userGroups.ts +10 -0
  243. package/tests/core/utilities/structures/users.ts +73 -0
  244. package/tests/core/utilities/testContainerUtils.ts +85 -0
  245. package/tests/core/utilities/utils/index.ts +1 -0
  246. package/tests/core/utilities/utils/time.ts +3 -0
  247. package/tests/extra/DBTestConfiguration.ts +36 -0
  248. package/tests/extra/index.ts +2 -0
  249. package/tests/extra/testEnv.ts +95 -0
  250. package/tests/index.ts +1 -0
  251. package/tests/jestEnv.ts +6 -0
  252. package/tests/jestSetup.ts +28 -0
@@ -0,0 +1,10 @@
1
+ import { UserGroup } from "@budibase/types"
2
+ import { generator } from "./generator"
3
+
4
+ export function userGroup(): UserGroup {
5
+ return {
6
+ name: generator.word(),
7
+ icon: generator.word(),
8
+ color: generator.word(),
9
+ }
10
+ }
@@ -0,0 +1,73 @@
1
+ import {
2
+ AdminUser,
3
+ AdminOnlyUser,
4
+ BuilderUser,
5
+ SSOAuthDetails,
6
+ SSOUser,
7
+ } from "@budibase/types"
8
+ import { user } from "./shared"
9
+ import { authDetails } from "./sso"
10
+
11
+ export { user, newEmail } from "./shared"
12
+
13
+ export const adminUser = (userProps?: any): AdminUser => {
14
+ return {
15
+ ...user(userProps),
16
+ admin: {
17
+ global: true,
18
+ },
19
+ builder: {
20
+ global: true,
21
+ },
22
+ }
23
+ }
24
+
25
+ export const adminOnlyUser = (userProps?: any): AdminOnlyUser => {
26
+ return {
27
+ ...user(userProps),
28
+ admin: {
29
+ global: true,
30
+ },
31
+ }
32
+ }
33
+
34
+ export const builderUser = (userProps?: any): BuilderUser => {
35
+ return {
36
+ ...user(userProps),
37
+ builder: {
38
+ global: true,
39
+ },
40
+ }
41
+ }
42
+
43
+ export const appBuilderUser = (appId: string, userProps?: any): BuilderUser => {
44
+ return {
45
+ ...user(userProps),
46
+ builder: {
47
+ apps: [appId],
48
+ },
49
+ }
50
+ }
51
+
52
+ export function ssoUser(
53
+ opts: { user?: any; details?: SSOAuthDetails } = {}
54
+ ): SSOUser {
55
+ const base = user(opts.user)
56
+ delete base.password
57
+
58
+ if (!opts.details) {
59
+ opts.details = authDetails(base)
60
+ }
61
+
62
+ return {
63
+ ...base,
64
+ forceResetPassword: false,
65
+ oauth2: opts.details?.oauth2,
66
+ provider: opts.details?.provider!,
67
+ providerType: opts.details?.providerType!,
68
+ thirdPartyProfile: {
69
+ email: base.email,
70
+ picture: base.pictureUrl,
71
+ },
72
+ }
73
+ }
@@ -0,0 +1,85 @@
1
+ import { execSync } from "child_process"
2
+
3
+ let dockerPsResult: string | undefined
4
+
5
+ function formatDockerPsResult(serverName: string, port: number) {
6
+ const lines = dockerPsResult?.split("\n")
7
+ let first = true
8
+ if (!lines) {
9
+ return null
10
+ }
11
+ for (let line of lines) {
12
+ if (first) {
13
+ first = false
14
+ continue
15
+ }
16
+ let toLookFor = serverName.split("-service")[0]
17
+ if (!line.includes(toLookFor)) {
18
+ continue
19
+ }
20
+ const regex = new RegExp(`0.0.0.0:([0-9]*)->${port}`, "g")
21
+ const found = line.match(regex)
22
+ if (found) {
23
+ return found[0].split(":")[1].split("->")[0]
24
+ }
25
+ }
26
+ return null
27
+ }
28
+
29
+ function getTestContainerSettings(
30
+ serverName: string,
31
+ key: string
32
+ ): string | null {
33
+ const entry = Object.entries(global).find(
34
+ ([k]) =>
35
+ k.includes(`${serverName.toUpperCase()}`) &&
36
+ k.includes(`${key.toUpperCase()}`)
37
+ )
38
+ if (!entry) {
39
+ return null
40
+ }
41
+ return entry[1]
42
+ }
43
+
44
+ function getContainerInfo(containerName: string, port: number) {
45
+ let assignedPort = getTestContainerSettings(
46
+ containerName.toUpperCase(),
47
+ `PORT_${port}`
48
+ )
49
+ if (!dockerPsResult) {
50
+ try {
51
+ const outputBuffer = execSync("docker ps")
52
+ dockerPsResult = outputBuffer.toString("utf8")
53
+ } catch (err) {
54
+ //no-op
55
+ }
56
+ }
57
+ const possiblePort = formatDockerPsResult(containerName, port)
58
+ if (possiblePort) {
59
+ assignedPort = possiblePort
60
+ }
61
+ const host = getTestContainerSettings(containerName.toUpperCase(), "IP")
62
+ return {
63
+ port: assignedPort,
64
+ host,
65
+ url: host && assignedPort && `http://${host}:${assignedPort}`,
66
+ }
67
+ }
68
+
69
+ function getCouchConfig() {
70
+ return getContainerInfo("couchdb", 5984)
71
+ }
72
+
73
+ export function setupEnv(...envs: any[]) {
74
+ const couch = getCouchConfig()
75
+ const configs = [
76
+ { key: "COUCH_DB_PORT", value: couch.port },
77
+ { key: "COUCH_DB_URL", value: couch.url },
78
+ ]
79
+
80
+ for (const config of configs.filter(x => !!x.value)) {
81
+ for (const env of envs) {
82
+ env._set(config.key, config.value)
83
+ }
84
+ }
85
+ }
@@ -0,0 +1 @@
1
+ export * as time from "./time"
@@ -0,0 +1,3 @@
1
+ export function addDaysToDate(date: Date, days: number) {
2
+ return new Date(date.getTime() + days * 24 * 60 * 60 * 1000)
3
+ }
@@ -0,0 +1,36 @@
1
+ import "../core/utilities/mocks"
2
+ import * as structures from "../core/utilities/structures"
3
+ import * as testEnv from "./testEnv"
4
+ import * as context from "../../src/context"
5
+
6
+ class DBTestConfiguration {
7
+ tenantId: string
8
+
9
+ constructor() {
10
+ // db tests need to be multi tenant to prevent conflicts
11
+ testEnv.multiTenant()
12
+ this.tenantId = structures.tenant.id()
13
+ }
14
+
15
+ newTenant() {
16
+ this.tenantId = structures.tenant.id()
17
+ }
18
+
19
+ // TENANCY
20
+
21
+ doInTenant(task: any) {
22
+ return context.doInTenant(this.tenantId, () => {
23
+ return task()
24
+ })
25
+ }
26
+
27
+ getTenantId() {
28
+ try {
29
+ return context.getTenantId()
30
+ } catch (e) {
31
+ return this.tenantId!
32
+ }
33
+ }
34
+ }
35
+
36
+ export default DBTestConfiguration
@@ -0,0 +1,2 @@
1
+ export * as testEnv from "./testEnv"
2
+ export { default as DBTestConfiguration } from "./DBTestConfiguration"
@@ -0,0 +1,95 @@
1
+ import env from "../../src/environment"
2
+ import * as context from "../../src/context"
3
+ import * as structures from "../core/utilities/structures"
4
+
5
+ // TENANCY
6
+
7
+ export async function withTenant(task: (tenantId: string) => any) {
8
+ const tenantId = structures.tenant.id()
9
+ return context.doInTenant(tenantId, async () => {
10
+ await task(tenantId)
11
+ })
12
+ }
13
+
14
+ export function singleTenant() {
15
+ env._set("MULTI_TENANCY", 0)
16
+ }
17
+
18
+ export function multiTenant() {
19
+ env._set("MULTI_TENANCY", 1)
20
+ }
21
+
22
+ export function selfHosted() {
23
+ env._set("SELF_HOSTED", 1)
24
+ }
25
+
26
+ export function cloudHosted() {
27
+ env._set("SELF_HOSTED", 0)
28
+ }
29
+
30
+ // NODE
31
+
32
+ export function nodeDev() {
33
+ env._set("NODE_ENV", "dev")
34
+ }
35
+
36
+ export function nodeJest() {
37
+ env._set("NODE_ENV", "jest")
38
+ }
39
+
40
+ // FILES
41
+
42
+ export function withS3() {
43
+ env._set("NODE_ENV", "production")
44
+ env._set("MINIO_ENABLED", 0)
45
+ env._set("MINIO_URL", "http://s3.example.com")
46
+ env._set("CLOUDFRONT_CDN", undefined)
47
+ }
48
+
49
+ const CLOUDFRONT_TEST_KEY =
50
+ "-----BEGIN RSA PRIVATE KEY-----\n" +
51
+ "MIIEpAIBAAKCAQEAqXRsir/0Qba1xEnybUs7d7QEAE02GRc+4H7HD5l5VnAxkV1m\n" +
52
+ "tNTXTmoYkaIhLdebV1EwQs3T9knxoyd4cVcrDkDfDLZErfYWJsuE3/QYNknnZs4/\n" +
53
+ "Ai0cg+v9ZX3gcizvpYg9GQI3INM0uRG8lJwGP7FQ/kknhA2yVFVCSxX6kkNtOUh5\n" +
54
+ "dKSG7m6IwswcSwD++Z/94vsFkoZIGY0e1CD/drFJ6+1TFY2YgbDKT5wDFLJ9vHFx\n" +
55
+ "/5o4POwn3gz/ru2Db9jbRdfEAqRdy46nRKQgBGUmupAgSK1+BJEzafexp8RmCGb0\n" +
56
+ "WUffxOtj8/jNCeCF0JBgVHAe3crOQ8ySrtoaHQIDAQABAoIBAA+ipW07/u6dTDI7\n" +
57
+ "XHoHKgqGeqQIe8he47dVG0ruL0rxeTFfe92NkfwzP+cYHZWcQkIRRLG1Six8cCZM\n" +
58
+ "uwlCML/U7n++xaGDhlG4D5+WZzGDKi3LM/cgcHQfrzbRIYeHa+lLI9AN60ZFFqVI\n" +
59
+ "5KyVpOH1m3KLD3FYzi6H22EQOxmJpqWlt2uArny5LxlPJKmmGSFjvneb4N2ZAKGQ\n" +
60
+ "QfClJGz9tRjceWUUdJrpqmTmBQIosKmLPq8PEviUNAVG+6m4r8jiRbf8OKkAm+3L\n" +
61
+ "LVIsN8HfYB9jEuERYPnbuXdX0kDEkg0xEyTH5YbNZvfm5ptCU9Xn+Jz1trF+wCHD\n" +
62
+ "2RlxdQUCgYEA3U0nCf6NTmmeMCsAX6gvaPuM0iUfUfS3b3G57I6u46lLGNLsfJw6\n" +
63
+ "MTpVc164lKYQK9czw/ijKzb8e3mcyzbPorVkajMjUCNWGrMK+vFbOGmqQkhUi30U\n" +
64
+ "IJuuTktMd+21D/SpLlev4MLria23vUIKEqNenYpV6wkGLt/mKtISaPMCgYEAxAYx\n" +
65
+ "j+xJLTK9eN+rpekwjYE78hD9VoBkBnr/NBiGV302AsJRuq2+L4zcBnAsH+SidFim\n" +
66
+ "cwqoj3jeVT8ZQFXlK3fGVaEJsCXd6GWk8ZIWUTn9JZwi2KcCvCU/YiHfx8c7y7Gl\n" +
67
+ "SiPXUPsvvkcw6RRh2u4J5tHLIqJe3W58ENoBNK8CgYEApxTBDMKrXTBQxn0w4wfQ\n" +
68
+ "A6soPuDYLMBeXj226eswD6KZmDxnYA1zwgcQzPIO2ewm+XKZGrR2PQJezbqbrrHL\n" +
69
+ "QkVBcwz49GA5eh8Dg0MGZCki6rhBXK8qqxPfHi2rpkBKG6nUsbBykXeY7XHC75kU\n" +
70
+ "kc3WeYsgIzvE908EMAA69hECgYEAinbpiYVZh1DBH+G26MIYZswz4OB5YyHcBevZ\n" +
71
+ "2x27v48VmMtUWe4iWopAXVfdA0ZILrD0Gm0b9gRl4IdqudQyxgqcEZ5oLoIBBwjN\n" +
72
+ "g0oy83tnwqpQvwLx3p7c79+HqCGmrlK0s/MvQ+e6qMi21t1r5e6hFed5euSA6B8E\n" +
73
+ "Cg9ELMcCgYB9bGwlNAE+iuzMIhKev1s7h3TzqKtGw37TtHXvxcTQs3uawJQksQ2s\n" +
74
+ "K0Zy1Ta7vybbwAA5m+LxoMT04WUdJO7Cr8/3rBMrbKKO3H7IgC3G+nXnOBdshzn5\n" +
75
+ "ifMbhZslFThC/osD5ZV7snXZgTWyPexaINJhHmdrAWpmW1h+UFoiMw==\n" +
76
+ "-----END RSA PRIVATE KEY-----\n"
77
+
78
+ const CLOUDFRONT_TEST_KEY_64 = Buffer.from(
79
+ CLOUDFRONT_TEST_KEY,
80
+ "utf-8"
81
+ ).toString("base64")
82
+
83
+ export function withCloudfront() {
84
+ withS3()
85
+ env._set("CLOUDFRONT_CDN", "http://cf.example.com")
86
+ env._set("CLOUDFRONT_PUBLIC_KEY_ID", "keypair_123")
87
+ env._set("CLOUDFRONT_PRIVATE_KEY_64", CLOUDFRONT_TEST_KEY_64)
88
+ }
89
+
90
+ export function withMinio() {
91
+ env._set("NODE_ENV", "production")
92
+ env._set("MINIO_ENABLED", 1)
93
+ env._set("MINIO_URL", "http://minio.example.com")
94
+ env._set("CLOUDFRONT_CDN", undefined)
95
+ }
package/tests/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./core/utilities"
@@ -0,0 +1,6 @@
1
+ process.env.SELF_HOSTED = "1"
2
+ process.env.MULTI_TENANCY = "1"
3
+ process.env.NODE_ENV = "jest"
4
+ process.env.MOCK_REDIS = "1"
5
+ process.env.LOG_LEVEL = process.env.LOG_LEVEL || "error"
6
+ process.env.REDIS_PASSWORD = "budibase"
@@ -0,0 +1,28 @@
1
+ import "./core/logging"
2
+ import env from "../src/environment"
3
+ import { cleanup } from "../src/timers"
4
+ import { mocks, testContainerUtils } from "./core/utilities"
5
+
6
+ // must explicitly enable fetch mock
7
+ mocks.fetch.enable()
8
+
9
+ // mock all dates to 2020-01-01T00:00:00.000Z
10
+ // use tk.reset() to use real dates in individual tests
11
+ import tk from "timekeeper"
12
+ tk.freeze(mocks.date.MOCK_DATE)
13
+
14
+ if (!process.env.DEBUG) {
15
+ console.log = jest.fn() // console.log are ignored in tests
16
+ }
17
+
18
+ if (!process.env.CI) {
19
+ // set a longer timeout in dev for debugging
20
+ // 100 seconds
21
+ jest.setTimeout(100000)
22
+ }
23
+
24
+ testContainerUtils.setupEnv(env)
25
+
26
+ afterAll(() => {
27
+ cleanup()
28
+ })