@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,12 +0,0 @@
1
- import * as sessions from "../sessions"
2
-
3
- describe("sessions", () => {
4
- describe("getSessionsForUser", () => {
5
- it("returns empty when user is undefined", async () => {
6
- // @ts-ignore - allow the undefined to be passed
7
- const results = await sessions.getSessionsForUser(undefined)
8
-
9
- expect(results).toStrictEqual([])
10
- })
11
- })
12
- })
package/src/tenancy/db.ts DELETED
@@ -1,6 +0,0 @@
1
- import { getDB } from "../db/db"
2
- import { getGlobalDBName } from "../context"
3
-
4
- export function getTenantDB(tenantId: string) {
5
- return getDB(getGlobalDBName(tenantId))
6
- }
@@ -1,2 +0,0 @@
1
- export * from "./db"
2
- export * from "./tenancy"
@@ -1,140 +0,0 @@
1
- import {
2
- DEFAULT_TENANT_ID,
3
- getTenantId,
4
- getTenantIDFromAppID,
5
- isMultiTenant,
6
- getPlatformURL,
7
- } from "../context"
8
- import {
9
- BBContext,
10
- TenantResolutionStrategy,
11
- GetTenantIdOptions,
12
- } from "@budibase/types"
13
- import { Header } from "../constants"
14
-
15
- export function addTenantToUrl(url: string) {
16
- const tenantId = getTenantId()
17
-
18
- if (isMultiTenant()) {
19
- const char = url.indexOf("?") === -1 ? "?" : "&"
20
- url += `${char}tenantId=${tenantId}`
21
- }
22
-
23
- return url
24
- }
25
-
26
- export const isUserInAppTenant = (appId: string, user?: any) => {
27
- let userTenantId
28
- if (user) {
29
- userTenantId = user.tenantId || DEFAULT_TENANT_ID
30
- } else {
31
- userTenantId = getTenantId()
32
- }
33
- const tenantId = getTenantIDFromAppID(appId) || DEFAULT_TENANT_ID
34
- return tenantId === userTenantId
35
- }
36
-
37
- const ALL_STRATEGIES = Object.values(TenantResolutionStrategy)
38
-
39
- export const getTenantIDFromCtx = (
40
- ctx: BBContext,
41
- opts: GetTenantIdOptions
42
- ): string | null => {
43
- // exit early if not multi-tenant
44
- if (!isMultiTenant()) {
45
- return DEFAULT_TENANT_ID
46
- }
47
-
48
- // opt defaults
49
- if (opts.allowNoTenant === undefined) {
50
- opts.allowNoTenant = false
51
- }
52
- if (!opts.includeStrategies) {
53
- opts.includeStrategies = ALL_STRATEGIES
54
- }
55
- if (!opts.excludeStrategies) {
56
- opts.excludeStrategies = []
57
- }
58
-
59
- const isAllowed = (strategy: TenantResolutionStrategy) => {
60
- // excluded takes precedence
61
- if (opts.excludeStrategies?.includes(strategy)) {
62
- return false
63
- }
64
- if (opts.includeStrategies?.includes(strategy)) {
65
- return true
66
- }
67
- }
68
-
69
- // always use user first
70
- if (isAllowed(TenantResolutionStrategy.USER)) {
71
- const userTenantId = ctx.user?.tenantId
72
- if (userTenantId) {
73
- return userTenantId
74
- }
75
- }
76
-
77
- // header
78
- if (isAllowed(TenantResolutionStrategy.HEADER)) {
79
- const headerTenantId = ctx.request.headers[Header.TENANT_ID]
80
- if (headerTenantId) {
81
- return headerTenantId as string
82
- }
83
- }
84
-
85
- // query param
86
- if (isAllowed(TenantResolutionStrategy.QUERY)) {
87
- const queryTenantId = ctx.request.query.tenantId
88
- if (queryTenantId) {
89
- return queryTenantId as string
90
- }
91
- }
92
-
93
- // subdomain
94
- if (isAllowed(TenantResolutionStrategy.SUBDOMAIN)) {
95
- // e.g. budibase.app or local.com:10000
96
- const platformHost = new URL(getPlatformURL()).host.split(":")[0]
97
- // e.g. tenant.budibase.app or tenant.local.com
98
- const requestHost = ctx.host
99
- // parse the tenant id from the difference
100
- if (requestHost.includes(platformHost)) {
101
- const tenantId = requestHost.substring(
102
- 0,
103
- requestHost.indexOf(`.${platformHost}`)
104
- )
105
- if (tenantId) {
106
- return tenantId
107
- }
108
- }
109
- }
110
-
111
- // path
112
- if (isAllowed(TenantResolutionStrategy.PATH)) {
113
- // params - have to parse manually due to koa-router not run yet
114
- const match = ctx.matched.find(
115
- (m: any) => !!m.paramNames.find((p: any) => p.name === "tenantId")
116
- )
117
-
118
- // get the raw path url - without any query params
119
- const ctxUrl = ctx.originalUrl
120
- let url
121
- if (ctxUrl.includes("?")) {
122
- url = ctxUrl.split("?")[0]
123
- } else {
124
- url = ctxUrl
125
- }
126
-
127
- if (match) {
128
- const params = match.params(url, match.captures(url), {})
129
- if (params.tenantId) {
130
- return params.tenantId
131
- }
132
- }
133
- }
134
-
135
- if (!opts.allowNoTenant) {
136
- ctx.throw(403, "Tenant id not set")
137
- }
138
-
139
- return null
140
- }
@@ -1,184 +0,0 @@
1
- import { TenantResolutionStrategy } from "@budibase/types"
2
- import { addTenantToUrl, isUserInAppTenant, getTenantIDFromCtx } from "../"
3
- import { isMultiTenant, getTenantIDFromAppID } from "../../context"
4
-
5
- jest.mock("../../context", () => ({
6
- getTenantId: jest.fn(() => "budibase"),
7
- isMultiTenant: jest.fn(() => true),
8
- getTenantIDFromAppID: jest.fn(),
9
- getPlatformURL: jest.fn(() => "https://app.com"),
10
- DEFAULT_TENANT_ID: "default",
11
- }))
12
-
13
- const mockedIsMultiTenant = isMultiTenant as jest.MockedFunction<
14
- typeof isMultiTenant
15
- >
16
- const mockedGetTenantIDFromAppID = getTenantIDFromAppID as jest.MockedFunction<
17
- typeof getTenantIDFromAppID
18
- >
19
-
20
- describe("addTenantToUrl", () => {
21
- it("should append tenantId parameter to the URL", () => {
22
- const url = "https://budibase.com"
23
- const expectedUrl = "https://budibase.com?tenantId=budibase"
24
- expect(addTenantToUrl(url)).toEqual(expectedUrl)
25
- })
26
-
27
- it("should append tenantId parameter to the URL query string", () => {
28
- const url = "https://budibase.com?var=test"
29
- const expectedUrl = "https://budibase.com?var=test&tenantId=budibase"
30
- expect(addTenantToUrl(url)).toEqual(expectedUrl)
31
- })
32
-
33
- it("should not append tenantId parameter to the URL if isMultiTenant is false", () => {
34
- mockedIsMultiTenant.mockImplementation(() => false)
35
-
36
- const url = "https://budibase.com"
37
- const expectedUrl = "https://budibase.com"
38
- expect(addTenantToUrl(url)).toEqual(expectedUrl)
39
- })
40
- })
41
-
42
- describe("isUserInAppTenant", () => {
43
- mockedGetTenantIDFromAppID.mockImplementation(() => "budibase")
44
- const mockUser = { tenantId: "budibase" }
45
-
46
- it("returns true if user tenant ID matches app tenant ID", () => {
47
- const appId = "app-budibase"
48
- const result = isUserInAppTenant(appId, mockUser)
49
- expect(result).toBe(true)
50
- })
51
-
52
- it("uses default tenant ID if user is not provided", () => {
53
- const appId = "app-budibase"
54
- const result = isUserInAppTenant(appId)
55
- expect(result).toBe(true)
56
- })
57
-
58
- it("uses default tenant ID if app tenant ID is not found", () => {
59
- const appId = "not-budibase-app"
60
- const result = isUserInAppTenant(appId, mockUser)
61
- expect(result).toBe(true)
62
- })
63
-
64
- it("returns false if user tenant ID does not match app tenant ID", () => {
65
- const appId = "app-budibase"
66
- mockedGetTenantIDFromAppID.mockImplementation(() => "not-budibase")
67
- const result = isUserInAppTenant(appId, mockUser)
68
- expect(result).toBe(false)
69
- })
70
- })
71
-
72
- let mockOpts: any = {}
73
- function createCtx(opts: {
74
- originalUrl?: string
75
- headers?: Record<string, string>
76
- qsTenantId?: string
77
- userTenantId?: string
78
- host?: string
79
- path?: string
80
- }) {
81
- const createdCtx: any = {
82
- originalUrl: opts.originalUrl || "budibase.com",
83
- matched: [{ name: "name" }],
84
- throw: jest.fn(),
85
- request: { headers: {} },
86
- }
87
- if (opts.headers) {
88
- createdCtx.request.headers = opts.headers
89
- }
90
- if (opts.qsTenantId) {
91
- createdCtx.request.query = { tenantId: opts.qsTenantId }
92
- }
93
- if (opts.userTenantId) {
94
- createdCtx.user = { tenantId: opts.userTenantId }
95
- }
96
- if (opts.host) {
97
- createdCtx.host = opts.host
98
- }
99
- if (opts.path) {
100
- createdCtx.matched = [
101
- {
102
- paramNames: [{ name: "tenantId" }],
103
- params: () => ({ tenantId: opts.path }),
104
- captures: jest.fn(),
105
- },
106
- ]
107
- }
108
-
109
- return createdCtx as any
110
- }
111
-
112
- describe("getTenantIDFromCtx", () => {
113
- describe("when tenant can be found", () => {
114
- it("returns the tenant ID from the user object", () => {
115
- mockedIsMultiTenant.mockImplementation(() => true)
116
- const ctx = createCtx({ userTenantId: "budibase" })
117
- expect(getTenantIDFromCtx(ctx, mockOpts)).toEqual("budibase")
118
- })
119
-
120
- it("returns the tenant ID from the header", () => {
121
- mockedIsMultiTenant.mockImplementation(() => true)
122
- const ctx = createCtx({ headers: { "x-budibase-tenant-id": "budibase" } })
123
- mockOpts = { includeStrategies: [TenantResolutionStrategy.HEADER] }
124
- expect(getTenantIDFromCtx(ctx, mockOpts)).toEqual("budibase")
125
- })
126
-
127
- it("returns the tenant ID from the query param", () => {
128
- mockedIsMultiTenant.mockImplementation(() => true)
129
- mockOpts = { includeStrategies: [TenantResolutionStrategy.QUERY] }
130
- const ctx = createCtx({ qsTenantId: "budibase" })
131
- expect(getTenantIDFromCtx(ctx, mockOpts)).toEqual("budibase")
132
- })
133
-
134
- it("returns the tenant ID from the subdomain", () => {
135
- mockedIsMultiTenant.mockImplementation(() => true)
136
- const ctx = createCtx({ host: "bb.app.com" })
137
- mockOpts = { includeStrategies: [TenantResolutionStrategy.SUBDOMAIN] }
138
- expect(getTenantIDFromCtx(ctx, mockOpts)).toEqual("bb")
139
- })
140
-
141
- it("returns the tenant ID from the path", () => {
142
- mockedIsMultiTenant.mockImplementation(() => true)
143
- const ctx = createCtx({ path: "bb" })
144
- mockOpts = { includeStrategies: [TenantResolutionStrategy.PATH] }
145
- expect(getTenantIDFromCtx(ctx, mockOpts)).toEqual("bb")
146
- })
147
- })
148
-
149
- describe("when tenant cannot be found", () => {
150
- it("throws a 403 error if allowNoTenant is false", () => {
151
- const ctx = createCtx({})
152
- mockOpts = {
153
- allowNoTenant: false,
154
- excludeStrategies: [
155
- TenantResolutionStrategy.QUERY,
156
- TenantResolutionStrategy.SUBDOMAIN,
157
- TenantResolutionStrategy.PATH,
158
- ],
159
- }
160
- expect(getTenantIDFromCtx(ctx, mockOpts)).toBeNull()
161
- expect(ctx.throw).toBeCalledTimes(1)
162
- expect(ctx.throw).toBeCalledWith(403, "Tenant id not set")
163
- })
164
-
165
- it("returns null if allowNoTenant is true", () => {
166
- const ctx = createCtx({})
167
- mockOpts = {
168
- allowNoTenant: true,
169
- excludeStrategies: [
170
- TenantResolutionStrategy.QUERY,
171
- TenantResolutionStrategy.SUBDOMAIN,
172
- TenantResolutionStrategy.PATH,
173
- ],
174
- }
175
- expect(getTenantIDFromCtx(ctx, mockOpts)).toBeNull()
176
- })
177
- })
178
-
179
- it("returns the default tenant ID when isMultiTenant() returns false", () => {
180
- mockedIsMultiTenant.mockImplementation(() => false)
181
- const ctx = createCtx({})
182
- expect(getTenantIDFromCtx(ctx, mockOpts)).toEqual("default")
183
- })
184
- })
@@ -1 +0,0 @@
1
- export * from "./timers"
@@ -1,22 +0,0 @@
1
- let intervals: NodeJS.Timeout[] = []
2
-
3
- export function set(callback: () => any, period: number) {
4
- const interval = setInterval(callback, period)
5
- intervals.push(interval)
6
- return interval
7
- }
8
-
9
- export function clear(interval: NodeJS.Timeout) {
10
- const idx = intervals.indexOf(interval)
11
- if (idx !== -1) {
12
- intervals.splice(idx, 1)
13
- }
14
- clearInterval(interval)
15
- }
16
-
17
- export function cleanup() {
18
- for (let interval of intervals) {
19
- clearInterval(interval)
20
- }
21
- intervals = []
22
- }