node-red-contrib-octocore
Version:
OctoCore implementation for node-red
553 lines (471 loc) • 30.7 kB
Markdown
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [0.0.17] - 2025-11-13
### Added
- **uns-publish**: Parallel message transmission for better performance
- **Buffer Flush**: All buffered messages are now sent in parallel when connection is restored
- **Batch Publishing**: All batch messages are now sent in parallel when batch is full
- Performance improvement: ~10x faster for large batches (e.g., 1000 messages: ~100-200ms instead of 1-2s)
- Status shows `publishing X msgs...` during parallel transmission
### Changed
- **uns-publish**: Improved batch publishing functionality
- Changed default batch mode from "hybrid" to "size" for more predictable behavior
- Batch now only publishes when full (size-based) by default
- Simplified status display: Shows `batching (X/Y)` where X = current queue, Y = batch size
- Removed confusing "sent" counter from status display
- Original message timestamps are now preserved when batching (uses creation time, not send time)
- Improved status update logic to prevent race conditions and flickering
### Fixed
- **uns-publish**: Fixed batch status display issues
- Status no longer flickers between 0 and 1 when messages are added
- Batch status is no longer overridden by connection status updates
- Buffer and rate-limit status updates no longer interfere with batch status
- Centralized status update function for consistency
- **uns-publish**: Fixed buffer configuration visibility
- Buffer size fields are now properly hidden when buffering is disabled
- Removed reference to non-existent `#buffer-config` element
## [0.0.16] - 2025-11-12
### Fixed
- **Node Loading**: Fixed incorrect node paths in `package.json` - all nodes now correctly reference `nodes/` directory
- Changed from `"uns-publish.js"` to `"nodes/uns-publish.js"` for all 6 nodes
- Fixed `main` field from `"uns-server.js"` to `"nodes/uns-server.js"`
- Nodes now load correctly in Node-RED without "missing types" errors
- **Icon Paths**: Fixed icon references in HTML files to use correct relative paths
- Changed from `'icon-primary-positive.png'` to `'icons/icon-primary-positive.png'` in all node HTML files
- Icons now display correctly in Node-RED palette
- **Docker Configuration**: Improved volume mapping to prevent data loss
- Changed `./examples:/data` to `./examples:/data/examples` to preserve Node-RED data directory
- Removed unused `dev_data` volume definition
- **Documentation**: Fixed port inconsistencies across documentation files
- Updated Makefile to show correct port 1886 (was 1885)
- Updated `docs/manual-credentials.md` to use port 1886 (was 1885)
- All documentation now consistently references port 1886
- **Markdown Formatting**: Fixed code block formatting in README.md
- Corrected triple backticks (removed extra backticks in code examples)
### Removed
- **NATS JetStream Stream Nodes**: Moved to discard folder (not ready for production)
- **`uns-stream-publisher`**: Moved to discard - Publish messages to JetStream streams with persistence and acknowledgment
- **Stream Management:**
- Auto-create streams if they don't exist
- Configurable retention policies: Limits, Interest, WorkQueue
- Storage options: File (persistent) or Memory (fast)
- Replicas for high availability (1-5 replicas)
- **Features:**
- **Publish Acknowledgment**: Returns sequence number for each published message
- **Deduplication**: Configurable duplicate window (e.g., "2m") prevents duplicate messages
- **Headers Support**: Include custom headers with messages
- **Subject Patterns**: Wildcard subject patterns (e.g., "sensor.*")
- **Message Limits**: Configure max messages, max age, max bytes
- **Configuration:**
- Stream Name, Subject Pattern, Default Subject
- Retention Policy (limits/interest/workqueue)
- Max Messages (1-1,000,000), Max Age (e.g., "24h", "7d")
- Max Bytes, Duplicate Window, Storage Type
- **Output**: msg.stream, msg.sequence, msg.published, msg._duplicate
- **Use Cases**: Event sourcing, audit logs, durable messaging, guaranteed delivery
- **`uns-stream-consumer`**: Moved to discard - Consume messages from JetStream streams with explicit acknowledgment control
- **Consumer Management:**
- Auto-create durable consumers if they don't exist
- Durable state persists across restarts
- Subject filtering (e.g., "sensor.temperature")
- Configurable consumer name for multiple instances
- **Acknowledgment Modes:**
- **Explicit**: Manual acknowledgment with msg.ack(), msg.nak(), msg.term(), msg.inProgress()
- **All**: Automatic acknowledgment
- **None**: No acknowledgment required
- **Delivery Policies:**
- **New Only**: Start from new messages (default)
- **All**: Replay all messages from beginning
- **Last**: Only last message
- **By Start Sequence**: Replay from specific sequence number
- **By Start Time**: Replay from specific timestamp
- **Features:**
- **Batch Processing**: Fetch multiple messages (1-100) in one request
- **Redelivery**: Automatic retry with configurable max attempts (1-100)
- **Max Ack Pending**: Control outstanding unacknowledged messages (1-10,000)
- **Flow Control**: Backpressure handling with configurable heartbeat
- **Acknowledgment Wait**: Configurable timeout (e.g., "30s")
- **Idle Heartbeat**: Keep-alive for idle consumers (e.g., "5s")
- **Output**: msg.payload, msg.stream, msg.consumer, msg.subject, msg.sequence, msg.timestamp, msg.redelivered, msg.pending, msg.headers
- **Acknowledgment Functions:**
```javascript
msg.ack() // Acknowledge successful processing
msg.nak(delay) // Retry message (optional delay)
msg.term() // Terminate (no retry, mark as permanently failed)
msg.inProgress() // Extend ack wait time (still processing)
```
- **Use Cases**: Reliable message processing, work queues, event replay, audit log consumption
- **JetStream Benefits:**
- **Persistence**: Messages survive server restarts
- **Guaranteed Delivery**: At-least-once delivery semantics
- **Replay**: Replay historical messages from any point
- **Consumer Groups**: Multiple consumers share load
- **High Availability**: Replicated streams for fault tolerance
- **Message Ordering**: Guaranteed order within stream
- **Integration**: Fully integrated with existing connection pooling and status management
- **NATS Key-Value Store Nodes**: Moved to discard folder (not ready for production)
- **`uns-kv-get`**: Moved to discard - Retrieve, watch, and list keys from NATS KV buckets
- **Operation Modes:**
- **Get Value**: Retrieve single value by key (from config, msg.key, or msg.payload)
- **Watch Key(s)**: Subscribe to key changes with wildcard support (e.g., `config.*`)
- **List All Keys**: Get array of all keys in bucket
- **Features:**
- Auto-create buckets if they don't exist
- Auto-parse JSON values (configurable)
- Include revision history for GET operations
- Ignore delete events in WATCH mode (configurable)
- Real-time status updates showing watched keys
- **Output:** msg.payload (value), msg.key, msg.revision, msg.created, msg.operation
- **Use Cases:** Configuration storage, feature flags, session state, distributed cache, real-time sync
- **`uns-kv-put`**: Moved to discard - Store, update, or delete values in NATS KV buckets
- **Operations:**
- **Put**: Create or update key (upsert)
- **Create**: Create only if key doesn't exist (fails if exists)
- **Update**: Update only if key exists (fails if not found)
- **Delete**: Soft delete (mark as deleted, keep history)
- **Purge**: Hard delete (remove all revisions)
- **Features:**
- Auto-stringify JSON objects (configurable)
- TTL support (time-to-live for automatic expiration)
- Key from config, msg.key, or msg.topic
- Value from msg.payload, config, or msg.value
- Detailed operation feedback (_created, _updated, _deleted, _purged flags)
- **Use Cases:** Config management, feature flags, session storage, cache updates, state machines
- **JetStream Integration:** Uses NATS JetStream for persistence and replication
- **Connection Pooling:** Integrates with existing nats-server connection pool
- **`uns-kv-bucket`**: Moved to discard - Manage NATS KV buckets
- **`uns-health`**: Moved to discard - Health monitoring node
### Added
- **Message Validator Node (`uns-validator`)**: Advanced validation with JSON Schema, UNS spec, and custom rules
- **Validation Types:**
- **JSON Schema (Draft 7):** Full schema validation with type checking, required fields, ranges, patterns, formats (email, uri, date-time), enum values, array constraints (minItems, maxItems, uniqueItems)
- **UNS Specification:** Validate UNS message format
- Datatype validation (1-6: Integer, Float, Boolean, String, ByteArray, Object)
- Value format matching (e.g., datatype 1 must have string representation of integer)
- Timestamp validation (Unix or ISO 8601 format, range checking)
- UUID v4 format validation for event IDs
- **Custom Rules:** Visual rule editor with 4 types:
- **Required**: Field must exist and not be null/undefined
- **Range**: Number must be within range (e.g., `0:100`)
- **Regex**: String must match pattern (e.g., `^[A-Z]+`)
- **Custom**: JSONata expressions (e.g., `temperature > 0`)
- **Combined Mode**: Run all validations (Schema + UNS + Custom) in sequence
- **Actions on Validation Failure:**
- **Reject**: Stop processing and emit error
- **Warn**: Log warning but continue (message includes _validationErrors)
- **Route to Output 2**: Invalid messages to output 2, valid to output 1
- **Repair**: Attempt automatic fixes (type coercion, defaults, trimming)
- **Repair Capabilities:**
- Type coercion: "42" → 42, true → "true"
- Missing required fields: Set to null
- String truncation: Trim to maxLength
- Repair count and flag in output (_repaired, _repairCount)
- **Detailed Error Reporting:**
- msg._valid (boolean)
- msg._validationErrors (array of messages)
- msg._validationDetails (detailed error objects with field, message, code)
- **Dual Output Ports:** Valid (output 1), Invalid (output 2)
- **Use Cases:** Data quality assurance, API validation, UNS compliance, error routing, data cleaning
- **Message Transformation Node (`uns-transform`)**: New node for data transformation, filtering, and validation
- **Transform Modes:**
- **JSONPath Query**: Extract specific fields using JSONPath syntax (e.g., `$.sensor.temperature`)
- **Field Mapping**: Rename and restructure fields with visual mapping editor
- **Pass-through**: No transformation, useful with conditional filtering
- **Conditional Filtering**: Filter messages based on JSONata expressions or simple comparisons
- Only matching messages pass to output 1, failed messages route to output 2 (if enabled)
- Supports complex conditions like `payload > 50` or `$.status == "active"`
- **Data Enrichment**: Automatically add metadata to messages
- Auto-add timestamp (`_timestamp`) in ISO 8601 format
- Auto-add Node ID (`_nodeId`) for traceability
- Custom JSON fields injection
- **Schema Validation**: Validate messages against JSON Schema
- Configurable actions: Reject (error), Warn (continue), or Route to Output 2
- Supports type checking, required fields, min/max values, string patterns
- Detailed validation error messages
- **Dual Output Ports**: Valid messages (output 1), Invalid/Filtered messages (output 2)
- **Visual Status Indicators**: Shows transformation state (ready, transformed, filtered, invalid)
- **Use Cases**: Clean sensor data, extract specific fields, validate data quality, enrich with metadata
- **Rate Limiting**: `uns-publish` now includes Token Bucket rate limiting to prevent message flooding
- Enable via "Rate Limiting" checkbox in node configuration
- **Token Bucket Algorithm**: Industry-standard rate limiting with burst support
- Configurable rate limit (1-10,000 messages per window, default: 100)
- Configurable time window (100-60,000 ms, default: 1,000 ms)
- **Burst Allowance**: Allow temporary spikes (0-1,000 extra messages, default: 20)
- **Three Actions on Limit Exceeded:**
- **Drop (Silent)**: Discard excess messages without warnings
- **Drop with Warning**: Discard and log warnings with statistics
- **Delay (Queue & Throttle)**: Queue messages and send at allowed rate
- Automatic token refill based on elapsed time
- Visual status indicator shows queue size when rate limited
- Debug logging shows token bucket state and dropped message counts
- **Use Cases**: Protect against sensor malfunctions, prevent DoS, ensure fair resource usage
- **Batch Publishing**: `uns-publish` now supports grouping messages for efficient batch publishing
- Enable via "Batch Publishing" checkbox in node configuration
- Configurable batch size (1-1,000 messages, default: 100)
- Configurable batch interval (100-60,000 ms, default: 1,000 ms)
- Three batch modes:
- **Hybrid (Default)**: Publish when size OR interval reached (whichever comes first)
- **Size Only**: Publish only when batch size is reached
- **Time Only**: Publish only when interval elapses
- Visual status indicator shows batch progress (e.g., "batching (25/100)")
- Significantly improves throughput for high-volume sensor data
- Debug logging shows batch statistics (messages sent, failed, total)
- Compatible with message buffering and auto-reply features
- **Auto-Reply Handler**: `uns-publish` now supports automatic request-reply pattern handling
- Enable via "Auto-Reply Handler" checkbox in node configuration
- Node now has 1 output port (previously 0) for message forwarding
- Configurable reply timeout (100-60,000 ms, default: 5,000 ms)
- Workflow: Input message → Forward to output → Process response → Send as NATS reply
- Simplifies microservice patterns and eliminates manual reply-subject handling
- Automatically cleans up pending reply timeouts on node close
- Debug logging shows request forwarding and reply status
- Use case: Build request-response services with minimal flow complexity
- **Manual UNS Datatype Override**: `uns-publish` now allows manual datatype selection for UNS Value format
- New "UNS Datatype" dropdown that appears only when "UNS Value" format is selected
- Options: Auto-Detect (default), Integer (1), Float (2), Boolean (3), String (4), Object (6)
- Auto-Detect maintains backward compatibility with automatic type detection
- Manual override useful for edge cases (e.g., forcing "42" to be a string instead of integer)
- **Strict Type Validation**: Errors thrown if payload type doesn't match selected datatype
- Example: Selecting "String (4)" but sending `42` (integer) → Error: "Datatype mismatch: Expected string but received integer"
- Prevents silent type coercion bugs and ensures data integrity
- Distinguishes between integer/float, array/object, and null values
- Type conversion still applies: non-object types converted to string per UNS specification
- Debug logging shows when manual override is active and validated
- **Enhanced Security & Authentication**: Complete security overhaul for NATS server connections
- **Multiple Authentication Methods** (Dropdown Selection):
- **No Authentication**: For local development or unsecured servers
- **Username/Password**: Traditional authentication (default, backward compatible)
- **Token Authentication**: Single authentication token for NATS server
- **JWT Authentication**: NATS 2.x JSON Web Token with NKey seed
- **NKey Authentication**: Cryptographic authentication using NKey seed
- **TLS/SSL Encryption Support**:
- Enable/disable TLS encryption with checkbox
- **CA Certificate**: Server verification with custom CA certificate file
- **Client Certificate**: Mutual TLS (mTLS) with client certificate
- **Client Key**: Client private key for mTLS authentication
- **Verify Server Certificate**: Optional certificate verification (enabled by default)
- **Security Features**:
- All credentials stored encrypted in Node-RED's secure credentials system
- Automatic security warnings for production connections without TLS
- JWT validation ensures both JWT token and NKey seed are provided
- File-based certificate loading with path validation
- Debug logging shows auth method and TLS status (with masked credentials)
- **Backward Compatibility**:
- Existing flows with username/password continue to work
- New auth methods and TLS are opt-in
- Flows need to re-configure to use new auth methods
- **Production Ready**:
- Follows NATS 2.x security best practices
- Compatible with NATS JWT decentralized authentication
- Supports industry-standard mTLS for zero-trust architectures
- All credentials never visible in exported flows or version control
- **Message Buffering (Optional)**: Queue messages when connection is lost
- Enable via checkbox in `uns-publish` node configuration
- Configurable buffer size (10-10,000 messages, default: 1,000)
- Three buffer modes: Drop Oldest (FIFO), Drop Newest, Reject on Full
- Automatic flush when connection is restored
- Buffer status visible in node status (e.g., "buffered (50/1000)")
- Statistics: dropped message counter with warnings
- Prevents data loss for critical sensor data during network interruptions
- Disabled by default for backward compatibility
- **Connection Pooling & Shared Connections**: Intelligent connection management with reference counting
- All nodes using the same `nats-server` config now share a single NATS connection
- Automatic reference counting tracks which nodes are using the connection
- `registerConnectionUser()` and `unregisterConnectionUser()` methods for connection lifecycle management
- Automatic cleanup: Connection closes 30 seconds after last node unregisters
- `getPoolStats()` method provides connection pool statistics (active users, node IDs, status)
- Significantly reduces resource usage when multiple nodes use the same server
- Prevents connection overhead and improves overall performance
- Debug logging shows connection registration/unregistration events
### Changed
- **Specific Topic Publishing**: `uns-publish` now fully supports "Specific Topic" data format
- Publish to any custom NATS subject
- Automatically JSON-stringifies objects
- Converts other types to strings
- Works together with `uns-subscribe` specific_subject mode
- Removed "(not ready yet)" label from UI
- **Specific Subject Auto-Parse**: `uns-subscribe` with `specific_subject` now automatically attempts JSON parsing
- Tries to parse message as JSON object/array
- Falls back to raw string if JSON parsing fails
- Adds `_format` property to message: 'json' or 'string' for downstream processing
- Silent fallback - no errors logged for non-JSON messages
- Makes it easier to work with both JSON and plain text messages on the same subject
### Fixed
- **Message Logging**: Improved logging strategy to reduce noise in production
- All message content logging (uns_value, event, reply, request/response) now requires `debug: true` flag
- Prevents log flooding in high-frequency scenarios (100+ msg/sec)
- Debug flag can be enabled per node in the node configuration
- Fixed `uns-request` logging to properly show request and response payloads when debug enabled
- Changed from `node.log(string, object)` to `node.log(string)` pattern for proper payload display
- Errors and warnings are still always logged regardless of debug flag
- Connection status changes are still always logged
- **Connection State Check**: Added connection status validation before publishing/requesting data
- `nats-publish` now checks connection status before attempting to publish messages
- `nats-request` now checks connection status before sending requests
- `nats-health` now checks connection status before performing health checks
- Prevents data loss and failed operations during connection interruptions
- Returns clear error messages with reconnection status when not connected
- Error code: `NOT_CONNECTED` with detailed reconnect attempt information
### Changed
- **Reconnection Logic**: Infinite reconnection attempts with exponential backoff
- Set `reconnect: false`, `maxReconnectAttempts: 0`, and `waitOnFirstConnect: false` to fully disable NATS library's built-in reconnection
- Custom application-layer reconnection with exponential backoff is now the sole reconnection mechanism
- **Infinite retry attempts**: Server will continuously try to reconnect (no maximum limit)
- Exponential backoff delays: 5s → 10s → 20s → 40s → 60s (stays at 60s forever)
- Removed handling of NATS `reconnect` and `connect` events that would reset the attempt counter
- Removed failsafe mechanism in `emitStatusChange()` that was causing duplicate reconnection attempts
- Added explicit reconnection triggers in `disconnect` and `error` event handlers
- Provides predictable reconnection behavior with proper attempt counting (1 → 2 → 3 → 4 → ... → ∞)
- Fixes issue where `reconnectAttempts` counter would stay at 1 due to NATS library and failsafe mechanism resetting it
- Status display now shows attempt count without maximum (e.g., "disconnected (5)" instead of "disconnected (5/10)")
## [0.0.15] - 2025-10-24
### Changed
- **Code Modernization**: Migration from `var` to `const`/`let` for modern ES6+ code
- **NATS.js API Update**: Migration from Callback API to Async Iterator API for future-proof implementation
- **Logging System**: Complete migration from `console.log()` to Node-RED's `node.log()` for professional logging (33 locations)
- **Performance**: StringCodec is now created once per node (instead of per request/message)
- **Datatype Conversion**: Refactored if-else chain to switch statement for better performance and readability
### Added
- **Error Code Constants**: Replaced magic strings with `NATS_ERROR_CODES` constants
- **Debug Flag**: `nats-request` node now has debug flag in HTML configuration
- **Enhanced Error Handling**: JSON.parse now with specific try-catch and detailed error context
- **Security**: Username is now masked in debug logs (in addition to password)
- **NPM Ignore**: Added `.npmignore` file to reduce package size and exclude development files
- **Example Flow**: New comprehensive demonstration flow with all OctoCore nodes
### Fixed
- **Strict Mode**: Fixed typo from `'use-strict'` to `'use strict'`
- **JSON Parse Safety**: Added missing try-catch blocks in `uns_value` message processing
- **Null Safety**: Replaced `toString()` with `String()` for null-safe conversion
- **Error Handling**: Improved error reporting with fallbacks for undefined values
- **Variable Declaration**: `send_message` is now correctly declared with `let` (Strict Mode compliant)
### Removed
- **Dead Code**: Removed unused `checkMSG.js` file
- **Commented Code**: Removed commented out `checkMSG` import
- **Unused Functions**: Removed unused `setStatusGreen` and `setStatusYellow` functions from `nats-request.js`
- **Unused Node**: Removed unregistered `nats-performance.js` file
- **Old Examples**: Removed 14 outdated example files, replaced with single comprehensive flow
### Documentation
- **Internationalization**: All German comments and documentation translated to English
- Main node files: `nats-subscribe.js`, `nats-publish.js`, `nats-request.js`, `nats-server.js`, `nats-health.js`
- Documentation files: All `/docs` markdown files translated to English
- `timeout-handling.md`, `enhanced-status-display.md`, `credentials-setup.md`
- `manual-credentials.md`, `performance-analysis.md`, `makefile-usage.md`
- Ensures international accessibility and professional standards
- **Examples**: New comprehensive example flow (`examples/flows.json`) with documentation
- Replaces 14 separate example files with single, editable flow
- Includes examples for all node types: Publish, Subscribe, Request, Health
- Auto-loaded with Docker Compose for easy development
- Editable in Node-RED, changes persist to repository
### Security
- **Credential Masking**: Username is now masked in debug logs in addition to password
- **Safe Parsing**: JSON.parse protected with comprehensive error handling against crashes
- **Null-Safe**: String conversions are now null/undefined-safe
## [0.0.14] - 2025-09-10
### Changed
- Simplified node status: no uptime indicator when "connected"
- Consistent status text: publisher node shows just "connected"
- Updated node colors to `#57d297`
- Significantly reduced logging (errors/warnings only; optional debug)
- Debug options: added debug flag to `uns-publish` and `nats-server`
- Reconnect failsafe: automatically starts on `disconnected`
- Consistent status events: `addStatusListener` now emits an object initially
### Removed
- Removed stream nodes: `uns-stream-publisher`, `uns-stream-consumer`
### Fixed
- Fixed strict mode typo in `nats-publish.js`
- More robust validation: clear error when no server is selected
## [0.0.13] - 2025-08-22
### Added
- Jest test framework integration
- Prettier code formatting
- Modern ESLint configuration
- Comprehensive test coverage
- CHANGELOG.md for version tracking
- **NEW**: Enhanced Connection Health Node (`connection-health`) with advanced monitoring
- **NEW**: Enhanced timeout handling in `uns-request` node
- **NEW**: Improved error handling and validation
- **NEW**: Better connection monitoring and logging
- **NEW**: Makefile with comprehensive development commands
- **NEW**: Subscribe Node enhancements:
- Payload now contains only the value (not full message)
- Additional properties (datatype, id, name, timestamp) available as msg properties
- Configurable topic field selection (NATS Subject, Datapoint ID, Name, Data Type)
- Proper data type conversion for all UNS datatypes (1=Integer, 2=Float, 3=Boolean, 4=String, 5=JSON)
- **NEW**: UNS Event format support for subscribing to events published by publish node
- Event properties (id, type, startTime, endTime) available as msg properties
- **NEW**: Request Node enhancements:
- Improved status indicators (grey "ready", yellow "requesting", orange for errors)
- Better error handling with structured error messages in payload
- Support for 503 Service Unavailable errors
- Enhanced timeout handling with configurable options
- **NEW**: Connection Health Node features:
- Extended server information (cluster, JetStream, TLS)
- Connection metrics (latency, stability assessment)
- Performance monitoring (throughput, bandwidth usage)
- Connectivity tests (publish/subscribe, request/response validation)
- Configurable thresholds for alerting
- Health summary with overall status assessment
- **NEW**: NATS Stream Publisher Node (`uns-stream-publisher`) with WIP status
- Auto-creates JetStream streams if they don't exist
- Configurable stream settings (retention, storage, limits)
- Real-time stream status monitoring
- Support for headers and subject filtering
- **NEW**: NATS Stream Consumer Node (`uns-stream-consumer`) with WIP status
- Auto-creates JetStream consumers if they don't exist
- Manual acknowledgment functions (ack, nak, term, inProgress)
- Configurable batch processing
- Subject filtering and delivery policies
- **NEW**: Enhanced UNS Publish Node with improved datatype detection
- Automatic distinction between Integer (datatype 1) and Float (datatype 2)
- Comprehensive logging for debugging
- Better error handling and validation
### Changed
- Updated ESLint to version 8.x (latest stable)
- Updated all dev dependencies to latest versions
- Simplified Node.js engine requirements to >=18.0.0
- Fixed typo in package.json description
- Enhanced NATS server connection options with better timeout handling
- Improved error messages and validation across all nodes
- **CHANGED**: Subscribe Node payload structure - now only value in payload, rest as msg properties
- **CHANGED**: Request Node status behavior - improved visual feedback with color-coded status indicators
- **CHANGED**: Health Node renamed to "connection-health" in UI for better clarity
- **CHANGED**: Enhanced error handling across all nodes with structured error messages
- **CHANGED**: UNS Publish Node now correctly identifies Integer vs Float datatypes
- **CHANGED**: Added extensive logging to UNS Publish Node for better debugging
- **CHANGED**: Stream Publisher Node includes WIP status indicators
### Fixed
- Typo in package.json: "impelentation" → "implementation"
- **FIXED**: Server configuration validation to prevent null reference errors
- **FIXED**: Duplicate break statement in nats-subscribe.js
- **FIXED**: Better error handling for missing server configurations
- **FIXED**: Subscribe Node data type conversion for all UNS datatypes
- **FIXED**: Request Node status persistence issues - now properly resets after operations
- **FIXED**: Health Node latency measurement using correct NATS.js flush() method
- **FIXED**: Request Node 503 error handling with proper status indication
- **FIXED**: Subscribe Node topic field configuration persistence
- **FIXED**: UNS Publish Node datatype detection for numbers (Integer vs Float)
- **FIXED**: Stream Publisher Node header handling compatibility with NATS.js
- **FIXED**: Better error messages for JetStream availability issues
## [Unreleased]
### Added
- Future features and improvements
### Changed
- Future changes
### Fixed
- Future bug fixes
## [0.0.12] - 2024-01-XX
### Added
- Initial release of node-red-contrib-octocore
- NATS publish node
- NATS subscribe node
- NATS request node
- NATS server configuration node
### Features
- Support for UNS Value data format
- Support for RAW Value data format
- Support for Reply data format
- Support for Specific Topic data format
- Support for Event data format