@budibase/types 2.5.8 → 2.5.10-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/dist/cjs/api/account/accounts.d.ts +11 -0
  2. package/dist/cjs/api/account/accounts.js +3 -0
  3. package/dist/cjs/api/account/accounts.js.map +1 -0
  4. package/dist/cjs/api/account/index.d.ts +1 -0
  5. package/dist/cjs/api/account/index.js +1 -0
  6. package/dist/cjs/api/account/index.js.map +1 -1
  7. package/dist/cjs/api/account/license.d.ts +15 -2
  8. package/dist/cjs/api/web/app/datasource.d.ts +15 -0
  9. package/dist/cjs/api/web/app/datasource.js +3 -0
  10. package/dist/cjs/api/web/app/datasource.js.map +1 -0
  11. package/dist/cjs/api/web/app/index.d.ts +1 -0
  12. package/dist/cjs/api/web/app/index.js +1 -0
  13. package/dist/cjs/api/web/app/index.js.map +1 -1
  14. package/dist/cjs/api/web/global/index.d.ts +1 -0
  15. package/dist/cjs/api/web/global/index.js +1 -0
  16. package/dist/cjs/api/web/global/index.js.map +1 -1
  17. package/dist/cjs/api/web/global/scim/groups.d.ts +27 -0
  18. package/dist/cjs/api/web/global/scim/groups.js +3 -0
  19. package/dist/cjs/api/web/global/scim/groups.js.map +1 -0
  20. package/dist/cjs/api/web/global/scim/index.d.ts +3 -0
  21. package/dist/cjs/api/web/global/scim/index.js +20 -0
  22. package/dist/cjs/api/web/global/scim/index.js.map +1 -0
  23. package/dist/cjs/api/web/global/scim/shared.d.ts +12 -0
  24. package/dist/cjs/api/web/global/scim/shared.js +3 -0
  25. package/dist/cjs/api/web/global/scim/shared.js.map +1 -0
  26. package/dist/cjs/api/web/global/scim/users.d.ts +48 -0
  27. package/dist/cjs/api/web/global/scim/users.js +3 -0
  28. package/dist/cjs/api/web/global/scim/users.js.map +1 -0
  29. package/dist/cjs/api/web/index.d.ts +1 -0
  30. package/dist/cjs/api/web/index.js +1 -0
  31. package/dist/cjs/api/web/index.js.map +1 -1
  32. package/dist/cjs/api/web/pagination.d.ts +1 -1
  33. package/dist/cjs/api/web/system/environment.d.ts +8 -0
  34. package/dist/cjs/api/web/system/environment.js +3 -0
  35. package/dist/cjs/api/web/system/environment.js.map +1 -0
  36. package/dist/cjs/api/web/system/index.d.ts +1 -0
  37. package/dist/cjs/api/web/system/index.js +18 -0
  38. package/dist/cjs/api/web/system/index.js.map +1 -0
  39. package/dist/cjs/api/web/user.d.ts +17 -15
  40. package/dist/cjs/documents/account/account.d.ts +7 -1
  41. package/dist/cjs/documents/account/account.js.map +1 -1
  42. package/dist/cjs/documents/app/automation.d.ts +59 -9
  43. package/dist/cjs/documents/app/automation.js +38 -1
  44. package/dist/cjs/documents/app/automation.js.map +1 -1
  45. package/dist/cjs/documents/app/query.d.ts +6 -0
  46. package/dist/cjs/documents/app/table.d.ts +3 -0
  47. package/dist/cjs/documents/app/user.d.ts +1 -0
  48. package/dist/cjs/documents/global/config.d.ts +14 -11
  49. package/dist/cjs/documents/global/config.js +4 -1
  50. package/dist/cjs/documents/global/config.js.map +1 -1
  51. package/dist/cjs/documents/global/plugin.d.ts +2 -1
  52. package/dist/cjs/documents/global/plugin.js +1 -0
  53. package/dist/cjs/documents/global/plugin.js.map +1 -1
  54. package/dist/cjs/documents/global/quotas.d.ts +1 -0
  55. package/dist/cjs/documents/global/user.d.ts +3 -0
  56. package/dist/cjs/documents/global/user.js.map +1 -1
  57. package/dist/cjs/documents/global/userGroup.d.ts +4 -0
  58. package/dist/cjs/sdk/db.d.ts +2 -1
  59. package/dist/cjs/sdk/db.js +1 -0
  60. package/dist/cjs/sdk/db.js.map +1 -1
  61. package/dist/cjs/sdk/events/event.d.ts +14 -1
  62. package/dist/cjs/sdk/events/event.js +25 -11
  63. package/dist/cjs/sdk/events/event.js.map +1 -1
  64. package/dist/cjs/sdk/events/identification.d.ts +1 -0
  65. package/dist/cjs/sdk/events/license.d.ts +5 -6
  66. package/dist/cjs/sdk/events/user.d.ts +3 -0
  67. package/dist/cjs/sdk/events/userGroup.d.ts +5 -0
  68. package/dist/cjs/sdk/licensing/billing.d.ts +1 -0
  69. package/dist/cjs/sdk/licensing/feature.d.ts +6 -1
  70. package/dist/cjs/sdk/licensing/feature.js +1 -0
  71. package/dist/cjs/sdk/licensing/feature.js.map +1 -1
  72. package/dist/cjs/sdk/licensing/license.d.ts +3 -2
  73. package/dist/cjs/sdk/licensing/plan.d.ts +23 -6
  74. package/dist/cjs/sdk/licensing/plan.js +9 -1
  75. package/dist/cjs/sdk/licensing/plan.js.map +1 -1
  76. package/dist/cjs/sdk/licensing/quota.d.ts +4 -5
  77. package/dist/cjs/sdk/licensing/quota.js +1 -1
  78. package/dist/cjs/sdk/licensing/quota.js.map +1 -1
  79. package/dist/cjs/sdk/locks.d.ts +10 -2
  80. package/dist/cjs/sdk/locks.js +2 -0
  81. package/dist/cjs/sdk/locks.js.map +1 -1
  82. package/dist/cjs/shared/index.d.ts +1 -0
  83. package/dist/cjs/shared/index.js +18 -0
  84. package/dist/cjs/shared/index.js.map +1 -0
  85. package/dist/cjs/shared/typeUtils.d.ts +3 -0
  86. package/dist/cjs/shared/typeUtils.js +3 -0
  87. package/dist/cjs/shared/typeUtils.js.map +1 -0
  88. package/dist/cjs/tsconfig-cjs.build.tsbuildinfo +1 -1
  89. package/dist/mjs/api/account/accounts.d.ts +11 -0
  90. package/dist/mjs/api/account/accounts.js +2 -0
  91. package/dist/mjs/api/account/accounts.js.map +1 -0
  92. package/dist/mjs/api/account/index.d.ts +1 -0
  93. package/dist/mjs/api/account/index.js +1 -0
  94. package/dist/mjs/api/account/index.js.map +1 -1
  95. package/dist/mjs/api/account/license.d.ts +15 -2
  96. package/dist/mjs/api/web/app/datasource.d.ts +15 -0
  97. package/dist/mjs/api/web/app/datasource.js +2 -0
  98. package/dist/mjs/api/web/app/datasource.js.map +1 -0
  99. package/dist/mjs/api/web/app/index.d.ts +1 -0
  100. package/dist/mjs/api/web/app/index.js +1 -0
  101. package/dist/mjs/api/web/app/index.js.map +1 -1
  102. package/dist/mjs/api/web/global/index.d.ts +1 -0
  103. package/dist/mjs/api/web/global/index.js +1 -0
  104. package/dist/mjs/api/web/global/index.js.map +1 -1
  105. package/dist/mjs/api/web/global/scim/groups.d.ts +27 -0
  106. package/dist/mjs/api/web/global/scim/groups.js +2 -0
  107. package/dist/mjs/api/web/global/scim/groups.js.map +1 -0
  108. package/dist/mjs/api/web/global/scim/index.d.ts +3 -0
  109. package/dist/mjs/api/web/global/scim/index.js +4 -0
  110. package/dist/mjs/api/web/global/scim/index.js.map +1 -0
  111. package/dist/mjs/api/web/global/scim/shared.d.ts +12 -0
  112. package/dist/mjs/api/web/global/scim/shared.js +2 -0
  113. package/dist/mjs/api/web/global/scim/shared.js.map +1 -0
  114. package/dist/mjs/api/web/global/scim/users.d.ts +48 -0
  115. package/dist/mjs/api/web/global/scim/users.js +2 -0
  116. package/dist/mjs/api/web/global/scim/users.js.map +1 -0
  117. package/dist/mjs/api/web/index.d.ts +1 -0
  118. package/dist/mjs/api/web/index.js +1 -0
  119. package/dist/mjs/api/web/index.js.map +1 -1
  120. package/dist/mjs/api/web/pagination.d.ts +1 -1
  121. package/dist/mjs/api/web/system/environment.d.ts +8 -0
  122. package/dist/mjs/api/web/system/environment.js +2 -0
  123. package/dist/mjs/api/web/system/environment.js.map +1 -0
  124. package/dist/mjs/api/web/system/index.d.ts +1 -0
  125. package/dist/mjs/api/web/system/index.js +2 -0
  126. package/dist/mjs/api/web/system/index.js.map +1 -0
  127. package/dist/mjs/api/web/user.d.ts +17 -15
  128. package/dist/mjs/documents/account/account.d.ts +7 -1
  129. package/dist/mjs/documents/account/account.js +1 -1
  130. package/dist/mjs/documents/account/account.js.map +1 -1
  131. package/dist/mjs/documents/app/automation.d.ts +59 -9
  132. package/dist/mjs/documents/app/automation.js +37 -0
  133. package/dist/mjs/documents/app/automation.js.map +1 -1
  134. package/dist/mjs/documents/app/query.d.ts +6 -0
  135. package/dist/mjs/documents/app/table.d.ts +3 -0
  136. package/dist/mjs/documents/app/user.d.ts +1 -0
  137. package/dist/mjs/documents/global/config.d.ts +14 -11
  138. package/dist/mjs/documents/global/config.js +2 -0
  139. package/dist/mjs/documents/global/config.js.map +1 -1
  140. package/dist/mjs/documents/global/plugin.d.ts +2 -1
  141. package/dist/mjs/documents/global/plugin.js +1 -0
  142. package/dist/mjs/documents/global/plugin.js.map +1 -1
  143. package/dist/mjs/documents/global/quotas.d.ts +1 -0
  144. package/dist/mjs/documents/global/user.d.ts +3 -0
  145. package/dist/mjs/documents/global/user.js.map +1 -1
  146. package/dist/mjs/documents/global/userGroup.d.ts +4 -0
  147. package/dist/mjs/sdk/db.d.ts +2 -1
  148. package/dist/mjs/sdk/db.js +1 -0
  149. package/dist/mjs/sdk/db.js.map +1 -1
  150. package/dist/mjs/sdk/events/event.d.ts +14 -1
  151. package/dist/mjs/sdk/events/event.js +24 -10
  152. package/dist/mjs/sdk/events/event.js.map +1 -1
  153. package/dist/mjs/sdk/events/identification.d.ts +1 -0
  154. package/dist/mjs/sdk/events/license.d.ts +5 -6
  155. package/dist/mjs/sdk/events/user.d.ts +3 -0
  156. package/dist/mjs/sdk/events/userGroup.d.ts +5 -0
  157. package/dist/mjs/sdk/licensing/billing.d.ts +1 -0
  158. package/dist/mjs/sdk/licensing/feature.d.ts +6 -1
  159. package/dist/mjs/sdk/licensing/feature.js +1 -0
  160. package/dist/mjs/sdk/licensing/feature.js.map +1 -1
  161. package/dist/mjs/sdk/licensing/license.d.ts +3 -2
  162. package/dist/mjs/sdk/licensing/plan.d.ts +23 -6
  163. package/dist/mjs/sdk/licensing/plan.js +8 -0
  164. package/dist/mjs/sdk/licensing/plan.js.map +1 -1
  165. package/dist/mjs/sdk/licensing/quota.d.ts +4 -5
  166. package/dist/mjs/sdk/licensing/quota.js +1 -1
  167. package/dist/mjs/sdk/licensing/quota.js.map +1 -1
  168. package/dist/mjs/sdk/locks.d.ts +10 -2
  169. package/dist/mjs/sdk/locks.js +2 -0
  170. package/dist/mjs/sdk/locks.js.map +1 -1
  171. package/dist/mjs/shared/index.d.ts +1 -0
  172. package/dist/mjs/shared/index.js +2 -0
  173. package/dist/mjs/shared/index.js.map +1 -0
  174. package/dist/mjs/shared/typeUtils.d.ts +3 -0
  175. package/dist/mjs/shared/typeUtils.js +2 -0
  176. package/dist/mjs/shared/typeUtils.js.map +1 -0
  177. package/dist/mjs/tsconfig.build.tsbuildinfo +1 -1
  178. package/package.json +7 -3
  179. package/src/api/account/accounts.ts +13 -0
  180. package/src/api/account/index.ts +1 -0
  181. package/src/api/account/license.ts +19 -2
  182. package/src/api/web/app/datasource.ts +19 -0
  183. package/src/api/web/app/index.ts +1 -0
  184. package/src/api/web/global/index.ts +1 -0
  185. package/src/api/web/global/scim/groups.ts +30 -0
  186. package/src/api/web/global/scim/index.ts +3 -0
  187. package/src/api/web/global/scim/shared.ts +14 -0
  188. package/src/api/web/global/scim/users.ts +53 -0
  189. package/src/api/web/index.ts +1 -0
  190. package/src/api/web/pagination.ts +1 -1
  191. package/src/api/web/system/environment.ts +8 -0
  192. package/src/api/web/system/index.ts +1 -0
  193. package/src/api/web/user.ts +12 -8
  194. package/src/documents/account/account.ts +9 -12
  195. package/src/documents/app/automation.ts +66 -8
  196. package/src/documents/app/query.ts +7 -0
  197. package/src/documents/app/table.ts +3 -0
  198. package/src/documents/app/user.ts +1 -0
  199. package/src/documents/global/config.ts +16 -14
  200. package/src/documents/global/plugin.ts +1 -0
  201. package/src/documents/global/quotas.ts +1 -0
  202. package/src/documents/global/user.ts +1 -0
  203. package/src/documents/global/userGroup.ts +4 -0
  204. package/src/sdk/db.ts +2 -0
  205. package/src/sdk/events/event.ts +45 -10
  206. package/src/sdk/events/identification.ts +2 -0
  207. package/src/sdk/events/license.ts +6 -7
  208. package/src/sdk/events/user.ts +3 -0
  209. package/src/sdk/events/userGroup.ts +5 -0
  210. package/src/sdk/licensing/billing.ts +1 -0
  211. package/src/sdk/licensing/feature.ts +5 -0
  212. package/src/sdk/licensing/license.ts +3 -2
  213. package/src/sdk/licensing/plan.ts +27 -7
  214. package/src/sdk/licensing/quota.ts +4 -7
  215. package/src/sdk/locks.ts +9 -0
  216. package/src/shared/index.ts +1 -0
  217. package/src/shared/typeUtils.ts +3 -0
  218. package/tsconfig-base.build.json +2 -1
@@ -22,15 +22,19 @@ export interface BulkUserRequest {
22
22
  }
23
23
  }
24
24
 
25
+ export interface BulkUserCreated {
26
+ successful: UserDetails[]
27
+ unsuccessful: { email: string; reason: string }[]
28
+ }
29
+
30
+ export interface BulkUserDeleted {
31
+ successful: UserDetails[]
32
+ unsuccessful: { _id: string; email: string; reason: string }[]
33
+ }
34
+
25
35
  export interface BulkUserResponse {
26
- created?: {
27
- successful: UserDetails[]
28
- unsuccessful: { email: string; reason: string }[]
29
- }
30
- deleted?: {
31
- successful: UserDetails[]
32
- unsuccessful: { _id: string; email: string; reason: string }[]
33
- }
36
+ created?: BulkUserCreated
37
+ deleted?: BulkUserDeleted
34
38
  message?: string
35
39
  }
36
40
 
@@ -1,14 +1,6 @@
1
- import {
2
- Feature,
3
- Hosting,
4
- License,
5
- MonthlyQuotaName,
6
- PlanType,
7
- PriceDuration,
8
- Quotas,
9
- StaticQuotaName,
10
- } from "../../sdk"
11
- import { MonthlyUsage, QuotaUsage, StaticUsage } from "../global"
1
+ import { Feature, Hosting, License, PlanType, Quotas } from "../../sdk"
2
+ import { DeepPartial } from "../../shared"
3
+ import { QuotaUsage } from "../global"
12
4
 
13
5
  export interface CreateAccount {
14
6
  email: string
@@ -34,7 +26,7 @@ export const isCreatePasswordAccount = (
34
26
 
35
27
  export interface LicenseOverrides {
36
28
  features?: Feature[]
37
- quotas?: Quotas
29
+ quotas?: DeepPartial<Quotas>
38
30
  }
39
31
 
40
32
  export interface Account extends CreateAccount {
@@ -47,11 +39,16 @@ export interface Account extends CreateAccount {
47
39
  // licensing
48
40
  tier: string // deprecated
49
41
  planType?: PlanType
42
+ /** @deprecated */
50
43
  planTier?: number
51
44
  license?: License
45
+ installId?: string
46
+ installTenantId?: string
47
+ installVersion?: string
52
48
  stripeCustomerId?: string
53
49
  licenseKey?: string
54
50
  licenseKeyActivatedAt?: number
51
+ licenseRequestedAt?: number
55
52
  licenseOverrides?: LicenseOverrides
56
53
  quotaUsage?: QuotaUsage
57
54
  }
@@ -1,6 +1,32 @@
1
1
  import { Document } from "../document"
2
2
  import { EventEmitter } from "events"
3
3
 
4
+ export enum AutomationIOType {
5
+ OBJECT = "object",
6
+ STRING = "string",
7
+ BOOLEAN = "boolean",
8
+ NUMBER = "number",
9
+ ARRAY = "array",
10
+ }
11
+
12
+ export enum AutomationCustomIOType {
13
+ TABLE = "table",
14
+ ROW = "row",
15
+ ROWS = "rows",
16
+ WIDE = "wide",
17
+ QUERY = "query",
18
+ QUERY_PARAMS = "queryParams",
19
+ QUERY_LIMIT = "queryLimit",
20
+ LOOP_OPTION = "loopOption",
21
+ ITEM = "item",
22
+ CODE = "code",
23
+ FILTERS = "filters",
24
+ COLUMN = "column",
25
+ TRIGGER_SCHEMA = "triggerSchema",
26
+ CRON = "cron",
27
+ WEBHOOK_URL = "webhookUrl",
28
+ }
29
+
4
30
  export enum AutomationTriggerStepId {
5
31
  ROW_SAVED = "ROW_SAVED",
6
32
  ROW_UPDATED = "ROW_UPDATED",
@@ -10,6 +36,12 @@ export enum AutomationTriggerStepId {
10
36
  CRON = "CRON",
11
37
  }
12
38
 
39
+ export enum AutomationStepType {
40
+ LOGIC = "LOGIC",
41
+ ACTION = "ACTION",
42
+ TRIGGER = "TRIGGER",
43
+ }
44
+
13
45
  export enum AutomationActionStepId {
14
46
  SEND_EMAIL_SMTP = "SEND_EMAIL_SMTP",
15
47
  CREATE_ROW = "CREATE_ROW",
@@ -31,14 +63,43 @@ export enum AutomationActionStepId {
31
63
  integromat = "integromat",
32
64
  }
33
65
 
66
+ export const AutomationStepIdArray = [
67
+ ...Object.values(AutomationActionStepId),
68
+ ...Object.values(AutomationTriggerStepId),
69
+ ]
70
+
34
71
  export interface Automation extends Document {
35
72
  definition: {
36
73
  steps: AutomationStep[]
37
74
  trigger: AutomationTrigger
38
75
  }
76
+ screenId?: string
77
+ uiTree?: any
39
78
  appId: string
40
79
  live?: boolean
41
80
  name: string
81
+ internal?: boolean
82
+ type?: string
83
+ }
84
+
85
+ interface BaseIOStructure {
86
+ type?: AutomationIOType
87
+ customType?: AutomationCustomIOType
88
+ title?: string
89
+ description?: string
90
+ enum?: string[]
91
+ pretty?: string[]
92
+ properties?: {
93
+ [key: string]: BaseIOStructure
94
+ }
95
+ required?: string[]
96
+ }
97
+
98
+ interface InputOutputBlock {
99
+ properties: {
100
+ [key: string]: BaseIOStructure
101
+ }
102
+ required?: string[]
42
103
  }
43
104
 
44
105
  export interface AutomationStepSchema {
@@ -46,7 +107,7 @@ export interface AutomationStepSchema {
46
107
  tagline: string
47
108
  icon: string
48
109
  description: string
49
- type: string
110
+ type: AutomationStepType
50
111
  internal?: boolean
51
112
  deprecated?: boolean
52
113
  stepId: AutomationTriggerStepId | AutomationActionStepId
@@ -55,14 +116,10 @@ export interface AutomationStepSchema {
55
116
  [key: string]: any
56
117
  }
57
118
  schema: {
58
- inputs: {
59
- [key: string]: any
60
- }
61
- outputs: {
62
- [key: string]: any
63
- }
64
- required?: string[]
119
+ inputs: InputOutputBlock
120
+ outputs: InputOutputBlock
65
121
  }
122
+ custom?: boolean
66
123
  }
67
124
 
68
125
  export interface AutomationStep extends AutomationStepSchema {
@@ -83,6 +140,7 @@ export enum AutomationStatus {
83
140
  ERROR = "error",
84
141
  STOPPED = "stopped",
85
142
  STOPPED_ERROR = "stopped_error",
143
+ NO_ITERATIONS = "no_iterations",
86
144
  }
87
145
 
88
146
  export interface AutomationResults {
@@ -42,3 +42,10 @@ export interface PaginationValues {
42
42
  page: string | number | null
43
43
  limit: number | null
44
44
  }
45
+
46
+ export interface PreviewQueryRequest extends Omit<Query, "parameters"> {
47
+ parameters: {}
48
+ flags?: {
49
+ urlName?: boolean
50
+ }
51
+ }
@@ -31,6 +31,8 @@ export interface FieldSchema {
31
31
  timeOnly?: boolean
32
32
  lastID?: number
33
33
  useRichText?: boolean | null
34
+ order?: number
35
+ width?: number
34
36
  meta?: {
35
37
  toTable: string
36
38
  toKey: string
@@ -77,6 +79,7 @@ export interface Table extends Document {
77
79
  indexes?: { [key: string]: any }
78
80
  rows?: { [key: string]: any }
79
81
  created?: boolean
82
+ rowHeight?: number
80
83
  }
81
84
 
82
85
  export interface TableRequest extends Table {
@@ -2,4 +2,5 @@ import { Document } from "../document"
2
2
 
3
3
  export interface UserMetadata extends Document {
4
4
  roleId: string
5
+ email?: string
5
6
  }
@@ -1,8 +1,8 @@
1
1
  import { Document } from "../document"
2
2
 
3
- export interface Config extends Document {
3
+ export interface Config<T = any> extends Document {
4
4
  type: ConfigType
5
- config: any
5
+ config: T
6
6
  }
7
7
 
8
8
  export interface SMTPInnerConfig {
@@ -18,9 +18,7 @@ export interface SMTPInnerConfig {
18
18
  connectionTimeout?: any
19
19
  }
20
20
 
21
- export interface SMTPConfig extends Config {
22
- config: SMTPInnerConfig
23
- }
21
+ export interface SMTPConfig extends Config<SMTPInnerConfig> {}
24
22
 
25
23
  /**
26
24
  * Accessible only via pro.
@@ -50,9 +48,7 @@ export interface SettingsInnerConfig {
50
48
  isSSOEnforced?: boolean
51
49
  }
52
50
 
53
- export interface SettingsConfig extends Config {
54
- config: SettingsInnerConfig
55
- }
51
+ export interface SettingsConfig extends Config<SettingsInnerConfig> {}
56
52
 
57
53
  export type SSOConfigType = ConfigType.GOOGLE | ConfigType.OIDC
58
54
  export type SSOConfig = GoogleInnerConfig | OIDCInnerConfig
@@ -67,9 +63,7 @@ export interface GoogleInnerConfig {
67
63
  callbackURL?: string
68
64
  }
69
65
 
70
- export interface GoogleConfig extends Config {
71
- config: GoogleInnerConfig
72
- }
66
+ export interface GoogleConfig extends Config<GoogleInnerConfig> {}
73
67
 
74
68
  export interface OIDCStrategyConfiguration {
75
69
  issuer: string
@@ -96,9 +90,7 @@ export interface OIDCInnerConfig {
96
90
  scopes: string[]
97
91
  }
98
92
 
99
- export interface OIDCConfig extends Config {
100
- config: OIDCConfigs
101
- }
93
+ export interface OIDCConfig extends Config<OIDCConfigs> {}
102
94
 
103
95
  export interface OIDCWellKnownConfig {
104
96
  issuer: string
@@ -107,6 +99,12 @@ export interface OIDCWellKnownConfig {
107
99
  userinfo_endpoint: string
108
100
  }
109
101
 
102
+ export interface SCIMInnerConfig {
103
+ enabled: boolean
104
+ }
105
+
106
+ export interface SCIMConfig extends Config<SCIMInnerConfig> {}
107
+
110
108
  export const isSettingsConfig = (config: Config): config is SettingsConfig =>
111
109
  config.type === ConfigType.SETTINGS
112
110
 
@@ -119,6 +117,9 @@ export const isGoogleConfig = (config: Config): config is GoogleConfig =>
119
117
  export const isOIDCConfig = (config: Config): config is OIDCConfig =>
120
118
  config.type === ConfigType.OIDC
121
119
 
120
+ export const isSCIMConfig = (config: Config): config is SCIMConfig =>
121
+ config.type === ConfigType.SCIM
122
+
122
123
  export enum ConfigType {
123
124
  SETTINGS = "settings",
124
125
  ACCOUNT = "account",
@@ -126,4 +127,5 @@ export enum ConfigType {
126
127
  GOOGLE = "google",
127
128
  OIDC = "oidc",
128
129
  OIDC_LOGOS = "logos_oidc",
130
+ SCIM = "scim",
129
131
  }
@@ -3,6 +3,7 @@ import { Document } from "../document"
3
3
  export enum PluginType {
4
4
  DATASOURCE = "datasource",
5
5
  COMPONENT = "component",
6
+ AUTOMATION = "automation",
6
7
  }
7
8
 
8
9
  export enum PluginSource {
@@ -31,6 +31,7 @@ export type QuotaTriggers = {
31
31
  export interface StaticUsage {
32
32
  [StaticQuotaName.APPS]: number
33
33
  [StaticQuotaName.PLUGINS]: number
34
+ [StaticQuotaName.USERS]: number
34
35
  [StaticQuotaName.USER_GROUPS]: number
35
36
  [StaticQuotaName.ROWS]: number
36
37
  triggers: {
@@ -53,6 +53,7 @@ export interface User extends Document {
53
53
  dayPassRecordedAt?: string
54
54
  userGroups?: string[]
55
55
  onboardedAt?: string
56
+ scimInfo?: { isSync: true } & Record<string, any>
56
57
  }
57
58
 
58
59
  export enum UserStatus {
@@ -7,6 +7,10 @@ export interface UserGroup extends Document {
7
7
  users?: GroupUser[]
8
8
  roles?: UserGroupRoles
9
9
  createdAt?: number
10
+ scimInfo?: {
11
+ externalId: string
12
+ isSync: boolean
13
+ }
10
14
  }
11
15
 
12
16
  export interface GroupUser {
package/src/sdk/db.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import Nano from "@budibase/nano"
2
2
  import { AllDocsResponse, AnyDocument, Document } from "../"
3
3
  import { Writable } from "stream"
4
+ import PouchDB from "pouchdb"
4
5
 
5
6
  export enum SearchIndex {
6
7
  ROWS = "rows",
7
8
  AUDIT = "audit",
9
+ USER = "user",
8
10
  }
9
11
 
10
12
  export type PouchOptions = {
@@ -1,4 +1,5 @@
1
1
  import { Hosting } from "../hosting"
2
+ import { Group, Identity } from "./identification"
2
3
 
3
4
  export enum Event {
4
5
  // USER
@@ -137,7 +138,6 @@ export enum Event {
137
138
 
138
139
  // LICENSE
139
140
  LICENSE_PLAN_CHANGED = "license:plan:changed",
140
- LICENSE_TIER_CHANGED = "license:tier:changed",
141
141
  LICENSE_ACTIVATED = "license:activated",
142
142
  LICENSE_PAYMENT_FAILED = "license:payment:failed",
143
143
  LICENSE_PAYMENT_RECOVERED = "license:payment:recovered",
@@ -186,6 +186,24 @@ export enum Event {
186
186
  AUDIT_LOGS_DOWNLOADED = "audit_log:downloaded",
187
187
  }
188
188
 
189
+ export const UserGroupSyncEvents: Event[] = [
190
+ Event.USER_CREATED,
191
+ Event.USER_UPDATED,
192
+ Event.USER_DELETED,
193
+ Event.USER_PERMISSION_ADMIN_ASSIGNED,
194
+ Event.USER_PERMISSION_ADMIN_REMOVED,
195
+ Event.USER_PERMISSION_BUILDER_ASSIGNED,
196
+ Event.USER_PERMISSION_BUILDER_REMOVED,
197
+ Event.USER_GROUP_CREATED,
198
+ Event.USER_GROUP_UPDATED,
199
+ Event.USER_GROUP_DELETED,
200
+ Event.USER_GROUP_USERS_ADDED,
201
+ Event.USER_GROUP_USERS_REMOVED,
202
+ Event.USER_GROUP_PERMISSIONS_EDITED,
203
+ ]
204
+
205
+ export const AsyncEvents: Event[] = [...UserGroupSyncEvents]
206
+
189
207
  // all events that are not audited have been added to this record as undefined, this means
190
208
  // that Typescript can protect us against new events being added and auditing of those
191
209
  // events not being considered. This might be a little ugly, but provides a level of
@@ -194,9 +212,9 @@ export enum Event {
194
212
  // a user facing event or not.
195
213
  export const AuditedEventFriendlyName: Record<Event, string | undefined> = {
196
214
  // USER
197
- [Event.USER_CREATED]: `User "{{ email }}" created`,
198
- [Event.USER_UPDATED]: `User "{{ email }}" updated`,
199
- [Event.USER_DELETED]: `User "{{ email }}" deleted`,
215
+ [Event.USER_CREATED]: `User "{{ email }}" created{{#if viaScim}} via SCIM{{/if}}`,
216
+ [Event.USER_UPDATED]: `User "{{ email }}" updated{{#if viaScim}} via SCIM{{/if}}`,
217
+ [Event.USER_DELETED]: `User "{{ email }}" deleted{{#if viaScim}} via SCIM{{/if}}`,
200
218
  [Event.USER_PERMISSION_ADMIN_ASSIGNED]: `User "{{ email }}" admin role assigned`,
201
219
  [Event.USER_PERMISSION_ADMIN_REMOVED]: `User "{{ email }}" admin role removed`,
202
220
  [Event.USER_PERMISSION_BUILDER_ASSIGNED]: `User "{{ email }}" builder role assigned`,
@@ -206,11 +224,11 @@ export const AuditedEventFriendlyName: Record<Event, string | undefined> = {
206
224
  [Event.USER_PASSWORD_UPDATED]: `User "{{ email }}" password updated`,
207
225
  [Event.USER_PASSWORD_RESET_REQUESTED]: `User "{{ email }}" password reset requested`,
208
226
  [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`,
227
+ [Event.USER_GROUP_CREATED]: `User group "{{ name }}" created{{#if viaScim}} via SCIM{{/if}}`,
228
+ [Event.USER_GROUP_UPDATED]: `User group "{{ name }}" updated{{#if viaScim}} via SCIM{{/if}}`,
229
+ [Event.USER_GROUP_DELETED]: `User group "{{ name }}" deleted{{#if viaScim}} via SCIM{{/if}}`,
230
+ [Event.USER_GROUP_USERS_ADDED]: `User group "{{ name }}" {{ count }} users added{{#if viaScim}} via SCIM{{/if}}`,
231
+ [Event.USER_GROUP_USERS_REMOVED]: `User group "{{ name }}" {{ count }} users removed{{#if viaScim}} via SCIM{{/if}}`,
214
232
  [Event.USER_GROUP_PERMISSIONS_EDITED]: `User group "{{ name }}" permissions edited`,
215
233
  [Event.USER_PASSWORD_FORCE_RESET]: undefined,
216
234
  [Event.USER_GROUP_ONBOARDING]: undefined,
@@ -309,7 +327,6 @@ export const AuditedEventFriendlyName: Record<Event, string | undefined> = {
309
327
 
310
328
  // LICENSE - NOT AUDITED
311
329
  [Event.LICENSE_PLAN_CHANGED]: undefined,
312
- [Event.LICENSE_TIER_CHANGED]: undefined,
313
330
  [Event.LICENSE_ACTIVATED]: undefined,
314
331
  [Event.LICENSE_PAYMENT_FAILED]: undefined,
315
332
  [Event.LICENSE_PAYMENT_RECOVERED]: undefined,
@@ -383,3 +400,21 @@ export interface BaseEvent {
383
400
  }
384
401
 
385
402
  export type TableExportFormat = "json" | "csv"
403
+
404
+ export type DocUpdateEvent = {
405
+ id: string
406
+ tenantId: string
407
+ appId?: string
408
+ }
409
+
410
+ export interface EventProcessor {
411
+ processEvent(
412
+ event: Event,
413
+ identity: Identity,
414
+ properties: any,
415
+ timestamp?: string | number
416
+ ): Promise<void>
417
+ identify?(identity: Identity, timestamp?: string | number): Promise<void>
418
+ identifyGroup?(group: Group, timestamp?: string | number): Promise<void>
419
+ shutdown?(): void
420
+ }
@@ -46,6 +46,8 @@ export interface Identity {
46
46
  environment: string
47
47
  installationId?: string
48
48
  tenantId?: string
49
+ // usable - no unique format
50
+ realTenantId?: string
49
51
  hostInfo?: HostInfo
50
52
  }
51
53
 
@@ -1,15 +1,14 @@
1
- import { PlanType } from "../licensing"
2
-
3
- export interface LicenseTierChangedEvent {
4
- accountId: string
5
- from: number
6
- to: number
7
- }
1
+ import { PlanType, PriceDuration } from "../licensing"
8
2
 
9
3
  export interface LicensePlanChangedEvent {
10
4
  accountId: string
11
5
  from: PlanType
12
6
  to: PlanType
7
+ // may not be on historical events
8
+ fromDuration: PriceDuration | undefined
9
+ toDuration: PriceDuration | undefined
10
+ fromQuantity: number | undefined
11
+ toQuantity: number | undefined
13
12
  }
14
13
 
15
14
  export interface LicenseActivatedEvent {
@@ -2,6 +2,7 @@ import { BaseEvent } from "./event"
2
2
 
3
3
  export interface UserCreatedEvent extends BaseEvent {
4
4
  userId: string
5
+ viaScim?: boolean
5
6
  audited: {
6
7
  email: string
7
8
  }
@@ -9,6 +10,7 @@ export interface UserCreatedEvent extends BaseEvent {
9
10
 
10
11
  export interface UserUpdatedEvent extends BaseEvent {
11
12
  userId: string
13
+ viaScim?: boolean
12
14
  audited: {
13
15
  email: string
14
16
  }
@@ -16,6 +18,7 @@ export interface UserUpdatedEvent extends BaseEvent {
16
18
 
17
19
  export interface UserDeletedEvent extends BaseEvent {
18
20
  userId: string
21
+ viaScim?: boolean
19
22
  audited: {
20
23
  email: string
21
24
  }
@@ -2,6 +2,7 @@ import { BaseEvent } from "./event"
2
2
 
3
3
  export interface GroupCreatedEvent extends BaseEvent {
4
4
  groupId: string
5
+ viaScim?: boolean
5
6
  audited: {
6
7
  name: string
7
8
  }
@@ -9,6 +10,7 @@ export interface GroupCreatedEvent extends BaseEvent {
9
10
 
10
11
  export interface GroupUpdatedEvent extends BaseEvent {
11
12
  groupId: string
13
+ viaScim?: boolean
12
14
  audited: {
13
15
  name: string
14
16
  }
@@ -16,6 +18,7 @@ export interface GroupUpdatedEvent extends BaseEvent {
16
18
 
17
19
  export interface GroupDeletedEvent extends BaseEvent {
18
20
  groupId: string
21
+ viaScim?: boolean
19
22
  audited: {
20
23
  name: string
21
24
  }
@@ -24,6 +27,7 @@ export interface GroupDeletedEvent extends BaseEvent {
24
27
  export interface GroupUsersAddedEvent extends BaseEvent {
25
28
  count: number
26
29
  groupId: string
30
+ viaScim?: boolean
27
31
  audited: {
28
32
  name: string
29
33
  }
@@ -32,6 +36,7 @@ export interface GroupUsersAddedEvent extends BaseEvent {
32
36
  export interface GroupUsersDeletedEvent extends BaseEvent {
33
37
  count: number
34
38
  groupId: string
39
+ viaScim?: boolean
35
40
  audited: {
36
41
  name: string
37
42
  }
@@ -7,6 +7,7 @@ export interface Customer {
7
7
 
8
8
  export interface Subscription {
9
9
  amount: number
10
+ currency: string
10
11
  quantity: number
11
12
  duration: PriceDuration
12
13
  cancelAt: number | null | undefined
@@ -1,3 +1,5 @@
1
+ import { PlanType } from "./plan"
2
+
1
3
  export enum Feature {
2
4
  USER_GROUPS = "userGroups",
3
5
  APP_BACKUPS = "appBackups",
@@ -5,4 +7,7 @@ export enum Feature {
5
7
  AUDIT_LOGS = "auditLogs",
6
8
  ENFORCEABLE_SSO = "enforceableSSO",
7
9
  BRANDING = "branding",
10
+ SCIM = "scim",
8
11
  }
12
+
13
+ export type PlanFeatures = { [key in PlanType]: Feature[] | undefined }
@@ -1,8 +1,9 @@
1
- import { AccountPlan, Quotas, Feature, Billing } from "."
1
+ import { PurchasedPlan, Quotas, Feature, Billing } from "."
2
2
 
3
3
  export interface License {
4
4
  features: Feature[]
5
5
  quotas: Quotas
6
- plan: AccountPlan
6
+ plan: PurchasedPlan
7
7
  billing?: Billing
8
+ testClockId?: string
8
9
  }
@@ -1,12 +1,10 @@
1
- export interface AccountPlan {
2
- type: PlanType
3
- price?: Price
4
- }
5
-
6
1
  export enum PlanType {
7
2
  FREE = "free",
3
+ /** @deprecated */
8
4
  PRO = "pro",
5
+ /** @deprecated */
9
6
  TEAM = "team",
7
+ PREMIUM = "premium",
10
8
  BUSINESS = "business",
11
9
  ENTERPRISE = "enterprise",
12
10
  }
@@ -16,12 +14,34 @@ export enum PriceDuration {
16
14
  YEARLY = "yearly",
17
15
  }
18
16
 
19
- export interface Price {
17
+ export interface AvailablePlan {
18
+ type: PlanType
19
+ maxUsers: number
20
+ prices: AvailablePrice[]
21
+ }
22
+
23
+ export interface AvailablePrice {
20
24
  amount: number
21
25
  amountMonthly: number
22
26
  currency: string
23
27
  duration: PriceDuration
24
28
  priceId: string
25
- dayPasses: number
29
+ }
30
+
31
+ export enum PlanModel {
32
+ PER_USER = "perUser",
33
+ DAY_PASS = "dayPass",
34
+ }
35
+
36
+ export interface PurchasedPlan {
37
+ type: PlanType
38
+ model: PlanModel
39
+ usesInvoicing: boolean
40
+ price?: PurchasedPrice
41
+ }
42
+
43
+ export interface PurchasedPrice extends AvailablePrice {
44
+ dayPasses: number | undefined
45
+ /** @deprecated - now at the plan level via model */
26
46
  isPerUser: boolean
27
47
  }
@@ -13,6 +13,7 @@ export enum QuotaType {
13
13
  export enum StaticQuotaName {
14
14
  ROWS = "rows",
15
15
  APPS = "apps",
16
+ USERS = "users",
16
17
  USER_GROUPS = "userGroups",
17
18
  PLUGINS = "plugins",
18
19
  }
@@ -54,13 +55,7 @@ export const isConstantQuota = (
54
55
  return quotaType === QuotaType.CONSTANT
55
56
  }
56
57
 
57
- export type PlanQuotas = {
58
- [PlanType.FREE]: Quotas
59
- [PlanType.PRO]: Quotas
60
- [PlanType.TEAM]: Quotas
61
- [PlanType.BUSINESS]: Quotas
62
- [PlanType.ENTERPRISE]: Quotas
63
- }
58
+ export type PlanQuotas = { [key in PlanType]: Quotas | undefined }
64
59
 
65
60
  export type MonthlyQuotas = {
66
61
  [MonthlyQuotaName.QUERIES]: Quota
@@ -71,6 +66,7 @@ export type MonthlyQuotas = {
71
66
  export type StaticQuotas = {
72
67
  [StaticQuotaName.ROWS]: Quota
73
68
  [StaticQuotaName.APPS]: Quota
69
+ [StaticQuotaName.USERS]: Quota
74
70
  [StaticQuotaName.USER_GROUPS]: Quota
75
71
  [StaticQuotaName.PLUGINS]: Quota
76
72
  }
@@ -99,4 +95,5 @@ export interface Quota {
99
95
  * which can have subsequent effects such as sending emails to users.
100
96
  */
101
97
  triggers: number[]
98
+ startDate?: number
102
99
  }