{"_id":"@bomon/nestjs-cct-explorer","_rev":"9-6c6fe7cbc45555b4887f7c9f294a51ef","name":"@bomon/nestjs-cct-explorer","dist-tags":{"latest":"2.1.2"},"versions":{"0.1.0":{"name":"@bomon/nestjs-cct-explorer","version":"0.1.0","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","_id":"@bomon/nestjs-cct-explorer@0.1.0","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"dist":{"shasum":"84da58886ac8105f16293ef907d327b9a7e7ed19","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-0.1.0.tgz","fileCount":15,"integrity":"sha512-yJGO4IwsDwZdE56jIZzkrY7nZrX2cK7AHynDL0g3x2bsyWLYr92XtzWY8H+/qfD6Kwa76yADHLNILO0tZPVq1A==","signatures":[{"sig":"MEYCIQCXnZqryqvxNf1bdELoUq1RHftzJf+im1N1PCAu6TrIQQIhAKlab+7UlAq1qhe+35OJVT0+SY7NwEDVHTmzQzJsClC5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41994},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"336f578f005c358c6dbc7a94f9e96612d27e6bc0","scripts":{"build":"tsc && node -e \"require('fs').cpSync('src/public', 'dist/public', { recursive: true })\""},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"_npmVersion":"11.7.0","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^20.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0"},"peerDependencies":{"@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/common":"^9.0.0 || ^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-cct-explorer_0.1.0_1772448026551_0.08620204632648121","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@bomon/nestjs-cct-explorer","version":"1.1.0","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","_id":"@bomon/nestjs-cct-explorer@1.1.0","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"dist":{"shasum":"43121aaa574e3658a4cc79624ce260761454a1dd","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-1.1.0.tgz","fileCount":17,"integrity":"sha512-pgmC0jRmlOU+DxrDwWFUJgvOuVbOrRFUgnhLVlK6cTZ5OojBsy5Ue92DP4z/A+e15AlwZbfa7zptOR0GBQNjug==","signatures":[{"sig":"MEUCIQDD+0/AdrEpJPIG17Rj2FUg8yNcBU/xAlGvZPSgSmERhAIgJ20g73qpNQKgeNRvwgPHTfhOOn8C10OniFtu36nSp4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51866},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"2fafd8650821c3a488915f133870731292d367f5","scripts":{"build":"tsc && node -e \"require('fs').cpSync('src/public', 'dist/public', { recursive: true })\""},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"_npmVersion":"11.7.0","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^20.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0"},"peerDependencies":{"@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/common":"^9.0.0 || ^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-cct-explorer_1.1.0_1772519606717_0.23126268746774148","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@bomon/nestjs-cct-explorer","version":"1.1.1","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","_id":"@bomon/nestjs-cct-explorer@1.1.1","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"dist":{"shasum":"3d6c583bfe681cf107673767f2746f509067479a","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-1.1.1.tgz","fileCount":18,"integrity":"sha512-E7vSQymQNYcA758KJ/1mu3sAzuNk0eW4FVDM5riWRWvWfzzlH6xZPPKb82SIRpYPPgPj9o83816oU3Xa5gmBlQ==","signatures":[{"sig":"MEUCIQC4shRE3OrcFQ2C6+godb9Wb3XqXOWPGbo+/DDpsFVtMgIgSSj/RIY3yHkWfPeUF6faXHSkNepkRoCkifmyh4cmGLk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57039},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"7557363fb68be8f6c43b8510f1440151cd95c21d","scripts":{"build":"tsc && node -e \"require('fs').cpSync('src/public', 'dist/public', { recursive: true })\""},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"_npmVersion":"11.7.0","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.0","@types/node":"^20.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0"},"peerDependencies":{"@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/common":"^9.0.0 || ^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-cct-explorer_1.1.1_1772535011897_0.28047124029704285","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@bomon/nestjs-cct-explorer","version":"2.0.0","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","_id":"@bomon/nestjs-cct-explorer@2.0.0","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"dist":{"shasum":"49769728d058d30604f843a337e92b6ed7df8c50","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-2.0.0.tgz","fileCount":20,"integrity":"sha512-pt0ERtXzB/AJHidUrDIRcZL+kOFYLAJ7MpwB8Q1wm0a7IvjRaDgEIRylS12HERNf3mb4lBa/PcQV+p4SdnJ1CA==","signatures":[{"sig":"MEUCIGXQI7ztXb9B8GtUEAN3LOxzG9/kKwX5XV8sjaJs0iIJAiEA3nR0hc7lNf6Wci0dah/kjUZqKLoOErLO78egqgCVEJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218289},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"8abe5b1375667c04e790603c3b294010e744664b","scripts":{"build":"tsc && vite build","build:browser":"vite build"},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"_npmVersion":"11.7.0","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.9.0","@types/node":"^20.0.0","tailwindcss":"^4.0.0","@nestjs/core":"^10.0.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","@types/react-dom":"^18.3.0","@tailwindcss/vite":"^4.0.0","@nestjs/serve-static":"^5.0.0","@vitejs/plugin-react":"^4.3.0"},"peerDependencies":{"@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/common":"^9.0.0 || ^10.0.0","@nestjs/serve-static":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-cct-explorer_2.0.0_1773804812557_0.6005811528409057","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@bomon/nestjs-cct-explorer","version":"2.0.1","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","_id":"@bomon/nestjs-cct-explorer@2.0.1","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"dist":{"shasum":"2302aac42a4f74ece4a157c2f8243eb5cdb0eb6f","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-2.0.1.tgz","fileCount":20,"integrity":"sha512-YWDu2q5rnrJcL5OAMRsTQAS+jILf8VPrzO4sXQxryhwEWLLeaZfA9srCCfZNaGqnX9XsiFbHcQfemhN9956Cwg==","signatures":[{"sig":"MEUCIQCgmEIiqQqS/s1YCWyzEwZWqrDcRLscWuwjDcIOJkL9hgIgGR/btrT1TydfYXAMcWJM/fWOEu5V6LloE066TUnQQRA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218275},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"8abe5b1375667c04e790603c3b294010e744664b","scripts":{"build":"tsc && vite build","build:browser":"vite build"},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"_npmVersion":"11.7.0","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.9.0","@types/node":"^20.0.0","tailwindcss":"^4.0.0","@nestjs/core":"^10.0.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","@types/react-dom":"^18.3.0","@tailwindcss/vite":"^4.0.0","@nestjs/serve-static":"^5.0.0","@vitejs/plugin-react":"^4.3.0"},"peerDependencies":{"@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/common":"^9.0.0 || ^10.0.0","@nestjs/serve-static":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-cct-explorer_2.0.1_1773806726421_0.3264522165824344","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@bomon/nestjs-cct-explorer","version":"2.0.2","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","_id":"@bomon/nestjs-cct-explorer@2.0.2","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"dist":{"shasum":"70da7e90c0d4b70428e93d4cea39081d0cb15054","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-2.0.2.tgz","fileCount":20,"integrity":"sha512-QYhZPCYJTf/L6qBeUPO5kXVDXJN0eboH/s5Sm+O1MqDdKfr5lJkeOnnLeqKU7z2OLLON4GX+LEaBpzEIviywjQ==","signatures":[{"sig":"MEQCIGZ0BetrV9cF/KGefldzZCzxqg+HrOhVjEP8rm/crvaNAiAWKpdEQLtaSwYmFCphpiGN5j1JbOUKsB+Hh76dd9CtPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218386},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"8abe5b1375667c04e790603c3b294010e744664b","scripts":{"build":"tsc && vite build","build:browser":"vite build"},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"_npmVersion":"11.7.0","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.9.0","@types/node":"^20.0.0","tailwindcss":"^4.0.0","@nestjs/core":"^10.0.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","@types/react-dom":"^18.3.0","@tailwindcss/vite":"^4.0.0","@nestjs/serve-static":"^5.0.0","@vitejs/plugin-react":"^4.3.0"},"peerDependencies":{"@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/common":"^9.0.0 || ^10.0.0","@nestjs/serve-static":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-cct-explorer_2.0.2_1773807759185_0.7078617987827658","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@bomon/nestjs-cct-explorer","version":"2.1.0","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","_id":"@bomon/nestjs-cct-explorer@2.1.0","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"dist":{"shasum":"19d963d6f9b65f37f09c48601328c203ee0add50","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-2.1.0.tgz","fileCount":26,"integrity":"sha512-u0cdgPySlODjVfuD1ZbSMLVXo5dInrFivNnQDHfWI7uT9bIIWbwTU4FOKnqUQBFSzGMYqdUgiscLUr6P82+54A==","signatures":[{"sig":"MEYCIQCw0IhfNdtc2AYJO55Gb4AxV3F8Flwfgu7AYpw71eue4gIhANCkWslcLp9J4fIYNJmTt7K3DuPkCRADB66r0hJV+/Bi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232954},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"e07cd3f371b9034fef5065bdfdaeba1c344495fe","scripts":{"build":"tsc && vite build","build:browser":"vite build"},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"_npmVersion":"11.7.0","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.9.0","@types/node":"^20.0.0","tailwindcss":"^4.0.0","@nestjs/core":"^10.0.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","@types/react-dom":"^18.3.0","@tailwindcss/vite":"^4.0.0","@nestjs/serve-static":"^5.0.0","@vitejs/plugin-react":"^4.3.0"},"peerDependencies":{"@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/common":"^9.0.0 || ^10.0.0","@nestjs/serve-static":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-cct-explorer_2.1.0_1777361644502_0.44686349801732983","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@bomon/nestjs-cct-explorer","version":"2.1.1","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","_id":"@bomon/nestjs-cct-explorer@2.1.1","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"dist":{"shasum":"3463350be2eece4c299af7e7a0a1e27d25bc36e8","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-2.1.1.tgz","fileCount":26,"integrity":"sha512-obfgAvC88La5DGFS/eIgiSGU6EtH4pM4TXw/+ydAl4xvjFtl6EQniQBxBozUWIPRsMn3avMjg0sEbIkn4KtsGg==","signatures":[{"sig":"MEUCIQCHqYYpfgUquw8Dc7LISOxzApRYA03+HfbjajW5XGhwVgIgQM+Os+pqN5549NPxkKq0T72Kr8qWu+k3c9+KVEIblik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233954},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"e03e8398e76b0cd133429d11ff00353d84a32936","scripts":{"build":"tsc && vite build","build:browser":"vite build"},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"_npmVersion":"11.7.0","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","directories":{},"_nodeVersion":"25.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^18.3.0","react-dom":"^18.3.0","typescript":"^5.9.0","@types/node":"^20.0.0","tailwindcss":"^4.0.0","@nestjs/core":"^10.0.0","@types/react":"^18.3.0","lucide-react":"^0.460.0","@nestjs/common":"^10.0.0","@types/express":"^4.17.0","@types/react-dom":"^18.3.0","@tailwindcss/vite":"^4.0.0","@nestjs/serve-static":"^5.0.0","@vitejs/plugin-react":"^4.3.0"},"peerDependencies":{"@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/common":"^9.0.0 || ^10.0.0","@nestjs/serve-static":"^4.0.0 || ^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-cct-explorer_2.1.1_1777373866190_0.8421908138564194","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@bomon/nestjs-cct-explorer","version":"2.1.2","description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","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 && vite build","build:browser":"vite build"},"keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"author":"","license":"ISC","publishConfig":{"access":"public"},"peerDependencies":{"@nestjs/common":"^9.0.0 || ^10.0.0","@nestjs/core":"^9.0.0 || ^10.0.0","@nestjs/serve-static":"^4.0.0 || ^5.0.0"},"devDependencies":{"typescript":"^5.9.0","@types/node":"^20.0.0","@types/express":"^4.17.0","@nestjs/common":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/serve-static":"^5.0.0","vite":"^6.0.0","@vitejs/plugin-react":"^4.3.0","react":"^18.3.0","react-dom":"^18.3.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","tailwindcss":"^4.0.0","@tailwindcss/vite":"^4.0.0","lucide-react":"^0.460.0"},"gitHead":"e03e8398e76b0cd133429d11ff00353d84a32936","_id":"@bomon/nestjs-cct-explorer@2.1.2","_nodeVersion":"25.3.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-A7kjUg4x7DP2gwShsciQaHwsixsBPcXfSsJeT5zVPebRtZUPsvtZBakIeg2m6Q/8S/l6IylSpeWHd5GUj0E+6w==","shasum":"d953026dc82454f7aeadc250ef4016f7ac0a87c9","tarball":"https://registry.npmjs.org/@bomon/nestjs-cct-explorer/-/nestjs-cct-explorer-2.1.2.tgz","fileCount":26,"unpackedSize":234022,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBY3e5paWMQ1uStftEhTqV1DDXJkcAPRhrvCkrAo5B8cAiEA47H0TsfgSwnqwMHfz4AwzW58+/k+Dr+hEcYsD48aIbE="}]},"_npmUser":{"name":"ranmeizi","email":"360969885@qq.com"},"directories":{},"maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs-cct-explorer_2.1.2_1777458742011_0.47404319422258356"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-02T10:40:26.463Z","modified":"2026-04-29T10:32:22.294Z","0.1.0":"2026-03-02T10:40:26.718Z","1.1.0":"2026-03-03T06:33:26.860Z","1.1.1":"2026-03-03T10:50:12.044Z","2.0.0":"2026-03-18T03:33:32.715Z","2.0.1":"2026-03-18T04:05:26.641Z","2.0.2":"2026-03-18T04:22:39.345Z","2.1.0":"2026-04-28T07:34:04.660Z","2.1.1":"2026-04-28T10:57:46.342Z","2.1.2":"2026-04-29T10:32:22.154Z"},"license":"ISC","keywords":["nestjs","cdp","puppeteer","socket.io","file-browser"],"description":"NestJS 模块：封装 CDP client 的设备资源浏览器 HTTP 接口与 /browser 页面","maintainers":[{"name":"ranmeizi","email":"360969885@qq.com"}],"readme":"# @bomon/nestjs-cct-explorer\n\nNestJS 模块：为 CDP Client 网关提供设备资源浏览器 HTTP 接口与 `/browser` 页面。\n\n**English** · [README (English)](readme.en.md)\n\n## 安装\n\n```bash\npnpm add @bomon/nestjs-cct-explorer\n# 或\nnpm i @bomon/nestjs-cct-explorer\n```\n\n## 使用\n\n1. 在你的网关项目中实现 `DeviceGateway` 接口（例如基于 Socket.IO 转发到设备）。\n2. 在根模块中通过 `forRoot` 传入你的网关类（需实现 `DeviceGateway`）：\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { CctExplorerModule } from '@bomon/nestjs-cct-explorer';\nimport { SocketIoDeviceGateway } from './socket-io-device.gateway'; // 你的实现\n\n@Module({\n  imports: [\n    CctExplorerModule.forRoot({\n      deviceGatewayClass: SocketIoDeviceGateway, // 必填\n      pathPrefix: '', // 可选，例如 'cct' 时需配合挂载路径\n      scriptQueuePollIntervalMs: 1000, // 可选，默认 1000。模块内定时向所有设备拉取 script_queue 并缓存，GET devices 会带上 scriptQueue/queueUpdatedAt/queueError；设为 0 则关闭轮询\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n3. 若使用全局前缀（如 `setGlobalPrefix('cct')`），则访问 `http://localhost:3000/cct/browser`，页面内 API 使用相对路径，会自动请求 `/cct/devices`、`/cct/fs/*` 等。\n\n## 路由\n\n| 路径 | 方法 | 说明 |\n|------|------|------|\n| `/browser`、`/browser/` | GET | 资源浏览器单页（Vite + React 构建，由 ServeStaticModule 提供） |\n| `/devices` | GET | 设备列表。当 `scriptQueuePollIntervalMs > 0` 且网关实现 `getScriptQueue` 时，每个设备会附带 `scriptQueue`、`queueUpdatedAt`、`queueError`（模块内定时轮询各设备并缓存） |\n| `/scripts/queue` | GET | 单设备脚本队列：`?device=设备名`，返回 `{ running, pending, capacity }`（有缓存时优先返回缓存，需网关实现 `getScriptQueue`） |\n| `/scripts/interrupt` | POST | 中断运行中脚本：`{ device, jobId }`，需网关实现 `interruptScript` |\n| `/scripts/undo` | POST | 撤销排队/运行中任务：`{ device, jobId }`，需网关实现 `undoScript` |\n| `/fs/dir` | GET | 读目录 |\n| `/fs/file` | GET | 读文件 |\n| `/fs/file` | DELETE | 删文件 |\n| `/fs/file` | POST | 写文件（需网关实现 writeFile） |\n\n## 依赖\n\n需实现并注入 `DeviceGateway`（见包内 `device-gateway.interface.ts`）。若需资源浏览器中的「脚本队列」展示，需实现可选方法 `getScriptQueue(device: string): Promise<ScriptQueueSnapshot>`。若需「中断」「撤销」按钮，需实现 `interruptScript` 与 `undoScript`。\n\n## Action 封装服务（对外调用）\n\n模块提供 `CctActionsService`，用于将「下发脚本 + 等待 `report_result` 回报」封装成可 `await` 的 Action：\n\n- `runLocalScriptAction(device, { filename, params? }, { timeoutMs? })`\n- `runRemoteScriptAction(device, { raw, params? }, { timeoutMs? })`\n\n要启用该能力，你的 `DeviceGateway` 需额外实现可选方法：\n\n- `execLocalScript` / `execRemoteScript`（返回 `{ status, jobId }`）\n- `onReportResult`（订阅客户端 `report_result` 事件）\n\n## 构建\n\n构建时会执行 `tsc` 和 `vite build`，将 React 前端输出到 `dist/public/browser/`。发布包时需包含 `dist` 目录。\n","readmeFilename":"readme.md"}