@ddd-ts-kit/nats 0.0.0-stage → 0.1.0
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 +344 -2
- package/dist/codec/decode.d.ts +4 -0
- package/dist/codec/decode.d.ts.map +1 -0
- package/dist/codec/decode.js +39 -0
- package/dist/codec/decode.js.map +1 -0
- package/dist/codec/encode.d.ts +8 -0
- package/dist/codec/encode.d.ts.map +1 -0
- package/dist/codec/encode.js +19 -0
- package/dist/codec/encode.js.map +1 -0
- package/dist/codec/headers.d.ts +14 -0
- package/dist/codec/headers.d.ts.map +1 -0
- package/dist/codec/headers.js +14 -0
- package/dist/codec/headers.js.map +1 -0
- package/dist/codec/publication.d.ts +7 -0
- package/dist/codec/publication.d.ts.map +1 -0
- package/dist/codec/publication.js +2 -0
- package/dist/codec/publication.js.map +1 -0
- package/dist/codec/republication.d.ts +11 -0
- package/dist/codec/republication.d.ts.map +1 -0
- package/dist/codec/republication.js +16 -0
- package/dist/codec/republication.js.map +1 -0
- package/dist/connection/broker-link.d.ts +49 -0
- package/dist/connection/broker-link.d.ts.map +1 -0
- package/dist/connection/broker-link.js +160 -0
- package/dist/connection/broker-link.js.map +1 -0
- package/dist/consumption/consumption.d.ts +56 -0
- package/dist/consumption/consumption.d.ts.map +1 -0
- package/dist/consumption/consumption.js +223 -0
- package/dist/consumption/consumption.js.map +1 -0
- package/dist/consumption/failure-of.d.ts +7 -0
- package/dist/consumption/failure-of.d.ts.map +1 -0
- package/dist/consumption/failure-of.js +18 -0
- package/dist/consumption/failure-of.js.map +1 -0
- package/dist/consumption/poison-message.d.ts +3 -0
- package/dist/consumption/poison-message.d.ts.map +1 -0
- package/dist/consumption/poison-message.js +3 -0
- package/dist/consumption/poison-message.js.map +1 -0
- package/dist/consumption/track.d.ts +3 -0
- package/dist/consumption/track.d.ts.map +1 -0
- package/dist/consumption/track.js +9 -0
- package/dist/consumption/track.js.map +1 -0
- package/dist/errors/broker-unavailable-error.d.ts +8 -0
- package/dist/errors/broker-unavailable-error.d.ts.map +1 -0
- package/dist/errors/broker-unavailable-error.js +12 -0
- package/dist/errors/broker-unavailable-error.js.map +1 -0
- package/dist/errors/consumer-name-required-error.d.ts +5 -0
- package/dist/errors/consumer-name-required-error.d.ts.map +1 -0
- package/dist/errors/consumer-name-required-error.js +8 -0
- package/dist/errors/consumer-name-required-error.js.map +1 -0
- package/dist/errors/event-bus-closed-error.d.ts +5 -0
- package/dist/errors/event-bus-closed-error.d.ts.map +1 -0
- package/dist/errors/event-bus-closed-error.js +8 -0
- package/dist/errors/event-bus-closed-error.js.map +1 -0
- package/dist/errors/failure-code.d.ts +8 -0
- package/dist/errors/failure-code.d.ts.map +1 -0
- package/dist/errors/failure-code.js +19 -0
- package/dist/errors/failure-code.js.map +1 -0
- package/dist/errors/publish-not-acknowledged-error.d.ts +11 -0
- package/dist/errors/publish-not-acknowledged-error.d.ts.map +1 -0
- package/dist/errors/publish-not-acknowledged-error.js +16 -0
- package/dist/errors/publish-not-acknowledged-error.js.map +1 -0
- package/dist/ignore.d.ts +3 -0
- package/dist/ignore.d.ts.map +1 -0
- package/dist/ignore.js +5 -0
- package/dist/ignore.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/messaging-system.d.ts +3 -0
- package/dist/messaging-system.d.ts.map +1 -0
- package/dist/messaging-system.js +3 -0
- package/dist/messaging-system.js.map +1 -0
- package/dist/nats-event-bus.d.ts +57 -0
- package/dist/nats-event-bus.d.ts.map +1 -0
- package/dist/nats-event-bus.js +168 -0
- package/dist/nats-event-bus.js.map +1 -0
- package/dist/options/nats-delivery.d.ts +14 -0
- package/dist/options/nats-delivery.d.ts.map +1 -0
- package/dist/options/nats-delivery.js +2 -0
- package/dist/options/nats-delivery.js.map +1 -0
- package/dist/options/nats-event-bus-options.d.ts +40 -0
- package/dist/options/nats-event-bus-options.d.ts.map +1 -0
- package/dist/options/nats-event-bus-options.js +3 -0
- package/dist/options/nats-event-bus-options.js.map +1 -0
- package/dist/options/nats-failure.d.ts +17 -0
- package/dist/options/nats-failure.d.ts.map +1 -0
- package/dist/options/nats-failure.js +2 -0
- package/dist/options/nats-failure.js.map +1 -0
- package/dist/options/reconnect-options.d.ts +9 -0
- package/dist/options/reconnect-options.d.ts.map +1 -0
- package/dist/options/reconnect-options.js +2 -0
- package/dist/options/reconnect-options.js.map +1 -0
- package/dist/options/retry-options.d.ts +7 -0
- package/dist/options/retry-options.d.ts.map +1 -0
- package/dist/options/retry-options.js +2 -0
- package/dist/options/retry-options.js.map +1 -0
- package/dist/options/settings-of.d.ts +5 -0
- package/dist/options/settings-of.d.ts.map +1 -0
- package/dist/options/settings-of.js +55 -0
- package/dist/options/settings-of.js.map +1 -0
- package/dist/options/settings.d.ts +23 -0
- package/dist/options/settings.d.ts.map +1 -0
- package/dist/options/settings.js +2 -0
- package/dist/options/settings.js.map +1 -0
- package/dist/options/stream-storage.d.ts +2 -0
- package/dist/options/stream-storage.d.ts.map +1 -0
- package/dist/options/stream-storage.js +2 -0
- package/dist/options/stream-storage.js.map +1 -0
- package/dist/publication/publications.d.ts +25 -0
- package/dist/publication/publications.d.ts.map +1 -0
- package/dist/publication/publications.js +47 -0
- package/dist/publication/publications.js.map +1 -0
- package/dist/secrecy/conceal.d.ts +8 -0
- package/dist/secrecy/conceal.d.ts.map +1 -0
- package/dist/secrecy/conceal.js +12 -0
- package/dist/secrecy/conceal.js.map +1 -0
- package/dist/topology/binding-names-of.d.ts +5 -0
- package/dist/topology/binding-names-of.d.ts.map +1 -0
- package/dist/topology/binding-names-of.js +13 -0
- package/dist/topology/binding-names-of.js.map +1 -0
- package/dist/topology/binding-names.d.ts +10 -0
- package/dist/topology/binding-names.d.ts.map +1 -0
- package/dist/topology/binding-names.js +2 -0
- package/dist/topology/binding-names.js.map +1 -0
- package/dist/topology/consumer-binding.d.ts +6 -0
- package/dist/topology/consumer-binding.d.ts.map +1 -0
- package/dist/topology/consumer-binding.js +2 -0
- package/dist/topology/consumer-binding.js.map +1 -0
- package/dist/topology/consumer-description.d.ts +9 -0
- package/dist/topology/consumer-description.d.ts.map +1 -0
- package/dist/topology/consumer-description.js +2 -0
- package/dist/topology/consumer-description.js.map +1 -0
- package/dist/topology/dead-stream-of.d.ts +2 -0
- package/dist/topology/dead-stream-of.d.ts.map +1 -0
- package/dist/topology/dead-stream-of.js +4 -0
- package/dist/topology/dead-stream-of.js.map +1 -0
- package/dist/topology/declare-topology.d.ts +8 -0
- package/dist/topology/declare-topology.d.ts.map +1 -0
- package/dist/topology/declare-topology.js +58 -0
- package/dist/topology/declare-topology.js.map +1 -0
- package/dist/topology/nats-topology.d.ts +8 -0
- package/dist/topology/nats-topology.d.ts.map +1 -0
- package/dist/topology/nats-topology.js +2 -0
- package/dist/topology/nats-topology.js.map +1 -0
- package/dist/topology/stream-description.d.ts +11 -0
- package/dist/topology/stream-description.d.ts.map +1 -0
- package/dist/topology/stream-description.js +2 -0
- package/dist/topology/stream-description.js.map +1 -0
- package/dist/topology/topology-of.d.ts +5 -0
- package/dist/topology/topology-of.d.ts.map +1 -0
- package/dist/topology/topology-of.js +29 -0
- package/dist/topology/topology-of.js.map +1 -0
- package/dist/topology/topology-settings.d.ts +11 -0
- package/dist/topology/topology-settings.d.ts.map +1 -0
- package/dist/topology/topology-settings.js +2 -0
- package/dist/topology/topology-settings.js.map +1 -0
- package/package.json +39 -4
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { NatsConnection } from '@nats-io/transport-node';
|
|
2
|
+
import type { NatsDelivery } from './nats-delivery.js';
|
|
3
|
+
import type { NatsFailure } from './nats-failure.js';
|
|
4
|
+
import type { ReconnectOptions } from './reconnect-options.js';
|
|
5
|
+
import type { RetryOptions } from './retry-options.js';
|
|
6
|
+
import type { StreamStorage } from './stream-storage.js';
|
|
7
|
+
export interface Settings {
|
|
8
|
+
readonly open: () => Promise<NatsConnection>;
|
|
9
|
+
readonly stream: string;
|
|
10
|
+
readonly subjectPrefix: string;
|
|
11
|
+
readonly consumer: string | undefined;
|
|
12
|
+
readonly prefetch: number;
|
|
13
|
+
readonly storage: StreamStorage;
|
|
14
|
+
readonly replicas: number;
|
|
15
|
+
readonly duplicateWindowMs: number;
|
|
16
|
+
readonly ackWaitMs: number;
|
|
17
|
+
readonly publishTimeoutMs: number;
|
|
18
|
+
readonly retry: Required<RetryOptions>;
|
|
19
|
+
readonly reconnect: Required<ReconnectOptions>;
|
|
20
|
+
readonly onFailure: (failure: NatsFailure) => void;
|
|
21
|
+
readonly onDelivery: (delivery: NatsDelivery) => void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/options/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/options/settings.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-storage.d.ts","sourceRoot":"","sources":["../../src/options/stream-storage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-storage.js","sourceRoot":"","sources":["../../src/options/stream-storage.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { NatsConnection } from '@nats-io/transport-node';
|
|
2
|
+
import type { IntegrationEvent } from '@ddd-ts-kit/kernel';
|
|
3
|
+
import type { Publication } from '../codec/publication.js';
|
|
4
|
+
export interface PublicationSettings {
|
|
5
|
+
readonly subjectPrefix: string;
|
|
6
|
+
readonly publishTimeoutMs: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Publishing to JetStream: a publication succeeds only once the stream acknowledged the
|
|
10
|
+
* message as stored, which is what lets an outbox relay mark it published. The event id is
|
|
11
|
+
* the message id of the stream, so a second publication of the same event inside the
|
|
12
|
+
* duplicate window is acknowledged and dropped.
|
|
13
|
+
*/
|
|
14
|
+
export declare class Publications {
|
|
15
|
+
private readonly settings;
|
|
16
|
+
private client;
|
|
17
|
+
constructor(settings: PublicationSettings);
|
|
18
|
+
attach(connection: NatsConnection): void;
|
|
19
|
+
detach(): void;
|
|
20
|
+
/** Resolves when every event is acknowledged; rejects with the first failure otherwise. */
|
|
21
|
+
publish(events: readonly IntegrationEvent[]): Promise<void>;
|
|
22
|
+
/** One message to a subject a stream captures, acknowledged by that stream. */
|
|
23
|
+
send(subject: string, { data, messageId, headers }: Publication): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=publications.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publications.d.ts","sourceRoot":"","sources":["../../src/publication/publications.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAK3D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,MAAM,CAA8B;IAE5C,YAA6B,QAAQ,EAAE,mBAAmB,EAAI;IAE9D,MAAM,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAEvC;IAED,MAAM,IAAI,IAAI,CAEb;IAED,2FAA2F;IACrF,OAAO,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhE;IAED,+EAA+E;IACzE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAYpF;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jetstream } from '@nats-io/jetstream';
|
|
2
|
+
import { encode } from '../codec/encode.js';
|
|
3
|
+
import { BrokerUnavailableError } from '../errors/broker-unavailable-error.js';
|
|
4
|
+
import { failureCode } from '../errors/failure-code.js';
|
|
5
|
+
import { PublishNotAcknowledgedError } from '../errors/publish-not-acknowledged-error.js';
|
|
6
|
+
/**
|
|
7
|
+
* Publishing to JetStream: a publication succeeds only once the stream acknowledged the
|
|
8
|
+
* message as stored, which is what lets an outbox relay mark it published. The event id is
|
|
9
|
+
* the message id of the stream, so a second publication of the same event inside the
|
|
10
|
+
* duplicate window is acknowledged and dropped.
|
|
11
|
+
*/
|
|
12
|
+
export class Publications {
|
|
13
|
+
settings;
|
|
14
|
+
client;
|
|
15
|
+
constructor(settings) {
|
|
16
|
+
this.settings = settings;
|
|
17
|
+
}
|
|
18
|
+
attach(connection) {
|
|
19
|
+
this.client = jetstream(connection);
|
|
20
|
+
}
|
|
21
|
+
detach() {
|
|
22
|
+
this.client = undefined;
|
|
23
|
+
}
|
|
24
|
+
/** Resolves when every event is acknowledged; rejects with the first failure otherwise. */
|
|
25
|
+
async publish(events) {
|
|
26
|
+
const outcomes = await Promise.allSettled(events.map((event) => this.send(`${this.settings.subjectPrefix}.${event.type}`, encode(event))));
|
|
27
|
+
for (const outcome of outcomes) {
|
|
28
|
+
if (outcome.status === 'rejected') {
|
|
29
|
+
throw outcome.reason;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** One message to a subject a stream captures, acknowledged by that stream. */
|
|
34
|
+
async send(subject, { data, messageId, headers }) {
|
|
35
|
+
if (this.client === undefined) {
|
|
36
|
+
throw new BrokerUnavailableError('RECONNECTING');
|
|
37
|
+
}
|
|
38
|
+
const timeout = this.settings.publishTimeoutMs;
|
|
39
|
+
try {
|
|
40
|
+
await this.client.publish(subject, data, { msgID: messageId, headers, timeout });
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
throw new PublishNotAcknowledgedError(messageId, failureCode(error));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=publications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publications.js","sourceRoot":"","sources":["../../src/publication/publications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAwB,MAAM,oBAAoB,CAAC;AAGrE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAO1F;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IAGM,QAAQ;IAF7B,MAAM,CAA8B;IAE5C,YAA6B,QAA6B;wBAA7B,QAAQ;IAAwB,CAAC;IAE9D,MAAM,CAAC,UAA0B;QAC/B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,CAAC;IAED,2FAA2F;IAC3F,KAAK,CAAC,OAAO,CAAC,MAAmC;QAC/C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,UAAU,CACvC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAChG,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,OAAO,CAAC,MAAM,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAe;QACnE,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,sBAAsB,CAAC,cAAc,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAE/C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,2BAA2B,CAAC,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Takes the fields an instance holds so far out of enumeration: `Object.keys`, a spread and a
|
|
3
|
+
* comparison no longer reach the client or the connection behind them, whose options carry
|
|
4
|
+
* credentials. Called last in a constructor, next to a `toJSON` and an inspection method that
|
|
5
|
+
* answer a name: nothing the instance is shown through leads to what it holds.
|
|
6
|
+
*/
|
|
7
|
+
export declare function conceal(instance: object): void;
|
|
8
|
+
//# sourceMappingURL=conceal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conceal.d.ts","sourceRoot":"","sources":["../../src/secrecy/conceal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI9C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Takes the fields an instance holds so far out of enumeration: `Object.keys`, a spread and a
|
|
3
|
+
* comparison no longer reach the client or the connection behind them, whose options carry
|
|
4
|
+
* credentials. Called last in a constructor, next to a `toJSON` and an inspection method that
|
|
5
|
+
* answer a name: nothing the instance is shown through leads to what it holds.
|
|
6
|
+
*/
|
|
7
|
+
export function conceal(instance) {
|
|
8
|
+
for (const field of Object.keys(instance)) {
|
|
9
|
+
Object.defineProperty(instance, field, { enumerable: false });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=conceal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conceal.js","sourceRoot":"","sources":["../../src/secrecy/conceal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,QAAgB;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BindingNames } from './binding-names.js';
|
|
2
|
+
import type { ConsumerBinding } from './consumer-binding.js';
|
|
3
|
+
/** A durable name holds neither dot nor wildcard: every other character becomes `_`. */
|
|
4
|
+
export declare function bindingNamesOf({ consumer, type }: ConsumerBinding, subjectPrefix: string): BindingNames;
|
|
5
|
+
//# sourceMappingURL=binding-names-of.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-names-of.d.ts","sourceRoot":"","sources":["../../src/topology/binding-names-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,CAQvG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** A durable name holds neither dot nor wildcard: every other character becomes `_`. */
|
|
2
|
+
export function bindingNamesOf({ consumer, type }, subjectPrefix) {
|
|
3
|
+
const durable = `${sanitized(consumer)}_${sanitized(type)}`;
|
|
4
|
+
return {
|
|
5
|
+
durable,
|
|
6
|
+
subject: `${subjectPrefix}.${type}`,
|
|
7
|
+
deadSubject: `dead.${subjectPrefix}.${sanitized(consumer)}.${type}`,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function sanitized(name) {
|
|
11
|
+
return name.replaceAll(/[^A-Za-z0-9_-]/g, '_');
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=binding-names-of.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-names-of.js","sourceRoot":"","sources":["../../src/topology/binding-names-of.ts"],"names":[],"mappings":"AAGA,wFAAwF;AACxF,MAAM,UAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAmB,EAAE,aAAqB;IACvF,MAAM,OAAO,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAE5D,OAAO;QACL,OAAO;QACP,OAAO,EAAE,GAAG,aAAa,IAAI,IAAI,EAAE;QACnC,WAAW,EAAE,QAAQ,aAAa,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** The names a binding has on the server. */
|
|
2
|
+
export interface BindingNames {
|
|
3
|
+
/** The durable consumer: instances that share it share its messages. */
|
|
4
|
+
readonly durable: string;
|
|
5
|
+
/** The subject the events of the type are published to. */
|
|
6
|
+
readonly subject: string;
|
|
7
|
+
/** The subject, in the dead-letter stream, of what this consumer gave up on. */
|
|
8
|
+
readonly deadSubject: string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=binding-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-names.d.ts","sourceRoot":"","sources":["../../src/topology/binding-names.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-names.js","sourceRoot":"","sources":["../../src/topology/binding-names.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-binding.d.ts","sourceRoot":"","sources":["../../src/topology/consumer-binding.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-binding.js","sourceRoot":"","sources":["../../src/topology/consumer-binding.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ConsumerDescription {
|
|
2
|
+
readonly stream: string;
|
|
3
|
+
/** The durable name. */
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly filterSubject: string;
|
|
6
|
+
readonly ackWaitMs: number;
|
|
7
|
+
readonly maxDeliver: number;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=consumer-description.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-description.d.ts","sourceRoot":"","sources":["../../src/topology/consumer-description.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-description.js","sourceRoot":"","sources":["../../src/topology/consumer-description.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-stream-of.d.ts","sourceRoot":"","sources":["../../src/topology/dead-stream-of.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dead-stream-of.js","sourceRoot":"","sources":["../../src/topology/dead-stream-of.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,GAAG,MAAM,OAAO,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type JetStreamManager } from '@nats-io/jetstream';
|
|
2
|
+
import type { NatsTopology } from './nats-topology.js';
|
|
3
|
+
/**
|
|
4
|
+
* Idempotent. A stream that exists is never altered, whatever its limits; a durable consumer
|
|
5
|
+
* that exists takes the acknowledgement wait and the delivery limit of this bus.
|
|
6
|
+
*/
|
|
7
|
+
export declare function declareTopology(manager: JetStreamManager, topology: NatsTopology): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=declare-topology.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declare-topology.d.ts","sourceRoot":"","sources":["../../src/topology/declare-topology.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGnH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAQtG"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { AckPolicy, DeliverPolicy, RetentionPolicy, StorageType } from '@nats-io/jetstream';
|
|
2
|
+
import { failureCode } from '../errors/failure-code.js';
|
|
3
|
+
/**
|
|
4
|
+
* Idempotent. A stream that exists is never altered, whatever its limits; a durable consumer
|
|
5
|
+
* that exists takes the acknowledgement wait and the delivery limit of this bus.
|
|
6
|
+
*/
|
|
7
|
+
export async function declareTopology(manager, topology) {
|
|
8
|
+
for (const stream of topology.streams) {
|
|
9
|
+
await declareStream(manager, stream);
|
|
10
|
+
}
|
|
11
|
+
for (const consumer of topology.consumers) {
|
|
12
|
+
await declareConsumer(manager, consumer);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const STREAM_EXISTS_WITH_ANOTHER_CONFIGURATION = 'JETSTREAM_10058';
|
|
16
|
+
const CONSUMER_EXISTS_WITH_ANOTHER_CONFIGURATION = 'JETSTREAM_10148';
|
|
17
|
+
const NANOSECONDS_PER_MILLISECOND = 1_000_000;
|
|
18
|
+
async function declareStream(manager, stream) {
|
|
19
|
+
try {
|
|
20
|
+
await manager.streams.add({
|
|
21
|
+
name: stream.name,
|
|
22
|
+
subjects: [...stream.subjects],
|
|
23
|
+
retention: RetentionPolicy.Limits,
|
|
24
|
+
storage: stream.storage === 'file' ? StorageType.File : StorageType.Memory,
|
|
25
|
+
num_replicas: stream.replicas,
|
|
26
|
+
duplicate_window: stream.duplicateWindowMs * NANOSECONDS_PER_MILLISECOND,
|
|
27
|
+
// Lets `replayDead` read the dead letters of one subject without a consumer.
|
|
28
|
+
allow_direct: true,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (failureCode(error) !== STREAM_EXISTS_WITH_ANOTHER_CONFIGURATION) {
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function declareConsumer(manager, consumer) {
|
|
38
|
+
const limits = {
|
|
39
|
+
ack_wait: consumer.ackWaitMs * NANOSECONDS_PER_MILLISECOND,
|
|
40
|
+
max_deliver: consumer.maxDeliver,
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
await manager.consumers.add(consumer.stream, {
|
|
44
|
+
durable_name: consumer.name,
|
|
45
|
+
filter_subject: consumer.filterSubject,
|
|
46
|
+
ack_policy: AckPolicy.Explicit,
|
|
47
|
+
deliver_policy: DeliverPolicy.All,
|
|
48
|
+
...limits,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (failureCode(error) !== CONSUMER_EXISTS_WITH_ANOTHER_CONFIGURATION) {
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
await manager.consumers.update(consumer.stream, consumer.name, limits);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=declare-topology.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declare-topology.js","sourceRoot":"","sources":["../../src/topology/declare-topology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAyB,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKxD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAyB,EAAE,QAAsB;IACrF,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,MAAM,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,wCAAwC,GAAG,iBAAiB,CAAC;AACnE,MAAM,0CAA0C,GAAG,iBAAiB,CAAC;AACrE,MAAM,2BAA2B,GAAG,SAAS,CAAC;AAE9C,KAAK,UAAU,aAAa,CAAC,OAAyB,EAAE,MAAyB;IAC/E,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC9B,SAAS,EAAE,eAAe,CAAC,MAAM;YACjC,OAAO,EAAE,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM;YAC1E,YAAY,EAAE,MAAM,CAAC,QAAQ;YAC7B,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,GAAG,2BAA2B;YACxE,6EAA6E;YAC7E,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,wCAAwC,EAAE,CAAC;YACpE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAyB,EAAE,QAA6B;IACrF,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,QAAQ,CAAC,SAAS,GAAG,2BAA2B;QAC1D,WAAW,EAAE,QAAQ,CAAC,UAAU;KACjC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC3C,YAAY,EAAE,QAAQ,CAAC,IAAI;YAC3B,cAAc,EAAE,QAAQ,CAAC,aAAa;YACtC,UAAU,EAAE,SAAS,CAAC,QAAQ;YAC9B,cAAc,EAAE,aAAa,CAAC,GAAG;YACjC,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,0CAA0C,EAAE,CAAC;YACtE,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ConsumerDescription } from './consumer-description.js';
|
|
2
|
+
import type { StreamDescription } from './stream-description.js';
|
|
3
|
+
/** Everything the bus creates on the server, as data: for documentation and reviews. */
|
|
4
|
+
export interface NatsTopology {
|
|
5
|
+
readonly streams: readonly StreamDescription[];
|
|
6
|
+
readonly consumers: readonly ConsumerDescription[];
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=nats-topology.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-topology.d.ts","sourceRoot":"","sources":["../../src/topology/nats-topology.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,wFAAwF;AACxF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-topology.js","sourceRoot":"","sources":["../../src/topology/nats-topology.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { StreamStorage } from '../options/stream-storage.js';
|
|
2
|
+
export interface StreamDescription {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
/** `events` keeps what is published, `dead` keeps what a consumer gave up on. */
|
|
5
|
+
readonly role: 'events' | 'dead';
|
|
6
|
+
readonly subjects: readonly string[];
|
|
7
|
+
readonly storage: StreamStorage;
|
|
8
|
+
readonly replicas: number;
|
|
9
|
+
readonly duplicateWindowMs: number;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=stream-description.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-description.d.ts","sourceRoot":"","sources":["../../src/topology/stream-description.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-description.js","sourceRoot":"","sources":["../../src/topology/stream-description.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ConsumerBinding } from './consumer-binding.js';
|
|
2
|
+
import type { NatsTopology } from './nats-topology.js';
|
|
3
|
+
import type { TopologySettings } from './topology-settings.js';
|
|
4
|
+
export declare function topologyOf(settings: TopologySettings, bindings: readonly ConsumerBinding[]): NatsTopology;
|
|
5
|
+
//# sourceMappingURL=topology-of.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-of.d.ts","sourceRoot":"","sources":["../../src/topology/topology-of.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,YAAY,CAWzG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { bindingNamesOf } from './binding-names-of.js';
|
|
2
|
+
import { deadStreamOf } from './dead-stream-of.js';
|
|
3
|
+
export function topologyOf(settings, bindings) {
|
|
4
|
+
const { stream, subjectPrefix, storage, replicas, duplicateWindowMs } = settings;
|
|
5
|
+
const shared = { storage, replicas, duplicateWindowMs };
|
|
6
|
+
return {
|
|
7
|
+
streams: [
|
|
8
|
+
{ name: stream, role: 'events', subjects: [`${subjectPrefix}.>`], ...shared },
|
|
9
|
+
{ name: deadStreamOf(stream), role: 'dead', subjects: [`dead.${subjectPrefix}.>`], ...shared },
|
|
10
|
+
],
|
|
11
|
+
consumers: bindings.map((binding) => consumerOf(settings, binding)),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The bus parks a message at its `maxAttempts`-th failed delivery. The limit of the server
|
|
16
|
+
* is twice that: a delivery lost without a verdict (a crash, an expired acknowledgement
|
|
17
|
+
* wait) counts too, and must leave room for the message to be parked.
|
|
18
|
+
*/
|
|
19
|
+
function consumerOf(settings, binding) {
|
|
20
|
+
const names = bindingNamesOf(binding, settings.subjectPrefix);
|
|
21
|
+
return {
|
|
22
|
+
stream: settings.stream,
|
|
23
|
+
name: names.durable,
|
|
24
|
+
filterSubject: names.subject,
|
|
25
|
+
ackWaitMs: settings.ackWaitMs,
|
|
26
|
+
maxDeliver: settings.maxAttempts * 2,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=topology-of.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-of.js","sourceRoot":"","sources":["../../src/topology/topology-of.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,MAAM,UAAU,UAAU,CAAC,QAA0B,EAAE,QAAoC;IACzF,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,QAAQ,CAAC;IACjF,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAExD,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,aAAa,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC7E,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,aAAa,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;SAC/F;QACD,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KACpE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,QAA0B,EAAE,OAAwB;IACtE,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE9D,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,KAAK,CAAC,OAAO;QACnB,aAAa,EAAE,KAAK,CAAC,OAAO;QAC5B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,UAAU,EAAE,QAAQ,CAAC,WAAW,GAAG,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { StreamStorage } from '../options/stream-storage.js';
|
|
2
|
+
export interface TopologySettings {
|
|
3
|
+
readonly stream: string;
|
|
4
|
+
readonly subjectPrefix: string;
|
|
5
|
+
readonly storage: StreamStorage;
|
|
6
|
+
readonly replicas: number;
|
|
7
|
+
readonly duplicateWindowMs: number;
|
|
8
|
+
readonly ackWaitMs: number;
|
|
9
|
+
readonly maxAttempts: number;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=topology-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-settings.d.ts","sourceRoot":"","sources":["../../src/topology/topology-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-settings.js","sourceRoot":"","sources":["../../src/topology/topology-settings.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ddd-ts-kit/nats",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "NATS JetStream provider for integration events: acknowledged publishing with message deduplication for the outbox relay, one durable consumer per consumer, explicit acknowledgement, bounded redelivery and a dead-letter subject.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/gbourgeat/ddd-ts-kit.git",
|
|
9
|
+
"directory": "packages/nats"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/gbourgeat/ddd-ts-kit/tree/main/packages/nats#readme",
|
|
12
|
+
"bugs": "https://github.com/gbourgeat/ddd-ts-kit/issues",
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public",
|
|
15
|
+
"provenance": true
|
|
16
|
+
},
|
|
17
|
+
"type": "module",
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@ddd-ts-kit/events": "0.1.0",
|
|
30
|
+
"@ddd-ts-kit/kernel": "0.1.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@ddd-ts-kit/testing": "0.1.0",
|
|
34
|
+
"@nats-io/jetstream": "^3.4.0",
|
|
35
|
+
"@nats-io/transport-node": "^3.4.0"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"@nats-io/jetstream": ">=3.0.0 <4",
|
|
39
|
+
"@nats-io/transport-node": ">=3.0.0 <4"
|
|
40
|
+
}
|
|
41
|
+
}
|