diff --git a/packages/builder/src/pages/builder/portal/account/auditLogs/index.svelte b/packages/builder/src/pages/builder/portal/account/auditLogs/index.svelte
index 4759f8d8ce..d498c557b2 100644
--- a/packages/builder/src/pages/builder/portal/account/auditLogs/index.svelte
+++ b/packages/builder/src/pages/builder/portal/account/auditLogs/index.svelte
@@ -160,8 +160,8 @@
events: selectedEvents,
})
logsPageInfo.fetched(
- $auditLogs.logs.hasNextPage,
- $auditLogs.logs.bookmark
+ $auditLogs.logs?.hasNextPage,
+ $auditLogs.logs?.bookmark
)
} catch (error) {
notifications.error(`Error getting audit logs - ${error}`)
@@ -200,6 +200,8 @@
return Object.entries(obj).map(([id, label]) => {
return { id, label }
})
+ } else {
+ return []
}
}
@@ -316,7 +318,7 @@
viewDetails(detail)}
{customRenderers}
- data={$auditLogs.logs.data}
+ data={$auditLogs.logs?.data}
allowEditColumns={false}
allowEditRows={false}
allowSelectRows={false}
diff --git a/packages/builder/src/stores/BudiStore.ts b/packages/builder/src/stores/BudiStore.ts
index 19b2c394fb..c645ea6a24 100644
--- a/packages/builder/src/stores/BudiStore.ts
+++ b/packages/builder/src/stores/BudiStore.ts
@@ -11,7 +11,7 @@ export default class BudiStore implements Writable {
set: Writable["set"]
constructor(init: T, opts?: BudiStoreOpts) {
- const store = writable({ ...init })
+ const store = writable(init)
/**
* Internal Svelte store
diff --git a/packages/builder/src/stores/portal/auditLogs.js b/packages/builder/src/stores/portal/auditLogs.js
deleted file mode 100644
index 9abf8ec11b..0000000000
--- a/packages/builder/src/stores/portal/auditLogs.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import { writable, get } from "svelte/store"
-import { API } from "api"
-import { licensing } from "stores/portal"
-
-export function createAuditLogsStore() {
- const { subscribe, update } = writable({
- events: {},
- logs: {},
- })
-
- async function search(opts = {}) {
- if (get(licensing).auditLogsEnabled) {
- const paged = await API.searchAuditLogs(opts)
-
- update(state => {
- return { ...state, logs: { ...paged, opts } }
- })
-
- return paged
- }
- }
-
- async function getEventDefinitions() {
- const events = await API.getEventDefinitions()
-
- update(state => {
- return { ...state, ...events }
- })
- }
-
- function getDownloadUrl(opts = {}) {
- return API.getDownloadUrl(opts)
- }
-
- return {
- subscribe,
- search,
- getEventDefinitions,
- getDownloadUrl,
- }
-}
-
-export const auditLogs = createAuditLogsStore()
diff --git a/packages/builder/src/stores/portal/auditLogs.ts b/packages/builder/src/stores/portal/auditLogs.ts
new file mode 100644
index 0000000000..10d79120ee
--- /dev/null
+++ b/packages/builder/src/stores/portal/auditLogs.ts
@@ -0,0 +1,45 @@
+import { get } from "svelte/store"
+import { API } from "api"
+import { licensing } from "./licensing"
+import BudiStore from "../BudiStore"
+import {
+ DownloadAuditLogsRequest,
+ SearchAuditLogsRequest,
+ SearchAuditLogsResponse,
+} from "@budibase/types"
+
+interface PortalAuditLogsStore {
+ events?: Record
+ logs?: SearchAuditLogsResponse
+}
+
+export class AuditLogsStore extends BudiStore {
+ constructor() {
+ super({})
+ }
+
+ async search(opts: SearchAuditLogsRequest = {}) {
+ if (get(licensing).auditLogsEnabled) {
+ const res = await API.searchAuditLogs(opts)
+ this.update(state => ({
+ ...state,
+ logs: res,
+ }))
+ return res
+ }
+ }
+
+ async getEventDefinitions() {
+ const res = await API.getEventDefinitions()
+ this.update(state => ({
+ ...state,
+ events: res.events,
+ }))
+ }
+
+ getDownloadUrl(opts: DownloadAuditLogsRequest = {}) {
+ return API.getDownloadUrl(opts)
+ }
+}
+
+export const auditLogs = new AuditLogsStore()
diff --git a/packages/builder/src/stores/portal/licensing.js b/packages/builder/src/stores/portal/licensing.js
index 9abc376cd0..72a44a8fa0 100644
--- a/packages/builder/src/stores/portal/licensing.js
+++ b/packages/builder/src/stores/portal/licensing.js
@@ -24,6 +24,7 @@ export const createLicensingStore = () => {
scimEnabled: false,
budibaseAIEnabled: false,
customAIConfigsEnabled: false,
+ auditLogsEnabled: false,
// the currently used quotas from the db
quotaUsage: undefined,
// derived quota metrics for percentages used