{"_id":"sockress","_rev":"46-c82ad347a33d323c177eeb2adb7adb64","name":"sockress","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"sockress","version":"0.1.0","_id":"sockress@0.1.0","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"b7117fe6ef5794e8721720ee01638f8bc5592c00","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.0.tgz","fileCount":7,"integrity":"sha512-uic50gq7Mgkzhb0YczHKoU4HqU6crH87ljvz2/LfCsoFnP6B7wACbuoH91vRdI/Sfv2zhmlz3al32JNQHRbEqg==","signatures":[{"sig":"MEYCIQC9h+8Dx4EhrRHf9iLG6YsTqp1ikXpm0HGqdQApbPSTPwIhAJmJEUo/GN55AlvB89/mKA7eFrsMpQFjghjJX7mx4VJu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78943},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.0_1763749530169_0.8310297102439235","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"sockress","version":"0.1.1","_id":"sockress@0.1.1","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"6489db67ca64699d4f6860f5e7142bd7b8f967ce","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.1.tgz","fileCount":7,"integrity":"sha512-e7ivTwAuUbwX3bDR4YqBpUjB+L5qcKuA9pR7tsGJzJVKOU/Osg5zyZtN39XcU4m292lh4u5e6etkWSutvP2OJA==","signatures":[{"sig":"MEYCIQDaByR4eSagsOGAhGiCgUdT+N+mHac5PxhqBIeTOsb+pwIhAJ4G2Naw93Hb5vleFZaW+JqIvPd+IPzTjWL/c9m7QFiS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79132},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.1_1763750191343_0.7874309186958988","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"sockress","version":"0.1.2","_id":"sockress@0.1.2","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"6e9a63a7517d3dd935bd617b093ad70c68629407","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.2.tgz","fileCount":7,"integrity":"sha512-bgokvvLA9BrBVtP0MWfIBOlgPK6+5BKmkf6Rt6O+tV50LSGGHhH/uIjEFiUdb+HB1EoNYJZKg8QUDCyRwEn1BA==","signatures":[{"sig":"MEUCIHkEXs43s7NVhUMhDYv9z7DwqMyoIVj9xx3dOmZ/WhfvAiEA+RYL4AiVtDZYLKdX1HhfblaXiWRsg3fXSQ981UfbROc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82679},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.2_1763751117918_0.11273516997015443","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"sockress","version":"0.1.3","_id":"sockress@0.1.3","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"42f980cdb4e0d293de02abaf4ee2a3e8588613e6","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.3.tgz","fileCount":7,"integrity":"sha512-6TMpdghmglyqLRUAiDXtVE7qGLmx+W3MBNiOCNQ8tF/GB1JpI/6N/LvrPedtB9P4MAtiX/RVT+G3f8aJQFsjwg==","signatures":[{"sig":"MEQCIBKiQRb50vvtGRIMehwdo8/d0ycLk/MnIMFFAU/4m7zxAiAgjdnfUfOjjgQ+ElIYnrj/wF2psstegKCipkZtf831Qw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85030},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.3_1763752279593_0.9120772725581416","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"sockress","version":"0.1.4","_id":"sockress@0.1.4","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"208951ff342d6d99f6db45a1b01e7e8aeaacc78e","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.4.tgz","fileCount":7,"integrity":"sha512-sLvVCiIRqsHRFPV/ZuwAeBqisgjpcvqIt2kC0ykjMxRYym7Zko+uuaid2LwS0S8yZTVE5tkx5GPD8m99Cj/joQ==","signatures":[{"sig":"MEUCIQDj21zqosq8LaKwkntpofuRshuGsETxaMfngMVYO8BNEgIgLz1skjLLPeVTJKd0g7RdeM/bpLNo1yn+13+deW6L1oQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85397},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.4_1763752586988_0.5150819046598427","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"sockress","version":"0.1.5","_id":"sockress@0.1.5","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"d2fa44195e895493d71c1979a2f9b53c8ad545fc","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.5.tgz","fileCount":7,"integrity":"sha512-F/CTeNhp3SX+sliGr13uduli2D7YW0T/3HRC0sXd62bW4eyXxaMFu+ZR7gKxhiXt2k6JNcXcSzfOjRcTAZjWWQ==","signatures":[{"sig":"MEUCIC2G+ieRJMGf80uWlti2PFR/3IfH8J2lDgvEczT9jOpVAiEA6BUUlCgEZoI1XIgtkHb+E/+RQV0S4qoLUPdKn3MRVoc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86078},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.5_1763753110136_0.8795502018549344","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"sockress","version":"0.1.6","_id":"sockress@0.1.6","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"e87f8441b0772168086ca8b2c5d598f429c79de6","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.6.tgz","fileCount":7,"integrity":"sha512-AXjV3nAkBYCsQgmA+RynlhM1HZYZKLFk4nRES0Y/dRVIzZuOUSDM0/mBTU683STdI4L5PAXOvAYzPlJMUZpLhw==","signatures":[{"sig":"MEQCIBE1zuiCSx4afdZaMc8TPwUA9v0gJasojlnYSCnKxMf8AiB+XMjzhKtb1/fdcr575GGHHiRVCHFQywQGr2npuMoU0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86651},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.6_1763754085302_0.6493207939563914","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"sockress","version":"0.1.7","_id":"sockress@0.1.7","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"176856c5e2a1396bd3980dd14e745f42b044b331","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.7.tgz","fileCount":7,"integrity":"sha512-adpCu2F9az4JJWInWEzA2T+fILbgQ/EopDfc3KfpOMADSQBa4X8QCkptFphaqiuZg9FC5kvwXWnsRzqHJZ84pQ==","signatures":[{"sig":"MEUCIB0GnOR/OcfaUAI749wFrFsXMCt4tbKHn2ydfbiHerqbAiEAzYdVxixTF40wZ6DlOrmOyzCUABgYYNGwJddnrte3t+A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88504},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.7_1763755146471_0.7629143036624366","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"sockress","version":"0.1.8","_id":"sockress@0.1.8","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"6e74f20906998c9e972b3b3655c5420c5a784f49","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.1.8.tgz","fileCount":7,"integrity":"sha512-4Vb6HkqJS3hDXofcn8NFRahFQqX1DQt9An8GSg6766WxcOOiqZkNpQCmDGqPJdejH1/MtBrjzZjXLWolUNPu/Q==","signatures":[{"sig":"MEUCIGtn9RuV/YIWNoMAWq0Qbx1hdif3a+CHinSKwN+jpEWHAiEAm6xYlUnqL/2umUi5rnB1Jm4j3lows8zi94FCjtyV14U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88632},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.1.8_1763755603019_0.45735231760484907","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"sockress","version":"0.2.0","_id":"sockress@0.2.0","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"e9ed1aa44674f4fd7ed6de70e217885b1bfd2d40","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.0.tgz","fileCount":7,"integrity":"sha512-vE+PJirWgaxn9oRIcqitjhaUg+mxYP4Es4Ve659JmssqLYOSgDjGBwpZjOrCxuOfTkszqoNvbcNdOc4RodqBEw==","signatures":[{"sig":"MEUCID52EAM5wog8cXQpF3Y7650souWePuy9suCfoH+Ae0BqAiEA/J35cjtMGO8l0mokjEB2dzEtoqxyVMoqeHedL8gfuho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93992},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.0_1763756963948_0.12117751454891157","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"sockress","version":"0.2.1","_id":"sockress@0.2.1","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"dist":{"shasum":"b408c88edeb541ec5b8fdd93530b521ff61a6a4c","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.1.tgz","fileCount":7,"integrity":"sha512-GFpu3yC40KMT41R4/IWAvC8/HqXNd8W7Tcskfo5DJbls/dS1sPMgRchpXSJg2sdhJo9n64uLjluX1bMAb9WqIA==","signatures":[{"sig":"MEQCIA0aeeXvJ0yNzLsGGuQ2tFs8eG39A4/IKXpYriyC8GarAiBEo1+/BdaRK357AQgNjD+IJC1QmEI3psPf/+ZWPP+bXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121863},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"_npmVersion":"11.6.2","description":"Express-like server framework with built-in socket fallback","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.1_1763758836962_0.12500619006713287","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"sockress","version":"0.2.2","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"_id":"sockress@0.2.2","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"2cce8d68c70c4406ba2a3c03b9b343e7cf82fe6c","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.2.tgz","fileCount":8,"integrity":"sha512-nyCkHZSDwYnO9YPdwPB4wLXgS2tVVhxxbLKbMm5wnNHGT8Z0AF9wl32NschnPz+R+sJRbRD09eix7OpttcuCkw==","signatures":[{"sig":"MEUCIQCOWoMmjhlF2YccEQXfdPM7Muoj/CGKHSPcN0BVWwwrMwIgAYDKILFvB8qkrwKzVxc9k9QT6y1zCA8SXgI/wRYiIv0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124286},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.2_1763785661067_0.2015899460677104","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"sockress","version":"0.2.3","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"_id":"sockress@0.2.3","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"68696e3b3e86e39340fd56a1269b97476772083c","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.3.tgz","fileCount":8,"integrity":"sha512-N58jeHjCxxBwJEFoxmbQjKUur8f53PRkulVLgFlXVE75BB7K5T/x66622cL4FuyfMJH3Ep+etC6FhkexZRehFw==","signatures":[{"sig":"MEUCIQCdV3JPQqnlmRVHp8kjKb9i7W80lmGTIre86N1NaFvrGQIgDbnXV55YFlnUmXvzyE8SxnBwA0ytSGHX7Df7fTV2NuY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131847},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.3_1763897759423_0.41938990939692244","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"sockress","version":"0.2.4","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"_id":"sockress@0.2.4","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"622f6ea08b8ab5545f2acda35c1eeda5e73a38b1","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.4.tgz","fileCount":8,"integrity":"sha512-97G/2B8YZiKFDfRepwC9Dgv9Fd02GYddsg9+SpVtJTGPC9DH/V5ftUNdSV3CLQf60mXn3VlWi1zrpZ9FMBdFOA==","signatures":[{"sig":"MEUCIDFhODNW8NJA6Jtup3qwwwfBmxLkZj4h5xFyxp0bc9ojAiEA6jrlei0YnCso5HHqMNK05H2SV+gsRmj5AZZCADe4sho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131228},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.4_1763898201805_0.5536376586431069","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"sockress","version":"0.2.5","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"_id":"sockress@0.2.5","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"35f9a92364c3f02d0ad1fa58bbb2c78f53b709b3","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.5.tgz","fileCount":8,"integrity":"sha512-SaDkU/DV3J5USSUwjr6L1w75eeTQYPP2pZTh+HtEIR9xdH4HIrOYq72MrlURJa1ZfLqicC46yUPZjjAdgXXxew==","signatures":[{"sig":"MEUCIQC+E2qmoPa4qtPpmM/mKz6IJAq8KqM94GtmUyCctLBlQAIgZ6eYPoL+sJ0sb0bYHZzmzW+2ZT/7V938+4H4zZKQAok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131829},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.5_1763898816717_0.27828048176783216","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"sockress","version":"0.2.6","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.2.6","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"a9a23433f173e2ff2b773e16b67248c4965168ce","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.6.tgz","fileCount":3,"integrity":"sha512-92lpy7qhv0pdlRAF9j08RvYXXnocG04ddBEbeOsjSYG+FeLUTYXqGcOX5NkURQtjuuVgIYluurkG+TxVR75mNA==","signatures":[{"sig":"MEUCIAZ5rnYOlDeTPHzDjb8VFCBl+f3hTuCJ/Q4wT35UmiIfAiEAnRzERuGnhEezVYXObFu97k+87+Fm5Ny0UVXoPvF8fZg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17770},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.6_1763901385117_0.37315239887639295","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"sockress","version":"0.2.7","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.2.7","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"caf7adbd5a6bfec9db71819f7d96450b880e6c21","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.7.tgz","fileCount":7,"integrity":"sha512-r0f5VfV/YMIe5US4B3532xt44ZL9dVOx7nfh7g0RlcCYIt0I0DCSMPU01VyWpP+6Q5Pze5kjgv1Lg16jvgPoog==","signatures":[{"sig":"MEQCIG3UIftt1KYIREZHz3dQ06wW70ZzqARmYnx6AlCTIxplAiBBbMIdH1jyab1rN6lm6XtYTp/ykT8jwmc6O5qVTW1QHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135544},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.7_1763901423965_0.7785832981311611","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"sockress","version":"0.2.8","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.2.8","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"5412ffbb9684e172d3e21212fd340c10b583047b","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.8.tgz","fileCount":7,"integrity":"sha512-p0c5WYUzU54XAA+XXyAr7yuICV45MM/gAomryWyKrRKArj7+UP6UZ3fdV7e54d+QYt2c7DIS+epWCB8pEr7fOA==","signatures":[{"sig":"MEUCIB8lnz/RXOEJGGlr1bT18Mfnr6Nt5+fBuWHz/UToJ30IAiEA5HW9rAxZRPpwNVgP2LnXnZ8S02Qb1n3icAy8ep6Q760=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136006},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"a697cf0102902c267338566239d7dc5606cb4969","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.8_1763922015997_0.5677203346229329","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"sockress","version":"0.2.9","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.2.9","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"1bd3c2d2bb0d8e2fb349e85ce719cf0f45304d16","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.2.9.tgz","fileCount":7,"integrity":"sha512-x3LTnVnxboQ3DG21L8WWIT0XXWj8C8q1JUqpL0watOphMBizBxwbo0j2Ww9Xf9s4NidAWp0CFf4LQQn8QbwAkQ==","signatures":[{"sig":"MEYCIQDZ5mIvzrM/mp/+82eEVKKis8ZdCT0ZCo4Epv9L9ZX0GAIhAOiDXFVbq4jJ8rmoibikfD0DJVpCJfmqkVc0WVKCP1/A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137164},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.2.9_1764781537900_0.7010364552980888","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"sockress","version":"0.3.0","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.0","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"55c46221749336a331b9b3b3fa00e11cd0c5e59e","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.0.tgz","fileCount":7,"integrity":"sha512-fO58jnU5lfaTssVBp+BAnWpb+LY2l/zu28PwpCIbdlltn5e+StUHVoP3OKNFzfKXq9EcnHuVtwQK2N8MtbhkXw==","signatures":[{"sig":"MEQCIG7Drf4Um6KO4m0EdRSJ5cZM4X/fjWXfYIxSPTt70luzAiAiKaCNu+MIAvPee+qWaRsQXbuMzBd1yO44o33+HsCHjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137196},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.0_1764782152821_0.6143483812950021","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"sockress","version":"0.3.1","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.1","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"833721401520431ff76297292c0e326ca08a2e34","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.1.tgz","fileCount":7,"integrity":"sha512-PZoQb/HD+F4lVd+WdbwOYP9P+scKxsdn2C9msNizBVf0RSMeMNQw+pgy6LS1fpd8JqT3rJp9016kYu199/6Fvw==","signatures":[{"sig":"MEYCIQCbtcJFG8hmhHBR3u4Y/dSCuXqRkmwDdzAvph6ESygrAwIhAN3M7HkWxQpqRzGjckMdF1ChZ6WckFLTNLetSY0tyGZd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":138510},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","multer":"^1.4.5-lts.1","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.1_1764782664333_0.7297572229580105","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"sockress","version":"0.3.2","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.2","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"4ec97afd540be836c53b5def4b48bc8f4326b462","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.2.tgz","fileCount":7,"integrity":"sha512-Mm4RzSgY6ooHbVcUqAP0mG4Td/LO10AkyBXMUpYzC5vTqdqa/0fjdgWOt/trCUh7XQ/bTIepcaYPz5m+wCJ07g==","signatures":[{"sig":"MEUCIQCLrlhyYgBxauW+iB4NCOxV9tFudSMp71VCzGF+wS/fNQIgUK35J56nBPzBz1fuftj+WLodcdg2hiOQRikp/CR+5OI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139543},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.16.0","cookie":"^0.6.0","nanoid":"^5.0.7"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.0","@types/ws":"^8.5.10","@types/node":"^20.14.10","@types/cookie":"^0.6.0","@types/multer":"^1.4.11"},"peerDependencies":{"multer":"^2.0.0"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.2_1764786426800_0.0028718456697749417","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"sockress","version":"0.3.3","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.3","maintainers":[{"name":"alsocoder","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"be48d0197edd4bd3e172d66f11d6b48cdd569f69","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.3.tgz","fileCount":7,"integrity":"sha512-bz9UilcVvIFrkpDz9OAeAqkZtYjUONmdPOapYT/iKJ0R8wQF0GBXaQLZjKbH2vqp1k5j625sk3/03cqvf5YXUQ==","signatures":[{"sig":"MEQCIGOZEuRr2iw+DEOh8thRXVd9TswFH8jL+mFOXcVn09DlAiBbIT02n+G1o48gbfrrjREemxScfnsxxhw+B+LfY68DQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140404},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.3_1765474156836_0.5422031626408315","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"sockress","version":"0.3.4","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.4","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"12add4f5eaab51503e52e55fbbbd6e1f8f2f8491","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.4.tgz","fileCount":7,"integrity":"sha512-IkUDq75pY2fhnfauNJrDqKR0OFHyLNit2j+cUyKFc6mu/4cUfIRJZpotHDJBzqo1z44zy3PgbeQVCTDbKnRv6w==","signatures":[{"sig":"MEYCIQC2IfX6ISL4AWSjrI44KVaqgChmeSvtilDMwUy8w0jR5wIhAI0Eift+K52dZ9CEzjnezeRNQAVYg6axAXul2UswuYvA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140763},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.4_1765609116410_0.31515353413943537","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"sockress","version":"0.3.5","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.5","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"98a989b058b6669caad2e06b5d208cd549cda9d6","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.5.tgz","fileCount":7,"integrity":"sha512-/ihvMKNwbcZoyBKTWMO77ju5W2nC5TI3m+oDcuf4tkVUiLDp7gxaGsjwuntxC11WbUMavmAWqx0ALMmaST4aIQ==","signatures":[{"sig":"MEUCIQCl9Hi7A9oY5H4m/c/zMpDvV6E0MDmkvII1HKWxOHbeSQIgCABfMNMU9I4cOvzWWx/CCrmP3xAgl0tzdkTM6Vor2WE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144355},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.5_1767090336523_0.5066697563916216","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"sockress","version":"0.3.6","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.6","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"bb4f490005f9fb1e58511ffc2a5d7618f90cc49d","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.6.tgz","fileCount":7,"integrity":"sha512-DD/Y4EMehHSokPF/5VfZ9FKkuaT74tdNzDPJ04Dcoo12XMrqYzrxWy3WnEGn6f7XpbLZ/EhRVzE4QIT+iQKGdQ==","signatures":[{"sig":"MEUCIQCo3VI/RNNXdQAXDzwsZvwRhu3oI6EmKHrBWD3XgTAcGwIgOF0xrR5y93Baml+mBFdG8ZPvnydHnizxYHH8r0ngBVg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145712},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.6_1767090790134_0.5421585327977081","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"sockress","version":"0.3.7","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.7","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"998945f3928967b9901fa98f9ad3c26a569c3454","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.7.tgz","fileCount":7,"integrity":"sha512-zxRchFduQ/YymqiXMwdthNCZkW308Gx66fhUdWnAHplBcBhAdY2a0M3lNQJEzBz1yzX4Jwdk7ISH4c8Z0DcpNg==","signatures":[{"sig":"MEYCIQCD2RlkElTtO/ghHRIAuNmTcViUye8Ey9KRpWmKig8aEAIhALa7eUsv77rN44bdHKsD1/4Rr2Eix3loX5bG1EaMw00D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147841},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.7_1767091323781_0.6813564859077419","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"sockress","version":"0.3.8","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.8","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"c30506d9437cd681fc3cab538ad636cce3785823","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.8.tgz","fileCount":7,"integrity":"sha512-fR24sjw/H+STGVPdhvSFY0Oe1V3FV7IoZVLsZzxJYQGtAVcZeaL+FRBQFRuTj201LzsCWQSskuQe4pCj7Rbt1w==","signatures":[{"sig":"MEYCIQDwmo118eCPONgYOArsKIULKQ1gSBrD5JjBxcdl/mCizQIhAP1nnvm3cJApZ7ceP/r3h1uUiajAODae/MjTWUMKdwk2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153961},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.8_1767091590259_0.631265885532635","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"sockress","version":"0.3.9","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.3.9","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"468e3a24b0bf3cc842ef1d536d6bb8b1929578b5","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.3.9.tgz","fileCount":7,"integrity":"sha512-1/KfCwFEPC78Y1UCZlPjYc8TgSPAw34rD7dvtOfxolDflRUMDyNOPUtfX8CLw2LSVJrsrokOzR8aB1m3xpM3tQ==","signatures":[{"sig":"MEYCIQCylxzmCGDjUy3p9zsq7qtcRHe4zhv1yUFAKxfuL4M9GwIhAMBbPiCdmW5CWs1yMMpesjXaISFvw038lNg20JJm4nen","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156005},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.3.9_1767091724249_0.005517616185982455","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"sockress","version":"0.4.0","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.0","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"c4962b4bc99cfeb582638957340540d1c2796254","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.0.tgz","fileCount":7,"integrity":"sha512-CiFtNgu4Hvewnno1R0tzoOcWBNKkTpVnWEfCXj4eiKX6QjhJB4x6qam99YuCipefpNSUxwjsc5D+kYGWxsA33Q==","signatures":[{"sig":"MEYCIQD/bLf0uSRojQDy0z55inyRABOoP8R+bBWclOR8sTiHLwIhALHbaBPKwirMfCoDNRQr0JxOWEGJHdbvLArAlvYr/WYd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158794},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.0_1767092058327_0.08236712354973807","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"sockress","version":"0.4.1","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.1","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"b8f6796c03a9c4b48a05cc74b0ba60c39018fd37","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.1.tgz","fileCount":7,"integrity":"sha512-BshKYwmIbgomg/r9Y3cVs0l4VegjnF0/E9WM3SEWcQJqZVkkvA24bpdNJ6S18fc65hc4Vf76C2G67GNvorMy/g==","signatures":[{"sig":"MEUCIQCsFQdXn6Bd3nQSqB24+hh2lG6VZ4B+9lXwsX8xmqQ3LAIgRt+QqdzYklJJW+R0LGh7e4264XKuWIOE6SkS7Rvchw4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162884},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.1_1767092491726_0.22740597477869007","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"sockress","version":"0.4.2","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.2","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"e8c2b32033e3a59d12b42b5078c07517bf2a3429","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.2.tgz","fileCount":7,"integrity":"sha512-J/twUfypDE6N8TPyJor9ZNE+b4ZjDWrg5xCX1gjM5pMzFDDG3eB9iXHCX7qS8j+lAGo0Hpb9G/IIB6jxRq2eeA==","signatures":[{"sig":"MEUCIQCn/ecvynn0uXVjf6l6ih9RRXhXDkK0DCoOJkzDe2u5sQIgH+7AJ4OMJy2nzzpAO9LRwaMTv5pBw+/qPRA5SdD0OfE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165107},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.2_1767676961152_0.5096797894041243","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"sockress","version":"0.4.3","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.3","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"4dbc166925caaec2713889a259620ce7026c160b","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.3.tgz","fileCount":7,"integrity":"sha512-smm4619LF1558kiK30OqWRTebjndukOW1w2JXNBPukdc5B3G3lNbYAQDa+PYMI3hOV759rE/Oh1KvZv0TVSb4g==","signatures":[{"sig":"MEUCIQC5Kdb5oTh710wVVGc4lTo0bAYlw+st3CVpNql4I3yFigIgIiQCwfCY2As0JDTH3iANmUU9qnGGLdxr/F4bkByn7uM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167423},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.3_1767941567147_0.3507435384562212","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"sockress","version":"0.4.4","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.4","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"121e0be392663db305b1d3a3800b9e8d4084e3e3","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.4.tgz","fileCount":7,"integrity":"sha512-hMMTNKSFm+6D50TBbEXvdVldm0os1/yFKtnOgSRlenXQ7F4ZNRgdTwjd1/sRc8kXS1OsYzj3srwbLk5g2EbRLA==","signatures":[{"sig":"MEUCIQCac1fjcQF5LDlLkIxMpB+NhXEnRloW1G6XW09KtYPh7gIgDUu/OLc827tN3KsJ0TmPHc4mC55fk7S7qPnpLMV6UhU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167221},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.4_1767942009624_0.16125881571760803","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"sockress","version":"0.4.6","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.6","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"aa1e8ed1761970866d46e1e6c2c221431ab688cb","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.6.tgz","fileCount":7,"integrity":"sha512-tCB9aykFtC3F1Jrotz6iPll5egfUxeIORHri7NWEP15uxti5A9H4rLi+YLlM/WZ+y20QMitF0oJ/r22nUp274Q==","signatures":[{"sig":"MEYCIQCUgGt5sHrZn1+g/xBqqUza65D6SHS809tNboalapHmzQIhAOlT+rTY8+kappQiknTVlsneHaw8lB6Mnl4p3/LfGRPn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169560},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.6_1767943308588_0.04021375004120076","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"sockress","version":"0.4.7","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.7","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"01595b40c1f110d0c1dadb3401d9b170c0c9136d","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.7.tgz","fileCount":7,"integrity":"sha512-LBeQ5gkxDeFwZTWeLUkOO8+1LpNtujeyEtf5WQaleFxGseqOvURSZzo0nUmYXBoJEnXBw7rbdPAz37vEUEi90w==","signatures":[{"sig":"MEUCIEbh8NENu2r3DTKh0aG5iF13kXrO79LTK1RH85ArezWsAiEAnj9mcA1QV4eVl8SSmQoAV8JkqHy/rqQc2C6pOd06tbg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170820},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.7_1767943357934_0.5086407974307585","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"sockress","version":"0.4.8","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.8","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"e5ad1c81410cb675da3056ae6de33c5444b727ab","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.8.tgz","fileCount":7,"integrity":"sha512-8g1PdBOVa2SfFZHIRNR87HhLSW7agWhPoVdfzlvdncFSv6qbvMvnJMVHIrNVdnLmv4fdGC1MvDtgMZQpcFau+g==","signatures":[{"sig":"MEUCIQCxqqaS6Yz6Bwola8lnX/IRDqtSc1XL0Cp92sLEHxY7ogIgMIMg4p9IronSC6AcpjKghZuHTrs2S1gzvSMkfZpQ3R4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170820},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.8_1767943409977_0.3600536503906522","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"sockress","version":"0.4.9","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.9","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"e35aadbae454df53634849f6e581adb741b75598","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.9.tgz","fileCount":7,"integrity":"sha512-JbwYpCvnrI7fdfLIVh4FBzXKKwbMrt1M7JPJ23FGPpeR+xlWd2k+n2A/gftcxXWWMtke10CJLjO3PTAWbFVWSw==","signatures":[{"sig":"MEQCIEUmtMFEvnBAGr+ZlYVLM9bdM1MlYT5XR2BrfAnVDbpfAiBqc5oFQoYOdcl2zFIp3so9CLATxUyT8W/nAlZQSdbN+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":171006},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.9_1767943443107_0.5934160664916246","host":"s3://npm-registry-packages-npm-production"}},"0.4.10":{"name":"sockress","version":"0.4.10","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.10","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"19b5f8eacb91a00b7dba56ed5fae272eb7ddb2b3","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.10.tgz","fileCount":7,"integrity":"sha512-LVu1HpF/48GjRhYdD69UFEeTCJVsukfQQr8j0F3pQ10wmh39jU57EIfSS744cl2Bk0anrxwzBZAP9o58il/RsQ==","signatures":[{"sig":"MEUCIG1pLaz7ZIPlSi7qdCfIzdDIFmPXpotopKiueTIlAzcMAiEAzS6TFNrNG0VhHXySA4DT40+7UExK4nLvCq/lJdTlBJ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174335},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.10_1767943552159_0.3661869839819243","host":"s3://npm-registry-packages-npm-production"}},"0.4.11":{"name":"sockress","version":"0.4.11","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.11","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"71f64cf67333522a4379df33a17c6bc148bb7cae","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.11.tgz","fileCount":7,"integrity":"sha512-/ssJCt0Tp/IT9n4/HMsMAmQx/llipX1YIQcAFgGjQU3zAY2FBWECL19YZLs6U9g+iD3CTP0ioqGNI2HQVC6kXg==","signatures":[{"sig":"MEUCIQCxpLSSrCdGtHzA7tcomosC52Q2tQGf2A/6tCBKtGMWpQIgDEbf01VtHraVYhy992gkfHxV3+ZYfQsFWvMh52E1meY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":171861},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.11_1767944205520_0.8143802453300131","host":"s3://npm-registry-packages-npm-production"}},"0.4.12":{"name":"sockress","version":"0.4.12","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.12","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"563b72a5d10c98ccb6796470b8b43a3b10c2bd5f","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.12.tgz","fileCount":7,"integrity":"sha512-E9l+bhTl9Pxm5pe2W5p/mrQcTJ1uNnNY/3XNJze+6Xf5R+sjZZKfdOKlmTpdHHJDUKwiMr9jlyFrs7LOa/p/BQ==","signatures":[{"sig":"MEUCIAjMc7er7bQQteuQCw3oJD5tE1R12adUIblMAMQa0T7hAiEAtaSYigekno4mhv5XL1eMf51dUoJW1tZP0XiQXfQUAt0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183867},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.12_1768740152870_0.5314141262217491","host":"s3://npm-registry-packages-npm-production"}},"0.4.13":{"name":"sockress","version":"0.4.13","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.13","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"b842bb79da6ec507d1ba0d532cd016e7b96315b7","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.13.tgz","fileCount":7,"integrity":"sha512-fL2BM30VXQASE4VNmrNZi5YuRwA2/2KDeFRSlaD/ywwTtT8fxqDINJca4oQ09iKKLDmMCJWBNb214xDyCHGnWw==","signatures":[{"sig":"MEYCIQCpntgb4ICB4lfnvqn1s3oaTOXHFAVFSTas9TBP0NpESgIhAIQvxe4bV6DcV6VwRhH2X9QVH2EWhaALJ7hsR1KsrVfA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183867},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.13_1768740156356_0.29207410775421727","host":"s3://npm-registry-packages-npm-production"}},"0.4.14":{"name":"sockress","version":"0.4.14","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.14","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"de25e6327082c6edbe1ffa7441f2314b7205d053","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.14.tgz","fileCount":7,"integrity":"sha512-+jgxIpWLRzOkSTBtYqf4gJNLgK4MMWCSF2rs+dTIoZYuKl5fD0hmV4Lx9H7ezaTdwenUg8CoxhFxMe4Mfjmngw==","signatures":[{"sig":"MEUCIQCOUjKf+MO6+1D//lo4yQqrQmuGELzsDQSjIflg6JoqJwIgKFXADLpDPK1lme9r0qHG0g/Q/OJZe+TC6iVnAlt6EE4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188191},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3","cookie":"^1.1.1","nanoid":"^5.1.6"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.14_1769413441343_0.5725269761218164","host":"s3://npm-registry-packages-npm-production"}},"0.4.15":{"name":"sockress","version":"0.4.15","keywords":["sockress","express","websocket","socket","framework","uploader","static","nodejs"],"author":{"url":"https://alsocoder.com","name":"Also Coder","email":"hello@alsocoder.com"},"license":"PROPRIETARY","_id":"sockress@0.4.15","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"homepage":"https://alsocoder.com","bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"dist":{"shasum":"c7280755aaa6e62e40a86566b134ef267edb3ba0","tarball":"https://registry.npmjs.org/sockress/-/sockress-0.4.15.tgz","fileCount":7,"integrity":"sha512-u2rNJXGakby+J5KyP8DmIhorh1xCqgbdnSGK5m5HiWU1pedUYLpcIC3wdSKn570U8NiKkV7KpY+bCKxr9sJQMQ==","signatures":[{"sig":"MEUCIB/heAFMJVg1FXOozggDrDVOQV0qMEzjar1fscaFZMI7AiEAzv6gmi55hFUrrGCC8L2GfnYVeK6r/ScdDcld3rlRp+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192347},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ac221330184954df71605747f84ba6aa694690be","scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"repository":{"url":"git+https://github.com/alsocoders/sockress.git","type":"git"},"_npmVersion":"11.6.2","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","directories":{},"_nodeVersion":"22.17.1","dependencies":{"ws":"^8.18.3"},"_hasShrinkwrap":false,"devDependencies":{"multer":"^2.0.2","@types/ws":"^8.18.1","@types/node":"^25.0.0","@types/multer":"^2.0.0"},"peerDependencies":{"multer":"^2.0.2"},"peerDependenciesMeta":{"multer":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/sockress_0.4.15_1770351503046_0.8656878818561444","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"sockress","version":"1.0.0","description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"require":"./dist/index.js","import":"./dist/index.js","types":"./dist/index.d.ts"},"./package.json":"./package.json"},"scripts":{"build":"tsc -p tsconfig.json","prepublishOnly":"npm run build"},"author":{"name":"Also Coder","email":"hello@alsocoder.com","url":"https://alsocoder.com"},"homepage":"https://alsocoder.com","repository":{"type":"git","url":"git+https://github.com/alsocoders/sockress.git"},"bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"license":"PROPRIETARY","keywords":["sockress","express","websocket","socket","framework","validation","schema","ajv","uploader","static","nodejs"],"dependencies":{"ws":"^8.18.3"},"peerDependencies":{"ajv":"^8.0.0","multer":"^2.0.2"},"peerDependenciesMeta":{"ajv":{"optional":true},"multer":{"optional":true}},"devDependencies":{"@types/multer":"^2.0.0","@types/node":"^25.0.0","@types/ws":"^8.18.1","multer":"^2.0.2"},"gitHead":"490c1a1a1fe701836c78e6f49191754428c379b7","_id":"sockress@1.0.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-Q8HZabcsgNYoUajedrBc6LP+TSPgqYwoI0n+g0PnNBLpNxwRc8ScxOiztm/R7QTMTkwrmrCruiqOqu7Wwuh2Kg==","shasum":"869e1a46defaabbc5ffcc499ec4ae709110d8440","tarball":"https://registry.npmjs.org/sockress/-/sockress-1.0.0.tgz","fileCount":7,"unpackedSize":211157,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEb92egKSFcy+BTFq5jPG/9aPgNOGNXvd3FHkqZElOTzAiAdMP7w8/tqiUMXmaSFEkBLmxy8wBL1yJNFs9m07VU4Nw=="}]},"_npmUser":{"name":"alsocoder-org","email":"alsocoder@gmail.com"},"directories":{},"maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sockress_1.0.0_1773578342046_0.0781779087033716"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-21T18:25:30.055Z","modified":"2026-03-15T12:39:02.340Z","0.1.0":"2025-11-21T18:25:30.375Z","0.1.1":"2025-11-21T18:36:31.548Z","0.1.2":"2025-11-21T18:51:58.093Z","0.1.3":"2025-11-21T19:11:19.822Z","0.1.4":"2025-11-21T19:16:27.189Z","0.1.5":"2025-11-21T19:25:10.331Z","0.1.6":"2025-11-21T19:41:25.516Z","0.1.7":"2025-11-21T19:59:06.669Z","0.1.8":"2025-11-21T20:06:43.257Z","0.2.0":"2025-11-21T20:29:24.171Z","0.2.1":"2025-11-21T21:00:37.151Z","0.2.2":"2025-11-22T04:27:41.263Z","0.2.3":"2025-11-23T11:35:59.628Z","0.2.4":"2025-11-23T11:43:21.992Z","0.2.5":"2025-11-23T11:53:36.927Z","0.2.6":"2025-11-23T12:36:25.313Z","0.2.7":"2025-11-23T12:37:04.198Z","0.2.8":"2025-11-23T18:20:16.182Z","0.2.9":"2025-12-03T17:05:38.123Z","0.3.0":"2025-12-03T17:15:53.035Z","0.3.1":"2025-12-03T17:24:24.543Z","0.3.2":"2025-12-03T18:27:06.972Z","0.3.3":"2025-12-11T17:29:16.984Z","0.3.4":"2025-12-13T06:58:36.557Z","0.3.5":"2025-12-30T10:25:36.659Z","0.3.6":"2025-12-30T10:33:10.283Z","0.3.7":"2025-12-30T10:42:03.921Z","0.3.8":"2025-12-30T10:46:30.405Z","0.3.9":"2025-12-30T10:48:44.411Z","0.4.0":"2025-12-30T10:54:18.473Z","0.4.1":"2025-12-30T11:01:31.872Z","0.4.2":"2026-01-06T05:22:41.331Z","0.4.3":"2026-01-09T06:52:47.351Z","0.4.4":"2026-01-09T07:00:09.767Z","0.4.6":"2026-01-09T07:21:48.720Z","0.4.7":"2026-01-09T07:22:38.074Z","0.4.8":"2026-01-09T07:23:30.140Z","0.4.9":"2026-01-09T07:24:03.273Z","0.4.10":"2026-01-09T07:25:52.300Z","0.4.11":"2026-01-09T07:36:45.666Z","0.4.12":"2026-01-18T12:42:33.022Z","0.4.13":"2026-01-18T12:42:36.632Z","0.4.14":"2026-01-26T07:44:01.482Z","0.4.15":"2026-02-06T04:18:23.209Z","1.0.0":"2026-03-15T12:39:02.206Z"},"bugs":{"url":"https://github.com/alsocoders/sockress/issues"},"author":{"name":"Also Coder","email":"hello@alsocoder.com","url":"https://alsocoder.com"},"license":"PROPRIETARY","homepage":"https://alsocoder.com","keywords":["sockress","express","websocket","socket","framework","validation","schema","ajv","uploader","static","nodejs"],"repository":{"type":"git","url":"git+https://github.com/alsocoders/sockress.git"},"description":"Socket-first Express-compatible server with optional HTTP fallback, built-in WebSocket transport, uploader, and static helpers.","maintainers":[{"name":"alsocoder-org","email":"alsocoder@gmail.com"}],"readme":"# Sockress Server\r\n\r\nSockress is a socket-first Node.js framework that mirrors the Express API while automatically upgrading compatible requests to WebSockets. HTTP clients (Postman, curl, third-party services) continue to work with zero changes, so a single codebase can serve both realtime and REST consumers.\r\n\r\n**Created by [Also Coder](https://alsocoder.com) · GitHub [@alsocoders](https://github.com/alsocoders)**\r\n\r\n---\r\n\r\n## Features\r\n\r\n- Express-style routing (`app.get`, `app.post`, `app.put`, `app.patch`, `app.delete`, `app.head`, `app.options`, `app.all`)\r\n- **Router support** - Modular routing with `sockress.Router()`\r\n- Unified middleware pipeline for HTTP and WebSocket transports\r\n- Automatic CORS handling with configurable origins\r\n- Cookie parsing and setting via `req.cookies` and `res.cookie()`\r\n- File uploads via `createUploader()` (multer-compatible) that work on both transports\r\n- Static file serving via `serveStatic()` helper\r\n- Request context object (`req.context`) for passing data through middleware\r\n- **Response helpers**: `redirect()`, `sendFile()`, `download()`, `sendStatus()`, `format()`, `location()`, `vary()`\r\n- **Request helpers**: `accepts()`, `is()`, `param()`, plus `hostname`, `originalUrl`, `baseUrl`, `subdomains`\r\n- **Parameter middleware** with `app.param()`\r\n- **Validation** – Optional request/response JSON Schema validation via Ajv (`validate(schema)`, `app.addSchema()`); works for both HTTP and WebSocket\r\n- **Chainable routes** with `app.route()`\r\n- Graceful shutdown hooks (automatically closes on `beforeExit`, `SIGINT`, `SIGTERM`)\r\n- Heartbeat management for long-lived WebSocket connections\r\n\r\n---\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install sockress\r\n```\r\n\r\n**Optional Dependencies:**\r\n\r\nSockress keeps its bundle size minimal by making some features optional:\r\n\r\n- **Validation** – Install `ajv` for request/response JSON Schema validation: `npm install ajv`\r\n- **File uploads** – Install `multer` only if you need file uploads: `npm install multer`\r\n\r\nSockress supports both ESM and CommonJS:\r\n\r\n```ts\r\n// ESM\r\nimport { sockress, createUploader, serveStatic, Router } from 'sockress';\r\n\r\n// CommonJS\r\nconst { sockress, createUploader, serveStatic, Router } = require('sockress');\r\n```\r\n\r\n---\r\n\r\n## Quick Start\r\n\r\n```ts\r\nimport { sockress } from 'sockress';\r\n\r\nconst app = sockress();\r\n\r\napp.use((req, res, next) => {\r\n  console.log(`[${req.method}] ${req.path}`);\r\n  next();\r\n});\r\n\r\napp.get('/ping', (req, res) => {\r\n  res.json({ ok: true, via: 'sockress' });\r\n});\r\n\r\napp.listen(5051, (err, address) => {\r\n  if (err) throw err;\r\n  console.log(`Sockress listening on ${address?.url}`);\r\n});\r\n```\r\n\r\n---\r\n\r\n## Routing\r\n\r\nSockress supports all standard HTTP methods:\r\n\r\n```ts\r\napp.get('/users', (req, res) => {\r\n  res.json({ users: [] });\r\n});\r\n\r\napp.post('/users', (req, res) => {\r\n  const { name, email } = req.body;\r\n  res.json({ id: 1, name, email });\r\n});\r\n\r\napp.put('/users/:id', (req, res) => {\r\n  const { id } = req.params;\r\n  res.json({ id, updated: true });\r\n});\r\n\r\napp.patch('/users/:id', (req, res) => {\r\n  res.json({ patched: true });\r\n});\r\n\r\napp.delete('/users/:id', (req, res) => {\r\n  res.status(204).end();\r\n});\r\n\r\napp.all('/catch-all', (req, res) => {\r\n  res.json({ method: req.method });\r\n});\r\n```\r\n\r\nRoute parameters are available via `req.params`:\r\n\r\n```ts\r\napp.get('/users/:userId/posts/:postId', (req, res) => {\r\n  const { userId, postId } = req.params;\r\n  res.json({ userId, postId });\r\n});\r\n```\r\n\r\n### Chainable Routes\r\n\r\nUse `app.route()` for chainable route handlers:\r\n\r\n```ts\r\napp.route('/users')\r\n  .get((req, res) => {\r\n    res.json({ users: [] });\r\n  })\r\n  .post((req, res) => {\r\n    const { name } = req.body;\r\n    res.json({ id: 1, name });\r\n  })\r\n  .put((req, res) => {\r\n    res.json({ updated: true });\r\n  });\r\n```\r\n\r\n---\r\n\r\n## Router\r\n\r\nCreate modular routers for better code organization:\r\n\r\n```ts\r\nimport { sockress, Router } from 'sockress';\r\n\r\nconst app = sockress();\r\nconst userRouter = Router();\r\n\r\nuserRouter.get('/', (req, res) => {\r\n  res.json({ users: [] });\r\n});\r\n\r\nuserRouter.get('/:id', (req, res) => {\r\n  res.json({ id: req.params.id });\r\n});\r\n\r\nuserRouter.post('/', (req, res) => {\r\n  res.json({ created: true });\r\n});\r\n\r\napp.use('/api/users', userRouter);\r\n```\r\n\r\nRouters support all the same methods as the main app:\r\n\r\n```ts\r\nconst apiRouter = Router();\r\n\r\napiRouter.use((req, res, next) => {\r\n  req.context.apiVersion = 'v1';\r\n  next();\r\n});\r\n\r\napiRouter.get('/status', (req, res) => {\r\n  res.json({ status: 'ok' });\r\n});\r\n\r\napp.use('/api', apiRouter);\r\n```\r\n\r\n---\r\n\r\n## Middleware\r\n\r\nMiddleware works the same way as Express. Use `app.use()` to register global or path-scoped middleware:\r\n\r\n```ts\r\n// Global middleware\r\napp.use((req, res, next) => {\r\n  console.log(`${req.method} ${req.path}`);\r\n  next();\r\n});\r\n\r\n// Path-scoped middleware\r\napp.use('/api', (req, res, next) => {\r\n  req.context.apiVersion = 'v1';\r\n  next();\r\n});\r\n\r\n// Multiple middleware\r\napp.use('/secure', authMiddleware, validateMiddleware, handler);\r\n\r\n// Use Router as middleware\r\nconst router = Router();\r\nrouter.get('/users', getUsers);\r\napp.use('/api', router);\r\n```\r\n\r\n### Parameter Middleware\r\n\r\nUse `app.param()` to add middleware for specific route parameters:\r\n\r\n```ts\r\napp.param('userId', async (req, res, next) => {\r\n  const user = await findUser(req.params.userId);\r\n  if (!user) {\r\n    return res.status(404).json({ error: 'User not found' });\r\n  }\r\n  req.context.user = user;\r\n  next();\r\n});\r\n\r\napp.get('/users/:userId', (req, res) => {\r\n  res.json({ user: req.context.user });\r\n});\r\n```\r\n\r\n### Validation\r\n\r\nRequest and response validation uses **JSON Schema** via [Ajv](https://ajv.js.org/) (optional peer). **Validation is optional.** You can define routes with just a handler and use `req.body` / `res.json(object)` as usual. When you want schema validation, pass a route options object with `schema` before the handler (e.g. `app.post('/', { schema: { body: ... } }, handler)`), or use the `validate(schema)` middleware.\r\n\r\nInstall Ajv to use validation:\r\n\r\n```bash\r\nnpm install ajv\r\n```\r\n\r\nPass a **route options** object with `schema` anywhere in the handler list (same as middleware). Sockress detects the object and runs validation at that position. The schema can define `body`, `query`, `params`, and `headers` (each a JSON Schema object). Validation runs in order (params → query → headers → body). On failure, Sockress sends **400 Bad Request** with a body like `{ statusCode: 400, error: 'Bad Request', message, validationContext, details }`.\r\n\r\n```ts\r\nimport { sockress } from 'sockress';\r\n\r\nconst app = sockress();\r\n\r\napp.post('/users', {\r\n  schema: {\r\n    body: {\r\n      type: 'object',\r\n      required: ['name', 'email'],\r\n      properties: {\r\n        name: { type: 'string' },\r\n        email: { type: 'string', format: 'email' }\r\n      }\r\n    }\r\n  }\r\n}, (req, res) => {\r\n  // req.body is validated and type-coerced (e.g. query/params)\r\n  res.json({ id: 1, name: req.body.name, email: req.body.email });\r\n});\r\n```\r\n\r\nWith `attachValidation: true` in the options, validation failures do not send a response; instead the error is attached to `req.validationError` and passed to `next(err)`.\r\n\r\n```ts\r\napp.post('/users', {\r\n  schema: {\r\n    body: { type: 'object', required: ['name'], properties: { name: { type: 'string' } } }\r\n  },\r\n  attachValidation: true\r\n}, (req, res, next) => {\r\n  if (req.validationError) {\r\n    return next(req.validationError);\r\n  }\r\n  res.json({ created: true });\r\n});\r\n```\r\n\r\nYou can also use `validate(schema)` as middleware: `app.post('/users', app.validate({ body: ... }), handler)`.\r\n\r\n**Shared schemas** – Use `app.addSchema(schema)` to register a schema with a `$id`; then use `$ref` in your route schemas so Ajv can resolve references.\r\n\r\n```ts\r\napp.addSchema({\r\n  $id: 'https://example.com/schemas/user.json',\r\n  type: 'object',\r\n  properties: { name: { type: 'string' }, email: { type: 'string' } }\r\n});\r\napp.post('/users', {\r\n  schema: { body: { $ref: 'https://example.com/schemas/user.json' } }\r\n}, (req, res) => res.json(req.body));\r\n```\r\n\r\n**Response schema** – You can optionally validate and strip response payloads with a `response` key (e.g. `{ 200: schemaObj, default: schemaObj }`). Only properties declared in the schema are sent (`removeAdditional`).\r\n\r\nValidation works for both **HTTP** and **WebSocket** transports; it uses only `req.body`, `req.query`, `req.params`, and `req.headers`, so the same middleware fits both pipelines.\r\n\r\n---\r\n\r\n### Error Handling\r\n\r\nError handlers have 4 parameters `(err, req, res, next)`:\r\n\r\n```ts\r\napp.use((err, req, res, next) => {\r\n  console.error(err);\r\n  res.status(500).json({ error: err.message });\r\n});\r\n```\r\n\r\n---\r\n\r\n## Realtime Events (emit / on)\r\n\r\nSockress supports **custom realtime events** over WebSocket in addition to request/response routes.\r\n\r\n### Server -> Clients (broadcast)\r\n\r\n```ts\r\n// Broadcast to all connected websocket clients\r\napp.emit('message', 'hello from server');\r\napp.emit('any_payload', { ok: true, list: [1, 2, 3] });\r\n```\r\n\r\n### Client -> Server (listen)\r\n\r\n```ts\r\n// Listen to a specific event\r\napp.on('message', (data, ctx) => {\r\n  console.log('message:', data);\r\n  console.log('from ip:', ctx.ip);\r\n\r\n  // Reply back to just this socket if you want:\r\n  app.emitTo(ctx.socket, 'message', { echo: data });\r\n});\r\n\r\n// Listen to all events\r\napp.on('*', ({ event, data }, ctx) => {\r\n  console.log('event:', event, 'data:', data);\r\n});\r\n```\r\n\r\n### Socket-route -> same socket (optional helper)\r\n\r\nInside a socket request handler you can emit back to the same connected socket using:\r\n\r\n```ts\r\napp.post('/ping', (req, res) => {\r\n  res.emitEvent('pong', { ok: true });\r\n  res.json({ ok: true });\r\n});\r\n```\r\n\r\n---\r\n\r\n## Response Methods\r\n\r\n### Basic Methods\r\n\r\n```ts\r\nres.status(404)              // Set status code\r\nres.set('X-Custom', 'value') // Set header\r\nres.append('X-Other', 'val') // Append to header\r\nres.json({ data: 'value' })  // Send JSON\r\nres.send('Hello')            // Send response (auto-detects type)\r\nres.end()                    // End response\r\n```\r\n\r\n### Redirect\r\n\r\n```ts\r\n// Simple redirect (302)\r\nres.redirect('/login');\r\n\r\n// Redirect with status code\r\nres.redirect(301, '/new-url');\r\n\r\n// Or status first\r\nres.redirect(301, '/permanent-redirect');\r\n```\r\n\r\n### Send File\r\n\r\n```ts\r\n// Send file as response\r\nawait res.sendFile('/path/to/file.pdf');\r\n\r\n// With options\r\nawait res.sendFile('file.pdf', {\r\n  root: '/uploads',\r\n  headers: { 'X-Custom': 'value' }\r\n});\r\n```\r\n\r\n### Download File\r\n\r\n```ts\r\n// Download file\r\nawait res.download('/path/to/file.pdf');\r\n\r\n// With custom filename\r\nawait res.download('/path/to/file.pdf', 'custom-name.pdf');\r\n\r\n// With options\r\nawait res.download('file.pdf', 'download.pdf', {\r\n  root: '/uploads',\r\n  headers: { 'X-Custom': 'value' }\r\n});\r\n```\r\n\r\n### Send Status\r\n\r\n```ts\r\n// Send status code with default text\r\nres.sendStatus(404); // Sends \"Not Found\"\r\nres.sendStatus(200); // Sends \"OK\"\r\n```\r\n\r\n### Content Negotiation\r\n\r\n```ts\r\nres.format({\r\n  'text/html': (req, res) => {\r\n    res.send('<h1>HTML</h1>');\r\n  },\r\n  'application/json': (req, res) => {\r\n    res.json({ format: 'json' });\r\n  },\r\n  'default': (req, res) => {\r\n    res.send('Default format');\r\n  }\r\n}, req);\r\n```\r\n\r\n### Location Header\r\n\r\n```ts\r\nres.location('/new-path');\r\nres.status(301).end();\r\n```\r\n\r\n### Vary Header\r\n\r\n```ts\r\nres.vary('Accept');\r\nres.vary('User-Agent');\r\n```\r\n\r\n---\r\n\r\n## Request Methods & Properties\r\n\r\n### Request Properties\r\n\r\n```ts\r\nreq.id          // unique request ID\r\nreq.method      // HTTP method (GET, POST, etc.)\r\nreq.path        // request path\r\nreq.query       // parsed query string (object)\r\nreq.params       // route parameters (object)\r\nreq.headers     // request headers (object)\r\nreq.body        // parsed request body\r\nreq.cookies      // parsed cookies (object)\r\nreq.file         // first uploaded file (if any)\r\nreq.files        // all uploaded files (object mapping field names to arrays)\r\nreq.type         // 'http' or 'socket'\r\nreq.ip           // client IP address\r\nreq.protocol     // 'http', 'https', 'ws', or 'wss'\r\nreq.secure       // boolean indicating if connection is secure\r\nreq.hostname     // request hostname\r\nreq.originalUrl  // original request URL\r\nreq.baseUrl      // base URL for router\r\nreq.subdomains   // array of subdomains\r\nreq.context      // plain object for passing data through middleware\r\nreq.raw          // IncomingMessage (HTTP only)\r\n```\r\n\r\n### Request Methods\r\n\r\n```ts\r\n// Get header value\r\nconst auth = req.get('authorization');\r\n\r\n// Get route parameter\r\nconst userId = req.param('userId');\r\nconst userIdWithDefault = req.param('userId', 'default');\r\n\r\n// Content negotiation\r\nif (req.accepts('json')) {\r\n  res.json({ data: 'value' });\r\n}\r\n\r\nconst accepted = req.accepts(['json', 'html']); // returns 'json' or 'html' or false\r\n\r\n// Content type check\r\nif (req.is('application/json')) {\r\n  // handle JSON\r\n}\r\n\r\nconst isJson = req.is(['json', 'html']); // returns 'json' or 'html' or false or null\r\n```\r\n\r\n---\r\n\r\n## File Uploads\r\n\r\n**Note:** File upload support requires the `multer` package as an optional peer dependency. Install it separately if you need file uploads:\r\n\r\n```bash\r\nnpm install multer\r\n```\r\n\r\nUse `createUploader()` to handle file uploads. It works for both HTTP and WebSocket transports:\r\n\r\n```ts\r\nimport { sockress, createUploader } from 'sockress';\r\nimport path from 'path';\r\n\r\nconst app = sockress();\r\nconst uploadsDir = path.join(process.cwd(), 'uploads');\r\n\r\nconst uploader = createUploader({\r\n  dest: uploadsDir,\r\n  preserveFilename: true,\r\n  limits: { fileSize: 2 * 1024 * 1024 } // 2MB\r\n});\r\n\r\n// Single file upload\r\napp.post('/avatar', uploader.single('avatar'), (req, res) => {\r\n  if (!req.file) {\r\n    return res.status(400).json({ error: 'avatar missing' });\r\n  }\r\n  res.json({ path: req.file.path, name: req.file.name });\r\n});\r\n\r\n// Multiple files\r\napp.post('/gallery', uploader.array('images', 5), (req, res) => {\r\n  if (!req.files || req.files.length === 0) {\r\n    return res.status(400).json({ error: 'images missing' });\r\n  }\r\n  res.json({ count: req.files.length });\r\n});\r\n\r\n// Multiple fields\r\napp.post('/documents', uploader.fields([\r\n  { name: 'avatar', maxCount: 1 },\r\n  { name: 'documents', maxCount: 10 }\r\n]), (req, res) => {\r\n  const avatar = req.files?.avatar?.[0];\r\n  const documents = req.files?.documents || [];\r\n  res.json({ avatar, documents: documents.length });\r\n});\r\n\r\n// Any files\r\napp.post('/upload', uploader.any(), (req, res) => {\r\n  const files = req.files || {};\r\n  res.json({ files: Object.keys(files) });\r\n});\r\n```\r\n\r\nUploaded files are available via:\r\n- `req.file` - first uploaded file (when using `single()`)\r\n- `req.files` - object mapping field names to arrays of files\r\n\r\nEach file has:\r\n- `fieldName` - form field name\r\n- `name` - original filename\r\n- `type` - MIME type\r\n- `size` - file size in bytes\r\n- `buffer` - file contents as Buffer\r\n- `path` - file path on disk (if `dest` was configured)\r\n- `lastModified` - file last modified timestamp (if available)\r\n\r\n---\r\n\r\n## Static File Serving\r\n\r\nUse `serveStatic()` to serve static files:\r\n\r\n```ts\r\nimport { sockress, serveStatic } from 'sockress';\r\nimport path from 'path';\r\n\r\nconst app = sockress();\r\nconst uploadsDir = path.join(process.cwd(), 'uploads');\r\n\r\napp.use('/uploads', serveStatic(uploadsDir, {\r\n  stripPrefix: '/uploads',\r\n  maxAge: 60_000, // cache for 60 seconds\r\n  index: 'index.html' // default file for directories\r\n}));\r\n```\r\n\r\nOptions:\r\n- `stripPrefix` - remove this prefix from the request path before resolving files\r\n- `maxAge` - cache control max age in milliseconds\r\n- `index` - default file to serve for directories (default: `'index.html'`)\r\n\r\nYou can also use the convenience method:\r\n\r\n```ts\r\napp.useStatic('/uploads', uploadsDir, { maxAge: 60_000 });\r\n```\r\n\r\n---\r\n\r\n## Configuration\r\n\r\nCreate a Sockress app with custom options:\r\n\r\n```ts\r\nconst app = sockress({\r\n  cors: {\r\n    origin: ['http://localhost:3000', 'https://example.com'],\r\n    credentials: true,\r\n    methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],\r\n    allowedHeaders: ['Content-Type', 'Authorization'],\r\n    exposedHeaders: ['X-Custom-Header'],\r\n    maxAge: 600\r\n  },\r\n  socket: {\r\n    path: '/sockress',           // WebSocket path (default: '/sockress')\r\n    heartbeatInterval: 30_000,    // heartbeat interval in ms (default: 30000)\r\n    idleTimeout: 120_000          // idle timeout in ms (default: 120000)\r\n  },\r\n  bodyLimit: 1_000_000,         // max body size in bytes (default: 1000000)\r\n  logging: false                 // logging level: false | 'error' | 'warn' | 'info' | 'debug' (default: false)\r\n});\r\n```\r\n\r\n### Logging\r\n\r\nControl internal Sockress logging with the `logging` option:\r\n\r\n```ts\r\n// Disable all logs (default)\r\nconst app = sockress({ logging: false });\r\n\r\n// Only show errors\r\nconst app = sockress({ logging: 'error' });\r\n\r\n// Show warnings and errors\r\nconst app = sockress({ logging: 'warn' });\r\n\r\n// Show info, warnings, and errors\r\nconst app = sockress({ logging: 'info' });\r\n\r\n// Show all logs including debug\r\nconst app = sockress({ logging: 'debug' });\r\n```\r\n\r\nLog levels:\r\n- `false` - No logs (default)\r\n- `'error'` - Only error logs\r\n- `'warn'` - Warning and error logs\r\n- `'info'` - Info, warning, and error logs\r\n- `'debug'` - All logs (most verbose)\r\n\r\n---\r\n\r\n## Listening\r\n\r\nStart the server with `app.listen()`:\r\n\r\n```ts\r\n// Simple\r\napp.listen(5051);\r\n\r\n// With callback\r\napp.listen(5051, (err, address) => {\r\n  if (err) {\r\n    console.error('Failed to start server:', err);\r\n    return;\r\n  }\r\n  console.log(`Server listening on ${address?.url}`);\r\n});\r\n\r\n// With host\r\napp.listen(5051, '0.0.0.0', (err, address) => {\r\n  if (err) throw err;\r\n  console.log(`Server listening on ${address?.url}`);\r\n});\r\n```\r\n\r\nThe callback receives:\r\n- `err` - Error if server failed to start, or `null`\r\n- `address` - Server address info with `hostname` and `url` properties\r\n\r\nSockress automatically registers shutdown hooks for `beforeExit`, `SIGINT`, and `SIGTERM` to gracefully close the server.\r\n\r\n---\r\n\r\n## Manual Shutdown\r\n\r\nYou can manually close the server:\r\n\r\n```ts\r\nconst server = app.listen(5051);\r\n// ... later\r\nawait app.close();\r\n```\r\n\r\n---\r\n\r\n## Complete Example\r\n\r\n```ts\r\nimport { sockress, Router, createUploader } from 'sockress';\r\nimport path from 'path';\r\n\r\nconst app = sockress();\r\nconst uploader = createUploader({ dest: './uploads' });\r\n\r\n// Parameter middleware\r\napp.param('userId', async (req, res, next) => {\r\n  const user = await findUser(req.params.userId);\r\n  if (user) {\r\n    req.context.user = user;\r\n    next();\r\n  } else {\r\n    res.status(404).json({ error: 'User not found' });\r\n  }\r\n});\r\n\r\n// Router\r\nconst apiRouter = Router();\r\napiRouter.use((req, res, next) => {\r\n  req.context.apiVersion = 'v1';\r\n  next();\r\n});\r\n\r\napiRouter.route('/users/:userId')\r\n  .get((req, res) => {\r\n    res.json({ user: req.context.user });\r\n  })\r\n  .put((req, res) => {\r\n    // Update user\r\n    res.json({ updated: true });\r\n  });\r\n\r\napp.use('/api', apiRouter);\r\n\r\n// File upload\r\napp.post('/avatar', uploader.single('avatar'), (req, res) => {\r\n  if (!req.file) {\r\n    return res.status(400).json({ error: 'No file' });\r\n  }\r\n  res.json({ path: req.file.path });\r\n});\r\n\r\n// Redirect\r\napp.get('/old', (req, res) => {\r\n  res.redirect(301, '/new');\r\n});\r\n\r\n// Download\r\napp.get('/download/:file', async (req, res) => {\r\n  await res.download(`./files/${req.params.file}`);\r\n});\r\n\r\n// Content negotiation\r\napp.get('/data', (req, res) => {\r\n  res.format({\r\n    'text/html': (req, res) => res.send('<h1>HTML</h1>'),\r\n    'application/json': (req, res) => res.json({ format: 'json' }),\r\n    'default': (req, res) => res.send('Default')\r\n  }, req);\r\n});\r\n\r\napp.listen(5051, (err, address) => {\r\n  if (err) throw err;\r\n  console.log(`Server on ${address?.url}`);\r\n});\r\n```\r\n\r\n---\r\n\r\n## Companion Client\r\n\r\nPair Sockress with [`sockress-client`](https://www.npmjs.com/package/sockress-client) to get automatic socket transports, FormData serialization, and seamless HTTP fallback:\r\n\r\n```ts\r\nimport { sockressClient } from 'sockress-client';\r\n\r\nconst api = sockressClient({ baseUrl: 'http://localhost:5051' });\r\nconst response = await api.post('/api/auth/login', {\r\n  body: { email: 'user@example.com', password: 'secret' }\r\n});\r\nconsole.log(response.body.token);\r\n```\r\n\r\n---\r\n\r\n## Links\r\n\r\n- Website: [https://alsocoder.com](https://alsocoder.com)\r\n- GitHub: [https://github.com/alsocoders/sockress](https://github.com/alsocoders/sockress)\r\n- Issues: [https://github.com/alsocoders/sockress/issues](https://github.com/alsocoders/sockress/issues)\r\n\r\nPRs and feedback welcome!\r\n","readmeFilename":"README.md"}