@sprucelabs/spruce-event-utils
Version:
Some helpful utilities to speed up working with Mercury! 🚅
46 lines (45 loc) • 1.82 kB
TypeScript
import { EventSignature, MercuryEventEmitter, SkillEventContract } from '@sprucelabs/mercury-types';
import { Skill, Log, HealthCheckItem, SkillContext } from '@sprucelabs/spruce-skill-utils';
import { EventSource } from '../utilities/buildEmitTargetAndPayloadSchema';
export type SkillMercuryEventEmitter = MercuryEventEmitter<SkillEventContract>;
export interface EventHealthCheckItem extends HealthCheckItem {
listeners: Omit<EventFeatureListener, 'callback'>[];
contracts: {
fullyQualifiedEventName: string;
}[];
events: EventFeatureEvent[];
}
export interface EventFeatureListener {
eventName: string;
eventNamespace: string;
version: string;
callback(event: SpruceEvent): Promise<void>;
isGlobal?: boolean;
}
export interface EventFeatureEvent {
eventName: string;
eventNamespace: string;
version: string;
}
type OptionalPayload<EmitPayload extends Record<string, any> | undefined> = EmitPayload extends Record<string, any> ? EmitPayload : {};
export type SpruceEvent<Contract extends SkillEventContract | undefined = undefined, EmitPayload extends Record<string, any> | undefined = undefined> = {
skill: Skill;
log: Log;
connectToApiAsSkill: () => Contract extends SkillEventContract ? Promise<MercuryEventEmitter<Contract>> : unknown;
} & SkillContext & OptionalPayload<EmitPayload> & {
source: EventSource;
};
export type SpruceEventResponse<ResponsePayload = void> = Promise<ResponsePayload>;
export interface NamedEventSignature {
fullyQualifiedEventName: string;
eventName: string;
eventNamespace?: string;
version: string;
signature: EventSignature;
}
declare module '@sprucelabs/spruce-skill-utils/build/types/skill.types' {
interface HealthCheckResults {
event?: EventHealthCheckItem;
}
}
export {};