@budibase/types 2.3.20 → 2.3.21-alpha.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 (133) hide show
  1. package/dist/api/account/index.d.ts +1 -0
  2. package/dist/api/account/index.js +1 -0
  3. package/dist/api/account/index.js.map +1 -1
  4. package/dist/api/account/status.d.ts +7 -0
  5. package/dist/api/account/status.js +3 -0
  6. package/dist/api/account/status.js.map +1 -0
  7. package/dist/api/web/auth.d.ts +21 -0
  8. package/dist/api/web/auth.js +3 -0
  9. package/dist/api/web/auth.js.map +1 -0
  10. package/dist/api/web/errors.d.ts +1 -0
  11. package/dist/api/web/global/auditLogs.d.ts +39 -0
  12. package/dist/api/web/global/auditLogs.js +8 -0
  13. package/dist/api/web/global/auditLogs.js.map +1 -0
  14. package/dist/api/web/global/configs.d.ts +19 -0
  15. package/dist/api/web/global/configs.js +3 -0
  16. package/dist/api/web/global/configs.js.map +1 -0
  17. package/dist/api/web/global/index.d.ts +2 -0
  18. package/dist/api/web/global/index.js +2 -0
  19. package/dist/api/web/global/index.js.map +1 -1
  20. package/dist/api/web/index.d.ts +2 -0
  21. package/dist/api/web/index.js +2 -0
  22. package/dist/api/web/index.js.map +1 -1
  23. package/dist/api/web/pagination.d.ts +23 -0
  24. package/dist/api/web/pagination.js +14 -0
  25. package/dist/api/web/pagination.js.map +1 -0
  26. package/dist/api/web/user.d.ts +19 -2
  27. package/dist/documents/account/account.d.ts +11 -4
  28. package/dist/documents/account/account.js +9 -1
  29. package/dist/documents/account/account.js.map +1 -1
  30. package/dist/documents/app/row.d.ts +2 -1
  31. package/dist/documents/app/row.js +1 -0
  32. package/dist/documents/app/row.js.map +1 -1
  33. package/dist/documents/app/table.d.ts +8 -2
  34. package/dist/documents/app/table.js +7 -0
  35. package/dist/documents/app/table.js.map +1 -1
  36. package/dist/documents/global/auditLogs.d.ts +16 -0
  37. package/dist/documents/global/auditLogs.js +5 -0
  38. package/dist/documents/global/auditLogs.js.map +1 -0
  39. package/dist/documents/global/config.d.ts +48 -25
  40. package/dist/documents/global/config.js.map +1 -1
  41. package/dist/documents/global/index.d.ts +1 -0
  42. package/dist/documents/global/index.js +1 -0
  43. package/dist/documents/global/index.js.map +1 -1
  44. package/dist/documents/global/user.d.ts +28 -29
  45. package/dist/documents/global/user.js +15 -1
  46. package/dist/documents/global/user.js.map +1 -1
  47. package/dist/sdk/auditLogs.d.ts +15 -0
  48. package/dist/sdk/auditLogs.js +3 -0
  49. package/dist/sdk/auditLogs.js.map +1 -0
  50. package/dist/sdk/cli/constants.d.ts +18 -0
  51. package/dist/sdk/cli/constants.js +24 -0
  52. package/dist/sdk/cli/constants.js.map +1 -0
  53. package/dist/sdk/cli/index.d.ts +1 -0
  54. package/dist/sdk/cli/index.js +18 -0
  55. package/dist/sdk/cli/index.js.map +1 -0
  56. package/dist/sdk/context.d.ts +2 -1
  57. package/dist/sdk/db.d.ts +18 -1
  58. package/dist/sdk/db.js +6 -1
  59. package/dist/sdk/db.js.map +1 -1
  60. package/dist/sdk/events/app.d.ts +33 -0
  61. package/dist/sdk/events/auditLog.d.ts +8 -0
  62. package/dist/sdk/events/auditLog.js +3 -0
  63. package/dist/sdk/events/auditLog.js.map +1 -0
  64. package/dist/sdk/events/auth.d.ts +6 -0
  65. package/dist/sdk/events/automation.d.ts +12 -0
  66. package/dist/sdk/events/backup.d.ts +2 -0
  67. package/dist/sdk/events/event.d.ts +7 -1
  68. package/dist/sdk/events/event.js +160 -1
  69. package/dist/sdk/events/event.js.map +1 -1
  70. package/dist/sdk/events/identification.d.ts +5 -0
  71. package/dist/sdk/events/index.d.ts +1 -0
  72. package/dist/sdk/events/index.js +1 -0
  73. package/dist/sdk/events/index.js.map +1 -1
  74. package/dist/sdk/events/screen.d.ts +6 -0
  75. package/dist/sdk/events/table.d.ts +15 -0
  76. package/dist/sdk/events/user.d.ts +36 -0
  77. package/dist/sdk/events/userGroup.d.ts +22 -0
  78. package/dist/sdk/index.d.ts +4 -0
  79. package/dist/sdk/index.js +4 -0
  80. package/dist/sdk/index.js.map +1 -1
  81. package/dist/sdk/licensing/feature.d.ts +3 -1
  82. package/dist/sdk/licensing/feature.js +2 -0
  83. package/dist/sdk/licensing/feature.js.map +1 -1
  84. package/dist/sdk/locks.d.ts +2 -1
  85. package/dist/sdk/locks.js +1 -0
  86. package/dist/sdk/locks.js.map +1 -1
  87. package/dist/sdk/sso.d.ts +24 -0
  88. package/dist/sdk/sso.js +3 -0
  89. package/dist/sdk/sso.js.map +1 -0
  90. package/dist/sdk/user.d.ts +11 -0
  91. package/dist/sdk/user.js +3 -0
  92. package/dist/sdk/user.js.map +1 -0
  93. package/dist/tsconfig.build.tsbuildinfo +1 -1
  94. package/package.json +2 -2
  95. package/src/api/account/index.ts +1 -0
  96. package/src/api/account/status.ts +7 -0
  97. package/src/api/web/auth.ts +25 -0
  98. package/src/api/web/errors.ts +1 -0
  99. package/src/api/web/global/auditLogs.ts +51 -0
  100. package/src/api/web/global/configs.ts +23 -0
  101. package/src/api/web/global/index.ts +2 -0
  102. package/src/api/web/index.ts +2 -0
  103. package/src/api/web/pagination.ts +27 -0
  104. package/src/api/web/user.ts +22 -2
  105. package/src/documents/account/account.ts +14 -4
  106. package/src/documents/app/row.ts +1 -0
  107. package/src/documents/app/table.ts +9 -3
  108. package/src/documents/global/auditLogs.ts +19 -0
  109. package/src/documents/global/config.ts +54 -26
  110. package/src/documents/global/index.ts +1 -0
  111. package/src/documents/global/user.ts +40 -30
  112. package/src/sdk/auditLogs.ts +22 -0
  113. package/src/sdk/cli/constants.ts +21 -0
  114. package/src/sdk/cli/index.ts +1 -0
  115. package/src/sdk/context.ts +2 -1
  116. package/src/sdk/db.ts +19 -2
  117. package/src/sdk/events/app.ts +33 -0
  118. package/src/sdk/events/auditLog.ts +10 -0
  119. package/src/sdk/events/auth.ts +6 -0
  120. package/src/sdk/events/automation.ts +12 -0
  121. package/src/sdk/events/backup.ts +2 -0
  122. package/src/sdk/events/event.ts +189 -0
  123. package/src/sdk/events/identification.ts +6 -0
  124. package/src/sdk/events/index.ts +1 -0
  125. package/src/sdk/events/screen.ts +6 -0
  126. package/src/sdk/events/table.ts +15 -0
  127. package/src/sdk/events/user.ts +38 -1
  128. package/src/sdk/events/userGroup.ts +23 -0
  129. package/src/sdk/index.ts +4 -0
  130. package/src/sdk/licensing/feature.ts +2 -0
  131. package/src/sdk/locks.ts +1 -0
  132. package/src/sdk/sso.ts +37 -0
  133. package/src/sdk/user.ts +12 -0
@@ -5,37 +5,55 @@ export interface Config extends Document {
5
5
  config: any
6
6
  }
7
7
 
8
- export interface SMTPConfig extends Config {
9
- config: {
10
- port: number
11
- host: string
12
- from: string
13
- subject: string
14
- secure: boolean
8
+ export interface SMTPInnerConfig {
9
+ port: number
10
+ host: string
11
+ from: string
12
+ subject?: string
13
+ secure: boolean
14
+ auth?: {
15
+ user: string
16
+ pass: string
15
17
  }
18
+ connectionTimeout?: any
19
+ }
20
+
21
+ export interface SMTPConfig extends Config {
22
+ config: SMTPInnerConfig
23
+ }
24
+
25
+ export interface SettingsInnerConfig {
26
+ platformUrl?: string
27
+ company?: string
28
+ logoUrl?: string // Populated on read
29
+ logoUrlEtag?: string
30
+ uniqueTenantId?: string
31
+ analyticsEnabled?: boolean
32
+ isSSOEnforced?: boolean
16
33
  }
17
34
 
18
35
  export interface SettingsConfig extends Config {
19
- config: {
20
- company: string
21
- // Populated on read
22
- logoUrl?: string
23
- logoUrlEtag?: boolean
24
- platformUrl: string
25
- uniqueTenantId?: string
26
- analyticsEnabled?: boolean
27
- }
36
+ config: SettingsInnerConfig
37
+ }
38
+
39
+ export type SSOConfigType = ConfigType.GOOGLE | ConfigType.OIDC
40
+ export type SSOConfig = GoogleInnerConfig | OIDCInnerConfig
41
+
42
+ export interface GoogleInnerConfig {
43
+ clientID: string
44
+ clientSecret: string
45
+ activated: boolean
46
+ /**
47
+ * @deprecated read only
48
+ */
49
+ callbackURL?: string
28
50
  }
29
51
 
30
52
  export interface GoogleConfig extends Config {
31
- config: {
32
- clientID: string
33
- clientSecret: string
34
- activated: boolean
35
- }
53
+ config: GoogleInnerConfig
36
54
  }
37
55
 
38
- export interface OIDCConfiguration {
56
+ export interface OIDCStrategyConfiguration {
39
57
  issuer: string
40
58
  authorizationURL: string
41
59
  tokenURL: string
@@ -45,7 +63,11 @@ export interface OIDCConfiguration {
45
63
  callbackURL: string
46
64
  }
47
65
 
48
- export interface OIDCInnerCfg {
66
+ export interface OIDCConfigs {
67
+ configs: OIDCInnerConfig[]
68
+ }
69
+
70
+ export interface OIDCInnerConfig {
49
71
  configUrl: string
50
72
  clientID: string
51
73
  clientSecret: string
@@ -53,12 +75,18 @@ export interface OIDCInnerCfg {
53
75
  name: string
54
76
  uuid: string
55
77
  activated: boolean
78
+ scopes: string[]
56
79
  }
57
80
 
58
81
  export interface OIDCConfig extends Config {
59
- config: {
60
- configs: OIDCInnerCfg[]
61
- }
82
+ config: OIDCConfigs
83
+ }
84
+
85
+ export interface OIDCWellKnownConfig {
86
+ issuer: string
87
+ authorization_endpoint: string
88
+ token_endpoint: string
89
+ userinfo_endpoint: string
62
90
  }
63
91
 
64
92
  export const isSettingsConfig = (config: Config): config is SettingsConfig =>
@@ -6,3 +6,4 @@ export * from "./quotas"
6
6
  export * from "./schedule"
7
7
  export * from "./templates"
8
8
  export * from "./environmentVariables"
9
+ export * from "./auditLogs"
@@ -1,37 +1,44 @@
1
1
  import { Document } from "../document"
2
2
 
3
- export interface SSOProfile {
4
- id: string
5
- name?: {
6
- givenName?: string
7
- familyName?: string
8
- }
9
- _json: {
10
- email: string
11
- picture: string
12
- }
13
- provider?: string
3
+ // SSO
4
+
5
+ export interface SSOProfileJson {
6
+ email?: string
7
+ picture?: string
14
8
  }
15
9
 
16
- export interface ThirdPartyUser extends Document {
17
- thirdPartyProfile?: SSOProfile["_json"]
18
- firstName?: string
19
- lastName?: string
20
- pictureUrl?: string
21
- profile?: SSOProfile
22
- oauth2?: any
23
- provider?: string
24
- providerType?: string
25
- email: string
26
- userId?: string
27
- forceResetPassword?: boolean
28
- userGroups?: string[]
10
+ export interface OAuth2 {
11
+ accessToken: string
12
+ refreshToken?: string
29
13
  }
30
14
 
31
- export interface User extends ThirdPartyUser {
15
+ export enum SSOProviderType {
16
+ OIDC = "oidc",
17
+ GOOGLE = "google",
18
+ }
19
+
20
+ export interface UserSSO {
21
+ provider: string // the individual provider e.g. Okta, Auth0, Google
22
+ providerType: SSOProviderType
23
+ oauth2?: OAuth2
24
+ thirdPartyProfile?: SSOProfileJson
25
+ }
26
+
27
+ export type SSOUser = User & UserSSO
28
+
29
+ export function isSSOUser(user: User): user is SSOUser {
30
+ return !!(user as SSOUser).providerType
31
+ }
32
+
33
+ // USER
34
+
35
+ export interface User extends Document {
32
36
  tenantId: string
33
37
  email: string
34
38
  userId?: string
39
+ firstName?: string
40
+ lastName?: string
41
+ pictureUrl?: string
35
42
  forceResetPassword?: boolean
36
43
  roles: UserRoles
37
44
  builder?: {
@@ -41,20 +48,23 @@ export interface User extends ThirdPartyUser {
41
48
  global: boolean
42
49
  }
43
50
  password?: string
44
- status?: string
51
+ status?: UserStatus
45
52
  createdAt?: number // override the default createdAt behaviour - users sdk historically set this to Date.now()
46
53
  dayPassRecordedAt?: string
47
- account?: {
48
- authType: string
49
- }
54
+ userGroups?: string[]
50
55
  onboardedAt?: string
51
56
  }
52
57
 
58
+ export enum UserStatus {
59
+ ACTIVE = "active",
60
+ INACTIVE = "inactive",
61
+ }
62
+
53
63
  export interface UserRoles {
54
64
  [key: string]: string
55
65
  }
56
66
 
57
- // utility types
67
+ // UTILITY TYPES
58
68
 
59
69
  export interface BuilderUser extends User {
60
70
  builder: {
@@ -0,0 +1,22 @@
1
+ import { Event, HostInfo } from "./events"
2
+ import { AuditLogDoc } from "../documents"
3
+
4
+ export type AuditWriteOpts = {
5
+ appId?: string
6
+ timestamp?: string | number
7
+ userId?: string
8
+ hostInfo?: HostInfo
9
+ }
10
+
11
+ export type AuditLogFn = (
12
+ event: Event,
13
+ metadata: any,
14
+ opts: AuditWriteOpts
15
+ ) => Promise<AuditLogDoc | undefined>
16
+
17
+ export type AuditLogQueueEvent = {
18
+ event: Event
19
+ properties: any
20
+ opts: AuditWriteOpts
21
+ tenantId: string
22
+ }
@@ -0,0 +1,21 @@
1
+ import { Event } from "../events"
2
+
3
+ export enum CommandWord {
4
+ BACKUPS = "backups",
5
+ HOSTING = "hosting",
6
+ ANALYTICS = "analytics",
7
+ HELP = "help",
8
+ PLUGIN = "plugins",
9
+ }
10
+
11
+ export enum InitType {
12
+ QUICK = "quick",
13
+ DIGITAL_OCEAN = "do",
14
+ }
15
+
16
+ export const AnalyticsEvent = {
17
+ OptOut: "analytics:opt:out",
18
+ OptIn: "analytics:opt:in",
19
+ SelfHostInit: "hosting:init",
20
+ PluginInit: Event.PLUGIN_INIT,
21
+ }
@@ -0,0 +1 @@
1
+ export * from "./constants"
@@ -1,5 +1,5 @@
1
1
  import { User, Account } from "../documents"
2
- import { IdentityType } from "./events"
2
+ import { IdentityType, HostInfo } from "./events"
3
3
 
4
4
  export interface BaseContext {
5
5
  _id: string
@@ -16,6 +16,7 @@ export interface UserContext extends BaseContext, User {
16
16
  _id: string
17
17
  tenantId: string
18
18
  account?: Account
19
+ hostInfo: HostInfo
19
20
  }
20
21
 
21
22
  export type IdentityContext = BaseContext | AccountUserContext | UserContext
package/src/sdk/db.ts CHANGED
@@ -1,6 +1,11 @@
1
- import PouchDB from "pouchdb"
2
1
  import Nano from "@budibase/nano"
3
2
  import { AllDocsResponse, AnyDocument, Document } from "../"
3
+ import { Writable } from "stream"
4
+
5
+ export enum SearchIndex {
6
+ ROWS = "rows",
7
+ AUDIT = "audit",
8
+ }
4
9
 
5
10
  export type PouchOptions = {
6
11
  inMemory?: boolean
@@ -64,6 +69,18 @@ export const isDocument = (doc: any): doc is Document => {
64
69
  return typeof doc === "object" && doc._id && doc._rev
65
70
  }
66
71
 
72
+ export interface DatabaseDumpOpts {
73
+ filter?: (doc: AnyDocument) => boolean
74
+ batch_size?: number
75
+ batch_limit?: number
76
+ style?: "main_only" | "all_docs"
77
+ timeout?: number
78
+ doc_ids?: string[]
79
+ query_params?: any
80
+ view?: string
81
+ selector?: any
82
+ }
83
+
67
84
  export interface Database {
68
85
  name: string
69
86
 
@@ -88,7 +105,7 @@ export interface Database {
88
105
  compact(): Promise<Nano.OkResponse | void>
89
106
  // these are all PouchDB related functions that are rarely used - in future
90
107
  // should be replaced by better typed/non-pouch implemented methods
91
- dump(...args: any[]): Promise<any>
108
+ dump(stream: Writable, opts?: DatabaseDumpOpts): Promise<any>
92
109
  load(...args: any[]): Promise<any>
93
110
  createIndex(...args: any[]): Promise<any>
94
111
  deleteIndex(...args: any[]): Promise<any>
@@ -3,50 +3,83 @@ import { BaseEvent } from "./event"
3
3
  export interface AppCreatedEvent extends BaseEvent {
4
4
  appId: string
5
5
  version: string
6
+ audited: {
7
+ name: string
8
+ }
6
9
  }
7
10
 
8
11
  export interface AppUpdatedEvent extends BaseEvent {
9
12
  appId: string
10
13
  version: string
14
+ audited: {
15
+ name: string
16
+ }
11
17
  }
12
18
 
13
19
  export interface AppDeletedEvent extends BaseEvent {
14
20
  appId: string
21
+ audited: {
22
+ name: string
23
+ }
15
24
  }
16
25
 
17
26
  export interface AppPublishedEvent extends BaseEvent {
18
27
  appId: string
28
+ audited: {
29
+ name: string
30
+ }
19
31
  }
20
32
 
21
33
  export interface AppUnpublishedEvent extends BaseEvent {
22
34
  appId: string
35
+ audited: {
36
+ name: string
37
+ }
23
38
  }
24
39
 
25
40
  export interface AppFileImportedEvent extends BaseEvent {
26
41
  appId: string
42
+ audited: {
43
+ name: string
44
+ }
27
45
  }
28
46
 
29
47
  export interface AppTemplateImportedEvent extends BaseEvent {
30
48
  appId: string
31
49
  templateKey: string
50
+ audited: {
51
+ name: string
52
+ }
32
53
  }
33
54
 
34
55
  export interface AppVersionUpdatedEvent extends BaseEvent {
35
56
  appId: string
36
57
  currentVersion: string
37
58
  updatedToVersion: string
59
+ audited: {
60
+ name: string
61
+ }
38
62
  }
39
63
 
40
64
  export interface AppVersionRevertedEvent extends BaseEvent {
41
65
  appId: string
42
66
  currentVersion: string
43
67
  revertedToVersion: string
68
+ audited: {
69
+ name: string
70
+ }
44
71
  }
45
72
 
46
73
  export interface AppRevertedEvent extends BaseEvent {
47
74
  appId: string
75
+ audited: {
76
+ name: string
77
+ }
48
78
  }
49
79
 
50
80
  export interface AppExportedEvent extends BaseEvent {
51
81
  appId: string
82
+ audited: {
83
+ name: string
84
+ }
52
85
  }
@@ -0,0 +1,10 @@
1
+ import { BaseEvent } from "./event"
2
+ import { AuditLogSearchParams } from "../../api"
3
+
4
+ export interface AuditLogFilteredEvent extends BaseEvent {
5
+ filters: AuditLogSearchParams
6
+ }
7
+
8
+ export interface AuditLogDownloadedEvent extends BaseEvent {
9
+ filters: AuditLogSearchParams
10
+ }
@@ -7,10 +7,16 @@ export type SSOType = ConfigType.OIDC | ConfigType.GOOGLE
7
7
  export interface LoginEvent extends BaseEvent {
8
8
  userId: string
9
9
  source: LoginSource
10
+ audited: {
11
+ email: string
12
+ }
10
13
  }
11
14
 
12
15
  export interface LogoutEvent extends BaseEvent {
13
16
  userId: string
17
+ audited: {
18
+ email?: string
19
+ }
14
20
  }
15
21
 
16
22
  export interface SSOCreatedEvent extends BaseEvent {
@@ -5,6 +5,9 @@ export interface AutomationCreatedEvent extends BaseEvent {
5
5
  automationId: string
6
6
  triggerId: string
7
7
  triggerType: string
8
+ audited: {
9
+ name: string
10
+ }
8
11
  }
9
12
 
10
13
  export interface AutomationTriggerUpdatedEvent extends BaseEvent {
@@ -19,6 +22,9 @@ export interface AutomationDeletedEvent extends BaseEvent {
19
22
  automationId: string
20
23
  triggerId: string
21
24
  triggerType: string
25
+ audited: {
26
+ name: string
27
+ }
22
28
  }
23
29
 
24
30
  export interface AutomationTestedEvent extends BaseEvent {
@@ -35,6 +41,9 @@ export interface AutomationStepCreatedEvent extends BaseEvent {
35
41
  triggerType: string
36
42
  stepId: string
37
43
  stepType: string
44
+ audited: {
45
+ name: string
46
+ }
38
47
  }
39
48
 
40
49
  export interface AutomationStepDeletedEvent extends BaseEvent {
@@ -44,6 +53,9 @@ export interface AutomationStepDeletedEvent extends BaseEvent {
44
53
  triggerType: string
45
54
  stepId: string
46
55
  stepType: string
56
+ audited: {
57
+ name: string
58
+ }
47
59
  }
48
60
 
49
61
  export interface AutomationsRunEvent extends BaseEvent {
@@ -5,6 +5,7 @@ export interface AppBackupRestoreEvent extends BaseEvent {
5
5
  appId: string
6
6
  restoreId: string
7
7
  backupCreatedAt: string
8
+ name: string
8
9
  }
9
10
 
10
11
  export interface AppBackupTriggeredEvent extends BaseEvent {
@@ -12,4 +13,5 @@ export interface AppBackupTriggeredEvent extends BaseEvent {
12
13
  appId: string
13
14
  trigger: AppBackupTrigger
14
15
  type: AppBackupType
16
+ name: string
15
17
  }
@@ -180,6 +180,190 @@ export enum Event {
180
180
  ENVIRONMENT_VARIABLE_CREATED = "environment_variable:created",
181
181
  ENVIRONMENT_VARIABLE_DELETED = "environment_variable:deleted",
182
182
  ENVIRONMENT_VARIABLE_UPGRADE_PANEL_OPENED = "environment_variable:upgrade_panel_opened",
183
+
184
+ // AUDIT LOG
185
+ AUDIT_LOGS_FILTERED = "audit_log:filtered",
186
+ AUDIT_LOGS_DOWNLOADED = "audit_log:downloaded",
187
+ }
188
+
189
+ // all events that are not audited have been added to this record as undefined, this means
190
+ // that Typescript can protect us against new events being added and auditing of those
191
+ // events not being considered. This might be a little ugly, but provides a level of
192
+ // Typescript build protection for the audit log feature, any new event also needs to be
193
+ // added to this map, during which the developer will need to consider if it should be
194
+ // a user facing event or not.
195
+ export const AuditedEventFriendlyName: Record<Event, string | undefined> = {
196
+ // USER
197
+ [Event.USER_CREATED]: `User "{{ email }}" created`,
198
+ [Event.USER_UPDATED]: `User "{{ email }}" updated`,
199
+ [Event.USER_DELETED]: `User "{{ email }}" deleted`,
200
+ [Event.USER_PERMISSION_ADMIN_ASSIGNED]: `User "{{ email }}" admin role assigned`,
201
+ [Event.USER_PERMISSION_ADMIN_REMOVED]: `User "{{ email }}" admin role removed`,
202
+ [Event.USER_PERMISSION_BUILDER_ASSIGNED]: `User "{{ email }}" builder role assigned`,
203
+ [Event.USER_PERMISSION_BUILDER_REMOVED]: `User "{{ email }}" builder role removed`,
204
+ [Event.USER_INVITED]: `User "{{ email }}" invited`,
205
+ [Event.USER_INVITED_ACCEPTED]: `User "{{ email }}" accepted invite`,
206
+ [Event.USER_PASSWORD_UPDATED]: `User "{{ email }}" password updated`,
207
+ [Event.USER_PASSWORD_RESET_REQUESTED]: `User "{{ email }}" password reset requested`,
208
+ [Event.USER_PASSWORD_RESET]: `User "{{ email }}" password reset`,
209
+ [Event.USER_GROUP_CREATED]: `User group "{{ name }}" created`,
210
+ [Event.USER_GROUP_UPDATED]: `User group "{{ name }}" updated`,
211
+ [Event.USER_GROUP_DELETED]: `User group "{{ name }}" deleted`,
212
+ [Event.USER_GROUP_USERS_ADDED]: `User group "{{ name }}" {{ count }} users added`,
213
+ [Event.USER_GROUP_USERS_REMOVED]: `User group "{{ name }}" {{ count }} users removed`,
214
+ [Event.USER_GROUP_PERMISSIONS_EDITED]: `User group "{{ name }}" permissions edited`,
215
+ [Event.USER_PASSWORD_FORCE_RESET]: undefined,
216
+ [Event.USER_GROUP_ONBOARDING]: undefined,
217
+ [Event.USER_ONBOARDING_COMPLETE]: undefined,
218
+
219
+ // EMAIL
220
+ [Event.EMAIL_SMTP_CREATED]: `Email configuration created`,
221
+ [Event.EMAIL_SMTP_UPDATED]: `Email configuration updated`,
222
+
223
+ // AUTH
224
+ [Event.AUTH_SSO_CREATED]: `SSO configuration created`,
225
+ [Event.AUTH_SSO_UPDATED]: `SSO configuration updated`,
226
+ [Event.AUTH_SSO_ACTIVATED]: `SSO configuration activated`,
227
+ [Event.AUTH_SSO_DEACTIVATED]: `SSO configuration deactivated`,
228
+ [Event.AUTH_LOGIN]: `User "{{ email }}" logged in`,
229
+ [Event.AUTH_LOGOUT]: `User "{{ email }}" logged out`,
230
+
231
+ // ORG
232
+ [Event.ORG_NAME_UPDATED]: `Organisation name updated`,
233
+ [Event.ORG_LOGO_UPDATED]: `Organisation logo updated`,
234
+ [Event.ORG_PLATFORM_URL_UPDATED]: `Organisation platform URL updated`,
235
+
236
+ // APP
237
+ [Event.APP_CREATED]: `App "{{ name }}" created`,
238
+ [Event.APP_UPDATED]: `App "{{ name }}" updated`,
239
+ [Event.APP_DELETED]: `App "{{ name }}" deleted`,
240
+ [Event.APP_PUBLISHED]: `App "{{ name }}" published`,
241
+ [Event.APP_UNPUBLISHED]: `App "{{ name }}" unpublished`,
242
+ [Event.APP_TEMPLATE_IMPORTED]: `App "{{ name }}" template imported`,
243
+ [Event.APP_FILE_IMPORTED]: `App "{{ name }}" file imported`,
244
+ [Event.APP_VERSION_UPDATED]: `App "{{ name }}" version updated`,
245
+ [Event.APP_VERSION_REVERTED]: `App "{{ name }}" version reverted`,
246
+ [Event.APP_REVERTED]: `App "{{ name }}" reverted`,
247
+ [Event.APP_EXPORTED]: `App "{{ name }}" exported`,
248
+ [Event.APP_BACKUP_RESTORED]: `App backup "{{ name }}" restored`,
249
+ [Event.APP_BACKUP_TRIGGERED]: `App backup "{{ name }}" triggered`,
250
+
251
+ // DATASOURCE
252
+ [Event.DATASOURCE_CREATED]: `Datasource created`,
253
+ [Event.DATASOURCE_UPDATED]: `Datasource updated`,
254
+ [Event.DATASOURCE_DELETED]: `Datasource deleted`,
255
+
256
+ // QUERY
257
+ [Event.QUERY_CREATED]: `Query created`,
258
+ [Event.QUERY_UPDATED]: `Query updated`,
259
+ [Event.QUERY_DELETED]: `Query deleted`,
260
+ [Event.QUERY_IMPORT]: `Query import`,
261
+ [Event.QUERIES_RUN]: undefined,
262
+ [Event.QUERY_PREVIEWED]: undefined,
263
+
264
+ // TABLE
265
+ [Event.TABLE_CREATED]: `Table "{{ name }}" created`,
266
+ [Event.TABLE_UPDATED]: `Table "{{ name }}" updated`,
267
+ [Event.TABLE_DELETED]: `Table "{{ name }}" deleted`,
268
+ [Event.TABLE_EXPORTED]: `Table "{{ name }}" exported`,
269
+ [Event.TABLE_IMPORTED]: `Table "{{ name }}" imported`,
270
+ [Event.TABLE_DATA_IMPORTED]: `Data imported to table`,
271
+
272
+ // ROWS
273
+ [Event.ROWS_CREATED]: `Rows created`,
274
+ [Event.ROWS_IMPORTED]: `Rows imported`,
275
+
276
+ // AUTOMATION
277
+ [Event.AUTOMATION_CREATED]: `Automation "{{ name }}" created`,
278
+ [Event.AUTOMATION_DELETED]: `Automation "{{ name }}" deleted`,
279
+ [Event.AUTOMATION_STEP_CREATED]: `Automation "{{ name }}" step added`,
280
+ [Event.AUTOMATION_STEP_DELETED]: `Automation "{{ name }}" step removed`,
281
+ [Event.AUTOMATION_TESTED]: undefined,
282
+ [Event.AUTOMATIONS_RUN]: undefined,
283
+ [Event.AUTOMATION_TRIGGER_UPDATED]: undefined,
284
+
285
+ // SCREEN
286
+ [Event.SCREEN_CREATED]: `Screen "{{ name }}" created`,
287
+ [Event.SCREEN_DELETED]: `Screen "{{ name }}" deleted`,
288
+
289
+ // COMPONENT
290
+ [Event.COMPONENT_CREATED]: `Component created`,
291
+ [Event.COMPONENT_DELETED]: `Component deleted`,
292
+
293
+ // ENVIRONMENT VARIABLE
294
+ [Event.ENVIRONMENT_VARIABLE_CREATED]: `Environment variable created`,
295
+ [Event.ENVIRONMENT_VARIABLE_DELETED]: `Environment variable deleted`,
296
+ [Event.ENVIRONMENT_VARIABLE_UPGRADE_PANEL_OPENED]: undefined,
297
+
298
+ // PLUGIN
299
+ [Event.PLUGIN_IMPORTED]: `Plugin imported`,
300
+ [Event.PLUGIN_DELETED]: `Plugin deleted`,
301
+ [Event.PLUGIN_INIT]: undefined,
302
+
303
+ // ROLE - NOT AUDITED
304
+ [Event.ROLE_CREATED]: undefined,
305
+ [Event.ROLE_UPDATED]: undefined,
306
+ [Event.ROLE_DELETED]: undefined,
307
+ [Event.ROLE_ASSIGNED]: undefined,
308
+ [Event.ROLE_UNASSIGNED]: undefined,
309
+
310
+ // LICENSE - NOT AUDITED
311
+ [Event.LICENSE_PLAN_CHANGED]: undefined,
312
+ [Event.LICENSE_TIER_CHANGED]: undefined,
313
+ [Event.LICENSE_ACTIVATED]: undefined,
314
+ [Event.LICENSE_PAYMENT_FAILED]: undefined,
315
+ [Event.LICENSE_PAYMENT_RECOVERED]: undefined,
316
+ [Event.LICENSE_CHECKOUT_OPENED]: undefined,
317
+ [Event.LICENSE_CHECKOUT_SUCCESS]: undefined,
318
+ [Event.LICENSE_PORTAL_OPENED]: undefined,
319
+
320
+ // ACCOUNT - NOT AUDITED
321
+ [Event.ACCOUNT_CREATED]: undefined,
322
+ [Event.ACCOUNT_DELETED]: undefined,
323
+ [Event.ACCOUNT_VERIFIED]: undefined,
324
+
325
+ // BACKFILL - NOT AUDITED
326
+ [Event.APP_BACKFILL_SUCCEEDED]: undefined,
327
+ [Event.APP_BACKFILL_FAILED]: undefined,
328
+ [Event.TENANT_BACKFILL_SUCCEEDED]: undefined,
329
+ [Event.TENANT_BACKFILL_FAILED]: undefined,
330
+ [Event.INSTALLATION_BACKFILL_SUCCEEDED]: undefined,
331
+ [Event.INSTALLATION_BACKFILL_FAILED]: undefined,
332
+
333
+ // LAYOUT - NOT AUDITED
334
+ [Event.LAYOUT_CREATED]: undefined,
335
+ [Event.LAYOUT_DELETED]: undefined,
336
+
337
+ // VIEW - NOT AUDITED
338
+ [Event.VIEW_CREATED]: undefined,
339
+ [Event.VIEW_UPDATED]: undefined,
340
+ [Event.VIEW_DELETED]: undefined,
341
+ [Event.VIEW_EXPORTED]: undefined,
342
+ [Event.VIEW_FILTER_CREATED]: undefined,
343
+ [Event.VIEW_FILTER_UPDATED]: undefined,
344
+ [Event.VIEW_FILTER_DELETED]: undefined,
345
+ [Event.VIEW_CALCULATION_CREATED]: undefined,
346
+ [Event.VIEW_CALCULATION_UPDATED]: undefined,
347
+ [Event.VIEW_CALCULATION_DELETED]: undefined,
348
+
349
+ // SERVED - NOT AUDITED
350
+ [Event.SERVED_BUILDER]: undefined,
351
+ [Event.SERVED_APP]: undefined,
352
+ [Event.SERVED_APP_PREVIEW]: undefined,
353
+
354
+ // ANALYTICS - NOT AUDITED
355
+ [Event.ANALYTICS_OPT_OUT]: undefined,
356
+ [Event.ANALYTICS_OPT_IN]: undefined,
357
+
358
+ // INSTALLATION - NOT AUDITED
359
+ [Event.INSTALLATION_VERSION_CHECKED]: undefined,
360
+ [Event.INSTALLATION_VERSION_UPGRADED]: undefined,
361
+ [Event.INSTALLATION_VERSION_DOWNGRADED]: undefined,
362
+ [Event.INSTALLATION_FIRST_STARTUP]: undefined,
363
+
364
+ // AUDIT LOG - NOT AUDITED
365
+ [Event.AUDIT_LOGS_FILTERED]: undefined,
366
+ [Event.AUDIT_LOGS_DOWNLOADED]: undefined,
183
367
  }
184
368
 
185
369
  // properties added at the final stage of the event pipeline
@@ -191,6 +375,11 @@ export interface BaseEvent {
191
375
  installationId?: string
192
376
  tenantId?: string
193
377
  hosting?: Hosting
378
+ // any props in the audited section will be removed before passing events
379
+ // up out of system (purely for use with auditing)
380
+ audited?: {
381
+ [key: string]: any
382
+ }
194
383
  }
195
384
 
196
385
  export type TableExportFormat = "json" | "csv"