{"_id":"ocpp-ws-io","_rev":"36-7865f5cb91d3ae2aa0f7dfa2ddc1c5d1","name":"ocpp-ws-io","dist-tags":{"beta":"2.2.2-beta.1","latest":"2.3.2"},"versions":{"2.1.3":{"name":"ocpp-ws-io","version":"2.1.3","keywords":["ocpp","ocpp-j","ocpp-j","websocket","rpc","ocpp1.6","ocpp2.0.1","ocpp2.1","ev-charging","evse","csms","charge-point","charge-point-simulator","smart-charging","evse","csms","charge-point","charge-point-simulator","smart-charging","iot","pubsub","clustering","redis","redis","type-safe","typescript","nodejs","browser","nextjs","iso15118","electric-vehicle","charging-station","typescript","nodejs","browser","nextjs","iso15118","electric-vehicle","charging-station"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.3","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"a0168527731bebbb1b5ddfbbd59f761fa0a90755","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.3.tgz","fileCount":28,"integrity":"sha512-iIhtNUyIdLVKO0wkNIWBhXHZYCBoAgvfYTEwhJ2zqI2kIyV/CoIIxQ0yzCPyGxGnzlsBRx/3+R4AyLs1sTAH3Q==","signatures":[{"sig":"MEUCIDCaZPumu38bEdp0cWDR0sDK04rI3imQqunbhjLNPp31AiEAv0/vMBlCxOWbflj6SclUizbYZ5FAIP52PNQSqhb0NL8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8737051},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"83e2e5c6635da531c4eef29b70297764409c0e85","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP WebSocket RPC client & server with pub/sub, session management, and clustering support","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.17.1","voltlog-io":"^1.0.1","ajv-formats":"^3.0.1","@paralleldrive/cuid2":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.6","vitest":"^3.0.5","@types/ws":"^8.5.13","typescript":"^5.7.3","@types/node":"^22.13.4","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.3_1771879736343_0.43125684095368233","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"ocpp-ws-io","version":"2.1.4","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.4","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"7cdd2308cc6ec85bfc165024845279336ad18f5c","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.4.tgz","fileCount":29,"integrity":"sha512-3JCHpIAZUa+dbtgakt1IOzd0cSmqQheA67vJygx5r1q0AdZPmOjIZJf+hcyGriQLe0KaUdFxJjSnu0cr78e1iw==","signatures":[{"sig":"MEYCIQDYPrEG11sezZK0x4+Smc/GRHInRk8hV+csv11DOzlJSwIhAJWcCdV5XDoQe/ZNoKSYl4JUaye3I+5qKmOAEse7ERUV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8873116},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"c77add1bcd2c093dba898fef64e57db84a6e3df5","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.17.1","voltlog-io":"^1.0.1","ajv-formats":"^3.0.1","@paralleldrive/cuid2":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.6","vitest":"^3.0.5","@types/ws":"^8.5.13","typescript":"^5.7.3","@types/node":"^22.13.4","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.4_1771913343656_0.39030007113620657","host":"s3://npm-registry-packages-npm-production"}},"2.1.5":{"name":"ocpp-ws-io","version":"2.1.5","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.5","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"402191815701f224cb1b3c4f678b6a165dd5ac87","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.5.tgz","fileCount":29,"integrity":"sha512-NgoMv0IlSWefnKtP9eQQWczcY8eiOLMDTwYtTJWkNM5vmHRkoW/nmM8T2eU6XZbEjw3WBe3OFJ89YJHGZsd6EA==","signatures":[{"sig":"MEUCIB8uoFFx+8PNlRTWFLiAPbNVIgiRLTuFm0YxWC+z6wuVAiEArswkpsP7avLhU4mjXEpb2u94A8jzcxYrYoeJK97a6to=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8901099},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"22958d1678a8e6233cd5e9385f427215fa983f42","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.17.1","voltlog-io":"^1.0.1","ajv-formats":"^3.0.1","@paralleldrive/cuid2":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.6","vitest":"^3.0.5","@types/ws":"^8.5.13","typescript":"^5.7.3","@types/node":"^22.13.4","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.5_1771955329093_0.2723477771861431","host":"s3://npm-registry-packages-npm-production"}},"2.1.6":{"name":"ocpp-ws-io","version":"2.1.6","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.6","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"dd129965571dbf464ac1dd8a49846eb410806679","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.6.tgz","fileCount":29,"integrity":"sha512-EsH/AAp2TCP7P4X8qZGZ6oSbeBueQyt4FyQwMkESMosyrd9c5PLFyGzIPxJASGIJML++0Oz3R3ilqh/QzG7yRA==","signatures":[{"sig":"MEUCIDtbKJ05urqq/bFBbG9zgbdWOS3xogh7CVF+mNCjjriTAiEA/OGo5sar3rjiu8HDaZIa3ixooG5YA1yN5IZsIng+Yqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8901024},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"ca7eeee4c4cb1f2dea362effde083fd7f1cd2ecd","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.17.1","voltlog-io":"^1.0.1","ajv-formats":"^3.0.1","@paralleldrive/cuid2":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.6","vitest":"^3.0.5","@types/ws":"^8.5.13","typescript":"^5.7.3","@types/node":"^22.13.4","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.6_1771993964218_0.5007711559804264","host":"s3://npm-registry-packages-npm-production"}},"2.1.7":{"name":"ocpp-ws-io","version":"2.1.7","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.7","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"b2eb58dcf09996ad74935c1d4c7befc258282a66","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.7.tgz","fileCount":30,"integrity":"sha512-g5m56hZI90T+1hToFAQVSIPLDXqW8R+Jwqo7w2ySL8X9STa6o2UG264k4eou7dScIu43204o/xs9Q8F9yFCLuQ==","signatures":[{"sig":"MEYCIQC/TnxXhoFJHJPRceU1vbJUrqIiNPHOLneHVyxlVIrKygIhAKyENC+f+AwHude/C6dU2/3I1554/yXUnmt3f6Mvm9pr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8912642},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"5f12193032aa9abeeb51e6efb59521589782e916","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.17.1","voltlog-io":"^1.0.1","ajv-formats":"^3.0.1","@paralleldrive/cuid2":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.6","vitest":"^3.0.5","@types/ws":"^8.5.13","typescript":"^5.7.3","@types/node":"^22.13.4","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.7_1772094429294_0.5919910854642947","host":"s3://npm-registry-packages-npm-production"}},"2.1.8":{"name":"ocpp-ws-io","version":"2.1.8","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.8","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"1fa332a844d765d4f9a6a66aca2dc4b9ca1e4624","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.8.tgz","fileCount":37,"integrity":"sha512-HA+ZNs9JwbnnUUIhrr28V+oTkfndftNwo4uAmAzbWy+qHkmkmbBI/F+ujpL2mhmzprXtPfcF3AUbE/5eofS3sg==","signatures":[{"sig":"MEUCIQDVihmCrBhTFlpPl6Ax725syJ7dFrEv9HBVi6sNRw/TYgIgJpij3BP9rl+K5JTFIWx3tO9FZ9co+j2Bc03wJ0QzHS0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9266856},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"c1772c3ae0c4067d792d5aa79f61688d0febf4b2","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.17.1","voltlog-io":"^1.0.1","ajv-formats":"^3.0.1","@paralleldrive/cuid2":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.6","vitest":"^3.0.5","@types/ws":"^8.5.13","typescript":"^5.7.3","@types/node":"^22.13.4","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.8_1772173520484_0.6100243399901817","host":"s3://npm-registry-packages-npm-production"}},"2.1.9":{"name":"ocpp-ws-io","version":"2.1.9","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.9","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"95ca33642474d76d1ff916a06a1403a242989c62","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.9.tgz","fileCount":37,"integrity":"sha512-9MeMR9m6f4zaoowXYTxaItjOcedEbXF9va1V1vl3KsIyLB/UyUWkoz+kg1rmou5Q9MiFIK+Lb5HeoEaA83MUSw==","signatures":[{"sig":"MEUCIQDLUN9P9/j+tBHAoYU33lqAz/ud9InyPfIf7c6JRyznZQIgC1MINbIP0UPrr+5OoIvvnuLvAmd6IfMWowGWr0Pm0pY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9268815},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"6f06f70b168d9df0b02121141f1a09d59c018bcf","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.1","ajv-formats":"^3.0.1","@paralleldrive/cuid2":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.9_1772243984374_0.6317423569805054","host":"s3://npm-registry-packages-npm-production"}},"2.1.10":{"name":"ocpp-ws-io","version":"2.1.10","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.10","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"b837c39add4c9ceb2d511eb9cf9ce0c9afe46736","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.10.tgz","fileCount":27,"integrity":"sha512-hLAdqqJYuO9LYUFvlfA4IoSQotcZPVHhmd+hae82jKknyTgGLLQyFmurg+FdHvf2TbwrzakK7KqI6RbevWgCnA==","signatures":[{"sig":"MEUCIQDU54xgWOtU70NqZv2vNiaUwezKfDUPvFKxk2g1HaOWBwIgfDA4k2d7pQbZFIl9SS41yTSjZDg2PEBV9fdX9Z45Y2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2919022},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"91e08f7b2b032559ffce2d5092fd9a5a4d7e8940","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.3","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.10_1772356190959_0.1514882761680525","host":"s3://npm-registry-packages-npm-production"}},"2.1.11":{"name":"ocpp-ws-io","version":"2.1.11","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.11","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"fc3183de8a18a5aed80e6a589ce077c4105cee4b","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.11.tgz","fileCount":35,"integrity":"sha512-rMUzkfPOBR5TSyDFez3Eep4Jn9nUmVEjCfatZ5dVrzHcNbj6tjoEVcDwV8B4sYeSwsPbRELXsWqkpTzQxaOMBA==","signatures":[{"sig":"MEQCIFsQ8A76ewno9GczkVpvF4EA8t30Sf5juvVZY5blPY7LAiA4JP1DNgTHdkeYQxD0BV+UYOzt1CIyopDGCbC82wTR0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8206049},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"40dec467b0d04f161d85a1057313ab0b58ed58bf","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.4","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.11_1772369576334_0.4132578366354367","host":"s3://npm-registry-packages-npm-production"}},"2.1.12":{"name":"ocpp-ws-io","version":"2.1.12","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.12","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"a3a8b001a2ab73c7696e6214651574d42f11c5d3","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.12.tgz","fileCount":35,"integrity":"sha512-UzxygmqzVzZZp1lNYaJDhecZx2X/Kzi6TJIa3ilB13RYE8iywmwV3eHHoH6sb7hyKfbyVSjvTR3YD/OrGAy1sw==","signatures":[{"sig":"MEQCIACT7emn19vrfvkMCZryu4i/OK1DhM5FSY09NswkzcHtAiBbQtpDu2jcMqBpf6Zw8h0BNpcuogNB2+1ALLV95VMvwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8102354},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"8d970fcf5ad0f0121b25f09197b69b0a607275f8","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.4","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.12_1772485661688_0.93054380973706","host":"s3://npm-registry-packages-npm-production"}},"2.1.13":{"name":"ocpp-ws-io","version":"2.1.13","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","react-native"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.13","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"ead98e5fe4bb9d7d4ac6a5f31f4ad7f8de9d2f8c","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.13.tgz","fileCount":35,"integrity":"sha512-zCtrp7jnpAcrnaP61YCUdG/BvCogGGoweUpgz+0Bfug4HXI610BlRC9KsHciqP7G6sMJs02+jiR2DZT7sVukRg==","signatures":[{"sig":"MEQCIEzibWm01jHu8Y4oDDxBvOip6+lzfItUx3qwvaO4Z6g5AiAsZDr5WzN2x+ZPi0LWQhPNDa57okb7gCe9CUm+FDKtAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8102354},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"83fe6713bf803598af6dbb630691098045c6558b","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.6","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.13_1772487993275_0.716933600925785","host":"s3://npm-registry-packages-npm-production"}},"2.1.14":{"name":"ocpp-ws-io","version":"2.1.14","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","simulator","ocpp-simulator","nodejs-library","testing-cli","ocpp-testing","ocpp-implementation","ocpp-docs"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.14","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"e071ded210e87319b1cdeb8419291e5ac025c44d","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.14.tgz","fileCount":27,"integrity":"sha512-emgUNLft9QD4QKS9tux1npzmWkCkXcoF94YJ8J0bl3SRjcWUxwTnlkKLK2eQjua69Awsh3LNYmridNnoih5huA==","signatures":[{"sig":"MEUCIQCSUaxQTJu4w8I1Jv6ClDpgjxxprfXtAB51Glm4AR/UGgIgG2z58iLS1Rbn7Uzmb3b7kv+UIr2y3kdwwg29Vo1SRIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2815451},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"646316c6d176aab7842b6c17d4e880df5038ad5e","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.14_1772994068824_0.13233942311580305","host":"s3://npm-registry-packages-npm-production"}},"2.1.15":{"name":"ocpp-ws-io","version":"2.1.15","keywords":["ocpp","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.1","websocket","rpc","json-rpc","ev-charging","evse","csms","cpo","emsp","charge-point","charging-station","charge-point-simulator","smart-charging","electric-vehicle","e-mobility","iso15118","type-safe","typescript","nodejs","redis","clustering","pubsub","browser","simulator","ocpp-simulator","nodejs-library","testing-cli","ocpp-testing","ocpp-implementation","ocpp-docs"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.1.15","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"b1bd5fe0cb3799da2a0bf912dc7f622c0edcf16f","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.1.15.tgz","fileCount":27,"integrity":"sha512-Aj60BpF/OhlDVX6HQw+mWVZpSuIeVz+U4tUvdHqhzkPSNiknzJ3AIIlCVP69wL4qMf4eO/af79eO8VeDgLVpxQ==","signatures":[{"sig":"MEQCIBJEu9sCM9IfeFQz8iSzB4n8bt+DTu3vgGYgepirO9P7AiAQY/F0wMNyw9aoB9nSvkMGnRisKGzb7IPqqSDt7hfwFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.1.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2815006},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"94cd5d6e0057eb23475a03e71244b27a195a1332","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe OCPP 1.6 & 2.0.1 WebSocket RPC client & server. Build EV charging CSMS platforms with Redis clustering, strict validation, and DDoS protection.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.1.15_1773251815727_0.19821386812993258","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"ocpp-ws-io","version":"2.2.0","keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.2.0","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"af53f81acecf8f130feccbf8ca03c7e0b64fed9e","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.2.0.tgz","fileCount":27,"integrity":"sha512-OOlazDJVefeS/ZzRVvPQurWNRNfQ9tq7P+SM7tD2TD7BWiw7qr56FM0Q9QqIQki85kTGeT7exKqw48W+oIrXLA==","signatures":[{"sig":"MEQCIHm3NY50mn9whgiu4vjfUFq1iuUDoT9l6GmD0ndxUebDAiBS3nRwk+G/QzqItsPEXeV3mPQ4XPSqQjU7zBObmQsM1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2822370},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"f6809284af9028c45f76001c8d816caa0805e651","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.2.0_1774648423924_0.1181987407085543","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"ocpp-ws-io","version":"2.2.1","keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.2.1","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"289221b24bfc584e9fbf887aeb90a52e30a28817","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.2.1.tgz","fileCount":27,"integrity":"sha512-6Er6XiOINUJBPwA16yOjV9xDBEObOPidou8bdVbmdigXzOnN1EJ4IHnLhbHEJ1z0X9yqqrM1JquUOZoFvRichQ==","signatures":[{"sig":"MEUCIQCDpBubMV0wBEhrMqAVRd0Cj9e1goM7a4gIOqZSRIpzaAIgQZGt5jDBwhwSYdFzHrSMT+2Glr0mxh1JYf/aApEL6js=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2955204},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"2bd8243ba6472ad13ae519f68c1f47e8fcaa4cc0","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"bun run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^3.2.4","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","ioredis-mock":"^8.13.1","@vitest/coverage-v8":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.2.1_1775923592003_0.7126241902205672","host":"s3://npm-registry-packages-npm-production"}},"2.2.2-beta.1":{"name":"ocpp-ws-io","version":"2.2.2-beta.1","keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.2.2-beta.1","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"614aab1d01178fa7658675f1923d5d34d199796f","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.2.2-beta.1.tgz","fileCount":43,"integrity":"sha512-g+mixw95Q53VSNjv7UKhMEblGN6jceWGrQze8PWyQql0+1tzxeI6dtxA5uXxszpoLG1mdSnpKvbSJ08vh/W/mQ==","signatures":[{"sig":"MEUCIQDQgXKgjO2uZcbaSPAxtljBoK76lEfVJJuMMbR4x1dN/AIgFzePZuqDs2IHwuHQRv7RigJjwhSm63zh+EUnmnp6Yog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.2.2-beta.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4572352},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.mjs","require":"./dist/hono.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./nestjs":{"types":"./dist/nestjs.d.ts","import":"./dist/nestjs.mjs","require":"./dist/nestjs.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.js"},"./fastify":{"types":"./dist/fastify.d.ts","import":"./dist/fastify.mjs","require":"./dist/fastify.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"913227a0296a585e335c619276d07c556918c1e8","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"bun run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"hono":"^4.12.15","tsup":"^8.5.1","vitest":"^3.2.4","express":"^5.2.1","fastify":"^5.2.1","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","@nestjs/core":"^11.0.0","ioredis-mock":"^8.13.1","@nestjs/common":"^11.0.0","fastify-plugin":"^5.0.1","@nestjs/testing":"^11.1.19","reflect-metadata":"^0.2.2","@hono/node-server":"^2.0.0","@vitest/coverage-v8":"^3.2.4"},"peerDependencies":{"hono":"^4.0.0","express":"^4.18.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","fastify-plugin":"^4.0.0 || ^5.0.0","reflect-metadata":"^0.2.2"},"peerDependenciesMeta":{"hono":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"fastify-plugin":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.2.2-beta.1_1777109261011_0.16267224886811782","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"ocpp-ws-io","version":"2.2.2","keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.2.2","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"80dda01043494fa2e17e9ec56b7fd73977e08c7a","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.2.2.tgz","fileCount":43,"integrity":"sha512-3PcD9dhbCtRk705XepMRveHXxiiMivEIulmohMT+ruZHaso6T3O4ZAPCarLD+EqeehMXCtTWGvK1qGt0TGZI/Q==","signatures":[{"sig":"MEUCIQC01UXOiFcTR2Mh4pO8pdx0DbbxWmU7BmixboukNd64rAIgPd/cEd8ti/59F1CumDFmx0kiOqLzEFe/HheTOow7nNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4572345},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.mjs","require":"./dist/hono.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./nestjs":{"types":"./dist/nestjs.d.ts","import":"./dist/nestjs.mjs","require":"./dist/nestjs.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.js"},"./fastify":{"types":"./dist/fastify.d.ts","import":"./dist/fastify.mjs","require":"./dist/fastify.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"1a3d81bd1c5bef327ac5e4fe1274a441946af7ba","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"bun run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.12.15","tsup":"^8.5.1","vitest":"^3.2.4","express":"^5.2.1","fastify":"^5.2.1","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","@nestjs/core":"^11.0.0","ioredis-mock":"^8.13.1","@nestjs/common":"^11.0.0","fastify-plugin":"^5.0.1","@nestjs/testing":"^11.1.19","reflect-metadata":"^0.2.2","@hono/node-server":"^2.0.0","@vitest/coverage-v8":"^3.2.4"},"peerDependencies":{"hono":"^4.0.0","express":"^4.18.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","fastify-plugin":"^4.0.0 || ^5.0.0","reflect-metadata":"^0.2.2"},"peerDependenciesMeta":{"hono":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"fastify-plugin":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.2.2_1778160531777_0.8453631362511482","host":"s3://npm-registry-packages-npm-production"}},"2.2.4":{"name":"ocpp-ws-io","version":"2.2.4","keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.2.4","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"cb924c2d5c7849dad8b7eb5bd2214bc6921b2378","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.2.4.tgz","fileCount":43,"integrity":"sha512-ZHgeCDiCiFqGcY5N/pIpbbN9YixcPUBvH26oF9fmFL/U1DR65DOsJZjHVDoANtvDYel2oSlntPsozrFWX2AFnQ==","signatures":[{"sig":"MEQCIEjCwzs6ndqJ3VCYbSb+DxYEJlGoVN5Tfv71DbQ8CQ7PAiAj7SI4lz5qzFp8/1sBaCjv9bCWtu6ug+6vjJvocZP+ig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4584803},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.mjs","require":"./dist/hono.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./nestjs":{"types":"./dist/nestjs.d.ts","import":"./dist/nestjs.mjs","require":"./dist/nestjs.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.js"},"./fastify":{"types":"./dist/fastify.d.ts","import":"./dist/fastify.mjs","require":"./dist/fastify.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"3a79af284ad28ffdd2e04e32d9008521300eaaba","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"bun run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.12.15","tsup":"^8.5.1","vitest":"^4.1.8","express":"^5.2.1","fastify":"^5.2.1","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","@nestjs/core":"^11.0.0","ioredis-mock":"^8.13.1","@nestjs/common":"^11.0.0","fastify-plugin":"^5.0.1","@nestjs/testing":"^11.1.19","reflect-metadata":"^0.2.2","@hono/node-server":"^2.0.0","@vitest/coverage-v8":"^3.2.4"},"peerDependencies":{"hono":"^4.0.0","express":"^4.18.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","fastify-plugin":"^4.0.0 || ^5.0.0","reflect-metadata":"^0.2.2"},"peerDependenciesMeta":{"hono":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"fastify-plugin":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.2.4_1780632099163_0.43079263557041836","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"ocpp-ws-io","version":"2.3.0","keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.3.0","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"32a21db05c20864d1eb2e66ee32fe7eb333dceae","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.3.0.tgz","fileCount":44,"integrity":"sha512-0tD/I33wUEY0pTERiJq0uFvLuzctXAEA5kpmsw9j/1+gLMdLt21cDEtV3o4zEMf5b+h7cORflogsbAoiuUmqAA==","signatures":[{"sig":"MEQCIBysh4PTxlbcQhksydGG5ZgiV6yjiKyjRVhHX8F0AdLRAiBRtKoZJoTLkZU1ceNbyMAzjwubuBwwvEW3wi1BLne/kw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4629540},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.mjs","require":"./dist/hono.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./nestjs":{"types":"./dist/nestjs.d.ts","import":"./dist/nestjs.mjs","require":"./dist/nestjs.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.js"},"./fastify":{"types":"./dist/fastify.d.ts","import":"./dist/fastify.mjs","require":"./dist/fastify.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"6b4c1154334eebe78db98b36cf83effc8171aa7c","scripts":{"test":"vitest run","build":"tsup","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"bun run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.12.15","tsup":"^8.5.1","vitest":"^4.1.8","express":"^5.2.1","fastify":"^5.2.1","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","@nestjs/core":"^11.0.0","ioredis-mock":"^8.13.1","@nestjs/common":"^11.0.0","fastify-plugin":"^5.0.1","@nestjs/testing":"^11.1.19","reflect-metadata":"^0.2.2","@hono/node-server":"^2.0.0","@vitest/coverage-v8":"^3.2.4"},"peerDependencies":{"hono":"^4.0.0","express":"^4.18.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","fastify-plugin":"^4.0.0 || ^5.0.0","reflect-metadata":"^0.2.2"},"peerDependenciesMeta":{"hono":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"fastify-plugin":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.3.0_1781155823870_0.9503243808383057","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"ocpp-ws-io","version":"2.3.1","keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","_id":"ocpp-ws-io@2.3.1","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"dist":{"shasum":"3fc954af1da14d2bcf019a77879183c72cd15833","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.3.1.tgz","fileCount":46,"integrity":"sha512-GcgDfKZ7iPh9DldsGT4DdDPsg4jya4dNeE5zqTlCO8EIEIOo8rHR4/OgJ/ItDVoNYxgz4pm67rnzwfZtWv5ZvQ==","signatures":[{"sig":"MEUCIQDopSkLiVFChMAIizHwrQ0cImdeVrtMdQvDNKDppgHeowIgZVDffxLVeJm+l91iqdlcMfQ+hqVzf9b2EcU5j/Hgr/Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4971182},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.mjs","require":"./dist/hono.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./nestjs":{"types":"./dist/nestjs.d.ts","import":"./dist/nestjs.mjs","require":"./dist/nestjs.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.js"},"./fastify":{"types":"./dist/fastify.d.ts","import":"./dist/fastify.mjs","require":"./dist/fastify.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"}},"gitHead":"a168598e1daa4c4d494d787be9d28721ca01e850","scripts":{"test":"vitest run","build":"npm run clean && tsup && node scripts/verify-dist.js","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","generate":"node scripts/generate-types.js","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"bun run build"},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"repository":{"url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git","type":"git"},"_npmVersion":"10.8.2","description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.19.0","ajv":"^8.18.0","voltlog-io":"^1.0.8","ajv-formats":"^3.0.1"},"typesVersions":{"*":{"hono":["dist/hono.d.ts"],"logger":["dist/logger.d.ts"],"nestjs":["dist/nestjs.d.ts"],"browser":["dist/browser.d.ts"],"express":["dist/express.d.ts"],"fastify":["dist/fastify.d.ts"],"plugins":["dist/plugins.d.ts"],"adapters/redis":["dist/adapters/redis.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"hono":"^4.12.15","tsup":"^8.5.1","vitest":"^4.1.8","express":"^5.2.1","fastify":"^5.2.1","@types/ws":"^8.18.1","typescript":"^5.9.3","@types/node":"^22.19.11","@nestjs/core":"^11.0.0","ioredis-mock":"^8.13.1","@nestjs/common":"^11.0.0","fastify-plugin":"^5.0.1","@nestjs/testing":"^11.1.19","reflect-metadata":"^0.2.2","@hono/node-server":"^2.0.0","@vitest/coverage-v8":"^3.2.4"},"peerDependencies":{"hono":"^4.0.0","express":"^4.18.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/common":"^10.0.0 || ^11.0.0","fastify-plugin":"^4.0.0 || ^5.0.0","reflect-metadata":"^0.2.2"},"peerDependenciesMeta":{"hono":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"@nestjs/core":{"optional":true},"@nestjs/common":{"optional":true},"fastify-plugin":{"optional":true},"reflect-metadata":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/ocpp-ws-io_2.3.1_1788627275945_0.7658823865733597","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"ocpp-ws-io","version":"2.3.2","description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","repository":{"type":"git","url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git"},"main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","typesVersions":{"*":{"adapters/redis":["dist/adapters/redis.d.ts"],"browser":["dist/browser.d.ts"],"logger":["dist/logger.d.ts"],"plugins":["dist/plugins.d.ts"],"express":["dist/express.d.ts"],"nestjs":["dist/nestjs.d.ts"],"fastify":["dist/fastify.d.ts"],"hono":["dist/hono.d.ts"]}},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./adapters/redis":{"types":"./dist/adapters/redis.d.ts","import":"./dist/adapters/redis.mjs","require":"./dist/adapters/redis.js"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.mjs","require":"./dist/logger.js"},"./plugins":{"types":"./dist/plugins.d.ts","import":"./dist/plugins.mjs","require":"./dist/plugins.js"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.js"},"./nestjs":{"types":"./dist/nestjs.d.ts","import":"./dist/nestjs.mjs","require":"./dist/nestjs.js"},"./fastify":{"types":"./dist/fastify.d.ts","import":"./dist/fastify.mjs","require":"./dist/fastify.js"},"./hono":{"types":"./dist/hono.d.ts","import":"./dist/hono.mjs","require":"./dist/hono.js"}},"scripts":{"clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","build":"npm run clean && tsup && node scripts/verify-dist.js","generate":"node scripts/generate-types.js","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"bun run build"},"engines":{"node":">=18.0.0"},"keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"homepage":"https://ocpp-ws-io.rohittiwari.me","bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"license":"MIT","peerDependencies":{"@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","express":"^4.18.0 || ^5.0.0","fastify":"^4.0.0 || ^5.0.0","fastify-plugin":"^4.0.0 || ^5.0.0","hono":"^4.0.0","reflect-metadata":"^0.2.2"},"peerDependenciesMeta":{"@nestjs/common":{"optional":true},"@nestjs/core":{"optional":true},"express":{"optional":true},"fastify":{"optional":true},"fastify-plugin":{"optional":true},"hono":{"optional":true},"reflect-metadata":{"optional":true}},"dependencies":{"ajv":"^8.18.0","ajv-formats":"^3.0.1","voltlog-io":"^1.0.8","ws":"^8.19.0"},"devDependencies":{"@hono/node-server":"^2.0.0","@nestjs/common":"^11.0.0","@nestjs/core":"^11.0.0","@nestjs/testing":"^11.1.19","@types/node":"^22.19.11","@types/ws":"^8.18.1","@vitest/coverage-v8":"^3.2.4","express":"^5.2.1","fastify":"^5.2.1","fastify-plugin":"^5.0.1","hono":"^4.12.15","ioredis-mock":"^8.13.1","reflect-metadata":"^0.2.2","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^4.1.8"},"_id":"ocpp-ws-io@2.3.2","gitHead":"2755eb88d55f5f07254671e09fbe1dbeac040e21","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-1IVkPK+zkGwPBnc+vZNqaURVwkFTlD8yvtpoTh/LC/8rYnJGzg1YgqMJ+kNRK3nFvRQmuaJYOiL5Ajdpl8bg+w==","shasum":"e68e0adfb3687e65c88bd841edd4351dca7810a9","tarball":"https://registry.npmjs.org/ocpp-ws-io/-/ocpp-ws-io-2.3.2.tgz","fileCount":46,"unpackedSize":5150193,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/ocpp-ws-io@2.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDzPnNLd0/ML1Rq8k+0Mkcmdr5E35bF8HZUM56VlYd5KQIhAJ9H2M9NBmDnrz+zYRDRCQlif3V1F/Ia5+DZOccqHHaB"}]},"_npmUser":{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"},"directories":{},"maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ocpp-ws-io_2.3.2_1788843250942_0.3610731339154527"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-23T20:48:56.248Z","modified":"2026-09-08T04:54:11.507Z","1.0.0-alpha":"2026-02-17T04:25:45.632Z","1.0.0-beta.1":"2026-02-17T08:09:20.724Z","1.0.0":"2026-02-17T08:52:21.164Z","1.0.1":"2026-02-18T18:51:42.834Z","1.0.2":"2026-02-18T19:06:38.400Z","1.0.3":"2026-02-19T00:25:36.989Z","2.0.0":"2026-02-19T15:17:23.295Z","2.0.1":"2026-02-19T16:53:16.791Z","2.0.2":"2026-02-20T07:40:08.045Z","2.1.0":"2026-02-21T01:16:23.201Z","2.1.1":"2026-02-21T13:31:42.568Z","2.1.2":"2026-02-22T11:28:29.011Z","2.1.3":"2026-02-23T20:48:56.562Z","2.1.4":"2026-02-24T06:09:03.890Z","2.1.5":"2026-02-24T17:48:49.305Z","2.1.6":"2026-02-25T04:32:44.420Z","2.1.7":"2026-02-26T08:27:09.524Z","2.1.8":"2026-02-27T06:25:20.661Z","2.1.9":"2026-02-28T01:59:44.645Z","2.1.10":"2026-03-01T09:09:51.155Z","2.1.11":"2026-03-01T12:52:56.555Z","2.1.12":"2026-03-02T21:07:41.874Z","2.1.13":"2026-03-02T21:46:33.521Z","2.1.14":"2026-03-08T18:21:09.049Z","2.1.15":"2026-03-11T17:56:55.994Z","2.2.0":"2026-03-27T21:53:44.159Z","2.2.1":"2026-04-11T16:06:32.204Z","2.2.2-beta.1":"2026-04-25T09:27:41.187Z","2.2.2":"2026-05-07T13:28:51.994Z","2.2.4":"2026-06-05T04:01:39.350Z","2.3.0":"2026-06-11T05:30:24.062Z","2.3.1":"2026-09-05T16:54:36.115Z","2.3.2":"2026-09-08T04:54:11.202Z"},"bugs":{"url":"https://github.com/rohittiwari-dev/ocpp-ws-io/issues"},"author":{"name":"Rohit Tiwari","email":"rohit@rohittiwari.me"},"license":"MIT","homepage":"https://ocpp-ws-io.rohittiwari.me","keywords":["ocpp","ocpp-rpc","ocpp-j","ocpp1.6","ocpp1.6j","ocpp2.0.1","ocpp2.0.1j","ocpp2.1","websocket","ocpp-websocket","rpc","websocket-rpc","json-rpc","ocpp-client","ocpp-server","charge-point","charging-station","ev-charging","evse","csms","cpo","emsp","wamp","rpc-server","rpc-client","type-safe","typescript","node","nodejs","redis","redis-pubsub","clustering","browser","simulator","ocpp-simulator","testing-cli","ocpp-testing","ocpp-implementation","ocpp-protocol"],"repository":{"type":"git","url":"git+https://github.com/rohittiwari-dev/ocpp-ws-io.git"},"description":"OCPP RPC WebSocket client and server for OCPP 1.6J, 2.0.1, and 2.1. Type-safe TypeScript toolkit for EV charging, CSMS backends, Redis scaling, and protocol validation.","maintainers":[{"name":"rohit-tiwari","email":"tigertiwari1023@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/rohittiwari-dev/ocpp-ws-io/main/assets/banner.svg\" alt=\"ocpp-ws-io - OCPP RPC WebSocket Client and Server\" width=\"420\" />\n</p>\n\n# 🔌 OCPP RPC WebSocket Client & Server Library\n\nThe **production-ready OCPP RPC implementation** for building type-safe EV charging platforms, CSMS backends, charge points, and simulators. Supports OCPP 1.6J, 2.0.1, and 2.1 with full protocol compliance, all security profiles, Redis clustering, strict JSON schema validation, and structured logging.\n\n> **Built with TypeScript** for EV charging, CSMS, CPO/EMSP platforms. Lightweight WebSocket RPC framework (runtime deps: ws, ajv, ajv-formats, voltlog-io) supporting OCPP versions 1.6, 2.0.1, and 2.1 with optional JSON schema validation, bidirectional messaging, all security profiles (0–3), Redis pub/sub clustering, and structured logging powered by [voltlog-io](https://ocpp-ws-io.rohittiwari.me/docs/voltlog-io).\n\n[![npm version](https://img.shields.io/npm/v/ocpp-ws-io.svg)](https://www.npmjs.com/package/ocpp-ws-io)\n[![License](https://img.shields.io/npm/l/ocpp-ws-io.svg)](https://github.com/rohittiwari-dev/ocpp-ws-io/blob/main/LICENSE)\n\n## 📚 Full Documentation & API Reference\n\nFor full API reference, advanced usage, and guides, visit the **[Official Documentation](https://ocpp-ws-io.rohittiwari.me)**.\n\n## ✨ Key Features for OCPP RPC WebSocket Development\n\nThe library provides enterprise-grade features for building OCPP-compliant EV charging platforms:\n\n- ⚡ **Full OCPP-J RPC Support** — Complete JSON-RPC 2.0 OCPP message framing for 1.6J, 2.0.1, and 2.1\n- 🔒 **All Security Profiles** — Supports Plain WS, Basic Authentication, TLS/SSL, and mutual TLS (mTLS)\n- 🎯 **Type-Safe TypeScript** — Auto-generated, fully-typed interfaces for all OCPP versions and methods\n- 📐 **Strict Schema Validation** — Optional JSON schema validation with AJV for data integrity\n- 📡 **Redis Clustering & Pub/Sub** — Built-in Redis adapter for distributed CSMS deployments\n- 🌐 **Browser-Ready Client** — Zero-dependency WebSocket client for EV charging simulators\n- ⚡ **CLI Toolkit** — `ocpp-ws-cli` for type generation, load testing, fuzzing, and virtual charge point simulation\n- 🛡️ **DDoS & Rate Limiting** — Token bucket rate limiting and adaptive throttling for charging station protection\n- 🧩 **19 Built-in Plugins** — PII redaction, circuit breakers, deduplication, Kafka streaming, OpenTelemetry, and more\n\n## 🧩 Plugin Ecosystem\n\n19 built-in plugins organized into a **4-level power hierarchy**. Register from highest to lowest:\n\n```\nLevel 4 — Middleware          pii-redactor · schema-versioning\nLevel 3 — Interceptor         message-dedup · replay-buffer\nLevel 2 — Lifecycle Controller connection-guard · anomaly · circuit-breaker\nLevel 1 — Passive Hook         kafka · webhook · metrics · otel · session-log · heartbeat · rate-limit-notifier\n```\n\n```typescript\nimport {\n  piiRedactorPlugin, messageDedupPlugin,\n  circuitBreakerPlugin, metricsPlugin, otelPlugin,\n} from \"ocpp-ws-io/plugins\";\n\nserver.plugin(\n  piiRedactorPlugin({ sensitiveKeys: [\"password\", \"authorizationKey\"] }), // L4: transform payloads\n  messageDedupPlugin({ redis }),  // L3: drop duplicates\n  circuitBreakerPlugin(),         // L2: protect against flapping stations\n  metricsPlugin(),                // L1: observe\n  otelPlugin(),                   // L1: trace\n);\n```\n\n> See the full [Plugin Documentation](https://ocpp-ws-io.rohittiwari.me/docs/ocpp-ws-io/plugins) for options, examples, and the `redisStyle` guide for Redis client compatibility.\n\n## 📦 Installation\n\n```bash\nnpm install ocpp-ws-io\n```\n\n## 🚀 Quick Start: OCPP RPC Client & Server Examples\n\nGet up and running with OCPP WebSocket RPC in minutes. Choose your role: EV charging station (client) or CSMS backend (server).\n\n### OCPP RPC Client: Charge Point / Charging Station Simulator\n\n```typescript\nimport { OCPPClient } from \"ocpp-ws-io\";\n\nconst client = new OCPPClient({\n endpoint: \"ws://localhost:3000\",\n identity: \"CP001\",\n protocols: [\"ocpp1.6\"],\n});\n\n// Register inbound handlers. Registering before connect() is clearest, but a\n// CALL arriving during startup waits briefly for its handler rather than being\n// rejected — see ClientOptions.handlerGraceMs.\nclient.handle(\"ocpp1.6\", \"Reset\", async ({ params }) => {\n console.log(\"Reset requested:\", params.type);\n return { status: \"Accepted\" };\n});\n\nawait client.connect();\n\n// Fully typed call\nconst response = await client.call(\"ocpp1.6\", \"BootNotification\", {\n chargePointVendor: \"VendorX\",\n chargePointModel: \"ModelY\",\n});\n\nconsole.log(\"Status:\", response.status);\n```\n\n### OCPP RPC Server: Central System / CSMS Backend\n\n```typescript\nimport { OCPPServer } from \"ocpp-ws-io\";\n\nconst server = new OCPPServer({\n protocols: [\"ocpp1.6\", \"ocpp2.0.1\"],\n logging: { prettify: true, exchangeLog: true, level: \"info\" },\n});\n\n// Optional: Add authentication ringfence\nserver.auth((ctx) => {\n console.log(\n  `Connection from ${ctx.handshake.identity} at path ${ctx.handshake.pathname}`,\n );\n ctx.accept({ session: { authorized: true } });\n});\n\nserver.on(\"client\", (client) => {\n console.log(`${client.identity} connected`);\n\n // Version-aware handler\n client.handle(\"ocpp1.6\", \"BootNotification\", ({ params }) => {\n  console.log(\"Boot from:\", params.chargePointVendor);\n  return {\n   status: \"Accepted\",\n   currentTime: new Date().toISOString(),\n   interval: 300,\n  };\n });\n});\n\nawait server.listen(3000);\n```\n\n## ⚙️ OCPP RPC Configuration & Options\n\nConfigure your OCPP WebSocket RPC client and server with extensive options for protocol negotiation, security, validation, and performance.\n\n### OCPP WebSocket RPC Client Configuration\n\n| Option              | Type                  | Default    | Description                             |\n| ------------------- | --------------------- | ---------- | --------------------------------------- |\n| `identity`          | `string`              | _required_ | Charging station ID                     |\n| `endpoint`          | `string`              | _required_ | WebSocket URL (`ws://` or `wss://`)     |\n| `protocols`         | `OCPPProtocol[]`      | `[]`       | OCPP subprotocols to negotiate          |\n| `securityProfile`   | `SecurityProfile`     | `NONE`     | Security profile (0–3)                  |\n| `password`          | `string \\| Buffer`    | —          | Password for Basic Auth (Profile 1 & 2) |\n| `tls`               | `TLSOptions`          | —          | TLS/SSL options (Profile 2 & 3)         |\n| `reconnect`         | `boolean`             | `true`     | Auto-reconnect on disconnect            |\n| `pingIntervalMs`    | `number`              | `30000`    | Includes ±25% randomized jitter         |\n| `strictMode`        | `boolean \\| string[]` | `false`    | Enable/restrict schema validation       |\n| `strictModeMethods` | `string[]`            | —          | Restrict validation to specific methods |\n\n**Call Options**\nWhen invoking `client.call()` you can safely decouple dynamically generated message IDs and pass your own deterministic keys:\n\n```typescript\nawait client.call(\"ocpp1.6\", \"BootNotification\", { ... }, { idempotencyKey: \"unique-boot-123\" });\n```\n\n### OCPP WebSocket RPC Server Configuration\n\n| Option               | Type               | Default   | Description                                |\n| -------------------- | ------------------ | --------- | ------------------------------------------ |\n| `protocols`          | `OCPPProtocol[]`   | `[]`      | Accepted OCPP subprotocols                 |\n| `securityProfile`    | `SecurityProfile`  | `NONE`    | Security profile for auto-created servers  |\n| `handshakeTimeoutMs` | `number`           | `30000`   | Timeout for WebSocket handshake (ms)       |\n| `tls`                | `TLSOptions`       | —         | TLS options (Profile 2 & 3)                |\n| `logging`            | `LoggingConfig`    | `true`    | Configure built-in logging                 |\n| `sessionTtlMs`       | `number`           | `7200000` | Garbage collection inactivity timeout (ms) |\n| `rateLimit`          | `RateLimitOptions` | —         | Token bucket socket & method rate-limiter  |\n| `healthEndpoint`     | `boolean`          | `false`   | Expose HTTP `/health` and `/metrics` APIs  |\n\n## � Message Observability & Event Handling (v2.2+)\n\nUnified message event API with direction tracking and rich contextual metadata for complete visibility into OCPP message flow.\n\n### Observe All Messages with Direction & Latency\n\n```typescript\nconst client = new OCPPClient({ ... });\n\n// Single unified \"message\" event with direction, context, and metadata\nclient.on(\"message\", ({ message, direction, ctx }) => {\n  console.log({\n    direction,      // \"IN\" (from server) | \"OUT\" (to server)\n    method: ctx.method,       // \"BootNotification\", \"MeterValues\", etc.\n    type: ctx.type,           // \"incoming_call\", \"outgoing_call\", etc.\n    messageId: ctx.messageId, // Unique message ID\n    timestamp: ctx.timestamp, // ISO 8601 timestamp\n    latencyMs: ctx.latencyMs, // Response latency (if available)\n    protocol: ctx.protocol,   // \"ocpp1.6\", \"ocpp2.0.1\", etc.\n  });\n});\n\n// Server-side observation (for each connected client)\nconst server = new OCPPServer({ ... });\nserver.on(\"client\", (client) => {\n  client.on(\"message\", ({ direction, ctx }) => {\n    console.log(`[${client.identity}] ${direction} ${ctx.method} (${ctx.latencyMs}ms)`);\n  });\n});\n```\n\n### Message Event Payload Structure\n\n```typescript\ninterface MessageEventPayload {\n message: OCPPMessage; // Original OCPP message tuple\n direction: \"IN\" | \"OUT\"; // Message direction\n ctx: MessageEventContext; // Enriched context with metadata\n}\n\n// MessageEventContext is MiddlewareContext plus timing, so it is a discriminated\n// union — narrow on `type` before reading a phase-specific field.\ntype MessageEventContext = MiddlewareContext & {\n timestamp: string; // ISO 8601\n latencyMs?: number; // Response latency, on result and error phases\n};\n\n// MiddlewareContext, by phase. All six run the middleware chain.\ntype MiddlewareContext =\n | { type: \"incoming_call\"; messageId: string; method: string; params: unknown; protocol?: string }\n | { type: \"outgoing_call\"; messageId: string; method: string; params: unknown; options: CallOptions }\n | { type: \"incoming_result\"; messageId: string; method: string; payload: unknown }\n | { type: \"incoming_error\"; messageId: string; method: string; error: OCPPCallError }\n | { type: \"outgoing_result\"; messageId: string; method: string; payload: unknown }\n | { type: \"outgoing_error\"; messageId: string; method: string; errorCode: string; errorDescription: string };\n```\n\n## �🛠️ Advanced OCPP RPC Server Configuration & WebSocket Handshake\n\nBuild sophisticated OCPP server implementations with fine-tuned WebSocket upgrade handling, authentication, and message routing.\n\n### OCPP WebSocket Handshake, Upgrade & Authentication\n\nYou can fine-tune how the server handles the WebSocket upgrade process, including timeouts for custom auth logic.\n\n```typescript\nconst server = new OCPPServer({\n // ...\n handshakeTimeoutMs: 5000, // Timeout if auth callback takes too long (default 30s)\n});\n\nserver.on(\"upgradeAborted\", ({ identity, reason, socket }) => {\n console.warn(`Handshake aborted for ${identity}: ${reason}`);\n});\n\nserver.on(\"upgradeError\", ({ error, socket }) => {\n console.error(\"Upgrade failed:\", error);\n});\n```\n\n### OCPP Server & Router Execution Flow (Connection & Message Phases)\n\nThe `OCPPServer` and its internal `OCPPRouter` handle connections and messages in a strict, two-phase execution hierarchy:\n\n#### 1. Connection Phase (HTTP Upgrade)\n\nExecutes before the WebSocket connection is officially accepted.\n\n1. **Route Matching (`router.route`)**: The incoming URL is matched against defined patterns.\n2. **Connection Middleware (`router.use`)**: Runs sequentially. Used to extract tokens, inspect headers, or implement early rate-limiting logic.\n3. **Auth Callback (`router.auth`)**: Runs **last** in the HTTP upgrade chain. Used to validate credentials against a database and finally accept/reject the connection.\n\n#### 2. Message Phase (WebSocket Open)\n\nExecutes after the connection is accepted and messages start flowing. 4. **Message Middleware (`client.use` / `server.use`)**: Intercepts every outgoing/incoming message for logging, schema validation, or metric tracking. 5. **Message Handlers (`client.handle` / `server.handle`)**: The **final piece of business logic** where the system reacts to a specific OCPP action (e.g., `BootNotification`).\n\n### NOREPLY Suppression in OCPP RPC Message Handlers\n\nReturn `NOREPLY` directly from any message handler to safely suppress the automatic outbound `CALLRESULT` without violating strict internal tracking specifications.\n\n```typescript\nimport { NOREPLY } from \"ocpp-ws-io\";\n\nclient.handle(\"StatusNotification\", ({ params }) => {\n return NOREPLY;\n});\n```\n\n## 📝 Structured Logging for OCPP RPC WebSocket Applications\n\n`ocpp-ws-io` provides **battle-tested structured JSON logging** optimized for high-throughput EV charging and OCPP WebSocket environments, powered by [voltlog-io](https://ocpp-ws-io.rohittiwari.me/docs/voltlog-io).\n\n### Default JSON Logging Behavior\n\nBy default (`logging: true`), logs are output as structured JSON to `stdout`.\n\n```json\n{\n \"level\": 30,\n \"time\": 1678900000000,\n \"msg\": \"Client connected\",\n \"component\": \"OCPPServer\",\n \"identity\": \"CP001\"\n}\n```\n\n### Pretty Printing & OCPP Message Exchange Logs (Development Mode)\n\nEnable `prettify` for development to see colored output with icons.\nEnable `exchangeLog` to log all OCPP messages with direction (`IN`/`OUT`) and metadata.\n\n```typescript\nconst client = new OCPPClient({\n // ...\n logging: {\n  enabled: true,\n  prettify: true, // 🌈 Colors & icons\n  exchangeLog: true, // ⚡ Log all OCPP messages\n  level: \"debug\", // Default: 'info'\n },\n});\n```\n\n**Output:**\n\n```sh\n⚡ CP-101  →  BootNotification  [OUT]\n✅ CP-101  ←  BootNotification  [IN]   { latencyMs: 45 }\n```\n\n### Custom Logger Integration (Pino, Winston, etc.)\n\nYou can bring your own logger (Pino, Winston, etc.) by implementing `LoggerLike`:\n\n```typescript\nimport pino from \"pino\";\n\nconst client = new OCPPClient({\n logging: {\n  handler: pino(), // Use existing logger instance\n },\n});\n```\n\n## 🛡️ OCPP RPC Safety, Reliability & Error Handling\n\nBuild fault-tolerant EV charging applications with safe call patterns, automatic error handling, and idempotency support.\n\n### Safe RPC Calls (`safeCall`) - Error Handling Without Try/Catch\n\nPerform RPC calls without `try/catch` blocks. Returns the response data on success, or `undefined` on failure while automatically logging the error. You can also pass per-call config options like timeouts.\n\n```typescript\nconst result = await client.safeCall(\n \"ocpp1.6\",\n \"Heartbeat\",\n {},\n {\n  timeoutMs: 15000, // Finely control the timeout specifically for this request\n },\n);\n\nif (result) {\n // Checked for undefined\n console.log(\"Heartbeat accepted:\", result.currentTime);\n}\n```\n\n### Unicast Routing (`sendToClient` / `safeSendToClient`) [Server]\n\nSend a message to a specific client ID, even if they are connected to a different node in the cluster.\n\nYou have two options depending on your error-handling preference:\n\n#### 1. Standard approach (`sendToClient`)\n\nThrows an error if the client responds with a `CALLERROR` or if the timeout is reached.\n\n```typescript\ntry {\n const result = await server.sendToClient(\n  \"CP001\",\n  \"ocpp1.6\",\n  \"GetConfiguration\",\n  { key: [\"ClockAlignedDataInterval\"] },\n  { timeoutMs: 10000 },\n );\n console.log(\"Configuration:\", result);\n} catch (error) {\n console.error(\"Failed to get configuration:\", error);\n}\n```\n\n#### 2. Safe approach (`safeSendToClient`)\n\nReturns the response on success, or `undefined` on error, automatically logging the failure internally.\n\n```typescript\nconst result = await server.safeSendToClient(\n \"CP001\",\n \"ocpp1.6\",\n \"GetConfiguration\",\n { key: [\"ClockAlignedDataInterval\"] },\n { timeoutMs: 10000 },\n);\n\nif (result) {\n console.log(\"Configuration:\", result);\n}\n```\n\n### 2. Connection Middleware (Server)\n\nFor intercepting HTTP WebSocket Upgrade requests before they become an OCPP Client.\n\n```typescript\nconst rateLimiter = defineMiddleware(async (ctx) => {\n const ip = ctx.handshake.remoteAddress;\n if (isRateLimited(ip)) {\n  // Instantly aborts the WebSocket connection with an HTTP 429 status\n  ctx.reject(429, \"Too Many Requests\");\n } else {\n  // Or proceed down the execution chain. You can optionally pass an object\n  // to next(), which will automatically be shallow-merged into `ctx.state`.\n  await ctx.next({ rateLimitRemaining: 99 });\n }\n});\n\nserver.use(rateLimiter);\n```\n\n### 3. Advanced Rate Limiting (Token Bucket)\n\nTo protect your CSMS from Noisy-Neighbor problems or firmware loops (e.g., a charger rapidly spamming `MeterValues`), you can enable the built-in Token Bucket Rate Limiter.\n\nThe Rate Limiter safely throttles connections without dropping the connection immediately. You can define global limits, method-specific limits, and provide a custom action callback when the limit is breached.\n\n```typescript\nconst server = new OCPPServer({\n protocols: [\"ocpp1.6\"],\n rateLimit: {\n  limit: 100, // Global limit\n  windowMs: 60000, // per 60 seconds\n  onLimitExceeded: \"disconnect\", // or \"ignore\", or a Custom Callback\n  methods: {\n   MeterValues: { limit: 10, windowMs: 60000 },\n   Heartbeat: { limit: 2, windowMs: 60000 },\n  },\n },\n});\n```\n\n## 🧩 OCPP Message Middleware & Interceptor Pattern\n\nIntercept, validate, and modify OCPP RPC messages across the middleware stack for logging, schema validation, and metric tracking.\n\n```typescript\n// Add logging middleware (enabled by default)\nclient.use(async (ctx, next) => {\n console.log(`Processing ${ctx.method}`);\n await next();\n});\n```\n\n## 📡 Redis Clustering & Distributed CSMS Architecture\n\nScale OCPP RPC servers across multiple nodes with Redis pub/sub, Streams, and presence tracking for enterprise CSMS deployments. Cross-node `sendToClient` returns the remote client's response (correlated over the adapter); sessions remain node-local.\n\n### Set Up Redis Clustering\n\n1. **Install Redis Adapter**:\n\n    ```bash\n    npm install ioredis\n    ```\n\n2. **Configure OCPP Server with Redis Adapter**:\n\n    ```typescript\n    import { OCPPServer } from \"ocpp-ws-io\";\n    import { RedisAdapter } from \"ocpp-ws-io/adapters/redis\";\n    import Redis from \"ioredis\";\n\n    // Pub/sub needs its own connection: a subscribed Redis client cannot\n    // issue other commands. `blockingClient` is optional and lets the adapter\n    // use blocking XREAD instead of polling, cutting cross-node RPC latency.\n    const pubClient = new Redis(process.env.REDIS_URL);\n    const subClient = pubClient.duplicate();\n    const blockingClient = pubClient.duplicate();\n\n    const server = new OCPPServer({\n     protocols: [\"ocpp1.6\"],\n    });\n\n    await server.setAdapter(\n      new RedisAdapter({ pubClient, subClient, blockingClient }),\n    );\n    ```\n\n**OCPP Redis Clustering Features:**\n\n- **Unicast Routing**: Send OCPP RPC messages to any charge point on any cluster node.\n- **Presence Tracking**: Real-time discovery of connected clients across the cluster.\n- **Durability**: cross-node unicast (`sendToClient`) is delivered over Redis Streams, so a message survives a moment when the target node is not subscribed. `broadcast` uses pub/sub and is fire-and-forget.\n- **Batch Operations**: Use `server.broadcastBatch` for efficient multi-node requests.\n\n### Custom Clustering Adapters (RabbitMQ, Kafka, PubSub)\n\nBuild custom OCPP clustering solutions beyond Redis by implementing the `EventAdapterInterface`. This enables distributed CSMS architectures with your preferred message broker or database backend.\n\n```typescript\nimport type { EventAdapterInterface } from \"ocpp-ws-io\";\n\nexport class CustomAdapter implements EventAdapterInterface {\n async publish(channel: string, data: unknown): Promise<void> {\n  /* ... */\n }\n async subscribe(\n  channel: string,\n  handler: (data: unknown) => void,\n ): Promise<void> {\n  /* ... */\n }\n async unsubscribe(channel: string): Promise<void> {\n  /* ... */\n }\n async disconnect(): Promise<void> {\n  /* ... */\n }\n\n // Optional primitives for advanced routing:\n async setPresence?(\n  identity: string,\n  nodeId: string,\n  ttl: number,\n ): Promise<void>;\n async getPresence?(identity: string): Promise<string | null>;\n async removePresence?(identity: string): Promise<void>;\n async getPresenceBatch?(identities: string[]): Promise<(string | null)[]>;\n async publishBatch?(\n  messages: { channel: string; data: unknown }[],\n ): Promise<void>;\n async metrics?(): Promise<Record<string, unknown>>;\n}\n```\n","readmeFilename":"README.md"}