1
0
Fork 0
mirror of synced 2024-09-26 06:11:49 +12:00
budibase/packages/backend-core/src/events/events.ts

48 lines
1.5 KiB
TypeScript
Raw Normal View History

import { Event, Identity } from "@budibase/types"
import { processors } from "./processors"
import identification from "./identification"
2022-06-01 08:04:41 +12:00
import * as backfill from "./backfill"
import { publishAsyncEvent } from "./asyncEvents"
2022-04-02 09:29:44 +13:00
export const publishEvent = async (
event: Event,
properties: any,
timestamp?: string | number,
identityOverride?: Identity
) => {
2022-05-24 09:14:44 +12:00
// in future this should use async events via a distributed queue.
const identity =
identityOverride || (await identification.getCurrentIdentity())
// Backfilling is get from the user cache, but when we override the identity cache is not available. Overrides are
// normally performed in automatic actions or operations in async flows (BPM) where the user session is not available.
const backfilling = identityOverride
? false
: await backfill.isBackfillingEvent(event)
2022-06-01 08:04:41 +12:00
// no backfill - send the event and exit
if (!backfilling) {
2023-04-18 01:03:54 +12:00
// send off async events if required
await publishAsyncEvent({
event,
identity,
properties,
timestamp,
})
// now handle the main sync event processing pipeline
await processors.processEvent(event, identity, properties, timestamp)
2022-06-01 08:04:41 +12:00
return
}
// backfill active - check if the event has been sent already
const alreadySent = await backfill.isAlreadySent(event, properties)
if (alreadySent) {
// do nothing
return
} else {
// send and record the event
await processors.processEvent(event, identity, properties, timestamp)
await backfill.recordEvent(event, properties)
}
2022-04-02 09:29:44 +13:00
}