nmtjs 0.15.2 → 0.16.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/index.d.ts +6 -6
  2. package/dist/runtime/application/api/logging.d.ts +1 -0
  3. package/dist/runtime/application/api/logging.js +28 -11
  4. package/dist/runtime/application/api/logging.js.map +1 -1
  5. package/dist/runtime/index.d.ts +2 -2
  6. package/dist/runtime/index.js +2 -2
  7. package/dist/runtime/index.js.map +1 -1
  8. package/dist/runtime/injectables.d.ts +7 -7
  9. package/dist/runtime/injectables.js +6 -6
  10. package/dist/runtime/injectables.js.map +1 -1
  11. package/dist/runtime/server/config.d.ts +4 -4
  12. package/dist/runtime/server/config.js +2 -2
  13. package/dist/runtime/server/config.js.map +1 -1
  14. package/dist/runtime/{pubsub → subscription}/manager.d.ts +15 -14
  15. package/dist/runtime/{pubsub → subscription}/manager.js +59 -8
  16. package/dist/runtime/subscription/manager.js.map +1 -0
  17. package/dist/runtime/{pubsub → subscription}/redis.d.ts +7 -5
  18. package/dist/runtime/{pubsub → subscription}/redis.js +37 -14
  19. package/dist/runtime/subscription/redis.js.map +1 -0
  20. package/dist/runtime/workers/base.d.ts +2 -2
  21. package/dist/runtime/workers/base.js +5 -5
  22. package/dist/runtime/workers/base.js.map +1 -1
  23. package/package.json +11 -11
  24. package/src/runtime/application/api/logging.ts +36 -10
  25. package/src/runtime/index.ts +2 -2
  26. package/src/runtime/injectables.ts +16 -18
  27. package/src/runtime/server/config.ts +5 -5
  28. package/src/runtime/{pubsub → subscription}/manager.ts +118 -26
  29. package/src/runtime/subscription/redis.ts +157 -0
  30. package/src/runtime/workers/base.ts +7 -7
  31. package/dist/runtime/pubsub/manager.js.map +0 -1
  32. package/dist/runtime/pubsub/redis.js.map +0 -1
  33. package/src/runtime/pubsub/redis.ts +0 -106
package/dist/index.d.ts CHANGED
@@ -27,9 +27,9 @@ export declare namespace neemata {
27
27
  rpcStreamAbortSignal: import("@nmtjs/core").DependencyOptional<import("@nmtjs/core").LazyInjectable<AbortSignal, import("@nmtjs/core").Scope.Call>>;
28
28
  }, import("@nmtjs/core").Scope.Global, AbortSignal>;
29
29
  createBlob: import("@nmtjs/core").LazyInjectable<(source: string | ArrayBuffer | Blob | File | import("stream").Readable | ReadableStream<any> | Uint8Array<ArrayBufferLike>, metadata?: import("@nmtjs/protocol").ProtocolBlobMetadata | undefined) => import("@nmtjs/protocol").ProtocolBlobInterface, import("@nmtjs/core").Scope.Call>;
30
- pubSubAdapter: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").PubSubAdapterType, import("@nmtjs/core").Scope.Global>;
31
- pubSubPublish: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").PubSubPublish, import("@nmtjs/core").Scope.Global>;
32
- pubSubSubscribe: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").PubSubSubscribe, import("@nmtjs/core").Scope.Global>;
30
+ subscriptionAdapter: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").SubscriptionAdapterType, import("@nmtjs/core").Scope.Global>;
31
+ publish: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").PublishFn, import("@nmtjs/core").Scope.Global>;
32
+ subscribe: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").SubscribeFn, import("@nmtjs/core").Scope.Global>;
33
33
  jobManager: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").JobManagerInstance, import("@nmtjs/core").Scope.Global>;
34
34
  storeConfig: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").ServerStoreConfig, import("@nmtjs/core").Scope.Global>;
35
35
  workerType: import("@nmtjs/core").LazyInjectable<import("./runtime/enums.ts").WorkerType, import("@nmtjs/core").Scope.Global>;
@@ -61,9 +61,9 @@ export declare namespace neemata {
61
61
  rpcStreamAbortSignal: import("@nmtjs/core").DependencyOptional<import("@nmtjs/core").LazyInjectable<AbortSignal, import("@nmtjs/core").Scope.Call>>;
62
62
  }, import("@nmtjs/core").Scope.Global, AbortSignal>;
63
63
  createBlob: import("@nmtjs/core").LazyInjectable<(source: string | ArrayBuffer | Blob | File | import("stream").Readable | ReadableStream<any> | Uint8Array<ArrayBufferLike>, metadata?: import("@nmtjs/protocol").ProtocolBlobMetadata | undefined) => import("@nmtjs/protocol").ProtocolBlobInterface, import("@nmtjs/core").Scope.Call>;
64
- pubSubAdapter: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").PubSubAdapterType, import("@nmtjs/core").Scope.Global>;
65
- pubSubPublish: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").PubSubPublish, import("@nmtjs/core").Scope.Global>;
66
- pubSubSubscribe: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").PubSubSubscribe, import("@nmtjs/core").Scope.Global>;
64
+ subscriptionAdapter: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").SubscriptionAdapterType, import("@nmtjs/core").Scope.Global>;
65
+ publish: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").PublishFn, import("@nmtjs/core").Scope.Global>;
66
+ subscribe: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").SubscribeFn, import("@nmtjs/core").Scope.Global>;
67
67
  jobManager: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").JobManagerInstance, import("@nmtjs/core").Scope.Global>;
68
68
  storeConfig: import("@nmtjs/core").LazyInjectable<import("./runtime/index.ts").ServerStoreConfig, import("@nmtjs/core").Scope.Global>;
69
69
  workerType: import("@nmtjs/core").LazyInjectable<import("./runtime/enums.ts").WorkerType, import("@nmtjs/core").Scope.Global>;
@@ -11,6 +11,7 @@ export declare const LoggingCallMiddleware: (options?: {
11
11
  errorLevel?: "error" | "fatal" | "warn" | undefined;
12
12
  includePayload?: boolean | undefined;
13
13
  includeResponse?: boolean | undefined;
14
+ includeStreamChunks?: boolean | undefined;
14
15
  }) => import("./middlewares.ts").Middleware<{
15
16
  logger: import("@nmtjs/core").FactoryInjectable<import("pino").Logger, {
16
17
  logger: import("@nmtjs/core").LazyInjectable<import("pino").Logger, import("@nmtjs/core").Scope.Global>;
@@ -21,26 +21,28 @@ export const LoggingCallContextMiddleware = (cb = defaultContext) => createMiddl
21
21
  });
22
22
  },
23
23
  });
24
- export const LoggingCallMiddleware = (options = { level: 'info', includePayload: true, includeResponse: true }) => createMiddleware({
24
+ export const LoggingCallMiddleware = (options = {}) => createMiddleware({
25
25
  dependencies: { logger: CoreInjectables.logger('RPC') },
26
26
  handle: async ({ logger }, call, next, payload) => {
27
- const logFn = logger[options.level || 'info'].bind(logger);
28
- const errorLogFn = logger[options.errorLevel || 'error'].bind(logger);
29
- logFn(options.includePayload
27
+ const { includePayload, includeResponse, includeStreamChunks, level, errorLevel, } = {
28
+ level: 'info',
29
+ errorLevel: 'error',
30
+ includePayload: true,
31
+ includeResponse: true,
32
+ includeStreamChunks: true,
33
+ ...options,
34
+ };
35
+ const logFn = logger[level].bind(logger);
36
+ const errorLogFn = logger[errorLevel].bind(logger);
37
+ logFn(includePayload
30
38
  ? { procedure: call.procedure.contract.name, payload: payload }
31
39
  : { procedure: call.procedure.contract.name }, 'RPC call');
32
40
  const isIterableProcedure = IsStreamProcedureContract(call.procedure.contract);
33
41
  try {
34
42
  const response = await next();
35
- if (options.includeResponse) {
43
+ if (includeResponse) {
36
44
  if (isIterableProcedure) {
37
45
  logFn({ result: 'success', response: 'Stream' }, 'RPC response');
38
- return async function* (...args) {
39
- for await (const chunk of response(...args)) {
40
- logFn({ callId: call.callId, chunk }, 'RPC stream chunk');
41
- yield chunk;
42
- }
43
- };
44
46
  }
45
47
  else {
46
48
  logFn({ result: 'success', response }, 'RPC response');
@@ -49,6 +51,21 @@ export const LoggingCallMiddleware = (options = { level: 'info', includePayload:
49
51
  else {
50
52
  logFn({ result: 'success' }, 'RPC response');
51
53
  }
54
+ if (isIterableProcedure && includeStreamChunks) {
55
+ return async function* (...args) {
56
+ try {
57
+ for await (const chunk of response(...args)) {
58
+ logFn({ callId: call.callId, chunk }, 'RPC stream chunk');
59
+ yield chunk;
60
+ }
61
+ logFn({ callId: call.callId }, 'RPC stream end');
62
+ }
63
+ catch (error) {
64
+ errorLogFn({ callId: call.callId, error }, 'RPC stream error');
65
+ throw error;
66
+ }
67
+ };
68
+ }
52
69
  return response;
53
70
  }
54
71
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/logging.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/logging.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,6 @@ export * from './jobs/router.ts';
9
9
  export * from './jobs/step.ts';
10
10
  export * from './jobs/types.ts';
11
11
  export * from './plugin.ts';
12
- export * from './pubsub/manager.ts';
13
- export * from './pubsub/redis.ts';
14
12
  export * from './runtime.ts';
15
13
  export * from './scheduler/index.ts';
16
14
  export * from './server/config.ts';
@@ -24,6 +22,8 @@ export * from './server/server.ts';
24
22
  export * from './server/types.ts';
25
23
  export * from './server/worker-pool.ts';
26
24
  export * from './store/index.ts';
25
+ export * from './subscription/manager.ts';
26
+ export * from './subscription/redis.ts';
27
27
  export * from './types.ts';
28
28
  export * from './workers/application.ts';
29
29
  export * from './workers/base.ts';
@@ -9,8 +9,6 @@ export * from './jobs/router.js';
9
9
  export * from './jobs/step.js';
10
10
  export * from './jobs/types.js';
11
11
  export * from './plugin.js';
12
- export * from './pubsub/manager.js';
13
- export * from './pubsub/redis.js';
14
12
  export * from './runtime.js';
15
13
  export * from './scheduler/index.js';
16
14
  export * from './server/config.js';
@@ -24,6 +22,8 @@ export * from './server/server.js';
24
22
  export * from './server/types.js';
25
23
  export * from './server/worker-pool.js';
26
24
  export * from './store/index.js';
25
+ export * from './subscription/manager.js';
26
+ export * from './subscription/redis.js';
27
27
  export * from './types.js';
28
28
  export * from './workers/application.js';
29
29
  export * from './workers/base.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,YAAY,CAAA;AAC1B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA"}
@@ -2,11 +2,11 @@ import { Scope } from '@nmtjs/core';
2
2
  import type { JobWorkerPool, WorkerType } from './enums.ts';
3
3
  import type { JobManagerInstance } from './jobs/manager.ts';
4
4
  import type { JobExecutionContext, SaveJobProgress } from './jobs/types.ts';
5
- import type { PubSubAdapterType, PubSubPublish, PubSubSubscribe } from './pubsub/manager.ts';
6
5
  import type { ServerStoreConfig } from './server/config.ts';
7
- export declare const pubSubAdapter: import("@nmtjs/core").LazyInjectable<PubSubAdapterType, Scope.Global>;
8
- export declare const pubSubPublish: import("@nmtjs/core").LazyInjectable<PubSubPublish, Scope.Global>;
9
- export declare const pubSubSubscribe: import("@nmtjs/core").LazyInjectable<PubSubSubscribe, Scope.Global>;
6
+ import type { PublishFn, SubscribeFn, SubscriptionAdapterType } from './subscription/manager.ts';
7
+ export declare const subscriptionAdapter: import("@nmtjs/core").LazyInjectable<SubscriptionAdapterType, Scope.Global>;
8
+ export declare const publish: import("@nmtjs/core").LazyInjectable<PublishFn, Scope.Global>;
9
+ export declare const subscribe: import("@nmtjs/core").LazyInjectable<SubscribeFn, Scope.Global>;
10
10
  export declare const jobManager: import("@nmtjs/core").LazyInjectable<JobManagerInstance, Scope.Global>;
11
11
  export declare const storeConfig: import("@nmtjs/core").LazyInjectable<ServerStoreConfig, Scope.Global>;
12
12
  export declare const workerType: import("@nmtjs/core").LazyInjectable<WorkerType, Scope.Global>;
@@ -15,9 +15,9 @@ export declare const jobAbortSignal: import("@nmtjs/core").LazyInjectable<AbortS
15
15
  export declare const saveJobProgress: import("@nmtjs/core").LazyInjectable<SaveJobProgress, Scope.Global>;
16
16
  export declare const currentJobInfo: import("@nmtjs/core").LazyInjectable<JobExecutionContext, Scope.Global>;
17
17
  export declare const RuntimeInjectables: {
18
- pubSubAdapter: import("@nmtjs/core").LazyInjectable<PubSubAdapterType, Scope.Global>;
19
- pubSubPublish: import("@nmtjs/core").LazyInjectable<PubSubPublish, Scope.Global>;
20
- pubSubSubscribe: import("@nmtjs/core").LazyInjectable<PubSubSubscribe, Scope.Global>;
18
+ subscriptionAdapter: import("@nmtjs/core").LazyInjectable<SubscriptionAdapterType, Scope.Global>;
19
+ publish: import("@nmtjs/core").LazyInjectable<PublishFn, Scope.Global>;
20
+ subscribe: import("@nmtjs/core").LazyInjectable<SubscribeFn, Scope.Global>;
21
21
  jobManager: import("@nmtjs/core").LazyInjectable<JobManagerInstance, Scope.Global>;
22
22
  storeConfig: import("@nmtjs/core").LazyInjectable<ServerStoreConfig, Scope.Global>;
23
23
  workerType: import("@nmtjs/core").LazyInjectable<WorkerType, Scope.Global>;
@@ -1,7 +1,7 @@
1
1
  import { createLazyInjectable, Scope } from '@nmtjs/core';
2
- export const pubSubAdapter = createLazyInjectable(Scope.Global, 'PubSubAdapter');
3
- export const pubSubPublish = createLazyInjectable(Scope.Global, 'PubSubPublish');
4
- export const pubSubSubscribe = createLazyInjectable(Scope.Global, 'PubSubSubscribe');
2
+ export const subscriptionAdapter = createLazyInjectable(Scope.Global, 'SubscriptionAdapter');
3
+ export const publish = createLazyInjectable(Scope.Global, 'Publish');
4
+ export const subscribe = createLazyInjectable(Scope.Global, 'Subscribe');
5
5
  export const jobManager = createLazyInjectable(Scope.Global, 'JobManager');
6
6
  export const storeConfig = createLazyInjectable(Scope.Global, 'StoreConfig');
7
7
  export const workerType = createLazyInjectable(Scope.Global, 'WorkerType');
@@ -10,9 +10,9 @@ export const jobAbortSignal = createLazyInjectable(Scope.Global, 'JobAbortSignal
10
10
  export const saveJobProgress = createLazyInjectable(Scope.Global, 'SaveJobProgress');
11
11
  export const currentJobInfo = createLazyInjectable(Scope.Global, 'CurrentJobInfo');
12
12
  export const RuntimeInjectables = {
13
- pubSubAdapter,
14
- pubSubPublish,
15
- pubSubSubscribe,
13
+ subscriptionAdapter,
14
+ publish,
15
+ subscribe,
16
16
  jobManager,
17
17
  storeConfig,
18
18
  workerType,
@@ -1 +1 @@
1
- {"version":3,"file":"injectables.js","sourceRoot":"","sources":["../../src/runtime/injectables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAYzD,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAC/C,KAAK,CAAC,MAAM,EACZ,eAAe,CAChB,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAC/C,KAAK,CAAC,MAAM,EACZ,eAAe,CAChB,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CACjD,KAAK,CAAC,MAAM,EACZ,iBAAiB,CAClB,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAC5C,KAAK,CAAC,MAAM,EACZ,YAAY,CACb,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAC7C,KAAK,CAAC,MAAM,EACZ,aAAa,CACd,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAC5C,KAAK,CAAC,MAAM,EACZ,YAAY,CACb,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAC/C,KAAK,CAAC,MAAM,EACZ,eAAe,CAChB,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAChD,KAAK,CAAC,MAAM,EACZ,gBAAgB,CACjB,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CACjD,KAAK,CAAC,MAAM,EACZ,iBAAiB,CAClB,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAChD,KAAK,CAAC,MAAM,EACZ,gBAAgB,CACjB,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,aAAa;IACb,aAAa;IACb,eAAe;IACf,UAAU;IACV,WAAW;IACX,UAAU;IACV,aAAa;IACb,cAAc;IACd,eAAe;IACf,cAAc;CACf,CAAA"}
1
+ {"version":3,"file":"injectables.js","sourceRoot":"","sources":["../../src/runtime/injectables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAYzD,MAAM,CAAC,MAAM,mBAAmB,GAC9B,oBAAoB,CAClB,KAAK,CAAC,MAAM,EACZ,qBAAqB,CACtB,CAAA;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,oBAAoB,CAAY,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAE/E,MAAM,CAAC,MAAM,SAAS,GAAG,oBAAoB,CAC3C,KAAK,CAAC,MAAM,EACZ,WAAW,CACZ,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAC5C,KAAK,CAAC,MAAM,EACZ,YAAY,CACb,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAC7C,KAAK,CAAC,MAAM,EACZ,aAAa,CACd,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,oBAAoB,CAC5C,KAAK,CAAC,MAAM,EACZ,YAAY,CACb,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAC/C,KAAK,CAAC,MAAM,EACZ,eAAe,CAChB,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAChD,KAAK,CAAC,MAAM,EACZ,gBAAgB,CACjB,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CACjD,KAAK,CAAC,MAAM,EACZ,iBAAiB,CAClB,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAChD,KAAK,CAAC,MAAM,EACZ,gBAAgB,CACjB,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,mBAAmB;IACnB,OAAO;IACP,SAAS;IACT,UAAU;IACV,WAAW;IACX,UAAU;IACV,aAAa;IACb,cAAc;IACd,eAAe;IACf,cAAc;CACf,CAAA"}
@@ -5,8 +5,8 @@ import type { Applications } from 'nmtjs/runtime/types';
5
5
  import type { ApplicationConfig } from '../application/config.ts';
6
6
  import type { JobWorkerPool, StoreType } from '../enums.ts';
7
7
  import type { AnyJob } from '../jobs/job.ts';
8
- import type { PubSubAdapterType } from '../pubsub/manager.ts';
9
8
  import type { JobsSchedulerOptions } from '../scheduler/index.ts';
9
+ import type { SubscriptionAdapterType } from '../subscription/manager.ts';
10
10
  import type { StoreTypeOptions } from '../types.ts';
11
11
  import { kServerConfig } from '../constants.ts';
12
12
  export type ServerPoolOptions = {
@@ -82,8 +82,8 @@ export interface ServerConfigInit {
82
82
  };
83
83
  jobs?: ServerJobsConfig;
84
84
  commands?: {};
85
- pubsub?: {
86
- adapter: PubSubAdapterType;
85
+ subscription?: {
86
+ adapter: SubscriptionAdapterType;
87
87
  };
88
88
  deploymentId?: string;
89
89
  metrics?: {
@@ -144,7 +144,7 @@ export interface ServerConfig {
144
144
  ui?: ServerJobsConfig['ui'];
145
145
  };
146
146
  commands?: {};
147
- pubsub: ServerConfigInit['pubsub'];
147
+ subscription: ServerConfigInit['subscription'];
148
148
  deploymentId: ServerConfigInit['deploymentId'];
149
149
  metrics?: ServerConfigInit['metrics'];
150
150
  }
@@ -1,6 +1,6 @@
1
1
  import { kServerConfig } from '../constants.js';
2
2
  export function defineServer(options) {
3
- const { deploymentId, logger, commands, proxy, store, applications, pubsub, metrics, } = options;
3
+ const { deploymentId, logger, commands, proxy, store, applications, subscription, metrics, } = options;
4
4
  let jobs;
5
5
  if (options.jobs) {
6
6
  const map = new Map();
@@ -23,7 +23,7 @@ export function defineServer(options) {
23
23
  proxy,
24
24
  store,
25
25
  applications,
26
- pubsub,
26
+ subscription,
27
27
  jobs,
28
28
  metrics,
29
29
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/runtime/server/config.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAgJ/C,MAAM,UAAU,YAAY,CAAC,OAAyB,EAAgB;IACpE,MAAM,EACJ,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,KAAK,EACL,KAAK,EACL,YAAY,EACZ,MAAM,EACN,OAAO,GACR,GAAG,OAAO,CAAA;IAEX,IAAI,IAAsC,CAAA;IAC1C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;QACrC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACjE,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE;YACzD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACxB,IAAI,GAAG;YACL,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;YACzB,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;YACjC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;SACpB,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,CAAC,aAAa,CAAC,EAAE,IAAI;QACrB,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,KAAK;QACL,KAAK;QACL,YAAY;QACZ,MAAM;QACN,IAAI;QACJ,OAAO;KACC,CAAC,CAAA;AAAA,CACZ;AAED,MAAM,UAAU,cAAc,CAAC,KAAU,EAAyB;IAChE,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;AAAA,CACvC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/runtime/server/config.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAgJ/C,MAAM,UAAU,YAAY,CAAC,OAAyB,EAAgB;IACpE,MAAM,EACJ,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,KAAK,EACL,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,OAAO,GACR,GAAG,OAAO,CAAA;IAEX,IAAI,IAAsC,CAAA;IAC1C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;QACrC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACjE,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE;YACzD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACxB,IAAI,GAAG;YACL,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;YACzB,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;YACjC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;SACpB,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,CAAC,aAAa,CAAC,EAAE,IAAI;QACrB,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,KAAK;QACL,KAAK;QACL,YAAY;QACZ,YAAY;QACZ,IAAI;QACJ,OAAO;KACC,CAAC,CAAA;AAAA,CACZ;AAED,MAAM,UAAU,cAAc,CAAC,KAAU,EAAyB;IAChE,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;AAAA,CACvC"}
@@ -2,22 +2,22 @@ import { Readable } from 'node:stream';
2
2
  import type { TAnyEventContract, TAnySubscriptionContract } from '@nmtjs/contract';
3
3
  import type { Container, Logger } from '@nmtjs/core';
4
4
  import type { t } from '@nmtjs/type';
5
- export type PubSubAdapterEvent = {
5
+ export type SubscriptionAdapterEvent = {
6
6
  channel: string;
7
7
  payload: any;
8
8
  };
9
- export interface PubSubAdapterType {
9
+ export interface SubscriptionAdapterType {
10
10
  publish(channel: string, payload: any): Promise<boolean>;
11
- subscribe(channel: string, signal?: AbortSignal): AsyncGenerator<PubSubAdapterEvent>;
11
+ subscribe(channel: string, signal?: AbortSignal): AsyncGenerator<SubscriptionAdapterEvent>;
12
12
  initialize(): Promise<void>;
13
13
  dispose(): Promise<void>;
14
14
  }
15
- export type PubSubChannel = {
15
+ export type SubscriptionChannel = {
16
16
  stream: Readable;
17
17
  subscription: TAnySubscriptionContract;
18
18
  event: TAnyEventContract;
19
19
  };
20
- export type PubSubSubscribe = <Contract extends TAnySubscriptionContract, Events extends {
20
+ export type SubscribeFn = <Contract extends TAnySubscriptionContract, Events extends {
21
21
  [K in keyof Contract['events']]?: true;
22
22
  }>(subscription: Contract, events: Events, options: Contract['options'], signal?: AbortSignal) => Promise<Omit<Readable, typeof Symbol.asyncIterator> & {
23
23
  [Symbol.asyncIterator]: () => AsyncIterator<{} extends Events ? {
@@ -32,17 +32,18 @@ export type PubSubSubscribe = <Contract extends TAnySubscriptionContract, Events
32
32
  } : never;
33
33
  }[keyof Events]>;
34
34
  }>;
35
- export type PubSubPublish = <S extends TAnySubscriptionContract, E extends S['events'][keyof S['events']]>(event: E, options: S['options'], data: t.infer.decode.input<E['payload']>) => Promise<boolean>;
36
- export type PubSubManagerOptions = {
35
+ export type PublishFn = <S extends TAnySubscriptionContract, E extends S['events'][keyof S['events']]>(event: E, options: S['options'], data: t.infer.decode.input<E['payload']>) => Promise<boolean>;
36
+ export type SubscriptionManagerOptions = {
37
37
  logger: Logger;
38
38
  container: Container;
39
39
  };
40
- export declare class PubSubManager {
41
- protected readonly options: PubSubManagerOptions;
42
- readonly subscriptions: Map<string, PubSubChannel>;
43
- constructor(options: PubSubManagerOptions);
44
- protected get adapter(): Promise<PubSubAdapterType>;
45
- subscribe: PubSubSubscribe;
46
- publish: PubSubPublish;
40
+ export declare class SubscriptionManager {
41
+ protected readonly options: SubscriptionManagerOptions;
42
+ readonly subscriptions: Map<string, SubscriptionChannel>;
43
+ protected readonly logger: Logger;
44
+ constructor(options: SubscriptionManagerOptions);
45
+ protected get adapter(): Promise<SubscriptionAdapterType>;
46
+ subscribe: SubscribeFn;
47
+ publish: PublishFn;
47
48
  private createEventStream;
48
49
  }
@@ -2,57 +2,101 @@ import assert from 'node:assert';
2
2
  import { createHash } from 'node:crypto';
3
3
  import { PassThrough, Readable } from 'node:stream';
4
4
  import { isAbortError } from '@nmtjs/common';
5
- import { pubSubAdapter } from '../injectables.js';
6
- export class PubSubManager {
5
+ import { subscriptionAdapter } from '../injectables.js';
6
+ export class SubscriptionManager {
7
7
  options;
8
8
  subscriptions = new Map();
9
+ logger;
9
10
  constructor(options) {
10
11
  this.options = options;
12
+ this.logger = options.logger.child({ component: SubscriptionManager.name });
11
13
  }
12
14
  get adapter() {
13
- return this.options.container.resolve(pubSubAdapter);
15
+ return this.options.container.resolve(subscriptionAdapter);
14
16
  }
15
17
  subscribe = async (subscription, events, options, signal) => {
16
18
  const adapter = await this.adapter;
17
19
  const eventKeys = Object.keys(events).length === 0
18
20
  ? Object.keys(subscription.events)
19
21
  : Object.keys(events);
22
+ this.logger.debug({ subscription: subscription.name, eventCount: eventKeys.length }, 'Opening subscription');
20
23
  const streams = Array(eventKeys.length);
21
24
  for (const index in eventKeys) {
22
25
  const event = subscription.events[eventKeys[index]];
23
26
  const channel = getChannelName(event, options);
24
27
  if (this.subscriptions.has(channel)) {
25
28
  streams[index] = this.subscriptions.get(channel).stream;
29
+ this.logger.trace({
30
+ channel,
31
+ event: event.name,
32
+ activeChannels: this.subscriptions.size,
33
+ }, 'Reusing pubsub channel stream');
26
34
  }
27
35
  else {
28
36
  const iterable = adapter.subscribe(channel, signal);
29
37
  const stream = this.createEventStream(iterable);
30
- stream.on('close', () => this.subscriptions.delete(channel));
38
+ stream.on('close', () => {
39
+ this.subscriptions.delete(channel);
40
+ this.logger.debug({
41
+ channel,
42
+ event: event.name,
43
+ activeChannels: this.subscriptions.size,
44
+ }, 'Pubsub channel stream closed');
45
+ });
46
+ stream.on('error', (error) => {
47
+ this.logger.warn({ channel, event: event.name, error }, 'Pubsub channel stream failed');
48
+ });
31
49
  streams[index] = stream;
32
50
  this.subscriptions.set(channel, { subscription, event, stream });
51
+ this.logger.debug({
52
+ channel,
53
+ event: event.name,
54
+ activeChannels: this.subscriptions.size,
55
+ }, 'Creating channel stream');
33
56
  }
34
57
  }
35
- return mergeEventStreams(streams, signal);
58
+ const mergedStream = mergeEventStreams(streams, signal);
59
+ mergedStream.once('close', () => {
60
+ this.logger.debug({ subscription: subscription.name, eventCount: eventKeys.length }, 'Pubsub subscription stream closed');
61
+ });
62
+ mergedStream.once('error', (error) => {
63
+ this.logger.warn({
64
+ subscription: subscription.name,
65
+ eventCount: eventKeys.length,
66
+ error,
67
+ }, 'Pubsub subscription stream failed');
68
+ });
69
+ return mergedStream;
36
70
  };
37
71
  publish = async (event, options, data) => {
38
72
  const adapter = await this.adapter;
39
73
  const channel = getChannelName(event, options);
74
+ this.logger.trace({ channel, event: event.name }, 'Publishing pubsub event');
40
75
  try {
41
76
  const payload = event.payload.encode(data);
42
- return await adapter.publish(channel, payload);
77
+ const published = await adapter.publish(channel, payload);
78
+ if (published) {
79
+ this.logger.trace({ channel, event: event.name }, 'Published pubsub event');
80
+ }
81
+ else {
82
+ this.logger.warn({ channel, event: event.name }, 'Pubsub adapter reported publish failure');
83
+ }
84
+ return published;
43
85
  }
44
86
  catch (error) {
45
- this.options.logger.error(`Failed to publish event "${event.name}" on channel "${channel}": ${error.message}`);
46
- return Promise.reject(error);
87
+ this.logger.error({ channel, event: event.name, error }, 'Failed to publish pubsub event');
88
+ throw error;
47
89
  }
48
90
  };
49
91
  createEventStream(iterable) {
50
92
  const { subscriptions } = this;
93
+ const logger = this.logger;
51
94
  return new Readable({
52
95
  objectMode: true,
53
96
  read() {
54
97
  iterable.next().then(({ value, done }) => {
55
98
  if (done) {
99
+ logger.trace('Pubsub adapter stream ended');
56
100
  this.push(null);
57
101
  }
58
102
  else {
@@ -61,18 +105,25 @@ export class PubSubManager {
61
105
  const { event } = subscription;
62
106
  try {
63
107
  const data = event.payload.decode(value.payload);
108
+ logger.trace({ channel: value.channel, event: event.name }, 'Received event');
64
109
  this.push({ event: event.name, data });
65
110
  }
66
111
  catch (error) {
112
+ logger.warn({ channel: value.channel, event: event.name, error }, 'Failed to decode pubsub event payload');
67
113
  this.destroy(error);
68
114
  }
69
115
  }
116
+ else {
117
+ logger.trace({ channel: value.channel }, 'Dropped pubsub event for inactive channel');
118
+ }
70
119
  }
71
120
  }, (error) => {
72
121
  if (isAbortError(error)) {
122
+ logger.trace('Pubsub adapter stream aborted');
73
123
  this.push(null);
74
124
  }
75
125
  else {
126
+ logger.warn({ error }, 'Pubsub adapter stream failed');
76
127
  this.destroy(error);
77
128
  }
78
129
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/runtime/subscription/manager.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AASnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAkEvD,MAAM,OAAO,mBAAmB;IAIC,OAAO;IAH7B,aAAa,GAAG,IAAI,GAAG,EAA+B,CAAA;IAC5C,MAAM,CAAQ;IAEjC,YAA+B,OAAmC,EAAE;uBAArC,OAAO;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAA;IAAA,CAC5E;IAED,IAAc,OAAO,GAAG;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAAA,CAC3D;IAED,SAAS,GAAgB,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;QACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAA;QAElC,MAAM,SAAS,GACb,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAC9B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEzB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,EACjE,sBAAsB,CACvB,CAAA;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAEvC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;YACnD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC9C,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,MAAM,CAAA;gBACxD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;oBACE,OAAO;oBACP,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;iBACxC,EACD,+BAA+B,CAChC,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;gBACnD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;gBAC/C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;oBACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;oBAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;wBACE,OAAO;wBACP,KAAK,EAAE,KAAK,CAAC,IAAI;wBACjB,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;qBACxC,EACD,8BAA8B,CAC/B,CAAA;gBAAA,CACF,CAAC,CAAA;gBACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EACrC,8BAA8B,CAC/B,CAAA;gBAAA,CACF,CAAC,CAAA;gBACF,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAA;gBACvB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;oBACE,OAAO;oBACP,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;iBACxC,EACD,yBAAyB,CAC1B,CAAA;YACH,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAEvD,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,EACjE,mCAAmC,CACpC,CAAA;QAAA,CACF,CAAC,CAAA;QACF,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;gBACE,YAAY,EAAE,YAAY,CAAC,IAAI;gBAC/B,UAAU,EAAE,SAAS,CAAC,MAAM;gBAC5B,KAAK;aACN,EACD,mCAAmC,CACpC,CAAA;QAAA,CACF,CAAC,CAAA;QAEF,OAAO,YAAY,CAAA;IAAA,CACpB,CAAA;IAED,OAAO,GAAc,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAA;QAElC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAE9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAA;QAE5E,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC1C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAEzD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAC9B,wBAAwB,CACzB,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAC9B,yCAAyC,CAC1C,CAAA;YACH,CAAC;YAED,OAAO,SAAS,CAAA;QAClB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EACrC,gCAAgC,CACjC,CAAA;YACD,MAAM,KAAK,CAAA;QACb,CAAC;IAAA,CACF,CAAA;IAEO,iBAAiB,CACvB,QAAkD,EACxC;QACV,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAE1B,OAAO,IAAI,QAAQ,CAAC;YAClB,UAAU,EAAE,IAAI;YAChB,IAAI,GAAG;gBACL,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAClB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;oBACnB,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;wBAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACjB,CAAC;yBAAM,CAAC;wBACN,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;wBACrD,IAAI,YAAY,EAAE,CAAC;4BACjB,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAA;4BAC9B,IAAI,CAAC;gCACH,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;gCAChD,MAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAC7C,gBAAgB,CACjB,CAAA;gCACD,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;4BACxC,CAAC;4BAAC,OAAO,KAAU,EAAE,CAAC;gCACpB,MAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EACpD,uCAAuC,CACxC,CAAA;gCACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;4BACrB,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAC1B,2CAA2C,CAC5C,CAAA;wBACH,CAAC;oBACH,CAAC;gBAAA,CACF,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;oBACT,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;wBACxB,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;wBAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACjB,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAA;wBACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;oBACrB,CAAC;gBAAA,CACF,CACF,CAAA;YAAA,CACF;SACF,CAAC,CAAA;IAAA,CACH;CACF;AAED,SAAS,MAAM,CAAC,GAAG,IAAS,EAAE;IAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAAA,CACtC;AAED,SAAS,cAAc,CACrB,QAAW,EACX,OAAqB,EACrB;IACA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAA;IACxD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAAA,CAClC;AAED,SAAS,iBAAiB,CAAC,OAA0C,EAAU;IAC7E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;SACxC,IAAI,CAAC,GAAG,CAAC,CAAA;IACZ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACvB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAAA,CAChC;AAED,SAAS,iBAAiB,CACxB,OAAmB,EACnB,MAAoB,EACV;IACV,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,MAAM;QACN,UAAU,EAAE,IAAI;QAChB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAA;IAEF,IAAI,KAAK,GAAG,CAAC,CAAA;IAEb,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;YACvB,KAAK,EAAE,CAAA;YACP,IAAI,KAAK,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC7B,WAAW,CAAC,GAAG,EAAE,CAAA;YACnB,CAAC;QAAA,CACF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,WAAW,CAAA;AAAA,CACnB"}
@@ -1,16 +1,18 @@
1
1
  import EventEmitter from 'node:events';
2
+ import type { Logger } from '@nmtjs/core';
2
3
  import type { RuntimePlugin } from '../plugin.ts';
3
4
  import type { Store } from '../types.ts';
4
- import type { PubSubAdapterEvent, PubSubAdapterType } from './manager.ts';
5
- export declare class RedisPubSubAdapter implements PubSubAdapterType {
5
+ import type { SubscriptionAdapterEvent, SubscriptionAdapterType } from './manager.ts';
6
+ export declare class RedisSubscriptionAdapter implements SubscriptionAdapterType {
6
7
  protected readonly client: Store;
7
8
  protected readonly events: EventEmitter<[never]>;
8
9
  protected readonly listeners: Map<string, number>;
10
+ protected readonly logger?: Logger;
9
11
  protected subscriberClient?: Store;
10
- constructor(client: Store);
12
+ constructor(client: Store, logger?: Logger);
11
13
  initialize(): Promise<void>;
12
14
  dispose(): Promise<void>;
13
15
  publish(channel: string, payload: any): Promise<boolean>;
14
- subscribe(channel: string, signal?: AbortSignal): AsyncGenerator<PubSubAdapterEvent>;
16
+ subscribe(channel: string, signal?: AbortSignal): AsyncGenerator<SubscriptionAdapterEvent>;
15
17
  }
16
- export declare const RedisPubSubAdapterPlugin: () => RuntimePlugin;
18
+ export declare const RedisSubscriptionAdapterPlugin: () => RuntimePlugin;