@buildable/messages
Version:
A fully managed messaging service that lets you easily exchange event data across any app or resource.
43 lines (35 loc) • 1.29 kB
text/typescript
import { Event, ListenerIdInfo, TransactionInput } from "../types"
export const SEPERATOR = process.env.BLD_LISTENER_SEPARATOR || "$$$"
export const sleep = (n: number) => new Promise(res => setTimeout(res, n))
export const getTransactionInput = (event: Event): TransactionInput => {
const { payload = "{}", headers = "{}", query = "{}" } = event
try {
return {
payload: JSON.parse(payload),
headers: JSON.parse(headers),
query: JSON.parse(query),
event
}
} catch(e) {
console.error("Error parsing transaction input", e, "event: ", event)
return { payload, headers, query, event }
}
}
export const getPartialTopic = ({ eventName, platform, label }: { eventName: string; platform: string; label: string; }) => {
return `${platform}.${label}.${eventName}`
}
export const getListenerId = ({ eventName, txKey, platform, label }: ListenerIdInfo) => {
const partialTopic = getPartialTopic({ eventName, platform, label })
return partialTopic + SEPERATOR + txKey
}
export const deconstructListenerId = (id: string) => {
const [partialTopic, txKey] = id.split(SEPERATOR)
const [platform, label, ...rest] = partialTopic.split(".")
const eventName = rest.join(".")
return {
platform,
label,
eventName,
txKey
}
}