@budibase/backend-core 2.9.19-alpha.0 → 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 (257) hide show
  1. package/dist/index.js +324 -266
  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 +260 -222
  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/__mocks__/aws-sdk.ts +0 -18
  14. package/dist/tsconfig.build.tsbuildinfo +0 -1
  15. package/jest-testcontainers-config.js +0 -8
  16. package/jest.config.ts +0 -35
  17. package/scripts/build.js +0 -6
  18. package/scripts/test.sh +0 -13
  19. package/src/accounts/accounts.ts +0 -82
  20. package/src/accounts/api.ts +0 -59
  21. package/src/accounts/index.ts +0 -1
  22. package/src/auth/auth.ts +0 -208
  23. package/src/auth/index.ts +0 -1
  24. package/src/auth/tests/auth.spec.ts +0 -14
  25. package/src/blacklist/blacklist.ts +0 -54
  26. package/src/blacklist/index.ts +0 -1
  27. package/src/blacklist/tests/blacklist.spec.ts +0 -46
  28. package/src/cache/appMetadata.ts +0 -88
  29. package/src/cache/base/index.ts +0 -92
  30. package/src/cache/generic.ts +0 -30
  31. package/src/cache/index.ts +0 -5
  32. package/src/cache/tests/writethrough.spec.ts +0 -138
  33. package/src/cache/user.ts +0 -69
  34. package/src/cache/writethrough.ts +0 -133
  35. package/src/configs/configs.ts +0 -257
  36. package/src/configs/index.ts +0 -1
  37. package/src/configs/tests/configs.spec.ts +0 -184
  38. package/src/constants/db.ts +0 -63
  39. package/src/constants/index.ts +0 -2
  40. package/src/constants/misc.ts +0 -50
  41. package/src/context/Context.ts +0 -14
  42. package/src/context/identity.ts +0 -58
  43. package/src/context/index.ts +0 -3
  44. package/src/context/mainContext.ts +0 -310
  45. package/src/context/tests/index.spec.ts +0 -147
  46. package/src/context/types.ts +0 -11
  47. package/src/db/Replication.ts +0 -84
  48. package/src/db/constants.ts +0 -10
  49. package/src/db/couch/DatabaseImpl.ts +0 -238
  50. package/src/db/couch/connections.ts +0 -77
  51. package/src/db/couch/index.ts +0 -5
  52. package/src/db/couch/pouchDB.ts +0 -97
  53. package/src/db/couch/pouchDump.ts +0 -0
  54. package/src/db/couch/utils.ts +0 -50
  55. package/src/db/db.ts +0 -39
  56. package/src/db/errors.ts +0 -14
  57. package/src/db/index.ts +0 -12
  58. package/src/db/lucene.ts +0 -732
  59. package/src/db/searchIndexes/index.ts +0 -1
  60. package/src/db/searchIndexes/searchIndexes.ts +0 -62
  61. package/src/db/tests/index.spec.js +0 -25
  62. package/src/db/tests/lucene.spec.ts +0 -298
  63. package/src/db/tests/pouch.spec.js +0 -62
  64. package/src/db/tests/utils.spec.ts +0 -63
  65. package/src/db/utils.ts +0 -207
  66. package/src/db/views.ts +0 -241
  67. package/src/docIds/conversions.ts +0 -59
  68. package/src/docIds/ids.ts +0 -113
  69. package/src/docIds/index.ts +0 -2
  70. package/src/docIds/newid.ts +0 -5
  71. package/src/docIds/params.ts +0 -174
  72. package/src/docUpdates/index.ts +0 -29
  73. package/src/environment.ts +0 -201
  74. package/src/errors/errors.ts +0 -119
  75. package/src/errors/index.ts +0 -1
  76. package/src/events/analytics.ts +0 -6
  77. package/src/events/asyncEvents/index.ts +0 -2
  78. package/src/events/asyncEvents/publisher.ts +0 -12
  79. package/src/events/asyncEvents/queue.ts +0 -22
  80. package/src/events/backfill.ts +0 -183
  81. package/src/events/documentId.ts +0 -56
  82. package/src/events/events.ts +0 -40
  83. package/src/events/identification.ts +0 -310
  84. package/src/events/index.ts +0 -14
  85. package/src/events/processors/AnalyticsProcessor.ts +0 -64
  86. package/src/events/processors/AuditLogsProcessor.ts +0 -93
  87. package/src/events/processors/LoggingProcessor.ts +0 -37
  88. package/src/events/processors/Processors.ts +0 -52
  89. package/src/events/processors/async/DocumentUpdateProcessor.ts +0 -43
  90. package/src/events/processors/index.ts +0 -19
  91. package/src/events/processors/posthog/PosthogProcessor.ts +0 -118
  92. package/src/events/processors/posthog/index.ts +0 -2
  93. package/src/events/processors/posthog/rateLimiting.ts +0 -106
  94. package/src/events/processors/posthog/tests/PosthogProcessor.spec.ts +0 -168
  95. package/src/events/processors/types.ts +0 -1
  96. package/src/events/publishers/account.ts +0 -35
  97. package/src/events/publishers/app.ts +0 -155
  98. package/src/events/publishers/auditLog.ts +0 -26
  99. package/src/events/publishers/auth.ts +0 -73
  100. package/src/events/publishers/automation.ts +0 -110
  101. package/src/events/publishers/backfill.ts +0 -74
  102. package/src/events/publishers/backup.ts +0 -42
  103. package/src/events/publishers/datasource.ts +0 -48
  104. package/src/events/publishers/email.ts +0 -17
  105. package/src/events/publishers/environmentVariable.ts +0 -38
  106. package/src/events/publishers/group.ts +0 -99
  107. package/src/events/publishers/index.ts +0 -24
  108. package/src/events/publishers/installation.ts +0 -38
  109. package/src/events/publishers/layout.ts +0 -26
  110. package/src/events/publishers/license.ts +0 -84
  111. package/src/events/publishers/org.ts +0 -37
  112. package/src/events/publishers/plugin.ts +0 -47
  113. package/src/events/publishers/query.ts +0 -88
  114. package/src/events/publishers/role.ts +0 -62
  115. package/src/events/publishers/rows.ts +0 -29
  116. package/src/events/publishers/screen.ts +0 -36
  117. package/src/events/publishers/serve.ts +0 -43
  118. package/src/events/publishers/table.ts +0 -70
  119. package/src/events/publishers/user.ts +0 -202
  120. package/src/events/publishers/view.ts +0 -107
  121. package/src/featureFlags/index.ts +0 -77
  122. package/src/featureFlags/tests/featureFlags.spec.ts +0 -85
  123. package/src/helpers.ts +0 -9
  124. package/src/index.ts +0 -53
  125. package/src/installation.ts +0 -107
  126. package/src/logging/alerts.ts +0 -26
  127. package/src/logging/correlation/correlation.ts +0 -13
  128. package/src/logging/correlation/index.ts +0 -1
  129. package/src/logging/correlation/middleware.ts +0 -17
  130. package/src/logging/index.ts +0 -4
  131. package/src/logging/pino/logger.ts +0 -232
  132. package/src/logging/pino/middleware.ts +0 -45
  133. package/src/logging/system.ts +0 -81
  134. package/src/logging/tests/system.spec.ts +0 -61
  135. package/src/middleware/adminOnly.ts +0 -9
  136. package/src/middleware/auditLog.ts +0 -6
  137. package/src/middleware/authenticated.ts +0 -193
  138. package/src/middleware/builderOnly.ts +0 -20
  139. package/src/middleware/builderOrAdmin.ts +0 -20
  140. package/src/middleware/csrf.ts +0 -81
  141. package/src/middleware/errorHandling.ts +0 -29
  142. package/src/middleware/index.ts +0 -21
  143. package/src/middleware/internalApi.ts +0 -23
  144. package/src/middleware/joi-validator.ts +0 -45
  145. package/src/middleware/matchers.ts +0 -47
  146. package/src/middleware/passport/datasource/google.ts +0 -95
  147. package/src/middleware/passport/local.ts +0 -54
  148. package/src/middleware/passport/sso/google.ts +0 -77
  149. package/src/middleware/passport/sso/oidc.ts +0 -154
  150. package/src/middleware/passport/sso/sso.ts +0 -165
  151. package/src/middleware/passport/sso/tests/google.spec.ts +0 -67
  152. package/src/middleware/passport/sso/tests/oidc.spec.ts +0 -152
  153. package/src/middleware/passport/sso/tests/sso.spec.ts +0 -197
  154. package/src/middleware/passport/utils.ts +0 -38
  155. package/src/middleware/querystringToBody.ts +0 -28
  156. package/src/middleware/tenancy.ts +0 -36
  157. package/src/middleware/tests/builder.spec.ts +0 -180
  158. package/src/middleware/tests/matchers.spec.ts +0 -134
  159. package/src/migrations/definitions.ts +0 -40
  160. package/src/migrations/index.ts +0 -2
  161. package/src/migrations/migrations.ts +0 -191
  162. package/src/migrations/tests/__snapshots__/migrations.spec.ts.snap +0 -11
  163. package/src/migrations/tests/migrations.spec.ts +0 -64
  164. package/src/objectStore/buckets/app.ts +0 -40
  165. package/src/objectStore/buckets/global.ts +0 -29
  166. package/src/objectStore/buckets/index.ts +0 -3
  167. package/src/objectStore/buckets/plugins.ts +0 -71
  168. package/src/objectStore/buckets/tests/app.spec.ts +0 -171
  169. package/src/objectStore/buckets/tests/global.spec.ts +0 -74
  170. package/src/objectStore/buckets/tests/plugins.spec.ts +0 -111
  171. package/src/objectStore/cloudfront.ts +0 -41
  172. package/src/objectStore/index.ts +0 -3
  173. package/src/objectStore/objectStore.ts +0 -440
  174. package/src/objectStore/utils.ts +0 -27
  175. package/src/platform/index.ts +0 -3
  176. package/src/platform/platformDb.ts +0 -6
  177. package/src/platform/tenants.ts +0 -101
  178. package/src/platform/tests/tenants.spec.ts +0 -26
  179. package/src/platform/users.ts +0 -90
  180. package/src/plugin/index.ts +0 -1
  181. package/src/plugin/tests/validation.spec.ts +0 -83
  182. package/src/plugin/utils.ts +0 -156
  183. package/src/queue/constants.ts +0 -6
  184. package/src/queue/inMemoryQueue.ts +0 -141
  185. package/src/queue/index.ts +0 -2
  186. package/src/queue/listeners.ts +0 -195
  187. package/src/queue/queue.ts +0 -54
  188. package/src/redis/index.ts +0 -6
  189. package/src/redis/init.ts +0 -86
  190. package/src/redis/redis.ts +0 -308
  191. package/src/redis/redlockImpl.ts +0 -139
  192. package/src/redis/utils.ts +0 -117
  193. package/src/security/encryption.ts +0 -179
  194. package/src/security/permissions.ts +0 -159
  195. package/src/security/roles.ts +0 -420
  196. package/src/security/sessions.ts +0 -120
  197. package/src/security/tests/encryption.spec.ts +0 -31
  198. package/src/security/tests/permissions.spec.ts +0 -145
  199. package/src/security/tests/sessions.spec.ts +0 -12
  200. package/src/tenancy/db.ts +0 -6
  201. package/src/tenancy/index.ts +0 -2
  202. package/src/tenancy/tenancy.ts +0 -140
  203. package/src/tenancy/tests/tenancy.spec.ts +0 -184
  204. package/src/timers/index.ts +0 -1
  205. package/src/timers/timers.ts +0 -22
  206. package/src/users/db.ts +0 -460
  207. package/src/users/events.ts +0 -176
  208. package/src/users/index.ts +0 -4
  209. package/src/users/lookup.ts +0 -102
  210. package/src/users/users.ts +0 -276
  211. package/src/users/utils.ts +0 -55
  212. package/src/utils/hashing.ts +0 -14
  213. package/src/utils/index.ts +0 -3
  214. package/src/utils/stringUtils.ts +0 -8
  215. package/src/utils/tests/utils.spec.ts +0 -191
  216. package/src/utils/utils.ts +0 -239
  217. package/tests/core/logging.ts +0 -34
  218. package/tests/core/utilities/index.ts +0 -6
  219. package/tests/core/utilities/jestUtils.ts +0 -30
  220. package/tests/core/utilities/mocks/alerts.ts +0 -3
  221. package/tests/core/utilities/mocks/date.ts +0 -2
  222. package/tests/core/utilities/mocks/events.ts +0 -131
  223. package/tests/core/utilities/mocks/fetch.ts +0 -17
  224. package/tests/core/utilities/mocks/index.ts +0 -10
  225. package/tests/core/utilities/mocks/licenses.ts +0 -107
  226. package/tests/core/utilities/mocks/posthog.ts +0 -7
  227. package/tests/core/utilities/structures/Chance.ts +0 -20
  228. package/tests/core/utilities/structures/accounts.ts +0 -115
  229. package/tests/core/utilities/structures/apps.ts +0 -21
  230. package/tests/core/utilities/structures/common.ts +0 -7
  231. package/tests/core/utilities/structures/db.ts +0 -12
  232. package/tests/core/utilities/structures/documents/index.ts +0 -1
  233. package/tests/core/utilities/structures/documents/platform/index.ts +0 -1
  234. package/tests/core/utilities/structures/documents/platform/installation.ts +0 -12
  235. package/tests/core/utilities/structures/generator.ts +0 -2
  236. package/tests/core/utilities/structures/index.ts +0 -15
  237. package/tests/core/utilities/structures/koa.ts +0 -16
  238. package/tests/core/utilities/structures/licenses.ts +0 -167
  239. package/tests/core/utilities/structures/plugins.ts +0 -19
  240. package/tests/core/utilities/structures/quotas.ts +0 -67
  241. package/tests/core/utilities/structures/scim.ts +0 -80
  242. package/tests/core/utilities/structures/shared.ts +0 -19
  243. package/tests/core/utilities/structures/sso.ts +0 -119
  244. package/tests/core/utilities/structures/tenants.ts +0 -5
  245. package/tests/core/utilities/structures/userGroups.ts +0 -10
  246. package/tests/core/utilities/structures/users.ts +0 -73
  247. package/tests/core/utilities/testContainerUtils.ts +0 -98
  248. package/tests/core/utilities/utils/index.ts +0 -1
  249. package/tests/core/utilities/utils/time.ts +0 -3
  250. package/tests/extra/DBTestConfiguration.ts +0 -36
  251. package/tests/extra/index.ts +0 -2
  252. package/tests/extra/testEnv.ts +0 -95
  253. package/tests/index.ts +0 -1
  254. package/tests/jestEnv.ts +0 -6
  255. package/tests/jestSetup.ts +0 -28
  256. package/tsconfig.build.json +0 -29
  257. package/tsconfig.json +0 -4
@@ -1,202 +0,0 @@
1
- import { publishEvent } from "../events"
2
- import {
3
- Event,
4
- User,
5
- UserCreatedEvent,
6
- UserDataCollaborationEvent,
7
- UserDeletedEvent,
8
- UserInviteAcceptedEvent,
9
- UserInvitedEvent,
10
- UserPasswordForceResetEvent,
11
- UserPasswordResetEvent,
12
- UserPasswordResetRequestedEvent,
13
- UserPasswordUpdatedEvent,
14
- UserPermissionAssignedEvent,
15
- UserPermissionRemovedEvent,
16
- UserUpdatedEvent,
17
- UserOnboardingEvent,
18
- } from "@budibase/types"
19
- import { isScim } from "../../context"
20
-
21
- async function created(user: User, timestamp?: number) {
22
- const properties: UserCreatedEvent = {
23
- userId: user._id as string,
24
- viaScim: isScim(),
25
- audited: {
26
- email: user.email,
27
- },
28
- }
29
- await publishEvent(Event.USER_CREATED, properties, timestamp)
30
- }
31
-
32
- async function updated(user: User) {
33
- const properties: UserUpdatedEvent = {
34
- userId: user._id as string,
35
- viaScim: isScim(),
36
- audited: {
37
- email: user.email,
38
- },
39
- }
40
- await publishEvent(Event.USER_UPDATED, properties)
41
- }
42
-
43
- async function deleted(user: User) {
44
- const properties: UserDeletedEvent = {
45
- userId: user._id as string,
46
- viaScim: isScim(),
47
- audited: {
48
- email: user.email,
49
- },
50
- }
51
- await publishEvent(Event.USER_DELETED, properties)
52
- }
53
-
54
- export async function onboardingComplete(user: User) {
55
- const properties: UserOnboardingEvent = {
56
- userId: user._id as string,
57
- audited: {
58
- email: user.email,
59
- },
60
- }
61
- await publishEvent(Event.USER_ONBOARDING_COMPLETE, properties)
62
- }
63
-
64
- // PERMISSIONS
65
-
66
- async function permissionAdminAssigned(user: User, timestamp?: number) {
67
- const properties: UserPermissionAssignedEvent = {
68
- userId: user._id as string,
69
- audited: {
70
- email: user.email,
71
- },
72
- }
73
- await publishEvent(
74
- Event.USER_PERMISSION_ADMIN_ASSIGNED,
75
- properties,
76
- timestamp
77
- )
78
- }
79
-
80
- async function permissionAdminRemoved(user: User) {
81
- const properties: UserPermissionRemovedEvent = {
82
- userId: user._id as string,
83
- audited: {
84
- email: user.email,
85
- },
86
- }
87
- await publishEvent(Event.USER_PERMISSION_ADMIN_REMOVED, properties)
88
- }
89
-
90
- async function permissionBuilderAssigned(user: User, timestamp?: number) {
91
- const properties: UserPermissionAssignedEvent = {
92
- userId: user._id as string,
93
- audited: {
94
- email: user.email,
95
- },
96
- }
97
- await publishEvent(
98
- Event.USER_PERMISSION_BUILDER_ASSIGNED,
99
- properties,
100
- timestamp
101
- )
102
- }
103
-
104
- async function permissionBuilderRemoved(user: User) {
105
- const properties: UserPermissionRemovedEvent = {
106
- userId: user._id as string,
107
- audited: {
108
- email: user.email,
109
- },
110
- }
111
- await publishEvent(Event.USER_PERMISSION_BUILDER_REMOVED, properties)
112
- }
113
-
114
- // INVITE
115
-
116
- async function invited(email: string) {
117
- const properties: UserInvitedEvent = {
118
- audited: {
119
- email,
120
- },
121
- }
122
- await publishEvent(Event.USER_INVITED, properties)
123
- }
124
-
125
- async function inviteAccepted(user: User) {
126
- const properties: UserInviteAcceptedEvent = {
127
- userId: user._id as string,
128
- audited: {
129
- email: user.email,
130
- },
131
- }
132
- await publishEvent(Event.USER_INVITED_ACCEPTED, properties)
133
- }
134
-
135
- // PASSWORD
136
-
137
- async function passwordForceReset(user: User) {
138
- const properties: UserPasswordForceResetEvent = {
139
- userId: user._id as string,
140
- audited: {
141
- email: user.email,
142
- },
143
- }
144
- await publishEvent(Event.USER_PASSWORD_FORCE_RESET, properties)
145
- }
146
-
147
- async function passwordUpdated(user: User) {
148
- const properties: UserPasswordUpdatedEvent = {
149
- userId: user._id as string,
150
- audited: {
151
- email: user.email,
152
- },
153
- }
154
- await publishEvent(Event.USER_PASSWORD_UPDATED, properties)
155
- }
156
-
157
- async function passwordResetRequested(user: User) {
158
- const properties: UserPasswordResetRequestedEvent = {
159
- userId: user._id as string,
160
- audited: {
161
- email: user.email,
162
- },
163
- }
164
- await publishEvent(Event.USER_PASSWORD_RESET_REQUESTED, properties)
165
- }
166
-
167
- async function passwordReset(user: User) {
168
- const properties: UserPasswordResetEvent = {
169
- userId: user._id as string,
170
- audited: {
171
- email: user.email,
172
- },
173
- }
174
- await publishEvent(Event.USER_PASSWORD_RESET, properties)
175
- }
176
-
177
- // COLLABORATION
178
-
179
- async function dataCollaboration(users: number) {
180
- const properties: UserDataCollaborationEvent = {
181
- users,
182
- }
183
- await publishEvent(Event.USER_DATA_COLLABORATION, properties)
184
- }
185
-
186
- export default {
187
- created,
188
- updated,
189
- deleted,
190
- permissionAdminAssigned,
191
- permissionAdminRemoved,
192
- permissionBuilderAssigned,
193
- permissionBuilderRemoved,
194
- onboardingComplete,
195
- invited,
196
- inviteAccepted,
197
- passwordForceReset,
198
- passwordUpdated,
199
- passwordResetRequested,
200
- passwordReset,
201
- dataCollaboration,
202
- }
@@ -1,107 +0,0 @@
1
- import { publishEvent } from "../events"
2
- import {
3
- Event,
4
- ViewCalculationCreatedEvent,
5
- ViewCalculationDeletedEvent,
6
- ViewCalculationUpdatedEvent,
7
- ViewCreatedEvent,
8
- ViewDeletedEvent,
9
- ViewExportedEvent,
10
- ViewFilterCreatedEvent,
11
- ViewFilterDeletedEvent,
12
- ViewFilterUpdatedEvent,
13
- ViewUpdatedEvent,
14
- View,
15
- ViewCalculation,
16
- Table,
17
- TableExportFormat,
18
- } from "@budibase/types"
19
-
20
- /* eslint-disable */
21
-
22
- async function created(view: View, timestamp?: string | number) {
23
- const properties: ViewCreatedEvent = {
24
- tableId: view.tableId,
25
- }
26
- await publishEvent(Event.VIEW_CREATED, properties, timestamp)
27
- }
28
-
29
- async function updated(view: View) {
30
- const properties: ViewUpdatedEvent = {
31
- tableId: view.tableId,
32
- }
33
- await publishEvent(Event.VIEW_UPDATED, properties)
34
- }
35
-
36
- async function deleted(view: View) {
37
- const properties: ViewDeletedEvent = {
38
- tableId: view.tableId,
39
- }
40
- await publishEvent(Event.VIEW_DELETED, properties)
41
- }
42
-
43
- async function exported(table: Table, format: TableExportFormat) {
44
- const properties: ViewExportedEvent = {
45
- tableId: table._id as string,
46
- format,
47
- }
48
- await publishEvent(Event.VIEW_EXPORTED, properties)
49
- }
50
-
51
- async function filterCreated(view: View, timestamp?: string | number) {
52
- const properties: ViewFilterCreatedEvent = {
53
- tableId: view.tableId,
54
- }
55
- await publishEvent(Event.VIEW_FILTER_CREATED, properties, timestamp)
56
- }
57
-
58
- async function filterUpdated(view: View) {
59
- const properties: ViewFilterUpdatedEvent = {
60
- tableId: view.tableId,
61
- }
62
- await publishEvent(Event.VIEW_FILTER_UPDATED, properties)
63
- }
64
-
65
- async function filterDeleted(view: View) {
66
- const properties: ViewFilterDeletedEvent = {
67
- tableId: view.tableId,
68
- }
69
- await publishEvent(Event.VIEW_FILTER_DELETED, properties)
70
- }
71
-
72
- async function calculationCreated(view: View, timestamp?: string | number) {
73
- const properties: ViewCalculationCreatedEvent = {
74
- tableId: view.tableId,
75
- calculation: view.calculation as ViewCalculation,
76
- }
77
- await publishEvent(Event.VIEW_CALCULATION_CREATED, properties, timestamp)
78
- }
79
-
80
- async function calculationUpdated(view: View) {
81
- const properties: ViewCalculationUpdatedEvent = {
82
- tableId: view.tableId,
83
- calculation: view.calculation as ViewCalculation,
84
- }
85
- await publishEvent(Event.VIEW_CALCULATION_UPDATED, properties)
86
- }
87
-
88
- async function calculationDeleted(existingView: View) {
89
- const properties: ViewCalculationDeletedEvent = {
90
- tableId: existingView.tableId,
91
- calculation: existingView.calculation as ViewCalculation,
92
- }
93
- await publishEvent(Event.VIEW_CALCULATION_DELETED, properties)
94
- }
95
-
96
- export default {
97
- created,
98
- updated,
99
- deleted,
100
- exported,
101
- filterCreated,
102
- filterUpdated,
103
- filterDeleted,
104
- calculationCreated,
105
- calculationUpdated,
106
- calculationDeleted,
107
- }
@@ -1,77 +0,0 @@
1
- import env from "../environment"
2
- import * as context from "../context"
3
-
4
- /**
5
- * Read the TENANT_FEATURE_FLAGS env var and return an array of features flags for each tenant.
6
- * The env var is formatted as:
7
- * tenant1:feature1:feature2,tenant2:feature1
8
- */
9
- export function buildFeatureFlags() {
10
- if (!env.TENANT_FEATURE_FLAGS) {
11
- return
12
- }
13
-
14
- const tenantFeatureFlags: Record<string, string[]> = {}
15
-
16
- env.TENANT_FEATURE_FLAGS.split(",").forEach(tenantToFeatures => {
17
- const [tenantId, ...features] = tenantToFeatures.split(":")
18
-
19
- features.forEach(feature => {
20
- if (!tenantFeatureFlags[tenantId]) {
21
- tenantFeatureFlags[tenantId] = []
22
- }
23
- tenantFeatureFlags[tenantId].push(feature)
24
- })
25
- })
26
-
27
- return tenantFeatureFlags
28
- }
29
-
30
- export function isEnabled(featureFlag: string) {
31
- const tenantId = context.getTenantId()
32
- const flags = getTenantFeatureFlags(tenantId)
33
- return flags.includes(featureFlag)
34
- }
35
-
36
- export function getTenantFeatureFlags(tenantId: string) {
37
- let flags: string[] = []
38
- const envFlags = buildFeatureFlags()
39
- if (envFlags) {
40
- const globalFlags = envFlags["*"]
41
- const tenantFlags = envFlags[tenantId] || []
42
-
43
- // Explicitly exclude tenants from global features if required.
44
- // Prefix the tenant flag with '!'
45
- const tenantOverrides = tenantFlags.reduce(
46
- (acc: string[], flag: string) => {
47
- if (flag.startsWith("!")) {
48
- let stripped = flag.substring(1)
49
- acc.push(stripped)
50
- }
51
- return acc
52
- },
53
- []
54
- )
55
-
56
- if (globalFlags) {
57
- flags.push(...globalFlags)
58
- }
59
- if (tenantFlags.length) {
60
- flags.push(...tenantFlags)
61
- }
62
-
63
- // Purge any tenant specific overrides
64
- flags = flags.filter(flag => {
65
- return tenantOverrides.indexOf(flag) == -1 && !flag.startsWith("!")
66
- })
67
- }
68
-
69
- return flags
70
- }
71
-
72
- export enum TenantFeatureFlag {
73
- LICENSING = "LICENSING",
74
- GOOGLE_SHEETS = "GOOGLE_SHEETS",
75
- USER_GROUPS = "USER_GROUPS",
76
- ONBOARDING_TOUR = "ONBOARDING_TOUR",
77
- }
@@ -1,85 +0,0 @@
1
- import {
2
- TenantFeatureFlag,
3
- buildFeatureFlags,
4
- getTenantFeatureFlags,
5
- } from "../"
6
- import env from "../../environment"
7
-
8
- const { ONBOARDING_TOUR, LICENSING, USER_GROUPS } = TenantFeatureFlag
9
-
10
- describe("featureFlags", () => {
11
- beforeEach(() => {
12
- env._set("TENANT_FEATURE_FLAGS", "")
13
- })
14
-
15
- it("Should return no flags when the TENANT_FEATURE_FLAG is empty", async () => {
16
- let features = buildFeatureFlags()
17
- expect(features).toBeUndefined()
18
- })
19
-
20
- it("Should generate a map of global and named tenant feature flags from the env value", async () => {
21
- env._set(
22
- "TENANT_FEATURE_FLAGS",
23
- `*:${ONBOARDING_TOUR},tenant1:!${ONBOARDING_TOUR},tenant2:${USER_GROUPS},tenant1:${LICENSING}`
24
- )
25
-
26
- const parsedFlags: Record<string, string[]> = {
27
- "*": [ONBOARDING_TOUR],
28
- tenant1: [`!${ONBOARDING_TOUR}`, LICENSING],
29
- tenant2: [USER_GROUPS],
30
- }
31
-
32
- let features = buildFeatureFlags()
33
-
34
- expect(features).toBeDefined()
35
- expect(features).toEqual(parsedFlags)
36
- })
37
-
38
- it("Should add feature flag flag only to explicitly configured tenant", async () => {
39
- env._set(
40
- "TENANT_FEATURE_FLAGS",
41
- `*:${LICENSING},*:${USER_GROUPS},tenant1:${ONBOARDING_TOUR}`
42
- )
43
-
44
- let tenant1Flags = getTenantFeatureFlags("tenant1")
45
- let tenant2Flags = getTenantFeatureFlags("tenant2")
46
-
47
- expect(tenant1Flags).toBeDefined()
48
- expect(tenant1Flags).toEqual([LICENSING, USER_GROUPS, ONBOARDING_TOUR])
49
-
50
- expect(tenant2Flags).toBeDefined()
51
- expect(tenant2Flags).toEqual([LICENSING, USER_GROUPS])
52
- })
53
- })
54
-
55
- it("Should exclude tenant1 from global feature flag", async () => {
56
- env._set(
57
- "TENANT_FEATURE_FLAGS",
58
- `*:${LICENSING},*:${ONBOARDING_TOUR},tenant1:!${ONBOARDING_TOUR}`
59
- )
60
-
61
- let tenant1Flags = getTenantFeatureFlags("tenant1")
62
- let tenant2Flags = getTenantFeatureFlags("tenant2")
63
-
64
- expect(tenant1Flags).toBeDefined()
65
- expect(tenant1Flags).toEqual([LICENSING])
66
-
67
- expect(tenant2Flags).toBeDefined()
68
- expect(tenant2Flags).toEqual([LICENSING, ONBOARDING_TOUR])
69
- })
70
-
71
- it("Should explicitly add flags to configured tenants only", async () => {
72
- env._set(
73
- "TENANT_FEATURE_FLAGS",
74
- `tenant1:${ONBOARDING_TOUR},tenant1:${LICENSING},tenant2:${LICENSING}`
75
- )
76
-
77
- let tenant1Flags = getTenantFeatureFlags("tenant1")
78
- let tenant2Flags = getTenantFeatureFlags("tenant2")
79
-
80
- expect(tenant1Flags).toBeDefined()
81
- expect(tenant1Flags).toEqual([ONBOARDING_TOUR, LICENSING])
82
-
83
- expect(tenant2Flags).toBeDefined()
84
- expect(tenant2Flags).toEqual([LICENSING])
85
- })
package/src/helpers.ts DELETED
@@ -1,9 +0,0 @@
1
- /**
2
- * Makes sure that a URL has the correct number of slashes, while maintaining the
3
- * http(s):// double slashes.
4
- * @param {string} url The URL to test and remove any extra double slashes.
5
- * @return {string} The updated url.
6
- */
7
- export function checkSlashesInUrl(url: string) {
8
- return url.replace(/(https?:\/\/)|(\/)+/g, "$1$2")
9
- }
package/src/index.ts DELETED
@@ -1,53 +0,0 @@
1
- export * as configs from "./configs"
2
- export * as events from "./events"
3
- export * as migrations from "./migrations"
4
- export * as users from "./users"
5
- export * as roles from "./security/roles"
6
- export * as permissions from "./security/permissions"
7
- export * as accounts from "./accounts"
8
- export * as installation from "./installation"
9
- export * as featureFlags from "./featureFlags"
10
- export * as sessions from "./security/sessions"
11
- export * as platform from "./platform"
12
- export * as auth from "./auth"
13
- export * as constants from "./constants"
14
- export * as logging from "./logging"
15
- export * as middleware from "./middleware"
16
- export * as plugins from "./plugin"
17
- export * as encryption from "./security/encryption"
18
- export * as queue from "./queue"
19
- export * as db from "./db"
20
- export * as context from "./context"
21
- export * as cache from "./cache"
22
- export * as objectStore from "./objectStore"
23
- export * as redis from "./redis"
24
- export { Client as RedisClient } from "./redis"
25
- export * as locks from "./redis/redlockImpl"
26
- export * as utils from "./utils"
27
- export * as errors from "./errors"
28
- export * as timers from "./timers"
29
- export { default as env } from "./environment"
30
- export * as blacklist from "./blacklist"
31
- export * as docUpdates from "./docUpdates"
32
- export { SearchParams } from "./db"
33
- // Add context to tenancy for backwards compatibility
34
- // only do this for external usages to prevent internal
35
- // circular dependencies
36
- import * as context from "./context"
37
- import * as _tenancy from "./tenancy"
38
- export const tenancy = {
39
- ..._tenancy,
40
- ...context,
41
- }
42
-
43
- // expose error classes directly
44
- export * from "./errors"
45
-
46
- // expose constants directly
47
- export * from "./constants"
48
-
49
- // expose package init function
50
- import * as db from "./db"
51
- export const init = (opts: any = {}) => {
52
- db.init(opts.db)
53
- }
@@ -1,107 +0,0 @@
1
- import { newid } from "./utils"
2
- import * as events from "./events"
3
- import { StaticDatabases } from "./db"
4
- import { doWithDB } from "./db"
5
- import { Installation, IdentityType, Database } from "@budibase/types"
6
- import * as context from "./context"
7
- import semver from "semver"
8
- import { bustCache, withCache, TTL, CacheKey } from "./cache/generic"
9
- import environment from "./environment"
10
-
11
- export const getInstall = async (): Promise<Installation> => {
12
- return withCache(CacheKey.INSTALLATION, TTL.ONE_DAY, getInstallFromDB, {
13
- useTenancy: false,
14
- })
15
- }
16
- async function createInstallDoc(platformDb: Database) {
17
- const install: Installation = {
18
- _id: StaticDatabases.PLATFORM_INFO.docs.install,
19
- installId: newid(),
20
- version: environment.VERSION,
21
- }
22
- try {
23
- const resp = await platformDb.put(install)
24
- install._rev = resp.rev
25
- return install
26
- } catch (err: any) {
27
- if (err.status === 409) {
28
- return getInstallFromDB()
29
- } else {
30
- throw err
31
- }
32
- }
33
- }
34
-
35
- export const getInstallFromDB = async (): Promise<Installation> => {
36
- return doWithDB(
37
- StaticDatabases.PLATFORM_INFO.name,
38
- async (platformDb: any) => {
39
- let install: Installation
40
- try {
41
- install = await platformDb.get(
42
- StaticDatabases.PLATFORM_INFO.docs.install
43
- )
44
- } catch (e: any) {
45
- if (e.status === 404) {
46
- install = await createInstallDoc(platformDb)
47
- } else {
48
- throw e
49
- }
50
- }
51
- return install
52
- }
53
- )
54
- }
55
-
56
- const updateVersion = async (version: string): Promise<boolean> => {
57
- try {
58
- await doWithDB(
59
- StaticDatabases.PLATFORM_INFO.name,
60
- async (platformDb: any) => {
61
- const install = await getInstall()
62
- install.version = version
63
- await platformDb.put(install)
64
- await bustCache(CacheKey.INSTALLATION)
65
- }
66
- )
67
- } catch (e: any) {
68
- if (e.status === 409) {
69
- // do nothing - version has already been updated
70
- // likely in clustered environment
71
- return false
72
- }
73
- throw e
74
- }
75
- return true
76
- }
77
-
78
- export const checkInstallVersion = async (): Promise<void> => {
79
- const install = await getInstall()
80
-
81
- const currentVersion = install.version
82
- const newVersion = environment.VERSION
83
-
84
- if (currentVersion !== newVersion) {
85
- const isUpgrade = semver.gt(newVersion, currentVersion)
86
- const isDowngrade = semver.lt(newVersion, currentVersion)
87
-
88
- const success = await updateVersion(newVersion)
89
-
90
- if (success) {
91
- await context.doInIdentityContext(
92
- {
93
- _id: install.installId,
94
- type: IdentityType.INSTALLATION,
95
- },
96
- async () => {
97
- if (isUpgrade) {
98
- await events.installation.upgraded(currentVersion, newVersion)
99
- } else if (isDowngrade) {
100
- await events.installation.downgraded(currentVersion, newVersion)
101
- }
102
- }
103
- )
104
- await events.identification.identifyInstallationGroup(install.installId)
105
- }
106
- }
107
- }
@@ -1,26 +0,0 @@
1
- const NonErrors = ["AccountError"]
2
-
3
- function isSuppressed(e?: any) {
4
- return e && e["suppressAlert"]
5
- }
6
-
7
- export function logAlert(message: string, e?: any) {
8
- if (e && NonErrors.includes(e.name) && isSuppressed(e)) {
9
- return
10
- }
11
- console.error(`bb-alert: ${message}`, e)
12
- }
13
-
14
- export function logAlertWithInfo(
15
- message: string,
16
- db: string,
17
- id: string,
18
- error: any
19
- ) {
20
- message = `${message} - db: ${db} - doc: ${id} - error: `
21
- logAlert(message, error)
22
- }
23
-
24
- export function logWarn(message: string, e?: any) {
25
- console.warn(`bb-warn: ${message}`, e)
26
- }
@@ -1,13 +0,0 @@
1
- import { Header } from "../../constants"
2
- const correlator = require("correlation-id")
3
-
4
- export const setHeader = (headers: any) => {
5
- const correlationId = correlator.getId()
6
- if (correlationId) {
7
- headers[Header.CORRELATION_ID] = correlationId
8
- }
9
- }
10
-
11
- export function getId() {
12
- return correlator.getId()
13
- }
@@ -1 +0,0 @@
1
- export * from "./correlation"
@@ -1,17 +0,0 @@
1
- import { Header } from "../../constants"
2
- import { v4 as uuid } from "uuid"
3
- const correlator = require("correlation-id")
4
-
5
- const correlation = (ctx: any, next: any) => {
6
- // use the provided correlation id header if present
7
- let correlationId = ctx.headers[Header.CORRELATION_ID]
8
- if (!correlationId) {
9
- correlationId = uuid()
10
- }
11
-
12
- return correlator.withId(correlationId, () => {
13
- return next()
14
- })
15
- }
16
-
17
- export default correlation