@lindorm/iris 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +334 -901
- 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 +1 -1
- package/dist/decorators/Default.d.ts.map +1 -1
- package/dist/decorators/Default.js +3 -7
- package/dist/decorators/Default.js.map +1 -1
- 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 +1 -1
- package/dist/decorators/Field.d.ts.map +1 -1
- package/dist/decorators/Field.js +3 -7
- 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.js +3 -7
- package/dist/decorators/Nullable.js.map +1 -1
- 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.js +3 -7
- package/dist/decorators/Optional.js.map +1 -1
- 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.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 -38
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +38 -54
- 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 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -22
- 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.js +4 -41
- package/dist/internal/cli/commands/generate-message.js.map +1 -1
- package/dist/internal/cli/commands/init.js +6 -43
- 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 +11 -10
- package/dist/internal/drivers/nats/classes/NatsDriver.d.ts.map +1 -1
- package/dist/internal/drivers/nats/classes/NatsDriver.js +67 -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 +6 -10
- 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 +38 -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 +4 -3
- 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 +2 -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 +1 -1
- 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.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.js +2 -6
- package/dist/utils/generate-message.js.map +1 -1
- package/dist/utils/generate-source.js +2 -6
- package/dist/utils/generate-source.js.map +1 -1
- package/dist/utils/index.d.ts +4 -4
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -20
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/write-message.js +16 -20
- package/dist/utils/write-message.js.map +1 -1
- package/dist/utils/write-source.d.ts +1 -1
- package/dist/utils/write-source.d.ts.map +1 -1
- package/dist/utils/write-source.js +21 -25
- package/dist/utils/write-source.js.map +1 -1
- package/package.json +39 -35
- 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;
|
|
@@ -350,15 +265,13 @@ class FullExample {
|
|
|
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,249 +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
|
-
Modifiers (nullable, optional, default value, transform) are expressed as stackable decorators applied above `@Field`. See the modifier sections below.
|
|
655
|
-
|
|
656
|
-
```typescript
|
|
657
|
-
@Nullable()
|
|
658
|
-
@Field("string")
|
|
659
|
-
description!: string | null;
|
|
660
|
-
|
|
661
|
-
@Optional()
|
|
662
|
-
@Field("string")
|
|
663
|
-
nickname?: string;
|
|
664
|
-
|
|
665
|
-
@Default(0)
|
|
666
|
-
@Field("integer")
|
|
667
|
-
retryCount!: number;
|
|
668
|
-
|
|
669
|
-
@Default(() => "generated")
|
|
670
|
-
@Field("string")
|
|
671
|
-
code!: string;
|
|
672
|
-
|
|
673
|
-
@Transform({
|
|
674
|
-
to: (value: unknown) => Math.round((value as number) * 100),
|
|
675
|
-
from: (raw: unknown) => (raw as number) / 100,
|
|
676
|
-
})
|
|
677
|
-
@Field("float")
|
|
678
|
-
price!: number;
|
|
679
|
-
```
|
|
523
|
+
**Argument:** `MetaFieldType` (re-exported as `IrisFieldType`).
|
|
680
524
|
|
|
681
525
|
#### `@IdentifierField`
|
|
682
526
|
|
|
683
|
-
|
|
527
|
+
Auto-generated UUID v4 primary identifier. Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
|
|
684
528
|
|
|
685
529
|
```typescript
|
|
686
|
-
@IdentifierField()
|
|
687
|
-
id!: string;
|
|
530
|
+
@IdentifierField() id!: string;
|
|
688
531
|
```
|
|
689
532
|
|
|
690
|
-
Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
|
|
691
|
-
|
|
692
|
-
No arguments.
|
|
693
|
-
|
|
694
533
|
#### `@CorrelationField`
|
|
695
534
|
|
|
696
|
-
|
|
535
|
+
Auto-generated UUID v4 used to trace related messages across publish/consume chains. Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
|
|
697
536
|
|
|
698
537
|
```typescript
|
|
699
|
-
@CorrelationField()
|
|
700
|
-
correlationId!: string;
|
|
538
|
+
@CorrelationField() correlationId!: string;
|
|
701
539
|
```
|
|
702
540
|
|
|
703
|
-
Equivalent to `@Default(() => randomUUID()) @Field("uuid")`. Non-nullable, non-optional.
|
|
704
|
-
|
|
705
|
-
No arguments.
|
|
706
|
-
|
|
707
541
|
#### `@TimestampField`
|
|
708
542
|
|
|
709
|
-
|
|
543
|
+
Auto-generated `Date` set on creation. Equivalent to `@Default(() => new Date()) @Field("date")`. Non-nullable, non-optional.
|
|
710
544
|
|
|
711
545
|
```typescript
|
|
712
|
-
@TimestampField()
|
|
713
|
-
createdAt!: Date;
|
|
546
|
+
@TimestampField() createdAt!: Date;
|
|
714
547
|
```
|
|
715
548
|
|
|
716
|
-
Equivalent to `@Default(() => new Date()) @Field("date")`. Non-nullable, non-optional.
|
|
717
|
-
|
|
718
|
-
No arguments.
|
|
719
|
-
|
|
720
549
|
#### `@MandatoryField`
|
|
721
550
|
|
|
722
|
-
|
|
551
|
+
Boolean flag that defaults to `false`. Equivalent to `@Default(false) @Field("boolean")`.
|
|
723
552
|
|
|
724
553
|
```typescript
|
|
725
|
-
@MandatoryField()
|
|
726
|
-
requiresApproval!: boolean;
|
|
554
|
+
@MandatoryField() requiresApproval!: boolean;
|
|
727
555
|
```
|
|
728
556
|
|
|
729
|
-
Equivalent to `@Default(false) @Field("boolean")`. Non-nullable, non-optional.
|
|
730
|
-
|
|
731
|
-
No arguments.
|
|
732
|
-
|
|
733
557
|
#### `@PersistentField`
|
|
734
558
|
|
|
735
|
-
|
|
559
|
+
Boolean persistence flag that defaults to `false`. Equivalent to `@Default(false) @Field("boolean")`.
|
|
736
560
|
|
|
737
561
|
```typescript
|
|
738
|
-
@PersistentField()
|
|
739
|
-
shouldPersist!: boolean;
|
|
562
|
+
@PersistentField() shouldPersist!: boolean;
|
|
740
563
|
```
|
|
741
564
|
|
|
742
|
-
Equivalent to `@Default(false) @Field("boolean")`. Non-nullable, non-optional.
|
|
743
|
-
|
|
744
|
-
No arguments.
|
|
745
|
-
|
|
746
|
-
---
|
|
747
|
-
|
|
748
565
|
### Field Modifiers
|
|
749
566
|
|
|
750
|
-
|
|
567
|
+
Stack these on top of a field decorator to refine its behavior.
|
|
751
568
|
|
|
752
|
-
#### `@
|
|
753
|
-
|
|
754
|
-
Marks a field for automatic value generation on message creation.
|
|
569
|
+
#### `@Nullable` / `@Optional`
|
|
755
570
|
|
|
756
571
|
```typescript
|
|
757
|
-
@
|
|
758
|
-
@Field("
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
@Generated("date") // current timestamp
|
|
762
|
-
@Field("date")
|
|
763
|
-
processedAt!: Date;
|
|
764
|
-
|
|
765
|
-
@Generated("string") // random string (default length)
|
|
766
|
-
@Field("string")
|
|
767
|
-
token!: string;
|
|
768
|
-
|
|
769
|
-
@Generated("string", { length: 12 }) // random string with custom length
|
|
770
|
-
@Field("string")
|
|
771
|
-
shortCode!: string;
|
|
572
|
+
@Nullable() @Field("string") description!: string | null;
|
|
573
|
+
@Optional() @Field("string") nickname?: string;
|
|
574
|
+
```
|
|
772
575
|
|
|
773
|
-
|
|
774
|
-
@Field("integer")
|
|
775
|
-
sequenceNumber!: number;
|
|
576
|
+
#### `@Default`
|
|
776
577
|
|
|
777
|
-
|
|
778
|
-
@Field("
|
|
779
|
-
|
|
578
|
+
```typescript
|
|
579
|
+
@Default(0) @Field("integer") retryCount!: number;
|
|
580
|
+
@Default(() => "generated") @Field("string") code!: string;
|
|
780
581
|
```
|
|
781
582
|
|
|
782
|
-
**
|
|
583
|
+
**Argument:** `MetaFieldDefault` (re-exported as `IrisFieldDefault`) — a primitive value, an array/record of primitives, or a no-arg function returning one.
|
|
783
584
|
|
|
784
|
-
|
|
585
|
+
#### `@Generated`
|
|
586
|
+
|
|
587
|
+
Marks a field for automatic value generation when an instance is created.
|
|
785
588
|
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
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
|
+
```
|
|
793
597
|
|
|
794
|
-
**
|
|
598
|
+
**Strategies:** `"uuid" | "date" | "string" | "integer" | "float"` (re-exported as `IrisGeneratedStrategy`). **Options:** `{ length?, min?, max? }`.
|
|
795
599
|
|
|
796
600
|
#### `@Header`
|
|
797
601
|
|
|
798
|
-
Promotes a field
|
|
602
|
+
Promotes a field to a transport header so it is accessible without deserialising the body.
|
|
799
603
|
|
|
800
604
|
```typescript
|
|
801
|
-
@Header()
|
|
802
|
-
@Field("
|
|
803
|
-
source!: string;
|
|
804
|
-
|
|
805
|
-
@Header("x-trace-id") // explicit header name
|
|
806
|
-
@Field("uuid")
|
|
807
|
-
traceId!: string;
|
|
605
|
+
@Header() @Field("string") source!: string;
|
|
606
|
+
@Header("x-trace-id") @Field("uuid") traceId!: string;
|
|
808
607
|
```
|
|
809
608
|
|
|
810
|
-
**Argument:** `string?` —
|
|
609
|
+
**Argument:** `string?` — header name, defaults to the property name. Throws `IrisMetadataError` if it resolves to an empty string.
|
|
811
610
|
|
|
812
611
|
#### `@Enum`
|
|
813
612
|
|
|
814
|
-
Restricts
|
|
613
|
+
Restricts the field to the values of a TypeScript enum or `Record<string, string | number>`. Enforced during validation.
|
|
815
614
|
|
|
816
615
|
```typescript
|
|
817
616
|
enum OrderStatus {
|
|
@@ -820,56 +619,34 @@ enum OrderStatus {
|
|
|
820
619
|
Delivered = "delivered",
|
|
821
620
|
}
|
|
822
621
|
|
|
823
|
-
@Enum(OrderStatus)
|
|
824
|
-
@Field("enum")
|
|
825
|
-
status!: OrderStatus;
|
|
622
|
+
@Enum(OrderStatus) @Field("enum") status!: OrderStatus;
|
|
826
623
|
```
|
|
827
624
|
|
|
828
|
-
**Argument:** `Record<string, string | number>` — the enum object or value map.
|
|
829
|
-
|
|
830
625
|
#### `@Min` / `@Max`
|
|
831
626
|
|
|
832
|
-
|
|
627
|
+
Numeric bounds for number fields, length bounds for string fields.
|
|
833
628
|
|
|
834
629
|
```typescript
|
|
835
|
-
@Min(0)
|
|
836
|
-
@Max(
|
|
837
|
-
@Field("integer")
|
|
838
|
-
score!: number;
|
|
839
|
-
|
|
840
|
-
@Min(1)
|
|
841
|
-
@Max(255)
|
|
842
|
-
@Field("string")
|
|
843
|
-
name!: string;
|
|
630
|
+
@Min(0) @Max(100) @Field("integer") score!: number;
|
|
631
|
+
@Min(1) @Max(255) @Field("string") name!: string;
|
|
844
632
|
```
|
|
845
633
|
|
|
846
|
-
**Argument:** `number`.
|
|
847
|
-
|
|
848
634
|
#### `@Schema`
|
|
849
635
|
|
|
850
|
-
Attaches a Zod schema for fine-grained
|
|
636
|
+
Attaches a Zod schema for fine-grained validation.
|
|
851
637
|
|
|
852
638
|
```typescript
|
|
853
639
|
import { z } from "zod";
|
|
854
640
|
|
|
855
|
-
@Schema(z.string().email())
|
|
856
|
-
@Field("
|
|
857
|
-
email!: string;
|
|
858
|
-
|
|
859
|
-
@Schema(z.number().int().min(13).max(150))
|
|
860
|
-
@Field("integer")
|
|
861
|
-
age!: number;
|
|
862
|
-
|
|
863
|
-
@Schema(z.string().regex(/^[A-Z]{2,3}$/))
|
|
864
|
-
@Field("string")
|
|
865
|
-
countryCode!: string;
|
|
641
|
+
@Schema(z.string().email()) @Field("email") email!: string;
|
|
642
|
+
@Schema(z.number().int().min(13).max(150)) @Field("integer") age!: number;
|
|
866
643
|
```
|
|
867
644
|
|
|
868
|
-
**Argument:** `z.ZodType
|
|
645
|
+
**Argument:** `z.ZodType`.
|
|
869
646
|
|
|
870
647
|
#### `@Transform`
|
|
871
648
|
|
|
872
|
-
|
|
649
|
+
Bidirectional transform between the in-memory field value and its serialised form. `to` runs on serialise, `from` runs on hydrate.
|
|
873
650
|
|
|
874
651
|
```typescript
|
|
875
652
|
@Transform({
|
|
@@ -878,259 +655,90 @@ Applies a bidirectional transform to a field value. `to` runs during serialisati
|
|
|
878
655
|
})
|
|
879
656
|
@Field("string")
|
|
880
657
|
tags!: string[];
|
|
881
|
-
|
|
882
|
-
@Transform<Date, number>({
|
|
883
|
-
to: (date) => date.getTime(),
|
|
884
|
-
from: (ms) => new Date(ms),
|
|
885
|
-
})
|
|
886
|
-
@Field("bigint")
|
|
887
|
-
timestamp!: Date;
|
|
888
658
|
```
|
|
889
659
|
|
|
890
|
-
**Options:** `{ to: (value
|
|
891
|
-
|
|
892
|
-
This is a standalone decorator that uses a separate staging path. For inline transforms, use the `transform` option on `@Field` instead.
|
|
893
|
-
|
|
894
|
-
---
|
|
660
|
+
**Options:** `{ to: (value) => unknown, from: (raw) => unknown }` (the type is re-exported as `IrisTransformFn`).
|
|
895
661
|
|
|
896
662
|
### Lifecycle Hook Decorators
|
|
897
663
|
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
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.
|
|
901
665
|
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
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) |
|
|
905
676
|
|
|
906
677
|
```typescript
|
|
907
678
|
@OnCreate((msg) => {
|
|
908
679
|
msg.slug = msg.name.toLowerCase().replace(/\s+/g, "-");
|
|
909
680
|
})
|
|
910
|
-
@Message()
|
|
911
|
-
class OrderPlaced {
|
|
912
|
-
@Field("string") name!: string;
|
|
913
|
-
@Field("string") slug!: string;
|
|
914
|
-
}
|
|
915
|
-
```
|
|
916
|
-
|
|
917
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
918
|
-
|
|
919
|
-
#### `@OnHydrate`
|
|
920
|
-
|
|
921
|
-
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.
|
|
922
|
-
|
|
923
|
-
```typescript
|
|
924
|
-
@OnHydrate((msg) => {
|
|
925
|
-
msg.displayName = `${msg.firstName} ${msg.lastName}`;
|
|
926
|
-
})
|
|
927
|
-
@Message()
|
|
928
|
-
class UserEvent {
|
|
929
|
-
@Field("string") firstName!: string;
|
|
930
|
-
@Field("string") lastName!: string;
|
|
931
|
-
@Field("string") displayName!: string;
|
|
932
|
-
}
|
|
933
|
-
```
|
|
934
|
-
|
|
935
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
936
|
-
|
|
937
|
-
#### `@OnValidate`
|
|
938
|
-
|
|
939
|
-
Fires during message validation, after the built-in Zod schema check. Throw to reject the message.
|
|
940
|
-
|
|
941
|
-
```typescript
|
|
942
681
|
@OnValidate((msg) => {
|
|
943
|
-
if (msg.startDate >= msg.endDate)
|
|
944
|
-
throw new Error("startDate must be before endDate");
|
|
945
|
-
}
|
|
682
|
+
if (msg.startDate >= msg.endDate) throw new Error("startDate must be before endDate");
|
|
946
683
|
})
|
|
947
|
-
@Message()
|
|
948
|
-
class BookingRequest {
|
|
949
|
-
@Field("date") startDate!: Date;
|
|
950
|
-
@Field("date") endDate!: Date;
|
|
951
|
-
}
|
|
952
|
-
```
|
|
953
|
-
|
|
954
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
955
|
-
|
|
956
|
-
#### `@BeforePublish` / `@AfterPublish`
|
|
957
|
-
|
|
958
|
-
Fire around publish operations. `@BeforePublish` runs before the message is handed to the transport. `@AfterPublish` runs after the transport confirms delivery.
|
|
959
|
-
|
|
960
|
-
```typescript
|
|
961
684
|
@BeforePublish(async (msg) => {
|
|
962
685
|
await validateExternalId(msg.externalId);
|
|
963
686
|
})
|
|
964
687
|
@AfterPublish(async (msg) => {
|
|
965
688
|
metrics.increment("messages.published");
|
|
966
689
|
})
|
|
967
|
-
@
|
|
968
|
-
class OrderPlaced {
|
|
969
|
-
@Field("string") externalId!: string;
|
|
970
|
-
}
|
|
971
|
-
```
|
|
972
|
-
|
|
973
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
974
|
-
|
|
975
|
-
#### `@BeforeConsume` / `@AfterConsume`
|
|
976
|
-
|
|
977
|
-
Fire around consume callback execution. `@BeforeConsume` runs after deserialisation but before the consume callback. `@AfterConsume` runs after the callback completes successfully.
|
|
978
|
-
|
|
979
|
-
```typescript
|
|
980
|
-
@BeforeConsume(async (msg, ctx) => {
|
|
690
|
+
@BeforeConsume(async (msg) => {
|
|
981
691
|
audit.log("consuming", msg);
|
|
982
692
|
})
|
|
983
693
|
@AfterConsume(async (msg) => {
|
|
984
694
|
metrics.increment("messages.consumed");
|
|
985
695
|
})
|
|
986
|
-
@Message()
|
|
987
|
-
class OrderPlaced {
|
|
988
|
-
/* ... */
|
|
989
|
-
}
|
|
990
|
-
```
|
|
991
|
-
|
|
992
|
-
**Argument:** `(message: M, context?: C) => void | Promise<void>`.
|
|
993
|
-
|
|
994
|
-
#### `@OnConsumeError`
|
|
995
|
-
|
|
996
|
-
Fires when a consume callback throws an error. Receives the error as the **first** argument, followed by the message and context.
|
|
997
|
-
|
|
998
|
-
```typescript
|
|
999
696
|
@OnConsumeError(async (error, msg) => {
|
|
1000
697
|
errorTracker.capture(error, { messageId: msg.id });
|
|
1001
698
|
})
|
|
1002
699
|
@Message()
|
|
1003
|
-
class
|
|
1004
|
-
|
|
1005
|
-
@Field("string") chargeId!: string;
|
|
1006
|
-
}
|
|
1007
|
-
```
|
|
1008
|
-
|
|
1009
|
-
**Argument:** `(error: Error, message: M, context?: C) => void | Promise<void>`.
|
|
1010
|
-
|
|
1011
|
-
Note the different signature: `error` is the first parameter, unlike all other hooks where the message comes first.
|
|
1012
|
-
|
|
1013
|
-
---
|
|
1014
|
-
|
|
1015
|
-
### Hook Execution Order
|
|
1016
|
-
|
|
1017
|
-
| Phase | Hooks (in order) |
|
|
1018
|
-
| ---------- | ------------------------------------------------------------------------------------------------------- |
|
|
1019
|
-
| Creation | `@OnCreate` |
|
|
1020
|
-
| Validation | `@OnValidate` |
|
|
1021
|
-
| Publish | `@BeforePublish` -> subscriber.beforePublish -> transport -> `@AfterPublish` -> subscriber.afterPublish |
|
|
1022
|
-
| Consume | `@BeforeConsume` -> subscriber.beforeConsume -> callback -> `@AfterConsume` -> subscriber.afterConsume |
|
|
1023
|
-
| Hydration | `@OnHydrate` |
|
|
1024
|
-
| Error | `@OnConsumeError` -> subscriber.onConsumeError (replaces AfterConsume steps) |
|
|
1025
|
-
|
|
1026
|
-
Full publish + consume lifecycle:
|
|
1027
|
-
|
|
1028
|
-
```
|
|
1029
|
-
1. @BeforePublish hook
|
|
1030
|
-
2. subscriber.beforePublish
|
|
1031
|
-
3. (transport publishes)
|
|
1032
|
-
4. (transport delivers to consumer)
|
|
1033
|
-
5. @BeforeConsume hook
|
|
1034
|
-
6. subscriber.beforeConsume
|
|
1035
|
-
7. callback executes
|
|
1036
|
-
8. @AfterConsume hook
|
|
1037
|
-
9. subscriber.afterConsume
|
|
1038
|
-
10. @AfterPublish hook
|
|
1039
|
-
11. subscriber.afterPublish
|
|
1040
|
-
```
|
|
1041
|
-
|
|
1042
|
-
On error at step 7, steps 8-11 are replaced by `@OnConsumeError` and `subscriber.onConsumeError`.
|
|
1043
|
-
|
|
1044
|
-
## Retry and Dead Letter
|
|
1045
|
-
|
|
1046
|
-
Configure automatic retry with backoff strategies and dead letter routing for permanently failed messages.
|
|
1047
|
-
|
|
1048
|
-
```typescript
|
|
1049
|
-
@Retry({
|
|
1050
|
-
maxRetries: 5,
|
|
1051
|
-
strategy: "exponential", // "constant" | "linear" | "exponential"
|
|
1052
|
-
delay: 1000, // initial delay in ms
|
|
1053
|
-
delayMax: 30000, // maximum delay cap
|
|
1054
|
-
multiplier: 2, // exponential multiplier
|
|
1055
|
-
jitter: true, // add randomness to prevent thundering herd
|
|
1056
|
-
})
|
|
1057
|
-
@DeadLetter()
|
|
1058
|
-
@Message()
|
|
1059
|
-
class PaymentCharge {
|
|
1060
|
-
@Field("string") chargeId!: string;
|
|
1061
|
-
@Field("float") amount!: number;
|
|
1062
|
-
}
|
|
1063
|
-
```
|
|
1064
|
-
|
|
1065
|
-
## Dynamic Topics
|
|
1066
|
-
|
|
1067
|
-
Route messages to different topics based on their content:
|
|
1068
|
-
|
|
1069
|
-
```typescript
|
|
1070
|
-
@Topic((msg: any) => `events.${msg.region}.${msg.type}`)
|
|
1071
|
-
@Message()
|
|
1072
|
-
class RegionalEvent {
|
|
1073
|
-
@Field("string") region!: string;
|
|
1074
|
-
@Field("string") type!: string;
|
|
1075
|
-
@Field("object") data!: Record<string, unknown>;
|
|
700
|
+
class BookingRequest {
|
|
701
|
+
/* ... */
|
|
1076
702
|
}
|
|
1077
|
-
|
|
1078
|
-
const bus = source.messageBus(RegionalEvent);
|
|
1079
|
-
const msg = bus.create({ region: "eu-west", type: "signup", data: {} });
|
|
1080
|
-
await bus.publish(msg); // Published to "events.eu-west.signup"
|
|
1081
703
|
```
|
|
1082
704
|
|
|
1083
|
-
##
|
|
1084
|
-
|
|
1085
|
-
```typescript
|
|
1086
|
-
import { Encrypted, Compressed } from "@lindorm/iris";
|
|
1087
|
-
|
|
1088
|
-
@Encrypted() // Encrypt payload via amphora
|
|
1089
|
-
@Compressed("brotli") // Then compress ("gzip" | "deflate" | "brotli")
|
|
1090
|
-
@Message()
|
|
1091
|
-
class SensitivePayload {
|
|
1092
|
-
@Field("string") ssn!: string;
|
|
1093
|
-
@Field("string") name!: string;
|
|
1094
|
-
}
|
|
705
|
+
## Hook Execution Order
|
|
1095
706
|
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
```
|
|
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) |
|
|
1105
715
|
|
|
1106
|
-
##
|
|
716
|
+
## Subscribers
|
|
1107
717
|
|
|
1108
|
-
Observe message lifecycle events across
|
|
718
|
+
Observe message lifecycle events across every message in a source.
|
|
1109
719
|
|
|
1110
720
|
```typescript
|
|
1111
721
|
import type { IMessageSubscriber } from "@lindorm/iris";
|
|
1112
722
|
|
|
1113
|
-
const
|
|
723
|
+
const audit: IMessageSubscriber = {
|
|
1114
724
|
beforePublish: async (msg) => {
|
|
1115
|
-
|
|
725
|
+
auditLog.log("publishing", msg);
|
|
1116
726
|
},
|
|
1117
727
|
afterConsume: async (msg) => {
|
|
1118
|
-
|
|
728
|
+
auditLog.log("consumed", msg);
|
|
1119
729
|
},
|
|
1120
|
-
onConsumeError: async (
|
|
1121
|
-
|
|
730
|
+
onConsumeError: async (err, msg) => {
|
|
731
|
+
auditLog.log("consume-failed", { error: err.message, msg });
|
|
1122
732
|
},
|
|
1123
733
|
};
|
|
1124
734
|
|
|
1125
|
-
source.addSubscriber(
|
|
1126
|
-
|
|
1127
|
-
// Remove later
|
|
1128
|
-
source.removeSubscriber(auditSubscriber);
|
|
735
|
+
source.addSubscriber(audit);
|
|
736
|
+
source.removeSubscriber(audit);
|
|
1129
737
|
```
|
|
1130
738
|
|
|
1131
739
|
## Consume Envelope
|
|
1132
740
|
|
|
1133
|
-
Every subscribe/consume callback receives the message and
|
|
741
|
+
Every subscribe/consume callback receives the message and a `ConsumeEnvelope`:
|
|
1134
742
|
|
|
1135
743
|
```typescript
|
|
1136
744
|
import type { ConsumeEnvelope } from "@lindorm/iris";
|
|
@@ -1138,128 +746,94 @@ import type { ConsumeEnvelope } from "@lindorm/iris";
|
|
|
1138
746
|
await bus.subscribe({
|
|
1139
747
|
topic: "OrderPlaced",
|
|
1140
748
|
callback: async (msg: OrderPlaced, envelope: ConsumeEnvelope) => {
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
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)
|
|
1149
757
|
},
|
|
1150
758
|
});
|
|
1151
759
|
```
|
|
1152
760
|
|
|
1153
761
|
## Message Manipulation
|
|
1154
762
|
|
|
1155
|
-
Every publisher, message bus, and worker queue
|
|
763
|
+
Every publisher, message bus, and worker queue exposes the same instance utilities:
|
|
1156
764
|
|
|
1157
765
|
```typescript
|
|
1158
766
|
const bus = source.messageBus(OrderPlaced);
|
|
1159
767
|
|
|
1160
|
-
// Create: new instance with auto-generated fields and defaults
|
|
1161
768
|
const msg = bus.create({ orderId: "abc-123", total: 59.99 });
|
|
1162
|
-
|
|
1163
|
-
//
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
// Copy: deep clone with a fresh identifier
|
|
1167
|
-
const copied = bus.copy(msg);
|
|
1168
|
-
// copied.orderId === msg.orderId, but copied.id !== msg.id
|
|
1169
|
-
|
|
1170
|
-
// Validate: throws IrisValidationError if invalid
|
|
1171
|
-
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
|
|
1172
772
|
```
|
|
1173
773
|
|
|
774
|
+
`create()` runs default value generation and `@OnCreate` hooks. `hydrate()` reconstructs from raw transport data without regenerating defaults and runs `@OnHydrate` hooks.
|
|
775
|
+
|
|
1174
776
|
## Publish Options
|
|
1175
777
|
|
|
1176
|
-
|
|
778
|
+
Per-publish overrides for `publish(message, options)`:
|
|
1177
779
|
|
|
1178
780
|
```typescript
|
|
1179
781
|
await bus.publish(msg, {
|
|
1180
|
-
delay: 5000, //
|
|
1181
|
-
priority: 8, //
|
|
1182
|
-
expiry: 60000, //
|
|
782
|
+
delay: 5000, // ms — overrides @Delay
|
|
783
|
+
priority: 8, // 0..10 — overrides @Priority
|
|
784
|
+
expiry: 60000, // ms — overrides @Expiry
|
|
1183
785
|
key: "partition-key", // routing/partition key
|
|
1184
786
|
headers: { "x-source": "api" }, // additional headers
|
|
1185
787
|
});
|
|
1186
788
|
```
|
|
1187
789
|
|
|
1188
|
-
##
|
|
790
|
+
## Sessions
|
|
1189
791
|
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
```typescript
|
|
1193
|
-
import { z } from "zod";
|
|
1194
|
-
import { Schema, Field, Message } from "@lindorm/iris";
|
|
1195
|
-
|
|
1196
|
-
@Message()
|
|
1197
|
-
class UserCreated {
|
|
1198
|
-
@Schema(z.string().email())
|
|
1199
|
-
@Field("email")
|
|
1200
|
-
email!: string;
|
|
1201
|
-
|
|
1202
|
-
@Schema(z.number().int().min(13).max(150))
|
|
1203
|
-
@Field("integer")
|
|
1204
|
-
age!: number;
|
|
1205
|
-
|
|
1206
|
-
@Schema(z.string().regex(/^[A-Z]{2,3}$/))
|
|
1207
|
-
@Field("string")
|
|
1208
|
-
countryCode!: string;
|
|
1209
|
-
}
|
|
1210
|
-
```
|
|
1211
|
-
|
|
1212
|
-
## Cloning
|
|
1213
|
-
|
|
1214
|
-
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.
|
|
1215
793
|
|
|
1216
794
|
```typescript
|
|
1217
795
|
const source = new IrisSource({
|
|
1218
796
|
driver: "rabbit",
|
|
1219
797
|
url: "amqp://localhost",
|
|
1220
|
-
logger:
|
|
798
|
+
logger: appLogger,
|
|
1221
799
|
messages: [OrderPlaced],
|
|
1222
800
|
});
|
|
1223
801
|
|
|
1224
802
|
await source.connect();
|
|
1225
803
|
await source.setup();
|
|
1226
804
|
|
|
1227
|
-
|
|
1228
|
-
|
|
805
|
+
const scoped = source.session({
|
|
806
|
+
logger: requestLogger,
|
|
807
|
+
meta: { correlationId: "abc-123", actor: "user:42", timestamp: new Date() },
|
|
808
|
+
});
|
|
1229
809
|
|
|
1230
810
|
const pub = scoped.publisher(OrderPlaced);
|
|
1231
|
-
await pub.publish(pub.create({ orderId: "abc
|
|
811
|
+
await pub.publish(pub.create({ orderId: "abc", total: 10 }));
|
|
1232
812
|
```
|
|
1233
813
|
|
|
814
|
+
A session exposes the same `messageBus`, `publisher`, `workerQueue`, `stream`, `rpcClient`, `rpcServer`, `hasMessage`, `ping`, and `driver` surface as the source.
|
|
815
|
+
|
|
1234
816
|
## Driver Configuration
|
|
1235
817
|
|
|
1236
818
|
### Memory
|
|
1237
819
|
|
|
1238
820
|
```typescript
|
|
1239
|
-
|
|
1240
|
-
driver: "memory",
|
|
1241
|
-
logger,
|
|
1242
|
-
messages: [OrderPlaced],
|
|
1243
|
-
});
|
|
821
|
+
new IrisSource({ driver: "memory", logger, messages: [OrderPlaced] });
|
|
1244
822
|
```
|
|
1245
823
|
|
|
1246
824
|
### RabbitMQ
|
|
1247
825
|
|
|
1248
826
|
```typescript
|
|
1249
|
-
|
|
827
|
+
new IrisSource({
|
|
1250
828
|
driver: "rabbit",
|
|
1251
829
|
url: "amqp://localhost",
|
|
1252
830
|
logger,
|
|
1253
831
|
messages: [OrderPlaced],
|
|
1254
|
-
exchange: "my-exchange",
|
|
1255
|
-
prefetch: 10,
|
|
832
|
+
exchange: "my-exchange",
|
|
833
|
+
prefetch: 10,
|
|
1256
834
|
connection: {
|
|
1257
|
-
// optional
|
|
1258
835
|
heartbeat: 60,
|
|
1259
|
-
socketOptions: {
|
|
1260
|
-
timeout: 30000,
|
|
1261
|
-
keepAlive: true,
|
|
1262
|
-
},
|
|
836
|
+
socketOptions: { timeout: 30000, keepAlive: true },
|
|
1263
837
|
},
|
|
1264
838
|
});
|
|
1265
839
|
```
|
|
@@ -1267,30 +841,22 @@ const source = new IrisSource({
|
|
|
1267
841
|
### Kafka
|
|
1268
842
|
|
|
1269
843
|
```typescript
|
|
1270
|
-
|
|
844
|
+
new IrisSource({
|
|
1271
845
|
driver: "kafka",
|
|
1272
846
|
brokers: ["localhost:9092"],
|
|
1273
847
|
logger,
|
|
1274
848
|
messages: [OrderPlaced],
|
|
1275
|
-
prefix: "my-app",
|
|
1276
|
-
prefetch: 100,
|
|
1277
|
-
acks: -1, //
|
|
1278
|
-
sessionTimeoutMs: 30000,
|
|
849
|
+
prefix: "my-app",
|
|
850
|
+
prefetch: 100,
|
|
851
|
+
acks: -1, // -1 = all, 0 = none, 1 = leader
|
|
852
|
+
sessionTimeoutMs: 30000,
|
|
1279
853
|
connection: {
|
|
1280
|
-
// optional
|
|
1281
854
|
clientId: "my-service",
|
|
1282
855
|
ssl: true,
|
|
1283
|
-
sasl: {
|
|
1284
|
-
mechanism: "scram-sha-256",
|
|
1285
|
-
username: "user",
|
|
1286
|
-
password: "pass",
|
|
1287
|
-
},
|
|
856
|
+
sasl: { mechanism: "scram-sha-256", username: "user", password: "pass" },
|
|
1288
857
|
connectionTimeout: 10000,
|
|
1289
858
|
requestTimeout: 30000,
|
|
1290
|
-
retry: {
|
|
1291
|
-
retries: 5,
|
|
1292
|
-
initialRetryTime: 300,
|
|
1293
|
-
},
|
|
859
|
+
retry: { retries: 5, initialRetryTime: 300 },
|
|
1294
860
|
},
|
|
1295
861
|
});
|
|
1296
862
|
```
|
|
@@ -1298,15 +864,14 @@ const source = new IrisSource({
|
|
|
1298
864
|
### NATS
|
|
1299
865
|
|
|
1300
866
|
```typescript
|
|
1301
|
-
|
|
867
|
+
new IrisSource({
|
|
1302
868
|
driver: "nats",
|
|
1303
869
|
servers: "nats://localhost:4222", // string or Array<string>
|
|
1304
870
|
logger,
|
|
1305
871
|
messages: [OrderPlaced],
|
|
1306
|
-
prefix: "my-app",
|
|
1307
|
-
prefetch: 50,
|
|
872
|
+
prefix: "my-app",
|
|
873
|
+
prefetch: 50,
|
|
1308
874
|
connection: {
|
|
1309
|
-
// optional
|
|
1310
875
|
user: "nats-user",
|
|
1311
876
|
pass: "nats-pass",
|
|
1312
877
|
tls: true,
|
|
@@ -1322,17 +887,16 @@ const source = new IrisSource({
|
|
|
1322
887
|
### Redis Streams
|
|
1323
888
|
|
|
1324
889
|
```typescript
|
|
1325
|
-
|
|
890
|
+
new IrisSource({
|
|
1326
891
|
driver: "redis",
|
|
1327
892
|
url: "redis://localhost:6379",
|
|
1328
893
|
logger,
|
|
1329
894
|
messages: [OrderPlaced],
|
|
1330
|
-
prefix: "my-app",
|
|
1331
|
-
prefetch: 50,
|
|
1332
|
-
blockMs: 5000, //
|
|
1333
|
-
maxStreamLength: 10000, //
|
|
895
|
+
prefix: "my-app",
|
|
896
|
+
prefetch: 50,
|
|
897
|
+
blockMs: 5000, // XREAD block time
|
|
898
|
+
maxStreamLength: 10000, // MAXLEN cap per stream
|
|
1334
899
|
connection: {
|
|
1335
|
-
// optional
|
|
1336
900
|
host: "redis.internal",
|
|
1337
901
|
port: 6379,
|
|
1338
902
|
password: "secret",
|
|
@@ -1348,87 +912,83 @@ const source = new IrisSource({
|
|
|
1348
912
|
|
|
1349
913
|
## Persistence (Delay and Dead Letter Stores)
|
|
1350
914
|
|
|
1351
|
-
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.
|
|
1352
916
|
|
|
1353
917
|
```typescript
|
|
1354
|
-
|
|
1355
|
-
driver: "
|
|
1356
|
-
|
|
918
|
+
new IrisSource({
|
|
919
|
+
driver: "kafka",
|
|
920
|
+
brokers: ["localhost:9092"],
|
|
1357
921
|
logger,
|
|
1358
922
|
messages: [OrderPlaced],
|
|
1359
923
|
persistence: {
|
|
1360
|
-
|
|
1361
|
-
delay: { type: "
|
|
1362
|
-
//
|
|
1363
|
-
// 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 },
|
|
1364
927
|
|
|
1365
|
-
// Dead letter store: holds messages that exhausted all retries
|
|
1366
928
|
deadLetter: { type: "memory" },
|
|
1367
|
-
//
|
|
1368
|
-
//
|
|
929
|
+
// deadLetter: { type: "redis", url: "redis://localhost:6379" },
|
|
930
|
+
// deadLetter: { type: "custom", store: myDeadLetterStore },
|
|
1369
931
|
},
|
|
1370
932
|
});
|
|
1371
933
|
```
|
|
1372
934
|
|
|
1373
935
|
### Custom Stores
|
|
1374
936
|
|
|
1375
|
-
Implement `IDelayStore` and/or `IDeadLetterStore` for
|
|
937
|
+
Implement `IDelayStore` and/or `IDeadLetterStore` for bespoke persistence:
|
|
1376
938
|
|
|
1377
939
|
```typescript
|
|
1378
940
|
import type {
|
|
1379
|
-
IDelayStore,
|
|
1380
|
-
IDeadLetterStore,
|
|
1381
|
-
DelayedEntry,
|
|
1382
941
|
DeadLetterEntry,
|
|
942
|
+
DeadLetterFilterOptions,
|
|
943
|
+
DeadLetterListOptions,
|
|
944
|
+
DelayedEntry,
|
|
945
|
+
IDeadLetterStore,
|
|
946
|
+
IDelayStore,
|
|
1383
947
|
} from "@lindorm/iris";
|
|
1384
948
|
|
|
1385
949
|
class MyDelayStore implements IDelayStore {
|
|
1386
|
-
async
|
|
950
|
+
schedule = async (entry: DelayedEntry): Promise<void> => {
|
|
1387
951
|
/* ... */
|
|
1388
|
-
}
|
|
1389
|
-
async
|
|
952
|
+
};
|
|
953
|
+
poll = async (now: number): Promise<Array<DelayedEntry>> => {
|
|
1390
954
|
/* ... */
|
|
1391
|
-
}
|
|
1392
|
-
async
|
|
955
|
+
};
|
|
956
|
+
cancel = async (id: string): Promise<boolean> => {
|
|
1393
957
|
/* ... */
|
|
1394
|
-
}
|
|
1395
|
-
async
|
|
958
|
+
};
|
|
959
|
+
size = async (): Promise<number> => {
|
|
1396
960
|
/* ... */
|
|
1397
|
-
}
|
|
1398
|
-
async
|
|
961
|
+
};
|
|
962
|
+
clear = async (): Promise<void> => {
|
|
1399
963
|
/* ... */
|
|
1400
|
-
}
|
|
1401
|
-
async
|
|
964
|
+
};
|
|
965
|
+
close = async (): Promise<void> => {
|
|
1402
966
|
/* ... */
|
|
1403
|
-
}
|
|
967
|
+
};
|
|
1404
968
|
}
|
|
1405
969
|
|
|
1406
970
|
class MyDeadLetterStore implements IDeadLetterStore {
|
|
1407
|
-
async
|
|
971
|
+
add = async (entry: DeadLetterEntry): Promise<void> => {
|
|
1408
972
|
/* ... */
|
|
1409
|
-
}
|
|
1410
|
-
async
|
|
1411
|
-
topic?: string;
|
|
1412
|
-
limit?: number;
|
|
1413
|
-
offset?: number;
|
|
1414
|
-
}): Promise<Array<DeadLetterEntry>> {
|
|
973
|
+
};
|
|
974
|
+
list = async (options?: DeadLetterListOptions): Promise<Array<DeadLetterEntry>> => {
|
|
1415
975
|
/* ... */
|
|
1416
|
-
}
|
|
1417
|
-
async
|
|
976
|
+
};
|
|
977
|
+
get = async (id: string): Promise<DeadLetterEntry | null> => {
|
|
1418
978
|
/* ... */
|
|
1419
|
-
}
|
|
1420
|
-
async
|
|
979
|
+
};
|
|
980
|
+
remove = async (id: string): Promise<boolean> => {
|
|
1421
981
|
/* ... */
|
|
1422
|
-
}
|
|
1423
|
-
async
|
|
982
|
+
};
|
|
983
|
+
purge = async (options?: DeadLetterFilterOptions): Promise<number> => {
|
|
1424
984
|
/* ... */
|
|
1425
|
-
}
|
|
1426
|
-
async
|
|
985
|
+
};
|
|
986
|
+
count = async (options?: DeadLetterFilterOptions): Promise<number> => {
|
|
1427
987
|
/* ... */
|
|
1428
|
-
}
|
|
1429
|
-
async
|
|
988
|
+
};
|
|
989
|
+
close = async (): Promise<void> => {
|
|
1430
990
|
/* ... */
|
|
1431
|
-
}
|
|
991
|
+
};
|
|
1432
992
|
}
|
|
1433
993
|
```
|
|
1434
994
|
|
|
@@ -1438,129 +998,106 @@ class MyDeadLetterStore implements IDeadLetterStore {
|
|
|
1438
998
|
const state = source.getConnectionState();
|
|
1439
999
|
// "disconnected" | "connecting" | "connected" | "reconnecting" | "draining"
|
|
1440
1000
|
|
|
1441
|
-
source.
|
|
1442
|
-
console.log(`
|
|
1001
|
+
source.on("connection:state", (next) => {
|
|
1002
|
+
console.log(`connection state -> ${next}`);
|
|
1443
1003
|
});
|
|
1444
1004
|
|
|
1445
|
-
|
|
1005
|
+
source.once("connection:state", (next) => {
|
|
1006
|
+
/* ... */
|
|
1007
|
+
});
|
|
1008
|
+
source.off("connection:state", listener);
|
|
1009
|
+
|
|
1446
1010
|
const healthy = await source.ping();
|
|
1447
1011
|
```
|
|
1448
1012
|
|
|
1449
1013
|
## Testing with Mocks
|
|
1450
1014
|
|
|
1451
|
-
|
|
1015
|
+
Iris ships per-runtime mock factories. Pick the import path that matches your test runner:
|
|
1452
1016
|
|
|
1453
1017
|
```typescript
|
|
1018
|
+
// Jest
|
|
1454
1019
|
import {
|
|
1455
1020
|
createMockIrisSource,
|
|
1456
|
-
|
|
1021
|
+
createMockIrisSession,
|
|
1457
1022
|
createMockMessageBus,
|
|
1023
|
+
createMockPublisher,
|
|
1024
|
+
createMockRpcClient,
|
|
1458
1025
|
createMockWorkerQueue,
|
|
1026
|
+
} from "@lindorm/iris/mocks/jest";
|
|
1027
|
+
|
|
1028
|
+
// Vitest
|
|
1029
|
+
import {
|
|
1030
|
+
createMockIrisSource,
|
|
1031
|
+
createMockIrisSession,
|
|
1032
|
+
createMockMessageBus,
|
|
1033
|
+
createMockPublisher,
|
|
1459
1034
|
createMockRpcClient,
|
|
1460
|
-
|
|
1035
|
+
createMockWorkerQueue,
|
|
1036
|
+
} from "@lindorm/iris/mocks/vitest";
|
|
1461
1037
|
```
|
|
1462
1038
|
|
|
1463
|
-
### Mock Source
|
|
1464
|
-
|
|
1465
1039
|
```typescript
|
|
1466
1040
|
const source = createMockIrisSource();
|
|
1467
1041
|
|
|
1468
|
-
// All methods are jest.fn() mocks
|
|
1469
|
-
expect(source.connect).not.toHaveBeenCalled();
|
|
1470
|
-
|
|
1471
1042
|
await source.connect();
|
|
1472
1043
|
expect(source.connect).toHaveBeenCalledTimes(1);
|
|
1473
1044
|
|
|
1474
|
-
// Factory methods return mocks by default
|
|
1475
1045
|
const bus = source.messageBus(OrderPlaced);
|
|
1476
1046
|
const pub = source.publisher(OrderPlaced);
|
|
1477
1047
|
const queue = source.workerQueue(OrderPlaced);
|
|
1478
1048
|
const rpc = source.rpcClient(GetPrice, PriceResponse);
|
|
1479
1049
|
```
|
|
1480
1050
|
|
|
1481
|
-
|
|
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()`.
|
|
1482
1052
|
|
|
1483
1053
|
```typescript
|
|
1484
1054
|
const pub = createMockPublisher<OrderPlaced>();
|
|
1485
|
-
|
|
1486
|
-
const msg = pub.create({ orderId: "abc", total: 10 });
|
|
1487
|
-
await pub.publish(msg);
|
|
1488
|
-
|
|
1489
|
-
// Inspect published messages
|
|
1055
|
+
await pub.publish(pub.create({ orderId: "abc", total: 10 }));
|
|
1490
1056
|
expect(pub.published).toHaveLength(1);
|
|
1491
|
-
|
|
1492
|
-
// Reset
|
|
1493
1057
|
pub.clearPublished();
|
|
1494
|
-
expect(pub.published).toHaveLength(0);
|
|
1495
|
-
```
|
|
1496
|
-
|
|
1497
|
-
### Mock Message Bus
|
|
1498
|
-
|
|
1499
|
-
```typescript
|
|
1500
|
-
const bus = createMockMessageBus<OrderPlaced>();
|
|
1501
|
-
|
|
1502
|
-
await bus.publish(bus.create({ orderId: "abc", total: 10 }));
|
|
1503
|
-
|
|
1504
|
-
expect(bus.published).toHaveLength(1);
|
|
1505
|
-
expect(bus.subscribe).not.toHaveBeenCalled();
|
|
1506
|
-
|
|
1507
|
-
bus.clearPublished();
|
|
1508
|
-
```
|
|
1509
|
-
|
|
1510
|
-
### Mock Worker Queue
|
|
1511
|
-
|
|
1512
|
-
```typescript
|
|
1513
|
-
const queue = createMockWorkerQueue<OrderPlaced>();
|
|
1514
|
-
|
|
1515
|
-
await queue.publish(queue.create({ orderId: "abc", total: 10 }));
|
|
1516
|
-
|
|
1517
|
-
expect(queue.published).toHaveLength(1);
|
|
1518
|
-
expect(queue.consume).not.toHaveBeenCalled();
|
|
1519
|
-
|
|
1520
|
-
queue.clearPublished();
|
|
1521
|
-
```
|
|
1522
|
-
|
|
1523
|
-
### Mock RPC Client
|
|
1524
1058
|
|
|
1525
|
-
```typescript
|
|
1526
|
-
// Provide a response factory
|
|
1527
1059
|
const client = createMockRpcClient<GetPrice, PriceResponse>((req) => {
|
|
1528
1060
|
const res = new PriceResponse();
|
|
1529
1061
|
res.price = 42.0;
|
|
1530
1062
|
res.currency = "USD";
|
|
1531
1063
|
return res;
|
|
1532
1064
|
});
|
|
1065
|
+
const res = await client.request(new GetPrice());
|
|
1066
|
+
expect(client.requests).toHaveLength(1);
|
|
1067
|
+
client.clearRequests();
|
|
1068
|
+
```
|
|
1533
1069
|
|
|
1534
|
-
|
|
1535
|
-
req.sku = "WIDGET-42";
|
|
1070
|
+
## CLI
|
|
1536
1071
|
|
|
1537
|
-
|
|
1538
|
-
expect(res.price).toBe(42.0);
|
|
1539
|
-
expect(client.requests).toHaveLength(1);
|
|
1072
|
+
The package ships an `iris` binary for scaffolding:
|
|
1540
1073
|
|
|
1541
|
-
|
|
1074
|
+
```bash
|
|
1075
|
+
npx iris init --driver rabbit --directory ./src/iris
|
|
1076
|
+
npx iris generate message OrderPlaced --directory ./src/iris/messages
|
|
1542
1077
|
```
|
|
1543
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
|
+
|
|
1544
1081
|
## Error Classes
|
|
1545
1082
|
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
| Error
|
|
1549
|
-
| ------------------------ |
|
|
1550
|
-
| `IrisError` | Base class for
|
|
1551
|
-
| `IrisDriverError` | Driver connection or operation
|
|
1552
|
-
| `IrisMetadataError` |
|
|
1553
|
-
| `IrisNotSupportedError` |
|
|
1554
|
-
| `IrisPublishError` |
|
|
1555
|
-
| `IrisScannerError` |
|
|
1556
|
-
| `IrisSerializationError` |
|
|
1557
|
-
| `IrisSourceError` | Source
|
|
1558
|
-
| `IrisTimeoutError` |
|
|
1559
|
-
| `IrisTransportError` | Transport
|
|
1560
|
-
| `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 |
|
|
1561
1098
|
|
|
1562
1099
|
```typescript
|
|
1563
|
-
import { IrisTimeoutError
|
|
1100
|
+
import { IrisTimeoutError } from "@lindorm/iris";
|
|
1564
1101
|
|
|
1565
1102
|
try {
|
|
1566
1103
|
await client.request(req, { timeout: 1000 });
|
|
@@ -1571,110 +1108,6 @@ try {
|
|
|
1571
1108
|
}
|
|
1572
1109
|
```
|
|
1573
1110
|
|
|
1574
|
-
## Full Example
|
|
1575
|
-
|
|
1576
|
-
```typescript
|
|
1577
|
-
import {
|
|
1578
|
-
IrisSource,
|
|
1579
|
-
Message,
|
|
1580
|
-
Namespace,
|
|
1581
|
-
Version,
|
|
1582
|
-
Field,
|
|
1583
|
-
IdentifierField,
|
|
1584
|
-
TimestampField,
|
|
1585
|
-
Retry,
|
|
1586
|
-
DeadLetter,
|
|
1587
|
-
} from "@lindorm/iris";
|
|
1588
|
-
import type { IMessage, IMessageSubscriber } from "@lindorm/iris";
|
|
1589
|
-
|
|
1590
|
-
// --- Define messages ---
|
|
1591
|
-
|
|
1592
|
-
@Message()
|
|
1593
|
-
@Namespace("payments")
|
|
1594
|
-
@Version(1)
|
|
1595
|
-
@Retry({ maxRetries: 3, strategy: "exponential", delay: 1000 })
|
|
1596
|
-
@DeadLetter()
|
|
1597
|
-
class ChargeRequested {
|
|
1598
|
-
@IdentifierField() id!: string;
|
|
1599
|
-
@TimestampField() createdAt!: Date;
|
|
1600
|
-
@Field("string") paymentId!: string;
|
|
1601
|
-
@Field("float") amount!: number;
|
|
1602
|
-
@Field("string") currency!: string;
|
|
1603
|
-
}
|
|
1604
|
-
|
|
1605
|
-
@Message()
|
|
1606
|
-
@Namespace("payments")
|
|
1607
|
-
@Version(1)
|
|
1608
|
-
class ChargeCompleted {
|
|
1609
|
-
@IdentifierField() id!: string;
|
|
1610
|
-
@TimestampField() completedAt!: Date;
|
|
1611
|
-
@Field("string") paymentId!: string;
|
|
1612
|
-
@Field("boolean") success!: boolean;
|
|
1613
|
-
}
|
|
1614
|
-
|
|
1615
|
-
// --- Set up source ---
|
|
1616
|
-
|
|
1617
|
-
const source = new IrisSource({
|
|
1618
|
-
driver: "kafka",
|
|
1619
|
-
brokers: ["kafka-1:9092", "kafka-2:9092"],
|
|
1620
|
-
logger: appLogger,
|
|
1621
|
-
messages: [ChargeRequested, ChargeCompleted],
|
|
1622
|
-
persistence: {
|
|
1623
|
-
deadLetter: { type: "redis", url: "redis://localhost:6379" },
|
|
1624
|
-
},
|
|
1625
|
-
});
|
|
1626
|
-
|
|
1627
|
-
await source.connect();
|
|
1628
|
-
await source.setup();
|
|
1629
|
-
|
|
1630
|
-
// --- Observe lifecycle ---
|
|
1631
|
-
|
|
1632
|
-
const metricsSubscriber: IMessageSubscriber = {
|
|
1633
|
-
afterPublish: async (msg) => metrics.increment("messages.published"),
|
|
1634
|
-
afterConsume: async (msg) => metrics.increment("messages.consumed"),
|
|
1635
|
-
onConsumeError: async (err) => metrics.increment("messages.errors"),
|
|
1636
|
-
};
|
|
1637
|
-
|
|
1638
|
-
source.addSubscriber(metricsSubscriber);
|
|
1639
|
-
|
|
1640
|
-
// --- Worker: process charges ---
|
|
1641
|
-
|
|
1642
|
-
const queue = source.workerQueue(ChargeRequested);
|
|
1643
|
-
const completedPub = source.publisher(ChargeCompleted);
|
|
1644
|
-
|
|
1645
|
-
await queue.consume("payment-workers", async (msg, envelope) => {
|
|
1646
|
-
const result = await paymentGateway.charge(msg.paymentId, msg.amount, msg.currency);
|
|
1647
|
-
|
|
1648
|
-
const completed = completedPub.create({
|
|
1649
|
-
paymentId: msg.paymentId,
|
|
1650
|
-
success: result.ok,
|
|
1651
|
-
});
|
|
1652
|
-
|
|
1653
|
-
await completedPub.publish(completed);
|
|
1654
|
-
});
|
|
1655
|
-
|
|
1656
|
-
// --- Notify on completion ---
|
|
1657
|
-
|
|
1658
|
-
const completedBus = source.messageBus(ChargeCompleted);
|
|
1659
|
-
|
|
1660
|
-
await completedBus.subscribe({
|
|
1661
|
-
topic: "ChargeCompleted",
|
|
1662
|
-
queue: "notification-service",
|
|
1663
|
-
callback: async (msg) => {
|
|
1664
|
-
if (msg.success) {
|
|
1665
|
-
await emailService.sendReceipt(msg.paymentId);
|
|
1666
|
-
}
|
|
1667
|
-
},
|
|
1668
|
-
});
|
|
1669
|
-
|
|
1670
|
-
// --- Shutdown ---
|
|
1671
|
-
|
|
1672
|
-
process.on("SIGTERM", async () => {
|
|
1673
|
-
await source.drain();
|
|
1674
|
-
await source.disconnect();
|
|
1675
|
-
});
|
|
1676
|
-
```
|
|
1677
|
-
|
|
1678
1111
|
## License
|
|
1679
1112
|
|
|
1680
1113
|
AGPL-3.0-or-later
|