UNPKG

node-red-contrib-octocore

Version:

OctoCore implementation for node-red

553 lines (471 loc) 30.7 kB
# 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