@lindorm/iris 0.2.0 → 0.4.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 +338 -909
- package/dist/classes/IrisSession.d.ts +6 -4
- package/dist/classes/IrisSession.d.ts.map +1 -1
- package/dist/classes/IrisSession.js +6 -5
- package/dist/classes/IrisSession.js.map +1 -1
- package/dist/classes/IrisSource.d.ts +6 -5
- package/dist/classes/IrisSource.d.ts.map +1 -1
- package/dist/classes/IrisSource.js +52 -76
- package/dist/classes/IrisSource.js.map +1 -1
- package/dist/classes/index.d.ts +2 -2
- package/dist/classes/index.d.ts.map +1 -1
- package/dist/classes/index.js +2 -18
- package/dist/classes/index.js.map +1 -1
- package/dist/cli.js +9 -11
- package/dist/cli.js.map +1 -1
- package/dist/decorators/AbstractMessage.js +3 -7
- package/dist/decorators/AbstractMessage.js.map +1 -1
- package/dist/decorators/AfterConsume.d.ts +1 -1
- package/dist/decorators/AfterConsume.d.ts.map +1 -1
- package/dist/decorators/AfterConsume.js +3 -7
- package/dist/decorators/AfterConsume.js.map +1 -1
- package/dist/decorators/AfterPublish.d.ts +1 -1
- package/dist/decorators/AfterPublish.d.ts.map +1 -1
- package/dist/decorators/AfterPublish.js +3 -7
- package/dist/decorators/AfterPublish.js.map +1 -1
- package/dist/decorators/BeforeConsume.d.ts +1 -1
- package/dist/decorators/BeforeConsume.d.ts.map +1 -1
- package/dist/decorators/BeforeConsume.js +3 -7
- package/dist/decorators/BeforeConsume.js.map +1 -1
- package/dist/decorators/BeforePublish.d.ts +1 -1
- package/dist/decorators/BeforePublish.d.ts.map +1 -1
- package/dist/decorators/BeforePublish.js +3 -7
- package/dist/decorators/BeforePublish.js.map +1 -1
- package/dist/decorators/Broadcast.js +3 -7
- package/dist/decorators/Broadcast.js.map +1 -1
- package/dist/decorators/Compressed.d.ts +1 -1
- package/dist/decorators/Compressed.d.ts.map +1 -1
- package/dist/decorators/Compressed.js +3 -7
- package/dist/decorators/Compressed.js.map +1 -1
- package/dist/decorators/CorrelationField.js +5 -9
- package/dist/decorators/CorrelationField.js.map +1 -1
- package/dist/decorators/DeadLetter.js +3 -7
- package/dist/decorators/DeadLetter.js.map +1 -1
- package/dist/decorators/Default.d.ts +3 -0
- package/dist/decorators/Default.d.ts.map +1 -0
- package/dist/decorators/Default.js +9 -0
- package/dist/decorators/Default.js.map +1 -0
- package/dist/decorators/Delay.js +5 -9
- package/dist/decorators/Delay.js.map +1 -1
- package/dist/decorators/Encrypted.js +3 -7
- package/dist/decorators/Encrypted.js.map +1 -1
- package/dist/decorators/Enum.js +3 -7
- package/dist/decorators/Enum.js.map +1 -1
- package/dist/decorators/Expiry.js +5 -9
- package/dist/decorators/Expiry.js.map +1 -1
- package/dist/decorators/Field.d.ts +2 -3
- package/dist/decorators/Field.d.ts.map +1 -1
- package/dist/decorators/Field.js +7 -12
- package/dist/decorators/Field.js.map +1 -1
- package/dist/decorators/Generated.d.ts +2 -2
- package/dist/decorators/Generated.d.ts.map +1 -1
- package/dist/decorators/Generated.js +3 -7
- package/dist/decorators/Generated.js.map +1 -1
- package/dist/decorators/Header.js +3 -7
- package/dist/decorators/Header.js.map +1 -1
- package/dist/decorators/IdentifierField.js +5 -9
- package/dist/decorators/IdentifierField.js.map +1 -1
- package/dist/decorators/MandatoryField.js +3 -7
- package/dist/decorators/MandatoryField.js.map +1 -1
- package/dist/decorators/Max.js +3 -7
- package/dist/decorators/Max.js.map +1 -1
- package/dist/decorators/Message.d.ts +1 -1
- package/dist/decorators/Message.d.ts.map +1 -1
- package/dist/decorators/Message.js +5 -9
- package/dist/decorators/Message.js.map +1 -1
- package/dist/decorators/Min.js +3 -7
- package/dist/decorators/Min.js.map +1 -1
- package/dist/decorators/Namespace.js +3 -7
- package/dist/decorators/Namespace.js.map +1 -1
- package/dist/decorators/Nullable.d.ts +2 -0
- package/dist/decorators/Nullable.d.ts.map +1 -0
- package/dist/decorators/Nullable.js +9 -0
- package/dist/decorators/Nullable.js.map +1 -0
- package/dist/decorators/OnConsumeError.d.ts +1 -1
- package/dist/decorators/OnConsumeError.d.ts.map +1 -1
- package/dist/decorators/OnConsumeError.js +3 -7
- package/dist/decorators/OnConsumeError.js.map +1 -1
- package/dist/decorators/OnCreate.d.ts +1 -1
- package/dist/decorators/OnCreate.d.ts.map +1 -1
- package/dist/decorators/OnCreate.js +3 -7
- package/dist/decorators/OnCreate.js.map +1 -1
- package/dist/decorators/OnHydrate.d.ts +1 -1
- package/dist/decorators/OnHydrate.d.ts.map +1 -1
- package/dist/decorators/OnHydrate.js +3 -7
- package/dist/decorators/OnHydrate.js.map +1 -1
- package/dist/decorators/OnValidate.d.ts +1 -1
- package/dist/decorators/OnValidate.d.ts.map +1 -1
- package/dist/decorators/OnValidate.js +3 -7
- package/dist/decorators/OnValidate.js.map +1 -1
- package/dist/decorators/Optional.d.ts +2 -0
- package/dist/decorators/Optional.d.ts.map +1 -0
- package/dist/decorators/Optional.js +9 -0
- package/dist/decorators/Optional.js.map +1 -0
- package/dist/decorators/Persistent.js +3 -7
- package/dist/decorators/Persistent.js.map +1 -1
- package/dist/decorators/PersistentField.js +3 -7
- package/dist/decorators/PersistentField.js.map +1 -1
- package/dist/decorators/Priority.js +5 -9
- package/dist/decorators/Priority.js.map +1 -1
- package/dist/decorators/Retry.d.ts +1 -1
- package/dist/decorators/Retry.d.ts.map +1 -1
- package/dist/decorators/Retry.js +3 -7
- package/dist/decorators/Retry.js.map +1 -1
- package/dist/decorators/Schema.d.ts +1 -1
- package/dist/decorators/Schema.d.ts.map +1 -1
- package/dist/decorators/Schema.js +3 -7
- package/dist/decorators/Schema.js.map +1 -1
- package/dist/decorators/TimestampField.js +3 -7
- package/dist/decorators/TimestampField.js.map +1 -1
- package/dist/decorators/Topic.js +3 -7
- package/dist/decorators/Topic.js.map +1 -1
- package/dist/decorators/Transform.d.ts +1 -1
- package/dist/decorators/Transform.d.ts.map +1 -1
- package/dist/decorators/Transform.js +3 -7
- package/dist/decorators/Transform.js.map +1 -1
- package/dist/decorators/Version.js +5 -9
- package/dist/decorators/Version.js.map +1 -1
- package/dist/decorators/index.d.ts +38 -35
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +38 -51
- package/dist/decorators/index.js.map +1 -1
- package/dist/errors/IrisDriverError.d.ts +1 -1
- package/dist/errors/IrisDriverError.d.ts.map +1 -1
- package/dist/errors/IrisDriverError.js +2 -6
- package/dist/errors/IrisDriverError.js.map +1 -1
- package/dist/errors/IrisError.js +2 -6
- package/dist/errors/IrisError.js.map +1 -1
- package/dist/errors/IrisMetadataError.d.ts +1 -1
- package/dist/errors/IrisMetadataError.d.ts.map +1 -1
- package/dist/errors/IrisMetadataError.js +2 -6
- package/dist/errors/IrisMetadataError.js.map +1 -1
- package/dist/errors/IrisNotSupportedError.d.ts +1 -1
- package/dist/errors/IrisNotSupportedError.d.ts.map +1 -1
- package/dist/errors/IrisNotSupportedError.js +2 -6
- package/dist/errors/IrisNotSupportedError.js.map +1 -1
- package/dist/errors/IrisPublishError.d.ts +1 -1
- package/dist/errors/IrisPublishError.d.ts.map +1 -1
- package/dist/errors/IrisPublishError.js +2 -6
- package/dist/errors/IrisPublishError.js.map +1 -1
- package/dist/errors/IrisScannerError.d.ts +1 -1
- package/dist/errors/IrisScannerError.d.ts.map +1 -1
- package/dist/errors/IrisScannerError.js +2 -6
- package/dist/errors/IrisScannerError.js.map +1 -1
- package/dist/errors/IrisSerializationError.d.ts +1 -1
- package/dist/errors/IrisSerializationError.d.ts.map +1 -1
- package/dist/errors/IrisSerializationError.js +2 -6
- package/dist/errors/IrisSerializationError.js.map +1 -1
- package/dist/errors/IrisSourceError.d.ts +1 -1
- package/dist/errors/IrisSourceError.d.ts.map +1 -1
- package/dist/errors/IrisSourceError.js +2 -6
- package/dist/errors/IrisSourceError.js.map +1 -1
- package/dist/errors/IrisTimeoutError.d.ts +1 -1
- package/dist/errors/IrisTimeoutError.d.ts.map +1 -1
- package/dist/errors/IrisTimeoutError.js +2 -6
- package/dist/errors/IrisTimeoutError.js.map +1 -1
- package/dist/errors/IrisTransportError.d.ts +1 -1
- package/dist/errors/IrisTransportError.d.ts.map +1 -1
- package/dist/errors/IrisTransportError.js +2 -6
- package/dist/errors/IrisTransportError.js.map +1 -1
- package/dist/errors/IrisValidationError.d.ts +1 -1
- package/dist/errors/IrisValidationError.d.ts.map +1 -1
- package/dist/errors/IrisValidationError.js +2 -6
- package/dist/errors/IrisValidationError.js.map +1 -1
- package/dist/errors/index.d.ts +11 -11
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +11 -27
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -21
- package/dist/index.js.map +1 -1
- package/dist/interfaces/IrisDeadLetterStore.d.ts +1 -1
- package/dist/interfaces/IrisDeadLetterStore.d.ts.map +1 -1
- package/dist/interfaces/IrisDeadLetterStore.js +1 -2
- package/dist/interfaces/IrisDelayStore.d.ts +1 -1
- package/dist/interfaces/IrisDelayStore.d.ts.map +1 -1
- package/dist/interfaces/IrisDelayStore.js +1 -2
- package/dist/interfaces/IrisDriver.d.ts +9 -9
- package/dist/interfaces/IrisDriver.d.ts.map +1 -1
- package/dist/interfaces/IrisDriver.js +1 -2
- package/dist/interfaces/IrisMessageBus.d.ts +2 -2
- package/dist/interfaces/IrisMessageBus.d.ts.map +1 -1
- package/dist/interfaces/IrisMessageBus.js +1 -2
- package/dist/interfaces/IrisMessagingProvider.d.ts +8 -8
- package/dist/interfaces/IrisMessagingProvider.d.ts.map +1 -1
- package/dist/interfaces/IrisMessagingProvider.js +1 -2
- package/dist/interfaces/IrisPublisher.d.ts +2 -2
- package/dist/interfaces/IrisPublisher.d.ts.map +1 -1
- package/dist/interfaces/IrisPublisher.js +1 -2
- package/dist/interfaces/IrisRpcClient.d.ts +1 -1
- package/dist/interfaces/IrisRpcClient.d.ts.map +1 -1
- package/dist/interfaces/IrisRpcClient.js +1 -2
- package/dist/interfaces/IrisRpcServer.d.ts +1 -1
- package/dist/interfaces/IrisRpcServer.d.ts.map +1 -1
- package/dist/interfaces/IrisRpcServer.js +1 -2
- package/dist/interfaces/IrisSession.d.ts +1 -1
- package/dist/interfaces/IrisSession.d.ts.map +1 -1
- package/dist/interfaces/IrisSession.js +1 -2
- package/dist/interfaces/IrisSource.d.ts +5 -5
- package/dist/interfaces/IrisSource.d.ts.map +1 -1
- package/dist/interfaces/IrisSource.js +1 -2
- package/dist/interfaces/IrisStreamProcessor.d.ts +1 -1
- package/dist/interfaces/IrisStreamProcessor.d.ts.map +1 -1
- package/dist/interfaces/IrisStreamProcessor.js +1 -2
- package/dist/interfaces/IrisWorkerQueue.d.ts +2 -2
- package/dist/interfaces/IrisWorkerQueue.d.ts.map +1 -1
- package/dist/interfaces/IrisWorkerQueue.js +1 -2
- package/dist/interfaces/Message.js +1 -2
- package/dist/interfaces/MessageSubscriber.d.ts +1 -1
- package/dist/interfaces/MessageSubscriber.d.ts.map +1 -1
- package/dist/interfaces/MessageSubscriber.js +1 -2
- package/dist/interfaces/index.d.ts +13 -13
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/index.js +13 -29
- package/dist/interfaces/index.js.map +1 -1
- package/dist/internal/classes/DriverBase.d.ts +7 -6
- package/dist/internal/classes/DriverBase.d.ts.map +1 -1
- package/dist/internal/classes/DriverBase.js +14 -16
- package/dist/internal/classes/DriverBase.js.map +1 -1
- package/dist/internal/classes/DriverMessageBusBase.d.ts +4 -4
- package/dist/internal/classes/DriverMessageBusBase.d.ts.map +1 -1
- package/dist/internal/classes/DriverMessageBusBase.js +2 -6
- package/dist/internal/classes/DriverMessageBusBase.js.map +1 -1
- package/dist/internal/classes/DriverPublisherBase.d.ts +4 -4
- package/dist/internal/classes/DriverPublisherBase.d.ts.map +1 -1
- package/dist/internal/classes/DriverPublisherBase.js +2 -6
- package/dist/internal/classes/DriverPublisherBase.js.map +1 -1
- package/dist/internal/classes/DriverRpcClientBase.d.ts +6 -5
- package/dist/internal/classes/DriverRpcClientBase.d.ts.map +1 -1
- package/dist/internal/classes/DriverRpcClientBase.js +23 -27
- package/dist/internal/classes/DriverRpcClientBase.js.map +1 -1
- package/dist/internal/classes/DriverRpcServerBase.d.ts +6 -5
- package/dist/internal/classes/DriverRpcServerBase.d.ts.map +1 -1
- package/dist/internal/classes/DriverRpcServerBase.js +21 -25
- package/dist/internal/classes/DriverRpcServerBase.js.map +1 -1
- package/dist/internal/classes/DriverStreamPipelineBase.d.ts +7 -6
- package/dist/internal/classes/DriverStreamPipelineBase.d.ts.map +1 -1
- package/dist/internal/classes/DriverStreamPipelineBase.js +19 -23
- package/dist/internal/classes/DriverStreamPipelineBase.js.map +1 -1
- package/dist/internal/classes/DriverStreamProcessorBase.d.ts +6 -5
- package/dist/internal/classes/DriverStreamProcessorBase.d.ts.map +1 -1
- package/dist/internal/classes/DriverStreamProcessorBase.js +11 -15
- package/dist/internal/classes/DriverStreamProcessorBase.js.map +1 -1
- package/dist/internal/classes/DriverWorkerQueueBase.d.ts +4 -4
- package/dist/internal/classes/DriverWorkerQueueBase.d.ts.map +1 -1
- package/dist/internal/classes/DriverWorkerQueueBase.js +2 -6
- package/dist/internal/classes/DriverWorkerQueueBase.js.map +1 -1
- package/dist/internal/classes/index.d.ts +8 -8
- package/dist/internal/classes/index.d.ts.map +1 -1
- package/dist/internal/classes/index.js +8 -24
- package/dist/internal/classes/index.js.map +1 -1
- package/dist/internal/cli/commands/generate-message.d.ts.map +1 -1
- package/dist/internal/cli/commands/generate-message.js +8 -69
- package/dist/internal/cli/commands/generate-message.js.map +1 -1
- package/dist/internal/cli/commands/init.d.ts.map +1 -1
- package/dist/internal/cli/commands/init.js +10 -104
- package/dist/internal/cli/commands/init.js.map +1 -1
- package/dist/internal/cli/commands/register-generate.js +3 -7
- package/dist/internal/cli/commands/register-generate.js.map +1 -1
- package/dist/internal/cli/commands/register-init.js +3 -7
- package/dist/internal/cli/commands/register-init.js.map +1 -1
- package/dist/internal/dead-letter/DeadLetterManager.d.ts +3 -3
- package/dist/internal/dead-letter/DeadLetterManager.d.ts.map +1 -1
- package/dist/internal/dead-letter/DeadLetterManager.js +3 -7
- package/dist/internal/dead-letter/DeadLetterManager.js.map +1 -1
- package/dist/internal/dead-letter/MemoryDeadLetterStore.d.ts +2 -2
- package/dist/internal/dead-letter/MemoryDeadLetterStore.d.ts.map +1 -1
- package/dist/internal/dead-letter/MemoryDeadLetterStore.js +1 -5
- package/dist/internal/dead-letter/MemoryDeadLetterStore.js.map +1 -1
- package/dist/internal/dead-letter/RedisDeadLetterStore.d.ts +2 -2
- package/dist/internal/dead-letter/RedisDeadLetterStore.d.ts.map +1 -1
- package/dist/internal/dead-letter/RedisDeadLetterStore.js +12 -16
- package/dist/internal/dead-letter/RedisDeadLetterStore.js.map +1 -1
- package/dist/internal/dead-letter/types.d.ts +1 -1
- package/dist/internal/dead-letter/types.d.ts.map +1 -1
- package/dist/internal/dead-letter/types.js +1 -2
- package/dist/internal/dead-letter/utils/create-dead-letter-store.d.ts +2 -2
- package/dist/internal/dead-letter/utils/create-dead-letter-store.d.ts.map +1 -1
- package/dist/internal/dead-letter/utils/create-dead-letter-store.js +6 -43
- package/dist/internal/dead-letter/utils/create-dead-letter-store.js.map +1 -1
- package/dist/internal/dead-letter/utils/serialize-helpers.d.ts +1 -1
- package/dist/internal/dead-letter/utils/serialize-helpers.d.ts.map +1 -1
- package/dist/internal/dead-letter/utils/serialize-helpers.js +2 -7
- package/dist/internal/dead-letter/utils/serialize-helpers.js.map +1 -1
- package/dist/internal/delay/DelayManager.d.ts +3 -3
- package/dist/internal/delay/DelayManager.d.ts.map +1 -1
- package/dist/internal/delay/DelayManager.js +3 -7
- package/dist/internal/delay/DelayManager.js.map +1 -1
- package/dist/internal/delay/MemoryDelayStore.d.ts +2 -2
- package/dist/internal/delay/MemoryDelayStore.d.ts.map +1 -1
- package/dist/internal/delay/MemoryDelayStore.js +1 -5
- package/dist/internal/delay/MemoryDelayStore.js.map +1 -1
- package/dist/internal/delay/RedisDelayStore.d.ts +2 -2
- package/dist/internal/delay/RedisDelayStore.d.ts.map +1 -1
- package/dist/internal/delay/RedisDelayStore.js +8 -12
- package/dist/internal/delay/RedisDelayStore.js.map +1 -1
- package/dist/internal/delay/types.d.ts +1 -1
- package/dist/internal/delay/types.d.ts.map +1 -1
- package/dist/internal/delay/types.js +1 -2
- package/dist/internal/delay/utils/create-delay-store.d.ts +2 -2
- package/dist/internal/delay/utils/create-delay-store.d.ts.map +1 -1
- package/dist/internal/delay/utils/create-delay-store.js +6 -43
- package/dist/internal/delay/utils/create-delay-store.js.map +1 -1
- package/dist/internal/delay/utils/serialize-helpers.d.ts +1 -1
- package/dist/internal/delay/utils/serialize-helpers.d.ts.map +1 -1
- package/dist/internal/delay/utils/serialize-helpers.js +2 -7
- package/dist/internal/delay/utils/serialize-helpers.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaDriver.d.ts +10 -10
- package/dist/internal/drivers/kafka/classes/KafkaDriver.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaDriver.js +38 -75
- package/dist/internal/drivers/kafka/classes/KafkaDriver.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaMessageBus.d.ts +7 -7
- package/dist/internal/drivers/kafka/classes/KafkaMessageBus.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaMessageBus.js +26 -30
- package/dist/internal/drivers/kafka/classes/KafkaMessageBus.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaPublisher.d.ts +6 -6
- package/dist/internal/drivers/kafka/classes/KafkaPublisher.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaPublisher.js +4 -8
- package/dist/internal/drivers/kafka/classes/KafkaPublisher.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaRpcClient.d.ts +5 -4
- package/dist/internal/drivers/kafka/classes/KafkaRpcClient.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaRpcClient.js +21 -25
- package/dist/internal/drivers/kafka/classes/KafkaRpcClient.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaRpcServer.d.ts +5 -4
- package/dist/internal/drivers/kafka/classes/KafkaRpcServer.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaRpcServer.js +18 -22
- package/dist/internal/drivers/kafka/classes/KafkaRpcServer.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.d.ts +3 -3
- package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.js +29 -33
- package/dist/internal/drivers/kafka/classes/KafkaStreamPipeline.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.d.ts +7 -6
- package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.js +5 -9
- package/dist/internal/drivers/kafka/classes/KafkaStreamProcessor.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.d.ts +7 -7
- package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.js +26 -30
- package/dist/internal/drivers/kafka/classes/KafkaWorkerQueue.js.map +1 -1
- package/dist/internal/drivers/kafka/classes/index.d.ts +8 -8
- package/dist/internal/drivers/kafka/classes/index.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/classes/index.js +8 -19
- package/dist/internal/drivers/kafka/classes/index.js.map +1 -1
- package/dist/internal/drivers/kafka/index.d.ts +3 -3
- package/dist/internal/drivers/kafka/index.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/index.js +3 -19
- package/dist/internal/drivers/kafka/index.js.map +1 -1
- package/dist/internal/drivers/kafka/types/index.d.ts +1 -1
- package/dist/internal/drivers/kafka/types/index.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/types/index.js +1 -17
- package/dist/internal/drivers/kafka/types/index.js.map +1 -1
- package/dist/internal/drivers/kafka/types/kafka-types.d.ts +3 -3
- package/dist/internal/drivers/kafka/types/kafka-types.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/types/kafka-types.js +1 -2
- package/dist/internal/drivers/kafka/utils/create-kafka-consumer.d.ts +1 -1
- package/dist/internal/drivers/kafka/utils/create-kafka-consumer.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/create-kafka-consumer.js +14 -21
- package/dist/internal/drivers/kafka/utils/create-kafka-consumer.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.d.ts +1 -1
- package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.js +3 -8
- package/dist/internal/drivers/kafka/utils/ensure-kafka-topic.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/index.d.ts +9 -9
- package/dist/internal/drivers/kafka/utils/index.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/index.js +9 -25
- package/dist/internal/drivers/kafka/utils/index.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/parse-kafka-message.d.ts +2 -2
- package/dist/internal/drivers/kafka/utils/parse-kafka-message.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/parse-kafka-message.js +1 -5
- package/dist/internal/drivers/kafka/utils/parse-kafka-message.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/publish-kafka-messages.d.ts +4 -4
- package/dist/internal/drivers/kafka/utils/publish-kafka-messages.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/publish-kafka-messages.js +11 -15
- package/dist/internal/drivers/kafka/utils/publish-kafka-messages.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/resolve-group-id.d.ts +1 -1
- package/dist/internal/drivers/kafka/utils/resolve-group-id.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/resolve-group-id.js +1 -5
- package/dist/internal/drivers/kafka/utils/resolve-group-id.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/resolve-topic-name.js +1 -5
- package/dist/internal/drivers/kafka/utils/resolve-topic-name.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/serialize-kafka-message.d.ts +2 -2
- package/dist/internal/drivers/kafka/utils/serialize-kafka-message.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/serialize-kafka-message.js +1 -5
- package/dist/internal/drivers/kafka/utils/serialize-kafka-message.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.d.ts +1 -1
- package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.js +12 -20
- package/dist/internal/drivers/kafka/utils/stop-kafka-consumer.js.map +1 -1
- package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.d.ts +5 -5
- package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.d.ts.map +1 -1
- package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.js +9 -13
- package/dist/internal/drivers/kafka/utils/wrap-kafka-consumer.js.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryDriver.d.ts +11 -11
- package/dist/internal/drivers/memory/classes/MemoryDriver.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryDriver.js +32 -36
- package/dist/internal/drivers/memory/classes/MemoryDriver.js.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryMessageBus.d.ts +7 -7
- package/dist/internal/drivers/memory/classes/MemoryMessageBus.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryMessageBus.js +8 -12
- package/dist/internal/drivers/memory/classes/MemoryMessageBus.js.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryPublisher.d.ts +6 -6
- package/dist/internal/drivers/memory/classes/MemoryPublisher.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryPublisher.js +4 -8
- package/dist/internal/drivers/memory/classes/MemoryPublisher.js.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryRpcClient.d.ts +5 -4
- package/dist/internal/drivers/memory/classes/MemoryRpcClient.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryRpcClient.js +7 -11
- package/dist/internal/drivers/memory/classes/MemoryRpcClient.js.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryRpcServer.d.ts +5 -4
- package/dist/internal/drivers/memory/classes/MemoryRpcServer.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryRpcServer.js +2 -6
- package/dist/internal/drivers/memory/classes/MemoryRpcServer.js.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.d.ts +3 -3
- package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.js +21 -25
- package/dist/internal/drivers/memory/classes/MemoryStreamPipeline.js.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.d.ts +7 -6
- package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.js +5 -9
- package/dist/internal/drivers/memory/classes/MemoryStreamProcessor.js.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.d.ts +7 -7
- package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.js +10 -14
- package/dist/internal/drivers/memory/classes/MemoryWorkerQueue.js.map +1 -1
- package/dist/internal/drivers/memory/classes/index.d.ts +8 -8
- package/dist/internal/drivers/memory/classes/index.d.ts.map +1 -1
- package/dist/internal/drivers/memory/classes/index.js +8 -24
- package/dist/internal/drivers/memory/classes/index.js.map +1 -1
- package/dist/internal/drivers/memory/index.d.ts +3 -3
- package/dist/internal/drivers/memory/index.d.ts.map +1 -1
- package/dist/internal/drivers/memory/index.js +3 -19
- package/dist/internal/drivers/memory/index.js.map +1 -1
- package/dist/internal/drivers/memory/types/index.d.ts +1 -1
- package/dist/internal/drivers/memory/types/index.d.ts.map +1 -1
- package/dist/internal/drivers/memory/types/index.js +1 -17
- package/dist/internal/drivers/memory/types/index.js.map +1 -1
- package/dist/internal/drivers/memory/types/memory-store.d.ts +3 -3
- package/dist/internal/drivers/memory/types/memory-store.d.ts.map +1 -1
- package/dist/internal/drivers/memory/types/memory-store.js +1 -2
- package/dist/internal/drivers/memory/utils/create-store.d.ts +1 -1
- package/dist/internal/drivers/memory/utils/create-store.d.ts.map +1 -1
- package/dist/internal/drivers/memory/utils/create-store.js +1 -5
- package/dist/internal/drivers/memory/utils/create-store.js.map +1 -1
- package/dist/internal/drivers/memory/utils/dispatch-to-consumers.d.ts +1 -1
- package/dist/internal/drivers/memory/utils/dispatch-to-consumers.d.ts.map +1 -1
- package/dist/internal/drivers/memory/utils/dispatch-to-consumers.js +1 -5
- package/dist/internal/drivers/memory/utils/dispatch-to-consumers.js.map +1 -1
- package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.d.ts +1 -1
- package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.d.ts.map +1 -1
- package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.js +1 -5
- package/dist/internal/drivers/memory/utils/dispatch-to-subscribers.js.map +1 -1
- package/dist/internal/drivers/memory/utils/index.d.ts +5 -5
- package/dist/internal/drivers/memory/utils/index.d.ts.map +1 -1
- package/dist/internal/drivers/memory/utils/index.js +5 -21
- package/dist/internal/drivers/memory/utils/index.js.map +1 -1
- package/dist/internal/drivers/memory/utils/publish-messages.d.ts +4 -4
- package/dist/internal/drivers/memory/utils/publish-messages.d.ts.map +1 -1
- package/dist/internal/drivers/memory/utils/publish-messages.js +7 -11
- package/dist/internal/drivers/memory/utils/publish-messages.js.map +1 -1
- package/dist/internal/drivers/memory/utils/wrap-consumer-callback.d.ts +5 -5
- package/dist/internal/drivers/memory/utils/wrap-consumer-callback.d.ts.map +1 -1
- package/dist/internal/drivers/memory/utils/wrap-consumer-callback.js +3 -7
- package/dist/internal/drivers/memory/utils/wrap-consumer-callback.js.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsDriver.d.ts +10 -10
- package/dist/internal/drivers/nats/classes/NatsDriver.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsDriver.js +39 -76
- package/dist/internal/drivers/nats/classes/NatsDriver.js.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsMessageBus.d.ts +7 -7
- package/dist/internal/drivers/nats/classes/NatsMessageBus.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsMessageBus.js +19 -23
- package/dist/internal/drivers/nats/classes/NatsMessageBus.js.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsPublisher.d.ts +6 -6
- package/dist/internal/drivers/nats/classes/NatsPublisher.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsPublisher.js +4 -8
- package/dist/internal/drivers/nats/classes/NatsPublisher.js.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsRpcClient.d.ts +5 -4
- package/dist/internal/drivers/nats/classes/NatsRpcClient.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsRpcClient.js +15 -19
- package/dist/internal/drivers/nats/classes/NatsRpcClient.js.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsRpcServer.d.ts +5 -4
- package/dist/internal/drivers/nats/classes/NatsRpcServer.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsRpcServer.js +9 -13
- package/dist/internal/drivers/nats/classes/NatsRpcServer.js.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsStreamPipeline.d.ts +3 -3
- package/dist/internal/drivers/nats/classes/NatsStreamPipeline.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsStreamPipeline.js +29 -33
- package/dist/internal/drivers/nats/classes/NatsStreamPipeline.js.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsStreamProcessor.d.ts +7 -6
- package/dist/internal/drivers/nats/classes/NatsStreamProcessor.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsStreamProcessor.js +5 -9
- package/dist/internal/drivers/nats/classes/NatsStreamProcessor.js.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsWorkerQueue.d.ts +7 -7
- package/dist/internal/drivers/nats/classes/NatsWorkerQueue.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsWorkerQueue.js +23 -27
- package/dist/internal/drivers/nats/classes/NatsWorkerQueue.js.map +1 -1
- package/dist/internal/drivers/nats/classes/index.d.ts +8 -8
- package/dist/internal/drivers/nats/classes/index.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/index.js +8 -19
- package/dist/internal/drivers/nats/classes/index.js.map +1 -1
- package/dist/internal/drivers/nats/index.d.ts +3 -3
- package/dist/internal/drivers/nats/index.d.ts.map +1 -1
- package/dist/internal/drivers/nats/index.js +3 -19
- package/dist/internal/drivers/nats/index.js.map +1 -1
- package/dist/internal/drivers/nats/types/index.d.ts +1 -1
- package/dist/internal/drivers/nats/types/index.d.ts.map +1 -1
- package/dist/internal/drivers/nats/types/index.js +1 -17
- package/dist/internal/drivers/nats/types/index.js.map +1 -1
- package/dist/internal/drivers/nats/types/nats-types.d.ts +2 -2
- package/dist/internal/drivers/nats/types/nats-types.d.ts.map +1 -1
- package/dist/internal/drivers/nats/types/nats-types.js +1 -2
- package/dist/internal/drivers/nats/utils/create-nats-consumer.d.ts +1 -1
- package/dist/internal/drivers/nats/utils/create-nats-consumer.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/create-nats-consumer.js +3 -7
- package/dist/internal/drivers/nats/utils/create-nats-consumer.js.map +1 -1
- package/dist/internal/drivers/nats/utils/ensure-nats-stream.d.ts +1 -1
- package/dist/internal/drivers/nats/utils/ensure-nats-stream.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/ensure-nats-stream.js +1 -5
- package/dist/internal/drivers/nats/utils/ensure-nats-stream.js.map +1 -1
- package/dist/internal/drivers/nats/utils/index.d.ts +10 -10
- package/dist/internal/drivers/nats/utils/index.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/index.js +10 -26
- package/dist/internal/drivers/nats/utils/index.js.map +1 -1
- package/dist/internal/drivers/nats/utils/parse-nats-message.d.ts +1 -1
- package/dist/internal/drivers/nats/utils/parse-nats-message.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/parse-nats-message.js +1 -5
- package/dist/internal/drivers/nats/utils/parse-nats-message.js.map +1 -1
- package/dist/internal/drivers/nats/utils/publish-nats-messages.d.ts +4 -4
- package/dist/internal/drivers/nats/utils/publish-nats-messages.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/publish-nats-messages.js +9 -13
- package/dist/internal/drivers/nats/utils/publish-nats-messages.js.map +1 -1
- package/dist/internal/drivers/nats/utils/resolve-consumer-name.d.ts +1 -1
- package/dist/internal/drivers/nats/utils/resolve-consumer-name.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/resolve-consumer-name.js +1 -5
- package/dist/internal/drivers/nats/utils/resolve-consumer-name.js.map +1 -1
- package/dist/internal/drivers/nats/utils/resolve-stream-name.js +1 -5
- package/dist/internal/drivers/nats/utils/resolve-stream-name.js.map +1 -1
- package/dist/internal/drivers/nats/utils/resolve-subject.js +1 -5
- package/dist/internal/drivers/nats/utils/resolve-subject.js.map +1 -1
- package/dist/internal/drivers/nats/utils/serialize-nats-message.d.ts +2 -2
- package/dist/internal/drivers/nats/utils/serialize-nats-message.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/serialize-nats-message.js +1 -5
- package/dist/internal/drivers/nats/utils/serialize-nats-message.js.map +1 -1
- package/dist/internal/drivers/nats/utils/stop-nats-consumer.d.ts +1 -1
- package/dist/internal/drivers/nats/utils/stop-nats-consumer.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/stop-nats-consumer.js +2 -7
- package/dist/internal/drivers/nats/utils/stop-nats-consumer.js.map +1 -1
- package/dist/internal/drivers/nats/utils/wrap-nats-consumer.d.ts +5 -5
- package/dist/internal/drivers/nats/utils/wrap-nats-consumer.d.ts.map +1 -1
- package/dist/internal/drivers/nats/utils/wrap-nats-consumer.js +5 -9
- package/dist/internal/drivers/nats/utils/wrap-nats-consumer.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitDriver.d.ts +8 -8
- package/dist/internal/drivers/rabbit/classes/RabbitDriver.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitDriver.js +26 -33
- package/dist/internal/drivers/rabbit/classes/RabbitDriver.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.d.ts +5 -5
- package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.js +12 -16
- package/dist/internal/drivers/rabbit/classes/RabbitMessageBus.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitPublisher.d.ts +5 -5
- package/dist/internal/drivers/rabbit/classes/RabbitPublisher.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitPublisher.js +4 -8
- package/dist/internal/drivers/rabbit/classes/RabbitPublisher.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.d.ts +5 -4
- package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.js +18 -22
- package/dist/internal/drivers/rabbit/classes/RabbitRpcClient.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.d.ts +5 -4
- package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.js +13 -17
- package/dist/internal/drivers/rabbit/classes/RabbitRpcServer.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.d.ts +3 -3
- package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.js +15 -19
- package/dist/internal/drivers/rabbit/classes/RabbitStreamPipeline.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.d.ts +7 -6
- package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.js +5 -9
- package/dist/internal/drivers/rabbit/classes/RabbitStreamProcessor.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.d.ts +5 -5
- package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.js +13 -17
- package/dist/internal/drivers/rabbit/classes/RabbitWorkerQueue.js.map +1 -1
- package/dist/internal/drivers/rabbit/classes/index.d.ts +8 -8
- package/dist/internal/drivers/rabbit/classes/index.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/classes/index.js +8 -19
- package/dist/internal/drivers/rabbit/classes/index.js.map +1 -1
- package/dist/internal/drivers/rabbit/index.d.ts +3 -3
- package/dist/internal/drivers/rabbit/index.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/index.js +3 -19
- package/dist/internal/drivers/rabbit/index.js.map +1 -1
- package/dist/internal/drivers/rabbit/types/index.d.ts +1 -1
- package/dist/internal/drivers/rabbit/types/index.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/types/index.js +1 -17
- package/dist/internal/drivers/rabbit/types/index.js.map +1 -1
- package/dist/internal/drivers/rabbit/types/rabbit-types.d.ts +1 -1
- package/dist/internal/drivers/rabbit/types/rabbit-types.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/types/rabbit-types.js +1 -2
- package/dist/internal/drivers/rabbit/utils/build-amqp-headers.d.ts +2 -2
- package/dist/internal/drivers/rabbit/utils/build-amqp-headers.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/utils/build-amqp-headers.js +3 -7
- package/dist/internal/drivers/rabbit/utils/build-amqp-headers.js.map +1 -1
- package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.d.ts +3 -3
- package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.js +1 -5
- package/dist/internal/drivers/rabbit/utils/build-rabbit-envelope.js.map +1 -1
- package/dist/internal/drivers/rabbit/utils/index.d.ts +8 -8
- package/dist/internal/drivers/rabbit/utils/index.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/utils/index.js +8 -24
- package/dist/internal/drivers/rabbit/utils/index.js.map +1 -1
- package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.d.ts +1 -1
- package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.js +1 -5
- package/dist/internal/drivers/rabbit/utils/parse-amqp-headers.js.map +1 -1
- package/dist/internal/drivers/rabbit/utils/publish-messages.d.ts +4 -4
- package/dist/internal/drivers/rabbit/utils/publish-messages.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/utils/publish-messages.js +14 -18
- package/dist/internal/drivers/rabbit/utils/publish-messages.js.map +1 -1
- package/dist/internal/drivers/rabbit/utils/publish-to-exchange.js +4 -8
- package/dist/internal/drivers/rabbit/utils/publish-to-exchange.js.map +1 -1
- package/dist/internal/drivers/rabbit/utils/resolve-queue-name.d.ts +1 -1
- package/dist/internal/drivers/rabbit/utils/resolve-queue-name.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/utils/resolve-queue-name.js +6 -10
- package/dist/internal/drivers/rabbit/utils/resolve-queue-name.js.map +1 -1
- package/dist/internal/drivers/rabbit/utils/sanitize-routing-key.js +1 -5
- package/dist/internal/drivers/rabbit/utils/sanitize-routing-key.js.map +1 -1
- package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.d.ts +5 -5
- package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.d.ts.map +1 -1
- package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.js +16 -20
- package/dist/internal/drivers/rabbit/utils/wrap-rabbit-consumer.js.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisDriver.d.ts +10 -10
- package/dist/internal/drivers/redis/classes/RedisDriver.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisDriver.js +42 -78
- package/dist/internal/drivers/redis/classes/RedisDriver.js.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisMessageBus.d.ts +7 -7
- package/dist/internal/drivers/redis/classes/RedisMessageBus.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisMessageBus.js +19 -23
- package/dist/internal/drivers/redis/classes/RedisMessageBus.js.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisPublisher.d.ts +6 -6
- package/dist/internal/drivers/redis/classes/RedisPublisher.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisPublisher.js +4 -8
- package/dist/internal/drivers/redis/classes/RedisPublisher.js.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisRpcClient.d.ts +5 -4
- package/dist/internal/drivers/redis/classes/RedisRpcClient.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisRpcClient.js +18 -22
- package/dist/internal/drivers/redis/classes/RedisRpcClient.js.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisRpcServer.d.ts +5 -4
- package/dist/internal/drivers/redis/classes/RedisRpcServer.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisRpcServer.js +19 -23
- package/dist/internal/drivers/redis/classes/RedisRpcServer.js.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisStreamPipeline.d.ts +3 -3
- package/dist/internal/drivers/redis/classes/RedisStreamPipeline.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisStreamPipeline.js +27 -31
- package/dist/internal/drivers/redis/classes/RedisStreamPipeline.js.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisStreamProcessor.d.ts +7 -6
- package/dist/internal/drivers/redis/classes/RedisStreamProcessor.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisStreamProcessor.js +5 -9
- package/dist/internal/drivers/redis/classes/RedisStreamProcessor.js.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisWorkerQueue.d.ts +7 -7
- package/dist/internal/drivers/redis/classes/RedisWorkerQueue.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/RedisWorkerQueue.js +23 -27
- package/dist/internal/drivers/redis/classes/RedisWorkerQueue.js.map +1 -1
- package/dist/internal/drivers/redis/classes/index.d.ts +8 -8
- package/dist/internal/drivers/redis/classes/index.d.ts.map +1 -1
- package/dist/internal/drivers/redis/classes/index.js +8 -19
- package/dist/internal/drivers/redis/classes/index.js.map +1 -1
- package/dist/internal/drivers/redis/index.d.ts +3 -3
- package/dist/internal/drivers/redis/index.d.ts.map +1 -1
- package/dist/internal/drivers/redis/index.js +3 -19
- package/dist/internal/drivers/redis/index.js.map +1 -1
- package/dist/internal/drivers/redis/types/index.d.ts +1 -1
- package/dist/internal/drivers/redis/types/index.d.ts.map +1 -1
- package/dist/internal/drivers/redis/types/index.js +1 -17
- package/dist/internal/drivers/redis/types/index.js.map +1 -1
- package/dist/internal/drivers/redis/types/redis-types.d.ts +4 -4
- package/dist/internal/drivers/redis/types/redis-types.d.ts.map +1 -1
- package/dist/internal/drivers/redis/types/redis-types.js +1 -2
- package/dist/internal/drivers/redis/utils/create-consumer-loop.d.ts +1 -1
- package/dist/internal/drivers/redis/utils/create-consumer-loop.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/create-consumer-loop.js +5 -9
- package/dist/internal/drivers/redis/utils/create-consumer-loop.js.map +1 -1
- package/dist/internal/drivers/redis/utils/index.d.ts +9 -9
- package/dist/internal/drivers/redis/utils/index.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/index.js +9 -25
- package/dist/internal/drivers/redis/utils/index.js.map +1 -1
- package/dist/internal/drivers/redis/utils/parse-stream-entry.d.ts +1 -1
- package/dist/internal/drivers/redis/utils/parse-stream-entry.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/parse-stream-entry.js +1 -5
- package/dist/internal/drivers/redis/utils/parse-stream-entry.js.map +1 -1
- package/dist/internal/drivers/redis/utils/publish-redis-messages.d.ts +4 -4
- package/dist/internal/drivers/redis/utils/publish-redis-messages.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/publish-redis-messages.js +11 -15
- package/dist/internal/drivers/redis/utils/publish-redis-messages.js.map +1 -1
- package/dist/internal/drivers/redis/utils/resolve-group-name.d.ts +1 -1
- package/dist/internal/drivers/redis/utils/resolve-group-name.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/resolve-group-name.js +1 -5
- package/dist/internal/drivers/redis/utils/resolve-group-name.js.map +1 -1
- package/dist/internal/drivers/redis/utils/resolve-stream-key.js +1 -5
- package/dist/internal/drivers/redis/utils/resolve-stream-key.js.map +1 -1
- package/dist/internal/drivers/redis/utils/serialize-stream-fields.d.ts +1 -1
- package/dist/internal/drivers/redis/utils/serialize-stream-fields.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/serialize-stream-fields.js +1 -5
- package/dist/internal/drivers/redis/utils/serialize-stream-fields.js.map +1 -1
- package/dist/internal/drivers/redis/utils/stop-consumer-loop.d.ts +1 -1
- package/dist/internal/drivers/redis/utils/stop-consumer-loop.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/stop-consumer-loop.js +2 -7
- package/dist/internal/drivers/redis/utils/stop-consumer-loop.js.map +1 -1
- package/dist/internal/drivers/redis/utils/wrap-redis-consumer.d.ts +5 -5
- package/dist/internal/drivers/redis/utils/wrap-redis-consumer.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/wrap-redis-consumer.js +9 -13
- package/dist/internal/drivers/redis/utils/wrap-redis-consumer.js.map +1 -1
- package/dist/internal/drivers/redis/utils/xadd-to-stream.d.ts +1 -1
- package/dist/internal/drivers/redis/utils/xadd-to-stream.d.ts.map +1 -1
- package/dist/internal/drivers/redis/utils/xadd-to-stream.js +1 -5
- package/dist/internal/drivers/redis/utils/xadd-to-stream.js.map +1 -1
- package/dist/internal/index.d.ts +1 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +1 -17
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/message/classes/MessageManager.d.ts +5 -4
- package/dist/internal/message/classes/MessageManager.d.ts.map +1 -1
- package/dist/internal/message/classes/MessageManager.js +28 -31
- package/dist/internal/message/classes/MessageManager.js.map +1 -1
- package/dist/internal/message/classes/MessageScanner.d.ts +3 -3
- package/dist/internal/message/classes/MessageScanner.d.ts.map +1 -1
- package/dist/internal/message/classes/MessageScanner.js +18 -22
- package/dist/internal/message/classes/MessageScanner.js.map +1 -1
- package/dist/internal/message/classes/index.d.ts +2 -2
- package/dist/internal/message/classes/index.d.ts.map +1 -1
- package/dist/internal/message/classes/index.js +2 -18
- package/dist/internal/message/classes/index.js.map +1 -1
- package/dist/internal/message/errors/IrisScannerError.d.ts +1 -1
- package/dist/internal/message/errors/IrisScannerError.d.ts.map +1 -1
- package/dist/internal/message/errors/IrisScannerError.js +1 -5
- package/dist/internal/message/errors/IrisScannerError.js.map +1 -1
- package/dist/internal/message/errors/index.d.ts +1 -1
- package/dist/internal/message/errors/index.d.ts.map +1 -1
- package/dist/internal/message/errors/index.js +1 -17
- package/dist/internal/message/errors/index.js.map +1 -1
- package/dist/internal/message/index.d.ts +5 -5
- package/dist/internal/message/index.d.ts.map +1 -1
- package/dist/internal/message/index.js +5 -21
- package/dist/internal/message/index.js.map +1 -1
- package/dist/internal/message/metadata/abstract-message.js +3 -7
- package/dist/internal/message/metadata/abstract-message.js.map +1 -1
- package/dist/internal/message/metadata/build-message-metadata.d.ts +1 -1
- package/dist/internal/message/metadata/build-message-metadata.d.ts.map +1 -1
- package/dist/internal/message/metadata/build-message-metadata.js +46 -42
- package/dist/internal/message/metadata/build-message-metadata.js.map +1 -1
- package/dist/internal/message/metadata/collect.d.ts +1 -1
- package/dist/internal/message/metadata/collect.d.ts.map +1 -1
- package/dist/internal/message/metadata/collect.js +3 -9
- package/dist/internal/message/metadata/collect.js.map +1 -1
- package/dist/internal/message/metadata/get-message-metadata.d.ts +1 -1
- package/dist/internal/message/metadata/get-message-metadata.d.ts.map +1 -1
- package/dist/internal/message/metadata/get-message-metadata.js +6 -10
- package/dist/internal/message/metadata/get-message-metadata.js.map +1 -1
- package/dist/internal/message/metadata/index.d.ts +4 -4
- package/dist/internal/message/metadata/index.d.ts.map +1 -1
- package/dist/internal/message/metadata/index.js +4 -20
- package/dist/internal/message/metadata/index.js.map +1 -1
- package/dist/internal/message/metadata/registry.d.ts +1 -1
- package/dist/internal/message/metadata/registry.d.ts.map +1 -1
- package/dist/internal/message/metadata/registry.js +7 -17
- package/dist/internal/message/metadata/registry.js.map +1 -1
- package/dist/internal/message/metadata/stage-metadata.d.ts +2 -2
- package/dist/internal/message/metadata/stage-metadata.d.ts.map +1 -1
- package/dist/internal/message/metadata/stage-metadata.js +29 -52
- package/dist/internal/message/metadata/stage-metadata.js.map +1 -1
- package/dist/internal/message/metadata/validate-fields.d.ts +1 -1
- package/dist/internal/message/metadata/validate-fields.d.ts.map +1 -1
- package/dist/internal/message/metadata/validate-fields.js +4 -8
- package/dist/internal/message/metadata/validate-fields.js.map +1 -1
- package/dist/internal/message/metadata/validate-generated.d.ts +2 -2
- package/dist/internal/message/metadata/validate-generated.d.ts.map +1 -1
- package/dist/internal/message/metadata/validate-generated.js +4 -8
- package/dist/internal/message/metadata/validate-generated.js.map +1 -1
- package/dist/internal/message/metadata/validate-headers.d.ts +1 -1
- package/dist/internal/message/metadata/validate-headers.d.ts.map +1 -1
- package/dist/internal/message/metadata/validate-headers.js +8 -12
- package/dist/internal/message/metadata/validate-headers.js.map +1 -1
- package/dist/internal/message/types/index.d.ts +5 -5
- package/dist/internal/message/types/index.d.ts.map +1 -1
- package/dist/internal/message/types/index.js +5 -21
- package/dist/internal/message/types/index.js.map +1 -1
- package/dist/internal/message/types/metadata.d.ts +5 -4
- package/dist/internal/message/types/metadata.d.ts.map +1 -1
- package/dist/internal/message/types/metadata.js +1 -2
- package/dist/internal/message/types/outbound-payload.js +1 -2
- package/dist/internal/message/types/serialized-message.js +1 -2
- package/dist/internal/message/types/staged.d.ts +7 -2
- package/dist/internal/message/types/staged.d.ts.map +1 -1
- package/dist/internal/message/types/staged.js +1 -2
- package/dist/internal/message/types/types.js +1 -2
- package/dist/internal/message/utils/apply-stage.d.ts +1 -1
- package/dist/internal/message/utils/apply-stage.d.ts.map +1 -1
- package/dist/internal/message/utils/apply-stage.js +1 -5
- package/dist/internal/message/utils/apply-stage.js.map +1 -1
- package/dist/internal/message/utils/build-schema.d.ts +2 -2
- package/dist/internal/message/utils/build-schema.d.ts.map +1 -1
- package/dist/internal/message/utils/build-schema.js +17 -21
- package/dist/internal/message/utils/build-schema.js.map +1 -1
- package/dist/internal/message/utils/compress.d.ts +1 -1
- package/dist/internal/message/utils/compress.d.ts.map +1 -1
- package/dist/internal/message/utils/compress.js +13 -18
- package/dist/internal/message/utils/compress.js.map +1 -1
- package/dist/internal/message/utils/deserialise.d.ts +1 -1
- package/dist/internal/message/utils/deserialise.d.ts.map +1 -1
- package/dist/internal/message/utils/deserialise.js +16 -20
- package/dist/internal/message/utils/deserialise.js.map +1 -1
- package/dist/internal/message/utils/deserialize-message.d.ts +1 -1
- package/dist/internal/message/utils/deserialize-message.d.ts.map +1 -1
- package/dist/internal/message/utils/deserialize-message.js +3 -7
- package/dist/internal/message/utils/deserialize-message.js.map +1 -1
- package/dist/internal/message/utils/encrypt.js +12 -50
- package/dist/internal/message/utils/encrypt.js.map +1 -1
- package/dist/internal/message/utils/generate-fields.d.ts +1 -1
- package/dist/internal/message/utils/generate-fields.d.ts.map +1 -1
- package/dist/internal/message/utils/generate-fields.js +6 -10
- package/dist/internal/message/utils/generate-fields.js.map +1 -1
- package/dist/internal/message/utils/index.d.ts +16 -16
- package/dist/internal/message/utils/index.d.ts.map +1 -1
- package/dist/internal/message/utils/index.js +16 -32
- package/dist/internal/message/utils/index.js.map +1 -1
- package/dist/internal/message/utils/parse-field.d.ts +1 -1
- package/dist/internal/message/utils/parse-field.d.ts.map +1 -1
- package/dist/internal/message/utils/parse-field.js +5 -9
- package/dist/internal/message/utils/parse-field.js.map +1 -1
- package/dist/internal/message/utils/prepare-inbound.d.ts +1 -1
- package/dist/internal/message/utils/prepare-inbound.d.ts.map +1 -1
- package/dist/internal/message/utils/prepare-inbound.js +11 -15
- package/dist/internal/message/utils/prepare-inbound.js.map +1 -1
- package/dist/internal/message/utils/prepare-outbound.d.ts +2 -2
- package/dist/internal/message/utils/prepare-outbound.d.ts.map +1 -1
- package/dist/internal/message/utils/prepare-outbound.js +7 -11
- package/dist/internal/message/utils/prepare-outbound.js.map +1 -1
- package/dist/internal/message/utils/resolve-default-topic.d.ts +1 -1
- package/dist/internal/message/utils/resolve-default-topic.d.ts.map +1 -1
- package/dist/internal/message/utils/resolve-default-topic.js +1 -5
- package/dist/internal/message/utils/resolve-default-topic.js.map +1 -1
- package/dist/internal/message/utils/resolve-delay.d.ts +2 -2
- package/dist/internal/message/utils/resolve-delay.d.ts.map +1 -1
- package/dist/internal/message/utils/resolve-delay.js +1 -5
- package/dist/internal/message/utils/resolve-delay.js.map +1 -1
- package/dist/internal/message/utils/resolve-expiry.d.ts +2 -2
- package/dist/internal/message/utils/resolve-expiry.d.ts.map +1 -1
- package/dist/internal/message/utils/resolve-expiry.js +1 -5
- package/dist/internal/message/utils/resolve-expiry.js.map +1 -1
- package/dist/internal/message/utils/resolve-priority.d.ts +2 -2
- package/dist/internal/message/utils/resolve-priority.d.ts.map +1 -1
- package/dist/internal/message/utils/resolve-priority.js +1 -5
- package/dist/internal/message/utils/resolve-priority.js.map +1 -1
- package/dist/internal/message/utils/resolve-topic.d.ts +2 -2
- package/dist/internal/message/utils/resolve-topic.d.ts.map +1 -1
- package/dist/internal/message/utils/resolve-topic.js +1 -5
- package/dist/internal/message/utils/resolve-topic.js.map +1 -1
- package/dist/internal/message/utils/run-hooks.d.ts +5 -4
- package/dist/internal/message/utils/run-hooks.d.ts.map +1 -1
- package/dist/internal/message/utils/run-hooks.js +6 -11
- package/dist/internal/message/utils/run-hooks.js.map +1 -1
- package/dist/internal/message/utils/serialize-message.d.ts +2 -2
- package/dist/internal/message/utils/serialize-message.d.ts.map +1 -1
- package/dist/internal/message/utils/serialize-message.js +6 -10
- package/dist/internal/message/utils/serialize-message.js.map +1 -1
- package/dist/internal/polyfill-symbol-metadata.d.ts +2 -0
- package/dist/internal/polyfill-symbol-metadata.d.ts.map +1 -0
- package/dist/internal/polyfill-symbol-metadata.js +5 -0
- package/dist/internal/polyfill-symbol-metadata.js.map +1 -0
- package/dist/internal/types/consume-strategies.d.ts +1 -1
- package/dist/internal/types/consume-strategies.d.ts.map +1 -1
- package/dist/internal/types/consume-strategies.js +1 -2
- package/dist/internal/types/envelope-overrides.js +1 -2
- package/dist/internal/types/index.d.ts +4 -4
- package/dist/internal/types/index.d.ts.map +1 -1
- package/dist/internal/types/index.js +4 -20
- package/dist/internal/types/index.js.map +1 -1
- package/dist/internal/types/iris-envelope.d.ts +1 -1
- package/dist/internal/types/iris-envelope.d.ts.map +1 -1
- package/dist/internal/types/iris-envelope.js +1 -2
- package/dist/internal/types/pipeline-stage.js +1 -2
- package/dist/internal/utils/build-envelope.d.ts +4 -4
- package/dist/internal/utils/build-envelope.d.ts.map +1 -1
- package/dist/internal/utils/build-envelope.js +1 -5
- package/dist/internal/utils/build-envelope.js.map +1 -1
- package/dist/internal/utils/check-pipeline-results.js +1 -5
- package/dist/internal/utils/check-pipeline-results.js.map +1 -1
- package/dist/internal/utils/consume-message-core.d.ts +5 -5
- package/dist/internal/utils/consume-message-core.d.ts.map +1 -1
- package/dist/internal/utils/consume-message-core.js +5 -9
- package/dist/internal/utils/consume-message-core.js.map +1 -1
- package/dist/internal/utils/create-default-envelope.d.ts +2 -2
- package/dist/internal/utils/create-default-envelope.d.ts.map +1 -1
- package/dist/internal/utils/create-default-envelope.js +1 -5
- package/dist/internal/utils/create-default-envelope.js.map +1 -1
- package/dist/internal/utils/index.d.ts +6 -6
- package/dist/internal/utils/index.d.ts.map +1 -1
- package/dist/internal/utils/index.js +6 -22
- package/dist/internal/utils/index.js.map +1 -1
- package/dist/internal/utils/is-expired.d.ts +1 -1
- package/dist/internal/utils/is-expired.d.ts.map +1 -1
- package/dist/internal/utils/is-expired.js +1 -5
- package/dist/internal/utils/is-expired.js.map +1 -1
- package/dist/internal/utils/prepare-publish-batch.d.ts +5 -5
- package/dist/internal/utils/prepare-publish-batch.d.ts.map +1 -1
- package/dist/internal/utils/prepare-publish-batch.js +13 -17
- package/dist/internal/utils/prepare-publish-batch.js.map +1 -1
- package/dist/internal/utils/resolve-identifier-value.d.ts +1 -1
- package/dist/internal/utils/resolve-identifier-value.d.ts.map +1 -1
- package/dist/internal/utils/resolve-identifier-value.js +1 -5
- package/dist/internal/utils/resolve-identifier-value.js.map +1 -1
- package/dist/internal/utils/validate-encrypted-messages.d.ts +1 -1
- package/dist/internal/utils/validate-encrypted-messages.d.ts.map +1 -1
- package/dist/internal/utils/validate-encrypted-messages.js +5 -9
- package/dist/internal/utils/validate-encrypted-messages.js.map +1 -1
- package/dist/mocks/create-mock-iris-session.d.ts +2 -3
- package/dist/mocks/create-mock-iris-session.d.ts.map +1 -1
- package/dist/mocks/create-mock-iris-session.js +32 -19
- package/dist/mocks/create-mock-iris-session.js.map +1 -1
- package/dist/mocks/create-mock-iris-source.d.ts +2 -3
- package/dist/mocks/create-mock-iris-source.d.ts.map +1 -1
- package/dist/mocks/create-mock-iris-source.js +46 -33
- package/dist/mocks/create-mock-iris-source.js.map +1 -1
- package/dist/mocks/create-mock-message-bus.d.ts +4 -4
- package/dist/mocks/create-mock-message-bus.d.ts.map +1 -1
- package/dist/mocks/create-mock-message-bus.js +14 -13
- package/dist/mocks/create-mock-message-bus.js.map +1 -1
- package/dist/mocks/create-mock-publisher.d.ts +4 -4
- package/dist/mocks/create-mock-publisher.d.ts.map +1 -1
- package/dist/mocks/create-mock-publisher.js +11 -10
- package/dist/mocks/create-mock-publisher.js.map +1 -1
- package/dist/mocks/create-mock-rpc-client.d.ts +4 -4
- package/dist/mocks/create-mock-rpc-client.d.ts.map +1 -1
- package/dist/mocks/create-mock-rpc-client.js +8 -7
- package/dist/mocks/create-mock-rpc-client.js.map +1 -1
- package/dist/mocks/create-mock-worker-queue.d.ts +4 -4
- package/dist/mocks/create-mock-worker-queue.d.ts.map +1 -1
- package/dist/mocks/create-mock-worker-queue.js +14 -13
- package/dist/mocks/create-mock-worker-queue.js.map +1 -1
- package/dist/mocks/jest.d.ts +25 -0
- package/dist/mocks/jest.d.ts.map +1 -0
- package/dist/mocks/jest.js +13 -0
- package/dist/mocks/jest.js.map +1 -0
- package/dist/mocks/vitest.d.ts +26 -0
- package/dist/mocks/vitest.d.ts.map +1 -0
- package/dist/mocks/vitest.js +14 -0
- package/dist/mocks/vitest.js.map +1 -0
- package/dist/types/compression.js +1 -2
- package/dist/types/connection.js +1 -2
- package/dist/types/consume-envelope.js +1 -2
- package/dist/types/dead-letter.d.ts +1 -1
- package/dist/types/dead-letter.d.ts.map +1 -1
- package/dist/types/dead-letter.js +1 -2
- package/dist/types/decorator-options.d.ts +0 -7
- package/dist/types/decorator-options.d.ts.map +1 -1
- package/dist/types/decorator-options.js +1 -2
- package/dist/types/delay.d.ts +1 -1
- package/dist/types/delay.d.ts.map +1 -1
- package/dist/types/delay.js +1 -2
- package/dist/types/envelope.js +1 -2
- package/dist/types/events.d.ts +1 -1
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js +1 -2
- package/dist/types/hook.d.ts +4 -3
- package/dist/types/hook.d.ts.map +1 -1
- package/dist/types/hook.js +1 -2
- package/dist/types/index.d.ts +13 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +12 -27
- package/dist/types/index.js.map +1 -1
- package/dist/types/iris-hook-meta.d.ts +7 -0
- package/dist/types/iris-hook-meta.d.ts.map +1 -0
- package/dist/types/iris-hook-meta.js +6 -0
- package/dist/types/iris-hook-meta.js.map +1 -0
- package/dist/types/message-bus.d.ts +2 -2
- package/dist/types/message-bus.d.ts.map +1 -1
- package/dist/types/message-bus.js +1 -2
- package/dist/types/source-options.d.ts +6 -5
- package/dist/types/source-options.d.ts.map +1 -1
- package/dist/types/source-options.js +1 -2
- package/dist/utils/generate-message.d.ts +6 -0
- package/dist/utils/generate-message.d.ts.map +1 -0
- package/dist/utils/generate-message.js +15 -0
- package/dist/utils/generate-message.js.map +1 -0
- package/dist/utils/generate-source.d.ts +7 -0
- package/dist/utils/generate-source.d.ts.map +1 -0
- package/dist/utils/generate-source.js +38 -0
- package/dist/utils/generate-source.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/write-message.d.ts +7 -0
- package/dist/utils/write-message.d.ts.map +1 -0
- package/dist/utils/write-message.js +25 -0
- package/dist/utils/write-message.js.map +1 -0
- package/dist/utils/write-source.d.ts +7 -0
- package/dist/utils/write-source.d.ts.map +1 -0
- package/dist/utils/write-source.js +43 -0
- package/dist/utils/write-source.js.map +1 -0
- package/package.json +39 -38
- package/dist/mocks/index.d.ts +0 -7
- package/dist/mocks/index.d.ts.map +0 -1
- package/dist/mocks/index.js +0 -26
- package/dist/mocks/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,27 +1,35 @@
|
|
|
1
1
|
# @lindorm/iris
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Decorator-driven messaging for Node.js with a single API across multiple brokers. Define messages once, publish and subscribe against memory, RabbitMQ, Kafka, NATS, or Redis Streams.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lindorm/iris
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
This package is **ESM-only** and ships native (TC39 stage 3) decorators. Use it from an ESM project (`"type": "module"`) and a TypeScript version that supports stage 3 decorators (TS 5+). The package polyfills `Symbol.metadata` for older Node versions, so no extra setup is required.
|
|
4
12
|
|
|
5
13
|
## Supported Drivers
|
|
6
14
|
|
|
7
|
-
|
|
8
|
-
| ------------ | --------------- | ----------------------------------- |
|
|
9
|
-
| **Memory** | _(none)_ | Testing, prototyping |
|
|
10
|
-
| **RabbitMQ** | `amqplib` | Task queues, complex routing |
|
|
11
|
-
| **Kafka** | `kafkajs` | High-throughput event streaming |
|
|
12
|
-
| **NATS** | `nats` | Low-latency, cloud-native systems |
|
|
13
|
-
| **Redis** | `ioredis` | Lightweight streams, existing infra |
|
|
15
|
+
Iris is broker-agnostic. The driver is chosen via the `IrisSource` constructor; the matching peer dependency is loaded lazily and only needs to be installed for the driver(s) you use.
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
| Driver | Peer Dependency |
|
|
18
|
+
| -------- | --------------- |
|
|
19
|
+
| `memory` | _(none)_ |
|
|
20
|
+
| `rabbit` | `amqplib` ^0.10 |
|
|
21
|
+
| `kafka` | `kafkajs` ^2.2 |
|
|
22
|
+
| `nats` | `nats` ^2.29 |
|
|
23
|
+
| `redis` | `ioredis` ^5.10 |
|
|
16
24
|
|
|
17
|
-
|
|
18
|
-
npm install @lindorm/iris
|
|
25
|
+
`@lindorm/amphora` ^0.4 is an optional peer used for payload encryption (`@Encrypted`). `@lindorm/logger` ^0.5 is a required peer — every `IrisSource` takes an `ILogger`.
|
|
19
26
|
|
|
20
|
-
|
|
21
|
-
npm install amqplib
|
|
22
|
-
npm install kafkajs
|
|
23
|
-
npm install nats
|
|
24
|
-
npm install ioredis
|
|
27
|
+
```bash
|
|
28
|
+
npm install amqplib # RabbitMQ
|
|
29
|
+
npm install kafkajs # Kafka
|
|
30
|
+
npm install nats # NATS
|
|
31
|
+
npm install ioredis # Redis Streams
|
|
32
|
+
npm install @lindorm/amphora # Encryption (optional)
|
|
25
33
|
```
|
|
26
34
|
|
|
27
35
|
## Quick Start
|
|
@@ -30,14 +38,13 @@ npm install ioredis # Redis Streams
|
|
|
30
38
|
|
|
31
39
|
```typescript
|
|
32
40
|
import {
|
|
33
|
-
Message,
|
|
34
|
-
Namespace,
|
|
35
|
-
Version,
|
|
36
41
|
Field,
|
|
37
42
|
IdentifierField,
|
|
43
|
+
Message,
|
|
44
|
+
Namespace,
|
|
38
45
|
TimestampField,
|
|
46
|
+
Version,
|
|
39
47
|
} from "@lindorm/iris";
|
|
40
|
-
import type { IMessage } from "@lindorm/iris";
|
|
41
48
|
|
|
42
49
|
@Message()
|
|
43
50
|
@Namespace("orders")
|
|
@@ -50,7 +57,7 @@ class OrderPlaced {
|
|
|
50
57
|
}
|
|
51
58
|
```
|
|
52
59
|
|
|
53
|
-
### 2. Create a Source
|
|
60
|
+
### 2. Create a Source
|
|
54
61
|
|
|
55
62
|
```typescript
|
|
56
63
|
import { IrisSource } from "@lindorm/iris";
|
|
@@ -71,7 +78,6 @@ await source.setup();
|
|
|
71
78
|
```typescript
|
|
72
79
|
const bus = source.messageBus(OrderPlaced);
|
|
73
80
|
|
|
74
|
-
// Subscribe
|
|
75
81
|
await bus.subscribe({
|
|
76
82
|
topic: "OrderPlaced",
|
|
77
83
|
queue: "order-service",
|
|
@@ -80,7 +86,6 @@ await bus.subscribe({
|
|
|
80
86
|
},
|
|
81
87
|
});
|
|
82
88
|
|
|
83
|
-
// Publish
|
|
84
89
|
const msg = bus.create({ orderId: "abc-123", total: 59.99 });
|
|
85
90
|
await bus.publish(msg);
|
|
86
91
|
```
|
|
@@ -92,78 +97,13 @@ await source.drain();
|
|
|
92
97
|
await source.disconnect();
|
|
93
98
|
```
|
|
94
99
|
|
|
95
|
-
## Table of Contents
|
|
96
|
-
|
|
97
|
-
- [Messaging Patterns](#messaging-patterns)
|
|
98
|
-
- [Publisher (Fire-and-Forget)](#publisher-fire-and-forget)
|
|
99
|
-
- [Message Bus (Pub/Sub + Queues)](#message-bus-pubsub--queues)
|
|
100
|
-
- [Worker Queue (Competing Consumers)](#worker-queue-competing-consumers)
|
|
101
|
-
- [RPC (Request/Response)](#rpc-requestresponse)
|
|
102
|
-
- [Stream Processor (Pipelines)](#stream-processor-pipelines)
|
|
103
|
-
- [Field Types](#field-types)
|
|
104
|
-
- [Decorators](#decorators)
|
|
105
|
-
- [Class-Level Decorators](#class-level-decorators)
|
|
106
|
-
- [`@Message`](#message)
|
|
107
|
-
- [`@AbstractMessage`](#abstractmessage)
|
|
108
|
-
- [`@Namespace`](#namespace)
|
|
109
|
-
- [`@Version`](#version)
|
|
110
|
-
- [`@Topic`](#topic)
|
|
111
|
-
- [`@Broadcast`](#broadcast)
|
|
112
|
-
- [`@Persistent`](#persistent)
|
|
113
|
-
- [`@Priority`](#priority)
|
|
114
|
-
- [`@Delay`](#delay)
|
|
115
|
-
- [`@Expiry`](#expiry)
|
|
116
|
-
- [`@Encrypted`](#encrypted)
|
|
117
|
-
- [`@Compressed`](#compressed)
|
|
118
|
-
- [`@Retry`](#retry)
|
|
119
|
-
- [`@DeadLetter`](#deadletter)
|
|
120
|
-
- [Field Decorators](#field-decorators)
|
|
121
|
-
- [`@Field`](#field)
|
|
122
|
-
- [`@IdentifierField`](#identifierfield)
|
|
123
|
-
- [`@CorrelationField`](#correlationfield)
|
|
124
|
-
- [`@TimestampField`](#timestampfield)
|
|
125
|
-
- [`@MandatoryField`](#mandatoryfield)
|
|
126
|
-
- [`@PersistentField`](#persistentfield)
|
|
127
|
-
- [Field Modifiers](#field-modifiers)
|
|
128
|
-
- [`@Generated`](#generated)
|
|
129
|
-
- [`@Header`](#header)
|
|
130
|
-
- [`@Enum`](#enum)
|
|
131
|
-
- [`@Min` / `@Max`](#min--max)
|
|
132
|
-
- [`@Schema`](#schema)
|
|
133
|
-
- [`@Transform`](#transform)
|
|
134
|
-
- [Lifecycle Hook Decorators](#lifecycle-hook-decorators)
|
|
135
|
-
- [`@OnCreate`](#oncreate)
|
|
136
|
-
- [`@OnHydrate`](#onhydrate)
|
|
137
|
-
- [`@OnValidate`](#onvalidate)
|
|
138
|
-
- [`@BeforePublish` / `@AfterPublish`](#beforepublish--afterpublish)
|
|
139
|
-
- [`@BeforeConsume` / `@AfterConsume`](#beforeconsume--afterconsume)
|
|
140
|
-
- [`@OnConsumeError`](#onconsumeerror)
|
|
141
|
-
- [Retry and Dead Letter](#retry-and-dead-letter)
|
|
142
|
-
- [Dynamic Topics](#dynamic-topics)
|
|
143
|
-
- [Encryption and Compression](#encryption-and-compression)
|
|
144
|
-
- [Message Subscribers](#message-subscribers)
|
|
145
|
-
- [Hook Execution Order](#hook-execution-order)
|
|
146
|
-
- [Consume Envelope](#consume-envelope)
|
|
147
|
-
- [Message Manipulation](#message-manipulation)
|
|
148
|
-
- [Publish Options](#publish-options)
|
|
149
|
-
- [Zod Validation](#zod-validation)
|
|
150
|
-
- [Cloning](#cloning)
|
|
151
|
-
- [Driver Configuration](#driver-configuration)
|
|
152
|
-
- [Memory](#memory)
|
|
153
|
-
- [RabbitMQ](#rabbitmq)
|
|
154
|
-
- [Kafka](#kafka)
|
|
155
|
-
- [NATS](#nats)
|
|
156
|
-
- [Redis Streams](#redis-streams)
|
|
157
|
-
- [Persistence (Delay and Dead Letter Stores)](#persistence-delay-and-dead-letter-stores)
|
|
158
|
-
- [Connection State](#connection-state)
|
|
159
|
-
- [Testing with Mocks](#testing-with-mocks)
|
|
160
|
-
- [Error Classes](#error-classes)
|
|
161
|
-
|
|
162
100
|
## Messaging Patterns
|
|
163
101
|
|
|
164
|
-
|
|
102
|
+
Every primitive below is created from an `IrisSource` (or a session — see [Sessions](#sessions)) and is bound to a single message class.
|
|
103
|
+
|
|
104
|
+
### Publisher
|
|
165
105
|
|
|
166
|
-
Write-only.
|
|
106
|
+
Write-only. Use when a service produces messages but never consumes them.
|
|
167
107
|
|
|
168
108
|
```typescript
|
|
169
109
|
const pub = source.publisher(OrderPlaced);
|
|
@@ -171,68 +111,60 @@ const pub = source.publisher(OrderPlaced);
|
|
|
171
111
|
const msg = pub.create({ orderId: "abc-123", total: 59.99 });
|
|
172
112
|
await pub.publish(msg);
|
|
173
113
|
|
|
174
|
-
// Batch publish
|
|
175
114
|
await pub.publish([msg1, msg2, msg3]);
|
|
176
115
|
```
|
|
177
116
|
|
|
178
|
-
### Message Bus
|
|
117
|
+
### Message Bus
|
|
179
118
|
|
|
180
|
-
|
|
119
|
+
Pub/sub with topic-based subscriptions. Supports broadcast and competing-consumer queues.
|
|
181
120
|
|
|
182
121
|
```typescript
|
|
183
122
|
const bus = source.messageBus(OrderPlaced);
|
|
184
123
|
|
|
185
|
-
// Broadcast: every subscriber receives every message
|
|
186
124
|
await bus.subscribe({
|
|
187
125
|
topic: "OrderPlaced",
|
|
188
126
|
callback: async (msg) => {
|
|
189
|
-
/*
|
|
127
|
+
/* every subscriber gets every message */
|
|
190
128
|
},
|
|
191
129
|
});
|
|
192
130
|
|
|
193
|
-
// Queue: messages are distributed round-robin among consumers
|
|
194
131
|
await bus.subscribe({
|
|
195
132
|
topic: "OrderPlaced",
|
|
196
133
|
queue: "order-processors",
|
|
197
134
|
callback: async (msg) => {
|
|
198
|
-
/*
|
|
135
|
+
/* round-robin across consumers in this queue */
|
|
199
136
|
},
|
|
200
137
|
});
|
|
201
138
|
|
|
202
|
-
// Multiple subscriptions at once
|
|
203
139
|
await bus.subscribe([
|
|
204
140
|
{ topic: "OrderPlaced", queue: "analytics", callback: handleAnalytics },
|
|
205
141
|
{ topic: "OrderPlaced", queue: "notifications", callback: handleNotify },
|
|
206
142
|
]);
|
|
207
143
|
|
|
208
|
-
// Unsubscribe
|
|
209
144
|
await bus.unsubscribe({ topic: "OrderPlaced", queue: "analytics" });
|
|
210
145
|
await bus.unsubscribeAll();
|
|
211
146
|
```
|
|
212
147
|
|
|
213
|
-
### Worker Queue
|
|
148
|
+
### Worker Queue
|
|
214
149
|
|
|
215
|
-
Specialised
|
|
150
|
+
Specialised competing-consumer queue where every message is processed by exactly one consumer.
|
|
216
151
|
|
|
217
152
|
```typescript
|
|
218
153
|
const queue = source.workerQueue(OrderPlaced);
|
|
219
154
|
|
|
220
|
-
// Register competing consumers
|
|
221
155
|
await queue.consume("process-orders", async (msg, envelope) => {
|
|
222
156
|
console.log(`Processing order ${msg.orderId} (attempt ${envelope.attempt})`);
|
|
223
157
|
});
|
|
224
158
|
|
|
225
|
-
// Publish work
|
|
226
159
|
await queue.publish(queue.create({ orderId: "abc-123", total: 59.99 }));
|
|
227
160
|
|
|
228
|
-
// Clean up
|
|
229
161
|
await queue.unconsume("process-orders");
|
|
230
162
|
await queue.unconsumeAll();
|
|
231
163
|
```
|
|
232
164
|
|
|
233
|
-
### RPC
|
|
165
|
+
### RPC
|
|
234
166
|
|
|
235
|
-
|
|
167
|
+
Request/response over the broker.
|
|
236
168
|
|
|
237
169
|
```typescript
|
|
238
170
|
@Message()
|
|
@@ -249,7 +181,6 @@ class PriceResponse {
|
|
|
249
181
|
const client = source.rpcClient(GetPrice, PriceResponse);
|
|
250
182
|
const server = source.rpcServer(GetPrice, PriceResponse);
|
|
251
183
|
|
|
252
|
-
// Server: register handler
|
|
253
184
|
await server.serve(async (req) => {
|
|
254
185
|
const res = new PriceResponse();
|
|
255
186
|
res.price = await lookupPrice(req.sku);
|
|
@@ -257,38 +188,21 @@ await server.serve(async (req) => {
|
|
|
257
188
|
return res;
|
|
258
189
|
});
|
|
259
190
|
|
|
260
|
-
// Client: send request
|
|
261
191
|
const req = new GetPrice();
|
|
262
192
|
req.sku = "WIDGET-42";
|
|
263
193
|
|
|
264
194
|
const res = await client.request(req);
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
// With timeout
|
|
268
|
-
const res2 = await client.request(req, { timeout: 5000 });
|
|
195
|
+
const resWithTimeout = await client.request(req, { timeout: 5000 });
|
|
269
196
|
|
|
270
|
-
// Clean up
|
|
271
197
|
await client.close();
|
|
272
198
|
await server.unserveAll();
|
|
273
199
|
```
|
|
274
200
|
|
|
275
|
-
### Stream Processor
|
|
201
|
+
### Stream Processor
|
|
276
202
|
|
|
277
|
-
Declarative
|
|
203
|
+
Declarative pipelines built with an immutable builder. The pipeline is started, paused, resumed, and stopped explicitly.
|
|
278
204
|
|
|
279
205
|
```typescript
|
|
280
|
-
@Message()
|
|
281
|
-
class RawEvent {
|
|
282
|
-
@Field("string") type!: string;
|
|
283
|
-
@Field("float") value!: number;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
@Message()
|
|
287
|
-
class AggregatedEvent {
|
|
288
|
-
@Field("float") sum!: number;
|
|
289
|
-
@Field("integer") count!: number;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
206
|
const pipeline = source
|
|
293
207
|
.stream()
|
|
294
208
|
.from(RawEvent)
|
|
@@ -302,22 +216,23 @@ const pipeline = source
|
|
|
302
216
|
.to(AggregatedEvent);
|
|
303
217
|
|
|
304
218
|
await pipeline.start();
|
|
305
|
-
|
|
306
|
-
|
|
219
|
+
pipeline.isRunning(); // true
|
|
307
220
|
await pipeline.pause();
|
|
308
221
|
await pipeline.resume();
|
|
309
222
|
await pipeline.stop();
|
|
310
223
|
```
|
|
311
224
|
|
|
225
|
+
The builder also exposes `flatMap((msg) => Array<T>)` and `batch(size, { timeout? })` between `from(...)` and `to(...)`.
|
|
226
|
+
|
|
312
227
|
## Field Types
|
|
313
228
|
|
|
314
|
-
|
|
229
|
+
`@Field()` accepts the following type identifiers:
|
|
315
230
|
|
|
316
231
|
| Category | Types |
|
|
317
232
|
| -------------- | -------------------------------- |
|
|
318
233
|
| Boolean | `boolean` |
|
|
319
234
|
| Integer | `integer`, `bigint` |
|
|
320
|
-
| Floating
|
|
235
|
+
| Floating point | `float` |
|
|
321
236
|
| String | `string`, `email`, `url`, `uuid` |
|
|
322
237
|
| Enum | `enum` |
|
|
323
238
|
| Date/Time | `date` |
|
|
@@ -325,7 +240,7 @@ The `@Field()` decorator accepts the following type identifiers:
|
|
|
325
240
|
|
|
326
241
|
```typescript
|
|
327
242
|
@Message()
|
|
328
|
-
class
|
|
243
|
+
class Example {
|
|
329
244
|
@IdentifierField() id!: string;
|
|
330
245
|
@CorrelationField() correlationId!: string;
|
|
331
246
|
@TimestampField() createdAt!: Date;
|
|
@@ -341,24 +256,22 @@ class FullExample {
|
|
|
341
256
|
@Field("array") tags!: Array<string>;
|
|
342
257
|
@Field("object") metadata!: Record<string, unknown>;
|
|
343
258
|
|
|
344
|
-
@Field("string"
|
|
345
|
-
@Field("string"
|
|
346
|
-
@Field("integer"
|
|
347
|
-
@
|
|
259
|
+
@Nullable() @Field("string") description!: string | null;
|
|
260
|
+
@Optional() @Field("string") nickname?: string;
|
|
261
|
+
@Default(0) @Field("integer") retryCount!: number;
|
|
262
|
+
@Default(() => "generated") @Field("string") code!: string;
|
|
348
263
|
}
|
|
349
264
|
```
|
|
350
265
|
|
|
351
266
|
## Decorators
|
|
352
267
|
|
|
353
|
-
All decorators use the TC39
|
|
268
|
+
All decorators use the TC39 stage 3 specification. Class decorators receive `ClassDecoratorContext`, field decorators receive `ClassFieldDecoratorContext`. Metadata flows through the `Symbol.metadata` prototype chain, so abstract base classes propagate fields and hooks to concrete subclasses automatically.
|
|
354
269
|
|
|
355
270
|
### Class-Level Decorators
|
|
356
271
|
|
|
357
|
-
These decorators are applied to classes and configure message-wide behavior.
|
|
358
|
-
|
|
359
272
|
#### `@Message`
|
|
360
273
|
|
|
361
|
-
Marks a class as a concrete message
|
|
274
|
+
Marks a class as a concrete message and registers it in the global message registry. Every message must have exactly one of `@Message` or `@AbstractMessage`.
|
|
362
275
|
|
|
363
276
|
```typescript
|
|
364
277
|
@Message()
|
|
@@ -366,17 +279,17 @@ class OrderPlaced {
|
|
|
366
279
|
/* ... */
|
|
367
280
|
}
|
|
368
281
|
|
|
369
|
-
@Message({ name: "order-placed" })
|
|
370
|
-
class
|
|
282
|
+
@Message({ name: "order-placed" })
|
|
283
|
+
class OrderPlaced_v1 {
|
|
371
284
|
/* ... */
|
|
372
285
|
}
|
|
373
286
|
```
|
|
374
287
|
|
|
375
|
-
**Options:** `{ name?: string }` —
|
|
288
|
+
**Options:** `{ name?: string }` — overrides the registered name. Defaults to the class name with any trailing `_v1`/`_V2` suffix stripped. Names must be unique across the registry.
|
|
376
289
|
|
|
377
290
|
#### `@AbstractMessage`
|
|
378
291
|
|
|
379
|
-
Marks a class as an abstract
|
|
292
|
+
Marks a class as an abstract base. The class is **not** registered. Fields, hooks, and metadata are inherited by `@Message` subclasses through the metadata prototype chain.
|
|
380
293
|
|
|
381
294
|
```typescript
|
|
382
295
|
@AbstractMessage()
|
|
@@ -392,11 +305,9 @@ class OrderPlaced extends BaseEvent {
|
|
|
392
305
|
}
|
|
393
306
|
```
|
|
394
307
|
|
|
395
|
-
Cannot be combined with `@Message` on the same class.
|
|
396
|
-
|
|
397
308
|
#### `@Namespace`
|
|
398
309
|
|
|
399
|
-
Places the message in a named namespace for
|
|
310
|
+
Places the message in a named namespace for routing and grouping.
|
|
400
311
|
|
|
401
312
|
```typescript
|
|
402
313
|
@Namespace("orders")
|
|
@@ -406,11 +317,11 @@ class OrderPlaced {
|
|
|
406
317
|
}
|
|
407
318
|
```
|
|
408
319
|
|
|
409
|
-
**Argument:** `string` —
|
|
320
|
+
**Argument:** `string` — non-empty, non-whitespace. Throws `IrisMetadataError` otherwise.
|
|
410
321
|
|
|
411
322
|
#### `@Version`
|
|
412
323
|
|
|
413
|
-
Sets the message schema version.
|
|
324
|
+
Sets the message schema version.
|
|
414
325
|
|
|
415
326
|
```typescript
|
|
416
327
|
@Version(1)
|
|
@@ -420,14 +331,14 @@ class OrderPlaced {
|
|
|
420
331
|
}
|
|
421
332
|
```
|
|
422
333
|
|
|
423
|
-
**Argument:** `number` —
|
|
334
|
+
**Argument:** `number` — positive integer (>= 1). Throws `IrisMetadataError` otherwise.
|
|
424
335
|
|
|
425
336
|
#### `@Topic`
|
|
426
337
|
|
|
427
|
-
Provides a
|
|
338
|
+
Provides a callback that resolves the routing topic dynamically from the message instance instead of using the class name.
|
|
428
339
|
|
|
429
340
|
```typescript
|
|
430
|
-
@Topic((msg:
|
|
341
|
+
@Topic((msg: RegionalEvent) => `events.${msg.region}.${msg.type}`)
|
|
431
342
|
@Message()
|
|
432
343
|
class RegionalEvent {
|
|
433
344
|
@Field("string") region!: string;
|
|
@@ -435,128 +346,118 @@ class RegionalEvent {
|
|
|
435
346
|
}
|
|
436
347
|
```
|
|
437
348
|
|
|
438
|
-
**Argument:** `(message: any) => string
|
|
349
|
+
**Argument:** `(message: any) => string`.
|
|
439
350
|
|
|
440
351
|
#### `@Broadcast`
|
|
441
352
|
|
|
442
|
-
Marks a message for broadcast delivery.
|
|
353
|
+
Marks a message for broadcast delivery. Every subscriber receives every message rather than competing for it.
|
|
443
354
|
|
|
444
355
|
```typescript
|
|
445
356
|
@Broadcast()
|
|
446
357
|
@Message()
|
|
447
358
|
class SystemNotification {
|
|
448
|
-
|
|
359
|
+
/* ... */
|
|
449
360
|
}
|
|
450
361
|
```
|
|
451
362
|
|
|
452
|
-
No arguments.
|
|
453
|
-
|
|
454
363
|
#### `@Persistent`
|
|
455
364
|
|
|
456
|
-
Marks a message as
|
|
365
|
+
Marks a message as durable. Persistent messages survive broker restarts where the underlying driver supports it.
|
|
457
366
|
|
|
458
367
|
```typescript
|
|
459
368
|
@Persistent()
|
|
460
369
|
@Message()
|
|
461
370
|
class PaymentCharge {
|
|
462
|
-
|
|
371
|
+
/* ... */
|
|
463
372
|
}
|
|
464
373
|
```
|
|
465
374
|
|
|
466
|
-
No arguments.
|
|
467
|
-
|
|
468
375
|
#### `@Priority`
|
|
469
376
|
|
|
470
|
-
|
|
377
|
+
Default priority for a message type. Higher priority messages are delivered first where supported.
|
|
471
378
|
|
|
472
379
|
```typescript
|
|
473
380
|
@Priority(8)
|
|
474
381
|
@Message()
|
|
475
382
|
class UrgentAlert {
|
|
476
|
-
|
|
383
|
+
/* ... */
|
|
477
384
|
}
|
|
478
385
|
```
|
|
479
386
|
|
|
480
|
-
**Argument:** `number` — integer
|
|
387
|
+
**Argument:** `number` — integer in `[0, 10]`. Throws `IrisMetadataError` otherwise.
|
|
481
388
|
|
|
482
389
|
#### `@Delay`
|
|
483
390
|
|
|
484
|
-
|
|
391
|
+
Default delivery delay in milliseconds. Messages are held until the delay elapses. Can be overridden per publish via `PublishOptions.delay`.
|
|
485
392
|
|
|
486
393
|
```typescript
|
|
487
|
-
@Delay(5000)
|
|
394
|
+
@Delay(5000)
|
|
488
395
|
@Message()
|
|
489
396
|
class ScheduledReminder {
|
|
490
|
-
|
|
397
|
+
/* ... */
|
|
491
398
|
}
|
|
492
399
|
```
|
|
493
400
|
|
|
494
|
-
**Argument:** `number` — non-negative integer
|
|
495
|
-
|
|
496
|
-
Can be overridden per-publish via `PublishOptions.delay`.
|
|
401
|
+
**Argument:** `number` — non-negative integer.
|
|
497
402
|
|
|
498
403
|
#### `@Expiry`
|
|
499
404
|
|
|
500
|
-
|
|
405
|
+
Default TTL in milliseconds. Unconsumed messages are discarded after this window. Can be overridden per publish via `PublishOptions.expiry`.
|
|
501
406
|
|
|
502
407
|
```typescript
|
|
503
|
-
@Expiry(60000)
|
|
408
|
+
@Expiry(60000)
|
|
504
409
|
@Message()
|
|
505
410
|
class TemporaryOffer {
|
|
506
|
-
|
|
411
|
+
/* ... */
|
|
507
412
|
}
|
|
508
413
|
```
|
|
509
414
|
|
|
510
|
-
**Argument:** `number` — non-negative integer
|
|
511
|
-
|
|
512
|
-
Can be overridden per-publish via `PublishOptions.expiry`.
|
|
415
|
+
**Argument:** `number` — non-negative integer.
|
|
513
416
|
|
|
514
417
|
#### `@Encrypted`
|
|
515
418
|
|
|
516
|
-
|
|
419
|
+
Encrypts the payload via `@lindorm/amphora` before publishing and decrypts on consume. Requires `amphora` on `IrisSource`.
|
|
517
420
|
|
|
518
421
|
```typescript
|
|
519
|
-
@Encrypted()
|
|
422
|
+
@Encrypted()
|
|
520
423
|
@Message()
|
|
521
424
|
class SensitivePayload {
|
|
522
425
|
@Field("string") ssn!: string;
|
|
523
426
|
}
|
|
524
427
|
|
|
525
|
-
@Encrypted({ purpose: "pii" })
|
|
428
|
+
@Encrypted({ purpose: "pii" })
|
|
526
429
|
@Message()
|
|
527
430
|
class MedicalRecord {
|
|
528
|
-
@Field("
|
|
431
|
+
@Field("object") data!: Record<string, unknown>;
|
|
529
432
|
}
|
|
530
433
|
```
|
|
531
434
|
|
|
532
|
-
**Argument:** `AmphoraPredicate` (
|
|
435
|
+
**Argument:** `AmphoraPredicate` (defaults to `{}`) — predicate object that selects which key from the amphora key store is used (e.g. `algorithm`, `encryption`, `purpose`, `type`, `ownerId`, plus the standard `$eq`, `$in`, `$neq` operators).
|
|
533
436
|
|
|
534
437
|
#### `@Compressed`
|
|
535
438
|
|
|
536
|
-
|
|
439
|
+
Compresses the payload before publishing.
|
|
537
440
|
|
|
538
441
|
```typescript
|
|
539
442
|
@Compressed() // gzip (default)
|
|
540
|
-
@Compressed("brotli") // brotli
|
|
443
|
+
@Compressed("brotli") // brotli
|
|
541
444
|
@Message()
|
|
542
445
|
class LargePayload {
|
|
543
446
|
@Field("object") data!: Record<string, unknown>;
|
|
544
447
|
}
|
|
545
448
|
```
|
|
546
449
|
|
|
547
|
-
**Argument:** `"gzip" | "deflate" | "brotli"` (
|
|
548
|
-
|
|
549
|
-
When combined with `@Encrypted`, compression is applied first, then encryption.
|
|
450
|
+
**Argument:** `"gzip" | "deflate" | "brotli"` (defaults to `"gzip"`). When combined with `@Encrypted`, compression runs first.
|
|
550
451
|
|
|
551
452
|
#### `@Retry`
|
|
552
453
|
|
|
553
|
-
Configures
|
|
454
|
+
Configures retry behavior when a consume callback throws.
|
|
554
455
|
|
|
555
456
|
```typescript
|
|
556
|
-
@Retry()
|
|
457
|
+
@Retry()
|
|
557
458
|
@Message()
|
|
558
459
|
class ProcessOrder {
|
|
559
|
-
|
|
460
|
+
/* ... */
|
|
560
461
|
}
|
|
561
462
|
|
|
562
463
|
@Retry({
|
|
@@ -569,253 +470,147 @@ class ProcessOrder {
|
|
|
569
470
|
})
|
|
570
471
|
@Message()
|
|
571
472
|
class PaymentCharge {
|
|
572
|
-
|
|
473
|
+
/* ... */
|
|
573
474
|
}
|
|
574
475
|
```
|
|
575
476
|
|
|
576
477
|
**Options:**
|
|
577
478
|
|
|
578
|
-
| Field | Type | Default | Description
|
|
579
|
-
| ------------ | --------------------------------------------- | ------------ |
|
|
580
|
-
| `maxRetries` | `number` | `3` | Maximum number of retry attempts
|
|
581
|
-
| `strategy` | `"constant"` \| `"linear"` \| `"exponential"` | `"constant"` | Backoff strategy
|
|
582
|
-
| `delay` | `number` | `1000` | Initial delay in milliseconds
|
|
583
|
-
| `delayMax` | `number` | `30000` | Maximum delay cap in milliseconds
|
|
584
|
-
| `multiplier` | `number` | `2` | Multiplier
|
|
585
|
-
| `jitter` | `boolean` | `false` | Add randomness to
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
|
590
|
-
|
|
|
591
|
-
| `"
|
|
592
|
-
| `"linear"` | 1000, 2000, 3000, ... |
|
|
593
|
-
| `"exponential"` | 1000, 2000, 4000, 8000, ... (capped at max) |
|
|
479
|
+
| Field | Type | Default | Description |
|
|
480
|
+
| ------------ | --------------------------------------------- | ------------ | -------------------------------------- |
|
|
481
|
+
| `maxRetries` | `number` | `3` | Maximum number of retry attempts |
|
|
482
|
+
| `strategy` | `"constant"` \| `"linear"` \| `"exponential"` | `"constant"` | Backoff strategy |
|
|
483
|
+
| `delay` | `number` | `1000` | Initial delay in milliseconds |
|
|
484
|
+
| `delayMax` | `number` | `30000` | Maximum delay cap in milliseconds |
|
|
485
|
+
| `multiplier` | `number` | `2` | Multiplier used by exponential backoff |
|
|
486
|
+
| `jitter` | `boolean` | `false` | Add randomness to spread retry storms |
|
|
487
|
+
|
|
488
|
+
| Strategy | Delay sequence (`delay=1000`, `multiplier=2`) |
|
|
489
|
+
| --------------- | ---------------------------------------------------- |
|
|
490
|
+
| `"constant"` | `1000, 1000, 1000, ...` |
|
|
491
|
+
| `"linear"` | `1000, 2000, 3000, ...` |
|
|
492
|
+
| `"exponential"` | `1000, 2000, 4000, 8000, ...` (capped at `delayMax`) |
|
|
594
493
|
|
|
595
494
|
#### `@DeadLetter`
|
|
596
495
|
|
|
597
|
-
Routes messages that
|
|
496
|
+
Routes messages that exhaust all retries to the configured dead letter store. Requires `@Retry` and `IrisSource.persistence.deadLetter`.
|
|
598
497
|
|
|
599
498
|
```typescript
|
|
600
499
|
@Retry({ maxRetries: 3 })
|
|
601
500
|
@DeadLetter()
|
|
602
501
|
@Message()
|
|
603
502
|
class PaymentCharge {
|
|
604
|
-
|
|
503
|
+
/* ... */
|
|
605
504
|
}
|
|
606
505
|
```
|
|
607
506
|
|
|
608
|
-
No arguments.
|
|
609
|
-
|
|
610
|
-
---
|
|
611
|
-
|
|
612
507
|
### Field Decorators
|
|
613
508
|
|
|
614
|
-
|
|
509
|
+
Each field decorator declares one message field with its type, default, and nullability. Combine with the modifier decorators below.
|
|
615
510
|
|
|
616
511
|
#### `@Field`
|
|
617
512
|
|
|
618
|
-
|
|
513
|
+
Declares a field with an explicit type from the [Field Types](#field-types) table.
|
|
619
514
|
|
|
620
515
|
```typescript
|
|
621
|
-
@Field("string")
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
@Field("
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
@Field("float")
|
|
628
|
-
price!: number;
|
|
629
|
-
|
|
630
|
-
@Field("boolean")
|
|
631
|
-
active!: boolean;
|
|
632
|
-
|
|
633
|
-
@Field("date")
|
|
634
|
-
expiresAt!: Date;
|
|
635
|
-
|
|
636
|
-
@Field("uuid")
|
|
637
|
-
referenceId!: string;
|
|
638
|
-
|
|
639
|
-
@Field("email")
|
|
640
|
-
contactEmail!: string;
|
|
641
|
-
|
|
642
|
-
@Field("url")
|
|
643
|
-
callbackUrl!: string;
|
|
644
|
-
|
|
645
|
-
@Field("array")
|
|
646
|
-
tags!: Array<string>;
|
|
647
|
-
|
|
648
|
-
@Field("object")
|
|
649
|
-
metadata!: Record<string, unknown>;
|
|
516
|
+
@Field("string") name!: string;
|
|
517
|
+
@Field("integer") count!: number;
|
|
518
|
+
@Field("date") expiresAt!: Date;
|
|
519
|
+
@Field("array") tags!: Array<string>;
|
|
520
|
+
@Field("object") metadata!: Record<string, unknown>;
|
|
650
521
|
```
|
|
651
522
|
|
|
652
|
-
**
|
|
653
|
-
|
|
654
|
-
**Options:**
|
|
655
|
-
|
|
656
|
-
| Field | Type | Default | Description |
|
|
657
|
-
| ----------- | -------------------------------- | ------- | ----------------------------------------- |
|
|
658
|
-
| `nullable` | `boolean` | `false` | Allow `null` values |
|
|
659
|
-
| `optional` | `boolean` | `false` | Field may be omitted |
|
|
660
|
-
| `default` | `value \| (() => value) \| null` | `null` | Default value applied on create |
|
|
661
|
-
| `transform` | `MetaTransform \| null` | `null` | Inline serialisation/deserialisation pair |
|
|
662
|
-
|
|
663
|
-
```typescript
|
|
664
|
-
@Field("string", { nullable: true })
|
|
665
|
-
description!: string | null;
|
|
666
|
-
|
|
667
|
-
@Field("string", { optional: true })
|
|
668
|
-
nickname?: string;
|
|
669
|
-
|
|
670
|
-
@Field("integer", { default: 0 })
|
|
671
|
-
retryCount!: number;
|
|
672
|
-
|
|
673
|
-
@Field("string", { default: () => "generated" })
|
|
674
|
-
code!: string;
|
|
675
|
-
|
|
676
|
-
@Field("float", {
|
|
677
|
-
transform: {
|
|
678
|
-
to: (value: number) => Math.round(value * 100),
|
|
679
|
-
from: (raw: number) => raw / 100,
|
|
680
|
-
},
|
|
681
|
-
})
|
|
682
|
-
price!: number;
|
|
683
|
-
```
|
|
523
|
+
**Argument:** `MetaFieldType` (re-exported as `IrisFieldType`).
|
|
684
524
|
|
|
685
525
|
#### `@IdentifierField`
|
|
686
526
|
|
|
687
|
-
|
|
527
|
+
Auto-generated UUID v4 primary identifier. Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
|
|
688
528
|
|
|
689
529
|
```typescript
|
|
690
|
-
@IdentifierField()
|
|
691
|
-
id!: string;
|
|
530
|
+
@IdentifierField() id!: string;
|
|
692
531
|
```
|
|
693
532
|
|
|
694
|
-
Equivalent to `@Field("uuid", { default: () => randomUUID() })`. Non-nullable, non-optional.
|
|
695
|
-
|
|
696
|
-
No arguments.
|
|
697
|
-
|
|
698
533
|
#### `@CorrelationField`
|
|
699
534
|
|
|
700
|
-
|
|
535
|
+
Auto-generated UUID v4 used to trace related messages across publish/consume chains. Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
|
|
701
536
|
|
|
702
537
|
```typescript
|
|
703
|
-
@CorrelationField()
|
|
704
|
-
correlationId!: string;
|
|
538
|
+
@CorrelationField() correlationId!: string;
|
|
705
539
|
```
|
|
706
540
|
|
|
707
|
-
Equivalent to `@Field("uuid", { default: () => randomUUID() })`. Non-nullable, non-optional.
|
|
708
|
-
|
|
709
|
-
No arguments.
|
|
710
|
-
|
|
711
541
|
#### `@TimestampField`
|
|
712
542
|
|
|
713
|
-
|
|
543
|
+
Auto-generated `Date` set on creation. Equivalent to `@Default(() => new Date()) @Field("date")`. Non-nullable, non-optional.
|
|
714
544
|
|
|
715
545
|
```typescript
|
|
716
|
-
@TimestampField()
|
|
717
|
-
createdAt!: Date;
|
|
546
|
+
@TimestampField() createdAt!: Date;
|
|
718
547
|
```
|
|
719
548
|
|
|
720
|
-
Equivalent to `@Field("date", { default: () => new Date() })`. Non-nullable, non-optional.
|
|
721
|
-
|
|
722
|
-
No arguments.
|
|
723
|
-
|
|
724
549
|
#### `@MandatoryField`
|
|
725
550
|
|
|
726
|
-
|
|
551
|
+
Boolean flag that defaults to `false`. Equivalent to `@Default(false) @Field("boolean")`.
|
|
727
552
|
|
|
728
553
|
```typescript
|
|
729
|
-
@MandatoryField()
|
|
730
|
-
requiresApproval!: boolean;
|
|
554
|
+
@MandatoryField() requiresApproval!: boolean;
|
|
731
555
|
```
|
|
732
556
|
|
|
733
|
-
Equivalent to `@Field("boolean", { default: false })`. Non-nullable, non-optional.
|
|
734
|
-
|
|
735
|
-
No arguments.
|
|
736
|
-
|
|
737
557
|
#### `@PersistentField`
|
|
738
558
|
|
|
739
|
-
|
|
559
|
+
Boolean persistence flag that defaults to `false`. Equivalent to `@Default(false) @Field("boolean")`.
|
|
740
560
|
|
|
741
561
|
```typescript
|
|
742
|
-
@PersistentField()
|
|
743
|
-
shouldPersist!: boolean;
|
|
562
|
+
@PersistentField() shouldPersist!: boolean;
|
|
744
563
|
```
|
|
745
564
|
|
|
746
|
-
Equivalent to `@Field("boolean", { default: false })`. Non-nullable, non-optional.
|
|
747
|
-
|
|
748
|
-
No arguments.
|
|
749
|
-
|
|
750
|
-
---
|
|
751
|
-
|
|
752
565
|
### Field Modifiers
|
|
753
566
|
|
|
754
|
-
|
|
567
|
+
Stack these on top of a field decorator to refine its behavior.
|
|
755
568
|
|
|
756
|
-
#### `@
|
|
757
|
-
|
|
758
|
-
Marks a field for automatic value generation on message creation.
|
|
569
|
+
#### `@Nullable` / `@Optional`
|
|
759
570
|
|
|
760
571
|
```typescript
|
|
761
|
-
@
|
|
762
|
-
@Field("
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
@Generated("date") // current timestamp
|
|
766
|
-
@Field("date")
|
|
767
|
-
processedAt!: Date;
|
|
768
|
-
|
|
769
|
-
@Generated("string") // random string (default length)
|
|
770
|
-
@Field("string")
|
|
771
|
-
token!: string;
|
|
772
|
-
|
|
773
|
-
@Generated("string", { length: 12 }) // random string with custom length
|
|
774
|
-
@Field("string")
|
|
775
|
-
shortCode!: string;
|
|
572
|
+
@Nullable() @Field("string") description!: string | null;
|
|
573
|
+
@Optional() @Field("string") nickname?: string;
|
|
574
|
+
```
|
|
776
575
|
|
|
777
|
-
|
|
778
|
-
@Field("integer")
|
|
779
|
-
sequenceNumber!: number;
|
|
576
|
+
#### `@Default`
|
|
780
577
|
|
|
781
|
-
|
|
782
|
-
@Field("
|
|
783
|
-
|
|
578
|
+
```typescript
|
|
579
|
+
@Default(0) @Field("integer") retryCount!: number;
|
|
580
|
+
@Default(() => "generated") @Field("string") code!: string;
|
|
784
581
|
```
|
|
785
582
|
|
|
786
|
-
**
|
|
583
|
+
**Argument:** `MetaFieldDefault` (re-exported as `IrisFieldDefault`) — a primitive value, an array/record of primitives, or a no-arg function returning one.
|
|
787
584
|
|
|
788
|
-
|
|
585
|
+
#### `@Generated`
|
|
586
|
+
|
|
587
|
+
Marks a field for automatic value generation when an instance is created.
|
|
789
588
|
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
589
|
+
```typescript
|
|
590
|
+
@Generated("uuid") @Field("uuid") traceId!: string;
|
|
591
|
+
@Generated("date") @Field("date") processedAt!: Date;
|
|
592
|
+
@Generated("string") @Field("string") token!: string;
|
|
593
|
+
@Generated("string", { length: 12 }) @Field("string") shortCode!: string;
|
|
594
|
+
@Generated("integer", { min: 1, max: 1000 }) @Field("integer") sequence!: number;
|
|
595
|
+
@Generated("float", { min: 0, max: 1 }) @Field("float") weight!: number;
|
|
596
|
+
```
|
|
797
597
|
|
|
798
|
-
**
|
|
598
|
+
**Strategies:** `"uuid" | "date" | "string" | "integer" | "float"` (re-exported as `IrisGeneratedStrategy`). **Options:** `{ length?, min?, max? }`.
|
|
799
599
|
|
|
800
600
|
#### `@Header`
|
|
801
601
|
|
|
802
|
-
Promotes a field
|
|
602
|
+
Promotes a field to a transport header so it is accessible without deserialising the body.
|
|
803
603
|
|
|
804
604
|
```typescript
|
|
805
|
-
@Header()
|
|
806
|
-
@Field("
|
|
807
|
-
source!: string;
|
|
808
|
-
|
|
809
|
-
@Header("x-trace-id") // explicit header name
|
|
810
|
-
@Field("uuid")
|
|
811
|
-
traceId!: string;
|
|
605
|
+
@Header() @Field("string") source!: string;
|
|
606
|
+
@Header("x-trace-id") @Field("uuid") traceId!: string;
|
|
812
607
|
```
|
|
813
608
|
|
|
814
|
-
**Argument:** `string?` —
|
|
609
|
+
**Argument:** `string?` — header name, defaults to the property name. Throws `IrisMetadataError` if it resolves to an empty string.
|
|
815
610
|
|
|
816
611
|
#### `@Enum`
|
|
817
612
|
|
|
818
|
-
Restricts
|
|
613
|
+
Restricts the field to the values of a TypeScript enum or `Record<string, string | number>`. Enforced during validation.
|
|
819
614
|
|
|
820
615
|
```typescript
|
|
821
616
|
enum OrderStatus {
|
|
@@ -824,56 +619,34 @@ enum OrderStatus {
|
|
|
824
619
|
Delivered = "delivered",
|
|
825
620
|
}
|
|
826
621
|
|
|
827
|
-
@Enum(OrderStatus)
|
|
828
|
-
@Field("enum")
|
|
829
|
-
status!: OrderStatus;
|
|
622
|
+
@Enum(OrderStatus) @Field("enum") status!: OrderStatus;
|
|
830
623
|
```
|
|
831
624
|
|
|
832
|
-
**Argument:** `Record<string, string | number>` — the enum object or value map.
|
|
833
|
-
|
|
834
625
|
#### `@Min` / `@Max`
|
|
835
626
|
|
|
836
|
-
|
|
627
|
+
Numeric bounds for number fields, length bounds for string fields.
|
|
837
628
|
|
|
838
629
|
```typescript
|
|
839
|
-
@Min(0)
|
|
840
|
-
@Max(
|
|
841
|
-
@Field("integer")
|
|
842
|
-
score!: number;
|
|
843
|
-
|
|
844
|
-
@Min(1)
|
|
845
|
-
@Max(255)
|
|
846
|
-
@Field("string")
|
|
847
|
-
name!: string;
|
|
630
|
+
@Min(0) @Max(100) @Field("integer") score!: number;
|
|
631
|
+
@Min(1) @Max(255) @Field("string") name!: string;
|
|
848
632
|
```
|
|
849
633
|
|
|
850
|
-
**Argument:** `number`.
|
|
851
|
-
|
|
852
634
|
#### `@Schema`
|
|
853
635
|
|
|
854
|
-
Attaches a Zod schema for fine-grained
|
|
636
|
+
Attaches a Zod schema for fine-grained validation.
|
|
855
637
|
|
|
856
638
|
```typescript
|
|
857
639
|
import { z } from "zod";
|
|
858
640
|
|
|
859
|
-
@Schema(z.string().email())
|
|
860
|
-
@Field("
|
|
861
|
-
email!: string;
|
|
862
|
-
|
|
863
|
-
@Schema(z.number().int().min(13).max(150))
|
|
864
|
-
@Field("integer")
|
|
865
|
-
age!: number;
|
|
866
|
-
|
|
867
|
-
@Schema(z.string().regex(/^[A-Z]{2,3}$/))
|
|
868
|
-
@Field("string")
|
|
869
|
-
countryCode!: string;
|
|
641
|
+
@Schema(z.string().email()) @Field("email") email!: string;
|
|
642
|
+
@Schema(z.number().int().min(13).max(150)) @Field("integer") age!: number;
|
|
870
643
|
```
|
|
871
644
|
|
|
872
|
-
**Argument:** `z.ZodType
|
|
645
|
+
**Argument:** `z.ZodType`.
|
|
873
646
|
|
|
874
647
|
#### `@Transform`
|
|
875
648
|
|
|
876
|
-
|
|
649
|
+
Bidirectional transform between the in-memory field value and its serialised form. `to` runs on serialise, `from` runs on hydrate.
|
|
877
650
|
|
|
878
651
|
```typescript
|
|
879
652
|
@Transform({
|
|
@@ -882,259 +655,90 @@ Applies a bidirectional transform to a field value. `to` runs during serialisati
|
|
|
882
655
|
})
|
|
883
656
|
@Field("string")
|
|
884
657
|
tags!: string[];
|
|
885
|
-
|
|
886
|
-
@Transform<Date, number>({
|
|
887
|
-
to: (date) => date.getTime(),
|
|
888
|
-
from: (ms) => new Date(ms),
|
|
889
|
-
})
|
|
890
|
-
@Field("bigint")
|
|
891
|
-
timestamp!: Date;
|
|
892
658
|
```
|
|
893
659
|
|
|
894
|
-
**Options:** `{ to: (value
|
|
895
|
-
|
|
896
|
-
This is a standalone decorator that uses a separate staging path. For inline transforms, use the `transform` option on `@Field` instead.
|
|
897
|
-
|
|
898
|
-
---
|
|
660
|
+
**Options:** `{ to: (value) => unknown, from: (raw) => unknown }` (the type is re-exported as `IrisTransformFn`).
|
|
899
661
|
|
|
900
662
|
### Lifecycle Hook Decorators
|
|
901
663
|
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
Hooks may be async (`void | Promise<void>`) unless otherwise noted.
|
|
664
|
+
Hooks are class decorators. Each hook receives `(message, meta)` where `meta: IrisHookMeta` carries `{ correlationId, actor, timestamp }`. Hooks may be sync or async.
|
|
905
665
|
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
666
|
+
| Decorator | Fires |
|
|
667
|
+
| ----------------- | ---------------------------------------------------------------------------------- |
|
|
668
|
+
| `@OnCreate` | When a message is constructed via `create()` |
|
|
669
|
+
| `@OnHydrate` | After raw transport data is rehydrated, before delivery to a consume callback |
|
|
670
|
+
| `@OnValidate` | During validation, after the built-in Zod check — throw to reject |
|
|
671
|
+
| `@BeforePublish` | Before the transport publishes |
|
|
672
|
+
| `@AfterPublish` | After the transport confirms publication |
|
|
673
|
+
| `@BeforeConsume` | After deserialisation, before the consume callback |
|
|
674
|
+
| `@AfterConsume` | After the consume callback completes successfully |
|
|
675
|
+
| `@OnConsumeError` | When the consume callback throws — receives `(error, message, meta)` (error first) |
|
|
909
676
|
|
|
910
677
|
```typescript
|
|
911
678
|
@OnCreate((msg) => {
|
|
912
679
|
msg.slug = msg.name.toLowerCase().replace(/\s+/g, "-");
|
|
913
680
|
})
|
|
914
|
-
@Message()
|
|
915
|
-
class OrderPlaced {
|
|
916
|
-
@Field("string") name!: string;
|
|
917
|
-
@Field("string") slug!: string;
|
|
918
|
-
}
|
|
919
|
-
```
|
|
920
|
-
|
|
921
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
922
|
-
|
|
923
|
-
#### `@OnHydrate`
|
|
924
|
-
|
|
925
|
-
Fires when a message is rehydrated from raw transport data, after all fields are populated but before the message is returned to the consume callback.
|
|
926
|
-
|
|
927
|
-
```typescript
|
|
928
|
-
@OnHydrate((msg) => {
|
|
929
|
-
msg.displayName = `${msg.firstName} ${msg.lastName}`;
|
|
930
|
-
})
|
|
931
|
-
@Message()
|
|
932
|
-
class UserEvent {
|
|
933
|
-
@Field("string") firstName!: string;
|
|
934
|
-
@Field("string") lastName!: string;
|
|
935
|
-
@Field("string") displayName!: string;
|
|
936
|
-
}
|
|
937
|
-
```
|
|
938
|
-
|
|
939
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
940
|
-
|
|
941
|
-
#### `@OnValidate`
|
|
942
|
-
|
|
943
|
-
Fires during message validation, after the built-in Zod schema check. Throw to reject the message.
|
|
944
|
-
|
|
945
|
-
```typescript
|
|
946
681
|
@OnValidate((msg) => {
|
|
947
|
-
if (msg.startDate >= msg.endDate)
|
|
948
|
-
throw new Error("startDate must be before endDate");
|
|
949
|
-
}
|
|
682
|
+
if (msg.startDate >= msg.endDate) throw new Error("startDate must be before endDate");
|
|
950
683
|
})
|
|
951
|
-
@Message()
|
|
952
|
-
class BookingRequest {
|
|
953
|
-
@Field("date") startDate!: Date;
|
|
954
|
-
@Field("date") endDate!: Date;
|
|
955
|
-
}
|
|
956
|
-
```
|
|
957
|
-
|
|
958
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
959
|
-
|
|
960
|
-
#### `@BeforePublish` / `@AfterPublish`
|
|
961
|
-
|
|
962
|
-
Fire around publish operations. `@BeforePublish` runs before the message is handed to the transport. `@AfterPublish` runs after the transport confirms delivery.
|
|
963
|
-
|
|
964
|
-
```typescript
|
|
965
684
|
@BeforePublish(async (msg) => {
|
|
966
685
|
await validateExternalId(msg.externalId);
|
|
967
686
|
})
|
|
968
687
|
@AfterPublish(async (msg) => {
|
|
969
688
|
metrics.increment("messages.published");
|
|
970
689
|
})
|
|
971
|
-
@
|
|
972
|
-
class OrderPlaced {
|
|
973
|
-
@Field("string") externalId!: string;
|
|
974
|
-
}
|
|
975
|
-
```
|
|
976
|
-
|
|
977
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
978
|
-
|
|
979
|
-
#### `@BeforeConsume` / `@AfterConsume`
|
|
980
|
-
|
|
981
|
-
Fire around consume callback execution. `@BeforeConsume` runs after deserialisation but before the consume callback. `@AfterConsume` runs after the callback completes successfully.
|
|
982
|
-
|
|
983
|
-
```typescript
|
|
984
|
-
@BeforeConsume(async (msg, ctx) => {
|
|
690
|
+
@BeforeConsume(async (msg) => {
|
|
985
691
|
audit.log("consuming", msg);
|
|
986
692
|
})
|
|
987
693
|
@AfterConsume(async (msg) => {
|
|
988
694
|
metrics.increment("messages.consumed");
|
|
989
695
|
})
|
|
990
|
-
@Message()
|
|
991
|
-
class OrderPlaced {
|
|
992
|
-
/* ... */
|
|
993
|
-
}
|
|
994
|
-
```
|
|
995
|
-
|
|
996
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
997
|
-
|
|
998
|
-
#### `@OnConsumeError`
|
|
999
|
-
|
|
1000
|
-
Fires when a consume callback throws an error. Receives the error as the **first** argument, followed by the message and context.
|
|
1001
|
-
|
|
1002
|
-
```typescript
|
|
1003
696
|
@OnConsumeError(async (error, msg) => {
|
|
1004
697
|
errorTracker.capture(error, { messageId: msg.id });
|
|
1005
698
|
})
|
|
1006
699
|
@Message()
|
|
1007
|
-
class
|
|
1008
|
-
|
|
1009
|
-
@Field("string") chargeId!: string;
|
|
1010
|
-
}
|
|
1011
|
-
```
|
|
1012
|
-
|
|
1013
|
-
**Argument:** `(error: Error, message: M, context?: C) => void | Promise<void>`.
|
|
1014
|
-
|
|
1015
|
-
Note the different signature: `error` is the first parameter, unlike all other hooks where the message comes first.
|
|
1016
|
-
|
|
1017
|
-
---
|
|
1018
|
-
|
|
1019
|
-
### Hook Execution Order
|
|
1020
|
-
|
|
1021
|
-
| Phase | Hooks (in order) |
|
|
1022
|
-
| ---------- | ------------------------------------------------------------------------------------------------------- |
|
|
1023
|
-
| Creation | `@OnCreate` |
|
|
1024
|
-
| Validation | `@OnValidate` |
|
|
1025
|
-
| Publish | `@BeforePublish` -> subscriber.beforePublish -> transport -> `@AfterPublish` -> subscriber.afterPublish |
|
|
1026
|
-
| Consume | `@BeforeConsume` -> subscriber.beforeConsume -> callback -> `@AfterConsume` -> subscriber.afterConsume |
|
|
1027
|
-
| Hydration | `@OnHydrate` |
|
|
1028
|
-
| Error | `@OnConsumeError` -> subscriber.onConsumeError (replaces AfterConsume steps) |
|
|
1029
|
-
|
|
1030
|
-
Full publish + consume lifecycle:
|
|
1031
|
-
|
|
1032
|
-
```
|
|
1033
|
-
1. @BeforePublish hook
|
|
1034
|
-
2. subscriber.beforePublish
|
|
1035
|
-
3. (transport publishes)
|
|
1036
|
-
4. (transport delivers to consumer)
|
|
1037
|
-
5. @BeforeConsume hook
|
|
1038
|
-
6. subscriber.beforeConsume
|
|
1039
|
-
7. callback executes
|
|
1040
|
-
8. @AfterConsume hook
|
|
1041
|
-
9. subscriber.afterConsume
|
|
1042
|
-
10. @AfterPublish hook
|
|
1043
|
-
11. subscriber.afterPublish
|
|
1044
|
-
```
|
|
1045
|
-
|
|
1046
|
-
On error at step 7, steps 8-11 are replaced by `@OnConsumeError` and `subscriber.onConsumeError`.
|
|
1047
|
-
|
|
1048
|
-
## Retry and Dead Letter
|
|
1049
|
-
|
|
1050
|
-
Configure automatic retry with backoff strategies and dead letter routing for permanently failed messages.
|
|
1051
|
-
|
|
1052
|
-
```typescript
|
|
1053
|
-
@Retry({
|
|
1054
|
-
maxRetries: 5,
|
|
1055
|
-
strategy: "exponential", // "constant" | "linear" | "exponential"
|
|
1056
|
-
delay: 1000, // initial delay in ms
|
|
1057
|
-
delayMax: 30000, // maximum delay cap
|
|
1058
|
-
multiplier: 2, // exponential multiplier
|
|
1059
|
-
jitter: true, // add randomness to prevent thundering herd
|
|
1060
|
-
})
|
|
1061
|
-
@DeadLetter()
|
|
1062
|
-
@Message()
|
|
1063
|
-
class PaymentCharge {
|
|
1064
|
-
@Field("string") chargeId!: string;
|
|
1065
|
-
@Field("float") amount!: number;
|
|
1066
|
-
}
|
|
1067
|
-
```
|
|
1068
|
-
|
|
1069
|
-
## Dynamic Topics
|
|
1070
|
-
|
|
1071
|
-
Route messages to different topics based on their content:
|
|
1072
|
-
|
|
1073
|
-
```typescript
|
|
1074
|
-
@Topic((msg: any) => `events.${msg.region}.${msg.type}`)
|
|
1075
|
-
@Message()
|
|
1076
|
-
class RegionalEvent {
|
|
1077
|
-
@Field("string") region!: string;
|
|
1078
|
-
@Field("string") type!: string;
|
|
1079
|
-
@Field("object") data!: Record<string, unknown>;
|
|
700
|
+
class BookingRequest {
|
|
701
|
+
/* ... */
|
|
1080
702
|
}
|
|
1081
|
-
|
|
1082
|
-
const bus = source.messageBus(RegionalEvent);
|
|
1083
|
-
const msg = bus.create({ region: "eu-west", type: "signup", data: {} });
|
|
1084
|
-
await bus.publish(msg); // Published to "events.eu-west.signup"
|
|
1085
703
|
```
|
|
1086
704
|
|
|
1087
|
-
##
|
|
1088
|
-
|
|
1089
|
-
```typescript
|
|
1090
|
-
import { Encrypted, Compressed } from "@lindorm/iris";
|
|
1091
|
-
|
|
1092
|
-
@Encrypted() // Encrypt payload via amphora
|
|
1093
|
-
@Compressed("brotli") // Then compress ("gzip" | "deflate" | "brotli")
|
|
1094
|
-
@Message()
|
|
1095
|
-
class SensitivePayload {
|
|
1096
|
-
@Field("string") ssn!: string;
|
|
1097
|
-
@Field("string") name!: string;
|
|
1098
|
-
}
|
|
705
|
+
## Hook Execution Order
|
|
1099
706
|
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
```
|
|
707
|
+
| Phase | Order |
|
|
708
|
+
| ---------- | ----------------------------------------------------------------------------------------------------------- |
|
|
709
|
+
| Creation | `@OnCreate` |
|
|
710
|
+
| Validation | `@OnValidate` |
|
|
711
|
+
| Hydration | `@OnHydrate` |
|
|
712
|
+
| Publish | `@BeforePublish` -> `subscriber.beforePublish` -> transport -> `@AfterPublish` -> `subscriber.afterPublish` |
|
|
713
|
+
| Consume | `@BeforeConsume` -> `subscriber.beforeConsume` -> callback -> `@AfterConsume` -> `subscriber.afterConsume` |
|
|
714
|
+
| Error | `@OnConsumeError` -> `subscriber.onConsumeError` (replaces the after-consume steps) |
|
|
1109
715
|
|
|
1110
|
-
##
|
|
716
|
+
## Subscribers
|
|
1111
717
|
|
|
1112
|
-
Observe message lifecycle events across
|
|
718
|
+
Observe message lifecycle events across every message in a source.
|
|
1113
719
|
|
|
1114
720
|
```typescript
|
|
1115
721
|
import type { IMessageSubscriber } from "@lindorm/iris";
|
|
1116
722
|
|
|
1117
|
-
const
|
|
723
|
+
const audit: IMessageSubscriber = {
|
|
1118
724
|
beforePublish: async (msg) => {
|
|
1119
|
-
|
|
725
|
+
auditLog.log("publishing", msg);
|
|
1120
726
|
},
|
|
1121
727
|
afterConsume: async (msg) => {
|
|
1122
|
-
|
|
728
|
+
auditLog.log("consumed", msg);
|
|
1123
729
|
},
|
|
1124
|
-
onConsumeError: async (
|
|
1125
|
-
|
|
730
|
+
onConsumeError: async (err, msg) => {
|
|
731
|
+
auditLog.log("consume-failed", { error: err.message, msg });
|
|
1126
732
|
},
|
|
1127
733
|
};
|
|
1128
734
|
|
|
1129
|
-
source.addSubscriber(
|
|
1130
|
-
|
|
1131
|
-
// Remove later
|
|
1132
|
-
source.removeSubscriber(auditSubscriber);
|
|
735
|
+
source.addSubscriber(audit);
|
|
736
|
+
source.removeSubscriber(audit);
|
|
1133
737
|
```
|
|
1134
738
|
|
|
1135
739
|
## Consume Envelope
|
|
1136
740
|
|
|
1137
|
-
Every subscribe/consume callback receives the message and
|
|
741
|
+
Every subscribe/consume callback receives the message and a `ConsumeEnvelope`:
|
|
1138
742
|
|
|
1139
743
|
```typescript
|
|
1140
744
|
import type { ConsumeEnvelope } from "@lindorm/iris";
|
|
@@ -1142,128 +746,94 @@ import type { ConsumeEnvelope } from "@lindorm/iris";
|
|
|
1142
746
|
await bus.subscribe({
|
|
1143
747
|
topic: "OrderPlaced",
|
|
1144
748
|
callback: async (msg: OrderPlaced, envelope: ConsumeEnvelope) => {
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
749
|
+
envelope.topic; // string
|
|
750
|
+
envelope.messageName; // string
|
|
751
|
+
envelope.namespace; // string | null
|
|
752
|
+
envelope.version; // number
|
|
753
|
+
envelope.headers; // Record<string, string>
|
|
754
|
+
envelope.attempt; // number (1 on first delivery, increments on retry)
|
|
755
|
+
envelope.correlationId; // string | null
|
|
756
|
+
envelope.timestamp; // number (unix ms)
|
|
1153
757
|
},
|
|
1154
758
|
});
|
|
1155
759
|
```
|
|
1156
760
|
|
|
1157
761
|
## Message Manipulation
|
|
1158
762
|
|
|
1159
|
-
Every publisher, message bus, and worker queue
|
|
763
|
+
Every publisher, message bus, and worker queue exposes the same instance utilities:
|
|
1160
764
|
|
|
1161
765
|
```typescript
|
|
1162
766
|
const bus = source.messageBus(OrderPlaced);
|
|
1163
767
|
|
|
1164
|
-
// Create: new instance with auto-generated fields and defaults
|
|
1165
768
|
const msg = bus.create({ orderId: "abc-123", total: 59.99 });
|
|
1166
|
-
|
|
1167
|
-
//
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
// Copy: deep clone with a fresh identifier
|
|
1171
|
-
const copied = bus.copy(msg);
|
|
1172
|
-
// copied.orderId === msg.orderId, but copied.id !== msg.id
|
|
1173
|
-
|
|
1174
|
-
// Validate: throws IrisValidationError if invalid
|
|
1175
|
-
bus.validate(msg);
|
|
769
|
+
const hydrated = bus.hydrate({ id: "...", orderId: "abc-123", total: 59.99, createdAt: ... });
|
|
770
|
+
const copied = bus.copy(msg); // deep clone with a fresh identifier value
|
|
771
|
+
bus.validate(msg); // throws IrisValidationError when invalid
|
|
1176
772
|
```
|
|
1177
773
|
|
|
774
|
+
`create()` runs default value generation and `@OnCreate` hooks. `hydrate()` reconstructs from raw transport data without regenerating defaults and runs `@OnHydrate` hooks.
|
|
775
|
+
|
|
1178
776
|
## Publish Options
|
|
1179
777
|
|
|
1180
|
-
|
|
778
|
+
Per-publish overrides for `publish(message, options)`:
|
|
1181
779
|
|
|
1182
780
|
```typescript
|
|
1183
781
|
await bus.publish(msg, {
|
|
1184
|
-
delay: 5000, //
|
|
1185
|
-
priority: 8, //
|
|
1186
|
-
expiry: 60000, //
|
|
782
|
+
delay: 5000, // ms — overrides @Delay
|
|
783
|
+
priority: 8, // 0..10 — overrides @Priority
|
|
784
|
+
expiry: 60000, // ms — overrides @Expiry
|
|
1187
785
|
key: "partition-key", // routing/partition key
|
|
1188
786
|
headers: { "x-source": "api" }, // additional headers
|
|
1189
787
|
});
|
|
1190
788
|
```
|
|
1191
789
|
|
|
1192
|
-
##
|
|
790
|
+
## Sessions
|
|
1193
791
|
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
```typescript
|
|
1197
|
-
import { z } from "zod";
|
|
1198
|
-
import { Schema, Field, Message } from "@lindorm/iris";
|
|
1199
|
-
|
|
1200
|
-
@Message()
|
|
1201
|
-
class UserCreated {
|
|
1202
|
-
@Schema(z.string().email())
|
|
1203
|
-
@Field("email")
|
|
1204
|
-
email!: string;
|
|
1205
|
-
|
|
1206
|
-
@Schema(z.number().int().min(13).max(150))
|
|
1207
|
-
@Field("integer")
|
|
1208
|
-
age!: number;
|
|
1209
|
-
|
|
1210
|
-
@Schema(z.string().regex(/^[A-Z]{2,3}$/))
|
|
1211
|
-
@Field("string")
|
|
1212
|
-
countryCode!: string;
|
|
1213
|
-
}
|
|
1214
|
-
```
|
|
1215
|
-
|
|
1216
|
-
## Cloning
|
|
1217
|
-
|
|
1218
|
-
Create independent source instances that share the underlying driver connection:
|
|
792
|
+
`source.session()` returns a lightweight `IIrisSession` that shares the underlying driver connection but carries its own logger, `IrisHookMeta`, and a snapshot of the source's subscribers at the time of cloning. This is the idiomatic way to scope correlation IDs and per-request loggers without tearing down the connection.
|
|
1219
793
|
|
|
1220
794
|
```typescript
|
|
1221
795
|
const source = new IrisSource({
|
|
1222
796
|
driver: "rabbit",
|
|
1223
797
|
url: "amqp://localhost",
|
|
1224
|
-
logger:
|
|
798
|
+
logger: appLogger,
|
|
1225
799
|
messages: [OrderPlaced],
|
|
1226
800
|
});
|
|
1227
801
|
|
|
1228
802
|
await source.connect();
|
|
1229
803
|
await source.setup();
|
|
1230
804
|
|
|
1231
|
-
|
|
1232
|
-
|
|
805
|
+
const scoped = source.session({
|
|
806
|
+
logger: requestLogger,
|
|
807
|
+
meta: { correlationId: "abc-123", actor: "user:42", timestamp: new Date() },
|
|
808
|
+
});
|
|
1233
809
|
|
|
1234
810
|
const pub = scoped.publisher(OrderPlaced);
|
|
1235
|
-
await pub.publish(pub.create({ orderId: "abc
|
|
811
|
+
await pub.publish(pub.create({ orderId: "abc", total: 10 }));
|
|
1236
812
|
```
|
|
1237
813
|
|
|
814
|
+
A session exposes the same `messageBus`, `publisher`, `workerQueue`, `stream`, `rpcClient`, `rpcServer`, `hasMessage`, `ping`, and `driver` surface as the source.
|
|
815
|
+
|
|
1238
816
|
## Driver Configuration
|
|
1239
817
|
|
|
1240
818
|
### Memory
|
|
1241
819
|
|
|
1242
820
|
```typescript
|
|
1243
|
-
|
|
1244
|
-
driver: "memory",
|
|
1245
|
-
logger,
|
|
1246
|
-
messages: [OrderPlaced],
|
|
1247
|
-
});
|
|
821
|
+
new IrisSource({ driver: "memory", logger, messages: [OrderPlaced] });
|
|
1248
822
|
```
|
|
1249
823
|
|
|
1250
824
|
### RabbitMQ
|
|
1251
825
|
|
|
1252
826
|
```typescript
|
|
1253
|
-
|
|
827
|
+
new IrisSource({
|
|
1254
828
|
driver: "rabbit",
|
|
1255
829
|
url: "amqp://localhost",
|
|
1256
830
|
logger,
|
|
1257
831
|
messages: [OrderPlaced],
|
|
1258
|
-
exchange: "my-exchange",
|
|
1259
|
-
prefetch: 10,
|
|
832
|
+
exchange: "my-exchange",
|
|
833
|
+
prefetch: 10,
|
|
1260
834
|
connection: {
|
|
1261
|
-
// optional
|
|
1262
835
|
heartbeat: 60,
|
|
1263
|
-
socketOptions: {
|
|
1264
|
-
timeout: 30000,
|
|
1265
|
-
keepAlive: true,
|
|
1266
|
-
},
|
|
836
|
+
socketOptions: { timeout: 30000, keepAlive: true },
|
|
1267
837
|
},
|
|
1268
838
|
});
|
|
1269
839
|
```
|
|
@@ -1271,30 +841,22 @@ const source = new IrisSource({
|
|
|
1271
841
|
### Kafka
|
|
1272
842
|
|
|
1273
843
|
```typescript
|
|
1274
|
-
|
|
844
|
+
new IrisSource({
|
|
1275
845
|
driver: "kafka",
|
|
1276
846
|
brokers: ["localhost:9092"],
|
|
1277
847
|
logger,
|
|
1278
848
|
messages: [OrderPlaced],
|
|
1279
|
-
prefix: "my-app",
|
|
1280
|
-
prefetch: 100,
|
|
1281
|
-
acks: -1, //
|
|
1282
|
-
sessionTimeoutMs: 30000,
|
|
849
|
+
prefix: "my-app",
|
|
850
|
+
prefetch: 100,
|
|
851
|
+
acks: -1, // -1 = all, 0 = none, 1 = leader
|
|
852
|
+
sessionTimeoutMs: 30000,
|
|
1283
853
|
connection: {
|
|
1284
|
-
// optional
|
|
1285
854
|
clientId: "my-service",
|
|
1286
855
|
ssl: true,
|
|
1287
|
-
sasl: {
|
|
1288
|
-
mechanism: "scram-sha-256",
|
|
1289
|
-
username: "user",
|
|
1290
|
-
password: "pass",
|
|
1291
|
-
},
|
|
856
|
+
sasl: { mechanism: "scram-sha-256", username: "user", password: "pass" },
|
|
1292
857
|
connectionTimeout: 10000,
|
|
1293
858
|
requestTimeout: 30000,
|
|
1294
|
-
retry: {
|
|
1295
|
-
retries: 5,
|
|
1296
|
-
initialRetryTime: 300,
|
|
1297
|
-
},
|
|
859
|
+
retry: { retries: 5, initialRetryTime: 300 },
|
|
1298
860
|
},
|
|
1299
861
|
});
|
|
1300
862
|
```
|
|
@@ -1302,15 +864,14 @@ const source = new IrisSource({
|
|
|
1302
864
|
### NATS
|
|
1303
865
|
|
|
1304
866
|
```typescript
|
|
1305
|
-
|
|
867
|
+
new IrisSource({
|
|
1306
868
|
driver: "nats",
|
|
1307
869
|
servers: "nats://localhost:4222", // string or Array<string>
|
|
1308
870
|
logger,
|
|
1309
871
|
messages: [OrderPlaced],
|
|
1310
|
-
prefix: "my-app",
|
|
1311
|
-
prefetch: 50,
|
|
872
|
+
prefix: "my-app",
|
|
873
|
+
prefetch: 50,
|
|
1312
874
|
connection: {
|
|
1313
|
-
// optional
|
|
1314
875
|
user: "nats-user",
|
|
1315
876
|
pass: "nats-pass",
|
|
1316
877
|
tls: true,
|
|
@@ -1326,17 +887,16 @@ const source = new IrisSource({
|
|
|
1326
887
|
### Redis Streams
|
|
1327
888
|
|
|
1328
889
|
```typescript
|
|
1329
|
-
|
|
890
|
+
new IrisSource({
|
|
1330
891
|
driver: "redis",
|
|
1331
892
|
url: "redis://localhost:6379",
|
|
1332
893
|
logger,
|
|
1333
894
|
messages: [OrderPlaced],
|
|
1334
|
-
prefix: "my-app",
|
|
1335
|
-
prefetch: 50,
|
|
1336
|
-
blockMs: 5000, //
|
|
1337
|
-
maxStreamLength: 10000, //
|
|
895
|
+
prefix: "my-app",
|
|
896
|
+
prefetch: 50,
|
|
897
|
+
blockMs: 5000, // XREAD block time
|
|
898
|
+
maxStreamLength: 10000, // MAXLEN cap per stream
|
|
1338
899
|
connection: {
|
|
1339
|
-
// optional
|
|
1340
900
|
host: "redis.internal",
|
|
1341
901
|
port: 6379,
|
|
1342
902
|
password: "secret",
|
|
@@ -1352,87 +912,83 @@ const source = new IrisSource({
|
|
|
1352
912
|
|
|
1353
913
|
## Persistence (Delay and Dead Letter Stores)
|
|
1354
914
|
|
|
1355
|
-
Configure where delayed
|
|
915
|
+
Configure where delayed deliveries and dead-lettered envelopes are kept. These are used by drivers that don't already provide native primitives for them.
|
|
1356
916
|
|
|
1357
917
|
```typescript
|
|
1358
|
-
|
|
1359
|
-
driver: "
|
|
1360
|
-
|
|
918
|
+
new IrisSource({
|
|
919
|
+
driver: "kafka",
|
|
920
|
+
brokers: ["localhost:9092"],
|
|
1361
921
|
logger,
|
|
1362
922
|
messages: [OrderPlaced],
|
|
1363
923
|
persistence: {
|
|
1364
|
-
|
|
1365
|
-
delay: { type: "
|
|
1366
|
-
//
|
|
1367
|
-
// or: { type: "custom", store: myDelayStore },
|
|
924
|
+
delay: { type: "memory", pollIntervalMs: 250 },
|
|
925
|
+
// delay: { type: "redis", url: "redis://localhost:6379", pollIntervalMs: 250 },
|
|
926
|
+
// delay: { type: "custom", store: myDelayStore },
|
|
1368
927
|
|
|
1369
|
-
// Dead letter store: holds messages that exhausted all retries
|
|
1370
928
|
deadLetter: { type: "memory" },
|
|
1371
|
-
//
|
|
1372
|
-
//
|
|
929
|
+
// deadLetter: { type: "redis", url: "redis://localhost:6379" },
|
|
930
|
+
// deadLetter: { type: "custom", store: myDeadLetterStore },
|
|
1373
931
|
},
|
|
1374
932
|
});
|
|
1375
933
|
```
|
|
1376
934
|
|
|
1377
935
|
### Custom Stores
|
|
1378
936
|
|
|
1379
|
-
Implement `IDelayStore` and/or `IDeadLetterStore` for
|
|
937
|
+
Implement `IDelayStore` and/or `IDeadLetterStore` for bespoke persistence:
|
|
1380
938
|
|
|
1381
939
|
```typescript
|
|
1382
940
|
import type {
|
|
1383
|
-
IDelayStore,
|
|
1384
|
-
IDeadLetterStore,
|
|
1385
|
-
DelayedEntry,
|
|
1386
941
|
DeadLetterEntry,
|
|
942
|
+
DeadLetterFilterOptions,
|
|
943
|
+
DeadLetterListOptions,
|
|
944
|
+
DelayedEntry,
|
|
945
|
+
IDeadLetterStore,
|
|
946
|
+
IDelayStore,
|
|
1387
947
|
} from "@lindorm/iris";
|
|
1388
948
|
|
|
1389
949
|
class MyDelayStore implements IDelayStore {
|
|
1390
|
-
async
|
|
950
|
+
schedule = async (entry: DelayedEntry): Promise<void> => {
|
|
1391
951
|
/* ... */
|
|
1392
|
-
}
|
|
1393
|
-
async
|
|
952
|
+
};
|
|
953
|
+
poll = async (now: number): Promise<Array<DelayedEntry>> => {
|
|
1394
954
|
/* ... */
|
|
1395
|
-
}
|
|
1396
|
-
async
|
|
955
|
+
};
|
|
956
|
+
cancel = async (id: string): Promise<boolean> => {
|
|
1397
957
|
/* ... */
|
|
1398
|
-
}
|
|
1399
|
-
async
|
|
958
|
+
};
|
|
959
|
+
size = async (): Promise<number> => {
|
|
1400
960
|
/* ... */
|
|
1401
|
-
}
|
|
1402
|
-
async
|
|
961
|
+
};
|
|
962
|
+
clear = async (): Promise<void> => {
|
|
1403
963
|
/* ... */
|
|
1404
|
-
}
|
|
1405
|
-
async
|
|
964
|
+
};
|
|
965
|
+
close = async (): Promise<void> => {
|
|
1406
966
|
/* ... */
|
|
1407
|
-
}
|
|
967
|
+
};
|
|
1408
968
|
}
|
|
1409
969
|
|
|
1410
970
|
class MyDeadLetterStore implements IDeadLetterStore {
|
|
1411
|
-
async
|
|
971
|
+
add = async (entry: DeadLetterEntry): Promise<void> => {
|
|
1412
972
|
/* ... */
|
|
1413
|
-
}
|
|
1414
|
-
async
|
|
1415
|
-
topic?: string;
|
|
1416
|
-
limit?: number;
|
|
1417
|
-
offset?: number;
|
|
1418
|
-
}): Promise<Array<DeadLetterEntry>> {
|
|
973
|
+
};
|
|
974
|
+
list = async (options?: DeadLetterListOptions): Promise<Array<DeadLetterEntry>> => {
|
|
1419
975
|
/* ... */
|
|
1420
|
-
}
|
|
1421
|
-
async
|
|
976
|
+
};
|
|
977
|
+
get = async (id: string): Promise<DeadLetterEntry | null> => {
|
|
1422
978
|
/* ... */
|
|
1423
|
-
}
|
|
1424
|
-
async
|
|
979
|
+
};
|
|
980
|
+
remove = async (id: string): Promise<boolean> => {
|
|
1425
981
|
/* ... */
|
|
1426
|
-
}
|
|
1427
|
-
async
|
|
982
|
+
};
|
|
983
|
+
purge = async (options?: DeadLetterFilterOptions): Promise<number> => {
|
|
1428
984
|
/* ... */
|
|
1429
|
-
}
|
|
1430
|
-
async
|
|
985
|
+
};
|
|
986
|
+
count = async (options?: DeadLetterFilterOptions): Promise<number> => {
|
|
1431
987
|
/* ... */
|
|
1432
|
-
}
|
|
1433
|
-
async
|
|
988
|
+
};
|
|
989
|
+
close = async (): Promise<void> => {
|
|
1434
990
|
/* ... */
|
|
1435
|
-
}
|
|
991
|
+
};
|
|
1436
992
|
}
|
|
1437
993
|
```
|
|
1438
994
|
|
|
@@ -1442,129 +998,106 @@ class MyDeadLetterStore implements IDeadLetterStore {
|
|
|
1442
998
|
const state = source.getConnectionState();
|
|
1443
999
|
// "disconnected" | "connecting" | "connected" | "reconnecting" | "draining"
|
|
1444
1000
|
|
|
1445
|
-
source.
|
|
1446
|
-
console.log(`
|
|
1001
|
+
source.on("connection:state", (next) => {
|
|
1002
|
+
console.log(`connection state -> ${next}`);
|
|
1447
1003
|
});
|
|
1448
1004
|
|
|
1449
|
-
|
|
1005
|
+
source.once("connection:state", (next) => {
|
|
1006
|
+
/* ... */
|
|
1007
|
+
});
|
|
1008
|
+
source.off("connection:state", listener);
|
|
1009
|
+
|
|
1450
1010
|
const healthy = await source.ping();
|
|
1451
1011
|
```
|
|
1452
1012
|
|
|
1453
1013
|
## Testing with Mocks
|
|
1454
1014
|
|
|
1455
|
-
|
|
1015
|
+
Iris ships per-runtime mock factories. Pick the import path that matches your test runner:
|
|
1456
1016
|
|
|
1457
1017
|
```typescript
|
|
1018
|
+
// Jest
|
|
1458
1019
|
import {
|
|
1459
1020
|
createMockIrisSource,
|
|
1460
|
-
|
|
1021
|
+
createMockIrisSession,
|
|
1461
1022
|
createMockMessageBus,
|
|
1023
|
+
createMockPublisher,
|
|
1024
|
+
createMockRpcClient,
|
|
1462
1025
|
createMockWorkerQueue,
|
|
1026
|
+
} from "@lindorm/iris/mocks/jest";
|
|
1027
|
+
|
|
1028
|
+
// Vitest
|
|
1029
|
+
import {
|
|
1030
|
+
createMockIrisSource,
|
|
1031
|
+
createMockIrisSession,
|
|
1032
|
+
createMockMessageBus,
|
|
1033
|
+
createMockPublisher,
|
|
1463
1034
|
createMockRpcClient,
|
|
1464
|
-
|
|
1035
|
+
createMockWorkerQueue,
|
|
1036
|
+
} from "@lindorm/iris/mocks/vitest";
|
|
1465
1037
|
```
|
|
1466
1038
|
|
|
1467
|
-
### Mock Source
|
|
1468
|
-
|
|
1469
1039
|
```typescript
|
|
1470
1040
|
const source = createMockIrisSource();
|
|
1471
1041
|
|
|
1472
|
-
// All methods are jest.fn() mocks
|
|
1473
|
-
expect(source.connect).not.toHaveBeenCalled();
|
|
1474
|
-
|
|
1475
1042
|
await source.connect();
|
|
1476
1043
|
expect(source.connect).toHaveBeenCalledTimes(1);
|
|
1477
1044
|
|
|
1478
|
-
// Factory methods return mocks by default
|
|
1479
1045
|
const bus = source.messageBus(OrderPlaced);
|
|
1480
1046
|
const pub = source.publisher(OrderPlaced);
|
|
1481
1047
|
const queue = source.workerQueue(OrderPlaced);
|
|
1482
1048
|
const rpc = source.rpcClient(GetPrice, PriceResponse);
|
|
1483
1049
|
```
|
|
1484
1050
|
|
|
1485
|
-
|
|
1051
|
+
The bus, publisher, and worker-queue mocks expose a `published` array and a `clearPublished()` helper. The RPC client mock takes an optional response factory and exposes `requests` plus `clearRequests()`.
|
|
1486
1052
|
|
|
1487
1053
|
```typescript
|
|
1488
1054
|
const pub = createMockPublisher<OrderPlaced>();
|
|
1489
|
-
|
|
1490
|
-
const msg = pub.create({ orderId: "abc", total: 10 });
|
|
1491
|
-
await pub.publish(msg);
|
|
1492
|
-
|
|
1493
|
-
// Inspect published messages
|
|
1055
|
+
await pub.publish(pub.create({ orderId: "abc", total: 10 }));
|
|
1494
1056
|
expect(pub.published).toHaveLength(1);
|
|
1495
|
-
|
|
1496
|
-
// Reset
|
|
1497
1057
|
pub.clearPublished();
|
|
1498
|
-
expect(pub.published).toHaveLength(0);
|
|
1499
|
-
```
|
|
1500
|
-
|
|
1501
|
-
### Mock Message Bus
|
|
1502
|
-
|
|
1503
|
-
```typescript
|
|
1504
|
-
const bus = createMockMessageBus<OrderPlaced>();
|
|
1505
|
-
|
|
1506
|
-
await bus.publish(bus.create({ orderId: "abc", total: 10 }));
|
|
1507
|
-
|
|
1508
|
-
expect(bus.published).toHaveLength(1);
|
|
1509
|
-
expect(bus.subscribe).not.toHaveBeenCalled();
|
|
1510
|
-
|
|
1511
|
-
bus.clearPublished();
|
|
1512
|
-
```
|
|
1513
|
-
|
|
1514
|
-
### Mock Worker Queue
|
|
1515
|
-
|
|
1516
|
-
```typescript
|
|
1517
|
-
const queue = createMockWorkerQueue<OrderPlaced>();
|
|
1518
|
-
|
|
1519
|
-
await queue.publish(queue.create({ orderId: "abc", total: 10 }));
|
|
1520
|
-
|
|
1521
|
-
expect(queue.published).toHaveLength(1);
|
|
1522
|
-
expect(queue.consume).not.toHaveBeenCalled();
|
|
1523
|
-
|
|
1524
|
-
queue.clearPublished();
|
|
1525
|
-
```
|
|
1526
|
-
|
|
1527
|
-
### Mock RPC Client
|
|
1528
1058
|
|
|
1529
|
-
```typescript
|
|
1530
|
-
// Provide a response factory
|
|
1531
1059
|
const client = createMockRpcClient<GetPrice, PriceResponse>((req) => {
|
|
1532
1060
|
const res = new PriceResponse();
|
|
1533
1061
|
res.price = 42.0;
|
|
1534
1062
|
res.currency = "USD";
|
|
1535
1063
|
return res;
|
|
1536
1064
|
});
|
|
1065
|
+
const res = await client.request(new GetPrice());
|
|
1066
|
+
expect(client.requests).toHaveLength(1);
|
|
1067
|
+
client.clearRequests();
|
|
1068
|
+
```
|
|
1537
1069
|
|
|
1538
|
-
|
|
1539
|
-
req.sku = "WIDGET-42";
|
|
1070
|
+
## CLI
|
|
1540
1071
|
|
|
1541
|
-
|
|
1542
|
-
expect(res.price).toBe(42.0);
|
|
1543
|
-
expect(client.requests).toHaveLength(1);
|
|
1072
|
+
The package ships an `iris` binary for scaffolding:
|
|
1544
1073
|
|
|
1545
|
-
|
|
1074
|
+
```bash
|
|
1075
|
+
npx iris init --driver rabbit --directory ./src/iris
|
|
1076
|
+
npx iris generate message OrderPlaced --directory ./src/iris/messages
|
|
1546
1077
|
```
|
|
1547
1078
|
|
|
1079
|
+
`iris init` (alias `i`) writes a `source.ts` plus an empty `messages/` directory. `iris generate message` (alias `g m`) writes a single PascalCase-named message file. Both commands accept `--dry-run`.
|
|
1080
|
+
|
|
1548
1081
|
## Error Classes
|
|
1549
1082
|
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
| Error
|
|
1553
|
-
| ------------------------ |
|
|
1554
|
-
| `IrisError` | Base class for
|
|
1555
|
-
| `IrisDriverError` | Driver connection or operation
|
|
1556
|
-
| `IrisMetadataError` |
|
|
1557
|
-
| `IrisNotSupportedError` |
|
|
1558
|
-
| `IrisPublishError` |
|
|
1559
|
-
| `IrisScannerError` |
|
|
1560
|
-
| `IrisSerializationError` |
|
|
1561
|
-
| `IrisSourceError` | Source
|
|
1562
|
-
| `IrisTimeoutError` |
|
|
1563
|
-
| `IrisTransportError` | Transport
|
|
1564
|
-
| `IrisValidationError` |
|
|
1083
|
+
Every error extends `IrisError`, which extends `LindormError` from `@lindorm/errors`.
|
|
1084
|
+
|
|
1085
|
+
| Error | Raised when |
|
|
1086
|
+
| ------------------------ | ------------------------------------------------ |
|
|
1087
|
+
| `IrisError` | Base class — extend for custom errors |
|
|
1088
|
+
| `IrisDriverError` | Driver connection or operation failed |
|
|
1089
|
+
| `IrisMetadataError` | A decorator was used with an invalid value |
|
|
1090
|
+
| `IrisNotSupportedError` | The active driver does not support the operation |
|
|
1091
|
+
| `IrisPublishError` | Publishing a message failed |
|
|
1092
|
+
| `IrisScannerError` | Auto-scanning message classes from disk failed |
|
|
1093
|
+
| `IrisSerializationError` | (De)serialisation of an envelope failed |
|
|
1094
|
+
| `IrisSourceError` | Source configuration or lifecycle error |
|
|
1095
|
+
| `IrisTimeoutError` | An operation exceeded its timeout |
|
|
1096
|
+
| `IrisTransportError` | Transport-layer failure |
|
|
1097
|
+
| `IrisValidationError` | A message failed validation |
|
|
1565
1098
|
|
|
1566
1099
|
```typescript
|
|
1567
|
-
import { IrisTimeoutError
|
|
1100
|
+
import { IrisTimeoutError } from "@lindorm/iris";
|
|
1568
1101
|
|
|
1569
1102
|
try {
|
|
1570
1103
|
await client.request(req, { timeout: 1000 });
|
|
@@ -1575,110 +1108,6 @@ try {
|
|
|
1575
1108
|
}
|
|
1576
1109
|
```
|
|
1577
1110
|
|
|
1578
|
-
## Full Example
|
|
1579
|
-
|
|
1580
|
-
```typescript
|
|
1581
|
-
import {
|
|
1582
|
-
IrisSource,
|
|
1583
|
-
Message,
|
|
1584
|
-
Namespace,
|
|
1585
|
-
Version,
|
|
1586
|
-
Field,
|
|
1587
|
-
IdentifierField,
|
|
1588
|
-
TimestampField,
|
|
1589
|
-
Retry,
|
|
1590
|
-
DeadLetter,
|
|
1591
|
-
} from "@lindorm/iris";
|
|
1592
|
-
import type { IMessage, IMessageSubscriber } from "@lindorm/iris";
|
|
1593
|
-
|
|
1594
|
-
// --- Define messages ---
|
|
1595
|
-
|
|
1596
|
-
@Message()
|
|
1597
|
-
@Namespace("payments")
|
|
1598
|
-
@Version(1)
|
|
1599
|
-
@Retry({ maxRetries: 3, strategy: "exponential", delay: 1000 })
|
|
1600
|
-
@DeadLetter()
|
|
1601
|
-
class ChargeRequested {
|
|
1602
|
-
@IdentifierField() id!: string;
|
|
1603
|
-
@TimestampField() createdAt!: Date;
|
|
1604
|
-
@Field("string") paymentId!: string;
|
|
1605
|
-
@Field("float") amount!: number;
|
|
1606
|
-
@Field("string") currency!: string;
|
|
1607
|
-
}
|
|
1608
|
-
|
|
1609
|
-
@Message()
|
|
1610
|
-
@Namespace("payments")
|
|
1611
|
-
@Version(1)
|
|
1612
|
-
class ChargeCompleted {
|
|
1613
|
-
@IdentifierField() id!: string;
|
|
1614
|
-
@TimestampField() completedAt!: Date;
|
|
1615
|
-
@Field("string") paymentId!: string;
|
|
1616
|
-
@Field("boolean") success!: boolean;
|
|
1617
|
-
}
|
|
1618
|
-
|
|
1619
|
-
// --- Set up source ---
|
|
1620
|
-
|
|
1621
|
-
const source = new IrisSource({
|
|
1622
|
-
driver: "kafka",
|
|
1623
|
-
brokers: ["kafka-1:9092", "kafka-2:9092"],
|
|
1624
|
-
logger: appLogger,
|
|
1625
|
-
messages: [ChargeRequested, ChargeCompleted],
|
|
1626
|
-
persistence: {
|
|
1627
|
-
deadLetter: { type: "redis", url: "redis://localhost:6379" },
|
|
1628
|
-
},
|
|
1629
|
-
});
|
|
1630
|
-
|
|
1631
|
-
await source.connect();
|
|
1632
|
-
await source.setup();
|
|
1633
|
-
|
|
1634
|
-
// --- Observe lifecycle ---
|
|
1635
|
-
|
|
1636
|
-
const metricsSubscriber: IMessageSubscriber = {
|
|
1637
|
-
afterPublish: async (msg) => metrics.increment("messages.published"),
|
|
1638
|
-
afterConsume: async (msg) => metrics.increment("messages.consumed"),
|
|
1639
|
-
onConsumeError: async (err) => metrics.increment("messages.errors"),
|
|
1640
|
-
};
|
|
1641
|
-
|
|
1642
|
-
source.addSubscriber(metricsSubscriber);
|
|
1643
|
-
|
|
1644
|
-
// --- Worker: process charges ---
|
|
1645
|
-
|
|
1646
|
-
const queue = source.workerQueue(ChargeRequested);
|
|
1647
|
-
const completedPub = source.publisher(ChargeCompleted);
|
|
1648
|
-
|
|
1649
|
-
await queue.consume("payment-workers", async (msg, envelope) => {
|
|
1650
|
-
const result = await paymentGateway.charge(msg.paymentId, msg.amount, msg.currency);
|
|
1651
|
-
|
|
1652
|
-
const completed = completedPub.create({
|
|
1653
|
-
paymentId: msg.paymentId,
|
|
1654
|
-
success: result.ok,
|
|
1655
|
-
});
|
|
1656
|
-
|
|
1657
|
-
await completedPub.publish(completed);
|
|
1658
|
-
});
|
|
1659
|
-
|
|
1660
|
-
// --- Notify on completion ---
|
|
1661
|
-
|
|
1662
|
-
const completedBus = source.messageBus(ChargeCompleted);
|
|
1663
|
-
|
|
1664
|
-
await completedBus.subscribe({
|
|
1665
|
-
topic: "ChargeCompleted",
|
|
1666
|
-
queue: "notification-service",
|
|
1667
|
-
callback: async (msg) => {
|
|
1668
|
-
if (msg.success) {
|
|
1669
|
-
await emailService.sendReceipt(msg.paymentId);
|
|
1670
|
-
}
|
|
1671
|
-
},
|
|
1672
|
-
});
|
|
1673
|
-
|
|
1674
|
-
// --- Shutdown ---
|
|
1675
|
-
|
|
1676
|
-
process.on("SIGTERM", async () => {
|
|
1677
|
-
await source.drain();
|
|
1678
|
-
await source.disconnect();
|
|
1679
|
-
});
|
|
1680
|
-
```
|
|
1681
|
-
|
|
1682
1111
|
## License
|
|
1683
1112
|
|
|
1684
1113
|
AGPL-3.0-or-later
|