@autofleet/rabbit 4.1.0-beta.0 → 4.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.
Files changed (60) hide show
  1. package/dist/index.d.ts +81 -76
  2. package/dist/index.js +581 -472
  3. package/dist/index.js.map +1 -0
  4. package/dist/lib/celery.js +1 -0
  5. package/dist/lib/celery.js.map +1 -0
  6. package/dist/lib/consts.d.ts +12 -4
  7. package/dist/lib/consts.js +12 -3
  8. package/dist/lib/consts.js.map +1 -0
  9. package/dist/lib/rabbitError.js +1 -0
  10. package/dist/lib/rabbitError.js.map +1 -0
  11. package/dist/lib/redis.d.ts +2 -1
  12. package/dist/lib/redis.js +3 -8
  13. package/dist/lib/redis.js.map +1 -0
  14. package/dist/lib/types.d.ts +18 -5
  15. package/dist/lib/types.js +1 -0
  16. package/dist/lib/types.js.map +1 -0
  17. package/dist/lib/utils.d.ts +12 -3
  18. package/dist/lib/utils.js +23 -13
  19. package/dist/lib/utils.js.map +1 -0
  20. package/dist/logger.js +1 -0
  21. package/dist/logger.js.map +1 -0
  22. package/dist/{mock.d.ts → mock/index.d.ts} +1 -1
  23. package/dist/{mock.js → mock/index.js} +2 -1
  24. package/dist/mock/index.js.map +1 -0
  25. package/dist/mock/vitest.d.ts +13 -0
  26. package/dist/mock/vitest.js +18 -0
  27. package/dist/mock/vitest.js.map +1 -0
  28. package/package.json +24 -19
  29. package/src/index.ts +702 -591
  30. package/src/lib/consts.ts +17 -4
  31. package/src/lib/redis.ts +2 -7
  32. package/src/lib/types.ts +22 -7
  33. package/src/lib/utils.ts +35 -12
  34. package/src/{mock.ts → mock/index.ts} +2 -2
  35. package/src/mock/vitest.ts +24 -0
  36. package/src/redis-lock.d.ts +5 -3
  37. package/tsconfig.build.json +5 -0
  38. package/tsconfig.json +2 -2
  39. package/vitest.config.ts +17 -0
  40. package/coverage/clover.xml +0 -669
  41. package/coverage/coverage-final.json +0 -9
  42. package/coverage/lcov-report/base.css +0 -224
  43. package/coverage/lcov-report/block-navigation.js +0 -87
  44. package/coverage/lcov-report/favicon.png +0 -0
  45. package/coverage/lcov-report/index.html +0 -131
  46. package/coverage/lcov-report/prettify.css +0 -1
  47. package/coverage/lcov-report/prettify.js +0 -2
  48. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  49. package/coverage/lcov-report/sorter.js +0 -196
  50. package/coverage/lcov-report/src/index.html +0 -131
  51. package/coverage/lcov-report/src/index.ts.html +0 -3826
  52. package/coverage/lcov-report/src/lib/celery.ts.html +0 -352
  53. package/coverage/lcov-report/src/lib/consts.ts.html +0 -142
  54. package/coverage/lcov-report/src/lib/index.html +0 -191
  55. package/coverage/lcov-report/src/lib/rabbitError.ts.html +0 -103
  56. package/coverage/lcov-report/src/lib/redis.ts.html +0 -133
  57. package/coverage/lcov-report/src/lib/types.ts.html +0 -268
  58. package/coverage/lcov-report/src/lib/utils.ts.html +0 -142
  59. package/coverage/lcov-report/src/logger.ts.html +0 -100
  60. package/coverage/lcov.info +0 -1076
package/dist/index.d.ts CHANGED
@@ -1,23 +1,23 @@
1
1
  /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- import { AmqpConnectionManager, ChannelWrapper, CreateChannelOpts } from 'amqp-connection-manager';
2
+ import { EventEmitter } from 'node:events';
3
+ import RedisLock from 'redis-lock';
4
+ import { type AmqpConnectionManager, type ChannelWrapper, type CreateChannelOpts } from 'amqp-connection-manager';
5
+ import type { PublishOptions } from 'amqp-connection-manager/dist/types/ChannelWrapper';
4
6
  import { ConfirmChannel, ConsumeMessage, Options, Replies } from 'amqplib';
5
- import { RedisConfig } from './lib/redis';
6
- import { CallbackFunction, ConsumeMessageOrNull, ConsumeOptions, CustomMessageHeaders, QueuesCache, RedisLockType, ExchangesCache, QueueSetupPromisesDictionary, AssertExchangePromisesDictionary } from './lib/types';
7
+ import type { LoggerInstanceManager } from '@autofleet/logger';
8
+ import getRedisInstance, { RedisConfig } from './lib/redis';
9
+ import { type AssertExchangePromisesDictionary, type CallbackFunction, type ConnectionData, type ConsumeMessageOrNull, type ConsumeOptions, type CustomMessageHeaders, type ExchangesCache, type Message, type NackOptions, type QueuesCache, type QueueSetupPromisesDictionary } from './lib/types';
7
10
  export interface IAfRabbitMq {
8
- ack: any;
9
- nack: any;
10
- assertChannel: any;
11
- assertExchange: any;
12
- assertQueue: any;
13
- consume: any;
14
- consumeFromExchange: any;
15
- publish: any;
16
- sendToQueue: any;
17
- redisClient?: any;
18
- }
19
- interface NackOptions {
20
- skipRetry?: boolean;
11
+ ack(channel: ConfirmChannel, msg: ConsumeMessageOrNull, shouldUpdateRedisTimestamp?: boolean, releaseLock?: (() => Promise<void>) | null): (userMsg: ConsumeMessage) => Promise<void>;
12
+ nack(channel: ConfirmChannel, queue: string, options: ConsumeOptions, deadQueueOptions: Options.AssertQueue, msg: ConsumeMessageOrNull, releaseLock?: () => Promise<void>): (userMsg: ConsumeMessageOrNull, nackOptions?: NackOptions) => Promise<void>;
13
+ assertChannel(options?: assertChannelOpts): Promise<ChannelWrapper>;
14
+ assertExchange(exchangeName: string, connection: ConnectionData): Promise<Replies.AssertExchange>;
15
+ assertQueue(queueName: string, options?: Options.AssertQueue | null): Promise<Replies.AssertQueue>;
16
+ consume(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<void>;
17
+ consumeFromExchange(queue: string, exchange: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<void>;
18
+ publish(exchange: string, content: any, customHeaders?: PublishOptions['headers']): Promise<void>;
19
+ sendToQueue(queue: string, content: any, options?: Options.AssertQueue | null, customHeaders?: PublishOptions['headers']): Promise<boolean | undefined>;
20
+ redisClient?: ReturnType<typeof getRedisInstance>;
21
21
  }
22
22
  export interface AfRabbitOptions {
23
23
  disableReconnect?: boolean;
@@ -27,102 +27,107 @@ export interface AfRabbitOptions {
27
27
  */
28
28
  dontGracefulShutdown?: boolean;
29
29
  /**
30
- * dont retry on creation error
30
+ * don't retry on creation error
31
31
  * @default false
32
32
  */
33
33
  dontRetryAssert?: boolean;
34
34
  rabbitHost?: string;
35
35
  vhost?: string;
36
+ logger?: LoggerInstanceManager;
36
37
  }
37
38
  type newChannelOpts = {
38
39
  name?: string;
39
40
  onClose?: null | ((args: any | null) => void);
40
41
  options?: CreateChannelOpts | undefined;
42
+ connection: ConnectionData;
41
43
  };
42
44
  type assertChannelOpts = {
43
45
  channelName?: string;
44
46
  force?: boolean;
47
+ connection: ConnectionData;
45
48
  };
46
49
  declare class RabbitMq implements IAfRabbitMq {
47
- static parseMsg(msg: any): any;
50
+ #private;
51
+ readonly options: AfRabbitOptions;
52
+ private readonly redisConfig?;
53
+ static parseMsg(msg: ConsumeMessage): Message;
48
54
  static validateName(type: string, name: string): void;
49
- static getPublishOptions(customHeaders?: CustomMessageHeaders): {
50
- timestamp: number;
51
- timeout: number;
52
- headers: {
53
- "x-af-user-id": any;
54
- "x-trace-id": any;
55
- redisTimestampValidationKey?: string | undefined;
56
- creationTimestamp: number;
57
- };
58
- };
59
- DISCONNECT_MSG: string;
60
- RECONNECT_MSG: string;
61
- channel: ChannelWrapper | null;
55
+ static getPublishOptions(customHeaders?: CustomMessageHeaders): PublishOptions;
56
+ readonly DISCONNECT_MSG = "rabbit: connection disconnect";
57
+ readonly RECONNECT_MSG = "rabbit: connection disconnect - reconnecting";
58
+ publishChannel: ChannelWrapper | null;
62
59
  publishChannelSetupPromise: Promise<ChannelWrapper> | null;
63
- blockReconnect: boolean | null | undefined;
64
- connection: AmqpConnectionManager | null | undefined;
65
- em: EventEmitter;
66
- creatingConnection: boolean;
67
- exchanges: ExchangesCache;
68
- queues: QueuesCache;
69
- queueSetupPromises: QueueSetupPromisesDictionary;
70
- assertExchangePromises: AssertExchangePromisesDictionary;
71
- options: AfRabbitOptions | undefined;
72
- redisClient: any;
73
- redisLock?: RedisLockType;
60
+ readonly publishConnection: ConnectionData;
61
+ readonly consumeConnection: ConnectionData;
62
+ readonly em: EventEmitter;
63
+ readonly exchanges: ExchangesCache;
64
+ readonly queues: QueuesCache;
65
+ readonly queueSetupPromises: QueueSetupPromisesDictionary;
66
+ readonly assertExchangePromises: AssertExchangePromisesDictionary;
67
+ readonly redisClient?: ReturnType<typeof getRedisInstance>;
68
+ readonly redisLock?: ReturnType<typeof RedisLock>;
74
69
  /** Array of consumers tags used for canceling consumption */
75
- consumersTags: Array<[ConfirmChannel, string]>;
76
- private consumers;
77
- private isVHostExist;
78
- oldChannel: ChannelWrapper | null;
70
+ readonly consumersTags: Map<string, {
71
+ channel: ConfirmChannel;
72
+ consumerTag: string;
73
+ }>;
74
+ private readonly consumersToRegister;
75
+ private doesVHostExist;
76
+ private readonly vhost;
77
+ private gracefulShutdownStarted;
78
+ oldPublishChannel: ChannelWrapper | null;
79
79
  oldPublishChannelSetupPromise: Promise<ChannelWrapper> | null;
80
- oldBlockReconnect: boolean | null | undefined;
81
- oldConnection: AmqpConnectionManager | null | undefined;
82
- oldEm: EventEmitter;
83
- oldCreatingConnection: boolean;
84
- oldExchanges: ExchangesCache;
85
- oldQueues: QueuesCache;
86
- oldQueueSetupPromises: QueueSetupPromisesDictionary;
87
- oldAssertExchangePromises: AssertExchangePromisesDictionary;
88
- oldConsumersTags: Array<[ConfirmChannel, string]>;
89
- private oldConsumers;
90
- constructor(options?: AfRabbitOptions, redisConfig?: RedisConfig);
80
+ readonly oldPublishConnection: ConnectionData;
81
+ readonly oldConsumeConnection: ConnectionData;
82
+ readonly oldEm: EventEmitter;
83
+ readonly oldExchanges: ExchangesCache;
84
+ readonly oldQueues: QueuesCache;
85
+ readonly oldQueueSetupPromises: QueueSetupPromisesDictionary;
86
+ readonly oldAssertExchangePromises: AssertExchangePromisesDictionary;
87
+ readonly oldConsumersTags: Map<string, {
88
+ channel: ConfirmChannel;
89
+ consumerTag: string;
90
+ }>;
91
+ private readonly oldConsumersToRegister;
92
+ constructor(options?: AfRabbitOptions, redisConfig?: RedisConfig | undefined);
93
+ private getRedisKey;
91
94
  private assertVHost;
92
95
  private shouldConsumeMessageByTimestamp;
93
- ack: (channel: ConfirmChannel, msg: ConsumeMessageOrNull, shouldUpdateRedisTimestamp?: boolean, releaseLock?: null) => (userMsg: ConsumeMessage) => Promise<any>;
94
- nack: (channel: ConfirmChannel, queue: string, options: any, deadQueueOptions: Options.AssertQueue, msg: ConsumeMessageOrNull, releaseLock: any) => (userMsg: ConsumeMessageOrNull, { skipRetry, }?: NackOptions) => Promise<any>;
95
- getConnection(): Promise<AmqpConnectionManager>;
96
- getNewChannel({ name, onClose, options }?: newChannelOpts): Promise<ChannelWrapper>;
97
- assertChannel({ force }?: assertChannelOpts): Promise<ChannelWrapper>;
98
- assertExchange(exchangeName: string, options?: any): Promise<any>;
96
+ ack: (channel: ConfirmChannel, msg: ConsumeMessageOrNull, shouldUpdateRedisTimestamp?: boolean, releaseLock?: (() => Promise<void>) | null) => (userMsg: ConsumeMessage) => Promise<void>;
97
+ nack: (channel: ConfirmChannel, queue: string, options: ConsumeOptions, deadQueueOptions: Options.AssertQueue, msg: ConsumeMessageOrNull, releaseLock?: (() => Promise<void>) | null) => (userMsg: ConsumeMessageOrNull, { skipRetry, }?: NackOptions) => Promise<void>;
98
+ getConnection(connection: ConnectionData): Promise<AmqpConnectionManager>;
99
+ getNewChannel({ name, onClose, options, connection, }: newChannelOpts): Promise<ChannelWrapper>;
100
+ assertChannel({ force, connection }: assertChannelOpts): Promise<ChannelWrapper>;
101
+ assertExchange(exchangeName: string, connection: ConnectionData): Promise<Replies.AssertExchange>;
99
102
  getQueueLength(queue: string): Promise<Replies.AssertQueue>;
100
103
  private deleteQueue;
101
104
  bindQueue(queue: string, exchange: string): Promise<void>;
102
105
  setupQueue(queueName: string, options?: Options.AssertQueue): Promise<Replies.AssertQueue>;
103
106
  static shouldUseQuorum(queueName: string): boolean;
104
- assertQueue(queueName: string, options?: Options.AssertQueue): Promise<any>;
107
+ assertQueue(queueName: string, options?: Options.AssertQueue): Promise<Replies.AssertQueue>;
105
108
  private saveConsumer;
106
- consume(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any>;
107
- consumeNew(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any>;
108
- consumeOld(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any>;
109
+ consume(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<void>;
110
+ consumeNew(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<void>;
111
+ consumeOld(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<void>;
109
112
  private lockRedisIfNeeded;
110
113
  private unlockRedisIfNeeded;
111
114
  private consumeFromRabbit;
112
- consumeFromExchange(queue: string, exchange: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any>;
113
- publish(exchange: string, content: any, customHeaders?: any, isQuorumQueue?: boolean): Promise<boolean>;
114
- sendToQueue(queue: string, content: any, options?: any, customHeaders?: any, isQuorumQueue?: boolean): Promise<boolean | undefined>;
115
+ consumeFromExchange(queue: string, exchange: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<void>;
116
+ publish(exchange: string, content: any, customHeaders?: PublishOptions['headers'], isQuorumQueue?: boolean): Promise<void>;
117
+ sendToQueue(queue: string, content: any, options?: Options.AssertQueue, customHeaders?: PublishOptions['headers'], isQuorumQueue?: boolean): Promise<boolean | undefined>;
115
118
  isConnected(): Promise<boolean>;
116
119
  gracefulShutdown(signal: string): Promise<void>;
117
120
  private consumeFromRabbitOld;
118
- getNewChannelOld({ name, onClose, options }?: newChannelOpts): Promise<ChannelWrapper>;
119
- getConnectionOld(): Promise<AmqpConnectionManager>;
121
+ getNewChannelOld({ name, onClose, options, connection, }: newChannelOpts): Promise<ChannelWrapper>;
122
+ getConnectionOld(connection: ConnectionData): Promise<AmqpConnectionManager>;
120
123
  private saveConsumerOld;
121
- assertQueueOld(queueName: string, options?: Options.AssertQueue): Promise<any>;
124
+ assertQueueOld(queueName: string, options?: Options.AssertQueue): Promise<Replies.AssertQueue>;
122
125
  setupQueueOld(queueName: string, options?: Options.AssertQueue): Promise<Replies.AssertQueue>;
123
- assertChannelOld({ force }?: assertChannelOpts): Promise<ChannelWrapper>;
126
+ assertChannelOld({ force, connection }: assertChannelOpts): Promise<ChannelWrapper>;
124
127
  private deleteQueueOld;
125
- assertExchangeOld(exchangeName: string, options?: any): Promise<any>;
128
+ assertExchangeOld(exchangeName: string, connection: ConnectionData): Promise<Replies.AssertExchange>;
129
+ isConnectedOld(): Promise<boolean>;
130
+ private maskURL;
126
131
  }
127
132
  export default RabbitMq;
128
133
  export { sendCeleryTaskViaHttp, } from './lib/celery';