@geekmidas/events 10.0.0-alpha.71 → 10.0.0-alpha.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -1
- package/dist/basic/index.cjs +19 -0
- package/dist/basic/index.cjs.map +1 -1
- package/dist/basic/index.d.cts +8 -1
- package/dist/basic/index.d.cts.map +1 -1
- package/dist/basic/index.d.mts +8 -1
- package/dist/basic/index.d.mts.map +1 -1
- package/dist/basic/index.mjs +19 -1
- package/dist/basic/index.mjs.map +1 -1
- package/dist/index.cjs +33 -137
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -33
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +15 -33
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +30 -138
- package/dist/index.mjs.map +1 -1
- package/dist/pgboss/index.cjs +41 -22
- package/dist/pgboss/index.cjs.map +1 -1
- package/dist/pgboss/index.d.cts +16 -1
- package/dist/pgboss/index.d.cts.map +1 -1
- package/dist/pgboss/index.d.mts +16 -1
- package/dist/pgboss/index.d.mts.map +1 -1
- package/dist/pgboss/index.mjs +41 -22
- package/dist/pgboss/index.mjs.map +1 -1
- package/dist/rabbitmq/index.cjs +28 -12
- package/dist/rabbitmq/index.cjs.map +1 -1
- package/dist/rabbitmq/index.d.cts +9 -1
- package/dist/rabbitmq/index.d.cts.map +1 -1
- package/dist/rabbitmq/index.d.mts +9 -1
- package/dist/rabbitmq/index.d.mts.map +1 -1
- package/dist/rabbitmq/index.mjs +29 -12
- package/dist/rabbitmq/index.mjs.map +1 -1
- package/dist/{types-gGaoT8qc.d.cts → registry-DIx25Q5s.d.cts} +108 -2
- package/dist/registry-DIx25Q5s.d.cts.map +1 -0
- package/dist/{types-gGaoT8qc.d.mts → registry-DIx25Q5s.d.mts} +108 -2
- package/dist/registry-DIx25Q5s.d.mts.map +1 -0
- package/dist/registry-DLnflkMm.mjs +99 -0
- package/dist/registry-DLnflkMm.mjs.map +1 -0
- package/dist/registry-DNk5GnGq.cjs +122 -0
- package/dist/registry-DNk5GnGq.cjs.map +1 -0
- package/dist/sns/index.cjs +261 -244
- package/dist/sns/index.cjs.map +1 -1
- package/dist/sns/index.d.cts +9 -1
- package/dist/sns/index.d.cts.map +1 -1
- package/dist/sns/index.d.mts +9 -1
- package/dist/sns/index.d.mts.map +1 -1
- package/dist/sns/index.mjs +261 -244
- package/dist/sns/index.mjs.map +1 -1
- package/dist/sqs/index.cjs +21 -0
- package/dist/sqs/index.cjs.map +1 -1
- package/dist/sqs/index.d.cts +9 -1
- package/dist/sqs/index.d.cts.map +1 -1
- package/dist/sqs/index.d.mts +9 -1
- package/dist/sqs/index.d.mts.map +1 -1
- package/dist/sqs/index.mjs +21 -1
- package/dist/sqs/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/PgBossConnection-CywKoAZU.cjs +0 -2
- package/dist/PgBossConnection-DjoqT84r.mjs +0 -2
- package/dist/RabbitMQConnection-C9eccBL8.cjs +0 -2
- package/dist/RabbitMQConnection-CAp7VqyT.mjs +0 -2
- package/dist/SNSConnection-BWDC1wAF.cjs +0 -2
- package/dist/SNSConnection-ezQvVrDv.mjs +0 -2
- package/dist/types-gGaoT8qc.d.cts.map +0 -1
- package/dist/types-gGaoT8qc.d.mts.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,43 +1,28 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { _ as UnsupportedEventTransport, a as registerEventsDriver, c as Publisher, d as EventPublisher, f as EventPublisherType, g as PublishableMessage, h as MappedEvent, i as eventsDriverFor, l as PublisherOptions, m as ExtractPublisherMessage, n as SubscriberOptions, o as registeredEventsSchemes, p as EventSubscriber, r as UnregisteredEventsScheme, s as EventPublisherConnectionString, t as EventsDriver, u as EventConnection } from "./registry-DIx25Q5s.mjs";
|
|
2
2
|
//#region src/EventConnection.d.ts
|
|
3
3
|
export declare class EventConnectionFactory {
|
|
4
4
|
/**
|
|
5
|
-
* Create an EventConnection from a connection string
|
|
6
|
-
*
|
|
5
|
+
* Create an EventConnection from a connection string, through whichever
|
|
6
|
+
* driver is registered for its scheme — see `registerEventsDriver`.
|
|
7
|
+
*
|
|
8
|
+
* @throws {UnregisteredEventsScheme} when the broker's driver is not
|
|
9
|
+
* registered.
|
|
7
10
|
*/
|
|
8
11
|
static fromConnectionString(connectionStr: string): Promise<EventConnection>;
|
|
9
12
|
}
|
|
10
13
|
//#endregion
|
|
11
|
-
//#region src/Publisher.d.ts
|
|
12
|
-
/** How a publisher is used, beyond the address it reaches. */
|
|
13
|
-
interface PublisherOptions {
|
|
14
|
-
/**
|
|
15
|
-
* The topic this publisher fans out to. SNS and RabbitMQ name the topic in
|
|
16
|
-
* their address already; pg-boss has one address for every topic and queue,
|
|
17
|
-
* so it is told here that a message goes to every subscriber rather than to
|
|
18
|
-
* one queue.
|
|
19
|
-
*/
|
|
20
|
-
topic?: string;
|
|
21
|
-
}
|
|
22
|
-
export declare class Publisher {
|
|
23
|
-
/**
|
|
24
|
-
* Create a publisher from a connection string
|
|
25
|
-
* This creates both a connection and a publisher
|
|
26
|
-
*/
|
|
27
|
-
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionStr: EventPublisherConnectionString, options?: PublisherOptions): Promise<EventPublisher<TMessage>>;
|
|
28
|
-
/**
|
|
29
|
-
* Create a publisher from an existing connection
|
|
30
|
-
* This allows sharing connections between publishers and subscribers
|
|
31
|
-
*/
|
|
32
|
-
static fromConnection<TMessage extends PublishableMessage<string, any>>(connection: EventConnection): Promise<EventPublisher<TMessage>>;
|
|
33
|
-
}
|
|
34
|
-
type EventPublisherConnectionString = `${EventPublisherType}://${string}`;
|
|
35
|
-
//#endregion
|
|
36
14
|
//#region src/Subscriber.d.ts
|
|
15
|
+
/**
|
|
16
|
+
* Subscribers for a connection string or a connection, through whichever
|
|
17
|
+
* driver is registered for its scheme — see `registerEventsDriver`.
|
|
18
|
+
*/
|
|
37
19
|
export declare class Subscriber {
|
|
38
20
|
/**
|
|
39
21
|
* Create a subscriber from a connection string
|
|
40
22
|
* This creates both a connection and a subscriber
|
|
23
|
+
*
|
|
24
|
+
* @throws {UnregisteredEventsScheme} when the broker's driver is not
|
|
25
|
+
* registered.
|
|
41
26
|
*/
|
|
42
27
|
static fromConnectionString<TMessage extends PublishableMessage<string, any>>(connectionStr: EventSubscriberConnectionString): Promise<EventSubscriber<TMessage>>;
|
|
43
28
|
/**
|
|
@@ -50,12 +35,9 @@ export declare class Subscriber {
|
|
|
50
35
|
* give each subscriber its own queue; the other transports carry the
|
|
51
36
|
* topic in their address and ignore it.
|
|
52
37
|
*/
|
|
53
|
-
options?:
|
|
54
|
-
topic?: string;
|
|
55
|
-
subscription?: string;
|
|
56
|
-
}): Promise<EventSubscriber<TMessage>>;
|
|
38
|
+
options?: SubscriberOptions): Promise<EventSubscriber<TMessage>>;
|
|
57
39
|
}
|
|
58
40
|
type EventSubscriberConnectionString = `${EventPublisherType}://${string}`;
|
|
59
41
|
//#endregion
|
|
60
|
-
export { type EventConnection, type EventPublisher, type EventPublisherConnectionString, EventPublisherType, type EventSubscriber, type EventSubscriberConnectionString, type ExtractPublisherMessage, type MappedEvent, type PublishableMessage, type PublisherOptions, UnsupportedEventTransport };
|
|
42
|
+
export { type EventConnection, type EventPublisher, type EventPublisherConnectionString, EventPublisherType, type EventSubscriber, type EventSubscriberConnectionString, type EventsDriver, type ExtractPublisherMessage, type MappedEvent, type PublishableMessage, Publisher, type PublisherOptions, type SubscriberOptions, UnregisteredEventsScheme, UnsupportedEventTransport, eventsDriverFor, registerEventsDriver, registeredEventsSchemes };
|
|
61
43
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/EventConnection.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/EventConnection.ts","../src/Subscriber.ts"],"mappings":";;qBAGa;;;;;;;;SAQC,qBACZ,wBACE,QAAQ;;;;;;;;qBCDC;;;;;;;;SAQC,qBACZ,iBAAiB,iCAEjB,eAAe,kCACb,QAAQ,gBAAgB;;;;;SAWd,eAAe,iBAAiB,iCAC5C,YAAY,iBAMZ;;;;;;EAAA,UAAS,oBACP,QAAQ,gBAAgB;;KAQhB,qCACR"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,180 +1,72 @@
|
|
|
1
1
|
import { n as UnsupportedEventTransport, t as EventPublisherType } from "./types-Bk5JM6MP.mjs";
|
|
2
|
+
import { i as registeredEventsSchemes, n as eventsDriverFor, r as registerEventsDriver, t as UnregisteredEventsScheme } from "./registry-DLnflkMm.mjs";
|
|
2
3
|
//#region src/EventConnection.ts
|
|
3
4
|
var EventConnectionFactory = class {
|
|
4
5
|
/**
|
|
5
|
-
* Create an EventConnection from a connection string
|
|
6
|
-
*
|
|
6
|
+
* Create an EventConnection from a connection string, through whichever
|
|
7
|
+
* driver is registered for its scheme — see `registerEventsDriver`.
|
|
8
|
+
*
|
|
9
|
+
* @throws {UnregisteredEventsScheme} when the broker's driver is not
|
|
10
|
+
* registered.
|
|
7
11
|
*/
|
|
8
12
|
static async fromConnectionString(connectionStr) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
case "basic": {
|
|
12
|
-
const { BasicConnection } = await import("./basic/index.mjs");
|
|
13
|
-
return BasicConnection.fromConnectionString(connectionStr);
|
|
14
|
-
}
|
|
15
|
-
case "rabbitmq": {
|
|
16
|
-
const { RabbitMQConnection } = await import("./rabbitmq/index.mjs");
|
|
17
|
-
return RabbitMQConnection.fromConnectionString(connectionStr);
|
|
18
|
-
}
|
|
19
|
-
case "sqs": {
|
|
20
|
-
const { SQSConnection } = await import("./sqs/index.mjs");
|
|
21
|
-
return SQSConnection.fromConnectionString(connectionStr);
|
|
22
|
-
}
|
|
23
|
-
case "sns": {
|
|
24
|
-
const { SNSConnection } = await import("./sns/index.mjs");
|
|
25
|
-
return SNSConnection.fromConnectionString(connectionStr);
|
|
26
|
-
}
|
|
27
|
-
case "pgboss": {
|
|
28
|
-
const { PgBossConnection } = await import("./pgboss/index.mjs");
|
|
29
|
-
return PgBossConnection.fromConnectionString(connectionStr);
|
|
30
|
-
}
|
|
31
|
-
default: throw new UnsupportedEventTransport(protocol, "connection");
|
|
32
|
-
}
|
|
13
|
+
const scheme = new URL(connectionStr).protocol;
|
|
14
|
+
return eventsDriverFor(scheme, "connection").connect(connectionStr);
|
|
33
15
|
}
|
|
34
16
|
};
|
|
35
17
|
//#endregion
|
|
36
18
|
//#region src/Publisher.ts
|
|
19
|
+
/**
|
|
20
|
+
* Publishers for a connection string or a connection, through whichever
|
|
21
|
+
* driver is registered for its scheme — see `registerEventsDriver`.
|
|
22
|
+
*/
|
|
37
23
|
var Publisher = class {
|
|
38
24
|
/**
|
|
39
25
|
* Create a publisher from a connection string
|
|
40
26
|
* This creates both a connection and a publisher
|
|
27
|
+
*
|
|
28
|
+
* @throws {UnregisteredEventsScheme} when the broker's driver is not
|
|
29
|
+
* registered.
|
|
41
30
|
*/
|
|
42
31
|
static async fromConnectionString(connectionStr, options = {}) {
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
case "basic": {
|
|
46
|
-
const { BasicConnection, BasicPublisher } = await import("./basic/index.mjs");
|
|
47
|
-
return new BasicPublisher(await BasicConnection.fromConnectionString(connectionStr));
|
|
48
|
-
}
|
|
49
|
-
case "rabbitmq": {
|
|
50
|
-
const { RabbitMQPublisher } = await import("./rabbitmq/index.mjs");
|
|
51
|
-
return RabbitMQPublisher.fromConnectionString(connectionStr);
|
|
52
|
-
}
|
|
53
|
-
case "sqs": {
|
|
54
|
-
const { SQSPublisher } = await import("./sqs/index.mjs");
|
|
55
|
-
return SQSPublisher.fromConnectionString(connectionStr);
|
|
56
|
-
}
|
|
57
|
-
case "sns": {
|
|
58
|
-
const { SNSPublisher } = await import("./sns/index.mjs");
|
|
59
|
-
return SNSPublisher.fromConnectionString(connectionStr);
|
|
60
|
-
}
|
|
61
|
-
case "pgboss": {
|
|
62
|
-
const { PgBossPublisher } = await import("./pgboss/index.mjs");
|
|
63
|
-
return PgBossPublisher.fromConnectionString(connectionStr, options);
|
|
64
|
-
}
|
|
65
|
-
default: throw new UnsupportedEventTransport(url.protocol.replace(":", ""), "publisher");
|
|
66
|
-
}
|
|
32
|
+
const scheme = new URL(connectionStr).protocol;
|
|
33
|
+
return eventsDriverFor(scheme, "publisher").publisher(connectionStr, options);
|
|
67
34
|
}
|
|
68
35
|
/**
|
|
69
36
|
* Create a publisher from an existing connection
|
|
70
37
|
* This allows sharing connections between publishers and subscribers
|
|
71
38
|
*/
|
|
72
|
-
static async fromConnection(connection) {
|
|
73
|
-
|
|
74
|
-
case "basic": {
|
|
75
|
-
const { BasicPublisher } = await import("./basic/index.mjs");
|
|
76
|
-
const { BasicConnection } = await import("./basic/index.mjs");
|
|
77
|
-
return new BasicPublisher(connection);
|
|
78
|
-
}
|
|
79
|
-
case "rabbitmq": {
|
|
80
|
-
const { RabbitMQPublisher } = await import("./rabbitmq/index.mjs");
|
|
81
|
-
const { RabbitMQConnection } = await import("./rabbitmq/index.mjs");
|
|
82
|
-
return new RabbitMQPublisher(connection);
|
|
83
|
-
}
|
|
84
|
-
case "sqs": {
|
|
85
|
-
const { SQSPublisher } = await import("./sqs/index.mjs");
|
|
86
|
-
const { SQSConnection } = await import("./sqs/index.mjs");
|
|
87
|
-
return new SQSPublisher(connection);
|
|
88
|
-
}
|
|
89
|
-
case "sns": {
|
|
90
|
-
const { SNSPublisher } = await import("./sns/index.mjs");
|
|
91
|
-
const { SNSConnection } = await import("./sns/index.mjs");
|
|
92
|
-
return new SNSPublisher(connection);
|
|
93
|
-
}
|
|
94
|
-
case "pgboss": {
|
|
95
|
-
const { PgBossPublisher } = await import("./pgboss/index.mjs");
|
|
96
|
-
const { PgBossConnection } = await import("./pgboss/index.mjs");
|
|
97
|
-
return new PgBossPublisher(connection);
|
|
98
|
-
}
|
|
99
|
-
default: throw new UnsupportedEventTransport(connection.type, "publisher");
|
|
100
|
-
}
|
|
39
|
+
static async fromConnection(connection, options = {}) {
|
|
40
|
+
return eventsDriverFor(connection.type, "publisher").publisherFor(connection, options);
|
|
101
41
|
}
|
|
102
42
|
};
|
|
103
43
|
//#endregion
|
|
104
44
|
//#region src/Subscriber.ts
|
|
45
|
+
/**
|
|
46
|
+
* Subscribers for a connection string or a connection, through whichever
|
|
47
|
+
* driver is registered for its scheme — see `registerEventsDriver`.
|
|
48
|
+
*/
|
|
105
49
|
var Subscriber = class {
|
|
106
50
|
/**
|
|
107
51
|
* Create a subscriber from a connection string
|
|
108
52
|
* This creates both a connection and a subscriber
|
|
53
|
+
*
|
|
54
|
+
* @throws {UnregisteredEventsScheme} when the broker's driver is not
|
|
55
|
+
* registered.
|
|
109
56
|
*/
|
|
110
57
|
static async fromConnectionString(connectionStr) {
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
case "basic": {
|
|
114
|
-
const { BasicConnection, BasicSubscriber } = await import("./basic/index.mjs");
|
|
115
|
-
return new BasicSubscriber(await BasicConnection.fromConnectionString(connectionStr));
|
|
116
|
-
}
|
|
117
|
-
case "rabbitmq": {
|
|
118
|
-
const { RabbitMQSubscriber } = await import("./rabbitmq/index.mjs");
|
|
119
|
-
return RabbitMQSubscriber.fromConnectionString(connectionStr);
|
|
120
|
-
}
|
|
121
|
-
case "sns": {
|
|
122
|
-
const { SNSSubscriber } = await import("./sns/index.mjs");
|
|
123
|
-
return SNSSubscriber.fromConnectionString(connectionStr);
|
|
124
|
-
}
|
|
125
|
-
case "sqs": {
|
|
126
|
-
if (new URL(connectionStr).searchParams.get("topicArn")) {
|
|
127
|
-
const { SNSSubscriber } = await import("./sns/index.mjs");
|
|
128
|
-
const snsConnectionStr = connectionStr.replace("sqs://", "sns://");
|
|
129
|
-
return SNSSubscriber.fromConnectionString(snsConnectionStr);
|
|
130
|
-
}
|
|
131
|
-
const { SQSSubscriber } = await import("./sqs/index.mjs");
|
|
132
|
-
const { SQSConnection } = await import("./sqs/index.mjs");
|
|
133
|
-
return new SQSSubscriber(await SQSConnection.fromConnectionString(connectionStr));
|
|
134
|
-
}
|
|
135
|
-
case "pgboss": {
|
|
136
|
-
const { PgBossSubscriber } = await import("./pgboss/index.mjs");
|
|
137
|
-
return PgBossSubscriber.fromConnectionString(connectionStr);
|
|
138
|
-
}
|
|
139
|
-
default: throw new UnsupportedEventTransport(url.protocol.replace(":", ""), "subscriber");
|
|
140
|
-
}
|
|
58
|
+
const scheme = new URL(connectionStr).protocol;
|
|
59
|
+
return eventsDriverFor(scheme, "subscriber").subscriber(connectionStr);
|
|
141
60
|
}
|
|
142
61
|
/**
|
|
143
62
|
* Create a subscriber from an existing connection
|
|
144
63
|
* This allows sharing connections between publishers and subscribers
|
|
145
64
|
*/
|
|
146
65
|
static async fromConnection(connection, options = {}) {
|
|
147
|
-
|
|
148
|
-
case "basic": {
|
|
149
|
-
const { BasicSubscriber } = await import("./basic/index.mjs");
|
|
150
|
-
const { BasicConnection } = await import("./basic/index.mjs");
|
|
151
|
-
return new BasicSubscriber(connection);
|
|
152
|
-
}
|
|
153
|
-
case "rabbitmq": {
|
|
154
|
-
const { RabbitMQSubscriber } = await import("./rabbitmq/index.mjs");
|
|
155
|
-
const { RabbitMQConnection } = await import("./rabbitmq/index.mjs");
|
|
156
|
-
return new RabbitMQSubscriber(connection);
|
|
157
|
-
}
|
|
158
|
-
case "sns": {
|
|
159
|
-
const { SNSSubscriber } = await import("./sns/index.mjs");
|
|
160
|
-
const { SNSConnection } = await import("./sns/index.mjs");
|
|
161
|
-
return new SNSSubscriber(connection);
|
|
162
|
-
}
|
|
163
|
-
case "sqs": {
|
|
164
|
-
const { SQSSubscriber } = await import("./sqs/index.mjs");
|
|
165
|
-
const { SQSConnection } = await import("./sqs/index.mjs");
|
|
166
|
-
return new SQSSubscriber(connection);
|
|
167
|
-
}
|
|
168
|
-
case "pgboss": {
|
|
169
|
-
const { PgBossSubscriber } = await import("./pgboss/index.mjs");
|
|
170
|
-
const { PgBossConnection } = await import("./pgboss/index.mjs");
|
|
171
|
-
return new PgBossSubscriber(connection, options);
|
|
172
|
-
}
|
|
173
|
-
default: throw new UnsupportedEventTransport(connection.type, "subscriber");
|
|
174
|
-
}
|
|
66
|
+
return eventsDriverFor(connection.type, "subscriber").subscriberFor(connection, options);
|
|
175
67
|
}
|
|
176
68
|
};
|
|
177
69
|
//#endregion
|
|
178
|
-
export { EventConnectionFactory, EventPublisherType, Publisher, Subscriber, UnsupportedEventTransport };
|
|
70
|
+
export { EventConnectionFactory, EventPublisherType, Publisher, Subscriber, UnregisteredEventsScheme, UnsupportedEventTransport, eventsDriverFor, registerEventsDriver, registeredEventsSchemes };
|
|
179
71
|
|
|
180
72
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/EventConnection.ts","../src/Publisher.ts","../src/Subscriber.ts"],"sourcesContent":["import type { EventConnection } from './types';\nimport { EventPublisherType, UnsupportedEventTransport } from './types';\n\nexport class EventConnectionFactory {\n\t/**\n\t * Create an EventConnection from a connection string\n\t * Dynamically imports the appropriate connection implementation\n\t */\n\tstatic async fromConnectionString(\n\t\tconnectionStr: string,\n\t): Promise<EventConnection> {\n\t\tconst url = new URL(connectionStr);\n\t\tconst protocol = url.protocol.replace(':', '') as EventPublisherType;\n\n\t\tswitch (protocol) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicConnection } = await import('./basic');\n\t\t\t\treturn BasicConnection.fromConnectionString(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQConnection } = await import('./rabbitmq');\n\t\t\t\treturn RabbitMQConnection.fromConnectionString(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst { SQSConnection } = await import('./sqs');\n\t\t\t\treturn SQSConnection.fromConnectionString(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSConnection } = await import('./sns');\n\t\t\t\treturn SNSConnection.fromConnectionString(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.PgBoss: {\n\t\t\t\tconst { PgBossConnection } = await import('./pgboss');\n\t\t\t\treturn PgBossConnection.fromConnectionString(connectionStr);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new UnsupportedEventTransport(protocol, 'connection');\n\t\t}\n\t}\n}\n\nexport type { EventConnection } from './types';\nexport { EventPublisherType } from './types';\n","import type {\n\tEventConnection,\n\tEventPublisher,\n\tPublishableMessage,\n} from './types';\nimport { EventPublisherType, UnsupportedEventTransport } from './types';\n\n/** How a publisher is used, beyond the address it reaches. */\nexport interface PublisherOptions {\n\t/**\n\t * The topic this publisher fans out to. SNS and RabbitMQ name the topic in\n\t * their address already; pg-boss has one address for every topic and queue,\n\t * so it is told here that a message goes to every subscriber rather than to\n\t * one queue.\n\t */\n\ttopic?: string;\n}\n\nexport class Publisher {\n\t/**\n\t * Create a publisher from a connection string\n\t * This creates both a connection and a publisher\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(\n\t\tconnectionStr: EventPublisherConnectionString,\n\t\toptions: PublisherOptions = {},\n\t): Promise<EventPublisher<TMessage>> {\n\t\tconst url = new URL(connectionStr);\n\t\tswitch (url.protocol.replace(':', '')) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicConnection, BasicPublisher } = await import('./basic');\n\t\t\t\tconst connection =\n\t\t\t\t\tawait BasicConnection.fromConnectionString(connectionStr);\n\t\t\t\treturn new BasicPublisher<TMessage>(connection);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQPublisher } = await import('./rabbitmq');\n\t\t\t\treturn RabbitMQPublisher.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst { SQSPublisher } = await import('./sqs');\n\t\t\t\treturn SQSPublisher.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSPublisher } = await import('./sns');\n\t\t\t\treturn SNSPublisher.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.PgBoss: {\n\t\t\t\tconst { PgBossPublisher } = await import('./pgboss');\n\t\t\t\treturn PgBossPublisher.fromConnectionString<TMessage>(\n\t\t\t\t\tconnectionStr,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Future implementations for EventBridge, Kafka, etc.\n\t\t\tdefault:\n\t\t\t\tthrow new UnsupportedEventTransport(\n\t\t\t\t\turl.protocol.replace(':', ''),\n\t\t\t\t\t'publisher',\n\t\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create a publisher from an existing connection\n\t * This allows sharing connections between publishers and subscribers\n\t */\n\tstatic async fromConnection<TMessage extends PublishableMessage<string, any>>(\n\t\tconnection: EventConnection,\n\t): Promise<EventPublisher<TMessage>> {\n\t\tswitch (connection.type) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicPublisher } = await import('./basic');\n\t\t\t\tconst { BasicConnection } = await import('./basic');\n\t\t\t\treturn new BasicPublisher<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof BasicConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQPublisher } = await import('./rabbitmq');\n\t\t\t\tconst { RabbitMQConnection } = await import('./rabbitmq');\n\t\t\t\treturn new RabbitMQPublisher<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof RabbitMQConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst { SQSPublisher } = await import('./sqs');\n\t\t\t\tconst { SQSConnection } = await import('./sqs');\n\t\t\t\treturn new SQSPublisher<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof SQSConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSPublisher } = await import('./sns');\n\t\t\t\tconst { SNSConnection } = await import('./sns');\n\t\t\t\treturn new SNSPublisher<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof SNSConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.PgBoss: {\n\t\t\t\tconst { PgBossPublisher } = await import('./pgboss');\n\t\t\t\tconst { PgBossConnection } = await import('./pgboss');\n\t\t\t\treturn new PgBossPublisher<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof PgBossConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new UnsupportedEventTransport(connection.type, 'publisher');\n\t\t}\n\t}\n}\n\nexport type EventPublisherConnectionString =\n\t`${EventPublisherType}://${string}`;\n","import type {\n\tEventConnection,\n\tEventSubscriber,\n\tPublishableMessage,\n} from './types';\nimport { EventPublisherType, UnsupportedEventTransport } from './types';\n\nexport class Subscriber {\n\t/**\n\t * Create a subscriber from a connection string\n\t * This creates both a connection and a subscriber\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(\n\t\tconnectionStr: EventSubscriberConnectionString,\n\t): Promise<EventSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionStr);\n\t\tswitch (url.protocol.replace(':', '')) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicConnection, BasicSubscriber } = await import('./basic');\n\t\t\t\tconst connection =\n\t\t\t\t\tawait BasicConnection.fromConnectionString(connectionStr);\n\t\t\t\treturn new BasicSubscriber<TMessage>(connection);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQSubscriber } = await import('./rabbitmq');\n\t\t\t\treturn RabbitMQSubscriber.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\treturn SNSSubscriber.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst url = new URL(connectionStr);\n\t\t\t\tconst topicArn = url.searchParams.get('topicArn');\n\n\t\t\t\t// If topicArn is present, use managed SNS→SQS subscription\n\t\t\t\tif (topicArn) {\n\t\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\t\t// Convert SQS connection string to SNS connection string\n\t\t\t\t\tconst snsConnectionStr = connectionStr.replace('sqs://', 'sns://');\n\t\t\t\t\treturn SNSSubscriber.fromConnectionString<TMessage>(snsConnectionStr);\n\t\t\t\t}\n\n\t\t\t\t// Direct SQS subscriber\n\t\t\t\tconst { SQSSubscriber } = await import('./sqs');\n\t\t\t\tconst { SQSConnection } = await import('./sqs');\n\t\t\t\tconst connection =\n\t\t\t\t\tawait SQSConnection.fromConnectionString(connectionStr);\n\t\t\t\treturn new SQSSubscriber<TMessage>(connection);\n\t\t\t}\n\t\t\tcase EventPublisherType.PgBoss: {\n\t\t\t\tconst { PgBossSubscriber } = await import('./pgboss');\n\t\t\t\treturn PgBossSubscriber.fromConnectionString<TMessage>(connectionStr);\n\t\t\t}\n\t\t\t// Future implementations for EventBridge, Kafka, etc.\n\t\t\tdefault:\n\t\t\t\tthrow new UnsupportedEventTransport(\n\t\t\t\t\turl.protocol.replace(':', ''),\n\t\t\t\t\t'subscriber',\n\t\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create a subscriber from an existing connection\n\t * This allows sharing connections between publishers and subscribers\n\t */\n\tstatic async fromConnection<TMessage extends PublishableMessage<string, any>>(\n\t\tconnection: EventConnection,\n\t\t/**\n\t\t * Subscribing to a topic as a named subscriber. pg-boss needs both to\n\t\t * give each subscriber its own queue; the other transports carry the\n\t\t * topic in their address and ignore it.\n\t\t */\n\t\toptions: { topic?: string; subscription?: string } = {},\n\t): Promise<EventSubscriber<TMessage>> {\n\t\tswitch (connection.type) {\n\t\t\tcase EventPublisherType.Basic: {\n\t\t\t\tconst { BasicSubscriber } = await import('./basic');\n\t\t\t\tconst { BasicConnection } = await import('./basic');\n\t\t\t\treturn new BasicSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof BasicConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.RabbitMQ: {\n\t\t\t\tconst { RabbitMQSubscriber } = await import('./rabbitmq');\n\t\t\t\tconst { RabbitMQConnection } = await import('./rabbitmq');\n\t\t\t\treturn new RabbitMQSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof RabbitMQConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.SNS: {\n\t\t\t\tconst { SNSSubscriber } = await import('./sns');\n\t\t\t\tconst { SNSConnection } = await import('./sns');\n\t\t\t\treturn new SNSSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof SNSConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.SQS: {\n\t\t\t\tconst { SQSSubscriber } = await import('./sqs');\n\t\t\t\tconst { SQSConnection } = await import('./sqs');\n\t\t\t\treturn new SQSSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof SQSConnection>,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase EventPublisherType.PgBoss: {\n\t\t\t\tconst { PgBossSubscriber } = await import('./pgboss');\n\t\t\t\tconst { PgBossConnection } = await import('./pgboss');\n\t\t\t\treturn new PgBossSubscriber<TMessage>(\n\t\t\t\t\tconnection as InstanceType<typeof PgBossConnection>,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new UnsupportedEventTransport(connection.type, 'subscriber');\n\t\t}\n\t}\n}\n\nexport type EventSubscriberConnectionString =\n\t`${EventPublisherType}://${string}`;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/EventConnection.ts","../src/Publisher.ts","../src/Subscriber.ts"],"sourcesContent":["import { eventsDriverFor } from './registry';\nimport type { EventConnection } from './types';\n\nexport class EventConnectionFactory {\n\t/**\n\t * Create an EventConnection from a connection string, through whichever\n\t * driver is registered for its scheme — see `registerEventsDriver`.\n\t *\n\t * @throws {UnregisteredEventsScheme} when the broker's driver is not\n\t * registered.\n\t */\n\tstatic async fromConnectionString(\n\t\tconnectionStr: string,\n\t): Promise<EventConnection> {\n\t\tconst scheme = new URL(connectionStr).protocol;\n\t\treturn eventsDriverFor(scheme, 'connection').connect(connectionStr);\n\t}\n}\n\nexport type { EventConnection } from './types';\nexport { EventPublisherType } from './types';\n","import { eventsDriverFor } from './registry';\nimport type {\n\tEventConnection,\n\tEventPublisher,\n\tEventPublisherType,\n\tPublishableMessage,\n} from './types';\n\n/** How a publisher is used, beyond the address it reaches. */\nexport interface PublisherOptions {\n\t/**\n\t * The topic this publisher fans out to. SNS and RabbitMQ name the topic in\n\t * their address already; pg-boss has one address for every topic and queue,\n\t * so it is told here that a message goes to every subscriber rather than to\n\t * one queue.\n\t */\n\ttopic?: string;\n}\n\n/**\n * Publishers for a connection string or a connection, through whichever\n * driver is registered for its scheme — see `registerEventsDriver`.\n */\nexport class Publisher {\n\t/**\n\t * Create a publisher from a connection string\n\t * This creates both a connection and a publisher\n\t *\n\t * @throws {UnregisteredEventsScheme} when the broker's driver is not\n\t * registered.\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(\n\t\tconnectionStr: EventPublisherConnectionString,\n\t\toptions: PublisherOptions = {},\n\t): Promise<EventPublisher<TMessage>> {\n\t\tconst scheme = new URL(connectionStr).protocol;\n\t\treturn eventsDriverFor(scheme, 'publisher').publisher<TMessage>(\n\t\t\tconnectionStr,\n\t\t\toptions,\n\t\t);\n\t}\n\n\t/**\n\t * Create a publisher from an existing connection\n\t * This allows sharing connections between publishers and subscribers\n\t */\n\tstatic async fromConnection<TMessage extends PublishableMessage<string, any>>(\n\t\tconnection: EventConnection,\n\t\toptions: PublisherOptions = {},\n\t): Promise<EventPublisher<TMessage>> {\n\t\treturn eventsDriverFor(connection.type, 'publisher').publisherFor<TMessage>(\n\t\t\tconnection,\n\t\t\toptions,\n\t\t);\n\t}\n}\n\nexport type EventPublisherConnectionString =\n\t`${EventPublisherType}://${string}`;\n","import { eventsDriverFor, type SubscriberOptions } from './registry';\nimport type {\n\tEventConnection,\n\tEventPublisherType,\n\tEventSubscriber,\n\tPublishableMessage,\n} from './types';\n\n/**\n * Subscribers for a connection string or a connection, through whichever\n * driver is registered for its scheme — see `registerEventsDriver`.\n */\nexport class Subscriber {\n\t/**\n\t * Create a subscriber from a connection string\n\t * This creates both a connection and a subscriber\n\t *\n\t * @throws {UnregisteredEventsScheme} when the broker's driver is not\n\t * registered.\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(\n\t\tconnectionStr: EventSubscriberConnectionString,\n\t): Promise<EventSubscriber<TMessage>> {\n\t\tconst scheme = new URL(connectionStr).protocol;\n\t\treturn eventsDriverFor(scheme, 'subscriber').subscriber<TMessage>(\n\t\t\tconnectionStr,\n\t\t);\n\t}\n\n\t/**\n\t * Create a subscriber from an existing connection\n\t * This allows sharing connections between publishers and subscribers\n\t */\n\tstatic async fromConnection<TMessage extends PublishableMessage<string, any>>(\n\t\tconnection: EventConnection,\n\t\t/**\n\t\t * Subscribing to a topic as a named subscriber. pg-boss needs both to\n\t\t * give each subscriber its own queue; the other transports carry the\n\t\t * topic in their address and ignore it.\n\t\t */\n\t\toptions: SubscriberOptions = {},\n\t): Promise<EventSubscriber<TMessage>> {\n\t\treturn eventsDriverFor(\n\t\t\tconnection.type,\n\t\t\t'subscriber',\n\t\t).subscriberFor<TMessage>(connection, options);\n\t}\n}\n\nexport type EventSubscriberConnectionString =\n\t`${EventPublisherType}://${string}`;\n"],"mappings":";;;AAGA,IAAa,yBAAb,MAAoC;;;;;;;;CAQnC,aAAa,qBACZ,eAC2B;EAC3B,MAAM,SAAS,IAAI,IAAI,aAAa,CAAC,CAAC;EACtC,OAAO,gBAAgB,QAAQ,YAAY,CAAC,CAAC,QAAQ,aAAa;CACnE;AACD;;;;;;;ACMA,IAAa,YAAb,MAAuB;;;;;;;;CAQtB,aAAa,qBAGZ,eACA,UAA4B,CAAC,GACO;EACpC,MAAM,SAAS,IAAI,IAAI,aAAa,CAAC,CAAC;EACtC,OAAO,gBAAgB,QAAQ,WAAW,CAAC,CAAC,UAC3C,eACA,OACD;CACD;;;;;CAMA,aAAa,eACZ,YACA,UAA4B,CAAC,GACO;EACpC,OAAO,gBAAgB,WAAW,MAAM,WAAW,CAAC,CAAC,aACpD,YACA,OACD;CACD;AACD;;;;;;;AC7CA,IAAa,aAAb,MAAwB;;;;;;;;CAQvB,aAAa,qBAGZ,eACqC;EACrC,MAAM,SAAS,IAAI,IAAI,aAAa,CAAC,CAAC;EACtC,OAAO,gBAAgB,QAAQ,YAAY,CAAC,CAAC,WAC5C,aACD;CACD;;;;;CAMA,aAAa,eACZ,YAMA,UAA6B,CAAC,GACO;EACrC,OAAO,gBACN,WAAW,MACX,YACD,CAAC,CAAC,cAAwB,YAAY,OAAO;CAC9C;AACD"}
|
package/dist/pgboss/index.cjs
CHANGED
|
@@ -1,25 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_rolldown_runtime = require("../rolldown-runtime-C0BPl7ul.cjs");
|
|
2
3
|
require("../types-BcZjLxVV.cjs");
|
|
3
4
|
let pg_boss = require("pg-boss");
|
|
4
|
-
//#region src/pgboss/errors.ts
|
|
5
|
-
/** pg-boss connected but its instance never started. */
|
|
6
|
-
var PgBossNotStarted = class extends Error {
|
|
7
|
-
constructor() {
|
|
8
|
-
super("pg-boss did not start. Check the database in the connection string is reachable and the role may create the pg-boss schema.");
|
|
9
|
-
this.name = "PgBossNotStarted";
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
/** A topic subscription with no name to give the subscriber's own queue. */
|
|
13
|
-
var PgBossSubscriptionNeedsName = class extends Error {
|
|
14
|
-
topic;
|
|
15
|
-
constructor(topic) {
|
|
16
|
-
super(`Subscribing to topic '${topic}' on pg-boss needs a subscription name: each subscriber drains a queue of its own, and that queue is named for it. Pass \`subscription\`.`);
|
|
17
|
-
this.topic = topic;
|
|
18
|
-
this.name = "PgBossSubscriptionNeedsName";
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
//#endregion
|
|
22
5
|
//#region src/pgboss/PgBossConnection.ts
|
|
6
|
+
var PgBossConnection_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({ PgBossConnection: () => PgBossConnection });
|
|
23
7
|
var PgBossConnection = class PgBossConnection {
|
|
24
8
|
config;
|
|
25
9
|
type = "pgboss";
|
|
@@ -51,9 +35,11 @@ var PgBossConnection = class PgBossConnection {
|
|
|
51
35
|
}
|
|
52
36
|
this.connecting = (async () => {
|
|
53
37
|
try {
|
|
38
|
+
const applicationName = this.config.applicationName ?? process.env.GKM_APP_NAME;
|
|
54
39
|
const boss = new pg_boss.PgBoss({
|
|
55
40
|
connectionString: this.config.connectionString,
|
|
56
|
-
...this.config.schema && { schema: this.config.schema }
|
|
41
|
+
...this.config.schema && { schema: this.config.schema },
|
|
42
|
+
...applicationName && { application_name: applicationName }
|
|
57
43
|
});
|
|
58
44
|
await boss.start();
|
|
59
45
|
this.boss = boss;
|
|
@@ -87,6 +73,24 @@ var PgBossConnection = class PgBossConnection {
|
|
|
87
73
|
}
|
|
88
74
|
};
|
|
89
75
|
//#endregion
|
|
76
|
+
//#region src/pgboss/errors.ts
|
|
77
|
+
/** pg-boss connected but its instance never started. */
|
|
78
|
+
var PgBossNotStarted = class extends Error {
|
|
79
|
+
constructor() {
|
|
80
|
+
super("pg-boss did not start. Check the database in the connection string is reachable and the role may create the pg-boss schema.");
|
|
81
|
+
this.name = "PgBossNotStarted";
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
/** A topic subscription with no name to give the subscriber's own queue. */
|
|
85
|
+
var PgBossSubscriptionNeedsName = class extends Error {
|
|
86
|
+
topic;
|
|
87
|
+
constructor(topic) {
|
|
88
|
+
super(`Subscribing to topic '${topic}' on pg-boss needs a subscription name: each subscriber drains a queue of its own, and that queue is named for it. Pass \`subscription\`.`);
|
|
89
|
+
this.topic = topic;
|
|
90
|
+
this.name = "PgBossSubscriptionNeedsName";
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
//#endregion
|
|
90
94
|
//#region src/pgboss/PgBossPublisher.ts
|
|
91
95
|
/** The pg-boss event a topic's message type is published as. */
|
|
92
96
|
function topicEvent(topic, type) {
|
|
@@ -104,7 +108,7 @@ var PgBossPublisher = class PgBossPublisher {
|
|
|
104
108
|
* Format: pgboss://user:pass@host:5432/database?schema=pgboss
|
|
105
109
|
*/
|
|
106
110
|
static async fromConnectionString(connectionString, options = {}) {
|
|
107
|
-
const { PgBossConnection } = await Promise.resolve().then(() =>
|
|
111
|
+
const { PgBossConnection } = await Promise.resolve().then(() => PgBossConnection_exports);
|
|
108
112
|
const connection = await PgBossConnection.fromConnectionString(connectionString);
|
|
109
113
|
return new PgBossPublisher(connection, options);
|
|
110
114
|
}
|
|
@@ -148,7 +152,7 @@ var PgBossSubscriber = class PgBossSubscriber {
|
|
|
148
152
|
*/
|
|
149
153
|
static async fromConnectionString(connectionString) {
|
|
150
154
|
const params = new URL(connectionString).searchParams;
|
|
151
|
-
const { PgBossConnection } = await Promise.resolve().then(() =>
|
|
155
|
+
const { PgBossConnection } = await Promise.resolve().then(() => PgBossConnection_exports);
|
|
152
156
|
const connection = await PgBossConnection.fromConnectionString(connectionString);
|
|
153
157
|
const options = {
|
|
154
158
|
batchSize: params.get("batchSize") ? Number.parseInt(params.get("batchSize"), 10) : void 0,
|
|
@@ -190,12 +194,27 @@ var PgBossSubscriber = class PgBossSubscriber {
|
|
|
190
194
|
}
|
|
191
195
|
};
|
|
192
196
|
//#endregion
|
|
197
|
+
//#region src/pgboss/driver.ts
|
|
198
|
+
/**
|
|
199
|
+
* `pgboss://` — queues and topics in Postgres. Register it with
|
|
200
|
+
* `registerEventsDriver(pgbossEventsDriver)`; this subpath is the only one
|
|
201
|
+
* that imports `pg-boss`.
|
|
202
|
+
*/
|
|
203
|
+
const pgbossEventsDriver = {
|
|
204
|
+
scheme: "pgboss",
|
|
205
|
+
connect: (url) => PgBossConnection.fromConnectionString(url),
|
|
206
|
+
publisher: (url, options) => PgBossPublisher.fromConnectionString(url, options),
|
|
207
|
+
publisherFor: (connection, options) => new PgBossPublisher(connection, options),
|
|
208
|
+
subscriber: (url) => PgBossSubscriber.fromConnectionString(url),
|
|
209
|
+
subscriberFor: (connection, options) => new PgBossSubscriber(connection, options)
|
|
210
|
+
};
|
|
211
|
+
//#endregion
|
|
193
212
|
exports.PgBossConnection = PgBossConnection;
|
|
194
|
-
exports.PgBossConnection$1 = PgBossConnection;
|
|
195
213
|
exports.PgBossNotStarted = PgBossNotStarted;
|
|
196
214
|
exports.PgBossPublisher = PgBossPublisher;
|
|
197
215
|
exports.PgBossSubscriber = PgBossSubscriber;
|
|
198
216
|
exports.PgBossSubscriptionNeedsName = PgBossSubscriptionNeedsName;
|
|
217
|
+
exports.pgbossEventsDriver = pgbossEventsDriver;
|
|
199
218
|
exports.topicEvent = topicEvent;
|
|
200
219
|
|
|
201
220
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["PgBoss"],"sources":["../../src/pgboss/errors.ts","../../src/pgboss/PgBossConnection.ts","../../src/pgboss/PgBossPublisher.ts","../../src/pgboss/PgBossSubscriber.ts"],"sourcesContent":["// Beside the adapter but apart from its connection module, which imports\n// the broker's client: the publisher and subscriber load that lazily, and\n// importing an error class from it would load it eagerly.\n\n/** pg-boss connected but its instance never started. */\nexport class PgBossNotStarted extends Error {\n\tconstructor() {\n\t\tsuper(\n\t\t\t'pg-boss did not start. Check the database in the connection string is reachable and the role may create the pg-boss schema.',\n\t\t);\n\t\tthis.name = 'PgBossNotStarted';\n\t}\n}\n\n/** A topic subscription with no name to give the subscriber's own queue. */\nexport class PgBossSubscriptionNeedsName extends Error {\n\tconstructor(readonly topic: string) {\n\t\tsuper(\n\t\t\t`Subscribing to topic '${topic}' on pg-boss needs a subscription name: ` +\n\t\t\t\t'each subscriber drains a queue of its own, and that queue is named ' +\n\t\t\t\t'for it. Pass `subscription`.',\n\t\t);\n\t\tthis.name = 'PgBossSubscriptionNeedsName';\n\t}\n}\n","import { PgBoss } from 'pg-boss';\nimport type { EventConnection } from '../types';\nimport { EventPublisherType } from '../types';\n\nexport interface PgBossConnectionConfig {\n\tconnectionString: string;\n\tschema?: string;\n}\n\nexport class PgBossConnection implements EventConnection {\n\treadonly type = EventPublisherType.PgBoss;\n\tprivate boss?: PgBoss;\n\tprivate connecting?: Promise<void>;\n\n\tconstructor(private config: PgBossConnectionConfig) {}\n\n\t/**\n\t * Create a PgBossConnection from a connection string.\n\t * Format: pgboss://user:pass@host:5432/database?schema=pgboss\n\t */\n\tstatic async fromConnectionString(\n\t\tconnectionString: string,\n\t): Promise<PgBossConnection> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst postgresUrl = `postgres://${url.username ? `${url.username}:${url.password}@` : ''}${url.host}${url.pathname}`;\n\n\t\tconst config: PgBossConnectionConfig = {\n\t\t\tconnectionString: postgresUrl,\n\t\t\tschema: params.get('schema') || undefined,\n\t\t};\n\n\t\tconst connection = new PgBossConnection(config);\n\t\tawait connection.connect();\n\t\treturn connection;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tif (this.boss) return;\n\n\t\tif (this.connecting) {\n\t\t\tawait this.connecting;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.connecting = (async () => {\n\t\t\ttry {\n\t\t\t\tconst boss = new PgBoss({\n\t\t\t\t\tconnectionString: this.config.connectionString,\n\t\t\t\t\t...(this.config.schema && { schema: this.config.schema }),\n\t\t\t\t});\n\n\t\t\t\tawait boss.start();\n\t\t\t\tthis.boss = boss;\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanup();\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t})();\n\n\t\tawait this.connecting;\n\t\tthis.connecting = undefined;\n\t}\n\n\tasync close(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.boss?.stop({ graceful: true });\n\t\t} catch {\n\t\t\t// Ignore errors during close\n\t\t} finally {\n\t\t\tthis.cleanup();\n\t\t}\n\t}\n\n\tisConnected(): boolean {\n\t\treturn !!this.boss;\n\t}\n\n\tprivate cleanup(): void {\n\t\tthis.boss = undefined;\n\t\tthis.connecting = undefined;\n\t}\n\n\t/**\n\t * Get the underlying pg-boss instance for publishing/subscribing\n\t */\n\tget instance(): PgBoss | undefined {\n\t\treturn this.boss;\n\t}\n}\n","import type { EventPublisher, PublishableMessage } from '../types';\nimport { PgBossNotStarted } from './errors';\nimport type { PgBossConnection } from './PgBossConnection';\n\nexport interface PgBossPublisherOptions {\n\t/**\n\t * Publishing to a topic: each message is fanned out to every subscriber's\n\t * own queue rather than inserted into one shared queue. Without it, a\n\t * message goes to the queue named by its type — a work queue, one consumer.\n\t */\n\ttopic?: string;\n}\n\n/** The pg-boss event a topic's message type is published as. */\nexport function topicEvent(topic: string, type: string): string {\n\treturn `${topic}/${type}`;\n}\n\nexport class PgBossPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: PgBossConnection,\n\t\tprivate options: PgBossPublisherOptions = {},\n\t) {}\n\n\t/**\n\t * Create a PgBossPublisher from a connection string.\n\t * Format: pgboss://user:pass@host:5432/database?schema=pgboss\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(\n\t\tconnectionString: string,\n\t\toptions: PgBossPublisherOptions = {},\n\t): Promise<PgBossPublisher<TMessage>> {\n\t\tconst { PgBossConnection } = await import('./PgBossConnection');\n\t\tconst connection =\n\t\t\tawait PgBossConnection.fromConnectionString(connectionString);\n\t\treturn new PgBossPublisher<TMessage>(connection, options);\n\t}\n\n\tasync publish(messages: TMessage[]): Promise<void> {\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tconst boss = this.connection.instance;\n\t\tif (!boss) {\n\t\t\tthrow new PgBossNotStarted();\n\t\t}\n\n\t\t// A topic: pg-boss copies the job into every queue subscribed to the\n\t\t// event — one per subscriber — so each subscriber sees each message.\n\t\t// The type rides in the data, because the job is named for the queue.\n\t\tconst { topic } = this.options;\n\t\tif (topic) {\n\t\t\tfor (const m of messages) {\n\t\t\t\tawait boss.publish(topicEvent(topic, m.type), {\n\t\t\t\t\ttype: m.type,\n\t\t\t\t\tpayload: m.payload,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Group jobs by queue name (v11+ requires per-queue insert calls)\n\t\tconst groups = new Map<string, { data: TMessage['payload'] }[]>();\n\t\tfor (const m of messages) {\n\t\t\tconst list = groups.get(m.type) ?? [];\n\t\t\tlist.push({ data: m.payload });\n\t\t\tgroups.set(m.type, list);\n\t\t}\n\n\t\tfor (const [name, jobs] of groups) {\n\t\t\tawait boss.createQueue(name);\n\t\t\tawait boss.insert(name, jobs);\n\t\t}\n\t}\n\n\tasync close(): Promise<void> {\n\t\t// Publisher doesn't own the connection\n\t}\n}\n","import type { EventSubscriber, PublishableMessage } from '../types';\nimport { PgBossNotStarted, PgBossSubscriptionNeedsName } from './errors';\nimport type { PgBossConnection } from './PgBossConnection';\nimport { topicEvent } from './PgBossPublisher';\n\nexport interface PgBossSubscriberOptions {\n\tbatchSize?: number;\n\tpollingIntervalSeconds?: number;\n\t/**\n\t * Subscribing to a topic. Each subscriber then drains a queue of its own,\n\t * `<topic>/<subscription>`, bound to the events it names — so every\n\t * subscriber sees every message, and replicas of one subscriber share it.\n\t * Without it, messages are drained from the queue named by their type:\n\t * work shared among whoever drains it.\n\t */\n\ttopic?: string;\n\t/** The subscriber's own name on the topic. Required with `topic`. */\n\tsubscription?: string;\n}\n\nexport class PgBossSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: PgBossConnection,\n\t\tprivate options: PgBossSubscriberOptions = {},\n\t) {}\n\n\t/**\n\t * Create a PgBossSubscriber from a connection string.\n\t * Format: pgboss://user:pass@host:5432/database?schema=pgboss&batchSize=5\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<PgBossSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { PgBossConnection } = await import('./PgBossConnection');\n\t\tconst connection =\n\t\t\tawait PgBossConnection.fromConnectionString(connectionString);\n\n\t\tconst options: PgBossSubscriberOptions = {\n\t\t\tbatchSize: params.get('batchSize')\n\t\t\t\t? Number.parseInt(params.get('batchSize')!, 10)\n\t\t\t\t: undefined,\n\t\t\tpollingIntervalSeconds: params.get('pollingIntervalSeconds')\n\t\t\t\t? Number.parseInt(params.get('pollingIntervalSeconds')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new PgBossSubscriber<TMessage>(connection, options);\n\t}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tconst boss = this.connection.instance;\n\t\tif (!boss) {\n\t\t\tthrow new PgBossNotStarted();\n\t\t}\n\n\t\tconst work = {\n\t\t\t...(this.options.batchSize && { batchSize: this.options.batchSize }),\n\t\t\t...(this.options.pollingIntervalSeconds && {\n\t\t\t\tpollingIntervalSeconds: this.options.pollingIntervalSeconds,\n\t\t\t}),\n\t\t};\n\n\t\tconst { topic, subscription } = this.options;\n\t\tif (topic) {\n\t\t\tif (!subscription) throw new PgBossSubscriptionNeedsName(topic);\n\n\t\t\tconst queue = topicEvent(topic, subscription);\n\t\t\tawait boss.createQueue(queue);\n\t\t\tfor (const type of messages) {\n\t\t\t\tawait boss.subscribe(topicEvent(topic, type), queue);\n\t\t\t}\n\t\t\tawait boss.work<{ type: string; payload: unknown }>(\n\t\t\t\tqueue,\n\t\t\t\twork,\n\t\t\t\tasync (jobs) => {\n\t\t\t\t\tfor (const job of jobs) {\n\t\t\t\t\t\tawait listener({\n\t\t\t\t\t\t\ttype: job.data.type,\n\t\t\t\t\t\t\tpayload: job.data.payload,\n\t\t\t\t\t\t} as TMessage);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const messageType of messages) {\n\t\t\tawait boss.createQueue(messageType);\n\t\t\tawait boss.work(messageType, work, async (jobs) => {\n\t\t\t\tfor (const job of jobs) {\n\t\t\t\t\tconst fullMessage = {\n\t\t\t\t\t\ttype: job.name,\n\t\t\t\t\t\tpayload: job.data,\n\t\t\t\t\t} as TMessage;\n\n\t\t\t\t\tawait listener(fullMessage);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["PgBoss"],"sources":["../../src/pgboss/PgBossConnection.ts","../../src/pgboss/errors.ts","../../src/pgboss/PgBossPublisher.ts","../../src/pgboss/PgBossSubscriber.ts","../../src/pgboss/driver.ts"],"sourcesContent":["import { PgBoss } from 'pg-boss';\nimport type { EventConnection } from '../types';\nimport { EventPublisherType } from '../types';\n\nexport interface PgBossConnectionConfig {\n\tconnectionString: string;\n\tschema?: string;\n\t/**\n\t * Who this connection is to Postgres. Defaults to `GKM_APP_NAME`, which a\n\t * generated entry sets to the construct it runs — so the broker's\n\t * connections are named for the process that holds them, as its database\n\t * pools are, rather than all being `pgboss`.\n\t */\n\tapplicationName?: string;\n}\n\nexport class PgBossConnection implements EventConnection {\n\treadonly type = EventPublisherType.PgBoss;\n\tprivate boss?: PgBoss;\n\tprivate connecting?: Promise<void>;\n\n\tconstructor(private config: PgBossConnectionConfig) {}\n\n\t/**\n\t * Create a PgBossConnection from a connection string.\n\t * Format: pgboss://user:pass@host:5432/database?schema=pgboss\n\t */\n\tstatic async fromConnectionString(\n\t\tconnectionString: string,\n\t): Promise<PgBossConnection> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst postgresUrl = `postgres://${url.username ? `${url.username}:${url.password}@` : ''}${url.host}${url.pathname}`;\n\n\t\tconst config: PgBossConnectionConfig = {\n\t\t\tconnectionString: postgresUrl,\n\t\t\tschema: params.get('schema') || undefined,\n\t\t};\n\n\t\tconst connection = new PgBossConnection(config);\n\t\tawait connection.connect();\n\t\treturn connection;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tif (this.boss) return;\n\n\t\tif (this.connecting) {\n\t\t\tawait this.connecting;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.connecting = (async () => {\n\t\t\ttry {\n\t\t\t\tconst applicationName =\n\t\t\t\t\tthis.config.applicationName ?? process.env.GKM_APP_NAME;\n\t\t\t\tconst boss = new PgBoss({\n\t\t\t\t\tconnectionString: this.config.connectionString,\n\t\t\t\t\t...(this.config.schema && { schema: this.config.schema }),\n\t\t\t\t\t...(applicationName && { application_name: applicationName }),\n\t\t\t\t});\n\n\t\t\t\tawait boss.start();\n\t\t\t\tthis.boss = boss;\n\t\t\t} catch (error) {\n\t\t\t\tthis.cleanup();\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t})();\n\n\t\tawait this.connecting;\n\t\tthis.connecting = undefined;\n\t}\n\n\tasync close(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.boss?.stop({ graceful: true });\n\t\t} catch {\n\t\t\t// Ignore errors during close\n\t\t} finally {\n\t\t\tthis.cleanup();\n\t\t}\n\t}\n\n\tisConnected(): boolean {\n\t\treturn !!this.boss;\n\t}\n\n\tprivate cleanup(): void {\n\t\tthis.boss = undefined;\n\t\tthis.connecting = undefined;\n\t}\n\n\t/**\n\t * Get the underlying pg-boss instance for publishing/subscribing\n\t */\n\tget instance(): PgBoss | undefined {\n\t\treturn this.boss;\n\t}\n}\n","// Beside the adapter but apart from its connection module, which imports\n// the broker's client: the publisher and subscriber load that lazily, and\n// importing an error class from it would load it eagerly.\n\n/** pg-boss connected but its instance never started. */\nexport class PgBossNotStarted extends Error {\n\tconstructor() {\n\t\tsuper(\n\t\t\t'pg-boss did not start. Check the database in the connection string is reachable and the role may create the pg-boss schema.',\n\t\t);\n\t\tthis.name = 'PgBossNotStarted';\n\t}\n}\n\n/** A topic subscription with no name to give the subscriber's own queue. */\nexport class PgBossSubscriptionNeedsName extends Error {\n\tconstructor(readonly topic: string) {\n\t\tsuper(\n\t\t\t`Subscribing to topic '${topic}' on pg-boss needs a subscription name: ` +\n\t\t\t\t'each subscriber drains a queue of its own, and that queue is named ' +\n\t\t\t\t'for it. Pass `subscription`.',\n\t\t);\n\t\tthis.name = 'PgBossSubscriptionNeedsName';\n\t}\n}\n","import type { EventPublisher, PublishableMessage } from '../types';\nimport { PgBossNotStarted } from './errors';\nimport type { PgBossConnection } from './PgBossConnection';\n\nexport interface PgBossPublisherOptions {\n\t/**\n\t * Publishing to a topic: each message is fanned out to every subscriber's\n\t * own queue rather than inserted into one shared queue. Without it, a\n\t * message goes to the queue named by its type — a work queue, one consumer.\n\t */\n\ttopic?: string;\n}\n\n/** The pg-boss event a topic's message type is published as. */\nexport function topicEvent(topic: string, type: string): string {\n\treturn `${topic}/${type}`;\n}\n\nexport class PgBossPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: PgBossConnection,\n\t\tprivate options: PgBossPublisherOptions = {},\n\t) {}\n\n\t/**\n\t * Create a PgBossPublisher from a connection string.\n\t * Format: pgboss://user:pass@host:5432/database?schema=pgboss\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(\n\t\tconnectionString: string,\n\t\toptions: PgBossPublisherOptions = {},\n\t): Promise<PgBossPublisher<TMessage>> {\n\t\tconst { PgBossConnection } = await import('./PgBossConnection');\n\t\tconst connection =\n\t\t\tawait PgBossConnection.fromConnectionString(connectionString);\n\t\treturn new PgBossPublisher<TMessage>(connection, options);\n\t}\n\n\tasync publish(messages: TMessage[]): Promise<void> {\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tconst boss = this.connection.instance;\n\t\tif (!boss) {\n\t\t\tthrow new PgBossNotStarted();\n\t\t}\n\n\t\t// A topic: pg-boss copies the job into every queue subscribed to the\n\t\t// event — one per subscriber — so each subscriber sees each message.\n\t\t// The type rides in the data, because the job is named for the queue.\n\t\tconst { topic } = this.options;\n\t\tif (topic) {\n\t\t\tfor (const m of messages) {\n\t\t\t\tawait boss.publish(topicEvent(topic, m.type), {\n\t\t\t\t\ttype: m.type,\n\t\t\t\t\tpayload: m.payload,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Group jobs by queue name (v11+ requires per-queue insert calls)\n\t\tconst groups = new Map<string, { data: TMessage['payload'] }[]>();\n\t\tfor (const m of messages) {\n\t\t\tconst list = groups.get(m.type) ?? [];\n\t\t\tlist.push({ data: m.payload });\n\t\t\tgroups.set(m.type, list);\n\t\t}\n\n\t\tfor (const [name, jobs] of groups) {\n\t\t\tawait boss.createQueue(name);\n\t\t\tawait boss.insert(name, jobs);\n\t\t}\n\t}\n\n\tasync close(): Promise<void> {\n\t\t// Publisher doesn't own the connection\n\t}\n}\n","import type { EventSubscriber, PublishableMessage } from '../types';\nimport { PgBossNotStarted, PgBossSubscriptionNeedsName } from './errors';\nimport type { PgBossConnection } from './PgBossConnection';\nimport { topicEvent } from './PgBossPublisher';\n\nexport interface PgBossSubscriberOptions {\n\tbatchSize?: number;\n\tpollingIntervalSeconds?: number;\n\t/**\n\t * Subscribing to a topic. Each subscriber then drains a queue of its own,\n\t * `<topic>/<subscription>`, bound to the events it names — so every\n\t * subscriber sees every message, and replicas of one subscriber share it.\n\t * Without it, messages are drained from the queue named by their type:\n\t * work shared among whoever drains it.\n\t */\n\ttopic?: string;\n\t/** The subscriber's own name on the topic. Required with `topic`. */\n\tsubscription?: string;\n}\n\nexport class PgBossSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tconstructor(\n\t\tprivate connection: PgBossConnection,\n\t\tprivate options: PgBossSubscriberOptions = {},\n\t) {}\n\n\t/**\n\t * Create a PgBossSubscriber from a connection string.\n\t * Format: pgboss://user:pass@host:5432/database?schema=pgboss&batchSize=5\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<PgBossSubscriber<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { PgBossConnection } = await import('./PgBossConnection');\n\t\tconst connection =\n\t\t\tawait PgBossConnection.fromConnectionString(connectionString);\n\n\t\tconst options: PgBossSubscriberOptions = {\n\t\t\tbatchSize: params.get('batchSize')\n\t\t\t\t? Number.parseInt(params.get('batchSize')!, 10)\n\t\t\t\t: undefined,\n\t\t\tpollingIntervalSeconds: params.get('pollingIntervalSeconds')\n\t\t\t\t? Number.parseInt(params.get('pollingIntervalSeconds')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new PgBossSubscriber<TMessage>(connection, options);\n\t}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tconst boss = this.connection.instance;\n\t\tif (!boss) {\n\t\t\tthrow new PgBossNotStarted();\n\t\t}\n\n\t\tconst work = {\n\t\t\t...(this.options.batchSize && { batchSize: this.options.batchSize }),\n\t\t\t...(this.options.pollingIntervalSeconds && {\n\t\t\t\tpollingIntervalSeconds: this.options.pollingIntervalSeconds,\n\t\t\t}),\n\t\t};\n\n\t\tconst { topic, subscription } = this.options;\n\t\tif (topic) {\n\t\t\tif (!subscription) throw new PgBossSubscriptionNeedsName(topic);\n\n\t\t\tconst queue = topicEvent(topic, subscription);\n\t\t\tawait boss.createQueue(queue);\n\t\t\tfor (const type of messages) {\n\t\t\t\tawait boss.subscribe(topicEvent(topic, type), queue);\n\t\t\t}\n\t\t\tawait boss.work<{ type: string; payload: unknown }>(\n\t\t\t\tqueue,\n\t\t\t\twork,\n\t\t\t\tasync (jobs) => {\n\t\t\t\t\tfor (const job of jobs) {\n\t\t\t\t\t\tawait listener({\n\t\t\t\t\t\t\ttype: job.data.type,\n\t\t\t\t\t\t\tpayload: job.data.payload,\n\t\t\t\t\t\t} as TMessage);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const messageType of messages) {\n\t\t\tawait boss.createQueue(messageType);\n\t\t\tawait boss.work(messageType, work, async (jobs) => {\n\t\t\t\tfor (const job of jobs) {\n\t\t\t\t\tconst fullMessage = {\n\t\t\t\t\t\ttype: job.name,\n\t\t\t\t\t\tpayload: job.data,\n\t\t\t\t\t} as TMessage;\n\n\t\t\t\t\tawait listener(fullMessage);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","import type { EventsDriver } from '../registry';\nimport { EventPublisherType } from '../types';\nimport { PgBossConnection } from './PgBossConnection';\nimport { PgBossPublisher } from './PgBossPublisher';\nimport { PgBossSubscriber } from './PgBossSubscriber';\n\n/**\n * `pgboss://` — queues and topics in Postgres. Register it with\n * `registerEventsDriver(pgbossEventsDriver)`; this subpath is the only one\n * that imports `pg-boss`.\n */\nexport const pgbossEventsDriver: EventsDriver = {\n\tscheme: EventPublisherType.PgBoss,\n\tconnect: (url) => PgBossConnection.fromConnectionString(url),\n\tpublisher: (url, options) =>\n\t\tPgBossPublisher.fromConnectionString(url, options),\n\tpublisherFor: (connection, options) =>\n\t\tnew PgBossPublisher(connection as PgBossConnection, options),\n\tsubscriber: (url) => PgBossSubscriber.fromConnectionString(url),\n\tsubscriberFor: (connection, options) =>\n\t\tnew PgBossSubscriber(connection as PgBossConnection, options),\n};\n"],"mappings":"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"}
|
package/dist/pgboss/index.d.cts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as EventPublisher, f as EventPublisherType, g as PublishableMessage, p as EventSubscriber, t as EventsDriver, u as EventConnection } from "../registry-DIx25Q5s.cjs";
|
|
2
2
|
import { PgBoss } from "pg-boss";
|
|
3
|
+
//#region src/pgboss/driver.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* `pgboss://` — queues and topics in Postgres. Register it with
|
|
6
|
+
* `registerEventsDriver(pgbossEventsDriver)`; this subpath is the only one
|
|
7
|
+
* that imports `pg-boss`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const pgbossEventsDriver: EventsDriver;
|
|
10
|
+
//#endregion
|
|
3
11
|
//#region src/pgboss/errors.d.ts
|
|
4
12
|
/** pg-boss connected but its instance never started. */
|
|
5
13
|
export declare class PgBossNotStarted extends Error {
|
|
@@ -15,6 +23,13 @@ export declare class PgBossSubscriptionNeedsName extends Error {
|
|
|
15
23
|
interface PgBossConnectionConfig {
|
|
16
24
|
connectionString: string;
|
|
17
25
|
schema?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Who this connection is to Postgres. Defaults to `GKM_APP_NAME`, which a
|
|
28
|
+
* generated entry sets to the construct it runs — so the broker's
|
|
29
|
+
* connections are named for the process that holds them, as its database
|
|
30
|
+
* pools are, rather than all being `pgboss`.
|
|
31
|
+
*/
|
|
32
|
+
applicationName?: string;
|
|
18
33
|
}
|
|
19
34
|
export declare class PgBossConnection implements EventConnection {
|
|
20
35
|
private config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/pgboss/errors.ts","../../src/pgboss/PgBossConnection.ts","../../src/pgboss/PgBossPublisher.ts","../../src/pgboss/PgBossSubscriber.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/pgboss/driver.ts","../../src/pgboss/errors.ts","../../src/pgboss/PgBossConnection.ts","../../src/pgboss/PgBossPublisher.ts","../../src/pgboss/PgBossSubscriber.ts"],"mappings":";;;;;;;;qBAWa,oBAAoB;;;;qBCNpB,yBAAyB;EACrC;;;qBASY,oCAAoC;WAC3B;EAArB,YAAqB;;;;UCZL;EAChB;EACA;;;;;;;EAOA;;qBAGY,4BAA4B;UAKpB;WAJX,OAAI,mBAAA;UACL;UACA;EAER,YAAoB,QAAQ;;;;;SAMf,qBACZ,2BACE,QAAQ;EAgBL,WAAW;EA8BX,SAAS;EAUf;UAIQ;;;;MAQJ,YAAY;;;;UC7FA;;;;;;EAMhB;;;wBAIe,WAAW,eAAe;qBAI7B,gBAAgB,iBAAiB,4CAClC,eAAe;UAGjB;UACA;EAFT,YACS,YAAY,kBACZ,UAAS;;;;;SAOL,qBACZ,iBAAiB,iCAEjB,0BACA,UAAS,yBACP,QAAQ,gBAAgB;EAOrB,QAAQ,UAAU,aAAa;EAsC/B,SAAS;;;;UC3EC;EAChB;EACA;;;;;;;;EAQA;;EAEA;;qBAGY,iBAAiB,iBAAiB,4CACnC,gBAAgB;UAGlB;UACA;EAFT,YACS,YAAY,kBACZ,UAAS;;;;;SAOL,qBACZ,iBAAiB,iCAChB,2BAA2B,QAAQ,iBAAiB;EAoBhD,UACL,UAAU,oBACV,WAAW,SAAS,aAAa,gBAC/B"}
|
package/dist/pgboss/index.d.mts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as EventPublisher, f as EventPublisherType, g as PublishableMessage, p as EventSubscriber, t as EventsDriver, u as EventConnection } from "../registry-DIx25Q5s.mjs";
|
|
2
2
|
import { PgBoss } from "pg-boss";
|
|
3
|
+
//#region src/pgboss/driver.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* `pgboss://` — queues and topics in Postgres. Register it with
|
|
6
|
+
* `registerEventsDriver(pgbossEventsDriver)`; this subpath is the only one
|
|
7
|
+
* that imports `pg-boss`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const pgbossEventsDriver: EventsDriver;
|
|
10
|
+
//#endregion
|
|
3
11
|
//#region src/pgboss/errors.d.ts
|
|
4
12
|
/** pg-boss connected but its instance never started. */
|
|
5
13
|
export declare class PgBossNotStarted extends Error {
|
|
@@ -15,6 +23,13 @@ export declare class PgBossSubscriptionNeedsName extends Error {
|
|
|
15
23
|
interface PgBossConnectionConfig {
|
|
16
24
|
connectionString: string;
|
|
17
25
|
schema?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Who this connection is to Postgres. Defaults to `GKM_APP_NAME`, which a
|
|
28
|
+
* generated entry sets to the construct it runs — so the broker's
|
|
29
|
+
* connections are named for the process that holds them, as its database
|
|
30
|
+
* pools are, rather than all being `pgboss`.
|
|
31
|
+
*/
|
|
32
|
+
applicationName?: string;
|
|
18
33
|
}
|
|
19
34
|
export declare class PgBossConnection implements EventConnection {
|
|
20
35
|
private config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/pgboss/errors.ts","../../src/pgboss/PgBossConnection.ts","../../src/pgboss/PgBossPublisher.ts","../../src/pgboss/PgBossSubscriber.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/pgboss/driver.ts","../../src/pgboss/errors.ts","../../src/pgboss/PgBossConnection.ts","../../src/pgboss/PgBossPublisher.ts","../../src/pgboss/PgBossSubscriber.ts"],"mappings":";;;;;;;;qBAWa,oBAAoB;;;;qBCNpB,yBAAyB;EACrC;;;qBASY,oCAAoC;WAC3B;EAArB,YAAqB;;;;UCZL;EAChB;EACA;;;;;;;EAOA;;qBAGY,4BAA4B;UAKpB;WAJX,OAAI,mBAAA;UACL;UACA;EAER,YAAoB,QAAQ;;;;;SAMf,qBACZ,2BACE,QAAQ;EAgBL,WAAW;EA8BX,SAAS;EAUf;UAIQ;;;;MAQJ,YAAY;;;;UC7FA;;;;;;EAMhB;;;wBAIe,WAAW,eAAe;qBAI7B,gBAAgB,iBAAiB,4CAClC,eAAe;UAGjB;UACA;EAFT,YACS,YAAY,kBACZ,UAAS;;;;;SAOL,qBACZ,iBAAiB,iCAEjB,0BACA,UAAS,yBACP,QAAQ,gBAAgB;EAOrB,QAAQ,UAAU,aAAa;EAsC/B,SAAS;;;;UC3EC;EAChB;EACA;;;;;;;;EAQA;;EAEA;;qBAGY,iBAAiB,iBAAiB,4CACnC,gBAAgB;UAGlB;UACA;EAFT,YACS,YAAY,kBACZ,UAAS;;;;;SAOL,qBACZ,iBAAiB,iCAChB,2BAA2B,QAAQ,iBAAiB;EAoBhD,UACL,UAAU,oBACV,WAAW,SAAS,aAAa,gBAC/B"}
|