@pushflodev/sdk 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +500 -0
- package/dist/PushFloClient-JPowShqE.d.cts +102 -0
- package/dist/PushFloClient-ny0iyTYJ.d.ts +102 -0
- package/dist/api-DYrG_5uC.d.cts +149 -0
- package/dist/api-DYrG_5uC.d.ts +149 -0
- package/dist/index.cjs +1210 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +28 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +1204 -0
- package/dist/index.js.map +1 -0
- package/dist/message-CVgilLwz.d.cts +130 -0
- package/dist/message-CVgilLwz.d.ts +130 -0
- package/dist/react.cjs +1300 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +116 -0
- package/dist/react.d.ts +116 -0
- package/dist/react.js +1295 -0
- package/dist/react.js.map +1 -0
- package/dist/server.cjs +558 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +47 -0
- package/dist/server.d.ts +47 -0
- package/dist/server.js +553 -0
- package/dist/server.js.map +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/EventEmitter.ts","../src/utils/constants.ts","../src/utils/logger.ts","../src/errors/PushFloError.ts","../src/errors/AuthenticationError.ts","../src/utils/retry.ts","../src/errors/ConnectionError.ts","../src/client/ConnectionStateMachine.ts","../src/client/Heartbeat.ts","../src/client/WebSocketManager.ts","../src/client/SubscriptionManager.ts","../src/client/PushFloClient.ts","../src/errors/NetworkError.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Type-safe event emitter with zero dependencies\n */\nexport type EventMap = {\n [key: string]: unknown[];\n};\n\nexport type EventHandler<T extends unknown[]> = (...args: T) => void;\n\nexport class TypedEventEmitter<Events extends EventMap> {\n private listeners: Map<keyof Events, Set<EventHandler<unknown[]>>> = new Map();\n\n /**\n * Register an event listener\n */\n on<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): this {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler as EventHandler<unknown[]>);\n return this;\n }\n\n /**\n * Register a one-time event listener\n */\n once<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): this {\n const onceHandler: EventHandler<Events[K]> = (...args) => {\n this.off(event, onceHandler);\n handler(...args);\n };\n return this.on(event, onceHandler);\n }\n\n /**\n * Remove an event listener\n */\n off<K extends keyof Events>(event: K, handler: EventHandler<Events[K]>): this {\n const handlers = this.listeners.get(event);\n if (handlers) {\n handlers.delete(handler as EventHandler<unknown[]>);\n if (handlers.size === 0) {\n this.listeners.delete(event);\n }\n }\n return this;\n }\n\n /**\n * Emit an event to all registered listeners\n */\n protected emit<K extends keyof Events>(event: K, ...args: Events[K]): boolean {\n const handlers = this.listeners.get(event);\n if (!handlers || handlers.size === 0) {\n return false;\n }\n handlers.forEach((handler) => {\n try {\n handler(...args);\n } catch (error) {\n // Prevent handler errors from breaking other listeners\n console.error(`Error in event handler for \"${String(event)}\":`, error);\n }\n });\n return true;\n }\n\n /**\n * Remove all listeners for an event, or all listeners if no event specified\n */\n removeAllListeners<K extends keyof Events>(event?: K): this {\n if (event !== undefined) {\n this.listeners.delete(event);\n } else {\n this.listeners.clear();\n }\n return this;\n }\n\n /**\n * Get the number of listeners for an event\n */\n listenerCount<K extends keyof Events>(event: K): number {\n return this.listeners.get(event)?.size ?? 0;\n }\n\n /**\n * Get all event names with registered listeners\n */\n eventNames(): (keyof Events)[] {\n return Array.from(this.listeners.keys());\n }\n}\n","/**\n * Default configuration values\n */\nexport const DEFAULTS = {\n /** Default PushFlo API base URL */\n BASE_URL: 'https://api.pushflo.dev',\n\n /** WebSocket endpoint path */\n WS_PATH: '/ws',\n\n /** API version prefix */\n API_VERSION: '/api/v1',\n\n /** Connection timeout in milliseconds */\n CONNECTION_TIMEOUT: 30000,\n\n /** Heartbeat interval in milliseconds */\n HEARTBEAT_INTERVAL: 25000,\n\n /** Initial reconnection delay in milliseconds */\n RECONNECT_DELAY: 1000,\n\n /** Maximum reconnection delay in milliseconds */\n MAX_RECONNECT_DELAY: 30000,\n\n /** Reconnection delay multiplier for exponential backoff */\n RECONNECT_MULTIPLIER: 1.5,\n\n /** Maximum number of reconnection attempts (0 = infinite) */\n MAX_RECONNECT_ATTEMPTS: 0,\n\n /** Default page size for list operations */\n PAGE_SIZE: 25,\n} as const;\n\n/**\n * API endpoint paths\n */\nexport const API_PATHS = {\n AUTH_TOKEN: '/auth/token',\n CHANNELS: '/channels',\n CHANNEL: (slug: string) => `/channels/${encodeURIComponent(slug)}`,\n CHANNEL_MESSAGES: (slug: string) => `/channels/${encodeURIComponent(slug)}/messages`,\n} as const;\n\n/**\n * WebSocket message types (client -> server)\n */\nexport const WS_CLIENT_MESSAGES = {\n SUBSCRIBE: 'subscribe',\n UNSUBSCRIBE: 'unsubscribe',\n PING: 'ping',\n ACK: 'ack',\n} as const;\n\n/**\n * WebSocket message types (server -> client)\n */\nexport const WS_SERVER_MESSAGES = {\n CONNECTED: 'connected',\n SUBSCRIBED: 'subscribed',\n UNSUBSCRIBED: 'unsubscribed',\n MESSAGE: 'message',\n ERROR: 'error',\n PONG: 'pong',\n} as const;\n\n/**\n * Error codes\n */\nexport const ERROR_CODES = {\n // Connection errors\n CONNECTION_FAILED: 'CONNECTION_FAILED',\n CONNECTION_TIMEOUT: 'CONNECTION_TIMEOUT',\n CONNECTION_CLOSED: 'CONNECTION_CLOSED',\n\n // Authentication errors\n INVALID_API_KEY: 'INVALID_API_KEY',\n UNAUTHORIZED: 'UNAUTHORIZED',\n FORBIDDEN: 'FORBIDDEN',\n\n // Network errors\n NETWORK_ERROR: 'NETWORK_ERROR',\n REQUEST_TIMEOUT: 'REQUEST_TIMEOUT',\n\n // API errors\n NOT_FOUND: 'NOT_FOUND',\n VALIDATION_ERROR: 'VALIDATION_ERROR',\n RATE_LIMITED: 'RATE_LIMITED',\n SERVER_ERROR: 'SERVER_ERROR',\n\n // Client errors\n INVALID_STATE: 'INVALID_STATE',\n ALREADY_CONNECTED: 'ALREADY_CONNECTED',\n NOT_CONNECTED: 'NOT_CONNECTED',\n CHANNEL_NOT_FOUND: 'CHANNEL_NOT_FOUND',\n} as const;\n","export type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface LoggerOptions {\n /** Enable debug logging */\n debug?: boolean;\n /** Custom log prefix */\n prefix?: string;\n /** Minimum log level */\n level?: LogLevel;\n}\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\n/**\n * Simple logger with debug mode support\n */\nexport class Logger {\n private enabled: boolean;\n private prefix: string;\n private minLevel: number;\n\n constructor(options: LoggerOptions = {}) {\n this.enabled = options.debug ?? false;\n this.prefix = options.prefix ?? '[PushFlo]';\n this.minLevel = LOG_LEVELS[options.level ?? 'debug'];\n }\n\n /**\n * Enable or disable logging\n */\n setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n /**\n * Set minimum log level\n */\n setLevel(level: LogLevel): void {\n this.minLevel = LOG_LEVELS[level];\n }\n\n /**\n * Log a debug message\n */\n debug(message: string, ...args: unknown[]): void {\n this.log('debug', message, ...args);\n }\n\n /**\n * Log an info message\n */\n info(message: string, ...args: unknown[]): void {\n this.log('info', message, ...args);\n }\n\n /**\n * Log a warning message\n */\n warn(message: string, ...args: unknown[]): void {\n this.log('warn', message, ...args);\n }\n\n /**\n * Log an error message\n */\n error(message: string, ...args: unknown[]): void {\n this.log('error', message, ...args);\n }\n\n private log(level: LogLevel, message: string, ...args: unknown[]): void {\n if (!this.enabled && level !== 'error') {\n return;\n }\n\n if (LOG_LEVELS[level] < this.minLevel) {\n return;\n }\n\n const timestamp = new Date().toISOString();\n const formattedMessage = `${this.prefix} ${timestamp} [${level.toUpperCase()}] ${message}`;\n\n switch (level) {\n case 'debug':\n console.debug(formattedMessage, ...args);\n break;\n case 'info':\n console.info(formattedMessage, ...args);\n break;\n case 'warn':\n console.warn(formattedMessage, ...args);\n break;\n case 'error':\n console.error(formattedMessage, ...args);\n break;\n }\n }\n}\n\n/**\n * Create a child logger with a custom prefix\n */\nexport function createLogger(options: LoggerOptions = {}): Logger {\n return new Logger(options);\n}\n","/**\n * Base error class for all PushFlo SDK errors\n */\nexport class PushFloError extends Error {\n /** Error code for programmatic handling */\n readonly code: string;\n\n /** Whether this error is potentially recoverable through retry */\n readonly retryable: boolean;\n\n /** Original error that caused this error, if any */\n readonly cause?: Error;\n\n constructor(\n message: string,\n code: string,\n options: { retryable?: boolean; cause?: Error } = {}\n ) {\n super(message);\n this.name = 'PushFloError';\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.cause = options.cause;\n\n // Maintain proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n /**\n * Convert error to JSON-serializable object\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n retryable: this.retryable,\n stack: this.stack,\n cause: this.cause?.message,\n };\n }\n\n /**\n * Create a string representation\n */\n toString(): string {\n return `${this.name} [${this.code}]: ${this.message}`;\n }\n}\n","import { PushFloError } from './PushFloError.js';\nimport { ERROR_CODES } from '../utils/constants.js';\n\n/**\n * Error thrown when authentication fails\n */\nexport class AuthenticationError extends PushFloError {\n constructor(\n message: string,\n code: string = ERROR_CODES.UNAUTHORIZED,\n options: { retryable?: boolean; cause?: Error } = {}\n ) {\n // Authentication errors are generally not retryable\n super(message, code, { retryable: false, ...options });\n this.name = 'AuthenticationError';\n }\n\n /**\n * Create an invalid API key error\n */\n static invalidKey(keyType?: string): AuthenticationError {\n const message = keyType\n ? `Invalid ${keyType} API key`\n : 'Invalid API key';\n return new AuthenticationError(message, ERROR_CODES.INVALID_API_KEY);\n }\n\n /**\n * Create an unauthorized error\n */\n static unauthorized(reason?: string): AuthenticationError {\n return new AuthenticationError(\n reason ?? 'Unauthorized - check your API key',\n ERROR_CODES.UNAUTHORIZED\n );\n }\n\n /**\n * Create a forbidden error\n */\n static forbidden(action?: string): AuthenticationError {\n const message = action\n ? `Access forbidden: insufficient permissions for ${action}`\n : 'Access forbidden: insufficient permissions';\n return new AuthenticationError(message, ERROR_CODES.FORBIDDEN);\n }\n}\n","import { DEFAULTS } from './constants.js';\n\nexport interface RetryOptions {\n /** Maximum number of retry attempts (0 = infinite) */\n maxAttempts?: number;\n /** Initial delay in milliseconds */\n initialDelay?: number;\n /** Maximum delay in milliseconds */\n maxDelay?: number;\n /** Delay multiplier for exponential backoff */\n multiplier?: number;\n /** Function to determine if error is retryable */\n isRetryable?: (error: unknown) => boolean;\n /** Callback for each retry attempt */\n onRetry?: (attempt: number, delay: number, error: unknown) => void;\n /** Abort signal for cancellation */\n signal?: AbortSignal;\n}\n\n/**\n * Calculate delay with exponential backoff and jitter\n */\nexport function calculateBackoff(\n attempt: number,\n options: {\n initialDelay?: number;\n maxDelay?: number;\n multiplier?: number;\n } = {}\n): number {\n const {\n initialDelay = DEFAULTS.RECONNECT_DELAY,\n maxDelay = DEFAULTS.MAX_RECONNECT_DELAY,\n multiplier = DEFAULTS.RECONNECT_MULTIPLIER,\n } = options;\n\n // Exponential backoff\n const exponentialDelay = initialDelay * Math.pow(multiplier, attempt);\n\n // Cap at max delay\n const cappedDelay = Math.min(exponentialDelay, maxDelay);\n\n // Add jitter (±25%)\n const jitter = cappedDelay * 0.25 * (Math.random() * 2 - 1);\n\n return Math.floor(cappedDelay + jitter);\n}\n\n/**\n * Sleep for a given duration (cancellable)\n */\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n\n const timeoutId = setTimeout(resolve, ms);\n\n signal?.addEventListener(\n 'abort',\n () => {\n clearTimeout(timeoutId);\n reject(new DOMException('Aborted', 'AbortError'));\n },\n { once: true }\n );\n });\n}\n\n/**\n * Retry a function with exponential backoff\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: RetryOptions = {}\n): Promise<T> {\n const {\n maxAttempts = 3,\n initialDelay = DEFAULTS.RECONNECT_DELAY,\n maxDelay = DEFAULTS.MAX_RECONNECT_DELAY,\n multiplier = DEFAULTS.RECONNECT_MULTIPLIER,\n isRetryable = () => true,\n onRetry,\n signal,\n } = options;\n\n let lastError: unknown;\n let attempt = 0;\n\n while (maxAttempts === 0 || attempt < maxAttempts) {\n try {\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n return await fn();\n } catch (error) {\n lastError = error;\n\n // Don't retry abort errors\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw error;\n }\n\n // Check if we should retry\n if (!isRetryable(error)) {\n throw error;\n }\n\n // Check if we've exhausted attempts\n if (maxAttempts !== 0 && attempt >= maxAttempts - 1) {\n throw error;\n }\n\n // Calculate delay\n const delay = calculateBackoff(attempt, { initialDelay, maxDelay, multiplier });\n\n // Notify retry callback\n onRetry?.(attempt + 1, delay, error);\n\n // Wait before next attempt\n await sleep(delay, signal);\n\n attempt++;\n }\n }\n\n throw lastError;\n}\n\n/**\n * Create a retry function with preset options\n */\nexport function createRetry(defaultOptions: RetryOptions) {\n return <T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T> => {\n return retry(fn, { ...defaultOptions, ...options });\n };\n}\n","import { PushFloError } from './PushFloError.js';\nimport { ERROR_CODES } from '../utils/constants.js';\n\n/**\n * Error thrown when connection to PushFlo fails\n */\nexport class ConnectionError extends PushFloError {\n constructor(\n message: string,\n code: string = ERROR_CODES.CONNECTION_FAILED,\n options: { retryable?: boolean; cause?: Error } = {}\n ) {\n super(message, code, { retryable: true, ...options });\n this.name = 'ConnectionError';\n }\n\n /**\n * Create a connection timeout error\n */\n static timeout(timeoutMs: number): ConnectionError {\n return new ConnectionError(\n `Connection timed out after ${timeoutMs}ms`,\n ERROR_CODES.CONNECTION_TIMEOUT,\n { retryable: true }\n );\n }\n\n /**\n * Create a connection closed error\n */\n static closed(reason?: string): ConnectionError {\n return new ConnectionError(\n reason ? `Connection closed: ${reason}` : 'Connection closed unexpectedly',\n ERROR_CODES.CONNECTION_CLOSED,\n { retryable: true }\n );\n }\n\n /**\n * Create a connection failed error\n */\n static failed(reason?: string, cause?: Error): ConnectionError {\n return new ConnectionError(\n reason ? `Connection failed: ${reason}` : 'Failed to connect',\n ERROR_CODES.CONNECTION_FAILED,\n { retryable: true, cause }\n );\n }\n}\n","import type { ConnectionState } from '../types/connection.js';\n\ntype StateTransition = {\n from: ConnectionState | ConnectionState[];\n to: ConnectionState;\n};\n\nconst VALID_TRANSITIONS: StateTransition[] = [\n { from: 'disconnected', to: 'connecting' },\n { from: 'connecting', to: 'connected' },\n { from: 'connecting', to: 'disconnected' },\n { from: 'connecting', to: 'error' },\n { from: 'connected', to: 'disconnected' },\n { from: 'connected', to: 'error' },\n { from: 'error', to: 'connecting' },\n { from: 'error', to: 'disconnected' },\n];\n\n/**\n * State machine for managing connection state transitions\n */\nexport class ConnectionStateMachine {\n private _state: ConnectionState = 'disconnected';\n private listeners: Set<(state: ConnectionState) => void> = new Set();\n\n /**\n * Get current connection state\n */\n get state(): ConnectionState {\n return this._state;\n }\n\n /**\n * Check if currently in a specific state\n */\n is(state: ConnectionState): boolean {\n return this._state === state;\n }\n\n /**\n * Check if connected\n */\n get isConnected(): boolean {\n return this._state === 'connected';\n }\n\n /**\n * Check if connecting\n */\n get isConnecting(): boolean {\n return this._state === 'connecting';\n }\n\n /**\n * Check if disconnected\n */\n get isDisconnected(): boolean {\n return this._state === 'disconnected';\n }\n\n /**\n * Check if in error state\n */\n get isError(): boolean {\n return this._state === 'error';\n }\n\n /**\n * Transition to a new state\n * @returns true if transition was successful\n */\n transition(to: ConnectionState): boolean {\n if (this._state === to) {\n return true; // Already in target state\n }\n\n const isValid = VALID_TRANSITIONS.some((t) => {\n const fromStates = Array.isArray(t.from) ? t.from : [t.from];\n return fromStates.includes(this._state) && t.to === to;\n });\n\n if (!isValid) {\n console.warn(`Invalid state transition: ${this._state} -> ${to}`);\n return false;\n }\n\n this._state = to;\n\n // Notify listeners\n this.listeners.forEach((listener) => {\n try {\n listener(to);\n } catch (error) {\n console.error('Error in connection state listener:', error);\n }\n });\n\n return true;\n }\n\n /**\n * Force transition to a state (bypasses validation)\n */\n forceTransition(to: ConnectionState): void {\n if (this._state === to) {\n return;\n }\n\n this._state = to;\n\n // Notify listeners\n this.listeners.forEach((listener) => {\n try {\n listener(to);\n } catch (error) {\n console.error('Error in connection state listener:', error);\n }\n });\n }\n\n /**\n * Reset to disconnected state\n */\n reset(): void {\n this.forceTransition('disconnected');\n }\n\n /**\n * Subscribe to state changes\n */\n onChange(listener: (state: ConnectionState) => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n /**\n * Remove all listeners\n */\n removeAllListeners(): void {\n this.listeners.clear();\n }\n}\n","import { DEFAULTS } from '../utils/constants.js';\n\nexport interface HeartbeatOptions {\n /** Interval between heartbeats in milliseconds */\n interval?: number;\n\n /** Function to send ping */\n onPing: () => void;\n\n /** Function called when heartbeat times out */\n onTimeout?: () => void;\n\n /** Timeout for pong response (default: interval * 2) */\n pongTimeout?: number;\n}\n\n/**\n * Manages WebSocket heartbeat/keepalive\n */\nexport class Heartbeat {\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n private readonly interval: number;\n private readonly pongTimeout: number;\n private readonly onPing: () => void;\n private readonly onTimeout?: () => void;\n private running = false;\n\n constructor(options: HeartbeatOptions) {\n this.interval = options.interval ?? DEFAULTS.HEARTBEAT_INTERVAL;\n this.pongTimeout = options.pongTimeout ?? this.interval * 2;\n this.onPing = options.onPing;\n this.onTimeout = options.onTimeout;\n }\n\n /**\n * Start the heartbeat\n */\n start(): void {\n if (this.running) {\n return;\n }\n\n this.running = true;\n this.scheduleNextPing();\n }\n\n /**\n * Stop the heartbeat\n */\n stop(): void {\n this.running = false;\n this.clearTimers();\n }\n\n /**\n * Called when a pong is received\n */\n receivedPong(): void {\n if (!this.running) {\n return;\n }\n\n // Clear the timeout and schedule next ping\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n\n this.scheduleNextPing();\n }\n\n /**\n * Reset the heartbeat (e.g., after any activity)\n */\n reset(): void {\n if (!this.running) {\n return;\n }\n\n this.clearTimers();\n this.scheduleNextPing();\n }\n\n private scheduleNextPing(): void {\n if (!this.running) {\n return;\n }\n\n this.intervalId = setTimeout(() => {\n if (!this.running) {\n return;\n }\n\n // Send ping\n this.onPing();\n\n // Set timeout for pong\n this.timeoutId = setTimeout(() => {\n if (this.running && this.onTimeout) {\n this.onTimeout();\n }\n }, this.pongTimeout);\n }, this.interval);\n }\n\n private clearTimers(): void {\n if (this.intervalId !== null) {\n clearTimeout(this.intervalId);\n this.intervalId = null;\n }\n\n if (this.timeoutId !== null) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n}\n","import { TypedEventEmitter } from '../utils/EventEmitter.js';\nimport { DEFAULTS, WS_CLIENT_MESSAGES, WS_SERVER_MESSAGES } from '../utils/constants.js';\nimport { createLogger, type Logger } from '../utils/logger.js';\nimport { calculateBackoff } from '../utils/retry.js';\nimport { ConnectionError } from '../errors/ConnectionError.js';\nimport { AuthenticationError } from '../errors/AuthenticationError.js';\nimport { ConnectionStateMachine } from './ConnectionStateMachine.js';\nimport { Heartbeat } from './Heartbeat.js';\nimport type { ConnectionInfo, ConnectionState } from '../types/connection.js';\nimport type { WsClientMessage, WsServerMessage } from '../types/api.js';\n\nexport interface WebSocketManagerOptions {\n /** API key for authentication */\n apiKey: string;\n\n /** Base URL for the API */\n baseUrl?: string;\n\n /** Connection timeout in milliseconds */\n connectionTimeout?: number;\n\n /** Heartbeat interval in milliseconds */\n heartbeatInterval?: number;\n\n /** Enable automatic reconnection */\n autoReconnect?: boolean;\n\n /** Maximum reconnection attempts (0 = infinite) */\n maxReconnectAttempts?: number;\n\n /** Initial reconnection delay in milliseconds */\n reconnectDelay?: number;\n\n /** Maximum reconnection delay in milliseconds */\n maxReconnectDelay?: number;\n\n /** Enable debug logging */\n debug?: boolean;\n}\n\ninterface WebSocketManagerEvents {\n [key: string]: unknown[];\n connected: [ConnectionInfo];\n disconnected: [reason?: string];\n message: [WsServerMessage];\n error: [Error];\n}\n\n/**\n * Manages WebSocket connection to PushFlo\n */\nexport class WebSocketManager extends TypedEventEmitter<WebSocketManagerEvents> {\n private readonly options: Required<Omit<WebSocketManagerOptions, 'debug'>>;\n private readonly logger: Logger;\n private readonly stateMachine: ConnectionStateMachine;\n private readonly heartbeat: Heartbeat;\n\n private ws: WebSocket | null = null;\n private connectionTimeoutId: ReturnType<typeof setTimeout> | null = null;\n private reconnectAttempt = 0;\n private reconnectTimeoutId: ReturnType<typeof setTimeout> | null = null;\n private intentionalDisconnect = false;\n private clientId: string | null = null;\n\n constructor(options: WebSocketManagerOptions) {\n super();\n\n this.options = {\n apiKey: options.apiKey,\n baseUrl: (options.baseUrl ?? DEFAULTS.BASE_URL).replace(/\\/$/, ''),\n connectionTimeout: options.connectionTimeout ?? DEFAULTS.CONNECTION_TIMEOUT,\n heartbeatInterval: options.heartbeatInterval ?? DEFAULTS.HEARTBEAT_INTERVAL,\n autoReconnect: options.autoReconnect ?? true,\n maxReconnectAttempts: options.maxReconnectAttempts ?? DEFAULTS.MAX_RECONNECT_ATTEMPTS,\n reconnectDelay: options.reconnectDelay ?? DEFAULTS.RECONNECT_DELAY,\n maxReconnectDelay: options.maxReconnectDelay ?? DEFAULTS.MAX_RECONNECT_DELAY,\n };\n\n this.logger = createLogger({ debug: options.debug, prefix: '[PushFlo WS]' });\n this.stateMachine = new ConnectionStateMachine();\n this.heartbeat = new Heartbeat({\n interval: this.options.heartbeatInterval,\n onPing: () => this.sendPing(),\n onTimeout: () => this.handleHeartbeatTimeout(),\n });\n }\n\n /**\n * Get current connection state\n */\n get state() {\n return this.stateMachine.state;\n }\n\n /**\n * Get client ID (available after connected)\n */\n getClientId(): string | null {\n return this.clientId;\n }\n\n /**\n * Subscribe to state changes\n */\n onStateChange(listener: (state: ConnectionState) => void): () => void {\n return this.stateMachine.onChange(listener);\n }\n\n /**\n * Connect to WebSocket server\n */\n async connect(): Promise<ConnectionInfo> {\n if (this.stateMachine.isConnected) {\n throw new ConnectionError(\n 'Already connected',\n 'ALREADY_CONNECTED',\n { retryable: false }\n );\n }\n\n if (this.stateMachine.isConnecting) {\n throw new ConnectionError(\n 'Connection in progress',\n 'CONNECTION_IN_PROGRESS',\n { retryable: false }\n );\n }\n\n this.intentionalDisconnect = false;\n this.clearReconnectTimeout();\n\n return this.establishConnection();\n }\n\n /**\n * Disconnect from WebSocket server\n */\n disconnect(): void {\n this.intentionalDisconnect = true;\n this.cleanup();\n this.stateMachine.transition('disconnected');\n this.emit('disconnected', 'Disconnected by client');\n }\n\n /**\n * Send a message to the server\n */\n send(message: WsClientMessage): boolean {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n return false;\n }\n\n try {\n this.ws.send(JSON.stringify(message));\n this.logger.debug('Sent message:', message);\n return true;\n } catch (error) {\n this.logger.error('Failed to send message:', error);\n return false;\n }\n }\n\n /**\n * Subscribe to a channel\n */\n subscribe(channel: string): boolean {\n return this.send({\n type: WS_CLIENT_MESSAGES.SUBSCRIBE,\n channel,\n });\n }\n\n /**\n * Unsubscribe from a channel\n */\n unsubscribe(channel: string): boolean {\n return this.send({\n type: WS_CLIENT_MESSAGES.UNSUBSCRIBE,\n channel,\n });\n }\n\n /**\n * Clean up resources\n */\n destroy(): void {\n this.intentionalDisconnect = true;\n this.cleanup();\n this.removeAllListeners();\n this.stateMachine.removeAllListeners();\n }\n\n private async establishConnection(): Promise<ConnectionInfo> {\n this.stateMachine.transition('connecting');\n this.logger.debug('Connecting...');\n\n return new Promise((resolve, reject) => {\n try {\n const wsUrl = this.buildWsUrl();\n this.logger.debug('WebSocket URL:', wsUrl);\n\n this.ws = new WebSocket(wsUrl);\n\n // Set connection timeout\n this.connectionTimeoutId = setTimeout(() => {\n if (this.stateMachine.isConnecting) {\n const error = ConnectionError.timeout(this.options.connectionTimeout);\n this.cleanup();\n this.stateMachine.transition('error');\n this.emit('error', error);\n reject(error);\n }\n }, this.options.connectionTimeout);\n\n this.ws.onopen = () => {\n this.logger.debug('WebSocket opened, waiting for connected message...');\n };\n\n this.ws.onclose = (event) => {\n this.handleClose(event, reject);\n };\n\n this.ws.onerror = (event) => {\n this.logger.error('WebSocket error:', event);\n };\n\n this.ws.onmessage = (event) => {\n this.handleMessage(event, resolve, reject);\n };\n } catch (error) {\n this.cleanup();\n this.stateMachine.transition('error');\n const connError = ConnectionError.failed(\n error instanceof Error ? error.message : 'Unknown error',\n error instanceof Error ? error : undefined\n );\n this.emit('error', connError);\n reject(connError);\n }\n });\n }\n\n private buildWsUrl(): string {\n const baseUrl = this.options.baseUrl;\n const protocol = baseUrl.startsWith('https') ? 'wss' : 'ws';\n const host = baseUrl.replace(/^https?:\\/\\//, '');\n return `${protocol}://${host}${DEFAULTS.WS_PATH}?token=${encodeURIComponent(this.options.apiKey)}`;\n }\n\n private handleMessage(\n event: MessageEvent,\n onConnect?: (info: ConnectionInfo) => void,\n onConnectError?: (error: Error) => void\n ): void {\n try {\n const message = JSON.parse(event.data as string) as WsServerMessage;\n this.logger.debug('Received message:', message);\n\n switch (message.type) {\n case WS_SERVER_MESSAGES.CONNECTED:\n this.handleConnected(message, onConnect);\n break;\n\n case WS_SERVER_MESSAGES.PONG:\n this.heartbeat.receivedPong();\n break;\n\n case WS_SERVER_MESSAGES.ERROR:\n this.handleErrorMessage(message, onConnectError);\n break;\n\n default:\n // Forward other messages\n this.emit('message', message);\n }\n } catch (error) {\n this.logger.error('Failed to parse message:', error);\n }\n }\n\n private handleConnected(\n message: WsServerMessage,\n onConnect?: (info: ConnectionInfo) => void\n ): void {\n this.clearConnectionTimeout();\n\n if (message.clientId) {\n this.clientId = message.clientId;\n }\n\n const connectionInfo: ConnectionInfo = {\n clientId: message.clientId ?? '',\n timestamp: message.timestamp ?? Date.now(),\n };\n\n this.reconnectAttempt = 0;\n this.stateMachine.transition('connected');\n this.heartbeat.start();\n\n this.logger.debug('Connected:', connectionInfo);\n this.emit('connected', connectionInfo);\n onConnect?.(connectionInfo);\n }\n\n private handleErrorMessage(\n message: WsServerMessage,\n onConnectError?: (error: Error) => void\n ): void {\n const errorMsg = message.error ?? 'Unknown error';\n const code = message.code;\n\n let error: Error;\n if (code === 'UNAUTHORIZED' || code === 'INVALID_TOKEN') {\n error = AuthenticationError.unauthorized(errorMsg);\n } else {\n error = new ConnectionError(errorMsg, code ?? 'UNKNOWN');\n }\n\n this.emit('error', error);\n\n // If still connecting, reject the promise\n if (this.stateMachine.isConnecting) {\n this.cleanup();\n this.stateMachine.transition('error');\n onConnectError?.(error);\n }\n }\n\n private handleClose(\n event: CloseEvent,\n onConnectError?: (error: Error) => void\n ): void {\n this.logger.debug('WebSocket closed:', event.code, event.reason);\n\n const wasConnected = this.stateMachine.isConnected;\n this.cleanup();\n\n if (this.intentionalDisconnect) {\n this.stateMachine.transition('disconnected');\n return;\n }\n\n // If we were connecting, reject with error\n if (this.stateMachine.isConnecting) {\n this.stateMachine.transition('error');\n const error = ConnectionError.failed(event.reason || 'Connection closed');\n this.emit('error', error);\n onConnectError?.(error);\n return;\n }\n\n // Handle unexpected disconnect\n this.stateMachine.transition('disconnected');\n this.emit('disconnected', event.reason || undefined);\n\n // Try to reconnect if enabled\n if (wasConnected && this.options.autoReconnect) {\n this.scheduleReconnect();\n }\n }\n\n private handleHeartbeatTimeout(): void {\n this.logger.warn('Heartbeat timeout, reconnecting...');\n this.cleanup();\n this.stateMachine.transition('disconnected');\n this.emit('disconnected', 'Heartbeat timeout');\n\n if (this.options.autoReconnect) {\n this.scheduleReconnect();\n }\n }\n\n private scheduleReconnect(): void {\n if (this.intentionalDisconnect) {\n return;\n }\n\n const { maxReconnectAttempts } = this.options;\n if (maxReconnectAttempts > 0 && this.reconnectAttempt >= maxReconnectAttempts) {\n this.logger.error('Max reconnect attempts reached');\n this.stateMachine.transition('error');\n this.emit('error', new ConnectionError(\n 'Max reconnection attempts exceeded',\n 'MAX_RECONNECT_ATTEMPTS',\n { retryable: false }\n ));\n return;\n }\n\n const delay = calculateBackoff(this.reconnectAttempt, {\n initialDelay: this.options.reconnectDelay,\n maxDelay: this.options.maxReconnectDelay,\n });\n\n this.logger.debug(`Scheduling reconnect in ${delay}ms (attempt ${this.reconnectAttempt + 1})`);\n\n this.reconnectTimeoutId = setTimeout(() => {\n this.reconnectAttempt++;\n this.establishConnection().catch((error) => {\n this.logger.error('Reconnect failed:', error);\n this.scheduleReconnect();\n });\n }, delay);\n }\n\n private sendPing(): void {\n this.send({ type: WS_CLIENT_MESSAGES.PING });\n }\n\n private cleanup(): void {\n this.clearConnectionTimeout();\n this.heartbeat.stop();\n\n if (this.ws) {\n this.ws.onopen = null;\n this.ws.onclose = null;\n this.ws.onerror = null;\n this.ws.onmessage = null;\n\n if (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING) {\n this.ws.close();\n }\n\n this.ws = null;\n }\n }\n\n private clearConnectionTimeout(): void {\n if (this.connectionTimeoutId !== null) {\n clearTimeout(this.connectionTimeoutId);\n this.connectionTimeoutId = null;\n }\n }\n\n private clearReconnectTimeout(): void {\n if (this.reconnectTimeoutId !== null) {\n clearTimeout(this.reconnectTimeoutId);\n this.reconnectTimeoutId = null;\n }\n }\n}\n","import type { Message, SubscriptionOptions } from '../types/message.js';\n\ninterface SubscriptionEntry {\n channel: string;\n options: SubscriptionOptions;\n confirmed: boolean;\n}\n\n/**\n * Manages channel subscriptions\n */\nexport class SubscriptionManager {\n private subscriptions: Map<string, SubscriptionEntry> = new Map();\n\n /**\n * Add a subscription\n */\n add(channel: string, options: SubscriptionOptions = {}): void {\n this.subscriptions.set(channel, {\n channel,\n options,\n confirmed: false,\n });\n }\n\n /**\n * Remove a subscription\n */\n remove(channel: string): boolean {\n const entry = this.subscriptions.get(channel);\n if (entry) {\n this.subscriptions.delete(channel);\n entry.options.onUnsubscribed?.();\n return true;\n }\n return false;\n }\n\n /**\n * Check if subscribed to a channel\n */\n has(channel: string): boolean {\n return this.subscriptions.has(channel);\n }\n\n /**\n * Get subscription options for a channel\n */\n get(channel: string): SubscriptionOptions | undefined {\n return this.subscriptions.get(channel)?.options;\n }\n\n /**\n * Mark subscription as confirmed\n */\n confirm(channel: string): void {\n const entry = this.subscriptions.get(channel);\n if (entry) {\n entry.confirmed = true;\n entry.options.onSubscribed?.();\n }\n }\n\n /**\n * Check if subscription is confirmed\n */\n isConfirmed(channel: string): boolean {\n return this.subscriptions.get(channel)?.confirmed ?? false;\n }\n\n /**\n * Handle incoming message\n */\n handleMessage(message: Message): void {\n const entry = this.subscriptions.get(message.channel);\n if (entry) {\n entry.options.onMessage?.(message);\n }\n }\n\n /**\n * Handle subscription error\n */\n handleError(channel: string, error: Error): void {\n const entry = this.subscriptions.get(channel);\n if (entry) {\n entry.options.onError?.(error);\n }\n }\n\n /**\n * Get all subscribed channel names\n */\n getChannels(): string[] {\n return Array.from(this.subscriptions.keys());\n }\n\n /**\n * Get count of subscriptions\n */\n get size(): number {\n return this.subscriptions.size;\n }\n\n /**\n * Clear all subscriptions\n */\n clear(): void {\n this.subscriptions.forEach((entry) => {\n entry.options.onUnsubscribed?.();\n });\n this.subscriptions.clear();\n }\n\n /**\n * Reset confirmation status for all subscriptions (e.g., on reconnect)\n */\n resetConfirmations(): void {\n this.subscriptions.forEach((entry) => {\n entry.confirmed = false;\n });\n }\n}\n","import { TypedEventEmitter } from '../utils/EventEmitter.js';\nimport { DEFAULTS, WS_SERVER_MESSAGES, ERROR_CODES } from '../utils/constants.js';\nimport { createLogger, type Logger } from '../utils/logger.js';\nimport { AuthenticationError } from '../errors/AuthenticationError.js';\nimport { PushFloError } from '../errors/PushFloError.js';\nimport { WebSocketManager } from './WebSocketManager.js';\nimport { SubscriptionManager } from './SubscriptionManager.js';\nimport type { ConnectionState, ClientOptions, ConnectionInfo } from '../types/connection.js';\nimport type { Message, Subscription, SubscriptionOptions } from '../types/message.js';\nimport type { WsServerMessage } from '../types/api.js';\n\ninterface PushFloClientEvents {\n [key: string]: unknown[];\n connected: [ConnectionInfo];\n disconnected: [reason?: string];\n message: [Message];\n error: [Error];\n}\n\n/**\n * Browser client for PushFlo real-time messaging\n */\nexport class PushFloClient extends TypedEventEmitter<PushFloClientEvents> {\n private readonly wsManager: WebSocketManager;\n private readonly subscriptions: SubscriptionManager;\n private readonly logger: Logger;\n private connectionChangeListeners: Set<(state: ConnectionState) => void> = new Set();\n\n constructor(options: ClientOptions) {\n super();\n\n if (!options.publishKey) {\n throw new AuthenticationError(\n 'Publish key is required',\n 'MISSING_PUBLISH_KEY'\n );\n }\n\n if (!options.publishKey.startsWith('pub_') &&\n !options.publishKey.startsWith('sec_') &&\n !options.publishKey.startsWith('mgmt_')) {\n throw AuthenticationError.invalidKey('publish');\n }\n\n this.logger = createLogger({ debug: options.debug, prefix: '[PushFlo]' });\n this.subscriptions = new SubscriptionManager();\n\n this.wsManager = new WebSocketManager({\n apiKey: options.publishKey,\n baseUrl: options.baseUrl ?? DEFAULTS.BASE_URL,\n connectionTimeout: options.connectionTimeout,\n heartbeatInterval: options.heartbeatInterval,\n autoReconnect: options.autoReconnect,\n maxReconnectAttempts: options.maxReconnectAttempts,\n reconnectDelay: options.reconnectDelay,\n maxReconnectDelay: options.maxReconnectDelay,\n debug: options.debug,\n });\n\n this.setupEventHandlers();\n\n // Auto-connect if enabled\n if (options.autoConnect) {\n this.connect().catch((error) => {\n this.logger.error('Auto-connect failed:', error);\n });\n }\n }\n\n /**\n * Get current connection state\n */\n get connectionState(): ConnectionState {\n return this.wsManager.state;\n }\n\n /**\n * Get client ID (available after connected)\n */\n get clientId(): string | null {\n return this.wsManager.getClientId();\n }\n\n /**\n * Connect to PushFlo\n */\n async connect(): Promise<void> {\n this.logger.debug('Connecting...');\n await this.wsManager.connect();\n\n // Re-subscribe to all channels\n const channels = this.subscriptions.getChannels();\n if (channels.length > 0) {\n this.logger.debug('Re-subscribing to channels:', channels);\n this.subscriptions.resetConfirmations();\n channels.forEach((channel) => {\n this.wsManager.subscribe(channel);\n });\n }\n }\n\n /**\n * Disconnect from PushFlo\n */\n disconnect(): void {\n this.logger.debug('Disconnecting...');\n this.wsManager.disconnect();\n }\n\n /**\n * Clean up all resources\n */\n destroy(): void {\n this.logger.debug('Destroying client...');\n this.subscriptions.clear();\n this.wsManager.destroy();\n this.connectionChangeListeners.clear();\n this.removeAllListeners();\n }\n\n /**\n * Subscribe to a channel\n */\n subscribe(channel: string, options: SubscriptionOptions = {}): Subscription {\n if (!channel) {\n throw new PushFloError('Channel is required', 'INVALID_CHANNEL', { retryable: false });\n }\n\n this.logger.debug('Subscribing to channel:', channel);\n\n // Add to subscription manager\n this.subscriptions.add(channel, options);\n\n // Send subscribe message if connected\n if (this.wsManager.state === 'connected') {\n this.wsManager.subscribe(channel);\n }\n\n // Return subscription handle\n return {\n channel,\n unsubscribe: () => this.unsubscribe(channel),\n };\n }\n\n /**\n * Unsubscribe from a channel\n */\n unsubscribe(channel: string): void {\n this.logger.debug('Unsubscribing from channel:', channel);\n\n // Remove from subscription manager\n this.subscriptions.remove(channel);\n\n // Send unsubscribe message if connected\n if (this.wsManager.state === 'connected') {\n this.wsManager.unsubscribe(channel);\n }\n }\n\n /**\n * Register a connection state change listener\n */\n onConnectionChange(listener: (state: ConnectionState) => void): () => void {\n this.connectionChangeListeners.add(listener);\n return () => this.connectionChangeListeners.delete(listener);\n }\n\n /**\n * Get list of subscribed channels\n */\n getSubscribedChannels(): string[] {\n return this.subscriptions.getChannels();\n }\n\n /**\n * Check if subscribed to a channel\n */\n isSubscribed(channel: string): boolean {\n return this.subscriptions.has(channel);\n }\n\n private setupEventHandlers(): void {\n // Handle connection state changes\n this.wsManager.onStateChange((state) => {\n this.connectionChangeListeners.forEach((listener) => {\n try {\n listener(state);\n } catch (error) {\n this.logger.error('Error in connection change listener:', error);\n }\n });\n });\n\n // Handle connected\n this.wsManager.on('connected', (info) => {\n this.emit('connected', info);\n });\n\n // Handle disconnected\n this.wsManager.on('disconnected', (reason) => {\n this.emit('disconnected', reason);\n });\n\n // Handle errors\n this.wsManager.on('error', (error) => {\n this.emit('error', error);\n });\n\n // Handle messages\n this.wsManager.on('message', (message) => {\n this.handleServerMessage(message);\n });\n }\n\n private handleServerMessage(message: WsServerMessage): void {\n switch (message.type) {\n case WS_SERVER_MESSAGES.SUBSCRIBED:\n if (message.channel) {\n this.subscriptions.confirm(message.channel);\n this.logger.debug('Subscribed to channel:', message.channel);\n }\n break;\n\n case WS_SERVER_MESSAGES.UNSUBSCRIBED:\n if (message.channel) {\n this.logger.debug('Unsubscribed from channel:', message.channel);\n }\n break;\n\n case WS_SERVER_MESSAGES.MESSAGE:\n if (message.channel && message.message) {\n const fullMessage: Message = {\n id: message.message.id,\n channel: message.channel,\n eventType: message.message.eventType,\n clientId: message.message.clientId,\n content: message.message.content,\n timestamp: message.message.timestamp,\n };\n\n // Notify subscription handler\n this.subscriptions.handleMessage(fullMessage);\n\n // Emit general message event\n this.emit('message', fullMessage);\n }\n break;\n\n case WS_SERVER_MESSAGES.ERROR:\n if (message.channel) {\n const error = new PushFloError(\n message.error ?? 'Unknown error',\n message.code ?? ERROR_CODES.SERVER_ERROR\n );\n this.subscriptions.handleError(message.channel, error);\n }\n break;\n }\n }\n}\n","import { PushFloError } from './PushFloError.js';\nimport { ERROR_CODES } from '../utils/constants.js';\n\n/**\n * Error thrown for network-related failures\n */\nexport class NetworkError extends PushFloError {\n /** HTTP status code, if applicable */\n readonly statusCode?: number;\n\n constructor(\n message: string,\n code: string = ERROR_CODES.NETWORK_ERROR,\n options: { retryable?: boolean; cause?: Error; statusCode?: number } = {}\n ) {\n super(message, code, { retryable: true, ...options });\n this.name = 'NetworkError';\n this.statusCode = options.statusCode;\n }\n\n /**\n * Create a network error from fetch failure\n */\n static fromFetch(cause: Error): NetworkError {\n return new NetworkError(\n `Network request failed: ${cause.message}`,\n ERROR_CODES.NETWORK_ERROR,\n { retryable: true, cause }\n );\n }\n\n /**\n * Create a request timeout error\n */\n static timeout(timeoutMs: number): NetworkError {\n return new NetworkError(\n `Request timed out after ${timeoutMs}ms`,\n ERROR_CODES.REQUEST_TIMEOUT,\n { retryable: true }\n );\n }\n\n /**\n * Create an error from HTTP status code\n */\n static fromStatus(statusCode: number, message?: string): NetworkError {\n const defaultMessage = NetworkError.getStatusMessage(statusCode);\n\n // Determine if retryable based on status\n const retryable = statusCode >= 500 || statusCode === 429;\n\n // Map status to error code\n let code: string = ERROR_CODES.SERVER_ERROR;\n if (statusCode === 404) {\n code = ERROR_CODES.NOT_FOUND;\n } else if (statusCode === 422 || statusCode === 400) {\n code = ERROR_CODES.VALIDATION_ERROR;\n } else if (statusCode === 429) {\n code = ERROR_CODES.RATE_LIMITED;\n }\n\n return new NetworkError(\n message ?? defaultMessage,\n code,\n { retryable, statusCode }\n );\n }\n\n private static getStatusMessage(statusCode: number): string {\n const messages: Record<number, string> = {\n 400: 'Bad request',\n 404: 'Resource not found',\n 422: 'Validation error',\n 429: 'Rate limit exceeded',\n 500: 'Internal server error',\n 502: 'Bad gateway',\n 503: 'Service unavailable',\n 504: 'Gateway timeout',\n };\n return messages[statusCode] ?? `HTTP error ${statusCode}`;\n }\n\n toJSON(): Record<string, unknown> {\n return {\n ...super.toJSON(),\n statusCode: this.statusCode,\n };\n }\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { P as PushFloClient } from './PushFloClient-JPowShqE.cjs';
|
|
2
|
+
import { P as PushFloError } from './api-DYrG_5uC.cjs';
|
|
3
|
+
export { A as AuthenticationError, C as Channel, a as ChannelInput, b as ChannelUpdateInput, L as ListChannelsOptions, N as NetworkError, c as Pagination } from './api-DYrG_5uC.cjs';
|
|
4
|
+
export { C as ClientOptions, a as ConnectionInfo, b as ConnectionState, M as Message, c as MessageHistoryOptions, P as PublishOptions, d as PublishResult, S as Subscription, e as SubscriptionOptions } from './message-CVgilLwz.cjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when connection to PushFlo fails
|
|
8
|
+
*/
|
|
9
|
+
declare class ConnectionError extends PushFloError {
|
|
10
|
+
constructor(message: string, code?: string, options?: {
|
|
11
|
+
retryable?: boolean;
|
|
12
|
+
cause?: Error;
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Create a connection timeout error
|
|
16
|
+
*/
|
|
17
|
+
static timeout(timeoutMs: number): ConnectionError;
|
|
18
|
+
/**
|
|
19
|
+
* Create a connection closed error
|
|
20
|
+
*/
|
|
21
|
+
static closed(reason?: string): ConnectionError;
|
|
22
|
+
/**
|
|
23
|
+
* Create a connection failed error
|
|
24
|
+
*/
|
|
25
|
+
static failed(reason?: string, cause?: Error): ConnectionError;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { ConnectionError, PushFloError };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export { P as PushFloClient } from './PushFloClient-ny0iyTYJ.js';
|
|
2
|
+
import { P as PushFloError } from './api-DYrG_5uC.js';
|
|
3
|
+
export { A as AuthenticationError, C as Channel, a as ChannelInput, b as ChannelUpdateInput, L as ListChannelsOptions, N as NetworkError, c as Pagination } from './api-DYrG_5uC.js';
|
|
4
|
+
export { C as ClientOptions, a as ConnectionInfo, b as ConnectionState, M as Message, c as MessageHistoryOptions, P as PublishOptions, d as PublishResult, S as Subscription, e as SubscriptionOptions } from './message-CVgilLwz.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when connection to PushFlo fails
|
|
8
|
+
*/
|
|
9
|
+
declare class ConnectionError extends PushFloError {
|
|
10
|
+
constructor(message: string, code?: string, options?: {
|
|
11
|
+
retryable?: boolean;
|
|
12
|
+
cause?: Error;
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Create a connection timeout error
|
|
16
|
+
*/
|
|
17
|
+
static timeout(timeoutMs: number): ConnectionError;
|
|
18
|
+
/**
|
|
19
|
+
* Create a connection closed error
|
|
20
|
+
*/
|
|
21
|
+
static closed(reason?: string): ConnectionError;
|
|
22
|
+
/**
|
|
23
|
+
* Create a connection failed error
|
|
24
|
+
*/
|
|
25
|
+
static failed(reason?: string, cause?: Error): ConnectionError;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { ConnectionError, PushFloError };
|