import { ComKey, ItemQuery, ItemTypeArray, LocKeyArray, PriKey } from '@fjell/types'; /** * Base subscription interface that all subscription types extend. * Provides core subscription properties with full type safety. */ export interface BaseSubscription { /** Unique subscription identifier - generated when subscription is created */ id: string; /** Optional: specific event types to listen for (defaults to all if not specified) */ eventTypes?: string[]; /** Optional: storage backends to listen to (defaults to all if not specified) */ scopes?: string[]; /** Optional: additional filtering criteria using existing ItemQuery system */ query?: ItemQuery; } /** * Subscription to events for a specific item using PriKey or ComKey. * Provides exact item-level event subscriptions with full type safety. */ export interface ItemSubscription extends BaseSubscription { /** The specific key to subscribe to - fully typed PriKey or ComKey */ key: PriKey | ComKey; } /** * Subscription to events for all items in a location using KTA + location array. * Provides location-based event subscriptions with full type safety. */ export interface LocationSubscription extends BaseSubscription { /** Item type array defining the type hierarchy */ kta: ItemTypeArray; /** Location key array defining the specific location */ location: LocKeyArray; } /** * Union type of all subscription types. * This allows handling any subscription type generically while maintaining type safety. */ export type Subscription = ItemSubscription | LocationSubscription; /** * Options for creating subscriptions. * Used by convenience methods to create subscriptions without requiring full subscription objects. */ export interface SubscriptionOptions { /** Optional: specific event types to listen for */ eventTypes?: string[]; /** Optional: storage backends to listen to */ scopes?: string[]; /** Optional: additional filtering criteria */ query?: ItemQuery; } /** * Type guard to check if a subscription is an ItemSubscription */ export declare function isItemSubscription(subscription: Subscription): subscription is ItemSubscription; /** * Type guard to check if a subscription is a LocationSubscription */ export declare function isLocationSubscription(subscription: Subscription): subscription is LocationSubscription; /** * Utility function to generate unique subscription IDs. * Libraries can use this or implement their own ID generation strategy. */ export declare function generateSubscriptionId(): string; /** * Utility function to create an ItemSubscription with generated ID. * Simplifies subscription creation for library implementations. */ export declare function createItemSubscription(key: PriKey | ComKey, options?: SubscriptionOptions): ItemSubscription; /** * Utility function to create a LocationSubscription with generated ID. * Simplifies subscription creation for library implementations. */ export declare function createLocationSubscription(kta: ItemTypeArray, location: LocKeyArray, options?: SubscriptionOptions): LocationSubscription;