@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,184 +0,0 @@
1
- import { generator, structures } from "../../../tests"
2
- import { DBTestConfiguration, testEnv } from "../../../tests/extra"
3
- import { ConfigType } from "@budibase/types"
4
- import env from "../../environment"
5
- import * as configs from "../configs"
6
-
7
- const DEFAULT_URL = "http://localhost:10000"
8
- const ENV_URL = "http://env.com"
9
-
10
- describe("configs", () => {
11
- const config = new DBTestConfiguration()
12
-
13
- const setDbPlatformUrl = async (dbUrl: string) => {
14
- const settingsConfig = {
15
- _id: configs.generateConfigID(ConfigType.SETTINGS),
16
- type: ConfigType.SETTINGS,
17
- config: {
18
- platformUrl: dbUrl,
19
- },
20
- }
21
- await configs.save(settingsConfig)
22
- }
23
-
24
- beforeEach(async () => {
25
- config.newTenant()
26
- })
27
-
28
- describe("getPlatformUrl", () => {
29
- describe("self host", () => {
30
- beforeEach(async () => {
31
- testEnv.selfHosted()
32
- })
33
-
34
- it("gets the default url", async () => {
35
- await config.doInTenant(async () => {
36
- const url = await configs.getPlatformUrl()
37
- expect(url).toBe(DEFAULT_URL)
38
- })
39
- })
40
-
41
- it("gets the platform url from the environment", async () => {
42
- await config.doInTenant(async () => {
43
- env._set("PLATFORM_URL", ENV_URL)
44
- const url = await configs.getPlatformUrl()
45
- expect(url).toBe(ENV_URL)
46
- })
47
- })
48
-
49
- it("gets the platform url from the database", async () => {
50
- await config.doInTenant(async () => {
51
- const dbUrl = generator.url()
52
- await setDbPlatformUrl(dbUrl)
53
- const url = await configs.getPlatformUrl()
54
- expect(url).toBe(dbUrl)
55
- })
56
- })
57
- })
58
-
59
- describe("cloud", () => {
60
- function getTenantAwareUrl() {
61
- return `http://${config.tenantId}.env.com`
62
- }
63
-
64
- beforeEach(async () => {
65
- testEnv.cloudHosted()
66
- testEnv.multiTenant()
67
-
68
- env._set("PLATFORM_URL", ENV_URL)
69
- })
70
-
71
- it("gets the platform url from the environment without tenancy", async () => {
72
- await config.doInTenant(async () => {
73
- const url = await configs.getPlatformUrl({ tenantAware: false })
74
- expect(url).toBe(ENV_URL)
75
- })
76
- })
77
-
78
- it("gets the platform url from the environment with tenancy", async () => {
79
- await config.doInTenant(async () => {
80
- const url = await configs.getPlatformUrl()
81
- expect(url).toBe(getTenantAwareUrl())
82
- })
83
- })
84
-
85
- it("never gets the platform url from the database", async () => {
86
- await config.doInTenant(async () => {
87
- await setDbPlatformUrl(generator.url())
88
- const url = await configs.getPlatformUrl()
89
- expect(url).toBe(getTenantAwareUrl())
90
- })
91
- })
92
- })
93
- })
94
-
95
- describe("getSettingsConfig", () => {
96
- beforeAll(async () => {
97
- testEnv.selfHosted()
98
- env._set("PLATFORM_URL", "")
99
- })
100
-
101
- it("returns the platform url with an existing config", async () => {
102
- await config.doInTenant(async () => {
103
- const dbUrl = generator.url()
104
- await setDbPlatformUrl(dbUrl)
105
- const config = await configs.getSettingsConfig()
106
- expect(config.platformUrl).toBe(dbUrl)
107
- })
108
- })
109
-
110
- it("returns the platform url without an existing config", async () => {
111
- await config.doInTenant(async () => {
112
- const config = await configs.getSettingsConfig()
113
- expect(config.platformUrl).toBe(DEFAULT_URL)
114
- })
115
- })
116
- })
117
-
118
- describe("getGoogleDatasourceConfig", () => {
119
- function setEnvVars() {
120
- env.GOOGLE_CLIENT_SECRET = "test"
121
- env.GOOGLE_CLIENT_ID = "test"
122
- }
123
-
124
- function unsetEnvVars() {
125
- env.GOOGLE_CLIENT_SECRET = undefined
126
- env.GOOGLE_CLIENT_ID = undefined
127
- }
128
-
129
- describe("cloud", () => {
130
- beforeEach(() => {
131
- testEnv.cloudHosted()
132
- })
133
-
134
- it("returns from env vars", async () => {
135
- await config.doInTenant(async () => {
136
- setEnvVars()
137
- const config = await configs.getGoogleDatasourceConfig()
138
- unsetEnvVars()
139
-
140
- expect(config).toEqual({
141
- activated: true,
142
- clientID: "test",
143
- clientSecret: "test",
144
- })
145
- })
146
- })
147
-
148
- it("returns undefined when no env vars are configured", async () => {
149
- await config.doInTenant(async () => {
150
- const config = await configs.getGoogleDatasourceConfig()
151
- expect(config).toBeUndefined()
152
- })
153
- })
154
- })
155
-
156
- describe("self host", () => {
157
- beforeEach(() => {
158
- testEnv.selfHosted()
159
- })
160
-
161
- it("returns from config", async () => {
162
- await config.doInTenant(async () => {
163
- const googleDoc = structures.sso.googleConfigDoc()
164
- await configs.save(googleDoc)
165
- const config = await configs.getGoogleDatasourceConfig()
166
- expect(config).toEqual(googleDoc.config)
167
- })
168
- })
169
-
170
- it("falls back to env vars when config is disabled", async () => {
171
- await config.doInTenant(async () => {
172
- setEnvVars()
173
- const config = await configs.getGoogleDatasourceConfig()
174
- unsetEnvVars()
175
- expect(config).toEqual({
176
- activated: true,
177
- clientID: "test",
178
- clientSecret: "test",
179
- })
180
- })
181
- })
182
- })
183
- })
184
- })
@@ -1,63 +0,0 @@
1
- import { prefixed, DocumentType } from "@budibase/types"
2
- export { SEPARATOR, UNICODE_MAX, DocumentType } from "@budibase/types"
3
-
4
- /**
5
- * Can be used to create a few different forms of querying a view.
6
- */
7
- export enum AutomationViewMode {
8
- ALL = "all",
9
- AUTOMATION = "automation",
10
- STATUS = "status",
11
- }
12
-
13
- export enum ViewName {
14
- USER_BY_APP = "by_app",
15
- USER_BY_EMAIL = "by_email2",
16
- BY_API_KEY = "by_api_key",
17
- LINK = "by_link",
18
- ROUTING = "screen_routes",
19
- AUTOMATION_LOGS = "automation_logs",
20
- ACCOUNT_BY_EMAIL = "account_by_email",
21
- PLATFORM_USERS_LOWERCASE = "platform_users_lowercase",
22
- USER_BY_GROUP = "user_by_group",
23
- APP_BACKUP_BY_TRIGGER = "by_trigger",
24
- }
25
-
26
- export const DeprecatedViews = {
27
- [ViewName.USER_BY_EMAIL]: [
28
- // removed due to inaccuracy in view doc filter logic
29
- "by_email",
30
- ],
31
- }
32
-
33
- export enum InternalTable {
34
- USER_METADATA = "ta_users",
35
- }
36
-
37
- export const StaticDatabases = {
38
- GLOBAL: {
39
- name: "global-db",
40
- docs: {
41
- apiKeys: "apikeys",
42
- usageQuota: "usage_quota",
43
- licenseInfo: "license_info",
44
- environmentVariables: "environmentvariables",
45
- },
46
- },
47
- // contains information about tenancy and so on
48
- PLATFORM_INFO: {
49
- name: "global-info",
50
- docs: {
51
- tenants: "tenants",
52
- install: "install",
53
- },
54
- },
55
- AUDIT_LOGS: {
56
- name: "audit-logs",
57
- },
58
- }
59
-
60
- export const APP_PREFIX = prefixed(DocumentType.APP)
61
- export const APP_DEV = prefixed(DocumentType.APP_DEV)
62
- export const APP_DEV_PREFIX = APP_DEV
63
- export const BUDIBASE_DATASOURCE_TYPE = "budibase"
@@ -1,2 +0,0 @@
1
- export * from "./db"
2
- export * from "./misc"
@@ -1,50 +0,0 @@
1
- export enum UserStatus {
2
- ACTIVE = "active",
3
- INACTIVE = "inactive",
4
- }
5
-
6
- export enum Cookie {
7
- Auth = "budibase:auth",
8
- Init = "budibase:init",
9
- ACCOUNT_RETURN_URL = "budibase:account:returnurl",
10
- DatasourceAuth = "budibase:datasourceauth",
11
- OIDC_CONFIG = "budibase:oidc:config",
12
- }
13
-
14
- export enum Header {
15
- API_KEY = "x-budibase-api-key",
16
- LICENSE_KEY = "x-budibase-license-key",
17
- API_VER = "x-budibase-api-version",
18
- APP_ID = "x-budibase-app-id",
19
- SESSION_ID = "x-budibase-session-id",
20
- TYPE = "x-budibase-type",
21
- PREVIEW_ROLE = "x-budibase-role",
22
- TENANT_ID = "x-budibase-tenant-id",
23
- VERIFICATION_CODE = "x-budibase-verification-code",
24
- RETURN_VERIFICATION_CODE = "x-budibase-return-verification-code",
25
- TOKEN = "x-budibase-token",
26
- CSRF_TOKEN = "x-csrf-token",
27
- CORRELATION_ID = "x-budibase-correlation-id",
28
- AUTHORIZATION = "authorization",
29
- }
30
-
31
- export enum GlobalRole {
32
- OWNER = "owner",
33
- ADMIN = "admin",
34
- BUILDER = "builder",
35
- WORKSPACE_MANAGER = "workspace_manager",
36
- }
37
-
38
- export enum Config {
39
- SETTINGS = "settings",
40
- ACCOUNT = "account",
41
- SMTP = "smtp",
42
- GOOGLE = "google",
43
- OIDC = "oidc",
44
- OIDC_LOGOS = "logos_oidc",
45
- SCIM = "scim",
46
- }
47
-
48
- export const MIN_VALID_DATE = new Date(-2147483647000)
49
- export const MAX_VALID_DATE = new Date(2147483647000)
50
- export const DEFAULT_TENANT_ID = "default"
@@ -1,14 +0,0 @@
1
- import { AsyncLocalStorage } from "async_hooks"
2
- import { ContextMap } from "./types"
3
-
4
- export default class Context {
5
- static storage = new AsyncLocalStorage<ContextMap>()
6
-
7
- static run(context: ContextMap, func: any) {
8
- return Context.storage.run(context, () => func())
9
- }
10
-
11
- static get(): ContextMap {
12
- return Context.storage.getStore() as ContextMap
13
- }
14
- }
@@ -1,58 +0,0 @@
1
- import {
2
- IdentityContext,
3
- IdentityType,
4
- User,
5
- isCloudAccount,
6
- Account,
7
- AccountUserContext,
8
- UserContext,
9
- Ctx,
10
- } from "@budibase/types"
11
- import * as context from "."
12
-
13
- export function getIdentity(): IdentityContext | undefined {
14
- return context.getIdentity()
15
- }
16
-
17
- export function doInIdentityContext(identity: IdentityContext, task: any) {
18
- return context.doInIdentityContext(identity, task)
19
- }
20
-
21
- // used in server/worker
22
- export function doInUserContext(user: User, ctx: Ctx, task: any) {
23
- const userContext: UserContext = {
24
- ...user,
25
- _id: user._id as string,
26
- type: IdentityType.USER,
27
- hostInfo: {
28
- ipAddress: ctx.request.ip,
29
- // filled in by koa-useragent package
30
- userAgent: ctx.userAgent._agent.source,
31
- },
32
- }
33
- return doInIdentityContext(userContext, task)
34
- }
35
-
36
- // used in account portal
37
- export function doInAccountContext(account: Account, task: any) {
38
- const _id = getAccountUserId(account)
39
- const tenantId = account.tenantId
40
- const accountContext: AccountUserContext = {
41
- _id,
42
- type: IdentityType.USER,
43
- tenantId,
44
- account,
45
- }
46
- return doInIdentityContext(accountContext, task)
47
- }
48
-
49
- export function getAccountUserId(account: Account) {
50
- let userId: string
51
- if (isCloudAccount(account)) {
52
- userId = account.budibaseUserId
53
- } else {
54
- // use account id as user id for self-hosting
55
- userId = account.accountId
56
- }
57
- return userId
58
- }
@@ -1,3 +0,0 @@
1
- export { DEFAULT_TENANT_ID } from "../constants"
2
- export * as identity from "./identity"
3
- export * from "./mainContext"
@@ -1,310 +0,0 @@
1
- // some test cases call functions directly, need to
2
- // store an app ID to pretend there is a context
3
- import env from "../environment"
4
- import Context from "./Context"
5
- import * as conversions from "../docIds/conversions"
6
- import { getDB } from "../db/db"
7
- import {
8
- DocumentType,
9
- SEPARATOR,
10
- StaticDatabases,
11
- DEFAULT_TENANT_ID,
12
- } from "../constants"
13
- import { Database, IdentityContext } from "@budibase/types"
14
- import { ContextMap } from "./types"
15
-
16
- let TEST_APP_ID: string | null = null
17
-
18
- export function getGlobalDBName(tenantId?: string) {
19
- // tenant ID can be set externally, for example user API where
20
- // new tenants are being created, this may be the case
21
- if (!tenantId) {
22
- tenantId = getTenantId()
23
- }
24
- return baseGlobalDBName(tenantId)
25
- }
26
-
27
- export function getAuditLogDBName(tenantId?: string) {
28
- if (!tenantId) {
29
- tenantId = getTenantId()
30
- }
31
- if (tenantId === DEFAULT_TENANT_ID) {
32
- return StaticDatabases.AUDIT_LOGS.name
33
- } else {
34
- return `${tenantId}${SEPARATOR}${StaticDatabases.AUDIT_LOGS.name}`
35
- }
36
- }
37
-
38
- export function baseGlobalDBName(tenantId: string | undefined | null) {
39
- if (!tenantId || tenantId === DEFAULT_TENANT_ID) {
40
- return StaticDatabases.GLOBAL.name
41
- } else {
42
- return `${tenantId}${SEPARATOR}${StaticDatabases.GLOBAL.name}`
43
- }
44
- }
45
-
46
- export function getPlatformURL() {
47
- return env.PLATFORM_URL
48
- }
49
-
50
- export function isMultiTenant() {
51
- return !!env.MULTI_TENANCY
52
- }
53
-
54
- export function isTenantIdSet() {
55
- const context = Context.get()
56
- return !!context?.tenantId
57
- }
58
-
59
- export function isTenancyEnabled() {
60
- return env.MULTI_TENANCY
61
- }
62
-
63
- /**
64
- * Given an app ID this will attempt to retrieve the tenant ID from it.
65
- * @return {null|string} The tenant ID found within the app ID.
66
- */
67
- export function getTenantIDFromAppID(appId: string) {
68
- if (!appId) {
69
- return undefined
70
- }
71
- if (!isMultiTenant()) {
72
- return DEFAULT_TENANT_ID
73
- }
74
- const split = appId.split(SEPARATOR)
75
- const hasDev = split[1] === DocumentType.DEV
76
- if ((hasDev && split.length === 3) || (!hasDev && split.length === 2)) {
77
- return undefined
78
- }
79
- if (hasDev) {
80
- return split[2]
81
- } else {
82
- return split[1]
83
- }
84
- }
85
-
86
- function updateContext(updates: ContextMap): ContextMap {
87
- let context: ContextMap
88
- try {
89
- context = Context.get()
90
- } catch (err) {
91
- // no context, start empty
92
- context = {}
93
- }
94
- context = {
95
- ...context,
96
- ...updates,
97
- }
98
- return context
99
- }
100
-
101
- async function newContext(updates: ContextMap, task: any) {
102
- // see if there already is a context setup
103
- let context: ContextMap = updateContext(updates)
104
- return Context.run(context, task)
105
- }
106
-
107
- export async function doInAutomationContext(params: {
108
- appId: string
109
- automationId: string
110
- task: any
111
- }): Promise<any> {
112
- const tenantId = getTenantIDFromAppID(params.appId)
113
- return newContext(
114
- {
115
- tenantId,
116
- appId: params.appId,
117
- automationId: params.automationId,
118
- },
119
- params.task
120
- )
121
- }
122
-
123
- export async function doInContext(appId: string, task: any): Promise<any> {
124
- const tenantId = getTenantIDFromAppID(appId)
125
- return newContext(
126
- {
127
- tenantId,
128
- appId,
129
- },
130
- task
131
- )
132
- }
133
-
134
- export async function doInTenant<T>(
135
- tenantId: string | null,
136
- task: () => T
137
- ): Promise<T> {
138
- // make sure default always selected in single tenancy
139
- if (!env.MULTI_TENANCY) {
140
- tenantId = tenantId || DEFAULT_TENANT_ID
141
- }
142
-
143
- const updates = tenantId ? { tenantId } : {}
144
- return newContext(updates, task)
145
- }
146
-
147
- export async function doInAppContext(
148
- appId: string | null,
149
- task: any
150
- ): Promise<any> {
151
- if (!appId && !env.isTest()) {
152
- throw new Error("appId is required")
153
- }
154
-
155
- let updates: ContextMap
156
- if (!appId) {
157
- updates = { appId: "" }
158
- } else {
159
- const tenantId = getTenantIDFromAppID(appId)
160
- updates = { appId }
161
- if (tenantId) {
162
- updates.tenantId = tenantId
163
- }
164
- }
165
- return newContext(updates, task)
166
- }
167
-
168
- export async function doInIdentityContext(
169
- identity: IdentityContext,
170
- task: any
171
- ): Promise<any> {
172
- if (!identity) {
173
- throw new Error("identity is required")
174
- }
175
-
176
- const context: ContextMap = {
177
- identity,
178
- }
179
- if (identity.tenantId) {
180
- context.tenantId = identity.tenantId
181
- }
182
- return newContext(context, task)
183
- }
184
-
185
- export function getIdentity(): IdentityContext | undefined {
186
- try {
187
- const context = Context.get()
188
- return context?.identity
189
- } catch (e) {
190
- // do nothing - identity is not in context
191
- }
192
- }
193
-
194
- export function getTenantId(): string {
195
- if (!isMultiTenant()) {
196
- return DEFAULT_TENANT_ID
197
- }
198
- const context = Context.get()
199
- const tenantId = context?.tenantId
200
- if (!tenantId) {
201
- throw new Error("Tenant id not found")
202
- }
203
- return tenantId
204
- }
205
-
206
- export function getAutomationId(): string | undefined {
207
- const context = Context.get()
208
- return context?.automationId
209
- }
210
-
211
- export function getAppId(): string | undefined {
212
- const context = Context.get()
213
- const foundId = context?.appId
214
- if (!foundId && env.isTest() && TEST_APP_ID) {
215
- return TEST_APP_ID
216
- } else {
217
- return foundId
218
- }
219
- }
220
-
221
- export const getProdAppId = () => {
222
- const appId = getAppId()
223
- if (!appId) {
224
- throw new Error("Could not get appId")
225
- }
226
- return conversions.getProdAppID(appId)
227
- }
228
-
229
- export function doInEnvironmentContext(
230
- values: Record<string, string>,
231
- task: any
232
- ) {
233
- if (!values) {
234
- throw new Error("Must supply environment variables.")
235
- }
236
- const updates = {
237
- environmentVariables: values,
238
- }
239
- return newContext(updates, task)
240
- }
241
-
242
- export function doInScimContext(task: any) {
243
- const updates: ContextMap = {
244
- isScim: true,
245
- }
246
- return newContext(updates, task)
247
- }
248
-
249
- export function getEnvironmentVariables() {
250
- const context = Context.get()
251
- if (!context.environmentVariables) {
252
- return null
253
- } else {
254
- return context.environmentVariables
255
- }
256
- }
257
-
258
- export function getGlobalDB(): Database {
259
- const context = Context.get()
260
- if (!context || (env.MULTI_TENANCY && !context.tenantId)) {
261
- throw new Error("Global DB not found")
262
- }
263
- return getDB(baseGlobalDBName(context?.tenantId))
264
- }
265
-
266
- export function getAuditLogsDB(): Database {
267
- if (!getTenantId()) {
268
- throw new Error("No tenant ID found - cannot open audit log DB")
269
- }
270
- return getDB(getAuditLogDBName())
271
- }
272
-
273
- /**
274
- * Gets the app database based on whatever the request
275
- * contained, dev or prod.
276
- */
277
- export function getAppDB(opts?: any): Database {
278
- const appId = getAppId()
279
- return getDB(appId, opts)
280
- }
281
-
282
- /**
283
- * This specifically gets the prod app ID, if the request
284
- * contained a development app ID, this will get the prod one.
285
- */
286
- export function getProdAppDB(opts?: any): Database {
287
- const appId = getAppId()
288
- if (!appId) {
289
- throw new Error("Unable to retrieve prod DB - no app ID.")
290
- }
291
- return getDB(conversions.getProdAppID(appId), opts)
292
- }
293
-
294
- /**
295
- * This specifically gets the dev app ID, if the request
296
- * contained a prod app ID, this will get the dev one.
297
- */
298
- export function getDevAppDB(opts?: any): Database {
299
- const appId = getAppId()
300
- if (!appId) {
301
- throw new Error("Unable to retrieve dev DB - no app ID.")
302
- }
303
- return getDB(conversions.getDevelopmentAppID(appId), opts)
304
- }
305
-
306
- export function isScim(): boolean {
307
- const context = Context.get()
308
- const scimCall = context?.isScim
309
- return !!scimCall
310
- }