{"_id":"@andriy-zab/node-red-contrib-double-number","_rev":"3-c004f61b94ca5f149311309ace9c4a94","name":"@andriy-zab/node-red-contrib-double-number","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@andriy-zab/node-red-contrib-double-number","version":"0.1.0","keywords":["node-red","node-red-node","node-red-contrib","internal-mpn","math"],"author":{"name":"internal-mpn"},"license":"UNLICENSED","_id":"@andriy-zab/node-red-contrib-double-number@0.1.0","maintainers":[{"name":"andriy-zab","email":"andriy.zab@hotmail.com"}],"dist":{"shasum":"428eb7dbe19a8b9a4e73291a91f3289615609227","tarball":"https://registry.npmjs.org/@andriy-zab/node-red-contrib-double-number/-/node-red-contrib-double-number-0.1.0.tgz","fileCount":5,"integrity":"sha512-JHYwtoCctXxwiru4N0MIt71cDNV8D516nivvkXGvso/r08UluMDxe797d8xmL2h2w8llcd087iDZ+2ZjiYj+Yw==","signatures":[{"sig":"MEQCIBF4U8CB5qFZ1Zkic+T3c4eON4gdyKt2aEMe1rNGrMMYAiAOnn/WOMmT1UOXfE2RTtik/epfgx2kVRj3aeq5EVD7AA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5978},"main":"nodes/double-number.js","scripts":{"test":"mocha \"test/**/*.spec.js\"","check":"node --check nodes/double-number.js","lint:flow":"python3 ../../.agents/skills/node-red-node-dev/scripts/validate_flow.py examples/double-number.json"},"_npmUser":{"name":"andriy-zab","email":"andriy.zab@hotmail.com"},"node-red":{"nodes":{"internal-mpn-double-number":"nodes/double-number.js"},"version":">=3.1.0"},"_npmVersion":"11.11.0","description":"Internal MPN Node-RED node that multiplies the incoming value by two.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","node-red":"^4.1.0","node-red-node-test-helper":"^0.3.4"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-double-number_0.1.0_1776284217768_0.30442968934987347","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@andriy-zab/node-red-contrib-double-number","version":"0.2.0","keywords":["node-red","node-red-node","node-red-contrib","internal-mpn","math"],"author":{"name":"internal-mpn"},"license":"UNLICENSED","_id":"@andriy-zab/node-red-contrib-double-number@0.2.0","maintainers":[{"name":"andriy-zab","email":"andriy.zab@hotmail.com"}],"dist":{"shasum":"bac3dc71d63c8ec783e6cd98bfe67c9b7d65a4ba","tarball":"https://registry.npmjs.org/@andriy-zab/node-red-contrib-double-number/-/node-red-contrib-double-number-0.2.0.tgz","fileCount":5,"integrity":"sha512-huMw9RFb5QasRPZjC6Tje62y+RA4sMjRu8IZoBKXYafBDMVr5EXYNzo7d9CEbTv6pknqXuyj77z9CancyJmb2Q==","signatures":[{"sig":"MEUCIQCH4UDtlwcIeoyMZ8nRi3figRqRscuWqt1H75vjSbIAdgIgFvbmlkfJORmHmqh32kyukHTb8EtGtY+jmBpnuaeoVNc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7661},"main":"nodes/double-number.js","scripts":{"test":"mocha \"test/**/*.spec.js\"","check":"node --check nodes/double-number.js","lint:flow":"python3 ../../.agents/skills/node-red-node-dev/scripts/validate_flow.py examples/double-number.json"},"_npmUser":{"name":"andriy-zab","email":"andriy.zab@hotmail.com"},"node-red":{"nodes":{"internal-mpn-double-number":"nodes/double-number.js"},"version":">=3.1.0"},"_npmVersion":"11.11.0","description":"Internal MPN Node-RED node that multiplies the incoming value by two.","directories":{},"_nodeVersion":"24.14.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^11.0.0","node-red":"^4.1.0","node-red-node-test-helper":"^0.3.4"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-double-number_0.2.0_1776284501146_0.9079183263082844","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@andriy-zab/node-red-contrib-double-number","version":"0.3.0","description":"Internal MPN Node-RED nodes for numeric transforms and pseudo-hash generation.","license":"UNLICENSED","author":{"name":"internal-mpn"},"keywords":["node-red","node-red-node","node-red-contrib","internal-mpn","math"],"main":"nodes/double-number.js","scripts":{"test":"mocha \"test/**/*.spec.js\"","lint:flow":"python3 ../../.agents/skills/node-red-node-dev/scripts/validate_flow.py examples/double-number.json && python3 ../../.agents/skills/node-red-node-dev/scripts/validate_flow.py examples/pseudo-hash.json","check":"node --check nodes/double-number.js && node --check nodes/pseudo-hash.js"},"node-red":{"version":">=3.1.0","nodes":{"internal-mpn-double-number":"nodes/double-number.js","internal-mpn-pseudo-hash":"nodes/pseudo-hash.js"}},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"devDependencies":{"mocha":"^11.0.0","node-red":"^4.1.0","node-red-node-test-helper":"^0.3.4"},"_id":"@andriy-zab/node-red-contrib-double-number@0.3.0","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-UKIBy91m3T5CR7o/Lx0FclP7DVTGqIbq60VesPKWOvmcajjlj+L5+YKScYpTj+1ECQuuvAjmfw3XmwdSKV1K7Q==","shasum":"b5368da8ce1d7bec8a05562a80b3fe29a3a6b7f4","tarball":"https://registry.npmjs.org/@andriy-zab/node-red-contrib-double-number/-/node-red-contrib-double-number-0.3.0.tgz","fileCount":8,"unpackedSize":14935,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCQbJ682k/iubaEWjYW9mwJjWwL3UVPkm66J145dkPi5wIhAJZ7uSi5y1l63DaavkIoW5ctMx9RuEcmya/wqGKqWc55"}]},"_npmUser":{"name":"andriy-zab","email":"andriy.zab@hotmail.com"},"directories":{},"maintainers":[{"name":"andriy-zab","email":"andriy.zab@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-contrib-double-number_0.3.0_1776286725051_0.40957141455473445"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-15T20:16:57.667Z","modified":"2026-04-15T20:58:45.303Z","0.1.0":"2026-04-15T20:16:57.919Z","0.2.0":"2026-04-15T20:21:41.322Z","0.3.0":"2026-04-15T20:58:45.183Z"},"author":{"name":"internal-mpn"},"license":"UNLICENSED","keywords":["node-red","node-red-node","node-red-contrib","internal-mpn","math"],"description":"Internal MPN Node-RED nodes for numeric transforms and pseudo-hash generation.","maintainers":[{"name":"andriy-zab","email":"andriy.zab@hotmail.com"}],"readme":"# Internal MPN Node Set\n\nInternal Node-RED package that currently contains:\n\n- `internal-mpn-double-number`\n- `internal-mpn-pseudo-hash`\n\n## Node Type\n\n- `internal-mpn-double-number`\n- `internal-mpn-pseudo-hash`\n\n## Behavior\n\n- Reads `msg.payload`\n- Reads `Multiplier` from the node configuration\n- Accepts a finite number or a numeric string\n- Multiplies it by the configured multiplier\n- Writes the result back to `msg.payload`\n- Sends the message onward\n\nAccepted examples:\n\n- `21` with `Multiplier=2` -> `42`\n- `21` with `Multiplier=3` -> `63`\n- `-7` with `Multiplier=2` -> `-14`\n- `2.5` with `Multiplier=2` -> `5`\n- `\"21\"` with `Multiplier=2` -> `42`\n- `\"  -7  \"` with `Multiplier=2` -> `-14`\n\nRejected examples:\n\n- `\"abc\"`\n- `\"12px\"`\n- `\"\"`\n- `null`\n- `true`\n- invalid configured multipliers such as `\"abc\"`\n\nIf `msg.payload` is not a finite number or numeric string, the node raises an error and does not forward the message.\n\nIf `Multiplier` is not a finite number, the node raises an error and does not forward the message.\n\n## Pseudo Hash\n\nThe `internal-mpn-pseudo-hash` node computes a deterministic non-cryptographic uppercase HEX hash from `msg.payload`.\n\nBehavior:\n\n- converts `msg.payload` to a string\n- computes a lightweight pseudo-hash inspired by the validated JSONata prototype\n- writes the resulting hash string back to `msg.payload`\n\nSupported hash lengths:\n\n- `8`\n- `16`\n- `32`\n- `64`\n\nExamples:\n\n- `\"abc\"` with `Hash Length=8` -> `D72E2140`\n- `\"abc\"` with `Hash Length=16` -> `D72E214072DAE913`\n- `\"abc\"` with `Hash Length=32` -> `D72E214072DAE91369672A93FB4D8A8F`\n\nImportant:\n\n- this is not a cryptographic hash\n- use it for deterministic internal identifiers, not for security-sensitive workflows\n\n## Palette Category\n\nThe node is registered under the custom Node-RED palette category:\n\n- `internal-mpn`\n\n## Local Development\n\nInstall the published package from npm:\n\n```bash\ncd ~/.node-red\nnpm install @andriy-zab/node-red-contrib-double-number\n```\n\nThen restart Node-RED.\n\nFor local package development from this repository:\n\nFrom your Node-RED user directory:\n\n```bash\ncd ~/.node-red\nnpm install /Projects/test-project-1/plugins/node-red-contrib-internal-mpn-double-number\n```\n\nIf you prefer a symlink-style workflow during development:\n\n```bash\ncd ~/.node-red/node_modules/@internal-mpn\nln -s /Projects/test-project-1/plugins/node-red-contrib-internal-mpn-double-number node-red-contrib-double-number\n```\n\n## Example Flow\n\nExample flow:\n\n- [examples/double-number.json](./examples/double-number.json)\n- [examples/pseudo-hash.json](./examples/pseudo-hash.json)\n\n## Tests\n\nInstall dev dependencies and run:\n\n```bash\nnpm test\nnpm run lint:flow\n```\n","readmeFilename":"README.md"}