[{"name":"@imqueue/async-logger","kind":"package","package":"@imqueue/async-logger","url":"/api/async-logger/latest/","summary":"Non-blocking logger for @imqueue services: writes to the console without holding up the caller, and ships the same records to file or HTTP transports configured entirely from the environment."},{"name":"_default","kind":"variable","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger._default/","summary":"A Logger configured from the environment, constructed at import time."},{"name":"AnyJson","kind":"type","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.anyjson/","summary":"Any value that survives JSON.stringify unchanged."},{"name":"AsyncLoggerOptions.metadata","kind":"property","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.asyncloggeroptions.metadata/","summary":"Fields attached to every record sent to a transport, such as a source or environment tag. Does not affect console output."},{"name":"AsyncLoggerOptions.transports","kind":"property","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.asyncloggeroptions.transports/","summary":"Transports to log through. Each entry is created and attached at construction time; entries with enabled: false are skipped."},{"name":"AsyncLoggerOptions","kind":"interface","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.asyncloggeroptions/","summary":"Explicit configuration for a Logger, replacing what it would otherwise read from the environment."},{"name":"buildMessage","kind":"function","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.buildmessage/","summary":"Renders console.log-style arguments into the single string a transport record needs, applying util.format so %s/%d/%j placeholders and object inspection behave exactly as they do on the console."},{"name":"defaultMetadata","kind":"function","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.defaultmetadata/","summary":"Parses the default record metadata out of LOGGER_METADATA, expanding %name and %version first."},{"name":"getTransport","kind":"function","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.gettransport/","summary":"Constructs a winston transport of the named type."},{"name":"ILogger.error","kind":"method","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.ilogger.error/","summary":"Logs at ERROR level."},{"name":"ILogger.info","kind":"method","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.ilogger.info/","summary":"Logs at INFO level."},{"name":"ILogger.log","kind":"method","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.ilogger.log/","summary":"Logs at the default level."},{"name":"ILogger.warn","kind":"method","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.ilogger.warn/","summary":"Logs at WARN level."},{"name":"ILogger","kind":"interface","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.ilogger/","summary":"The logger contract shared across @imqueue — the four console methods, and nothing else."},{"name":"JsonArray","kind":"interface","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.jsonarray/","summary":"A JSON array — any number of AnyJson values."},{"name":"JsonObject","kind":"interface","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.jsonobject/","summary":"A JSON object — string keys, AnyJson values. This is the type of the logger's default metadata."},{"name":"Logger.(constructor)","kind":"constructor","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.logger._constructor_/","summary":"Constructs a new instance of the Logger class"},{"name":"Logger.error","kind":"method","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.logger.error/","summary":"Logs at ERROR level."},{"name":"Logger.info","kind":"method","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.logger.info/","summary":"Logs at INFO level — routine progress worth keeping."},{"name":"Logger.log","kind":"method","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.logger.log/","summary":"Logs to the console and to every configured transport."},{"name":"Logger.warn","kind":"method","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.logger.warn/","summary":"Logs at WARN level — something recovered from, but worth seeing."},{"name":"Logger","kind":"class","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.logger/","summary":"Logger that writes to the console without blocking the caller and forwards the same records to any configured winston transports."},{"name":"pkg","kind":"function","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.pkg/","summary":"Reads the running service's own name and version, used to expand the %name and %version placeholders in the logger environment variables."},{"name":"TransportOptions.enabled","kind":"property","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.transportoptions.enabled/","summary":"Whether to attach this transport. A false entry is skipped entirely, so a transport can be left in the config and switched off per environment rather than deleted."},{"name":"TransportOptions.options","kind":"property","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.transportoptions.options/","summary":"Options handed to the winston transport constructor — filename for file, host/port/path/ssl for http."},{"name":"TransportOptions.type","kind":"property","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.transportoptions.type/","summary":"Which transport to create: 'file' or 'http'. Any other value is rejected at construction time."},{"name":"TransportOptions","kind":"interface","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.transportoptions/","summary":"One transport declaration — the shape of each element in the LOGGER_TRANSPORTS JSON array."},{"name":"transportsConfig","kind":"function","package":"@imqueue/async-logger","url":"/api/async-logger/latest/async-logger.transportsconfig/","summary":"Parses the transport declarations out of LOGGER_TRANSPORTS, expanding %name and %version first."},{"name":"@imqueue/core","kind":"package","package":"@imqueue/core","url":"/api/core/latest/","summary":"Redis-backed message queue engine for the @imqueue framework — the transport shared by @imqueue/rpc and the job packages."},{"name":"AllowedTimeFormat","kind":"type","package":"@imqueue/core","url":"/api/core/latest/core.allowedtimeformat/","summary":"Units in which profiled execution time can be rendered."},{"name":"AnyJson","kind":"type","package":"@imqueue/core","url":"/api/core/latest/core.anyjson/","summary":"Any JSON value."},{"name":"ClusteredRedisQueue.(constructor)","kind":"constructor","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue._constructor_/","summary":"Creates a clustered queue."},{"name":"ClusteredRedisQueue.addListener","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.addlistener/","summary":"Registers a listener on every server's queue and on the internal template. Alias of ClusteredRedisQueue.on()."},{"name":"ClusteredRedisQueue.addServer","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.addserver/","summary":"Adds a single server to the cluster and returns its registration record."},{"name":"ClusteredRedisQueue.clear","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.clear/","summary":"Deletes this queue's data on every redis host in the cluster, concurrently."},{"name":"ClusteredRedisQueue.destroy","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.destroy/","summary":"Destroys every server's queue — closing their connections and removing their event listeners — then unregisters this cluster from all configured cluster managers."},{"name":"ClusteredRedisQueue.emit","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.emit/","summary":"Emits an event on every server's queue and on the internal template, so each listener registered through this class runs once per server."},{"name":"ClusteredRedisQueue.eventNames","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.eventnames/","summary":"Returns the event names reported by a single representative emitter."},{"name":"ClusteredRedisQueue.getMaxListeners","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.getmaxlisteners/","summary":"Returns the maximum listener count of the internal template emitter."},{"name":"ClusteredRedisQueue.listenerCount","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.listenercount/","summary":"Returns the listener count reported by a single representative emitter."},{"name":"ClusteredRedisQueue.listeners","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.listeners/","summary":"Returns the listeners of every server's queue plus the internal template, concatenated."},{"name":"ClusteredRedisQueue.logger","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.logger/","summary":"Logger used for this cluster's own messages, defaulting to IMQOptions.logger or console."},{"name":"ClusteredRedisQueue.name","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.name/","summary":"Name of this queue, used as the queue name for every per-host queue in the cluster."},{"name":"ClusteredRedisQueue.off","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.off/","summary":"Removes a listener from every server's queue and from the internal template."},{"name":"ClusteredRedisQueue.on","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.on/","summary":"Registers a listener on every server's queue and on the internal template used to seed servers that join later."},{"name":"ClusteredRedisQueue.once","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.once/","summary":"Registers a one-shot listener on every server's queue and on the internal template."},{"name":"ClusteredRedisQueue.prependListener","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.prependlistener/","summary":"Registers a listener at the front of the queue on every server's queue and on the internal template."},{"name":"ClusteredRedisQueue.prependOnceListener","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.prependoncelistener/","summary":"Registers a one-shot listener at the front of the queue on every server's queue and on the internal template."},{"name":"ClusteredRedisQueue.publish","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.publish/","summary":"Publishes the payload on every redis host in the cluster."},{"name":"ClusteredRedisQueue.queueLength","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.queuelength/","summary":"Returns the total number of messages waiting, summed across every redis host in the cluster."},{"name":"ClusteredRedisQueue.rawListeners","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.rawlisteners/","summary":"Returns the raw listeners of every server's queue plus the internal template, concatenated."},{"name":"ClusteredRedisQueue.removeAllListeners","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.removealllisteners/","summary":"Removes every listener from every server's queue and from the internal template, so servers that join later also start clean."},{"name":"ClusteredRedisQueue.removeListener","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.removelistener/","summary":"Removes a listener from every server's queue and from the internal template. Alias of ClusteredRedisQueue.off()."},{"name":"ClusteredRedisQueue.removeServer","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.removeserver/","summary":"Removes a server from the cluster, matching by id or by host and port."},{"name":"ClusteredRedisQueue.send","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.send/","summary":"Sends a message to one server of the cluster, selected by health-aware round-robin."},{"name":"ClusteredRedisQueue.setMaxListeners","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.setmaxlisteners/","summary":"Sets the maximum listener count on every server's queue and on the internal template."},{"name":"ClusteredRedisQueue.start","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.start/","summary":"Starts every server's queue concurrently."},{"name":"ClusteredRedisQueue.stop","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.stop/","summary":"Stops message handling on every server concurrently."},{"name":"ClusteredRedisQueue.subscribe","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.subscribe/","summary":"Subscribes the given handler on every redis host in the cluster, and remembers the subscription so servers that join later are subscribed automatically."},{"name":"ClusteredRedisQueue.unsubscribe","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue.unsubscribe/","summary":"Unsubscribes from the channel on every redis host and forgets the remembered subscription, so servers joining later are no longer subscribed automatically."},{"name":"ClusteredRedisQueue","kind":"class","package":"@imqueue/core","url":"/api/core/latest/core.clusteredredisqueue/","summary":"Scales a single logical queue horizontally across several redis instances. This is what IMQ.create() returns when IMQOptions.cluster or IMQOptions.clusterManagers is supplied."},{"name":"ClusterManager.(constructor)","kind":"constructor","package":"@imqueue/core","url":"/api/core/latest/core.clustermanager._constructor_/","summary":"Constructs a new instance of the ClusterManager class"},{"name":"ClusterManager.clusters","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.clustermanager.clusters/","summary":"Clusters currently registered with this manager."},{"name":"ClusterManager.destroy","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clustermanager.destroy/","summary":"Releases the manager's transport. Implemented by subclasses, and must be safe to call more than once."},{"name":"ClusterManager.forEachCluster","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clustermanager.foreachcluster/","summary":"Applies the given callback to every registered cluster. Each cluster is handled independently: a callback that throws (synchronously or asynchronously) for one cluster never prevents the remaining clusters from being processed."},{"name":"ClusterManager.init","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clustermanager.init/","summary":"Registers a cluster's membership callbacks with this manager and returns an identified handle."},{"name":"ClusterManager.remove","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.clustermanager.remove/","summary":"Unregisters a cluster from this manager."},{"name":"ClusterManager","kind":"class","package":"@imqueue/core","url":"/api/core/latest/core.clustermanager/","summary":"Abstract base for cluster-membership discovery. A manager tracks the clusters it feeds and pushes server add/remove events into each of them, so several clustered queues can share one discovery mechanism."},{"name":"ClusterServer.imq","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.clusterserver.imq/","summary":"Queue instance created for this host. Present once the server has been registered; the queue may still be starting."},{"name":"ClusterServer","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.clusterserver/","summary":"A server registered in a ClusteredRedisQueue: its address, plus the RedisQueue instance serving that host."},{"name":"DebugInfoOptions.args","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions.args/","summary":"Call arguments"},{"name":"DebugInfoOptions.className","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions.classname/","summary":"Class name"},{"name":"DebugInfoOptions.debugArgs","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions.debugargs/","summary":"Enable or disable call arguments debugging"},{"name":"DebugInfoOptions.debugTime","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions.debugtime/","summary":"Enable or disable execution time debugging"},{"name":"DebugInfoOptions.logger","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions.logger/","summary":"Logger implementation (absent when the target carries no logger)"},{"name":"DebugInfoOptions.logLevel","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions.loglevel/","summary":"Log level to use for the call"},{"name":"DebugInfoOptions.methodName","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions.methodname/","summary":"Method name"},{"name":"DebugInfoOptions.start","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions.start/","summary":"Nanosecond-resolution start reading, as returned by process.hrtime.bigint()."},{"name":"DebugInfoOptions","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.debuginfooptions/","summary":"Fully-resolved description of a single profiled call, as passed to logDebugInfo()."},{"name":"DEFAULT_IMQ_OPTIONS","kind":"variable","package":"@imqueue/core","url":"/api/core/latest/core.default_imq_options/","summary":"Default option values applied to every queue instance: localhost:6379, prefix imq, console as the logger, cleanup off with filter '*', safe delivery off with a 5000 ms lease TTL, gzip off, a 5000 ms watcher check interval, and process signal handling on."},{"name":"DEFAULT_UDP_CLUSTER_MANAGER_OPTIONS","kind":"variable","package":"@imqueue/core","url":"/api/core/latest/core.default_udp_cluster_manager_options/","summary":"Default options applied to every UDPClusterManager unless overridden: broadcast address 255.255.255.255 on port 63000, a 5000 ms alive-timeout correction, liveness checking enabled, process signal handling enabled, and console as the logger."},{"name":"EventMap.error","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.eventmap.error/","summary":"Emitted for background failures, with the error and the name of the internal routine that caught it — a diagnostic label such as OnMessage, OnReadSafe or OnWatch, not an error code."},{"name":"EventMap.message","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.eventmap.message/","summary":"Emitted for every message consumed from the queue, with the payload, the message id, and the name of the queue that sent it."},{"name":"EventMap","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.eventmap/","summary":"Typed event map for a queue's EventEmitter base, giving compile-time signatures for the only two events a queue emits."},{"name":"ICluster.add","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.icluster.add/","summary":"Adds a server to the cluster and returns its registration record. Registration is idempotent — an already-known server is returned unchanged."},{"name":"ICluster.find","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.icluster.find/","summary":"Looks a server up, matching by id when both sides carry one and by host and port otherwise. Returns undefined when it is not registered."},{"name":"ICluster.remove","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.icluster.remove/","summary":"Removes a server from the cluster. A no-op when the server is unknown."},{"name":"ICluster","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.icluster/","summary":"Membership callbacks a clustered queue hands to a ClusterManager so the manager can add and remove servers as it discovers them."},{"name":"ILogger.error","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.ilogger.error/","summary":"Writes a message at the error level."},{"name":"ILogger.info","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.ilogger.info/","summary":"Writes a message at the info level."},{"name":"ILogger.log","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.ilogger.log/","summary":"Writes a message at the log level."},{"name":"ILogger.warn","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.ilogger.warn/","summary":"Writes a message at the warn level."},{"name":"ILogger","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.ilogger/","summary":"Minimal logging contract the framework writes diagnostics through. The global console satisfies it, and it is the default."},{"name":"IMessage.delay","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessage.delay/","summary":"Warning: This API is now obsolete. Inert, and always absent in practice — the Redis adapter never writes this field and never reads it. Delays are carried in the queue's delayed sorted set, not in the message envelope, so pass the delay to IMessageQueue.send() instead. Scheduled for removal in the next major.","deprecated":true},{"name":"IMessage.from","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessage.from/","summary":"Name of the queue that produced the message."},{"name":"IMessage.id","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessage.id/","summary":"Unique identifier assigned to the message when it was sent."},{"name":"IMessage.message","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessage.message/","summary":"The message payload. Must be a JSON object — a bare string, number or array is not a valid message body."},{"name":"IMessage","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.imessage/","summary":"Internal envelope of a queued message as it is stored in Redis: a generated id, the caller's payload, and the name of the queue that sent it."},{"name":"IMessageQueue.clear","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.clear/","summary":"Deletes this queue's pending messages — both the main list and the delayed set for <prefix>:<name>."},{"name":"IMessageQueue.destroy","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.destroy/","summary":"Releases this queue handle: removes all event listeners, stops the maintenance timers, releases the watcher lock if held, disconnects the reader, and drops this instance's reference to the shared writer."},{"name":"IMessageQueue.publish","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.publish/","summary":"Publishes data to the current queue channel"},{"name":"IMessageQueue.queueLength","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.queuelength/","summary":"Returns the number of messages currently waiting in this queue's main list."},{"name":"IMessageQueue.send","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.send/","summary":"Sends a message to the specified queue with the given data."},{"name":"IMessageQueue.start","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.start/","summary":"Starts the queue: opens its connections, joins watcher election and begins consuming, so message events start arriving."},{"name":"IMessageQueue.stop","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.stop/","summary":"Stops consuming, so no further message events fire."},{"name":"IMessageQueue.subscribe","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.subscribe/","summary":"Subscribes to the pub/sub channel with the given name and registers a handler for the data it delivers. The effective channel is <prefix>:<channel>."},{"name":"IMessageQueue.unsubscribe","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue.unsubscribe/","summary":"Closes the subscription channel and drops every handler registered through IMessageQueue.subscribe(), resetting the instance so a later subscription may use a different channel name."},{"name":"IMessageQueue","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeue/","summary":"Contract every messaging queue implementation fulfils. Implement it to add a transport of your own, or program against it to stay adapter-agnostic."},{"name":"IMessageQueueAuthConnection.password","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeueauthconnection.password/","summary":"Password for the queue host."},{"name":"IMessageQueueAuthConnection.username","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeueauthconnection.username/","summary":"Redis ACL user name. Omit for a server that only uses requirepass."},{"name":"IMessageQueueAuthConnection","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeueauthconnection/","summary":"Optional credentials for a queue host, forwarded to the Redis client as username and password."},{"name":"IMessageQueueConnection.host","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeueconnection.host/","summary":"Host name or IP address of the queue host. Defaults to localhost."},{"name":"IMessageQueueConnection.id","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeueconnection.id/","summary":"Identifier used to match this endpoint against cluster membership. Meaningful on cluster entries only, not at the top level of IMQOptions."},{"name":"IMessageQueueConnection.port","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeueconnection.port/","summary":"TCP port of the queue host. Defaults to 6379."},{"name":"IMessageQueueConnection","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeueconnection/","summary":"A single queue-host endpoint: where to connect and, optionally, how to authenticate."},{"name":"IMessageQueueConstructor","kind":"type","package":"@imqueue/core","url":"/api/core/latest/core.imessagequeueconstructor/","summary":"Constructor contract every queue adapter must satisfy: it takes the queue name, optional partial options and an optional IMQMode, and yields an IMessageQueue."},{"name":"IMQ_CONNECTION_QUIT_TIMEOUT","kind":"variable","package":"@imqueue/core","url":"/api/core/latest/core.imq_connection_quit_timeout/","summary":"Grace period (ms) for a graceful QUIT to complete before a channel is forcibly disconnected. A reader blocked on an infinite BRPOP/BLMOVE can never let QUIT through, so without this the socket would leak and keep the process alive."},{"name":"IMQ_LOG_ARGS","kind":"variable","package":"@imqueue/core","url":"/api/core/latest/core.imq_log_args/","summary":"Whether call-argument profiling is on by default, from the IMQ_LOG_ARGS environment variable."},{"name":"IMQ_LOG_LEVEL","kind":"variable","package":"@imqueue/core","url":"/api/core/latest/core.imq_log_level/","summary":"Default logger method for profiling output, from the IMQ_LOG_LEVEL environment variable."},{"name":"IMQ_LOG_TIME_FORMAT","kind":"variable","package":"@imqueue/core","url":"/api/core/latest/core.imq_log_time_format/","summary":"Unit used when rendering profiled execution time, from the IMQ_LOG_TIME_FORMAT environment variable. Accepts microseconds, milliseconds or seconds, and defaults to microseconds."},{"name":"IMQ_LOG_TIME","kind":"variable","package":"@imqueue/core","url":"/api/core/latest/core.imq_log_time/","summary":"Whether execution-time profiling is on by default, from the IMQ_LOG_TIME environment variable."},{"name":"IMQ_SHUTDOWN_TIMEOUT","kind":"variable","package":"@imqueue/core","url":"/api/core/latest/core.imq_shutdown_timeout/","summary":"Time in milliseconds allowed for releasing watcher locks when a shutdown signal is received, before the process is force-exited. Defaults to 1000; override with the IMQ_SHUTDOWN_TIMEOUT environment variable."},{"name":"IMQ.create","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.imq.create/","summary":"Instantiates the queue adapter matching the given options and returns it ready to be started."},{"name":"IMQ","kind":"class","package":"@imqueue/core","url":"/api/core/latest/core.imq/","summary":"Message queue factory. This is also the default export of @imqueue/core."},{"name":"IMQMode","kind":"enum","package":"@imqueue/core","url":"/api/core/latest/core.imqmode/","summary":"Operating mode of a queue instance, selecting which halves of the queue are active. Passed as the third constructor argument and defaults to IMQMode.BOTH."},{"name":"IMQOptions.cleanup","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.cleanup/","summary":"Turns on/off the watcher's periodic removal of orphaned keys. Defaults to false."},{"name":"IMQOptions.cleanupFilter","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.cleanupfilter/","summary":"Redis glob pattern, appended to the prefix as <prefix>:<cleanupFilter>, selecting which keys the cleanup sweep considers. Defaults to '*' — every key in the namespace."},{"name":"IMQOptions.cluster","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.cluster/","summary":"Redis servers to spread this queue across. Supplying this — or IMQOptions.clusterManagers — makes IMQ.create() return a ClusteredRedisQueue."},{"name":"IMQOptions.clusterManagers","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.clustermanagers/","summary":"Cluster managers that discover and maintain cluster servers dynamically. Supplying this — or IMQOptions.cluster — makes IMQ.create() return a ClusteredRedisQueue."},{"name":"IMQOptions.handleSignals","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.handlesignals/","summary":"Enable process signal handling (SIGTERM, SIGINT, SIGABRT) by the queue. When enabled, the queue releases its watcher lock on these signals and then exits the process. It does not wait for in-flight message handlers to finish, so drain those yourself if work in progress must not be lost. Disable if the host application manages shutdown."},{"name":"IMQOptions.logger","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.logger/","summary":"Logger used for queue diagnostics. Defaults to console."},{"name":"IMQOptions.prefix","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.prefix/","summary":"Global key namespace for everything this queue writes. Defaults to 'imq'."},{"name":"IMQOptions.safeDelivery","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.safedelivery/","summary":"Enable guaranteed message delivery. When enabled, reading a message moves it atomically out of the queue into a worker-owned key instead of popping it outright, so a worker that dies before it even starts on a message leaves that message behind for the watcher to re-queue rather than taking it down with the process."},{"name":"IMQOptions.safeDeliveryTtl","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.safedeliveryttl/","summary":"Lease deadline (in milliseconds) stamped onto the worker key when safeDelivery moves a message out of the queue, and the interval on which the watcher sweeps for expired keys. A worker key still present once its deadline has passed is treated as abandoned, and its message is moved back onto the main queue."},{"name":"IMQOptions.useGzip","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.usegzip/","summary":"Enable message compression for serialization. Increases a worker CPU load but decreases network traffic between workers and the queue host. Defaults to false."},{"name":"IMQOptions.vendor","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.vendor/","summary":"Queue adapter vendor name. Defaults to 'Redis', which is the only supported value."},{"name":"IMQOptions.verbose","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.verbose/","summary":"Enables/disables verbose logging."},{"name":"IMQOptions.verboseExtended","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.verboseextended/","summary":"Warning: This API is now obsolete. Never implemented — no code path reads this option, so setting it produces no additional output whatsoever. Use IMQOptions.verbose instead. Scheduled for removal in the next major.","deprecated":true},{"name":"IMQOptions.watcherCheckDelay","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions.watchercheckdelay/","summary":"Interval in milliseconds of the periodic watcher check. Defaults to 5000."},{"name":"IMQOptions","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.imqoptions/","summary":"Options accepted by every queue implementation."},{"name":"InitializedCluster.id","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.initializedcluster.id/","summary":"Identifier generated when the cluster was registered."},{"name":"InitializedCluster","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.initializedcluster/","summary":"A cluster that has been registered with a ClusterManager, carrying the generated id that identifies it for ClusterManager.remove()."},{"name":"IRedisClient.__imq","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.iredisclient.__imq/","summary":"Internal marker stamped on every Redis connection created by the queue, identifying it as imq-owned. Currently written but not read by the framework. Not part of the supported API."},{"name":"IRedisClient.__ready__","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.iredisclient.__ready__/","summary":"Internal flag marking a watcher connection whose keyspace subscriptions and maintenance interval have already been installed, so watcher setup runs at most once per connection. Not part of the supported API."},{"name":"IRedisClient","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.iredisclient/","summary":"The ioredis Redis client type augmented with the two internal bookkeeping flags imq stamps onto the connections it creates. Not intended for use as an option or parameter type by consumers."},{"name":"IServerInput.host","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.iserverinput.host/","summary":"Host name or IP address of the server."},{"name":"IServerInput.id","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.iserverinput.id/","summary":"Identifier used to match this server against cluster membership. When omitted, matching falls back to host and port."},{"name":"IServerInput.port","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.iserverinput.port/","summary":"TCP port the server listens on."},{"name":"IServerInput","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.iserverinput/","summary":"Address of a cluster server, as supplied to the cluster membership operations ICluster.add, ICluster.remove and ICluster.find."},{"name":"JsonArray","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.jsonarray/","summary":"Represents JSON-serializable array"},{"name":"JsonObject","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.jsonobject/","summary":"Represents JSON serializable object"},{"name":"logDebugInfo","kind":"function","package":"@imqueue/core","url":"/api/core/latest/core.logdebuginfo/","summary":"Emits the profiling output for a single call: the elapsed time computed from input.start, and/or the call arguments serialized as indented JSON."},{"name":"LogLevel","kind":"enum","package":"@imqueue/core","url":"/api/core/latest/core.loglevel/","summary":"Logger method to which profiling output is dispatched. Each value is the literal name of the corresponding ILogger method, so the level is used as a property lookup on the logger."},{"name":"profile","kind":"function","package":"@imqueue/core","url":"/api/core/latest/core.profile/","summary":"Wraps a class method so that its execution time and/or its call arguments are logged through the logger property of the decorated instance."},{"name":"ProfileDecoratorOptions.enableDebugArgs","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.profiledecoratoroptions.enabledebugargs/","summary":"Turns on/off arguments debugging, overriding IMQ_LOG_ARGS."},{"name":"ProfileDecoratorOptions.enableDebugTime","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.profiledecoratoroptions.enabledebugtime/","summary":"Turns on/off execution time debugging, overriding IMQ_LOG_TIME."},{"name":"ProfileDecoratorOptions.logLevel","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.profiledecoratoroptions.loglevel/","summary":"Logger method used for the profiling output — one of log, info, warn or error. Overrides IMQ_LOG_LEVEL, which itself defaults to info."},{"name":"ProfileDecoratorOptions","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.profiledecoratoroptions/","summary":"Options accepted by the profile() decorator."},{"name":"RedisQueue.(constructor)","kind":"constructor","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue._constructor_/","summary":"Creates a queue handle. No connection is opened here — call RedisQueue.start(), or RedisQueue.send(), which starts the queue implicitly."},{"name":"RedisQueue.available","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.available/","summary":"Returns false only when this queue is known to be unable to accept writes right now — i.e., it has a writer connection currently in a non-ready (reconnecting/closed) state. A queue that has not yet connected is considered available, since sending connects it lazily. Used for health-aware routing in the clustered queue."},{"name":"RedisQueue.clear","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.clear/","summary":"Deletes this queue's message list and its delayed-message set from redis."},{"name":"RedisQueue.destroy","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.destroy/","summary":"Gracefully destroys this queue handle. Does not remove queue data from redis unless clearData is explicitly set to true, so that destroying one handle (e.g., on scale-down) never wipes messages still pending for other producers/consumers."},{"name":"RedisQueue.isPublisher","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.ispublisher/","summary":"Returns true if publisher mode is enabled on this queue, false otherwise."},{"name":"RedisQueue.isWorker","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.isworker/","summary":"Returns true if worker mode is enabled on this queue, false otherwise."},{"name":"RedisQueue.name","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.name/","summary":"The queue name. The underlying redis list key is <prefix>:<name>, the same name is the default pub/sub channel used by RedisQueue.publish(), and it is the from value carried by messages this queue sends."},{"name":"RedisQueue.options","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.options/","summary":"The effective options for this queue: DEFAULT_IMQ_OPTIONS merged with the values passed to the constructor."},{"name":"RedisQueue.publish","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.publish/","summary":"Publishes a message to this queue subscription channel for currently subscribed clients."},{"name":"RedisQueue.queueLength","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.queuelength/","summary":"Returns the number of messages currently waiting in this queue's main list."},{"name":"RedisQueue.redisKey","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.rediskey/","summary":"The host:port address of the redis server this queue talks to."},{"name":"RedisQueue.send","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.send/","summary":"Sends a given message to a given queue (by name)."},{"name":"RedisQueue.start","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.start/","summary":"Initializes and starts current queue routines: opens the writer (and, in IMQMode.BOTH or IMQMode.WORKER mode, the reader), joins watcher election and starts the periodic watcher check."},{"name":"RedisQueue.stop","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.stop/","summary":"Stops consuming messages by tearing down this instance's reader connection."},{"name":"RedisQueue.subscribe","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.subscribe/","summary":"Creates a subscription channel over redis and sets up channel data read handler. The effective Redis channel is <prefix>:<channel>."},{"name":"RedisQueue.unsubscribe","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue.unsubscribe/","summary":"Closes the subscription connection and forgets the channel name together with every handler registered through RedisQueue.subscribe()."},{"name":"RedisQueue","kind":"class","package":"@imqueue/core","url":"/api/core/latest/core.redisqueue/","summary":"Redis-backed message queue with at-least-once delivery — the default IMessageQueue implementation, and what IMQ.create() returns for a single-server configuration."},{"name":"UDPClusterManager.(constructor)","kind":"constructor","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanager._constructor_/","summary":"Creates the manager and starts listening for broadcasts immediately, joining an existing worker when another manager already uses the same broadcast settings."},{"name":"UDPClusterManager.destroy","kind":"method","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanager.destroy/","summary":"Stops this manager and releases its share of the broadcast worker."},{"name":"UDPClusterManager","kind":"class","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanager/","summary":"Cluster manager that discovers redis cluster members from UDP broadcast announcements. Supply instances through IMQOptions.clusterManagers."},{"name":"UDPClusterManagerOptions.address","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanageroptions.address/","summary":"Broadcast address the cluster announces on."},{"name":"UDPClusterManagerOptions.aliveTimeoutCorrection","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanageroptions.alivetimeoutcorrection/","summary":"Grace period in milliseconds added to the liveness timeout each server advertises in its broadcast."},{"name":"UDPClusterManagerOptions.handleSignals","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanageroptions.handlesignals/","summary":"Enable process signal handling (SIGTERM, SIGINT, SIGABRT) by the manager. When enabled, the manager stops its UDP workers on these signals and then re-raises the signal, so the process terminates through the default signal behavior. Disable if the host application manages its own shutdown sequence."},{"name":"UDPClusterManagerOptions.limitedAddress","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanageroptions.limitedaddress/","summary":"Limited-broadcast address marker. No default: when unset, the worker tries to bind the local interface matching UDPClusterManagerOptions.address."},{"name":"UDPClusterManagerOptions.logger","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanageroptions.logger/","summary":"Logger used for worker supervision messages"},{"name":"UDPClusterManagerOptions.port","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanageroptions.port/","summary":"UDP port the manager listens on for cluster announcements."},{"name":"UDPClusterManagerOptions.useAliveCheck","kind":"property","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanageroptions.usealivecheck/","summary":"Whether announced servers are expired when they stop broadcasting."},{"name":"UDPClusterManagerOptions","kind":"interface","package":"@imqueue/core","url":"/api/core/latest/core.udpclustermanageroptions/","summary":"Configuration for UDPClusterManager."},{"name":"UDPWorkerOptions","kind":"type","package":"@imqueue/core","url":"/api/core/latest/core.udpworkeroptions/","summary":"The options actually handed to the UDP worker thread: everything except the logger, which is not structured-cloneable, and the signal-handling flag, which the main thread owns."},{"name":"verifyLogLevel","kind":"function","package":"@imqueue/core","url":"/api/core/latest/core.verifyloglevel/","summary":"Normalizes an arbitrary value into a LogLevel."},{"name":"@imqueue/datadog","kind":"package","package":"@imqueue/datadog","url":"/api/datadog/latest/","summary":"Datadog APM tracing for @imqueue/rpc — distributed traces across IMQ service calls, with no changes to service or client code."},{"name":"allowPluginEnvConfig","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.allowpluginenvconfig/","summary":"Adds DD_TRACE_<ID>_ENABLED to the tracer's configuration allow-list."},{"name":"CALL_CONTEXT","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.call_context/","summary":"Property an in-flight call's context is kept under, on the request itself, so that afterCall can finish the span beforeCall started. Never serialized, see hideContextFromJson()."},{"name":"CallHooks.afterCall","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.callhooks.aftercall/","summary":"Runs after the call. Publishes error when the response carries one, then always publishes finish so the span is closed either way."},{"name":"CallHooks.beforeCall","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.callhooks.beforecall/","summary":"Runs before the call. Builds the call context, attaches it to the request, and publishes the start event. Returns immediately when the channel has no subscribers."},{"name":"CallHooks","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.callhooks/","summary":"The pair of hooks @imqueue/rpc invokes around a call. Structurally equal to IMQBeforeCall/IMQAfterCall, but expressed without a type parameter so the same shape works for both client and service option objects."},{"name":"CARRIER_KEY","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.carrier_key/","summary":"Key inside request.metadata the propagated trace context travels in. Kept as it always was, so a service running this package still understands calls made by a client running an older release, and the other way round."},{"name":"CLIENT_OPERATION","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.client_operation/","summary":"Operation traced on the calling side of an imq RPC call."},{"name":"clientChannels","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.clientchannels/","summary":"Channels carrying client-side (outgoing call) events."},{"name":"clientHooks","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.clienthooks/","summary":"Hooks tracing outgoing calls, injecting the current context into the request. this is the IMQClient instance, whose serviceName names the service being called."},{"name":"CompositePlugin","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.compositeplugin/","summary":"Base class grouping several plugins under a single integration name."},{"name":"CompositePluginConstructor.(new)","kind":"constructor","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.compositepluginconstructor._new_/","summary":"Constructs the composite. Called by the tracer's plugin manager."},{"name":"CompositePluginConstructor.id","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.compositepluginconstructor.id/","summary":"Integration name, as passed to tracer.use()."},{"name":"CompositePluginConstructor.plugins","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.compositepluginconstructor.plugins/","summary":"The halves, keyed by the name each is configured under — client and server for this package's ImqPlugin."},{"name":"CompositePluginConstructor","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.compositepluginconstructor/","summary":"Static shape of a CompositePlugin subclass — an integration made of several named halves that can be configured independently."},{"name":"DDChannel.hasSubscribers","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.ddchannel.hassubscribers/","summary":"Whether anything is listening. Checked before building a call context, so that a process with tracing disabled pays nothing per RPC beyond this read."},{"name":"DDChannel.publish","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.ddchannel.publish/","summary":"Publishes an event to the subscribed plugins. Synchronous: subscribers run before this returns, which is what lets a plugin attach its span to the context the caller is about to use."},{"name":"DDChannel","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.ddchannel/","summary":"The subset of a diagnostics channel this package relies on. Channels are taken from dd-trace itself rather than from node:diagnostics_channel so that publisher and subscriber are guaranteed to be the very same channel object the tracer's plugins subscribe to."},{"name":"enablePlugin","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.enableplugin/","summary":"Enables the registered plugin. Separate from registration because the tracer's plugin manager ignores the announcement until it has a configuration, which tracer.init() gives it."},{"name":"IMQ_COMPONENT","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imq_component/","summary":"Integration name. Together with the operation it forms the channel prefix dd-trace plugins subscribe to (apm:<component>:<operation>:<event>), so it has to stay in sync with the plugin classes in ./client and ./server."},{"name":"ImqCallContext.carrier","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqcallcontext.carrier/","summary":"Carrier for the propagated trace context: the client writes into it, the server reads from it. It travels as request.metadata.clientSpan."},{"name":"ImqCallContext.error","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqcallcontext.error/","summary":"Error the call failed with, if any."},{"name":"ImqCallContext.from","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqcallcontext.from/","summary":"Queue name of the calling party, when the request carries one."},{"name":"ImqCallContext.method","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqcallcontext.method/","summary":"Name of the called method."},{"name":"ImqCallContext.serviceName","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqcallcontext.servicename/","summary":"Name of the imq service the call belongs to."},{"name":"ImqCallContext.span","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqcallcontext.span/","summary":"Span the plugin created for this call. Set by the plugin."},{"name":"ImqCallContext","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqcallcontext/","summary":"Everything the plugins need to describe a call. Instances are created by the instrumentation in ./instrumentation and travel through the channels; the plugins add span to them and read it back when the call completes."},{"name":"ImqClientPlugin.component","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin.component/","summary":"Component tag reported on every span, 'imq'."},{"name":"ImqClientPlugin.error","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin.error/","summary":"Marks the span as failed. The span itself is finished by finish(), which the instrumentation always publishes."},{"name":"ImqClientPlugin.finish","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin.finish/","summary":"Finishes the span of a completed call."},{"name":"ImqClientPlugin.id","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin.id/","summary":"Integration this plugin belongs to, 'imq'."},{"name":"ImqClientPlugin.kind","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin.kind/","summary":"Datadog span kind: this half issues calls."},{"name":"ImqClientPlugin.operation","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin.operation/","summary":"Operation half, 'request' — the middle segment of the apm:imq:request:* channels this subscribes to."},{"name":"ImqClientPlugin.start","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin.start/","summary":"Starts the span for an outgoing call and injects the trace context into the carrier so the handling service can continue the trace."},{"name":"ImqClientPlugin.type","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin.type/","summary":"Datadog span type — RPC over a queue is messaging."},{"name":"ImqClientPlugin","kind":"class","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqclientplugin/","summary":"Traces outgoing @imqueue RPC calls — the CLIENT half of the imq integration, producing the imq.request span."},{"name":"ImqPlugin.id","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqplugin.id/","summary":"Integration name, 'imq' — the string to pass to tracer.use() and the key of the DD_TRACE_IMQ_ENABLED environment switch."},{"name":"ImqPlugin.plugins","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqplugin.plugins/","summary":"The two halves this integration is composed of, which is what makes { client: false } and { server: false } valid options."},{"name":"ImqPlugin","kind":"class","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqplugin/","summary":"The imq integration, grouping both halves of an RPC call under a single name so that they share configuration and can be switched independently."},{"name":"ImqServerPlugin.component","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin.component/","summary":"Component tag reported on every span, 'imq'."},{"name":"ImqServerPlugin.error","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin.error/","summary":"Marks the span as failed. The span itself is finished by finish(), which the instrumentation always publishes."},{"name":"ImqServerPlugin.finish","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin.finish/","summary":"Finishes the span of a handled call."},{"name":"ImqServerPlugin.id","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin.id/","summary":"Integration this plugin belongs to, 'imq'."},{"name":"ImqServerPlugin.kind","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin.kind/","summary":"Datadog span kind: this half handles calls."},{"name":"ImqServerPlugin.operation","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin.operation/","summary":"Operation half, 'response' — the middle segment of the apm:imq:response:* channels this subscribes to."},{"name":"ImqServerPlugin.start","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin.start/","summary":"Starts the span for an incoming call, continuing the caller's trace when the request carries a propagated context."},{"name":"ImqServerPlugin.type","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin.type/","summary":"Datadog span type — RPC over a queue is messaging."},{"name":"ImqServerPlugin","kind":"class","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.imqserverplugin/","summary":"Traces incoming @imqueue RPC calls — the SERVER half of the imq integration, producing the imq.response span."},{"name":"installHooks","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.installhooks/","summary":"Installs the hooks into an @imqueue/rpc default options object."},{"name":"instrument","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.instrument/","summary":"Installs the tracing hooks into @imqueue/rpc."},{"name":"LOAD_CHANNEL","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.load_channel/","summary":"Name of the diagnostics channel the tracer's plugin manager listens on to learn that an instrumented module has been loaded."},{"name":"pluginRegistry","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.pluginregistry/","summary":"The tracer's plugin registry, keyed by the module name the load event is published for. Assigning into it is the only way for a package that does not live inside dd-trace to make its plugin discoverable."},{"name":"publishLoad","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.publishload/","summary":"Announces a loaded module to the tracer's plugin manager, which is what makes it instantiate and configure the registered plugin."},{"name":"registerPlugin","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.registerplugin/","summary":"Registers the imq integration with the tracer."},{"name":"REGISTRY_KEY","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.registry_key/","summary":"Registry key the plugin is announced under. It is the name of the traced package, matching what dd-trace uses for its own integrations."},{"name":"SERVER_OPERATION","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.server_operation/","summary":"Operation traced on the handling side of an imq RPC call."},{"name":"serverChannels","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.serverchannels/","summary":"Channels carrying server-side (incoming call) events."},{"name":"serverHooks","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.serverhooks/","summary":"Hooks tracing incoming calls, reading the propagated context from the request. this is the IMQService instance, whose name identifies it."},{"name":"StartSpanOptions.childOf","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.startspanoptions.childof/","summary":"Span to parent the new one to. Pass null explicitly to force a root span — omitting it lets the tracer pick whatever is active, which is rarely what an entry point wants."},{"name":"StartSpanOptions.kind","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.startspanoptions.kind/","summary":"Datadog span kind, 'client' or 'server'."},{"name":"StartSpanOptions.meta","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.startspanoptions.meta/","summary":"String tags for the span."},{"name":"StartSpanOptions.metrics","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.startspanoptions.metrics/","summary":"Numeric measurements for the span."},{"name":"StartSpanOptions.resource","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.startspanoptions.resource/","summary":"What the span operated on — the field Datadog groups by."},{"name":"StartSpanOptions.service","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.startspanoptions.service/","summary":"Service the span is attributed to."},{"name":"StartSpanOptions.type","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.startspanoptions.type/","summary":"Span type, e.g. 'messaging'."},{"name":"StartSpanOptions","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.startspanoptions/","summary":"Options accepted by TracingPlugin#startSpan()."},{"name":"trace","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.trace/","summary":"Starts a named span for tracing a block of code that no decorator can wrap, to be closed later by traceEnd() with the same name."},{"name":"traced","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.traced/","summary":"Builds a method decorator that wraps each call to the decorated method in its own span, finishing it when the method returns — or when the promise it returned settles."},{"name":"TracedOptions.kind","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracedoptions.kind/","summary":"Whether the decorated method serves work or calls out for it. Reported as the span.kind tag. Defaults to TraceKind.SERVER."},{"name":"TracedOptions.tags","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracedoptions.tags/","summary":"Extra tags for every span the decorator creates. Applied after the automatic ones, so a key used here overrides the automatic value — including resource.name, to name the operation yourself."},{"name":"TracedOptions","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracedoptions/","summary":"Options for the traced() method decorator. Every field is optional at the call site — traced() takes a Partial of this and fills the rest in."},{"name":"traceEnd","kind":"function","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.traceend/","summary":"Finishes the span trace() opened under this name and releases it, so the name can be reused."},{"name":"TraceKind","kind":"enum","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracekind/","summary":"Which side of a call a span describes. Reported as Datadog's span.kind tag."},{"name":"TraceTags","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracetags/","summary":"Datadog span tags as a flat string map."},{"name":"TracingPlugin","kind":"variable","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingplugin/","summary":"Base class every tracing plugin derives from."},{"name":"TracingPluginConstructor.(new)","kind":"constructor","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingpluginconstructor._new_/","summary":"Constructs the plugin. Called by the tracer's plugin manager."},{"name":"TracingPluginConstructor.component","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingpluginconstructor.component/","summary":"Component tag reported on the plugin's spans."},{"name":"TracingPluginConstructor.id","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingpluginconstructor.id/","summary":"Integration name, as passed to tracer.use()."},{"name":"TracingPluginConstructor.kind","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingpluginconstructor.kind/","summary":"Datadog span kind."},{"name":"TracingPluginConstructor.operation","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingpluginconstructor.operation/","summary":"Operation half, forming the apm:<component>:<operation>:* prefix."},{"name":"TracingPluginConstructor.prefix","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingpluginconstructor.prefix/","summary":"Channel prefix override, when the default is not wanted."},{"name":"TracingPluginConstructor.type","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingpluginconstructor.type/","summary":"Datadog span type."},{"name":"TracingPluginConstructor","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingpluginconstructor/","summary":"Static shape of a TracingPlugin subclass. The statics are how the tracer derives which channels a plugin subscribes to."},{"name":"TracingPluginType.config","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingplugintype.config/","summary":"Resolved configuration for this plugin."},{"name":"TracingPluginType.configure","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingplugintype.configure/","summary":"Applies configuration, called by the tracer's plugin manager."},{"name":"TracingPluginType.startSpan","kind":"method","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingplugintype.startspan/","summary":"Starts a span."},{"name":"TracingPluginType.tracer","kind":"property","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingplugintype.tracer/","summary":"The tracer instance, used to inject and extract trace context."},{"name":"TracingPluginType","kind":"interface","package":"@imqueue/datadog","url":"/api/datadog/latest/datadog.tracingplugintype/","summary":"Structural type of dd-trace's TracingPlugin. Only the members this package actually uses are described."},{"name":"@imqueue/graphql-dependency","kind":"package","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/","summary":"Declarative dependency loading for GraphQL schemas served by @imqueue services — describe how your types relate once, at start-up, and nested data arrives in bulk instead of one service call per resolved object."},{"name":"DataInitializer","kind":"type","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.datainitializer/","summary":"An async routine that fills extra fields onto a type's own objects before its dependencies load, registered with defineInitializer()."},{"name":"DataInitializerResult","kind":"interface","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.datainitializerresult/","summary":"What an initializer gives back: the extra fields to merge onto each object, keyed by that object's id."},{"name":"DataLoader","kind":"type","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.dataloader/","summary":"A bulk fetch for one entity type, registered with defineLoader() and called whenever that type is needed as another type's dependency."},{"name":"Dependency","kind":"variable","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.dependency/","summary":"The dependency description for a GraphQL object type — an alias for GraphQLDependency.create(), and the intended way to reach every method on this package's API."},{"name":"DependencyFieldsGetter","kind":"type","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.dependencyfieldsgetter/","summary":"A single field supplied as a thunk, used to name the fields an initializer fills. Deferred for the same reason as DependencyOptionsGetter."},{"name":"DependencyFilterOptions","kind":"interface","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.dependencyfilteroptions/","summary":"How a child type's objects are found: each key names a field of the child loader's filter, and its value is the parent field supplying the values."},{"name":"DependencyOptions.as","kind":"property","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.dependencyoptions.as/","summary":"The field on the parent type the loaded children are written to. Whether a single object or a list is attached is taken from this field's own GraphQL type, so a GraphQLList field receives every match and a plain one receives the first."},{"name":"DependencyOptions.filter","kind":"property","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.dependencyoptions.filter/","summary":"How to find the children belonging to each parent."},{"name":"DependencyOptions","kind":"interface","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.dependencyoptions/","summary":"One relation between a parent type and a child type: where the loaded children are attached, and how they are matched to their parent."},{"name":"DependencyOptionsGetter","kind":"type","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.dependencyoptionsgetter/","summary":"A relation supplied as a thunk, which is how require() takes it."},{"name":"GraphQLDependency.(constructor)","kind":"constructor","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency._constructor_/","summary":"Registers a description against its type. Not called directly — the constructor is protected so that Dependency and GraphQLDependency.create() stay the only way in, which is what keeps one description per type."},{"name":"GraphQLDependency.create","kind":"method","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency.create/","summary":"Returns the dependency description for a GraphQL object type, creating and registering it the first time the type is seen."},{"name":"GraphQLDependency.defineInitializer","kind":"method","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency.defineinitializer/","summary":"Declares an async routine that fills extra fields onto this type's own objects before its dependencies are loaded."},{"name":"GraphQLDependency.defineLoader","kind":"method","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency.defineloader/","summary":"Declares how to fetch many objects of this type in one call, which is what makes the type usable as another type's dependency."},{"name":"GraphQLDependency.isEmptyArg","kind":"method","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency.isemptyarg/","summary":"Reports whether a filter assembled for a loader has nothing left to look up, so the loader can be skipped."},{"name":"GraphQLDependency.load","kind":"method","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency.load/","summary":"Loads everything the request asked for beneath this type and attaches it to the result, in as few bulk calls as the graph allows."},{"name":"GraphQLDependency.require","kind":"method","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency.require/","summary":"Declares that this type owns a child type, and how the child's objects are found and where they are attached."},{"name":"GraphQLDependency.type","kind":"property","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency.type/","summary":"The GraphQL object type this description belongs to. Readable because both the registry and the per-request resolution cache are keyed by the type object itself, so anything walking the graph needs it."},{"name":"GraphQLDependency","kind":"class","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.graphqldependency/","summary":"One GraphQL object type's place in the dependency graph — its bulk loader, its optional initializer, and the child types it owns."},{"name":"ResolutionCache","kind":"type","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.resolutioncache/","summary":"Everything one load() call has resolved, one entry per participating type."},{"name":"ResolutionCacheData.calls","kind":"property","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.resolutioncachedata.calls/","summary":"The calls already made for this type, so an identical one is not repeated."},{"name":"ResolutionCacheData.data","kind":"property","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.resolutioncachedata.data/","summary":"The objects of this type already in hand, keyed by id. Ids found here are dropped from a loader's filter, so nothing is fetched twice."},{"name":"ResolutionCacheData.fields","kind":"property","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.resolutioncachedata.fields/","summary":"The union of the fields every part of the request asked of this type. Merging them means a type reached from several directions is fetched with one field set wide enough for all of them, rather than once per caller."},{"name":"ResolutionCacheData","kind":"interface","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.resolutioncachedata/","summary":"One type's entry in the resolution cache."},{"name":"ResolutionCacheDataMap","kind":"interface","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.resolutioncachedatamap/","summary":"Every object of one type seen so far in a request, keyed by id."},{"name":"ResolutionCallsMap","kind":"interface","package":"@imqueue/graphql-dependency","url":"/api/graphql-dependency/latest/graphql-dependency.resolutioncallsmap/","summary":"The loader and initializer calls already made during a request, keyed by a hash of the call's signature."},{"name":"@imqueue/http-protect","kind":"package","package":"@imqueue/http-protect","url":"/api/http-protect/latest/","summary":"Rate limiting and IP banning for express-like HTTP servers, backed by Redis."},{"name":"HttpProtect.(constructor)","kind":"constructor","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect._constructor_/","summary":"Resolves every threshold, parses the exempt networks and connects to Redis."},{"name":"HttpProtect.banLimit","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.banlimit/","summary":"The resolved ban threshold, from HttpProtectOptions.banLimit, HTTP_PROTECT_BAN_LIMIT, or 1000."},{"name":"HttpProtect.bannedNetworks","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.bannednetworks/","summary":"The current block list, as a Networks object."},{"name":"HttpProtect.blockListKey","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.blocklistkey/","summary":"The Redis key of the block-list set, <prefix>:block-list."},{"name":"HttpProtect.connect","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.connect/","summary":"Opens a Redis connection and adopts it as this instance's client."},{"name":"HttpProtect.destroy","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.destroy/","summary":"Disconnects the Redis client and drops it."},{"name":"HttpProtect.getClientIp","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.getclientip/","summary":"Resolves the client IP for a request — request-ip's getClientIp unless HttpProtectOptions.getClientIp replaced it."},{"name":"HttpProtect.isBanned","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.isbanned/","summary":"Whether an address is currently on the block list."},{"name":"HttpProtect.isLimited","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.islimited/","summary":"Whether an address is currently over the 429 threshold."},{"name":"HttpProtect.jsonMiddleware","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.jsonmiddleware/","summary":"A middleware that rejects with a JSON error body."},{"name":"HttpProtect.maxRequests","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.maxrequests/","summary":"The resolved 429 threshold, from HttpProtectOptions.maxRequests, HTTP_PROTECT_MAX_REQUESTS, or 200."},{"name":"HttpProtect.middleware","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.middleware/","summary":"A middleware that rejects with a bare status code and no body."},{"name":"HttpProtect.prefix","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.prefix/","summary":"The resolved Redis key prefix, from HttpProtectOptions.redisPrefix."},{"name":"HttpProtect.safeNetworks","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.safenetworks/","summary":"The parsed exempt networks, from HttpProtectOptions.safeNetworks."},{"name":"HttpProtect.textMiddleware","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.textmiddleware/","summary":"A middleware that rejects with text/plain."},{"name":"HttpProtect.ttl","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.ttl/","summary":"The resolved idle timeout in seconds, from HttpProtectOptions.ttl, HTTP_PROTECT_TTL, or 10."},{"name":"HttpProtect.verify","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect.verify/","summary":"Counts a request against its client IP and decides whether to serve it."},{"name":"HttpProtect","kind":"class","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotect/","summary":"Per-IP request counting, rate limiting and banning for an express-like server."},{"name":"HttpProtectOptions.banLimit","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions.banlimit/","summary":"Requests an address may accumulate before it is banned outright."},{"name":"HttpProtectOptions.getClientIp","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions.getclientip/","summary":"Resolver used to extract the client IP address from an incoming request. By default request-ip's getClientIp() is used, which reads the usual proxy headers (x-forwarded-for, x-real-ip, etc.)."},{"name":"HttpProtectOptions.maxRequests","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions.maxrequests/","summary":"Requests an address may accumulate before it is answered 429."},{"name":"HttpProtectOptions.redis","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions.redis/","summary":"An existing ioredis client to use instead of opening another connection."},{"name":"HttpProtectOptions.redisOptions","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions.redisoptions/","summary":"ioredis connection options, used only when HttpProtectOptions.redis is not given."},{"name":"HttpProtectOptions.redisPrefix","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions.redisprefix/","summary":"Prefix for every Redis key this module writes."},{"name":"HttpProtectOptions.safeNetworks","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions.safenetworks/","summary":"CIDR networks exempt from counting, limiting and banning."},{"name":"HttpProtectOptions.ttl","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions.ttl/","summary":"Seconds of silence from an address before its request counter is forgotten."},{"name":"HttpProtectOptions","kind":"interface","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.httpprotectoptions/","summary":"Configuration for the HttpProtect constructor."},{"name":"NextFunction","kind":"interface","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.nextfunction/","summary":"The next() callback an express-like framework passes to a middleware."},{"name":"Response.end","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.response.end/","summary":"Ends the response. Called by every middleware on a rejected request, including after Response.send()."},{"name":"Response.header","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.response.header/","summary":"Express-style header setter, preferred when present."},{"name":"Response.send","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.response.send/","summary":"Writes the response body. Given a plain string by HttpProtect.textMiddleware() and a JSON string by HttpProtect.jsonMiddleware(); never called by HttpProtect.middleware(), which answers with no body at all."},{"name":"Response.setHeader","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.response.setheader/","summary":"Node-style header setter, used only when Response.header() is absent."},{"name":"Response.status","kind":"method","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.response.status/","summary":"Sets the HTTP status code. Called with 429 or 418 before the body is sent."},{"name":"Response","kind":"interface","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.response/","summary":"The minimum a response object must provide for the middlewares to answer with."},{"name":"VerificationResponse.httpCode","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.verificationresponse.httpcode/","summary":"The status code matching VerificationResponse.status — 200 for SAFE, 429 for LIMITED, 418 for BANNED."},{"name":"VerificationResponse.status","kind":"property","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.verificationresponse.status/","summary":"What was decided about the request."},{"name":"VerificationResponse","kind":"interface","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.verificationresponse/","summary":"The verdict HttpProtect.verify() returns."},{"name":"VerificationStatus","kind":"enum","package":"@imqueue/http-protect","url":"/api/http-protect/latest/http-protect.verificationstatus/","summary":"What HttpProtect.verify() concluded about a request."},{"name":"@imqueue/job","kind":"package","package":"@imqueue/job","url":"/api/job/latest/","summary":"Simple, safe-by-default Redis job queue for @imqueue services — delayed and scheduled jobs, at-least-once delivery, and re-scheduling driven by whatever the handler returns."},{"name":"AnyJobQueue.destroy","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueue.destroy/","summary":"Closes the broker connection and releases the queue's resources for good. Unlike AnyJobQueue.stop() this is not reversible."},{"name":"AnyJobQueue.logger","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueue.logger/","summary":"Logger this queue reports through, either the one supplied in JobQueueOptions.logger or console."},{"name":"AnyJobQueue.name","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueue.name/","summary":"Name of this queue, as given in JobQueueOptions.name. Read-only — a queue cannot be re-pointed after construction."},{"name":"AnyJobQueue.start","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueue.start/","summary":"Opens the broker connection and begins processing, resolving to this queue."},{"name":"AnyJobQueue.stop","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueue.stop/","summary":"Stops processing, resolving to this queue. The queue can be started again."},{"name":"AnyJobQueue","kind":"interface","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueue/","summary":"What every queue in this package can do regardless of which end it is: report its name, expose its logger, and start, stop or tear down its broker connection."},{"name":"AnyJobQueuePublisher.push","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueuepublisher.push/","summary":"Enqueues one job, optionally delayed or time-limited, and returns this queue."},{"name":"AnyJobQueuePublisher","kind":"interface","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueuepublisher/","summary":"The producing half of a queue: something that can enqueue jobs."},{"name":"AnyJobQueueWorker.onPop","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueueworker.onpop/","summary":"Registers the handler for jobs popped from this queue, replacing any handler already set, and returns this queue."},{"name":"AnyJobQueueWorker","kind":"interface","package":"@imqueue/job","url":"/api/job/latest/job.anyjobqueueworker/","summary":"The consuming half of a queue: something that can be given a handler to run against each job."},{"name":"BaseJobQueue.(constructor)","kind":"constructor","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue._constructor_/","summary":"Stores the options and resolves the logger, leaving the broker connection to the subclass."},{"name":"BaseJobQueue.destroy","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue.destroy/","summary":"Destroys the job queue, closing the broker connection and releasing its resources. Not reversible — construct a new queue to carry on."},{"name":"BaseJobQueue.handler","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue.handler/","summary":"The handler registered by onPop, if any."},{"name":"BaseJobQueue.imq","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue.imq/","summary":"The underlying @imqueue/core message queue this job queue runs on."},{"name":"BaseJobQueue.logger","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue.logger/","summary":"Logger this queue reports through — JobQueueOptions.logger when one was given, console otherwise."},{"name":"BaseJobQueue.name","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue.name/","summary":"Name of this queue, as given in JobQueueOptions.name."},{"name":"BaseJobQueue.options","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue.options/","summary":"The options this queue was constructed with, kept so that accessors like BaseJobQueue.name can read them back. Treat as read-only — nothing re-reads them after the broker connection is made, so changing one here has no effect on a running queue."},{"name":"BaseJobQueue.start","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue.start/","summary":"Starts processing the job queue."},{"name":"BaseJobQueue.stop","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue.stop/","summary":"Stops processing the job queue, leaving it able to start again."},{"name":"BaseJobQueue","kind":"class","package":"@imqueue/job","url":"/api/job/latest/job.basejobqueue/","summary":"Shared base of the three concrete queues, implementing everything that does not depend on which end of the queue you are."},{"name":"JobQueue.(constructor)","kind":"constructor","package":"@imqueue/job","url":"/api/job/latest/job.jobqueue._constructor_/","summary":"Creates a queue that both publishes and consumes the named job queue."},{"name":"JobQueue.onPop","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.jobqueue.onpop/","summary":"Registers the handler called for each job popped from this queue."},{"name":"JobQueue.push","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.jobqueue.push/","summary":"Enqueues one job, optionally delayed or time-limited, refusing to enqueue without a handler."},{"name":"JobQueue.start","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.jobqueue.start/","summary":"Starts processing the job queue, refusing to start without a handler."},{"name":"JobQueue","kind":"class","package":"@imqueue/job","url":"/api/job/latest/job.jobqueue/","summary":"A job queue that both pushes and handles jobs in the same process — the default export, and the one to start with."},{"name":"JobQueueOptions.cluster","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.cluster/","summary":"Broker nodes to connect to, as host/port pairs. The broker is Redis."},{"name":"JobQueueOptions.logger","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.logger/","summary":"Logger for the queue's own log and error messages."},{"name":"JobQueueOptions.name","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.name/","summary":"Name of the job queue. Required."},{"name":"JobQueueOptions.password","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.password/","summary":"Password for authenticating against the broker."},{"name":"JobQueueOptions.prefix","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.prefix/","summary":"Prefix for every key this queue creates in the broker."},{"name":"JobQueueOptions.safe","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.safe/","summary":"Whether a job is handed to a worker under a lock, so that a worker dying before it starts does not take the job with it."},{"name":"JobQueueOptions.safeLockTtl","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.safelockttl/","summary":"How long, in milliseconds, a job may sit checked out to a worker during safe delivery before it is treated as abandoned."},{"name":"JobQueueOptions.username","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.username/","summary":"Username for authenticating against the broker. Omit it on a broker that takes a password alone, which is the usual Redis setup."},{"name":"JobQueueOptions.verbose","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.verbose/","summary":"Enables the queue's informational tracing."},{"name":"JobQueueOptions.verboseExtended","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions.verboseextended/","summary":"Adds message bodies to the verbose tracing."},{"name":"JobQueueOptions","kind":"interface","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueoptions/","summary":"Everything a job queue needs to connect and behave, given to every constructor in this package."},{"name":"JobQueuePopHandler","kind":"interface","package":"@imqueue/job","url":"/api/job/latest/job.jobqueuepophandler/","summary":"What a worker does with each job, and how it asks for the job to come back."},{"name":"JobQueuePublisher.(constructor)","kind":"constructor","package":"@imqueue/job","url":"/api/job/latest/job.jobqueuepublisher._constructor_/","summary":"Creates a publisher-mode queue over the named job queue."},{"name":"JobQueuePublisher.push","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.jobqueuepublisher.push/","summary":"Enqueues one job, optionally delayed or time-limited."},{"name":"JobQueuePublisher","kind":"class","package":"@imqueue/job","url":"/api/job/latest/job.jobqueuepublisher/","summary":"The producing end of a job queue: pushes jobs and never handles them."},{"name":"JobQueueWorker.(constructor)","kind":"constructor","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueworker._constructor_/","summary":"Creates a worker-mode queue over the named job queue."},{"name":"JobQueueWorker.onPop","kind":"method","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueworker.onpop/","summary":"Registers the handler called for each job popped from this queue."},{"name":"JobQueueWorker","kind":"class","package":"@imqueue/job","url":"/api/job/latest/job.jobqueueworker/","summary":"The consuming end of a job queue: handles jobs and never pushes them."},{"name":"PushOptions.delay","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.pushoptions.delay/","summary":"Milliseconds to wait before any worker may pick this job up. Omit it to make the job available immediately."},{"name":"PushOptions.ttl","kind":"property","package":"@imqueue/job","url":"/api/job/latest/job.pushoptions.ttl/","summary":"Milliseconds after which this job stops being re-scheduled, counted from the moment it is pushed."},{"name":"PushOptions","kind":"interface","package":"@imqueue/job","url":"/api/job/latest/job.pushoptions/","summary":"Per-job scheduling options for JobQueuePublisher.push() and JobQueue.push() — when the job may first run, and how long it stays worth retrying."},{"name":"@imqueue/net","kind":"package","package":"@imqueue/net","url":"/api/net/latest/","summary":"Fast CIDR membership testing for IPv4 and IPv6, using sorted binary ranges rather than per-network comparison."},{"name":"binToDec","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.bintodec/","summary":"Reads a string of '0' and '1' as an unsigned bigint."},{"name":"cidrToRange","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.cidrtorange/","summary":"Expands a CIDR record into the first and last address it covers, as text."},{"name":"cidrToRangeInt","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.cidrtorangeint/","summary":"Expands a CIDR record into the first and last address it covers, as integers."},{"name":"getType","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.gettype/","summary":"Determines an address's family, or verifies the one you claim it has."},{"name":"intRangeToCidr","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.intrangetocidr/","summary":"Covers an integer address range with the fewest CIDR records that fit it exactly."},{"name":"intToIp","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.inttoip/","summary":"Renders an integer address back to text."},{"name":"ipToInt","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.iptoint/","summary":"Converts an address to the unsigned bigint this package compares with."},{"name":"IPV4_INT_SIZE","kind":"variable","package":"@imqueue/net","url":"/api/net/latest/net.ipv4_int_size/","summary":"Bytes in a binary IPv4 address: 4."},{"name":"IPV4_MASKS","kind":"variable","package":"@imqueue/net","url":"/api/net/latest/net.ipv4_masks/","summary":"The 33 IPv4 network masks, indexed by prefix length — IPV4_MASKS[24] is the mask for a /24."},{"name":"IPv4_MAX_STR_LEN","kind":"variable","package":"@imqueue/net","url":"/api/net/latest/net.ipv4_max_str_len/","summary":"Longest an IPv4 address can be as text: 15 characters, from four three-digit octets plus three dots."},{"name":"IPV6_INT_SIZE","kind":"variable","package":"@imqueue/net","url":"/api/net/latest/net.ipv6_int_size/","summary":"Bytes in a binary IPv6 address: 16."},{"name":"IPV6_MASKS","kind":"variable","package":"@imqueue/net","url":"/api/net/latest/net.ipv6_masks/","summary":"The 129 IPv6 network masks, indexed by prefix length — IPV6_MASKS[64] is the mask for a /64."},{"name":"IPV6_MAX_STR_LEN","kind":"variable","package":"@imqueue/net","url":"/api/net/latest/net.ipv6_max_str_len/","summary":"Longest an IPv6 address can be as text: 39 characters, from eight groups of four hex digits plus seven colons."},{"name":"ipv6Pack","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.ipv6pack/","summary":"Compresses an IPv6 address: drops leading zeros from each group and collapses the longest run of zero groups to ::."},{"name":"ipv6Unpack","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.ipv6unpack/","summary":"Expands an IPv6 address to its full eight-group, four-digit form."},{"name":"isValid","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.isvalid/","summary":"Whether a string is a valid IPv4 or IPv6 address."},{"name":"isValid4","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.isvalid4/","summary":"Whether a string is a valid IPv4 address."},{"name":"isValid6","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.isvalid6/","summary":"Whether a string is a valid IPv6 address."},{"name":"masksOf","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.masksof/","summary":"The mask table for a family, indexable by prefix length."},{"name":"NETWORK_TYPE_ENUM","kind":"variable","package":"@imqueue/net","url":"/api/net/latest/net.network_type_enum/","summary":"The literal \"'ipv4' | 'ipv6'\", for embedding a union of the NetworkType values in an error message."},{"name":"NetworkList.(constructor)","kind":"constructor","package":"@imqueue/net","url":"/api/net/latest/net.networklist._constructor_/","summary":"Builds a list from CIDR records, or adopts an already-packed buffer."},{"name":"NetworkList.addressSize","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networklist.addresssize/","summary":"Bytes per address: 4 for IPv4, 16 for IPv6, per sizeOf()."},{"name":"NetworkList.bytesLength","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networklist.byteslength/","summary":"Size of NetworkList.networks in bytes."},{"name":"NetworkList.includes","kind":"method","package":"@imqueue/net","url":"/api/net/latest/net.networklist.includes/","summary":"Whether an address falls inside any network in this list."},{"name":"NetworkList.length","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networklist.length/","summary":"How many networks the list holds."},{"name":"NetworkList.networks","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networklist.networks/","summary":"The packed records: [start, end] address pairs, little-endian, ascending."},{"name":"NetworkList.recordSize","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networklist.recordsize/","summary":"Bytes per record: two addresses, so 8 for IPv4 and 32 for IPv6."},{"name":"NetworkList.toArray","kind":"method","package":"@imqueue/net","url":"/api/net/latest/net.networklist.toarray/","summary":"The stored networks as CIDR records."},{"name":"NetworkList.toIntArray","kind":"method","package":"@imqueue/net","url":"/api/net/latest/net.networklist.tointarray/","summary":"The stored ranges as integer pairs."},{"name":"NetworkList.toJSON","kind":"method","package":"@imqueue/net","url":"/api/net/latest/net.networklist.tojson/","summary":"The CIDR array, so JSON.stringify on this object yields the network list."},{"name":"NetworkList.type","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networklist.type/","summary":"The address family every record in this list belongs to."},{"name":"NetworkList","kind":"class","package":"@imqueue/net","url":"/api/net/latest/net.networklist/","summary":"A single-family list of networks, stored as sorted binary ranges and searched in O(log n)."},{"name":"Networks.(constructor)","kind":"constructor","package":"@imqueue/net","url":"/api/net/latest/net.networks._constructor_/","summary":"Builds a set from CIDR records of either family, or from previously packed buffers."},{"name":"Networks.includes","kind":"method","package":"@imqueue/net","url":"/api/net/latest/net.networks.includes/","summary":"Whether an address falls inside any network in this set."},{"name":"Networks.ipv4","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networks.ipv4/","summary":"The IPv4 networks, as a NetworkList — reachable as .ipv4."},{"name":"Networks.ipv6","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networks.ipv6/","summary":"The IPv6 networks, as a NetworkList — reachable as .ipv6."},{"name":"Networks.toArray","kind":"method","package":"@imqueue/net","url":"/api/net/latest/net.networks.toarray/","summary":"Every stored network as CIDR records, IPv4 first."},{"name":"Networks.toIntRanges","kind":"method","package":"@imqueue/net","url":"/api/net/latest/net.networks.tointranges/","summary":"Every stored range as integer pairs, grouped by family."},{"name":"Networks.toJSON","kind":"method","package":"@imqueue/net","url":"/api/net/latest/net.networks.tojson/","summary":"The CIDR array, so JSON.stringify on this object yields the network set."},{"name":"Networks","kind":"class","package":"@imqueue/net","url":"/api/net/latest/net.networks/","summary":"A CIDR membership set covering both address families — the entry point for most callers."},{"name":"NetworksIntRanges.ipv4","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networksintranges.ipv4/","summary":"IPv4 ranges, ascending by start address. Empty if the set has no IPv4."},{"name":"NetworksIntRanges.ipv6","kind":"property","package":"@imqueue/net","url":"/api/net/latest/net.networksintranges.ipv6/","summary":"IPv6 ranges, ascending by start address. Empty if the set has no IPv6."},{"name":"NetworksIntRanges","kind":"interface","package":"@imqueue/net","url":"/api/net/latest/net.networksintranges/","summary":"Integer address ranges grouped by family, as returned by Networks.toIntRanges()."},{"name":"NetworkType","kind":"enum","package":"@imqueue/net","url":"/api/net/latest/net.networktype/","summary":"Which address family a value belongs to."},{"name":"rangeToCidr","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.rangetocidr/","summary":"Covers an address range with the fewest CIDR records that fit it exactly."},{"name":"sizeOf","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.sizeof/","summary":"How many bytes one address of the given family occupies."},{"name":"toBigIntLE","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.tobigintle/","summary":"Reads a little-endian byte sequence as an unsigned bigint."},{"name":"toBinaryList","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.tobinarylist/","summary":"Packs CIDR records into the sorted binary form that lookups binary-search over."},{"name":"toBufferLE","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.tobufferle/","summary":"Writes an unsigned bigint as a little-endian buffer of an exact size."},{"name":"toIntArray","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.tointarray/","summary":"Unpacks a binary list back into integer address ranges."},{"name":"toStringArray","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.tostringarray/","summary":"Unpacks a binary list back into CIDR text."},{"name":"validate","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.validate/","summary":"Asserts that a string is a valid address of either family."},{"name":"validate4","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.validate4/","summary":"Asserts that a string is a valid IPv4 address."},{"name":"validate6","kind":"function","package":"@imqueue/net","url":"/api/net/latest/net.validate6/","summary":"Asserts that a string is a valid IPv6 address."},{"name":"@imqueue/opentelemetry","kind":"package","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/","summary":"OpenTelemetry instrumentation for @imqueue/rpc — distributed traces across IMQ service calls, with no changes to service or client code."},{"name":"AttributeNames","kind":"enum","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.attributenames/","summary":"Attribute keys this package sets on every span it creates."},{"name":"IMQCallHooks.afterCall","kind":"property","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqcallhooks.aftercall/","summary":"Runs after a client receives a response. Marks the span ERROR if the response carries one, then ends it."},{"name":"IMQCallHooks.beforeCall","kind":"property","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqcallhooks.beforecall/","summary":"Runs before a client sends a request. Starts the CLIENT span and injects its trace context into the request metadata."},{"name":"IMQCallHooks.wrapCall","kind":"property","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqcallhooks.wrapcall/","summary":"Wraps a service's handling of a request — an around-hook receiving a next callback. Used instead of a before/after pair so the handler can run INSIDE the SERVER span's context, which is what makes spans created downstream nest under it."},{"name":"IMQCallHooks","kind":"interface","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqcallhooks/","summary":"The subset of @imqueue/rpc's default option singletons this instrumentation mutates. beforeCall/afterCall are used on the client; wrapCall (the around-hook) is used on the service so the handler runs inside the span's OpenTelemetry context."},{"name":"ImqueueInstrumentation.(constructor)","kind":"constructor","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqueueinstrumentation._constructor_/","summary":"Constructs a new instance of the ImqueueInstrumentation class"},{"name":"ImqueueInstrumentation.disable","kind":"method","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqueueinstrumentation.disable/","summary":"Stops tracing by removing the hooks again. Clients and services already constructed keep the hooks they copied at construction time, so spans from them may continue after this returns."},{"name":"ImqueueInstrumentation.enable","kind":"method","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqueueinstrumentation.enable/","summary":"Starts tracing: resolves the live @imqueue/rpc and attaches the hooks to its default options."},{"name":"ImqueueInstrumentation.init","kind":"method","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqueueinstrumentation.init/","summary":"No module-load hook: we patch @imqueue/rpc's mutable default options directly (see the class docs), so there is nothing to intercept at import."},{"name":"ImqueueInstrumentation.patch","kind":"method","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqueueinstrumentation.patch/","summary":"Attaches the tracing hooks to a module's default client/service options."},{"name":"ImqueueInstrumentation.unpatch","kind":"method","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqueueinstrumentation.unpatch/","summary":"Removes the tracing hooks previously attached by ImqueueInstrumentation.patch()."},{"name":"ImqueueInstrumentation","kind":"class","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.imqueueinstrumentation/","summary":"OpenTelemetry instrumentation for @imqueue/rpc."},{"name":"RpcModule.DEFAULT_IMQ_CLIENT_OPTIONS","kind":"property","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.rpcmodule.default_imq_client_options/","summary":"Default options every IMQClient starts from — the CLIENT-side hooks."},{"name":"RpcModule.DEFAULT_IMQ_SERVICE_OPTIONS","kind":"property","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.rpcmodule.default_imq_service_options/","summary":"Default options every IMQService starts from — the SERVER-side hook."},{"name":"RpcModule","kind":"interface","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.rpcmodule/","summary":"The @imqueue/rpc default option singletons this instrumentation patches."},{"name":"SpanNames","kind":"enum","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.spannames/","summary":"The span names this package emits. There are only three, and they identify the KIND of operation, not which method ran — the specific method is carried by the resource.name attribute (AttributeNames.RESOURCE_NAME)."},{"name":"TraceAttributes","kind":"interface","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.traceattributes/","summary":"Span attributes as a flat string map."},{"name":"traced","kind":"function","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.traced/","summary":"Builds a method decorator that wraps each call to the decorated method in its own span, ending it when the method returns — or when the promise it returned settles."},{"name":"TracedOptions.kind","kind":"property","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.tracedoptions.kind/","summary":"Whether the decorated method represents work this process serves or work it calls out for. Decides the OpenTelemetry span kind, and is also recorded as the span.kind attribute. Defaults to TraceKind.SERVER."},{"name":"TracedOptions.tags","kind":"property","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.tracedoptions.tags/","summary":"Extra attributes to set on every span the decorator creates. Applied after the automatic ones, so a key used here overrides the automatic value — including resource.name, if you want to name the operation yourself."},{"name":"TracedOptions.tracerName","kind":"property","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.tracedoptions.tracername/","summary":"Name of the tracer to create spans with, 'basic' when omitted. Only worth setting to separate one subsystem's spans from another's; it does not affect where spans are exported."},{"name":"TracedOptions","kind":"interface","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.tracedoptions/","summary":"Options for the traced method decorator. Every field is optional at the call site — traced() takes a Partial of this and fills the rest in."},{"name":"traceEnd","kind":"function","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.traceend/","summary":"Ends the span traceStart() opened under this name and releases it, so the name can be reused."},{"name":"TraceKind","kind":"enum","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.tracekind/","summary":"Which side of a call a span describes. Written to the span.kind attribute, and mapped onto OpenTelemetry's own SpanKind when the span is created."},{"name":"traceStart","kind":"function","package":"@imqueue/opentelemetry","url":"/api/opentelemetry/latest/opentelemetry.tracestart/","summary":"Starts a named span for tracing a block of code that no decorator can wrap, to be closed later by traceEnd() with the same name."},{"name":"@imqueue/pg-cache","kind":"package","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/","summary":"PostgreSQL-managed cache on Redis for @imqueue service methods: results are memoised, and PostgreSQL itself says when to drop them."},{"name":"cacheBy","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cacheby/","summary":"Decorator factory @cacheBy(Model, CacheByOptions) This decorator should be used on a service methods, to set the caching rules for a method. Caching rules within this decorator are defined by a passed model, which is treated as a root model of the call and it analyzes cache invalidation based on passed runtime fields arguments, which prevents unnecessary cache invalidations. So it is more intellectual way to invalidate cache instead of any changes on described list of tables."},{"name":"CacheByOptions.fieldsArg","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cachebyoptions.fieldsarg/","summary":"Zero-index based position of fields argument in a method arguments, which are passed at runtime. Fields argument are usually passed from a client to specify a query map to be extracted and returned from a service method. For example, fields map can be built from an incoming GraphQL request using fieldsMap() function from graphql-fields-list package."},{"name":"CacheByOptions.ttl","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cachebyoptions.ttl/","summary":"Time to live for cached values. If not specified - default is used. Default is equivalent of 24 hours. Must be specified in milliseconds."},{"name":"CacheByOptions","kind":"interface","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cachebyoptions/","summary":"Options expected by @cacheBy() decorator factory"},{"name":"cacheWith","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cachewith/","summary":"Decorator factory @cacheWith(CacheWithOptions) This decorator should be used on a service methods, to set the caching rules for a method."},{"name":"CacheWithOptions.channels","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cachewithoptions.channels/","summary":"PgBubSub channels to listen for invalidation. Usually channels are table names."},{"name":"CacheWithOptions.tag","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cachewithoptions.tag/","summary":"Tag to use for this cache when set a value"},{"name":"CacheWithOptions.ttl","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cachewithoptions.ttl/","summary":"Time to live in milliseconds. By default is equivalent to 24 hours"},{"name":"CacheWithOptions","kind":"interface","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.cachewithoptions/","summary":"Options for the cacheWith() method decorator: which tables invalidate the cached result, how long it may live, and the tag it is stored under."},{"name":"ChannelFilter","kind":"type","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelfilter/","summary":"Narrows which changes to a table invalidate a cached method."},{"name":"ChannelOperation","kind":"enum","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channeloperation/","summary":"The row-level operation that produced a change notification. Matches the PostgreSQL trigger's TG_OP."},{"name":"ChannelPayload.operation","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelpayload.operation/","summary":"Which row-level operation fired the trigger."},{"name":"ChannelPayload.record","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelpayload.record/","summary":"The changed row. NEW for inserts and updates, OLD for deletes, so this is always the row the change is about."},{"name":"ChannelPayload.schema","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelpayload.schema/","summary":"PostgreSQL schema of the changed table."},{"name":"ChannelPayload.table","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelpayload.table/","summary":"Name of the changed table — also the notification channel name."},{"name":"ChannelPayload.timestamp","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelpayload.timestamp/","summary":"When the change occurred. Arrives JSON-encoded and is revived into a Date before a ChannelPayloadFilter sees it."},{"name":"ChannelPayload","kind":"interface","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelpayload/","summary":"Payload delivered on a table's notification channel by the installed trigger, describing a single row change."},{"name":"ChannelPayloadFilter","kind":"type","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelpayloadfilter/","summary":"Predicate deciding whether one change should invalidate the cached method."},{"name":"channelsOf","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.channelsof/","summary":"Retrieves table names as channels from the given model and filter them by a given fields map, if passed. Returns result as list of table names."},{"name":"ClassDecorator","kind":"type","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.classdecorator/","summary":"A dual-mode class decorator: called as (constructor) by legacy (experimentalDecorators) TypeScript and as (value, context) by standard (TC39) decorators. In both forms the first argument is the class, and the result is the class augmented with PgCacheable."},{"name":"declaringPrototype","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.declaringprototype/","summary":"Walks up from a constructed instance to the prototype that actually declares the given method, mirroring legacy decoration where the decorator target is the declaring prototype. Falls back to the instance's own prototype."},{"name":"DEFAULT_CACHE_TTL","kind":"variable","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.default_cache_ttl/","summary":"Default lifetime of a cached entry, in milliseconds — 24 hours."},{"name":"envBool","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.envbool/","summary":"Reads a boolean environment variable, accepting the human-friendly spellings 1/true/yes/on and 0/false/no/off (case-insensitive). The previous !!+value idiom parsed values like true as NaN, i.e. false."},{"name":"fetchError","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.fetcherror/","summary":"Reports a failed cache read at warning level. The caller then falls through to the real method, so a read failure costs latency rather than correctness."},{"name":"FilteredChannels","kind":"interface","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.filteredchannels/","summary":"Map of table name to the filter that decides which of its changes matter, for method decorators that watch several tables with different rules."},{"name":"ILogger.error","kind":"method","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.ilogger.error/","summary":"Unrecoverable problem."},{"name":"ILogger.info","kind":"method","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.ilogger.info/","summary":"Informational message. Used for cache hits, misses and trigger installation, and only emitted when PG_CACHE_DEBUG is on."},{"name":"ILogger.log","kind":"method","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.ilogger.log/","summary":"General-purpose message, equivalent to console.log."},{"name":"ILogger.warn","kind":"method","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.ilogger.warn/","summary":"Recoverable problem. Every swallowed cache error is reported at this level, so a redis outage shows up here rather than as a thrown error."},{"name":"ILogger","kind":"interface","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.ilogger/","summary":"Minimal logger interface accepted by this package. Structurally compatible with the console object and with @imqueue loggers, so any of them can be passed without depending on @imqueue/core."},{"name":"initError","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.initerror/","summary":"Reports that a cached method ran before the cache existed — the service was decorated but start() has not completed, so there is nothing to read or write. The method still executes; it is simply not cached."},{"name":"isStandardDecorator","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.isstandarddecorator/","summary":"Returns true if the decorator was invoked in standard (TC39) mode, i.e. its second argument is a decorator context object carrying a kind."},{"name":"makeChannel","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.makechannel/","summary":"Makes channel entry from a given channel name, class method name and options."},{"name":"MethodDecorator","kind":"type","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.methoddecorator/","summary":"A dual-mode method decorator: called as (target, propertyKey, descriptor) by legacy (experimentalDecorators) TypeScript and as (value, context) by standard (TC39) decorators."},{"name":"PG_CACHE_DEBUG","kind":"variable","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pg_cache_debug/","summary":"Whether verbose cache tracing is on, read once from the PG_CACHE_DEBUG environment variable at import time."},{"name":"PG_CACHE_TRIGGER","kind":"variable","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pg_cache_trigger/","summary":"Default PL/pgSQL trigger function installed on every watched table."},{"name":"PgCache","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcache/","summary":"Class decorator turning an @imqueue service into a PostgreSQL-invalidated cache: method results are memoised in redis, and PostgreSQL itself tells the service when to drop them."},{"name":"PgCacheable.pgCacheChannels","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheable.pgcachechannels/","summary":"Table-to-method registry built by the cacheWith() and cacheBy() method decorators at class-definition time, and read when a notification arrives to decide what to invalidate."},{"name":"PgCacheable.pubSub","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheable.pubsub/","summary":"PostgreSQL LISTEN/NOTIFY subscription the triggers publish to. One channel per watched table."},{"name":"PgCacheable.taggedCache","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheable.taggedcache/","summary":"Tagged redis cache holding the memoised method results. Each entry is tagged with the tables it depends on, which is how a change notification invalidates exactly the right entries."},{"name":"PgCacheable","kind":"interface","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheable/","summary":"What the PgCache() decorator adds to the class it is applied to. A decorated service gains these three members, so code inside the service can reach the cache and the subscription directly."},{"name":"PgCacheChannel","kind":"type","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcachechannel/","summary":"One registered dependency of a cached method: the method to invalidate, and an optional filter narrowing which changes should trigger it."},{"name":"PgCacheChannels","kind":"interface","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcachechannels/","summary":"Registry of cached methods keyed by the PostgreSQL notification channel that invalidates them. The key is a table name: the installed trigger uses the table name as its NOTIFY channel, so the two are the same string."},{"name":"PgCacheOptions.postgres","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheoptions.postgres/","summary":"PostgreSQL database connection string"},{"name":"PgCacheOptions.prefix","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheoptions.prefix/","summary":"Redis cache key prefix to use. If not specified, decorated service class name will be used as prefix by default."},{"name":"PgCacheOptions.publish","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheoptions.publish/","summary":"Pass false, if database channel event should not be published by service to connected clients. By default is enabled = true."},{"name":"PgCacheOptions.redis","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheoptions.redis/","summary":"Redis connection options"},{"name":"PgCacheOptions.redisCache","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheoptions.rediscache/","summary":"Initialized redis cache instance. One of redis option or this redisCache option is required to be provided"},{"name":"PgCacheOptions.triggerDefinition","kind":"property","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheoptions.triggerdefinition/","summary":"SQL definition of the trigger function, in case default which is used by this lib is not satisfying for some reason. Expected string starting with 'create function post_change_notify_trigger() returns trigger' or will fall back to a default trigger definition. Spaces and case is ignored, 'or replace statement is allowed', if needed."},{"name":"PgCacheOptions","kind":"interface","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.pgcacheoptions/","summary":"Options for the PgCache() class decorator: where PostgreSQL and redis live, and how the change-notify triggers behave."},{"name":"registerChannelsOnce","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.registerchannelsonce/","summary":"Registers pg-cache channel entries for a method on the given prototype exactly once, even when called from a per-construction initializer."},{"name":"setError","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.seterror/","summary":"Reports a failed cache write at warning level. Always logs: a write failure matters even when tracing is off."},{"name":"setInfo","kind":"function","package":"@imqueue/pg-cache","url":"/api/pg-cache/latest/pg-cache.setinfo/","summary":"Reports a successful cache write and passes the value straight through, so it can be used inline in a return position. Logs only when PG_CACHE_DEBUG is on."},{"name":"@imqueue/pg-prisma","kind":"package","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/","summary":"Prisma and Postgres building blocks for @imqueue services."},{"name":"accessScope","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.accessscope/","summary":"Build the query extension that restricts queries to the records the active access levels allow."},{"name":"AccessScopeModels","kind":"type","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.accessscopemodels/","summary":"Per-model access-scope config: model → level → columns. A record is in scope for a level when ANY of the level's columns matches (OR); a model is in scope when EVERY active level matches (AND). See the generated ACCESS_SCOPE_MODELS."},{"name":"AccessScopeOptions.models","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.accessscopeoptions.models/","summary":"Scope columns per model per level (see the generated config)."},{"name":"AccessScopeOptions.resolvers","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.accessscopeoptions.resolvers/","summary":"One resolver per access level, keyed by level name."},{"name":"AccessScopeOptions","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.accessscopeoptions/","summary":"Everything accessScope() needs to build its extension."},{"name":"AccessScopeResolver","kind":"type","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.accessscoperesolver/","summary":"Resolves the current request's value for one access level: - undefined — the level does not constrain this request (skip it), - null — active but there is no value → deny (match nothing), - a string — match rows where a scope column equals it, - an array — match rows where a scope column is IN it (empty → deny)."},{"name":"accessWhere","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.accesswhere/","summary":"Compose the access-scope where clause for a single model."},{"name":"ArchivableModel.name","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.archivablemodel.name/","summary":"Table name (as created in sourceSchema)."},{"name":"ArchivableModel.periodSeconds","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.archivablemodel.periodseconds/","summary":"Retention period in seconds (default defaultPeriodSeconds)."},{"name":"ArchivableModel.sourceSchema","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.archivablemodel.sourceschema/","summary":"Schema the table lives in (default sourceSchema)."},{"name":"ArchivableModel.watchColumn","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.archivablemodel.watchcolumn/","summary":"Column whose age gates archiving (default defaultColumn)."},{"name":"ArchivableModel","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.archivablemodel/","summary":"One watched table to seed into the archive settings table."},{"name":"ArchiveClient.$executeRawUnsafe","kind":"method","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.archiveclient._executerawunsafe/","summary":"Execute a statement built by the installer."},{"name":"ArchiveClient","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.archiveclient/","summary":"The raw-SQL surface this installer needs (a Prisma client or its tx)."},{"name":"audit","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.audit/","summary":"Build the query extension that records every write to an audited model."},{"name":"AuditAction","kind":"variable","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditaction/","summary":"The three kinds of write recorded in the audit trail."},{"name":"AuditColumns.action","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditcolumns.action/","summary":"Column holding the action string."},{"name":"AuditColumns.changes","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditcolumns.changes/","summary":"Column holding the JSON payload: the record, or the args plus a count."},{"name":"AuditColumns.createdAt","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditcolumns.createdat/","summary":"Column stamped with the database's now() at insert time."},{"name":"AuditColumns.model","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditcolumns.model/","summary":"Column holding the name of the model that was written."},{"name":"AuditColumns.principal","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditcolumns.principal/","summary":"Column holding the JSON actor, as returned by getPrincipal."},{"name":"AuditColumns.recordId","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditcolumns.recordid/","summary":"Column holding the affected record's id, or 'many' for a bulk write."},{"name":"AuditColumns","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditcolumns/","summary":"Column names in the audit target table."},{"name":"AuditConfig.columns","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditconfig.columns/","summary":"Column names within that table."},{"name":"AuditConfig.model","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditconfig.model/","summary":"Table the trail is inserted into."},{"name":"AuditConfig","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditconfig/","summary":"Where the audit trail is written, and under which column names."},{"name":"AuditOptions.client","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditoptions.client/","summary":"The UNEXTENDED Prisma client, used to write the audit rows."},{"name":"AuditOptions.config","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditoptions.config/","summary":"Where the trail goes and what its columns are called."},{"name":"AuditOptions.getPrincipal","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditoptions.getprincipal/","summary":"Resolves the actor to record, or a falsy value to record none."},{"name":"AuditOptions.models","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditoptions.models/","summary":"Models whose writes are recorded to the audit log."},{"name":"AuditOptions","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.auditoptions/","summary":"Everything audit() needs to build its extension."},{"name":"authorship","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorship/","summary":"Build the query extension that stamps who created, updated or deleted a row."},{"name":"AuthorshipColumns.createdBy","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipcolumns.createdby/","summary":"Column stamped once, when the row is created."},{"name":"AuthorshipColumns.deletedAt","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipcolumns.deletedat/","summary":"Soft-delete column whose being set makes an update stamp deletedBy."},{"name":"AuthorshipColumns.deletedBy","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipcolumns.deletedby/","summary":"Column stamped when an update sets deletedAt."},{"name":"AuthorshipColumns.updatedBy","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipcolumns.updatedby/","summary":"Column stamped on create and on every update."},{"name":"AuthorshipColumns","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipcolumns/","summary":"Which columns on one model carry authorship, and which one triggers a delete stamp."},{"name":"AuthorshipModels","kind":"type","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipmodels/","summary":"Which models carry authorship, keyed by Prisma model name."},{"name":"AuthorshipOptions.getActorId","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipoptions.getactorid/","summary":"Resolves the id of the actor performing the current write, or null when there is none (system/unauthenticated). The extension is deliberately ignorant of *where* the id comes from — the caller supplies it (e.g. from the request context)."},{"name":"AuthorshipOptions.models","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipoptions.models/","summary":"Per-model authorship column config (the models to stamp)."},{"name":"AuthorshipOptions","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.authorshipoptions/","summary":"Everything authorship() needs to build its extension."},{"name":"CHANGE_NOTIFY_CHANNEL","kind":"variable","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.change_notify_channel/","summary":"Default Postgres NOTIFY channel the change triggers emit on."},{"name":"CHANGE_NOTIFY_FUNCTION_NAME","kind":"variable","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.change_notify_function_name/","summary":"Default name of the trigger's plpgsql notify function."},{"name":"CHANGE_NOTIFY_TRIGGER_NAME","kind":"variable","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.change_notify_trigger_name/","summary":"Default name of the per-table change trigger."},{"name":"ChangeTriggerConfig.channel","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.changetriggerconfig.channel/","summary":"NOTIFY channel to publish on (default CHANGE_NOTIFY_CHANNEL)."},{"name":"ChangeTriggerConfig.functionName","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.changetriggerconfig.functionname/","summary":"Name of the shared plpgsql function (default CHANGE_NOTIFY_FUNCTION_NAME)."},{"name":"ChangeTriggerConfig.models","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.changetriggerconfig.models/","summary":"Tables that should notify — the complete desired set, not an addition."},{"name":"ChangeTriggerConfig.silent","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.changetriggerconfig.silent/","summary":"Suppress SQL logging for the install DDL (default true)."},{"name":"ChangeTriggerConfig.triggerName","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.changetriggerconfig.triggername/","summary":"Trigger name to create on each table (default CHANGE_NOTIFY_TRIGGER_NAME)."},{"name":"ChangeTriggerConfig","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.changetriggerconfig/","summary":"Which tables notify, and under which Postgres object names."},{"name":"InstallArchiveOptions.archiveSchema","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.archiveschema/","summary":"Archive schema name (default archive)."},{"name":"InstallArchiveOptions.client","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.client/","summary":"The raw-SQL surface to install through — a Prisma client or a transaction."},{"name":"InstallArchiveOptions.defaultColumn","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.defaultcolumn/","summary":"Default watch column (default deletedAt)."},{"name":"InstallArchiveOptions.defaultPeriodSeconds","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.defaultperiodseconds/","summary":"Default retention in seconds (default 30 days)."},{"name":"InstallArchiveOptions.jobName","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.jobname/","summary":"pg_cron job name (default archive-run)."},{"name":"InstallArchiveOptions.models","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.models/","summary":"Tables to register by default (idempotent seed)."},{"name":"InstallArchiveOptions.schedule","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.schedule/","summary":"pg_cron schedule for the sweep (default daily at midnight, 0 0 *)."},{"name":"InstallArchiveOptions.settingsTable","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.settingstable/","summary":"Settings table name within the archive schema (default _settings)."},{"name":"InstallArchiveOptions.silent","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.silent/","summary":"Suppress SQL logging for the install DDL (default true)."},{"name":"InstallArchiveOptions.sourceSchema","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions.sourceschema/","summary":"Default schema of the watched tables (default public)."},{"name":"InstallArchiveOptions","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiveoptions/","summary":"Everything installArchiving() needs."},{"name":"installArchiving","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installarchiving/","summary":"Install the row-archiving machinery: a mirror archive schema, its settings table, the sweep function, and — best effort — a pg_cron schedule to run it."},{"name":"installChangeTriggers","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.installchangetriggers/","summary":"Install Postgres triggers that NOTIFY on every row change in the given tables."},{"name":"isoDates","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.isodates/","summary":"Build the query extension that serializes every Date in a query result to an ISO-8601 string."},{"name":"isSqlLogSuppressed","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.issqllogsuppressed/","summary":"Whether SQL logging is currently suppressed."},{"name":"migrateDown","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedown/","summary":"Roll back the most recently applied Prisma migrations."},{"name":"MigrateDownOptions.databaseUrl","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions.databaseurl/","summary":"Postgres connection string for the database to roll back."},{"name":"MigrateDownOptions.deleteFolder","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions.deletefolder/","summary":"Delete the migration folder after a successful rollback."},{"name":"MigrateDownOptions.dryRun","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions.dryrun/","summary":"Report the actions without changing anything."},{"name":"MigrateDownOptions.generateOnly","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions.generateonly/","summary":"Only (re)generate missing down.sql files; don't apply anything."},{"name":"MigrateDownOptions.log","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions.log/","summary":"Progress reporter (defaults to a no-op — the core stays silent)."},{"name":"MigrateDownOptions.migrationsDir","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions.migrationsdir/","summary":"Absolute path to the Prisma migrations directory."},{"name":"MigrateDownOptions.projectRoot","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions.projectroot/","summary":"Working directory for prisma migrate diff (holds prisma.config.ts)."},{"name":"MigrateDownOptions.steps","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions.steps/","summary":"Number of most-recent applied migrations to roll back (default 1)."},{"name":"MigrateDownOptions","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownoptions/","summary":"Everything migrateDown() needs: no globals and no environment are read."},{"name":"MigrateDownResult.processed","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownresult.processed/","summary":"Migration names processed, newest first."},{"name":"MigrateDownResult","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.migratedownresult/","summary":"What migrateDown() did."},{"name":"prettifySql","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.prettifysql/","summary":"Format a one-line SQL string so it is readable in a log."},{"name":"RawClient.$transaction","kind":"method","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.rawclient._transaction/","summary":"Run fn inside a transaction."},{"name":"RawClient","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.rawclient/","summary":"A RawExecutor that can also open a transaction."},{"name":"RawExecutor.$executeRawUnsafe","kind":"method","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.rawexecutor._executerawunsafe/","summary":"Execute a statement — used for the DDL, which cannot use bind parameters."},{"name":"RawExecutor.$queryRawUnsafe","kind":"method","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.rawexecutor._queryrawunsafe/","summary":"Run a query — used to read the currently installed triggers back."},{"name":"RawExecutor","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.rawexecutor/","summary":"The raw-SQL surface used to install triggers (a Prisma client or its tx)."},{"name":"silently","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.silently/","summary":"Run fn with SQL logging suppressed."},{"name":"softDelete","kind":"function","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.softdelete/","summary":"Build the query extension that turns deletes into deletedAt stamps and hides stamped rows from reads."},{"name":"SoftDeleteModels","kind":"type","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.softdeletemodels/","summary":"Which models are soft-deleted, and which column carries the stamp."},{"name":"SoftDeleteOptions.client","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.softdeleteoptions.client/","summary":"The UNEXTENDED Prisma client, used to reroute deletes into updates."},{"name":"SoftDeleteOptions.models","kind":"property","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.softdeleteoptions.models/","summary":"Which models are soft-deleted, and the column holding the stamp."},{"name":"SoftDeleteOptions","kind":"interface","package":"@imqueue/pg-prisma","url":"/api/pg-prisma/latest/pg-prisma.softdeleteoptions/","summary":"Everything softDelete() needs to build its extension."},{"name":"@imqueue/pg-pubsub","kind":"package","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/","summary":"Reliable PostgreSQL LISTEN/NOTIFY for Node.js — with an inter-process lock so a horizontally scaled service handles each notification once."},{"name":"ACQUIRE_INTERVAL","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.acquire_interval/","summary":"How often, in milliseconds, a process without the lock retries acquiring it. Default 30000."},{"name":"AnyJson","kind":"type","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anyjson/","summary":"Represents any JSON-serializable value"},{"name":"AnyLock.acquire","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock.acquire/","summary":"Implements lock acquire logic asynchronously"},{"name":"AnyLock.destroy","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock.destroy/","summary":"Implements lock safe destruction asynchronously"},{"name":"AnyLock.dispose","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock.dispose/","summary":"Must free all local resources held by the lock (timers, client event listeners, registry entries) without any database communication. Used when the underlying connection is already gone."},{"name":"AnyLock.init","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock.init/","summary":"Must initialize lock asynchronously"},{"name":"AnyLock.isAcquired","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock.isacquired/","summary":"Implements lock acquire verification asynchronously"},{"name":"AnyLock.onAcquire","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock.onacquire/","summary":"Implements late lock acquire handler upset. The handler is called when the lock gets taken over by a retry, long after the acquire() caller has given up - which makes it the only chance for that caller to finish whatever the lock was being acquired for."},{"name":"AnyLock.onRelease","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock.onrelease/","summary":"Implements lock release handler upset"},{"name":"AnyLock.release","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock.release/","summary":"Implements lock release logic asynchronously"},{"name":"AnyLock","kind":"interface","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylock/","summary":"Lock implementation interface to follow"},{"name":"AnyLogger.error","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylogger.error/","summary":"Unrecoverable problem, including exhausting the reconnect retry limit."},{"name":"AnyLogger.info","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylogger.info/","summary":"Informational message: connection, listen and lock lifecycle events."},{"name":"AnyLogger.log","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylogger.log/","summary":"General-purpose message, equivalent to console.log."},{"name":"AnyLogger.warn","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylogger.warn/","summary":"Recoverable problem — a failed reconnect attempt, or a payload rejected for exceeding the NOTIFY size limit."},{"name":"AnyLogger","kind":"interface","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.anylogger/","summary":"Represents logger interface suitable to be injected into this library objects"},{"name":"channel","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.channel/","summary":"Channel listener event, occurs whenever the listening channel gets a new payload message."},{"name":"close","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.close/","summary":"'close' event, occurs each time connection closed. Differs from 'end' event, because 'end' event may occur many times during re-connectable connection process, but 'close' event states that connection was safely programmatically closed and further re-connections won't happen."},{"name":"connect","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.connect/","summary":"'connect' event, occurs each time database connection is established."},{"name":"DefaultOptions","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.defaultoptions/","summary":"Hard-coded pre-set of PgPubSubOptions"},{"name":"enableGracefulShutdown","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.enablegracefulshutdown/","summary":"Registers SIGINT/SIGTERM/SIGABRT handlers performing graceful release of all instantiated locks and process exit. Idempotent. Opt-in: importing this package does not take over the process lifecycle by itself - either call this function directly or construct PgPubSub with handleSignals: true."},{"name":"end","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.end/","summary":"'end' event, occurs whenever pg connection ends, so, literally it's simply proxy to 'end' event from pg.Client"},{"name":"error","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.error/","summary":"'error' event occurs each time connection error is happened"},{"name":"EXECUTION_LOCK","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.execution_lock/","summary":"Default for PgPubSubOptions.executionLock — off. Enable with PG_PUBSUB_EXECUTION_LOCK."},{"name":"IS_ONE_PROCESS","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.is_one_process/","summary":"Default for PgPubSubOptions.singleListener — on."},{"name":"JsonArray","kind":"type","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.jsonarray/","summary":"Represents JSON-serializable array"},{"name":"JsonMap","kind":"interface","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.jsonmap/","summary":"Represents JSON serializable object"},{"name":"listen","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.listen/","summary":"'listen' event occurs each time channel starts being listening"},{"name":"message","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.message/","summary":"'message' event occurs each time database connection gets notification to any listening channel. Fired before channel event emitted."},{"name":"NoLock.acquire","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock.acquire/","summary":"Always acquires, because it's no lock"},{"name":"NoLock.destroy","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock.destroy/","summary":"Safely destroys this no lock"},{"name":"NoLock.dispose","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock.dispose/","summary":"Frees no resources: no lock holds none"},{"name":"NoLock.init","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock.init/","summary":"Init no lock"},{"name":"NoLock.isAcquired","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock.isacquired/","summary":"Always acquired, because it's no lock"},{"name":"NoLock.onAcquire","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock.onacquire/","summary":"Registers nothing: NoLock.acquire() always succeeds immediately, so there is no late takeover for the handler to report."},{"name":"NoLock.onRelease","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock.onrelease/","summary":"Registers nothing: a no-op lock is never held, so it is never released and the handler could never fire."},{"name":"NoLock.release","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock.release/","summary":"Never releases, because it's no lock"},{"name":"NoLock","kind":"class","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.nolock/","summary":"Implements no lock to be used with multi-listener approach"},{"name":"notify","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.notify/","summary":"'notify' event occurs each time new message has been published to a particular channel. Occurs right after database NOTIFY command succeeded."},{"name":"pack","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pack/","summary":"Serializes given input object to JSON string. On error will return serialized null value"},{"name":"PgClient.appName","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgclient.appname/","summary":"Value PostgreSQL reports as application_name for this connection."},{"name":"PgClient","kind":"interface","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgclient/","summary":"Extends pg.Client with additional properties"},{"name":"PgIpLock.(constructor)","kind":"constructor","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock._constructor_/","summary":"Constructs a new instance of the PgIpLock class"},{"name":"PgIpLock.acquire","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.acquire/","summary":"Acquires a lock on the current channel. Returns true on success, false - otherwise"},{"name":"PgIpLock.channel","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.channel/","summary":"Channel this lock guards. One lock row exists per channel, so this is what the competing processes contend over."},{"name":"PgIpLock.destroy","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.destroy_1/","summary":"Calls destroy() on all created instances at a time"},{"name":"PgIpLock.destroy","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.destroy/","summary":"Destroys this lock properly."},{"name":"PgIpLock.dispose","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.dispose/","summary":"Frees all local resources held by this lock (acquire timer, client notification listener, global registry entry) without touching the database. Used directly when the underlying connection is already dead (e.g. on reconnect) and as a part of destroy()."},{"name":"PgIpLock.hasInstances","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.hasinstances/","summary":"Returns true if at least one instance was created, false - otherwise"},{"name":"PgIpLock.init","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.init/","summary":"Initializes inter-process locks storage in database and starts listening of lock release events, as well as initializes lock acquire retry timer."},{"name":"PgIpLock.isAcquired","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.isacquired/","summary":"Returns current lock state, true if acquired, false - otherwise."},{"name":"PgIpLock.onAcquire","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.onacquire/","summary":"This would provide a late acquire handler which will be called once the lock is taken over by the retry timer, with the channel name bypassed to a given handler."},{"name":"PgIpLock.onRelease","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.onrelease/","summary":"This would provide release handler which will be called once the lock is released and the channel name would be bypassed to a given handler"},{"name":"PgIpLock.options","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.options/","summary":"Connection, schema and retry settings for this lock."},{"name":"PgIpLock.release","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.release/","summary":"Releases acquired lock on this channel. After lock is released, another running process or host would be able to acquire the lock."},{"name":"PgIpLock.schemaName","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.schemaname/","summary":"DB lock schema name getter"},{"name":"PgIpLock.uniqueKey","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock.uniquekey/","summary":"Optional content key making the lock a de-duplication marker for one specific payload rather than a listener election for the channel. Supplied by the execution-lock path; see EXECUTION_LOCK."},{"name":"PgIpLock","kind":"class","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgiplock/","summary":"Implements manageable inter-process locking mechanism over existing PostgreSQL connection for a given LISTEN channel."},{"name":"PgPubSub.(constructor)","kind":"constructor","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub._constructor_/","summary":"Constructs a new instance of the PgPubSub class"},{"name":"PgPubSub.activeChannels","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.activechannels/","summary":"Returns list of all active subscribed channels"},{"name":"PgPubSub.allChannels","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.allchannels/","summary":"Returns list of all known channels, despite the fact they are listening (active) or not (inactive)."},{"name":"PgPubSub.channels","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.channels/","summary":"Per-channel event emitter. Listening here scopes a handler to one channel, where the instance's own 'message' event fires for every channel — which is usually what you want when a process listens to several."},{"name":"PgPubSub.close","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.close/","summary":"Safely closes this database connection"},{"name":"PgPubSub.connect","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.connect/","summary":"Establishes re-connectable database connection"},{"name":"PgPubSub.destroy","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.destroy/","summary":"Destroys this object properly, destroying all locks, closing all connections and removing all event listeners to avoid memory leaking. So whenever you need to destroy an object programmatically - use this method. Note, that after destroy it is broken and should be removed from memory."},{"name":"PgPubSub.inactiveChannels","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.inactivechannels/","summary":"Returns list of all inactive channels (those which are known, but not actively listening at a time)"},{"name":"PgPubSub.isActive","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.isactive/","summary":"If channel argument passed will return true if channel is in active state (listening by this pub/sub), false - otherwise. If channel is not specified - will return true if there is at least one active channel listened by this pub/sub, false - otherwise."},{"name":"PgPubSub.listen","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.listen/","summary":"Starts listening given channel. If singleListener option is set to true, it guarantees that only one process would be able to listen this channel at a time."},{"name":"PgPubSub.logger","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.logger/","summary":"Where connection, listen and lock lifecycle events are reported. Defaults to the console."},{"name":"PgPubSub.notify","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.notify/","summary":"Performs NOTIFY to a given channel with a given payload to all listening subscribers"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_1/","summary":"Sets 'connect' event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_2/","summary":"Sets 'close' event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_3/","summary":"Sets 'listen' event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_4/","summary":"Sets 'unlisten' event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_5/","summary":"Sets 'error' event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_6/","summary":"Sets 'reconnect' event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_7/","summary":"Sets 'message' event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_8/","summary":"Sets 'notify' event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on_9/","summary":"Sets any unknown or user-defined event handler"},{"name":"PgPubSub.on","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.on/","summary":"Sets 'end' event handler"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_1/","summary":"Sets 'connect' event handler, which fired only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_2/","summary":"Sets 'close' event handler, which fired only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_3/","summary":"Sets 'listen' event handler, which fired only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_4/","summary":"Sets 'unlisten' event handler, which fired only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_5/","summary":"Sets 'error' event handler, which fired only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_6/","summary":"Sets 'reconnect' event handler, which fired only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_7/","summary":"Sets 'message' event handler, which fired only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_8/","summary":"Sets 'notify' event handler, which fired only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once_9/","summary":"Sets any unknown or user-defined event handler, which would fire only one single time"},{"name":"PgPubSub.once","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.once/","summary":"Sets 'end' event handler, which fired only one single time"},{"name":"PgPubSub.options","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.options/","summary":"Options this instance was constructed with, merged over the defaults in DefaultOptions."},{"name":"PgPubSub.pgClient","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.pgclient/","summary":"Underlying postgres client. The instance may be replaced during automatic reconnect (pg clients are single-use), so do not cache this reference across reconnects."},{"name":"PgPubSub.unlisten","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.unlisten/","summary":"Stops listening of the given channel, and, if singleListener option is set to true - will release an acquired lock (if it was settled)."},{"name":"PgPubSub.unlistenAll","kind":"method","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub.unlistenall/","summary":"Stops listening all connected channels, and, if singleListener option is set to true - will release all acquired locks (if any was settled)."},{"name":"PgPubSub","kind":"class","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsub/","summary":"Implements LISTEN/NOTIFY client for PostgreSQL connections."},{"name":"PgPubSubOptions.acquireInterval","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions.acquireinterval/","summary":"Time interval in milliseconds before LISTEN clients would re-try to acquire channel locks. It works from one hand as connection keep-alive periodical pings, from other hand adds additional level of reliability for the cases when connection, which holds the lock has been suddenly disconnected in a silent manner."},{"name":"PgPubSubOptions.executionLock","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions.executionlock/","summary":"If set to true, all instances become listeners but only instance is an executor which still implements inter-process locking mechanism."},{"name":"PgPubSubOptions.filtered","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions.filtered/","summary":"If set to true, self emitted messages (those which were sent using NOTIFY on the same connection) will be filtered on this connection. By default is false - means that connection will LISTEN to the messages, which were notified on the same connection."},{"name":"PgPubSubOptions.handleSignals","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions.handlesignals/","summary":"If set to true, the package registers SIGINT/SIGTERM/SIGABRT handlers performing graceful locks release and process exit. Default is false: a library must not take over process lifecycle unless asked to."},{"name":"PgPubSubOptions.pgClient","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions.pgclient/","summary":"Existing PostgreSQL client connection (optional). Can be passed if there is a need to re-use existing db connection from external code. Otherwise it is required to bypass correct options to instantiate new pg.Client connection properly."},{"name":"PgPubSubOptions.retryDelay","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions.retrydelay/","summary":"Specifies delay in milliseconds between re-connection retries"},{"name":"PgPubSubOptions.retryLimit","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions.retrylimit/","summary":"Specifies maximum number of re-connection retries to process, before connection would be treated as broken (disconnected). By default is set to infinite number of retries."},{"name":"PgPubSubOptions.singleListener","kind":"property","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions.singlelistener/","summary":"Boolean flag, which turns off/on single listener mode. By default is set to true, so instantiated PgPubSub connections will act using inter-process locking mechanism."},{"name":"PgPubSubOptions","kind":"interface","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.pgpubsuboptions/","summary":"Options accepted as option argument of PgPubSub constructor. It extends pg.ClientConfig options, mostly because it is used to construct PostgreSQL database connection, adding more properties required to configure PgPubSub objects behavior."},{"name":"reconnect","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.reconnect/","summary":"'reconnect' event occurs each time, when the connection is successfully established after connection retry. It is followed by a corresponding 'connect' event, but after all possible channel locks finished their attempts to be re-acquired."},{"name":"RETRY_DELAY","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.retry_delay/","summary":"Delay in milliseconds between reconnect attempts after the PostgreSQL connection drops."},{"name":"RETRY_LIMIT","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.retry_limit/","summary":"How many reconnect attempts to make before emitting 'error' and giving up. Infinity by default, so a client reconnects indefinitely and survives a database restart without supervision."},{"name":"RX_LOCK_CHANNEL","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.rx_lock_channel/","summary":"Matches the internal prefix PgIpLock puts on its own coordination channels, so a listener can tell lock traffic apart from application notifications."},{"name":"SCHEMA_NAME","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.schema_name/","summary":"PostgreSQL schema holding the inter-process lock table, read from PG_PUBSUB_SCHEMA_NAME and defaulting to pgip_lock."},{"name":"SHUTDOWN_TIMEOUT","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.shutdown_timeout/","summary":"How long, in milliseconds, PgPubSub.destroy() waits for a graceful shutdown before giving up. Read from PG_PUBSUB_SHUTDOWN_TIMEOUT, default 1000."},{"name":"signature","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.signature/","summary":"Constructs and returns hash string for a given set of processId, channel and payload."},{"name":"UNIQUE_LOCK_TTL","kind":"variable","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.unique_lock_ttl/","summary":"Time-to-live (seconds) of processed-message markers created by execution locks; expired markers are cleaned up on subsequent unique lock acquisitions"},{"name":"unlisten","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.unlisten/","summary":"'unlisten' event occurs each time channel ends being listening"},{"name":"unpack","kind":"function","package":"@imqueue/pg-pubsub","url":"/api/pg-pubsub/latest/pg-pubsub.unpack/","summary":"Deserializes given input JSON string to corresponding JSON value object. On error will return empty object"},{"name":"@imqueue/pg-sequelize","kind":"package","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/","summary":"Sequelize and sequelize-typescript, refined for @imqueue services."},{"name":"AssociatedWith","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.associatedwith/","summary":"Marks a field of a filter input as standing for an association rather than for a column."},{"name":"BaseModel.appendChild","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.appendchild/","summary":"Attaches related data to this instance as though it had been joined in."},{"name":"BaseModel.drop","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.drop/","summary":"Drops this model's relation: DROP VIEW for a view, DROP TABLE otherwise."},{"name":"BaseModel.findAll","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.findall/","summary":"Search for multiple instances."},{"name":"BaseModel.findByPk","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.findbypk/","summary":"Finds one instance by primary key."},{"name":"BaseModel.findOne","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.findone/","summary":"Finds the first instance matching the options."},{"name":"BaseModel.fixNumbers","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.fixnumbers/","summary":"Casts this instance's numeric columns back to numbers."},{"name":"BaseModel.getViewDefinition","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.getviewdefinition/","summary":"This view's SQL, with any dynamic parameters substituted in."},{"name":"BaseModel.restoreSerialization","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.restoreserialization/","summary":"Forgets the returning column list, so serializing emits every loaded column again."},{"name":"BaseModel.sync","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.sync/","summary":"Creates this model's table, or does nothing when the model is a view."},{"name":"BaseModel.syncIndex","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.syncindex/","summary":"Builds and runs the statements that create one column index."},{"name":"BaseModel.syncIndices","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.syncindices/","summary":"Creates every column index declared on this model."},{"name":"BaseModel.syncView","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.syncview/","summary":"Creates this view, replacing whatever definition is in the database."},{"name":"BaseModel.toGraph","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.tograph/","summary":"Builds a graph of this model's associations, following them transitively."},{"name":"BaseModel.toJSON","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel.tojson/","summary":"Serializes this instance, honouring the returning column list."},{"name":"BaseModel","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.basemodel/","summary":"The class every model in an @imqueue service extends."},{"name":"BuildOptions","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.buildoptions/","summary":"Options for build(), with returning widened to accept a column list."},{"name":"BulkCreateOptions","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.bulkcreateoptions/","summary":"Options for bulkCreate(), with returning widened to accept a column list."},{"name":"ColumnIndex","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindex_1/","summary":"Declares a plain btree index on a model column."},{"name":"ColumnIndex","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindex/","summary":"Declares an index on a model column, with Postgres's own index options."},{"name":"ColumnIndexOptions.collation","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.collation/","summary":"Collation of the index key, where it differs from the column's own."},{"name":"ColumnIndexOptions.concurrently","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.concurrently/","summary":"Builds the index without locking writes out of the table."},{"name":"ColumnIndexOptions.expression","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.expression/","summary":"Indexes this SQL expression rather than the column."},{"name":"ColumnIndexOptions.include","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.include/","summary":"Extra columns to carry in the index without indexing them."},{"name":"ColumnIndexOptions.method","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.method/","summary":"Index method. Postgres uses BTREE when this is left out."},{"name":"ColumnIndexOptions.name","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.name/","summary":"Name of the index."},{"name":"ColumnIndexOptions.nullsFirst","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.nullsfirst/","summary":"true sorts nulls first, false sorts them last, and leaving it out follows Postgres."},{"name":"ColumnIndexOptions.opClass","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.opclass/","summary":"Operator class for the key."},{"name":"ColumnIndexOptions.order","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.order/","summary":"Sort direction of the index key."},{"name":"ColumnIndexOptions.predicate","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.predicate/","summary":"Restricts the index to the rows this SQL condition matches."},{"name":"ColumnIndexOptions.safe","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.safe/","summary":"Leaves an index that already exists alone rather than rebuilding it."},{"name":"ColumnIndexOptions.tablespace","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.tablespace/","summary":"Tablespace to build the index in, instead of the database default."},{"name":"ColumnIndexOptions.unique","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions.unique/","summary":"Rejects duplicate values, enforcing uniqueness through the index."},{"name":"ColumnIndexOptions","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.columnindexoptions/","summary":"The clauses of the CREATE INDEX statement that a ColumnIndex declaration turns into."},{"name":"CreatedBy","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.createdby/","summary":"Stamps the decorated column with the acting user id on INSERT, taken from the in-flight IMQ request metadata (currentMetadata()?.userId) — so the id never travels through method arguments and cannot be spoofed by a caller."},{"name":"CreateOptions","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.createoptions/","summary":"Options for create(), with returning widened to accept a column list."},{"name":"database","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.database/","summary":"Connects to the database, loads the models, and returns the Sequelize instance."},{"name":"DataPage.data","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.datapage.data/","summary":"The page itself."},{"name":"DataPage.total","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.datapage.total/","summary":"Rows matching the query in total, ignoring the page window."},{"name":"DataPage","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.datapage/","summary":"One page of results together with the size of the whole set."},{"name":"DateRange.end","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.daterange.end/","summary":"End of the range — a Date, or an ISO-8601 string from a remote caller."},{"name":"DateRange.start","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.daterange.start/","summary":"Start of the range — a Date, or an ISO-8601 string from a remote caller."},{"name":"DateRange","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.daterange/","summary":"A range between two dates, as an @imqueue/rpc type."},{"name":"DB_CONN_STR","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.db_conn_str/","summary":"DB_CONN_STR from the environment, read once when this module loads."},{"name":"DeletedBy","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.deletedby/","summary":"Stamps the decorated column with the acting user id on soft-delete (and clears it on restore), taken from the in-flight IMQ request metadata (currentMetadata()?.userId). Mirrors @DeletedAt: set on delete, cleared on restore, and a delete touches neither updatedAt nor an @UpdatedBy column."},{"name":"DynamicView","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.dynamicview/","summary":"Declares a model to be a view whose definition is parameterised per query."},{"name":"Emittable","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.emittable/","summary":"Placeholder for change notifications, which are not implemented."},{"name":"ENUM_ORDER_DIRECTION","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.enum_order_direction/","summary":"The OrderDirection values as an @imqueue/rpc type description."},{"name":"FieldsInput","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.fieldsinput/","summary":"Which fields to return, nested to match the shape of the relations."},{"name":"FILTER_OPS","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filter_ops/","summary":"Maps each $-prefixed filter operator to the Sequelize Op symbol it means."},{"name":"FilterInput.$adjacent","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._adjacent/","summary":"Ranges touch without overlapping (Postgres -|-)."},{"name":"FilterInput.$and","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._and/","summary":"Every nested condition must hold (SQL AND)."},{"name":"FilterInput.$any","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._any/","summary":"Equals any element of the array (Postgres = ANY)."},{"name":"FilterInput.$between","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._between/","summary":"Within the inclusive [low, high] pair (SQL BETWEEN)."},{"name":"FilterInput.$contained","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._contained/","summary":"The column's range is contained by this one (Postgres <@)."},{"name":"FilterInput.$contains","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._contains/","summary":"The column's range contains this value or range (Postgres @>)."},{"name":"FilterInput.$eq","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._eq/","summary":"Equal to. With null, becomes IS NULL."},{"name":"FilterInput.$gt","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._gt/","summary":"Greater than."},{"name":"FilterInput.$gte","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._gte/","summary":"Greater than or equal to."},{"name":"FilterInput.$iLike","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._ilike/","summary":"Case-insensitive pattern match (Postgres ILIKE)."},{"name":"FilterInput.$in","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._in/","summary":"One of the listed values (SQL IN). An empty list matches nothing."},{"name":"FilterInput.$iRegexp","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._iregexp/","summary":"Matches a regular expression, case-insensitively (Postgres ~*)."},{"name":"FilterInput.$like","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._like/","summary":"Case-sensitive pattern match, % and _ as wildcards (SQL LIKE)."},{"name":"FilterInput.$lt","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._lt/","summary":"Less than."},{"name":"FilterInput.$lte","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._lte/","summary":"Less than or equal to."},{"name":"FilterInput.$ne","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._ne/","summary":"Not equal to."},{"name":"FilterInput.$noExtendLeft","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._noextendleft/","summary":"Range does not extend past this one's left bound (Postgres &>)."},{"name":"FilterInput.$noExtendRight","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._noextendright/","summary":"Range does not extend past this one's right bound (Postgres &<)."},{"name":"FilterInput.$not","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._not/","summary":"Negates the nested condition (SQL NOT)."},{"name":"FilterInput.$notBetween","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._notbetween/","summary":"Outside the inclusive [low, high] pair."},{"name":"FilterInput.$notILike","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._notilike/","summary":"Fails a case-insensitive pattern match."},{"name":"FilterInput.$notIn","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._notin/","summary":"None of the listed values (SQL NOT IN)."},{"name":"FilterInput.$notIRegexp","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._notiregexp/","summary":"Fails a case-insensitive regular expression (Postgres !~*)."},{"name":"FilterInput.$notLike","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._notlike/","summary":"Fails a case-sensitive pattern match."},{"name":"FilterInput.$notRegexp","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._notregexp/","summary":"Fails a POSIX regular expression (Postgres !~)."},{"name":"FilterInput.$or","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._or/","summary":"At least one nested condition must hold (SQL OR)."},{"name":"FilterInput.$overlap","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._overlap/","summary":"Ranges share at least one value (Postgres &&)."},{"name":"FilterInput.$regexp","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._regexp/","summary":"Matches a POSIX regular expression (Postgres ~)."},{"name":"FilterInput.$strictLeft","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._strictleft/","summary":"Range lies entirely to the left of this one (Postgres <<)."},{"name":"FilterInput.$strictRight","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput._strictright/","summary":"Range lies entirely to the right of this one (Postgres >>)."},{"name":"FilterInput","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.filterinput/","summary":"A where clause as plain, serializable JSON."},{"name":"FindOptions.viewParams","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.findoptions.viewparams/","summary":"Values for the placeholders in a dynamic view's definition."},{"name":"FindOptions","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.findoptions/","summary":"Sequelize's own find options, plus the parameters of a dynamic view."},{"name":"formatSql","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.formatsql/","summary":"Reformats a SQL string for logging, when SQL_PRETTIFY is on."},{"name":"FunctionType","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.functiontype/","summary":"The property decorator a decorator factory hands back."},{"name":"Graph.addEdge","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.addedge/","summary":"Adds edges from one vertex to others."},{"name":"Graph.addVertex","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.addvertex/","summary":"Adds vertices with no edges."},{"name":"Graph.delEdge","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.deledge/","summary":"Removes edges from one vertex to others."},{"name":"Graph.delVertex","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.delvertex/","summary":"Removes vertices along with the edges leading out of them."},{"name":"Graph.forEach","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.foreach/","summary":"Visits every vertex once, depth first."},{"name":"Graph.hasEdge","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.hasedge/","summary":"Whether one vertex points at another."},{"name":"Graph.hasVertex","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.hasvertex/","summary":"Whether a vertex is in this graph."},{"name":"Graph.isCycled","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.iscycled/","summary":"Whether any path in this graph leads back to where it started."},{"name":"Graph.path","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.path/","summary":"Every vertex reachable from one vertex, in the order a depth-first walk finds them."},{"name":"Graph.vertices","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.vertices/","summary":"The vertices in this graph, in insertion order."},{"name":"Graph.walk","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph.walk/","summary":"Walks depth first from one vertex."},{"name":"Graph","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graph/","summary":"A directed, unweighted graph with depth-first traversal and cycle detection."},{"name":"GraphForeachCallback","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graphforeachcallback/","summary":"Called once per vertex during a traversal."},{"name":"GraphMap","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.graphmap/","summary":"A graph as adjacency lists: each vertex mapped to the vertices it points at."},{"name":"IAssociated.input","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.iassociated.input/","summary":"The input class describing that model's own filter fields."},{"name":"IAssociated.model","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.iassociated.model/","summary":"The model on the other side of the association."},{"name":"IAssociated.modelFieldName","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.iassociated.modelfieldname/","summary":"Association name on the model, when it differs from the field name."},{"name":"IAssociated","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.iassociated/","summary":"Describes the association a filter field stands for."},{"name":"IDynamicViewDefineOptions.isDynamicView","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.idynamicviewdefineoptions.isdynamicview/","summary":"Marks the model as a dynamic view. Set by the decorator, not by you."},{"name":"IDynamicViewDefineOptions.viewDefinition","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.idynamicviewdefineoptions.viewdefinition/","summary":"The create statement, with placeholders in it."},{"name":"IDynamicViewDefineOptions.viewParams","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.idynamicviewdefineoptions.viewparams/","summary":"A value for every placeholder the definition names."},{"name":"IDynamicViewDefineOptions","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.idynamicviewdefineoptions/","summary":"Options for a view whose definition is parameterised."},{"name":"IModelClass","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.imodelclass/","summary":"Names a model class by the instance type it produces."},{"name":"IMQORMOptions.connectionString","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.imqormoptions.connectionstring/","summary":"Postgres connection string."},{"name":"IMQORMOptions.logger","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.imqormoptions.logger/","summary":"Where SQL statements are logged."},{"name":"IMQORMOptions.modelsPath","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.imqormoptions.modelspath/","summary":"Directory holding the COMPILED model files."},{"name":"IMQORMOptions.sequelize","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.imqormoptions.sequelize/","summary":"Options passed through to the Sequelize constructor."},{"name":"IMQORMOptions","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.imqormoptions/","summary":"Everything database() needs on its first call."},{"name":"IndexMethod","kind":"enum","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.indexmethod/","summary":"The index methods Postgres offers, for ColumnIndexOptions.method."},{"name":"InitOptions","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.initoptions/","summary":"What a model's options actually holds on a model of this package."},{"name":"IRange.end","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.irange.end/","summary":"Upper bound of the range."},{"name":"IRange.start","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.irange.start/","summary":"Lower bound of the range."},{"name":"IRange","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.irange/","summary":"The shape every range filter shares: a start and an end."},{"name":"IViewDefineOptions.viewDefinition","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.iviewdefineoptions.viewdefinition/","summary":"The complete create statement for the view."},{"name":"IViewDefineOptions","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.iviewdefineoptions/","summary":"Sequelize's model options, plus the SQL that defines the view."},{"name":"JsonObject","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.jsonobject/","summary":"A free-form object, describable to @imqueue/rpc."},{"name":"MATCHER","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.matcher/","summary":"The placeholder pattern as a source string: @{name}, where the name is letters, digits and underscores."},{"name":"Modify","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.modify/","summary":"Replaces every member of T that R also declares with R's version of it."},{"name":"NullableColumnIndexOptions","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.nullablecolumnindexoptions/","summary":"What NullableIndex accepts: every ColumnIndexOptions field except expression, which it sets itself."},{"name":"NullableIndex","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.nullableindex_1/","summary":"Declares the pair of partial indices with no options of their own."},{"name":"NullableIndex","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.nullableindex/","summary":"Declares a pair of partial indices on a nullable column, one for the rows where it is null and one for the rows where it is not."},{"name":"NumericRange.end","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.numericrange.end/","summary":"Upper bound of the range."},{"name":"NumericRange.start","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.numericrange.start/","summary":"Lower bound of the range."},{"name":"NumericRange","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.numericrange/","summary":"A range between two numbers, as an @imqueue/rpc type."},{"name":"OrderByInput","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.orderbyinput/","summary":"Which columns to order by, and in which direction."},{"name":"OrderDirection","kind":"enum","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.orderdirection/","summary":"The two directions a column can be ordered in."},{"name":"PaginationInput.count","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.paginationinput.count/","summary":"Total rows in the set, used only to place a negative limit."},{"name":"PaginationInput.limit","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.paginationinput.limit/","summary":"Rows in the page. Negative counts back from the end of the set."},{"name":"PaginationInput.offset","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.paginationinput.offset/","summary":"Rows to skip before the page starts."},{"name":"PaginationInput","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.paginationinput/","summary":"Where a page starts and how big it is."},{"name":"query.autoCountQuery","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.autocountquery/","summary":"The counting counterpart of query.autoQuery(), for the same fields and filter."},{"name":"query.autoQuery","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.autoquery/","summary":"Builds Sequelize find options from a requested fields map, joins included."},{"name":"query.buildWhereFromArray","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.buildwherefromarray/","summary":"ORs an array of filter values into one condition."},{"name":"query.createEntity","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.createentity/","summary":"Recursively creates entity and all it's relations from a given input using a given model."},{"name":"query.E","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.e/","summary":"Renders a value as a SQL constant: a number as itself, a string quoted and escaped, anything else as NULL."},{"name":"query.filtered","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.filtered/","summary":"Intersects a set of attributes with the names a caller asked for."},{"name":"query.ForeignKeyMap","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.foreignkeymap/","summary":"Foreign key map representation, where related property name references parent property name."},{"name":"query.foreignKeys","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.foreignkeys/","summary":"Foreign-key column names on a model for the given relations."},{"name":"query.foreignKeysMap","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.foreignkeysmap/","summary":"Returns foreign key map for a given pair of parent model and related model."},{"name":"query.getInclude","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.getinclude/","summary":"Finds the include options for a model reached through a chain of includes."},{"name":"query.L","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.l/","summary":"Builds a Sequelize literal from a string or a template — the escape hatch for SQL that no query option can express."},{"name":"query.mergeQuery","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.mergequery/","summary":"Merges query-option fragments into one options object."},{"name":"query.needNesting","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.neednesting/","summary":"Whether a fields map asks for any of the model's relations."},{"name":"query.orNull","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.ornull/","summary":"Matches a value, or no value at all."},{"name":"query.overrideJoin","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.overridejoin/","summary":"Traverses given query object, lookups for includes matching the given arguments of include options and overrides those are matching by model and alias with the provided option."},{"name":"query.primaryKeys","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.primarykeys/","summary":"Return names of primary key fields for a given model."},{"name":"query.pureData","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.puredata/","summary":"Keeps only the properties a model actually declares."},{"name":"query.PureDataFunction","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.puredatafunction/","summary":"The two shapes query.pureData accepts: one record, or many."},{"name":"query.pureFields","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.purefields/","summary":"Narrows a requested fields map to the model's own columns."},{"name":"query.safeSqlSpaceCleanup","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.safesqlspacecleanup/","summary":"Collapses whitespace outside quoted literals, so a statement fits on one line."},{"name":"query.skip","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.skip/","summary":"Deletes properties from an object."},{"name":"query.sql","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.sql/","summary":"Normalises a SQL string: one-lined, whitespace collapsed, ending in a single semicolon."},{"name":"query.toLimitOptions","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.tolimitoptions/","summary":"Builds proper paging options query part"},{"name":"query.toOrderOptions","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.toorderoptions/","summary":"Turns a serialized order into Sequelize's order option."},{"name":"query.toWhereOptions","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.towhereoptions/","summary":"Turns a serializable filter into Sequelize where options."},{"name":"query.withRangeFilters","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query.withrangefilters/","summary":"Rewrites <column>Range filter properties onto the columns they belong to."},{"name":"query","kind":"namespace","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.query/","summary":"Turns a caller's serialized query into Sequelize options, and back out as SQL."},{"name":"QueryInterface.createView","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.queryinterface.createview/","summary":"Creates a view from a complete SQL definition."},{"name":"QueryInterface.dropView","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.queryinterface.dropview/","summary":"Drops a view, if it exists."},{"name":"QueryInterface.sequelize","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.queryinterface.sequelize/","summary":"The connection this interface belongs to."},{"name":"QueryInterface","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.queryinterface/","summary":"Sequelize's query interface, extended with view creation and removal."},{"name":"QueryOptions","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.queryoptions/","summary":"Options for a raw query(), with returning widened to accept a column list."},{"name":"ReturningOptions.returning","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.returningoptions.returning/","summary":"true for every column, false for none, or the names of the columns to fetch back."},{"name":"ReturningOptions","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.returningoptions/","summary":"Widens returning so it can name the columns to fetch back, not just ask whether to fetch any."},{"name":"RX_MATCHER","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.rx_matcher/","summary":"MATCHER compiled to find every placeholder in a definition."},{"name":"RX_NAME_MATCHER","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.rx_name_matcher/","summary":"MATCHER compiled to pull the name out of a single placeholder."},{"name":"SaveOptions","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.saveoptions/","summary":"Options for an instance's save(), with returning widened to accept a column list."},{"name":"Sequelize.define","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize.define/","summary":"Defines a model from an attribute map rather than from a decorated class."},{"name":"Sequelize.getModelsWithIndices","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize.getmodelswithindices/","summary":"The registered models that declare at least one column index."},{"name":"Sequelize.getQueryInterface","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize.getqueryinterface/","summary":"The query interface for this connection, with view support and the widened returning option."},{"name":"Sequelize.getViews","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize.getviews/","summary":"The registered models that are declared as views."},{"name":"Sequelize.query","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize.query/","summary":"Runs a raw statement, honouring a returning column list."},{"name":"Sequelize.sync","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize.sync/","summary":"Creates every table, then every view, then every column index."},{"name":"Sequelize.syncIndices","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize.syncindices/","summary":"Creates the column indices declared across every registered model."},{"name":"Sequelize.syncViews","kind":"method","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize.syncviews/","summary":"Replaces every model that is declared as a view."},{"name":"Sequelize","kind":"class","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sequelize/","summary":"Sequelize's own connection class, taught about views, column indices and the widened returning option."},{"name":"SortOrder","kind":"enum","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sortorder/","summary":"Sort direction of an index key, for ColumnIndexOptions.order."},{"name":"SQL_COLORIZE","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sql_colorize/","summary":"Whether logged SQL carries ANSI colour. Off by default."},{"name":"SQL_PRETTIFY","kind":"variable","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sql_prettify/","summary":"Whether logged SQL is reformatted across multiple lines. Off by default."},{"name":"SqlLoggingFunction","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.sqlloggingfunction/","summary":"A sequelize logging callback: the SQL, and the timing when benchmarking is on."},{"name":"SyncOptions.treatAsView","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.syncoptions.treatasview/","summary":"Warning: This API is now obsolete. Decorate the model instead; passing this is ignored.","deprecated":true},{"name":"SyncOptions.withNoViews","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.syncoptions.withnoviews/","summary":"Syncs tables and indices only, leaving every view untouched."},{"name":"SyncOptions.withoutDrop","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.syncoptions.withoutdrop/","summary":"Replaces each view in place instead of dropping it first."},{"name":"SyncOptions","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.syncoptions/","summary":"Sequelize's own sync options, extended for views and column indices."},{"name":"UpdatedBy","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.updatedby/","summary":"Stamps the decorated column with the acting user id on INSERT and UPDATE, taken from the in-flight IMQ request metadata (currentMetadata()?.userId)."},{"name":"UpdateOptions","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.updateoptions/","summary":"Options for the static update(), with returning widened to accept a column list."},{"name":"UpsertOptions","kind":"type","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.upsertoptions/","summary":"Options for upsert(), with returning widened to accept a column list."},{"name":"View","kind":"function","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.view/","summary":"Declares a model to be a database view rather than a table."},{"name":"ViewParams","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.viewparams/","summary":"Values for a dynamic view's placeholders, keyed by placeholder name."},{"name":"WithIncludeMap.includeMap","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.withincludemap.includemap/","summary":"The resolved options of each included association, keyed by property name."},{"name":"WithIncludeMap.includeNames","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.withincludemap.includenames/","summary":"The property names present in includeMap."},{"name":"WithIncludeMap.parent","kind":"property","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.withincludemap.parent/","summary":"The node this one was included from."},{"name":"WithIncludeMap","kind":"interface","package":"@imqueue/pg-sequelize","url":"/api/pg-sequelize/latest/pg-sequelize.withincludemap/","summary":"The shape sequelize's resolved include tree actually has, as this module reads it."},{"name":"@imqueue/rpc","kind":"package","package":"@imqueue/rpc","url":"/api/rpc/latest/","summary":"Type-safe RPC over a message queue — services, clients and the decorators that describe them, built on @imqueue/core."},{"name":"AcquiredLock","kind":"type","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.acquiredlock/","summary":"What IMQLock.acquire() resolves to: the literal true when this caller acquired the lock and must perform the work, or the value the lock holder passed to IMQLock.release() when this caller had to wait."},{"name":"AFTER_HOOK_ERROR","kind":"variable","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.after_hook_error/","summary":"Prefix used when logging a failure inside an afterCall hook."},{"name":"ArgDescription.description","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.argdescription.description/","summary":"Prose describing the argument, taken from the text after the name on the JSDoc @param line. Empty string when undocumented."},{"name":"ArgDescription.isOptional","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.argdescription.isoptional/","summary":"Whether the argument was documented as optional, i.e. written [name] in the JSDoc. A TypeScript ? or a default value alone does not set this."},{"name":"ArgDescription.name","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.argdescription.name/","summary":"Parameter name, from the JSDoc @param when documented, otherwise read from the method's own signature."},{"name":"ArgDescription.tsType","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.argdescription.tstype/","summary":"The argument's type as written in the method's JSDoc, defaulting to 'any' when undocumented. This is what a generated client emits into the method signature. Never empty."},{"name":"ArgDescription.type","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.argdescription.type/","summary":"Legacy duplicate of ArgDescription.tsType — always the identical string."},{"name":"ArgDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.argdescription/","summary":"Description of one argument of an exposed method, as parsed from its JSDoc."},{"name":"BEFORE_HOOK_ERROR","kind":"variable","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.before_hook_error/","summary":"Prefix used when logging a failure inside a beforeCall hook."},{"name":"cache","kind":"variable","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.cache/","summary":"Creates a @cache() method decorator that memoizes the decorated method's result in a cache adapter (RedisCache by default). On each call the cache is checked first; on a miss the method runs, and its result is stored under a key derived from the class name, method name, and arguments. The returned decorator is dual-mode: it works both as a standard (TC39) and as a legacy method decorator."},{"name":"CacheDecorator.globalOptions","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.cachedecorator.globaloptions/","summary":"Process-wide defaults, merged under each call's own options."},{"name":"CacheDecorator","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.cachedecorator/","summary":"The type of the cache export: a decorator factory that also carries process-wide defaults."},{"name":"CacheDecoratorOptions.adapter","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.cachedecoratoroptions.adapter/","summary":"Cache adapter as a constructor, an instance, or a built-in adapter name."},{"name":"CacheDecoratorOptions.nx","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.cachedecoratoroptions.nx/","summary":"Store only when the key does not already exist."},{"name":"CacheDecoratorOptions.ttl","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.cachedecoratoroptions.ttl/","summary":"Time-to-live in milliseconds."},{"name":"CacheDecoratorOptions","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.cachedecoratoroptions/","summary":"Per-method options for the cache decorator."},{"name":"classType","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.classtype/","summary":"Registers a complex-type class's @property field definitions into the RPC type description, so the type can be exposed to service clients."},{"name":"currentMetadata","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.currentmetadata/","summary":"Returns the metadata of the in-flight IMQ request for the current async execution, if any. Returns undefined outside of a runWithRequest() scope. The transport carries metadata as an opaque bag; callers interpret its fields."},{"name":"DEFAULT_IMQ_CLIENT_OPTIONS","kind":"variable","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.default_imq_client_options/","summary":"Default options applied to every generated IMQ client: the core queue defaults, plus cleanup enabled with a '*:client' filter and the code-generation settings."},{"name":"DEFAULT_IMQ_METRICS_SERVER_OPTIONS","kind":"variable","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.default_imq_metrics_server_options/","summary":"Default metrics server options"},{"name":"DEFAULT_IMQ_SERVICE_OPTIONS","kind":"variable","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.default_imq_service_options/","summary":"Default options applied to every IMQ service: the core queue defaults, plus cleanup enabled with a '*:client' filter, single-process mode, and one worker per core."},{"name":"DEFAULT_REDIS_CACHE_OPTIONS","kind":"variable","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.default_redis_cache_options/","summary":"Default options for RedisCache: the standard queue defaults, with prefix overridden to imq-cache so cache keys never collide with queue keys under the imq prefix."},{"name":"Description.service","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.description.service/","summary":"The service itself: its name, and every exposed method with the inheritance chain already flattened."},{"name":"Description.types","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.description.types/","summary":"Every complex type registered in the service's process."},{"name":"Description","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.description/","summary":"The self-description a service serves to its clients, and the input to client generation."},{"name":"expose","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.expose/","summary":"Makes a service method callable remotely by registering it in the RPC service description."},{"name":"ICache.del","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icache.del/","summary":"Removes the value stored in the cache under the given key."},{"name":"ICache.get","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icache.get/","summary":"Returns the value stored in the cache under the given key."},{"name":"ICache.init","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icache.init/","summary":"Initializes the cache adapter with the given adapter-specific options."},{"name":"ICache.name","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icache.name/","summary":"Adapter (cache) name."},{"name":"ICache.purge","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icache.purge/","summary":"Deletes every key matching the given wildcard mask."},{"name":"ICache.ready","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icache.ready/","summary":"Whether the cache adapter is initialized and ready to use."},{"name":"ICache.set","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icache.set/","summary":"Stores the given value in the cache under the given key."},{"name":"ICache","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icache/","summary":"Generic cache adapter interface. Any cache engine implementation must conform to this contract to be usable within IMQ."},{"name":"ICacheAdapter","kind":"type","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icacheadapter/","summary":"Accepted cache adapter references: a constructor, an instance, or an adapter name."},{"name":"ICacheConstructor.(new)","kind":"constructor","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icacheconstructor._new_/","summary":"Constructs a cache adapter instance, ready to be initialized."},{"name":"ICacheConstructor","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.icacheconstructor/","summary":"Constructor signature the registry uses to instantiate a cache adapter class."},{"name":"IMQAfterCall","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqaftercall/","summary":"Hook invoked after a call has been handled."},{"name":"IMQBeforeCall","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqbeforecall/","summary":"Hook invoked before a call is dispatched."},{"name":"IMQCache.adapters","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqcache.adapters/","summary":"The registry of adapter instances, keyed by adapter name."},{"name":"IMQCache.apply","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqcache.apply/","summary":"Overrides existing adapter options with the given ones."},{"name":"IMQCache.get","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqcache.get/","summary":"Returns a registered cache adapter by its given name or class."},{"name":"IMQCache.init","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqcache.init/","summary":"Initializes all registered cache adapters."},{"name":"IMQCache.register","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqcache.register/","summary":"Registers the given cache adapter."},{"name":"IMQCache","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqcache/","summary":"Process-wide static registry of cache adapters."},{"name":"imqCallRejector","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqcallrejector/","summary":"Builds a call rejector that rejects the pending promise and then runs the optional after-call hook."},{"name":"imqCallResolver","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqcallresolver/","summary":"Builds a call resolver that resolves the pending promise and then runs the optional after-call hook."},{"name":"IMQClient.(constructor)","kind":"constructor","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient._constructor_/","summary":"Constructs a client."},{"name":"IMQClient.broadcast","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.broadcast/","summary":"Publishes the given payload on this client's own queue channel (IMQClient.queueName)."},{"name":"IMQClient.create","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.create/","summary":"Generates a client for the service registered under the given queue name and resolves to the generated namespace object — not to a client instance, and not to an IMQClient."},{"name":"IMQClient.describe","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.describe/","summary":"Returns service description metadata."},{"name":"IMQClient.destroy","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.destroy/","summary":"Destroys client"},{"name":"IMQClient.hostName","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.hostname/","summary":"Machine-scoped identity, \"<osUuid>-<id>:client\", where osUuid is a hash of the OS machine id."},{"name":"IMQClient.id","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.id/","summary":"Per-host instance slot number — not an OS process id."},{"name":"IMQClient.name","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.name/","summary":"This client's unique identity, \"<baseName>-<hostName>\"."},{"name":"IMQClient.options","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.options/","summary":"The effective options for this client: DEFAULT_IMQ_CLIENT_OPTIONS merged with the values passed to the constructor."},{"name":"IMQClient.queueName","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.queuename/","summary":"The local side: the queue replies come back on, and the value placed in request.from."},{"name":"IMQClient.remoteCall","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.remotecall/","summary":"Sends a call to the remote service method."},{"name":"IMQClient.serviceName","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.servicename/","summary":"The remote side: the queue every request is addressed to, and the pub/sub channel IMQClient.subscribe() listens on."},{"name":"IMQClient.start","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.start/","summary":"Initializes client work"},{"name":"IMQClient.stop","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.stop/","summary":"Stops client work"},{"name":"IMQClient.subscribe","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.subscribe/","summary":"Subscribes to the service's event channel, named after IMQClient.serviceName — the same channel a service's publish() writes to, so every client of that service receives every published payload."},{"name":"IMQClient.unsubscribe","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient.unsubscribe/","summary":"Stops receiving service events: unsubscribes the channel, discards every handler registered through IMQClient.subscribe(), and closes the dedicated subscription connection."},{"name":"IMQClient","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclient/","summary":"Base class for service clients."},{"name":"IMQClientOptions.afterCall","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions.aftercall/","summary":"Post-settle hook. See IMQAfterCall."},{"name":"IMQClientOptions.beforeCall","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions.beforecall/","summary":"Pre-dispatch hook. See IMQBeforeCall; on a client it receives the request only."},{"name":"IMQClientOptions.callTimeout","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions.calltimeout/","summary":"Per-call timeout in milliseconds."},{"name":"IMQClientOptions.compile","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions.compile/","summary":"Transpile the generated client and evaluate it in-process, returning its exports."},{"name":"IMQClientOptions.path","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions.path/","summary":"Directory the generated client is written to, resolved relative to the process working directory."},{"name":"IMQClientOptions.singleQueue","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions.singlequeue/","summary":"Share a single reply queue and transport connection across every client in the process, instead of one per client."},{"name":"IMQClientOptions.timeout","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions.timeout/","summary":"Milliseconds the client generator waits for the target service to answer its description request before failing."},{"name":"IMQClientOptions.write","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions.write/","summary":"Persist the generated .ts and .js pair in IMQClientOptions.path."},{"name":"IMQClientOptions","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqclientoptions/","summary":"Options accepted by a generated IMQ client."},{"name":"IMQDelay.(constructor)","kind":"constructor","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqdelay._constructor_/","summary":"Constructs a new instance of the IMQDelay class"},{"name":"IMQDelay.ms","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqdelay.ms/","summary":"Returns IMQDelay.timer converted to milliseconds."},{"name":"IMQDelay.timer","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqdelay.timer/","summary":"The delay magnitude, expressed in IMQDelay.unit. Mutable after construction, and read by IMQDelay.ms."},{"name":"IMQDelay.unit","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqdelay.unit/","summary":"Time unit of IMQDelay.timer — milliseconds, seconds, minutes, hours or days. Defaults to 'ms', meaning timer is already a millisecond count."},{"name":"IMQDelay","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqdelay/","summary":"Represents a delay expressed as a numeric timer value in a given time unit. Used to defer IMQ request processing."},{"name":"IMQError","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqerror/","summary":"Builds a JSON representation of an IMQ error."},{"name":"IMQLock.acquire","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlock.acquire/","summary":"Acquires a lock for a given key."},{"name":"IMQLock.deadlockTimeout","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlock.deadlocktimeout/","summary":"Deadlock timeout in milliseconds"},{"name":"IMQLock.locked","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlock.locked/","summary":"Returns true if the given key is locked, false otherwise."},{"name":"IMQLock.logger","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlock.logger/","summary":"Logger used to log errors that appear during locked calls"},{"name":"IMQLock.release","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlock.release/","summary":"Releases a previously acquired lock for a given key."},{"name":"IMQLock","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlock/","summary":"In-process, promise-based locks used to collapse concurrent identical calls: the first caller executes the work while later callers for the same key wait and are then resolved with the first caller's result."},{"name":"IMQLockMetadata","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlockmetadata/","summary":"Map from lock key to the metadata describing the call currently associated with that key."},{"name":"IMQLockMetadataItem.args","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlockmetadataitem.args/","summary":"Arguments the locked method was called with."},{"name":"IMQLockMetadataItem.className","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlockmetadataitem.classname/","summary":"Name of the class whose method holds the lock."},{"name":"IMQLockMetadataItem.methodName","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlockmetadataitem.methodname/","summary":"Name of the locked method."},{"name":"IMQLockMetadataItem","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlockmetadataitem/","summary":"Diagnostic description of a locked call."},{"name":"IMQLockQueue","kind":"type","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlockqueue/","summary":"The FIFO queue of callers waiting on a single lock key, drained in arrival order when the lock is released."},{"name":"IMQLockTask","kind":"type","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqlocktask/","summary":"Internal representation of one queued waiter: its promise's [resolve, reject] pair, selected by IMQLock.release() according to whether an error was supplied."},{"name":"IMQMetadata.(constructor)","kind":"constructor","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqmetadata._constructor_/","summary":"Constructs a new instance of the IMQMetadata class"},{"name":"IMQMetadata","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqmetadata/","summary":"Arbitrary, JSON-serializable metadata bag carried alongside an IMQ request. Each property value must be a valid JSON value."},{"name":"IMQMetricsServerOptions.enabled","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqmetricsserveroptions.enabled/","summary":"Start the metrics HTTP listener when true."},{"name":"IMQMetricsServerOptions.port","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqmetricsserveroptions.port/","summary":"TCP port to bind on all interfaces."},{"name":"IMQMetricsServerOptions.queueLengthFormatter","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqmetricsserveroptions.queuelengthformatter/","summary":"Renders the response body from the current queue length and the metric name, which is always the literal 'queue_length'."},{"name":"IMQMetricsServerOptions","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqmetricsserveroptions/","summary":"Options for the built-in metrics server."},{"name":"IMQRPCDescription.serviceDescription","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcdescription.servicedescription/","summary":"All classes that declare exposed methods, keyed by class name (not service name)."},{"name":"IMQRPCDescription.typesDescription","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcdescription.typesdescription/","summary":"All complex types registered via property() or indexed(), keyed by class name."},{"name":"IMQRPCDescription","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcdescription/","summary":"Process-global registry of RPC metadata gathered by the decorators."},{"name":"IMQRPCError.args","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcerror.args/","summary":"The call's arguments serialized as a pretty-printed JSON string, not an array — parse it before use."},{"name":"IMQRPCError.code","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcerror.code/","summary":"Machine-readable failure code."},{"name":"IMQRPCError.message","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcerror.message/","summary":"Human-readable failure description."},{"name":"IMQRPCError.method","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcerror.method/","summary":"Bare name of the method the call targeted, unqualified by service name. Empty string rather than absent when unknown."},{"name":"IMQRPCError.original","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcerror.original/","summary":"The error the service method threw, as a JSON string — not an object, despite the any type."},{"name":"IMQRPCError.stack","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcerror.stack/","summary":"Stack trace as a string, from the service process. Empty string rather than absent when unavailable."},{"name":"IMQRPCError","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcerror/","summary":"Failure descriptor for a remote call."},{"name":"IMQRPCRequest.args","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcrequest.args/","summary":"Positional arguments for the method, applied in order."},{"name":"IMQRPCRequest.from","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcrequest.from/","summary":"Name of the caller's own queue — the call's reply address."},{"name":"IMQRPCRequest.metadata","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcrequest.metadata/","summary":"Optional metadata attached by the caller."},{"name":"IMQRPCRequest.method","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcrequest.method/","summary":"Name of the service method to invoke."},{"name":"IMQRPCRequest","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcrequest/","summary":"Wire format of a remote call, produced by a client and consumed by a service."},{"name":"IMQRPCResponse.data","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcresponse.data/","summary":"The value the service method returned, as JSON."},{"name":"IMQRPCResponse.error","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcresponse.error/","summary":"null on success, otherwise the failure descriptor."},{"name":"IMQRPCResponse.request","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcresponse.request/","summary":"The originating request, echoed back in full — method, arguments and metadata included."},{"name":"IMQRPCResponse.to","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcresponse.to/","summary":"Correlation identifier: the queue-assigned message id of the request this response answers."},{"name":"IMQRPCResponse","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqrpcresponse/","summary":"Response message data structure that a service replies with to handled requests."},{"name":"IMQService.(constructor)","kind":"constructor","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice._constructor_/","summary":"Constructs a service."},{"name":"IMQService.cache","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.cache/","summary":"The cache adapter used by cached methods."},{"name":"IMQService.describe","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.describe/","summary":"Returns this service's description metadata — the exposed method list plus the registered complex types — synchronously."},{"name":"IMQService.destroy","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.destroy/","summary":"Removes this instance's signal handlers, then unsubscribes and destroys the underlying queue."},{"name":"IMQService.imq","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.imq/","summary":"The underlying message queue this service consumes requests from."},{"name":"IMQService.logger","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.logger/","summary":"The effective logger — options.logger, defaulting to console."},{"name":"IMQService.metricsServer","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.metricsserver/","summary":"The metrics HTTP server, present only while IMQMetricsServerOptions.enabled is set."},{"name":"IMQService.name","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.name/","summary":"This service's name, which is also its queue name and the key its description is cached under."},{"name":"IMQService.options","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.options/","summary":"The effective options for this service: DEFAULT_IMQ_SERVICE_OPTIONS merged with the values passed to the constructor."},{"name":"IMQService.publish","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.publish/","summary":"Broadcasts data on this service's pub/sub channel, delivering it to every client currently subscribed to this service."},{"name":"IMQService.start","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.start/","summary":"Initializes this instance of service and starts handling request messages."},{"name":"IMQService.stop","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice.stop/","summary":"Stops consuming messages from the queue."},{"name":"IMQService","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqservice/","summary":"Class IMQService Basic abstract service (server-side) implementation"},{"name":"IMQServiceOptions.afterCall","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqserviceoptions.aftercall/","summary":"Post-response hook. See IMQAfterCall."},{"name":"IMQServiceOptions.beforeCall","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqserviceoptions.beforecall/","summary":"Pre-dispatch hook. See IMQBeforeCall."},{"name":"IMQServiceOptions.childrenPerCore","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqserviceoptions.childrenpercore/","summary":"Workers to fork per CPU core. Ignored unless IMQServiceOptions.multiProcess is true."},{"name":"IMQServiceOptions.metricsServer","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqserviceoptions.metricsserver/","summary":"Built-in metrics HTTP listener settings."},{"name":"IMQServiceOptions.multiProcess","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqserviceoptions.multiprocess/","summary":"Fork one cluster worker per CPU core, multiplied by IMQServiceOptions.childrenPerCore."},{"name":"IMQServiceOptions.wrapCall","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqserviceoptions.wrapcall/","summary":"Around hook wrapping the method invocation. See IMQWrapCall."},{"name":"IMQServiceOptions","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqserviceoptions/","summary":"Options accepted by an IMQ service."},{"name":"IMQWrapCall","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.imqwrapcall/","summary":"Around hook wrapping the actual service method invocation. It receives the request/response and a next callback that runs the method and resolves to its return value; it MUST call next() (returning its resolved value) to produce the response data. Unlike beforeCall/afterCall, this lets a hook run the method inside its own scope — e.g. establishing an OpenTelemetry context so any spans the method (and its downstream calls) create nest under the request span. When unset, the method is invoked directly."},{"name":"indexed","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.indexed/","summary":"Exposes a complex service type that carries an index signature."},{"name":"IRedisCacheOptions.conn","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.irediscacheoptions.conn/","summary":"An existing Redis client to reuse — a running service's queue writer, for example — instead of opening a new connection."},{"name":"IRedisCacheOptions","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.irediscacheoptions/","summary":"Options accepted by RedisCache.init()."},{"name":"lock","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.lock/","summary":"Creates a @lock() method decorator. Concurrent calls to the decorated method that share the same arguments are coalesced: only the first call is executed, and all the others resolve with its result. Call similarity is determined by the method's argument values. The returned decorator is dual-mode: it works both as a standard (TC39) and as a legacy method decorator."},{"name":"LockOptions.disabled","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.lockoptions.disabled/","summary":"Set to true to turn locking off for the decorated method."},{"name":"LockOptions.skipArgs","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.lockoptions.skipargs/","summary":"Positional indices of arguments to exclude when computing the lock key — useful for request-context or callback arguments that must not affect similarity."},{"name":"LockOptions","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.lockoptions/","summary":"Options for the lock() decorator."},{"name":"logged","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.logged/","summary":"Creates a @logged() method decorator that wraps the decorated method in a try/catch and logs any error it throws. The logger is resolved in this order: an explicitly passed logger, then a logger defined on the instance or on the class, and finally the global console. By default the error is re-thrown after being logged; pass { doNotThrow: true } to swallow it. The returned decorator is dual-mode: it works both as a standard (TC39) and as a legacy method decorator."},{"name":"LoggedDecoratorOptions.doNotThrow","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.loggeddecoratoroptions.donotthrow/","summary":"Set to true to swallow the error after logging it, in which case the method resolves to undefined."},{"name":"LoggedDecoratorOptions.level","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.loggeddecoratoroptions.level/","summary":"Which ILogger method records the error."},{"name":"LoggedDecoratorOptions.logger","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.loggeddecoratoroptions.logger/","summary":"An explicit logger, taking precedence over the instance, class and console fallbacks."},{"name":"LoggedDecoratorOptions","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.loggeddecoratoroptions/","summary":"Options for the logged() decorator."},{"name":"LoggedLogLevel","kind":"type","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.loggedloglevel/","summary":"Names of the ILogger methods logged() can use to record a caught error."},{"name":"MethodDescription.arguments","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.methoddescription.arguments/","summary":"The method's arguments, in positional order."},{"name":"MethodDescription.description","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.methoddescription.description/","summary":"The method's JSDoc summary, or an empty string when undocumented."},{"name":"MethodDescription.returns","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.methoddescription.returns/","summary":"The method's return value description. Always present."},{"name":"MethodDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.methoddescription/","summary":"Description of one exposed method: its summary, its positional arguments and its return value."},{"name":"MethodsCollectionDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.methodscollectiondescription/","summary":"Map of method name to method description."},{"name":"parseSourceComments","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.parsesourcecomments/","summary":"Extracts method JSDoc blocks from original source text of a given class."},{"name":"property","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.property/","summary":"Marks a class field as part of an exposed complex type, so it is described to clients and appears in the generated client interfaces."},{"name":"PropertyDescription.isOptional","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.propertydescription.isoptional/","summary":"Whether the property is optional, from the second argument of property(). Defaults to false, and is never inferred from a TypeScript ? modifier."},{"name":"PropertyDescription.type","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.propertydescription.type/","summary":"The property's RPC type as a string — a literal type name, a constructor's name, or a name with [] appended for the array form."},{"name":"PropertyDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.propertydescription/","summary":"Description of one property of an exposed complex type."},{"name":"REDIS_CLIENT_INIT_ERROR","kind":"variable","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.redis_client_init_error/","summary":"Message of the TypeError thrown by any RedisCache operation invoked before a connection has been established. Exported so callers can match on it."},{"name":"RedisCache.del","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.del/","summary":"Removes the value stored in the cache under the given key."},{"name":"RedisCache.destroy","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.destroy/","summary":"Safely destroys the Redis connection."},{"name":"RedisCache.get","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.get/","summary":"Returns the value stored in the cache under a given key."},{"name":"RedisCache.init","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.init/","summary":"Initializes the cache instance. The underlying Redis connection is shared between all instances; concurrent initializations share a single connection attempt."},{"name":"RedisCache.name","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.name/","summary":"This adapter instance's name, 'RedisCache'. Used as the registry key and as a segment of every cache key."},{"name":"RedisCache.options","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.options/","summary":"The effective options after merging user input over DEFAULT_REDIS_CACHE_OPTIONS."},{"name":"RedisCache.purge","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.purge/","summary":"Purges all keys from the cache matching a given wildcard mask."},{"name":"RedisCache.ready","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.ready/","summary":"True once RedisCache.init() has completed successfully."},{"name":"RedisCache.set","kind":"method","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache.set/","summary":"Stores the given value in the cache under the given key. If TTL is specified, the cached value will expire after the given number of milliseconds. If the NX argument is set to true, the key:value pair is created only if it does not exist yet. The given value can be any JSON-compatible object and will be serialized automatically."},{"name":"RedisCache","kind":"class","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.rediscache/","summary":"Class RedisCache. Implements a cache engine on top of Redis."},{"name":"registerType","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.registertype/","summary":"Flushes @property definitions collected on a class into the RPC type description. Invoked by class-level decorators once the class (and hence its name) is available."},{"name":"remote","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.remote/","summary":"Creates a @remote() method decorator for client classes. The decorated method has the remote method name appended to its arguments and is then forwarded to remoteCall(). The returned decorator is dual-mode: it works both as a standard (TC39) and as a legacy (experimentalDecorators) method decorator."},{"name":"ReturnValueDescription.description","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.returnvaluedescription.description/","summary":"Prose describing the return value, from the @returns JSDoc line."},{"name":"ReturnValueDescription.tsType","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.returnvaluedescription.tstype/","summary":"The return type from the method's @returns JSDoc, defaulting to 'any'."},{"name":"ReturnValueDescription.type","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.returnvaluedescription.type/","summary":"Legacy duplicate of ReturnValueDescription.tsType — always the identical string."},{"name":"ReturnValueDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.returnvaluedescription/","summary":"Description of an exposed method's return value, as parsed from its JSDoc."},{"name":"runWithRequest","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.runwithrequest/","summary":"Runs the given function with request bound to the current async execution context, so any code reached from it (and its asynchronous continuations) can access the in-flight request's metadata via currentMetadata() without threading it through call signatures."},{"name":"send","kind":"function","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.send/","summary":"Sends IMQ response with support of after call optional hook"},{"name":"ServiceClassDescription.inherits","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.serviceclassdescription.inherits/","summary":"Name of the class this one extends, read from the runtime prototype chain. The literal 'Function' means there is no class parent."},{"name":"ServiceClassDescription.methods","kind":"property","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.serviceclassdescription.methods/","summary":"Methods declared directly by this class, keyed by name."},{"name":"ServiceClassDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.serviceclassdescription/","summary":"The exposed methods a single class declares, plus its parent's name."},{"name":"ServiceDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.servicedescription/","summary":"Raw registry of every class that declares exposed methods, keyed by class name — the storage format behind IMQRPCDescription.serviceDescription."},{"name":"Thunk","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.thunk/","summary":"A zero-argument function whose return value is resolved lazily."},{"name":"TypeDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.typedescription/","summary":"The property bag of a single exposed type: property name to property description."},{"name":"TypesDescription","kind":"interface","package":"@imqueue/rpc","url":"/api/rpc/latest/rpc.typesdescription/","summary":"Every exposed complex type, keyed by class name."},{"name":"@imqueue/tag-cache","kind":"package","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/","summary":"Tagged cache over Redis: every value is stored with a set of tags, and invalidating a tag drops everything stored under it."},{"name":"REDIS_INIT_ERROR","kind":"variable","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.redis_init_error/","summary":"Message of the TypeError thrown by every cache operation when no redis connection is available — either RedisCache.init() was never awaited, or TagCache.destroy() has already been called on this instance."},{"name":"TagCache.(constructor)","kind":"constructor","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache._constructor_/","summary":"Constructs a new instance of the TagCache class"},{"name":"TagCache.cache","kind":"property","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache.cache/","summary":"The RedisCache this instance borrows its connection, key prefix and logger from. Deleted by TagCache.destroy(). Documented here rather than above the constructor because it is a parameter property, and that is the only place a doc comment reaches the emitted declaration."},{"name":"TagCache.destroy","kind":"method","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache.destroy/","summary":"Destroys this cache instance"},{"name":"TagCache.get","kind":"method","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache.get/","summary":"Returns data stored under given keys. If a single key provided returns a single result, otherwise it will return an array of results associated with the keys"},{"name":"TagCache.invalidate","kind":"method","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache.invalidate/","summary":"Invalidates data under given tags"},{"name":"TagCache.key","kind":"property","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache.key/","summary":"Maps a caller-supplied key onto the fully-qualified redis key, applying the prefix the underlying RedisCache was initialised with. Bound to that cache, so it is safe to pass around detached."},{"name":"TagCache.logger","kind":"property","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache.logger/","summary":"Logger inherited from the underlying RedisCache. Every swallowed redis error is reported through it at warning level."},{"name":"TagCache.redis","kind":"property","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache.redis/","summary":"Shared ioredis connection taken from RedisCache at construction time. Absent until RedisCache.init() has been awaited, and deleted again by TagCache.destroy() — while it is absent every operation throws a TypeError carrying REDIS_INIT_ERROR."},{"name":"TagCache.set","kind":"method","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache.set/","summary":"Stores given value under a given key, tagging it with the given tags"},{"name":"TagCache","kind":"class","package":"@imqueue/tag-cache","url":"/api/tag-cache/latest/tag-cache.tagcache/","summary":"Tagged cache over redis: values are stored under their own keys, and each key is additionally added to a redis set per tag. Invalidating a tag then drops every value that was stored with it, which is what plain key-based caching cannot express — one write can be invalidated by any of several unrelated events."},{"name":"@imqueue/type-graphql-dependency","kind":"package","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/","summary":"@imqueue/graphql-dependency for type-graphql — declare cross-service dependencies on the decorated classes you already have, instead of on raw GraphQLObjectType values."},{"name":"CreateSchemaHook","kind":"type","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.createschemahook/","summary":"A deferred piece of dependency wiring, run once the type-graphql schema exists and the classes it was declared against have become GraphQL types."},{"name":"Dependency","kind":"variable","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependency/","summary":"The dependency description for a type-graphql class — the runtime half of this package, for loading dependencies inside a resolver."},{"name":"DependencyFor","kind":"function","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependencyfor/","summary":"Class decorator declaring how a type-graphql entity is loaded and what it depends on, wiring it into @imqueue/graphql-dependency."},{"name":"DependencyInterface.schema","kind":"property","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependencyinterface.schema/","summary":"The built schema used to turn a class into its GraphQL type."},{"name":"DependencyInterface","kind":"interface","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependencyinterface/","summary":"The callable Dependency exposes: a class in, its dependency description out, plus the schema it resolves classes against."},{"name":"DependentType","kind":"type","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependenttype/","summary":"The class a requirement points at, named through a thunk."},{"name":"DependentTypeRelations.as","kind":"property","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependenttyperelations.as/","summary":"The name of the field on the decorated class the loaded objects are written to. It must be a field of the generated GraphQL type, or the hook throws TypeError when the schema is created."},{"name":"DependentTypeRelations.filter","kind":"property","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependenttyperelations.filter/","summary":"How to find the dependent objects belonging to each instance: each key is a field of the *dependent* type that its loader filters on, and each value is the field on the *decorated* class supplying the values."},{"name":"DependentTypeRelations","kind":"interface","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependenttyperelations/","summary":"One relation from the decorated class to a dependent class: where the loaded objects are attached, and how they are matched."},{"name":"DependsOptions.init","kind":"property","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependsoptions.init/","summary":"An async routine that fills extra fields on this class's objects before its dependencies load, for values a requirement filter needs but the initial result does not carry."},{"name":"DependsOptions.load","kind":"property","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependsoptions.load/","summary":"The bulk fetch for this class, called whenever another class requires it. Every object it returns must carry an id, and it must accept a set of values per filter key rather than one."},{"name":"DependsOptions.require","kind":"property","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependsoptions.require/","summary":"The classes this one owns, each paired with its relations — a thunk naming the dependent class, and one DependentTypeRelations per relation to it. Deferred through a thunk so a class can require another that is not defined yet, which is what makes circular relations expressible."},{"name":"DependsOptions","kind":"interface","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.dependsoptions/","summary":"What DependencyFor() declares for one class — any combination of requirements, an initializer and a loader."},{"name":"onCreateSchema","kind":"function","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.oncreateschema/","summary":"Registers a hook to run when the schema is created, ignoring a handler already registered."},{"name":"schemaHooks","kind":"variable","package":"@imqueue/type-graphql-dependency","url":"/api/type-graphql-dependency/latest/type-graphql-dependency.schemahooks/","summary":"Every deferred wiring hook registered so far, in the order it was registered."},{"name":"@imqueue/validation","kind":"package","package":"@imqueue/validation","url":"/api/validation/latest/","summary":"Zod-backed input validation for @imqueue services, expressed as native (TC39) decorators rather than as a schema kept alongside the class it describes."},{"name":"Ctor","kind":"type","package":"@imqueue/validation","url":"/api/validation/latest/validation.ctor/","summary":"Any class constructor, abstract ones included."},{"name":"schemaOf","kind":"function","package":"@imqueue/validation","url":"/api/validation/latest/validation.schemaof/","summary":"The assembled Zod object schema for a validatable() class, or null when the class contributes no validated fields."},{"name":"validatable","kind":"function","package":"@imqueue/validation","url":"/api/validation/latest/validation.validatable/","summary":"Class decorator that seals the validate() fields declared in this class, making them retrievable through schemaOf()."},{"name":"validate","kind":"function","package":"@imqueue/validation","url":"/api/validation/latest/validation.validate/","summary":"Field decorator that records a validator for one class field, sitting beside @property on an @imqueue/rpc input class."},{"name":"validated","kind":"function","package":"@imqueue/validation","url":"/api/validation/latest/validation.validated/","summary":"Method decorator that checks a method's positional arguments before the method body runs — the usual way to validate an @imqueue/rpc service method's input."},{"name":"Validator","kind":"type","package":"@imqueue/validation","url":"/api/validation/latest/validation.validator/","summary":"What validate() and validated() accept for a single value: a Zod schema, a validatable() class whose own field schemas should be used, or null/undefined to skip validation at that position."}]