@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,155 @@
1
+ import { publishEvent } from "../events"
2
+ import {
3
+ Event,
4
+ App,
5
+ AppCreatedEvent,
6
+ AppUpdatedEvent,
7
+ AppDeletedEvent,
8
+ AppPublishedEvent,
9
+ AppUnpublishedEvent,
10
+ AppFileImportedEvent,
11
+ AppTemplateImportedEvent,
12
+ AppVersionUpdatedEvent,
13
+ AppVersionRevertedEvent,
14
+ AppRevertedEvent,
15
+ AppExportedEvent,
16
+ } from "@budibase/types"
17
+
18
+ const created = async (app: App, timestamp?: string | number) => {
19
+ const properties: AppCreatedEvent = {
20
+ appId: app.appId,
21
+ version: app.version,
22
+ audited: {
23
+ name: app.name,
24
+ },
25
+ }
26
+ await publishEvent(Event.APP_CREATED, properties, timestamp)
27
+ }
28
+
29
+ async function updated(app: App) {
30
+ const properties: AppUpdatedEvent = {
31
+ appId: app.appId,
32
+ version: app.version,
33
+ audited: {
34
+ name: app.name,
35
+ },
36
+ }
37
+ await publishEvent(Event.APP_UPDATED, properties)
38
+ }
39
+
40
+ async function deleted(app: App) {
41
+ const properties: AppDeletedEvent = {
42
+ appId: app.appId,
43
+ audited: {
44
+ name: app.name,
45
+ },
46
+ }
47
+ await publishEvent(Event.APP_DELETED, properties)
48
+ }
49
+
50
+ async function published(app: App, timestamp?: string | number) {
51
+ const properties: AppPublishedEvent = {
52
+ appId: app.appId,
53
+ audited: {
54
+ name: app.name,
55
+ },
56
+ }
57
+ await publishEvent(Event.APP_PUBLISHED, properties, timestamp)
58
+ }
59
+
60
+ async function unpublished(app: App) {
61
+ const properties: AppUnpublishedEvent = {
62
+ appId: app.appId,
63
+ audited: {
64
+ name: app.name,
65
+ },
66
+ }
67
+ await publishEvent(Event.APP_UNPUBLISHED, properties)
68
+ }
69
+
70
+ async function fileImported(app: App) {
71
+ const properties: AppFileImportedEvent = {
72
+ appId: app.appId,
73
+ audited: {
74
+ name: app.name,
75
+ },
76
+ }
77
+ await publishEvent(Event.APP_FILE_IMPORTED, properties)
78
+ }
79
+
80
+ async function templateImported(app: App, templateKey: string) {
81
+ const properties: AppTemplateImportedEvent = {
82
+ appId: app.appId,
83
+ templateKey,
84
+ audited: {
85
+ name: app.name,
86
+ },
87
+ }
88
+ await publishEvent(Event.APP_TEMPLATE_IMPORTED, properties)
89
+ }
90
+
91
+ async function versionUpdated(
92
+ app: App,
93
+ currentVersion: string,
94
+ updatedToVersion: string
95
+ ) {
96
+ const properties: AppVersionUpdatedEvent = {
97
+ appId: app.appId,
98
+ currentVersion,
99
+ updatedToVersion,
100
+ audited: {
101
+ name: app.name,
102
+ },
103
+ }
104
+ await publishEvent(Event.APP_VERSION_UPDATED, properties)
105
+ }
106
+
107
+ async function versionReverted(
108
+ app: App,
109
+ currentVersion: string,
110
+ revertedToVersion: string
111
+ ) {
112
+ const properties: AppVersionRevertedEvent = {
113
+ appId: app.appId,
114
+ currentVersion,
115
+ revertedToVersion,
116
+ audited: {
117
+ name: app.name,
118
+ },
119
+ }
120
+ await publishEvent(Event.APP_VERSION_REVERTED, properties)
121
+ }
122
+
123
+ async function reverted(app: App) {
124
+ const properties: AppRevertedEvent = {
125
+ appId: app.appId,
126
+ audited: {
127
+ name: app.name,
128
+ },
129
+ }
130
+ await publishEvent(Event.APP_REVERTED, properties)
131
+ }
132
+
133
+ async function exported(app: App) {
134
+ const properties: AppExportedEvent = {
135
+ appId: app.appId,
136
+ audited: {
137
+ name: app.name,
138
+ },
139
+ }
140
+ await publishEvent(Event.APP_EXPORTED, properties)
141
+ }
142
+
143
+ export default {
144
+ created,
145
+ updated,
146
+ deleted,
147
+ published,
148
+ unpublished,
149
+ fileImported,
150
+ templateImported,
151
+ versionUpdated,
152
+ versionReverted,
153
+ reverted,
154
+ exported,
155
+ }
@@ -0,0 +1,26 @@
1
+ import {
2
+ Event,
3
+ AuditLogSearchParams,
4
+ AuditLogFilteredEvent,
5
+ AuditLogDownloadedEvent,
6
+ } from "@budibase/types"
7
+ import { publishEvent } from "../events"
8
+
9
+ async function filtered(search: AuditLogSearchParams) {
10
+ const properties: AuditLogFilteredEvent = {
11
+ filters: search,
12
+ }
13
+ await publishEvent(Event.AUDIT_LOGS_FILTERED, properties)
14
+ }
15
+
16
+ async function downloaded(search: AuditLogSearchParams) {
17
+ const properties: AuditLogDownloadedEvent = {
18
+ filters: search,
19
+ }
20
+ await publishEvent(Event.AUDIT_LOGS_DOWNLOADED, properties)
21
+ }
22
+
23
+ export default {
24
+ filtered,
25
+ downloaded,
26
+ }
@@ -0,0 +1,73 @@
1
+ import { publishEvent } from "../events"
2
+ import {
3
+ Event,
4
+ LoginEvent,
5
+ LoginSource,
6
+ LogoutEvent,
7
+ SSOActivatedEvent,
8
+ SSOCreatedEvent,
9
+ SSODeactivatedEvent,
10
+ SSOType,
11
+ SSOUpdatedEvent,
12
+ } from "@budibase/types"
13
+ import { identification } from ".."
14
+
15
+ async function login(source: LoginSource, email: string) {
16
+ const identity = await identification.getCurrentIdentity()
17
+ const properties: LoginEvent = {
18
+ userId: identity.id,
19
+ source,
20
+ audited: {
21
+ email,
22
+ },
23
+ }
24
+ await publishEvent(Event.AUTH_LOGIN, properties)
25
+ }
26
+
27
+ async function logout(email?: string) {
28
+ const identity = await identification.getCurrentIdentity()
29
+ const properties: LogoutEvent = {
30
+ userId: identity.id,
31
+ audited: {
32
+ email,
33
+ },
34
+ }
35
+ await publishEvent(Event.AUTH_LOGOUT, properties)
36
+ }
37
+
38
+ async function SSOCreated(type: SSOType, timestamp?: string | number) {
39
+ const properties: SSOCreatedEvent = {
40
+ type,
41
+ }
42
+ await publishEvent(Event.AUTH_SSO_CREATED, properties, timestamp)
43
+ }
44
+
45
+ async function SSOUpdated(type: SSOType) {
46
+ const properties: SSOUpdatedEvent = {
47
+ type,
48
+ }
49
+ await publishEvent(Event.AUTH_SSO_UPDATED, properties)
50
+ }
51
+
52
+ async function SSOActivated(type: SSOType, timestamp?: string | number) {
53
+ const properties: SSOActivatedEvent = {
54
+ type,
55
+ }
56
+ await publishEvent(Event.AUTH_SSO_ACTIVATED, properties, timestamp)
57
+ }
58
+
59
+ async function SSODeactivated(type: SSOType) {
60
+ const properties: SSODeactivatedEvent = {
61
+ type,
62
+ }
63
+ await publishEvent(Event.AUTH_SSO_DEACTIVATED, properties)
64
+ }
65
+
66
+ export default {
67
+ login,
68
+ logout,
69
+ SSOCreated,
70
+ SSOUpdated,
71
+ SSOActivated,
72
+ SSODeactivated,
73
+ }
@@ -0,0 +1,110 @@
1
+ import { publishEvent } from "../events"
2
+ import {
3
+ Automation,
4
+ Event,
5
+ AutomationStep,
6
+ AutomationCreatedEvent,
7
+ AutomationDeletedEvent,
8
+ AutomationTestedEvent,
9
+ AutomationStepCreatedEvent,
10
+ AutomationStepDeletedEvent,
11
+ AutomationTriggerUpdatedEvent,
12
+ AutomationsRunEvent,
13
+ } from "@budibase/types"
14
+
15
+ async function created(automation: Automation, timestamp?: string | number) {
16
+ const properties: AutomationCreatedEvent = {
17
+ appId: automation.appId,
18
+ automationId: automation._id as string,
19
+ triggerId: automation.definition?.trigger?.id,
20
+ triggerType: automation.definition?.trigger?.stepId,
21
+ audited: {
22
+ name: automation.name,
23
+ },
24
+ }
25
+ await publishEvent(Event.AUTOMATION_CREATED, properties, timestamp)
26
+ }
27
+
28
+ async function triggerUpdated(automation: Automation) {
29
+ const properties: AutomationTriggerUpdatedEvent = {
30
+ appId: automation.appId,
31
+ automationId: automation._id as string,
32
+ triggerId: automation.definition?.trigger?.id,
33
+ triggerType: automation.definition?.trigger?.stepId,
34
+ }
35
+ await publishEvent(Event.AUTOMATION_TRIGGER_UPDATED, properties)
36
+ }
37
+
38
+ async function deleted(automation: Automation) {
39
+ const properties: AutomationDeletedEvent = {
40
+ appId: automation.appId,
41
+ automationId: automation._id as string,
42
+ triggerId: automation.definition?.trigger?.id,
43
+ triggerType: automation.definition?.trigger?.stepId,
44
+ audited: {
45
+ name: automation.name,
46
+ },
47
+ }
48
+ await publishEvent(Event.AUTOMATION_DELETED, properties)
49
+ }
50
+
51
+ async function tested(automation: Automation) {
52
+ const properties: AutomationTestedEvent = {
53
+ appId: automation.appId,
54
+ automationId: automation._id as string,
55
+ triggerId: automation.definition?.trigger?.id,
56
+ triggerType: automation.definition?.trigger?.stepId,
57
+ }
58
+ await publishEvent(Event.AUTOMATION_TESTED, properties)
59
+ }
60
+
61
+ const run = async (count: number, timestamp?: string | number) => {
62
+ const properties: AutomationsRunEvent = {
63
+ count,
64
+ }
65
+ await publishEvent(Event.AUTOMATIONS_RUN, properties, timestamp)
66
+ }
67
+
68
+ async function stepCreated(
69
+ automation: Automation,
70
+ step: AutomationStep,
71
+ timestamp?: string | number
72
+ ) {
73
+ const properties: AutomationStepCreatedEvent = {
74
+ appId: automation.appId,
75
+ automationId: automation._id as string,
76
+ triggerId: automation.definition?.trigger?.id,
77
+ triggerType: automation.definition?.trigger?.stepId,
78
+ stepId: step.id!,
79
+ stepType: step.stepId,
80
+ audited: {
81
+ name: automation.name,
82
+ },
83
+ }
84
+ await publishEvent(Event.AUTOMATION_STEP_CREATED, properties, timestamp)
85
+ }
86
+
87
+ async function stepDeleted(automation: Automation, step: AutomationStep) {
88
+ const properties: AutomationStepDeletedEvent = {
89
+ appId: automation.appId,
90
+ automationId: automation._id as string,
91
+ triggerId: automation.definition?.trigger?.id,
92
+ triggerType: automation.definition?.trigger?.stepId,
93
+ stepId: step.id!,
94
+ stepType: step.stepId,
95
+ audited: {
96
+ name: automation.name,
97
+ },
98
+ }
99
+ await publishEvent(Event.AUTOMATION_STEP_DELETED, properties)
100
+ }
101
+
102
+ export default {
103
+ created,
104
+ triggerUpdated,
105
+ deleted,
106
+ tested,
107
+ run,
108
+ stepCreated,
109
+ stepDeleted,
110
+ }
@@ -0,0 +1,74 @@
1
+ import { publishEvent } from "../events"
2
+ import {
3
+ Event,
4
+ AppBackfillSucceededEvent,
5
+ AppBackfillFailedEvent,
6
+ TenantBackfillSucceededEvent,
7
+ TenantBackfillFailedEvent,
8
+ InstallationBackfillSucceededEvent,
9
+ InstallationBackfillFailedEvent,
10
+ } from "@budibase/types"
11
+ import env from "../../environment"
12
+
13
+ const shouldSkip = !env.SELF_HOSTED && !env.isDev()
14
+
15
+ async function appSucceeded(properties: AppBackfillSucceededEvent) {
16
+ if (shouldSkip) {
17
+ return
18
+ }
19
+ await publishEvent(Event.APP_BACKFILL_SUCCEEDED, properties)
20
+ }
21
+
22
+ async function appFailed(error: any) {
23
+ if (shouldSkip) {
24
+ return
25
+ }
26
+ const properties: AppBackfillFailedEvent = {
27
+ error: JSON.stringify(error, Object.getOwnPropertyNames(error)),
28
+ }
29
+ await publishEvent(Event.APP_BACKFILL_FAILED, properties)
30
+ }
31
+
32
+ async function tenantSucceeded(properties: TenantBackfillSucceededEvent) {
33
+ if (shouldSkip) {
34
+ return
35
+ }
36
+ await publishEvent(Event.TENANT_BACKFILL_SUCCEEDED, properties)
37
+ }
38
+
39
+ async function tenantFailed(error: any) {
40
+ if (shouldSkip) {
41
+ return
42
+ }
43
+ const properties: TenantBackfillFailedEvent = {
44
+ error: JSON.stringify(error, Object.getOwnPropertyNames(error)),
45
+ }
46
+ await publishEvent(Event.TENANT_BACKFILL_FAILED, properties)
47
+ }
48
+
49
+ async function installationSucceeded() {
50
+ if (shouldSkip) {
51
+ return
52
+ }
53
+ const properties: InstallationBackfillSucceededEvent = {}
54
+ await publishEvent(Event.INSTALLATION_BACKFILL_SUCCEEDED, properties)
55
+ }
56
+
57
+ async function installationFailed(error: any) {
58
+ if (shouldSkip) {
59
+ return
60
+ }
61
+ const properties: InstallationBackfillFailedEvent = {
62
+ error: JSON.stringify(error, Object.getOwnPropertyNames(error)),
63
+ }
64
+ await publishEvent(Event.INSTALLATION_BACKFILL_FAILED, properties)
65
+ }
66
+
67
+ export default {
68
+ appSucceeded,
69
+ appFailed,
70
+ tenantSucceeded,
71
+ tenantFailed,
72
+ installationSucceeded,
73
+ installationFailed,
74
+ }
@@ -0,0 +1,42 @@
1
+ import {
2
+ AppBackup,
3
+ AppBackupRestoreEvent,
4
+ AppBackupTriggeredEvent,
5
+ AppBackupTrigger,
6
+ AppBackupType,
7
+ Event,
8
+ } from "@budibase/types"
9
+ import { publishEvent } from "../events"
10
+
11
+ async function appBackupRestored(backup: AppBackup) {
12
+ const properties: AppBackupRestoreEvent = {
13
+ appId: backup.appId,
14
+ restoreId: backup._id!,
15
+ backupCreatedAt: backup.timestamp,
16
+ name: backup.name as string,
17
+ }
18
+
19
+ await publishEvent(Event.APP_BACKUP_RESTORED, properties)
20
+ }
21
+
22
+ async function appBackupTriggered(
23
+ appId: string,
24
+ backupId: string,
25
+ type: AppBackupType,
26
+ trigger: AppBackupTrigger,
27
+ name: string
28
+ ) {
29
+ const properties: AppBackupTriggeredEvent = {
30
+ appId: appId,
31
+ backupId,
32
+ type,
33
+ trigger,
34
+ name,
35
+ }
36
+ await publishEvent(Event.APP_BACKUP_TRIGGERED, properties)
37
+ }
38
+
39
+ export default {
40
+ appBackupRestored,
41
+ appBackupTriggered,
42
+ }
@@ -0,0 +1,48 @@
1
+ import { publishEvent } from "../events"
2
+ import {
3
+ Event,
4
+ Datasource,
5
+ DatasourceCreatedEvent,
6
+ DatasourceUpdatedEvent,
7
+ DatasourceDeletedEvent,
8
+ SourceName,
9
+ } from "@budibase/types"
10
+
11
+ function isCustom(datasource: Datasource) {
12
+ const sources = Object.values(SourceName)
13
+ // if not in the base source list, then it must be custom
14
+ return !sources.includes(datasource.source)
15
+ }
16
+
17
+ async function created(datasource: Datasource, timestamp?: string | number) {
18
+ const properties: DatasourceCreatedEvent = {
19
+ datasourceId: datasource._id as string,
20
+ source: datasource.source,
21
+ custom: isCustom(datasource),
22
+ }
23
+ await publishEvent(Event.DATASOURCE_CREATED, properties, timestamp)
24
+ }
25
+
26
+ async function updated(datasource: Datasource) {
27
+ const properties: DatasourceUpdatedEvent = {
28
+ datasourceId: datasource._id as string,
29
+ source: datasource.source,
30
+ custom: isCustom(datasource),
31
+ }
32
+ await publishEvent(Event.DATASOURCE_UPDATED, properties)
33
+ }
34
+
35
+ async function deleted(datasource: Datasource) {
36
+ const properties: DatasourceDeletedEvent = {
37
+ datasourceId: datasource._id as string,
38
+ source: datasource.source,
39
+ custom: isCustom(datasource),
40
+ }
41
+ await publishEvent(Event.DATASOURCE_DELETED, properties)
42
+ }
43
+
44
+ export default {
45
+ created,
46
+ updated,
47
+ deleted,
48
+ }
@@ -0,0 +1,17 @@
1
+ import { publishEvent } from "../events"
2
+ import { Event, SMTPCreatedEvent, SMTPUpdatedEvent } from "@budibase/types"
3
+
4
+ async function SMTPCreated(timestamp?: string | number) {
5
+ const properties: SMTPCreatedEvent = {}
6
+ await publishEvent(Event.EMAIL_SMTP_CREATED, properties, timestamp)
7
+ }
8
+
9
+ async function SMTPUpdated() {
10
+ const properties: SMTPUpdatedEvent = {}
11
+ await publishEvent(Event.EMAIL_SMTP_UPDATED, properties)
12
+ }
13
+
14
+ export default {
15
+ SMTPCreated,
16
+ SMTPUpdated,
17
+ }
@@ -0,0 +1,38 @@
1
+ import {
2
+ Event,
3
+ EnvironmentVariableCreatedEvent,
4
+ EnvironmentVariableDeletedEvent,
5
+ EnvironmentVariableUpgradePanelOpenedEvent,
6
+ } from "@budibase/types"
7
+ import { publishEvent } from "../events"
8
+
9
+ async function created(name: string, environments: string[]) {
10
+ const properties: EnvironmentVariableCreatedEvent = {
11
+ name,
12
+ environments,
13
+ }
14
+ await publishEvent(Event.ENVIRONMENT_VARIABLE_CREATED, properties)
15
+ }
16
+
17
+ async function deleted(name: string) {
18
+ const properties: EnvironmentVariableDeletedEvent = {
19
+ name,
20
+ }
21
+ await publishEvent(Event.ENVIRONMENT_VARIABLE_DELETED, properties)
22
+ }
23
+
24
+ async function upgradePanelOpened(userId: string) {
25
+ const properties: EnvironmentVariableUpgradePanelOpenedEvent = {
26
+ userId,
27
+ }
28
+ await publishEvent(
29
+ Event.ENVIRONMENT_VARIABLE_UPGRADE_PANEL_OPENED,
30
+ properties
31
+ )
32
+ }
33
+
34
+ export default {
35
+ created,
36
+ deleted,
37
+ upgradePanelOpened,
38
+ }
@@ -0,0 +1,99 @@
1
+ import { publishEvent } from "../events"
2
+ import {
3
+ Event,
4
+ UserGroup,
5
+ GroupCreatedEvent,
6
+ GroupDeletedEvent,
7
+ GroupUpdatedEvent,
8
+ GroupUsersAddedEvent,
9
+ GroupUsersDeletedEvent,
10
+ GroupAddedOnboardingEvent,
11
+ GroupPermissionsEditedEvent,
12
+ } from "@budibase/types"
13
+ import { isScim } from "../../context"
14
+
15
+ async function created(group: UserGroup, timestamp?: number) {
16
+ const properties: GroupCreatedEvent = {
17
+ groupId: group._id as string,
18
+ viaScim: isScim(),
19
+ audited: {
20
+ name: group.name,
21
+ },
22
+ }
23
+ await publishEvent(Event.USER_GROUP_CREATED, properties, timestamp)
24
+ }
25
+
26
+ async function updated(group: UserGroup) {
27
+ const properties: GroupUpdatedEvent = {
28
+ groupId: group._id as string,
29
+ viaScim: isScim(),
30
+ audited: {
31
+ name: group.name,
32
+ },
33
+ }
34
+ await publishEvent(Event.USER_GROUP_UPDATED, properties)
35
+ }
36
+
37
+ async function deleted(group: UserGroup) {
38
+ const properties: GroupDeletedEvent = {
39
+ groupId: group._id as string,
40
+ viaScim: isScim(),
41
+ audited: {
42
+ name: group.name,
43
+ },
44
+ }
45
+ await publishEvent(Event.USER_GROUP_DELETED, properties)
46
+ }
47
+
48
+ async function usersAdded(count: number, group: UserGroup) {
49
+ const properties: GroupUsersAddedEvent = {
50
+ count,
51
+ groupId: group._id as string,
52
+ viaScim: isScim(),
53
+ audited: {
54
+ name: group.name,
55
+ },
56
+ }
57
+ await publishEvent(Event.USER_GROUP_USERS_ADDED, properties)
58
+ }
59
+
60
+ async function usersDeleted(count: number, group: UserGroup) {
61
+ const properties: GroupUsersDeletedEvent = {
62
+ count,
63
+ groupId: group._id as string,
64
+ viaScim: isScim(),
65
+ audited: {
66
+ name: group.name,
67
+ },
68
+ }
69
+ await publishEvent(Event.USER_GROUP_USERS_REMOVED, properties)
70
+ }
71
+
72
+ async function createdOnboarding(groupId: string) {
73
+ const properties: GroupAddedOnboardingEvent = {
74
+ groupId: groupId,
75
+ onboarding: true,
76
+ }
77
+ await publishEvent(Event.USER_GROUP_ONBOARDING, properties)
78
+ }
79
+
80
+ async function permissionsEdited(group: UserGroup) {
81
+ const properties: GroupPermissionsEditedEvent = {
82
+ permissions: group.roles!,
83
+ groupId: group._id as string,
84
+ audited: {
85
+ name: group.name,
86
+ },
87
+ }
88
+ await publishEvent(Event.USER_GROUP_PERMISSIONS_EDITED, properties)
89
+ }
90
+
91
+ export default {
92
+ created,
93
+ updated,
94
+ deleted,
95
+ usersAdded,
96
+ usersDeleted,
97
+ createdOnboarding,
98
+ permissionsEdited,
99
+ }
@@ -0,0 +1,24 @@
1
+ export { default as account } from "./account"
2
+ export { default as app } from "./app"
3
+ export { default as auth } from "./auth"
4
+ export { default as automation } from "./automation"
5
+ export { default as datasource } from "./datasource"
6
+ export { default as email } from "./email"
7
+ export { default as license } from "./license"
8
+ export { default as layout } from "./layout"
9
+ export { default as org } from "./org"
10
+ export { default as query } from "./query"
11
+ export { default as role } from "./role"
12
+ export { default as screen } from "./screen"
13
+ export { default as rows } from "./rows"
14
+ export { default as table } from "./table"
15
+ export { default as serve } from "./serve"
16
+ export { default as user } from "./user"
17
+ export { default as view } from "./view"
18
+ export { default as installation } from "./installation"
19
+ export { default as backfill } from "./backfill"
20
+ export { default as group } from "./group"
21
+ export { default as plugin } from "./plugin"
22
+ export { default as backup } from "./backup"
23
+ export { default as environmentVariable } from "./environmentVariable"
24
+ export { default as auditLog } from "./auditLog"