@fedify/postgres
Version:
PostgreSQL drivers for Fedify
65 lines (64 loc) • 2.02 kB
text/typescript
import { MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions } from "@fedify/fedify";
import { Sql } from "postgres";
//#region src/mq.d.ts
/**
* Options for the PostgreSQL message queue.
*/
interface PostgresMessageQueueOptions {
/**
* The table name to use for the message queue.
* `"fedify_message_v2"` by default.
* @default `"fedify_message_v2"`
*/
tableName?: string;
/**
* The channel name to use for the message queue.
* `"fedify_channel"` by default.
* @default `"fedify_channel"`
*/
channelName?: string;
/**
* Whether the table has been initialized. `false` by default.
* @default `false`
*/
initialized?: boolean;
/**
* The poll interval for the message queue. 5 seconds by default.
* @default `{ seconds: 5 }`
*/
pollInterval?: Temporal.Duration | Temporal.DurationLike;
}
/**
* A message queue that uses PostgreSQL as the underlying storage.
*
* @example
* ```ts
* import { createFederation } from "@fedify/fedify";
* import { PostgresKvStore, PostgresMessageQueue } from "@fedify/postgres";
* import postgres from "postgres";
*
* const sql = postgres("postgres://user:pass@localhost/db");
*
* const federation = createFederation({
* kv: new PostgresKvStore(sql),
* queue: new PostgresMessageQueue(sql),
* });
* ```
*/
declare class PostgresMessageQueue implements MessageQueue {
#private;
constructor(sql: Sql<{}>, options?: PostgresMessageQueueOptions);
enqueue(message: any, options?: MessageQueueEnqueueOptions): Promise<void>;
enqueueMany(messages: any[], options?: MessageQueueEnqueueOptions): Promise<void>;
listen(handler: (message: any) => void | Promise<void>, options?: MessageQueueListenOptions): Promise<void>;
/**
* Initializes the message queue table if it does not already exist.
*/
initialize(): Promise<void>;
/**
* Drops the message queue table if it exists.
*/
drop(): Promise<void>;
}
//#endregion
export { PostgresMessageQueue, PostgresMessageQueueOptions };