自动化立体仓库 - WMS系统
zwl
2 天以前 909cc78ba290cefc3c4623eff234e85ca0140e6d
亚马逊对接,采用mqtt对接方式
27个文件已添加
9个文件已修改
4279 ■■■■■ 已修改文件
.gitignore 2320 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.local/mqtt-smoke/AwsIotConnectRunner.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.local/mqtt-smoke/bin/AwsIotConnectRunner$1.class 补丁 | 查看 | 原始文档 | blame | 历史
.local/mqtt-smoke/bin/AwsIotConnectRunner.class 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/MesToCombParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/ExternalTaskFacadeService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/ExternalTaskFacadeServiceImpl.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/biz/IotInstructionService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/biz/impl/IotInstructionServiceImpl.java 439 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/client/IotMqttClient.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/client/impl/PahoIotMqttClient.java 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/handler/IotInboundMessageHandler.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/handler/impl/IotInboundMessageHandlerImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/publish/IotPublishService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/publish/impl/IotPublishServiceImpl.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/task/IotPendingPublishScheduler.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/integration/iot/util/IotMqttSslUtils.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/config/IotProperties.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/constant/IotConstants.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/entity/IotFeedbackMessage.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/entity/IotInstructionMessage.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/entity/IotPublishRecord.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/entity/IotTopicConfig.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/mapper/IotPublishRecordMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/service/IotPublishRecordService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/service/impl/IotPublishRecordServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/iot/util/IotInstructionIdGenerator.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/sql/20260324_asr_iot_publish_record.sql 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/zy/integration/iot/IotSupportTest.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -33,3 +33,2323 @@
### LOG ###
stock
LOG_PATH_IS_UNDEFINED
/.local/mqtt-smoke/bin/LocalMqttSmokeRunner$1.class
/.local/mqtt-smoke/bin/LocalMqttSmokeRunner.class
/.local/mqtt-smoke/certs/ca.crt
/.local/mqtt-smoke/certs/ca.key
/.local/mqtt-smoke/certs/ca.srl
/.local/mqtt-smoke/certs/client.crt
/.local/mqtt-smoke/certs/client.csr
/.local/mqtt-smoke/certs/client.key
/.local/mqtt-smoke/certs/client_ext.cnf
/.local/mqtt-smoke/certs/server.crt
/.local/mqtt-smoke/certs/server.csr
/.local/mqtt-smoke/certs/server.key
/.local/mqtt-smoke/certs/server_ext.cnf
/.local/mqtt-smoke/messages/egress-stow.json
/.local/mqtt-smoke/mosquitto/mosquitto.conf
/.local/mqtt-smoke/classpath.txt
/.local/mqtt-smoke/LocalMqttSmokeRunner.java
/.local/node/node_modules/corepack/dist/lib/corepack.cjs
/.local/node/node_modules/corepack/dist/corepack.js
/.local/node/node_modules/corepack/dist/npm.js
/.local/node/node_modules/corepack/dist/npx.js
/.local/node/node_modules/corepack/dist/pnpm.js
/.local/node/node_modules/corepack/dist/pnpx.js
/.local/node/node_modules/corepack/dist/yarn.js
/.local/node/node_modules/corepack/dist/yarnpkg.js
/.local/node/node_modules/corepack/shims/nodewin/corepack
/.local/node/node_modules/corepack/shims/nodewin/corepack.cmd
/.local/node/node_modules/corepack/shims/nodewin/corepack.ps1
/.local/node/node_modules/corepack/shims/nodewin/npm
/.local/node/node_modules/corepack/shims/nodewin/npm.cmd
/.local/node/node_modules/corepack/shims/nodewin/npm.ps1
/.local/node/node_modules/corepack/shims/nodewin/npx
/.local/node/node_modules/corepack/shims/nodewin/npx.cmd
/.local/node/node_modules/corepack/shims/nodewin/npx.ps1
/.local/node/node_modules/corepack/shims/nodewin/pnpm
/.local/node/node_modules/corepack/shims/nodewin/pnpm.cmd
/.local/node/node_modules/corepack/shims/nodewin/pnpm.ps1
/.local/node/node_modules/corepack/shims/nodewin/pnpx
/.local/node/node_modules/corepack/shims/nodewin/pnpx.cmd
/.local/node/node_modules/corepack/shims/nodewin/pnpx.ps1
/.local/node/node_modules/corepack/shims/nodewin/yarn
/.local/node/node_modules/corepack/shims/nodewin/yarn.cmd
/.local/node/node_modules/corepack/shims/nodewin/yarn.ps1
/.local/node/node_modules/corepack/shims/nodewin/yarnpkg
/.local/node/node_modules/corepack/shims/nodewin/yarnpkg.cmd
/.local/node/node_modules/corepack/shims/nodewin/yarnpkg.ps1
/.local/node/node_modules/corepack/shims/corepack
/.local/node/node_modules/corepack/shims/corepack.cmd
/.local/node/node_modules/corepack/shims/corepack.ps1
/.local/node/node_modules/corepack/shims/npm
/.local/node/node_modules/corepack/shims/npm.cmd
/.local/node/node_modules/corepack/shims/npm.ps1
/.local/node/node_modules/corepack/shims/npx
/.local/node/node_modules/corepack/shims/npx.cmd
/.local/node/node_modules/corepack/shims/npx.ps1
/.local/node/node_modules/corepack/shims/pnpm
/.local/node/node_modules/corepack/shims/pnpm.cmd
/.local/node/node_modules/corepack/shims/pnpm.ps1
/.local/node/node_modules/corepack/shims/pnpx
/.local/node/node_modules/corepack/shims/pnpx.cmd
/.local/node/node_modules/corepack/shims/pnpx.ps1
/.local/node/node_modules/corepack/shims/yarn
/.local/node/node_modules/corepack/shims/yarn.cmd
/.local/node/node_modules/corepack/shims/yarn.ps1
/.local/node/node_modules/corepack/shims/yarnpkg
/.local/node/node_modules/corepack/shims/yarnpkg.cmd
/.local/node/node_modules/corepack/shims/yarnpkg.ps1
/.local/node/node_modules/corepack/CHANGELOG.md
/.local/node/node_modules/corepack/LICENSE.md
/.local/node/node_modules/corepack/package.json
/.local/node/node_modules/corepack/README.md
/.local/node/node_modules/npm/bin/node-gyp-bin/node-gyp
/.local/node/node_modules/npm/bin/node-gyp-bin/node-gyp.cmd
/.local/node/node_modules/npm/bin/npm
/.local/node/node_modules/npm/bin/npm.cmd
/.local/node/node_modules/npm/bin/npm.ps1
/.local/node/node_modules/npm/bin/npm-cli.js
/.local/node/node_modules/npm/bin/npm-prefix.js
/.local/node/node_modules/npm/bin/npx
/.local/node/node_modules/npm/bin/npx.cmd
/.local/node/node_modules/npm/bin/npx.ps1
/.local/node/node_modules/npm/bin/npx-cli.js
/.local/node/node_modules/npm/docs/content/commands/npm.md
/.local/node/node_modules/npm/docs/content/commands/npm-access.md
/.local/node/node_modules/npm/docs/content/commands/npm-adduser.md
/.local/node/node_modules/npm/docs/content/commands/npm-audit.md
/.local/node/node_modules/npm/docs/content/commands/npm-bugs.md
/.local/node/node_modules/npm/docs/content/commands/npm-cache.md
/.local/node/node_modules/npm/docs/content/commands/npm-ci.md
/.local/node/node_modules/npm/docs/content/commands/npm-completion.md
/.local/node/node_modules/npm/docs/content/commands/npm-config.md
/.local/node/node_modules/npm/docs/content/commands/npm-dedupe.md
/.local/node/node_modules/npm/docs/content/commands/npm-deprecate.md
/.local/node/node_modules/npm/docs/content/commands/npm-diff.md
/.local/node/node_modules/npm/docs/content/commands/npm-dist-tag.md
/.local/node/node_modules/npm/docs/content/commands/npm-docs.md
/.local/node/node_modules/npm/docs/content/commands/npm-doctor.md
/.local/node/node_modules/npm/docs/content/commands/npm-edit.md
/.local/node/node_modules/npm/docs/content/commands/npm-exec.md
/.local/node/node_modules/npm/docs/content/commands/npm-explain.md
/.local/node/node_modules/npm/docs/content/commands/npm-explore.md
/.local/node/node_modules/npm/docs/content/commands/npm-find-dupes.md
/.local/node/node_modules/npm/docs/content/commands/npm-fund.md
/.local/node/node_modules/npm/docs/content/commands/npm-help.md
/.local/node/node_modules/npm/docs/content/commands/npm-help-search.md
/.local/node/node_modules/npm/docs/content/commands/npm-hook.md
/.local/node/node_modules/npm/docs/content/commands/npm-init.md
/.local/node/node_modules/npm/docs/content/commands/npm-install.md
/.local/node/node_modules/npm/docs/content/commands/npm-install-ci-test.md
/.local/node/node_modules/npm/docs/content/commands/npm-install-test.md
/.local/node/node_modules/npm/docs/content/commands/npm-link.md
/.local/node/node_modules/npm/docs/content/commands/npm-login.md
/.local/node/node_modules/npm/docs/content/commands/npm-logout.md
/.local/node/node_modules/npm/docs/content/commands/npm-ls.md
/.local/node/node_modules/npm/docs/content/commands/npm-org.md
/.local/node/node_modules/npm/docs/content/commands/npm-outdated.md
/.local/node/node_modules/npm/docs/content/commands/npm-owner.md
/.local/node/node_modules/npm/docs/content/commands/npm-pack.md
/.local/node/node_modules/npm/docs/content/commands/npm-ping.md
/.local/node/node_modules/npm/docs/content/commands/npm-pkg.md
/.local/node/node_modules/npm/docs/content/commands/npm-prefix.md
/.local/node/node_modules/npm/docs/content/commands/npm-profile.md
/.local/node/node_modules/npm/docs/content/commands/npm-prune.md
/.local/node/node_modules/npm/docs/content/commands/npm-publish.md
/.local/node/node_modules/npm/docs/content/commands/npm-query.md
/.local/node/node_modules/npm/docs/content/commands/npm-rebuild.md
/.local/node/node_modules/npm/docs/content/commands/npm-repo.md
/.local/node/node_modules/npm/docs/content/commands/npm-restart.md
/.local/node/node_modules/npm/docs/content/commands/npm-root.md
/.local/node/node_modules/npm/docs/content/commands/npm-run-script.md
/.local/node/node_modules/npm/docs/content/commands/npm-sbom.md
/.local/node/node_modules/npm/docs/content/commands/npm-search.md
/.local/node/node_modules/npm/docs/content/commands/npm-shrinkwrap.md
/.local/node/node_modules/npm/docs/content/commands/npm-star.md
/.local/node/node_modules/npm/docs/content/commands/npm-stars.md
/.local/node/node_modules/npm/docs/content/commands/npm-start.md
/.local/node/node_modules/npm/docs/content/commands/npm-stop.md
/.local/node/node_modules/npm/docs/content/commands/npm-team.md
/.local/node/node_modules/npm/docs/content/commands/npm-test.md
/.local/node/node_modules/npm/docs/content/commands/npm-token.md
/.local/node/node_modules/npm/docs/content/commands/npm-uninstall.md
/.local/node/node_modules/npm/docs/content/commands/npm-unpublish.md
/.local/node/node_modules/npm/docs/content/commands/npm-unstar.md
/.local/node/node_modules/npm/docs/content/commands/npm-update.md
/.local/node/node_modules/npm/docs/content/commands/npm-version.md
/.local/node/node_modules/npm/docs/content/commands/npm-view.md
/.local/node/node_modules/npm/docs/content/commands/npm-whoami.md
/.local/node/node_modules/npm/docs/content/commands/npx.md
/.local/node/node_modules/npm/docs/content/configuring-npm/folders.md
/.local/node/node_modules/npm/docs/content/configuring-npm/install.md
/.local/node/node_modules/npm/docs/content/configuring-npm/npm-shrinkwrap-json.md
/.local/node/node_modules/npm/docs/content/configuring-npm/npmrc.md
/.local/node/node_modules/npm/docs/content/configuring-npm/package-json.md
/.local/node/node_modules/npm/docs/content/configuring-npm/package-lock-json.md
/.local/node/node_modules/npm/docs/content/using-npm/config.md
/.local/node/node_modules/npm/docs/content/using-npm/dependency-selectors.md
/.local/node/node_modules/npm/docs/content/using-npm/developers.md
/.local/node/node_modules/npm/docs/content/using-npm/logging.md
/.local/node/node_modules/npm/docs/content/using-npm/orgs.md
/.local/node/node_modules/npm/docs/content/using-npm/package-spec.md
/.local/node/node_modules/npm/docs/content/using-npm/registry.md
/.local/node/node_modules/npm/docs/content/using-npm/removal.md
/.local/node/node_modules/npm/docs/content/using-npm/scope.md
/.local/node/node_modules/npm/docs/content/using-npm/scripts.md
/.local/node/node_modules/npm/docs/content/using-npm/workspaces.md
/.local/node/node_modules/npm/docs/lib/index.js
/.local/node/node_modules/npm/docs/output/commands/npm.html
/.local/node/node_modules/npm/docs/output/commands/npm-access.html
/.local/node/node_modules/npm/docs/output/commands/npm-adduser.html
/.local/node/node_modules/npm/docs/output/commands/npm-audit.html
/.local/node/node_modules/npm/docs/output/commands/npm-bugs.html
/.local/node/node_modules/npm/docs/output/commands/npm-cache.html
/.local/node/node_modules/npm/docs/output/commands/npm-ci.html
/.local/node/node_modules/npm/docs/output/commands/npm-completion.html
/.local/node/node_modules/npm/docs/output/commands/npm-config.html
/.local/node/node_modules/npm/docs/output/commands/npm-dedupe.html
/.local/node/node_modules/npm/docs/output/commands/npm-deprecate.html
/.local/node/node_modules/npm/docs/output/commands/npm-diff.html
/.local/node/node_modules/npm/docs/output/commands/npm-dist-tag.html
/.local/node/node_modules/npm/docs/output/commands/npm-docs.html
/.local/node/node_modules/npm/docs/output/commands/npm-doctor.html
/.local/node/node_modules/npm/docs/output/commands/npm-edit.html
/.local/node/node_modules/npm/docs/output/commands/npm-exec.html
/.local/node/node_modules/npm/docs/output/commands/npm-explain.html
/.local/node/node_modules/npm/docs/output/commands/npm-explore.html
/.local/node/node_modules/npm/docs/output/commands/npm-find-dupes.html
/.local/node/node_modules/npm/docs/output/commands/npm-fund.html
/.local/node/node_modules/npm/docs/output/commands/npm-help.html
/.local/node/node_modules/npm/docs/output/commands/npm-help-search.html
/.local/node/node_modules/npm/docs/output/commands/npm-hook.html
/.local/node/node_modules/npm/docs/output/commands/npm-init.html
/.local/node/node_modules/npm/docs/output/commands/npm-install.html
/.local/node/node_modules/npm/docs/output/commands/npm-install-ci-test.html
/.local/node/node_modules/npm/docs/output/commands/npm-install-test.html
/.local/node/node_modules/npm/docs/output/commands/npm-link.html
/.local/node/node_modules/npm/docs/output/commands/npm-login.html
/.local/node/node_modules/npm/docs/output/commands/npm-logout.html
/.local/node/node_modules/npm/docs/output/commands/npm-ls.html
/.local/node/node_modules/npm/docs/output/commands/npm-org.html
/.local/node/node_modules/npm/docs/output/commands/npm-outdated.html
/.local/node/node_modules/npm/docs/output/commands/npm-owner.html
/.local/node/node_modules/npm/docs/output/commands/npm-pack.html
/.local/node/node_modules/npm/docs/output/commands/npm-ping.html
/.local/node/node_modules/npm/docs/output/commands/npm-pkg.html
/.local/node/node_modules/npm/docs/output/commands/npm-prefix.html
/.local/node/node_modules/npm/docs/output/commands/npm-profile.html
/.local/node/node_modules/npm/docs/output/commands/npm-prune.html
/.local/node/node_modules/npm/docs/output/commands/npm-publish.html
/.local/node/node_modules/npm/docs/output/commands/npm-query.html
/.local/node/node_modules/npm/docs/output/commands/npm-rebuild.html
/.local/node/node_modules/npm/docs/output/commands/npm-repo.html
/.local/node/node_modules/npm/docs/output/commands/npm-restart.html
/.local/node/node_modules/npm/docs/output/commands/npm-root.html
/.local/node/node_modules/npm/docs/output/commands/npm-run-script.html
/.local/node/node_modules/npm/docs/output/commands/npm-sbom.html
/.local/node/node_modules/npm/docs/output/commands/npm-search.html
/.local/node/node_modules/npm/docs/output/commands/npm-shrinkwrap.html
/.local/node/node_modules/npm/docs/output/commands/npm-star.html
/.local/node/node_modules/npm/docs/output/commands/npm-stars.html
/.local/node/node_modules/npm/docs/output/commands/npm-start.html
/.local/node/node_modules/npm/docs/output/commands/npm-stop.html
/.local/node/node_modules/npm/docs/output/commands/npm-team.html
/.local/node/node_modules/npm/docs/output/commands/npm-test.html
/.local/node/node_modules/npm/docs/output/commands/npm-token.html
/.local/node/node_modules/npm/docs/output/commands/npm-uninstall.html
/.local/node/node_modules/npm/docs/output/commands/npm-unpublish.html
/.local/node/node_modules/npm/docs/output/commands/npm-unstar.html
/.local/node/node_modules/npm/docs/output/commands/npm-update.html
/.local/node/node_modules/npm/docs/output/commands/npm-version.html
/.local/node/node_modules/npm/docs/output/commands/npm-view.html
/.local/node/node_modules/npm/docs/output/commands/npm-whoami.html
/.local/node/node_modules/npm/docs/output/commands/npx.html
/.local/node/node_modules/npm/docs/output/configuring-npm/folders.html
/.local/node/node_modules/npm/docs/output/configuring-npm/install.html
/.local/node/node_modules/npm/docs/output/configuring-npm/npm-global.html
/.local/node/node_modules/npm/docs/output/configuring-npm/npm-json.html
/.local/node/node_modules/npm/docs/output/configuring-npm/npm-shrinkwrap-json.html
/.local/node/node_modules/npm/docs/output/configuring-npm/npmrc.html
/.local/node/node_modules/npm/docs/output/configuring-npm/package-json.html
/.local/node/node_modules/npm/docs/output/configuring-npm/package-lock-json.html
/.local/node/node_modules/npm/docs/output/using-npm/config.html
/.local/node/node_modules/npm/docs/output/using-npm/dependency-selectors.html
/.local/node/node_modules/npm/docs/output/using-npm/developers.html
/.local/node/node_modules/npm/docs/output/using-npm/logging.html
/.local/node/node_modules/npm/docs/output/using-npm/orgs.html
/.local/node/node_modules/npm/docs/output/using-npm/package-spec.html
/.local/node/node_modules/npm/docs/output/using-npm/registry.html
/.local/node/node_modules/npm/docs/output/using-npm/removal.html
/.local/node/node_modules/npm/docs/output/using-npm/scope.html
/.local/node/node_modules/npm/docs/output/using-npm/scripts.html
/.local/node/node_modules/npm/docs/output/using-npm/workspaces.html
/.local/node/node_modules/npm/lib/cli/entry.js
/.local/node/node_modules/npm/lib/cli/exit-handler.js
/.local/node/node_modules/npm/lib/cli/update-notifier.js
/.local/node/node_modules/npm/lib/cli/validate-engines.js
/.local/node/node_modules/npm/lib/commands/access.js
/.local/node/node_modules/npm/lib/commands/adduser.js
/.local/node/node_modules/npm/lib/commands/audit.js
/.local/node/node_modules/npm/lib/commands/bugs.js
/.local/node/node_modules/npm/lib/commands/cache.js
/.local/node/node_modules/npm/lib/commands/ci.js
/.local/node/node_modules/npm/lib/commands/completion.js
/.local/node/node_modules/npm/lib/commands/config.js
/.local/node/node_modules/npm/lib/commands/dedupe.js
/.local/node/node_modules/npm/lib/commands/deprecate.js
/.local/node/node_modules/npm/lib/commands/diff.js
/.local/node/node_modules/npm/lib/commands/dist-tag.js
/.local/node/node_modules/npm/lib/commands/docs.js
/.local/node/node_modules/npm/lib/commands/doctor.js
/.local/node/node_modules/npm/lib/commands/edit.js
/.local/node/node_modules/npm/lib/commands/exec.js
/.local/node/node_modules/npm/lib/commands/explain.js
/.local/node/node_modules/npm/lib/commands/explore.js
/.local/node/node_modules/npm/lib/commands/find-dupes.js
/.local/node/node_modules/npm/lib/commands/fund.js
/.local/node/node_modules/npm/lib/commands/get.js
/.local/node/node_modules/npm/lib/commands/help.js
/.local/node/node_modules/npm/lib/commands/help-search.js
/.local/node/node_modules/npm/lib/commands/hook.js
/.local/node/node_modules/npm/lib/commands/init.js
/.local/node/node_modules/npm/lib/commands/install.js
/.local/node/node_modules/npm/lib/commands/install-ci-test.js
/.local/node/node_modules/npm/lib/commands/install-test.js
/.local/node/node_modules/npm/lib/commands/link.js
/.local/node/node_modules/npm/lib/commands/ll.js
/.local/node/node_modules/npm/lib/commands/login.js
/.local/node/node_modules/npm/lib/commands/logout.js
/.local/node/node_modules/npm/lib/commands/ls.js
/.local/node/node_modules/npm/lib/commands/org.js
/.local/node/node_modules/npm/lib/commands/outdated.js
/.local/node/node_modules/npm/lib/commands/owner.js
/.local/node/node_modules/npm/lib/commands/pack.js
/.local/node/node_modules/npm/lib/commands/ping.js
/.local/node/node_modules/npm/lib/commands/pkg.js
/.local/node/node_modules/npm/lib/commands/prefix.js
/.local/node/node_modules/npm/lib/commands/profile.js
/.local/node/node_modules/npm/lib/commands/prune.js
/.local/node/node_modules/npm/lib/commands/publish.js
/.local/node/node_modules/npm/lib/commands/query.js
/.local/node/node_modules/npm/lib/commands/rebuild.js
/.local/node/node_modules/npm/lib/commands/repo.js
/.local/node/node_modules/npm/lib/commands/restart.js
/.local/node/node_modules/npm/lib/commands/root.js
/.local/node/node_modules/npm/lib/commands/run-script.js
/.local/node/node_modules/npm/lib/commands/sbom.js
/.local/node/node_modules/npm/lib/commands/search.js
/.local/node/node_modules/npm/lib/commands/set.js
/.local/node/node_modules/npm/lib/commands/shrinkwrap.js
/.local/node/node_modules/npm/lib/commands/star.js
/.local/node/node_modules/npm/lib/commands/stars.js
/.local/node/node_modules/npm/lib/commands/start.js
/.local/node/node_modules/npm/lib/commands/stop.js
/.local/node/node_modules/npm/lib/commands/team.js
/.local/node/node_modules/npm/lib/commands/test.js
/.local/node/node_modules/npm/lib/commands/token.js
/.local/node/node_modules/npm/lib/commands/uninstall.js
/.local/node/node_modules/npm/lib/commands/unpublish.js
/.local/node/node_modules/npm/lib/commands/unstar.js
/.local/node/node_modules/npm/lib/commands/update.js
/.local/node/node_modules/npm/lib/commands/version.js
/.local/node/node_modules/npm/lib/commands/view.js
/.local/node/node_modules/npm/lib/commands/whoami.js
/.local/node/node_modules/npm/lib/utils/audit-error.js
/.local/node/node_modules/npm/lib/utils/auth.js
/.local/node/node_modules/npm/lib/utils/cmd-list.js
/.local/node/node_modules/npm/lib/utils/completion.fish
/.local/node/node_modules/npm/lib/utils/completion.sh
/.local/node/node_modules/npm/lib/utils/did-you-mean.js
/.local/node/node_modules/npm/lib/utils/display.js
/.local/node/node_modules/npm/lib/utils/error-message.js
/.local/node/node_modules/npm/lib/utils/explain-dep.js
/.local/node/node_modules/npm/lib/utils/explain-eresolve.js
/.local/node/node_modules/npm/lib/utils/format.js
/.local/node/node_modules/npm/lib/utils/format-bytes.js
/.local/node/node_modules/npm/lib/utils/format-search-stream.js
/.local/node/node_modules/npm/lib/utils/get-identity.js
/.local/node/node_modules/npm/lib/utils/get-workspaces.js
/.local/node/node_modules/npm/lib/utils/installed-deep.js
/.local/node/node_modules/npm/lib/utils/installed-shallow.js
/.local/node/node_modules/npm/lib/utils/is-windows.js
/.local/node/node_modules/npm/lib/utils/log-file.js
/.local/node/node_modules/npm/lib/utils/npm-usage.js
/.local/node/node_modules/npm/lib/utils/open-url.js
/.local/node/node_modules/npm/lib/utils/output-error.js
/.local/node/node_modules/npm/lib/utils/ping.js
/.local/node/node_modules/npm/lib/utils/queryable.js
/.local/node/node_modules/npm/lib/utils/read-user-info.js
/.local/node/node_modules/npm/lib/utils/reify-finish.js
/.local/node/node_modules/npm/lib/utils/reify-output.js
/.local/node/node_modules/npm/lib/utils/sbom-cyclonedx.js
/.local/node/node_modules/npm/lib/utils/sbom-spdx.js
/.local/node/node_modules/npm/lib/utils/tar.js
/.local/node/node_modules/npm/lib/utils/timers.js
/.local/node/node_modules/npm/lib/utils/update-workspaces.js
/.local/node/node_modules/npm/lib/utils/validate-lockfile.js
/.local/node/node_modules/npm/lib/utils/verify-signatures.js
/.local/node/node_modules/npm/lib/arborist-cmd.js
/.local/node/node_modules/npm/lib/base-cmd.js
/.local/node/node_modules/npm/lib/cli.js
/.local/node/node_modules/npm/lib/lifecycle-cmd.js
/.local/node/node_modules/npm/lib/npm.js
/.local/node/node_modules/npm/lib/package-url-cmd.js
/.local/node/node_modules/npm/man/man1/npm.1
/.local/node/node_modules/npm/man/man1/npm-access.1
/.local/node/node_modules/npm/man/man1/npm-adduser.1
/.local/node/node_modules/npm/man/man1/npm-audit.1
/.local/node/node_modules/npm/man/man1/npm-bugs.1
/.local/node/node_modules/npm/man/man1/npm-cache.1
/.local/node/node_modules/npm/man/man1/npm-ci.1
/.local/node/node_modules/npm/man/man1/npm-completion.1
/.local/node/node_modules/npm/man/man1/npm-config.1
/.local/node/node_modules/npm/man/man1/npm-dedupe.1
/.local/node/node_modules/npm/man/man1/npm-deprecate.1
/.local/node/node_modules/npm/man/man1/npm-diff.1
/.local/node/node_modules/npm/man/man1/npm-dist-tag.1
/.local/node/node_modules/npm/man/man1/npm-docs.1
/.local/node/node_modules/npm/man/man1/npm-doctor.1
/.local/node/node_modules/npm/man/man1/npm-edit.1
/.local/node/node_modules/npm/man/man1/npm-exec.1
/.local/node/node_modules/npm/man/man1/npm-explain.1
/.local/node/node_modules/npm/man/man1/npm-explore.1
/.local/node/node_modules/npm/man/man1/npm-find-dupes.1
/.local/node/node_modules/npm/man/man1/npm-fund.1
/.local/node/node_modules/npm/man/man1/npm-help.1
/.local/node/node_modules/npm/man/man1/npm-help-search.1
/.local/node/node_modules/npm/man/man1/npm-hook.1
/.local/node/node_modules/npm/man/man1/npm-init.1
/.local/node/node_modules/npm/man/man1/npm-install.1
/.local/node/node_modules/npm/man/man1/npm-install-ci-test.1
/.local/node/node_modules/npm/man/man1/npm-install-test.1
/.local/node/node_modules/npm/man/man1/npm-link.1
/.local/node/node_modules/npm/man/man1/npm-login.1
/.local/node/node_modules/npm/man/man1/npm-logout.1
/.local/node/node_modules/npm/man/man1/npm-ls.1
/.local/node/node_modules/npm/man/man1/npm-org.1
/.local/node/node_modules/npm/man/man1/npm-outdated.1
/.local/node/node_modules/npm/man/man1/npm-owner.1
/.local/node/node_modules/npm/man/man1/npm-pack.1
/.local/node/node_modules/npm/man/man1/npm-ping.1
/.local/node/node_modules/npm/man/man1/npm-pkg.1
/.local/node/node_modules/npm/man/man1/npm-prefix.1
/.local/node/node_modules/npm/man/man1/npm-profile.1
/.local/node/node_modules/npm/man/man1/npm-prune.1
/.local/node/node_modules/npm/man/man1/npm-publish.1
/.local/node/node_modules/npm/man/man1/npm-query.1
/.local/node/node_modules/npm/man/man1/npm-rebuild.1
/.local/node/node_modules/npm/man/man1/npm-repo.1
/.local/node/node_modules/npm/man/man1/npm-restart.1
/.local/node/node_modules/npm/man/man1/npm-root.1
/.local/node/node_modules/npm/man/man1/npm-run-script.1
/.local/node/node_modules/npm/man/man1/npm-sbom.1
/.local/node/node_modules/npm/man/man1/npm-search.1
/.local/node/node_modules/npm/man/man1/npm-shrinkwrap.1
/.local/node/node_modules/npm/man/man1/npm-star.1
/.local/node/node_modules/npm/man/man1/npm-stars.1
/.local/node/node_modules/npm/man/man1/npm-start.1
/.local/node/node_modules/npm/man/man1/npm-stop.1
/.local/node/node_modules/npm/man/man1/npm-team.1
/.local/node/node_modules/npm/man/man1/npm-test.1
/.local/node/node_modules/npm/man/man1/npm-token.1
/.local/node/node_modules/npm/man/man1/npm-uninstall.1
/.local/node/node_modules/npm/man/man1/npm-unpublish.1
/.local/node/node_modules/npm/man/man1/npm-unstar.1
/.local/node/node_modules/npm/man/man1/npm-update.1
/.local/node/node_modules/npm/man/man1/npm-version.1
/.local/node/node_modules/npm/man/man1/npm-view.1
/.local/node/node_modules/npm/man/man1/npm-whoami.1
/.local/node/node_modules/npm/man/man1/npx.1
/.local/node/node_modules/npm/man/man5/folders.5
/.local/node/node_modules/npm/man/man5/install.5
/.local/node/node_modules/npm/man/man5/npm-global.5
/.local/node/node_modules/npm/man/man5/npm-json.5
/.local/node/node_modules/npm/man/man5/npm-shrinkwrap-json.5
/.local/node/node_modules/npm/man/man5/npmrc.5
/.local/node/node_modules/npm/man/man5/package-json.5
/.local/node/node_modules/npm/man/man5/package-lock-json.5
/.local/node/node_modules/npm/man/man7/config.7
/.local/node/node_modules/npm/man/man7/dependency-selectors.7
/.local/node/node_modules/npm/man/man7/developers.7
/.local/node/node_modules/npm/man/man7/logging.7
/.local/node/node_modules/npm/man/man7/orgs.7
/.local/node/node_modules/npm/man/man7/package-spec.7
/.local/node/node_modules/npm/man/man7/registry.7
/.local/node/node_modules/npm/man/man7/removal.7
/.local/node/node_modules/npm/man/man7/scope.7
/.local/node/node_modules/npm/man/man7/scripts.7
/.local/node/node_modules/npm/man/man7/workspaces.7
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/index.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/license
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex/package.json
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/index.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/RGI_Emoji.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/es2015/text.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/index.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/LICENSE-MIT.txt
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/package.json
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/RGI_Emoji.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex/text.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/index.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/license
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width/package.json
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/index.js
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/license
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi/package.json
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/index.mjs
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/LICENSE.txt
/.local/node/node_modules/npm/node_modules/@isaacs/cliui/package.json
/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/LICENSE
/.local/node/node_modules/npm/node_modules/@isaacs/fs-minipass/package.json
/.local/node/node_modules/npm/node_modules/@isaacs/string-locale-compare/index.js
/.local/node/node_modules/npm/node_modules/@isaacs/string-locale-compare/LICENSE
/.local/node/node_modules/npm/node_modules/@isaacs/string-locale-compare/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/agents.js
/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/dns.js
/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/errors.js
/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/options.js
/.local/node/node_modules/npm/node_modules/@npmcli/agent/lib/proxy.js
/.local/node/node_modules/npm/node_modules/@npmcli/agent/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/logging.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/options.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/print-tree.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/lib/timers.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/actual.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/audit.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/funding.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/ideal.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/license.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/prune.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/reify.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/shrinkwrap.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/bin/virtual.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/isolated-reifier.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/load-virtual.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/rebuild.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/add-rm-pkg-deps.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/audit-report.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/calc-dep-flags.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/can-place-dep.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/case-insensitive-map.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/consistent-resolve.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/debug.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/deepest-nesting-target.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/dep-valid.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/diff.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/edge.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/from-path.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/gather-dep-set.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/inventory.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/link.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/node.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/optional-set.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/override-resolves.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/override-set.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/packument-cache.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/peer-entry-sets.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/place-dep.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/printable.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/query-selector-all.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/realpath.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/relpath.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/reset-dep-flags.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/retire-path.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/shrinkwrap.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/signal-handling.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/signals.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/spec-from-lock.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/tracker.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/tree-check.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/version-from-tgz.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/vuln.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/lib/yarn-lock.js
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/LICENSE.md
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/arborist/README.md
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/definitions/definition.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/definitions/definitions.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/definitions/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/env-replace.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/errors.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/nerf-dart.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/parse-field.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/set-envs.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/type-defs.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/type-description.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/lib/umask.js
/.local/node/node_modules/npm/node_modules/@npmcli/config/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/config/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/config/README.md
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/common/get-options.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/common/node.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/cp/errors.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/cp/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/cp/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/cp/polyfill.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/move-file.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/readdir-scoped.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/lib/with-temp-dir.js
/.local/node/node_modules/npm/node_modules/@npmcli/fs/LICENSE.md
/.local/node/node_modules/npm/node_modules/@npmcli/fs/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/clone.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/errors.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/find.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/is.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/is-clean.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/lines-to-revs.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/make-error.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/opts.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/revs.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/spawn.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/utils.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/lib/which.js
/.local/node/node_modules/npm/node_modules/@npmcli/git/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/git/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/bin/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/installed-package-contents/README.md
/.local/node/node_modules/npm/node_modules/@npmcli/map-workspaces/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/map-workspaces/LICENSE.md
/.local/node/node_modules/npm/node_modules/@npmcli/map-workspaces/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/advisory.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/get-dep-spec.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/hash.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/bin/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/add-git-sha.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/cache-dir.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/is-package-bin.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/npm.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/protected.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/tar-create-options.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/util/trailing-slashes.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/dir.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/fetcher.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/file.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/git.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/registry.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/lib/remote.js
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote/README.md
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/metavuln-calculator/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/name-from-folder/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/name-from-folder/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/name-from-folder/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/node-gyp/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/node-gyp/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/node-gyp/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/normalize.js
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/normalize-data.js
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/read-package.js
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/sort.js
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/update-dependencies.js
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/update-scripts.js
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/lib/update-workspaces.js
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/package-json/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/escape.js
/.local/node/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/promise-spawn/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/promise-spawn/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/query/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/query/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/query/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/deep-map.js
/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/error.js
/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/index.js
/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/matchers.js
/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/server.js
/.local/node/node_modules/npm/node_modules/@npmcli/redact/lib/utils.js
/.local/node/node_modules/npm/node_modules/@npmcli/redact/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/redact/package.json
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/node-gyp.cmd
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/is-server-package.js
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/make-spawn-args.js
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/package-envs.js
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script.js
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/run-script-pkg.js
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/set-path.js
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/signal-manager.js
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/lib/validate-options.js
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/LICENSE
/.local/node/node_modules/npm/node_modules/@npmcli/run-script/package.json
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/is-default-value.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/limit-long-syntax.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/negate.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/no-repeated-options.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/ordered-options.mjs
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/examples/simple-hard-coded.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/internal/errors.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/internal/primordials.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/internal/util.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/internal/validators.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/index.js
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/LICENSE
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/package.json
/.local/node/node_modules/npm/node_modules/@pkgjs/parseargs/utils.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/api/field_behavior.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/any.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/descriptor.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/google/protobuf/timestamp.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/dsse.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/entry.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/hashedrekord.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/rekor/v2/verifier.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/envelope.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/events.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_bundle.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_common.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_rekor.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_trustroot.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/__generated__/sigstore_verification.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/dist/index.js
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/LICENSE
/.local/node/node_modules/npm/node_modules/@sigstore/protobuf-specs/package.json
/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/appdata.js
/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/client.js
/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/error.js
/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/index.js
/.local/node/node_modules/npm/node_modules/@sigstore/tuf/dist/target.js
/.local/node/node_modules/npm/node_modules/@sigstore/tuf/LICENSE
/.local/node/node_modules/npm/node_modules/@sigstore/tuf/package.json
/.local/node/node_modules/npm/node_modules/@sigstore/tuf/seeds.json
/.local/node/node_modules/npm/node_modules/@tufjs/canonical-json/lib/index.js
/.local/node/node_modules/npm/node_modules/@tufjs/canonical-json/LICENSE
/.local/node/node_modules/npm/node_modules/@tufjs/canonical-json/package.json
/.local/node/node_modules/npm/node_modules/abbrev/lib/index.js
/.local/node/node_modules/npm/node_modules/abbrev/LICENSE
/.local/node/node_modules/npm/node_modules/abbrev/package.json
/.local/node/node_modules/npm/node_modules/agent-base/dist/helpers.js
/.local/node/node_modules/npm/node_modules/agent-base/dist/index.js
/.local/node/node_modules/npm/node_modules/agent-base/LICENSE
/.local/node/node_modules/npm/node_modules/agent-base/package.json
/.local/node/node_modules/npm/node_modules/ansi-regex/index.js
/.local/node/node_modules/npm/node_modules/ansi-regex/license
/.local/node/node_modules/npm/node_modules/ansi-regex/package.json
/.local/node/node_modules/npm/node_modules/ansi-styles/index.js
/.local/node/node_modules/npm/node_modules/ansi-styles/license
/.local/node/node_modules/npm/node_modules/ansi-styles/package.json
/.local/node/node_modules/npm/node_modules/aproba/index.js
/.local/node/node_modules/npm/node_modules/aproba/LICENSE
/.local/node/node_modules/npm/node_modules/aproba/package.json
/.local/node/node_modules/npm/node_modules/archy/examples/beep.js
/.local/node/node_modules/npm/node_modules/archy/examples/multi_line.js
/.local/node/node_modules/npm/node_modules/archy/index.js
/.local/node/node_modules/npm/node_modules/archy/LICENSE
/.local/node/node_modules/npm/node_modules/archy/package.json
/.local/node/node_modules/npm/node_modules/balanced-match/index.js
/.local/node/node_modules/npm/node_modules/balanced-match/LICENSE.md
/.local/node/node_modules/npm/node_modules/balanced-match/package.json
/.local/node/node_modules/npm/node_modules/bin-links/lib/bin-target.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/check-bin.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/check-bins.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/fix-bin.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/get-node-modules.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/get-paths.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/get-prefix.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/index.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/is-windows.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/link-bin.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/link-bins.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/link-gently.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/link-mans.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/man-target.js
/.local/node/node_modules/npm/node_modules/bin-links/lib/shim-bin.js
/.local/node/node_modules/npm/node_modules/bin-links/LICENSE
/.local/node/node_modules/npm/node_modules/bin-links/package.json
/.local/node/node_modules/npm/node_modules/binary-extensions/binary-extensions.json
/.local/node/node_modules/npm/node_modules/binary-extensions/index.js
/.local/node/node_modules/npm/node_modules/binary-extensions/license
/.local/node/node_modules/npm/node_modules/binary-extensions/package.json
/.local/node/node_modules/npm/node_modules/brace-expansion/index.js
/.local/node/node_modules/npm/node_modules/brace-expansion/LICENSE
/.local/node/node_modules/npm/node_modules/brace-expansion/package.json
/.local/node/node_modules/npm/node_modules/cacache/lib/content/path.js
/.local/node/node_modules/npm/node_modules/cacache/lib/content/read.js
/.local/node/node_modules/npm/node_modules/cacache/lib/content/rm.js
/.local/node/node_modules/npm/node_modules/cacache/lib/content/write.js
/.local/node/node_modules/npm/node_modules/cacache/lib/util/glob.js
/.local/node/node_modules/npm/node_modules/cacache/lib/util/hash-to-segments.js
/.local/node/node_modules/npm/node_modules/cacache/lib/util/tmp.js
/.local/node/node_modules/npm/node_modules/cacache/lib/entry-index.js
/.local/node/node_modules/npm/node_modules/cacache/lib/get.js
/.local/node/node_modules/npm/node_modules/cacache/lib/index.js
/.local/node/node_modules/npm/node_modules/cacache/lib/memoization.js
/.local/node/node_modules/npm/node_modules/cacache/lib/put.js
/.local/node/node_modules/npm/node_modules/cacache/lib/rm.js
/.local/node/node_modules/npm/node_modules/cacache/lib/verify.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/LICENSE.md
/.local/node/node_modules/npm/node_modules/cacache/node_modules/chownr/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/bin.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/find-made.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/index.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/opts-arg.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/path-arg.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/src/use-native.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/cjs/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/find-made.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/index.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-manual.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/mkdirp-native.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/opts-arg.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/path-arg.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.d.ts.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/dist/mjs/use-native.js.map
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/LICENSE
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/mkdirp/readme.markdown
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/create.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/cwd-error.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/extract.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/get-write-flag.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/header.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/large-numbers.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/list.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/make-command.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mkdir.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/mode-fix.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-unicode.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/normalize-windows-path.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/options.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pack.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/parse.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/path-reservations.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/pax.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/read-entry.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/replace.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-absolute-path.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/strip-trailing-slashes.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/symlink-error.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/types.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/unpack.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/update.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/warn-method.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/winchars.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/commonjs/write-entry.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/create.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/cwd-error.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/extract.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/get-write-flag.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/header.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/large-numbers.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/list.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/make-command.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/mkdir.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/mode-fix.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-unicode.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/normalize-windows-path.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/options.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/pack.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/parse.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/path-reservations.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/pax.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/read-entry.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/replace.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-absolute-path.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/strip-trailing-slashes.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/symlink-error.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/types.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/unpack.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/update.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/warn-method.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/winchars.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/dist/esm/write-entry.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/LICENSE
/.local/node/node_modules/npm/node_modules/cacache/node_modules/tar/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/LICENSE.md
/.local/node/node_modules/npm/node_modules/cacache/node_modules/yallist/package.json
/.local/node/node_modules/npm/node_modules/cacache/LICENSE.md
/.local/node/node_modules/npm/node_modules/cacache/package.json
/.local/node/node_modules/npm/node_modules/chalk/source/vendor/ansi-styles/index.js
/.local/node/node_modules/npm/node_modules/chalk/source/vendor/supports-color/browser.js
/.local/node/node_modules/npm/node_modules/chalk/source/vendor/supports-color/index.js
/.local/node/node_modules/npm/node_modules/chalk/source/index.js
/.local/node/node_modules/npm/node_modules/chalk/source/utilities.js
/.local/node/node_modules/npm/node_modules/chalk/license
/.local/node/node_modules/npm/node_modules/chalk/package.json
/.local/node/node_modules/npm/node_modules/chownr/chownr.js
/.local/node/node_modules/npm/node_modules/chownr/LICENSE
/.local/node/node_modules/npm/node_modules/chownr/package.json
/.local/node/node_modules/npm/node_modules/ci-info/index.js
/.local/node/node_modules/npm/node_modules/ci-info/LICENSE
/.local/node/node_modules/npm/node_modules/ci-info/package.json
/.local/node/node_modules/npm/node_modules/ci-info/vendors.json
/.local/node/node_modules/npm/node_modules/cidr-regex/dist/index.js
/.local/node/node_modules/npm/node_modules/cidr-regex/LICENSE
/.local/node/node_modules/npm/node_modules/cidr-regex/package.json
/.local/node/node_modules/npm/node_modules/cli-columns/color.js
/.local/node/node_modules/npm/node_modules/cli-columns/index.js
/.local/node/node_modules/npm/node_modules/cli-columns/license
/.local/node/node_modules/npm/node_modules/cli-columns/package.json
/.local/node/node_modules/npm/node_modules/cli-columns/test.js
/.local/node/node_modules/npm/node_modules/cmd-shim/lib/index.js
/.local/node/node_modules/npm/node_modules/cmd-shim/lib/to-batch-syntax.js
/.local/node/node_modules/npm/node_modules/cmd-shim/LICENSE
/.local/node/node_modules/npm/node_modules/cmd-shim/package.json
/.local/node/node_modules/npm/node_modules/color-convert/conversions.js
/.local/node/node_modules/npm/node_modules/color-convert/index.js
/.local/node/node_modules/npm/node_modules/color-convert/LICENSE
/.local/node/node_modules/npm/node_modules/color-convert/package.json
/.local/node/node_modules/npm/node_modules/color-convert/route.js
/.local/node/node_modules/npm/node_modules/color-name/index.js
/.local/node/node_modules/npm/node_modules/color-name/LICENSE
/.local/node/node_modules/npm/node_modules/color-name/package.json
/.local/node/node_modules/npm/node_modules/common-ancestor-path/index.js
/.local/node/node_modules/npm/node_modules/common-ancestor-path/LICENSE
/.local/node/node_modules/npm/node_modules/common-ancestor-path/package.json
/.local/node/node_modules/npm/node_modules/cross-spawn/lib/util/escape.js
/.local/node/node_modules/npm/node_modules/cross-spawn/lib/util/readShebang.js
/.local/node/node_modules/npm/node_modules/cross-spawn/lib/util/resolveCommand.js
/.local/node/node_modules/npm/node_modules/cross-spawn/lib/enoent.js
/.local/node/node_modules/npm/node_modules/cross-spawn/lib/parse.js
/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/bin/node-which
/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/LICENSE
/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/package.json
/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/README.md
/.local/node/node_modules/npm/node_modules/cross-spawn/node_modules/which/which.js
/.local/node/node_modules/npm/node_modules/cross-spawn/index.js
/.local/node/node_modules/npm/node_modules/cross-spawn/LICENSE
/.local/node/node_modules/npm/node_modules/cross-spawn/package.json
/.local/node/node_modules/npm/node_modules/cssesc/bin/cssesc
/.local/node/node_modules/npm/node_modules/cssesc/man/cssesc.1
/.local/node/node_modules/npm/node_modules/cssesc/cssesc.js
/.local/node/node_modules/npm/node_modules/cssesc/LICENSE-MIT.txt
/.local/node/node_modules/npm/node_modules/cssesc/package.json
/.local/node/node_modules/npm/node_modules/cssesc/README.md
/.local/node/node_modules/npm/node_modules/debug/src/browser.js
/.local/node/node_modules/npm/node_modules/debug/src/common.js
/.local/node/node_modules/npm/node_modules/debug/src/index.js
/.local/node/node_modules/npm/node_modules/debug/src/node.js
/.local/node/node_modules/npm/node_modules/debug/LICENSE
/.local/node/node_modules/npm/node_modules/debug/package.json
/.local/node/node_modules/npm/node_modules/diff/dist/diff.js
/.local/node/node_modules/npm/node_modules/diff/dist/diff.min.js
/.local/node/node_modules/npm/node_modules/diff/lib/convert/dmp.js
/.local/node/node_modules/npm/node_modules/diff/lib/convert/xml.js
/.local/node/node_modules/npm/node_modules/diff/lib/diff/array.js
/.local/node/node_modules/npm/node_modules/diff/lib/diff/base.js
/.local/node/node_modules/npm/node_modules/diff/lib/diff/character.js
/.local/node/node_modules/npm/node_modules/diff/lib/diff/css.js
/.local/node/node_modules/npm/node_modules/diff/lib/diff/json.js
/.local/node/node_modules/npm/node_modules/diff/lib/diff/line.js
/.local/node/node_modules/npm/node_modules/diff/lib/diff/sentence.js
/.local/node/node_modules/npm/node_modules/diff/lib/diff/word.js
/.local/node/node_modules/npm/node_modules/diff/lib/patch/apply.js
/.local/node/node_modules/npm/node_modules/diff/lib/patch/create.js
/.local/node/node_modules/npm/node_modules/diff/lib/patch/merge.js
/.local/node/node_modules/npm/node_modules/diff/lib/patch/parse.js
/.local/node/node_modules/npm/node_modules/diff/lib/patch/reverse.js
/.local/node/node_modules/npm/node_modules/diff/lib/util/array.js
/.local/node/node_modules/npm/node_modules/diff/lib/util/distance-iterator.js
/.local/node/node_modules/npm/node_modules/diff/lib/util/params.js
/.local/node/node_modules/npm/node_modules/diff/lib/index.es6.js
/.local/node/node_modules/npm/node_modules/diff/lib/index.js
/.local/node/node_modules/npm/node_modules/diff/lib/index.mjs
/.local/node/node_modules/npm/node_modules/diff/CONTRIBUTING.md
/.local/node/node_modules/npm/node_modules/diff/LICENSE
/.local/node/node_modules/npm/node_modules/diff/package.json
/.local/node/node_modules/npm/node_modules/diff/release-notes.md
/.local/node/node_modules/npm/node_modules/diff/runtime.js
/.local/node/node_modules/npm/node_modules/eastasianwidth/eastasianwidth.js
/.local/node/node_modules/npm/node_modules/eastasianwidth/package.json
/.local/node/node_modules/npm/node_modules/emoji-regex/es2015/index.js
/.local/node/node_modules/npm/node_modules/emoji-regex/es2015/text.js
/.local/node/node_modules/npm/node_modules/emoji-regex/index.js
/.local/node/node_modules/npm/node_modules/emoji-regex/LICENSE-MIT.txt
/.local/node/node_modules/npm/node_modules/emoji-regex/package.json
/.local/node/node_modules/npm/node_modules/emoji-regex/text.js
/.local/node/node_modules/npm/node_modules/encoding/lib/encoding.js
/.local/node/node_modules/npm/node_modules/encoding/LICENSE
/.local/node/node_modules/npm/node_modules/encoding/package.json
/.local/node/node_modules/npm/node_modules/env-paths/index.js
/.local/node/node_modules/npm/node_modules/env-paths/license
/.local/node/node_modules/npm/node_modules/env-paths/package.json
/.local/node/node_modules/npm/node_modules/err-code/bower.json
/.local/node/node_modules/npm/node_modules/err-code/index.js
/.local/node/node_modules/npm/node_modules/err-code/index.umd.js
/.local/node/node_modules/npm/node_modules/err-code/package.json
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/always/always.delay.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.base.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.factory.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/delay/delay.interface.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/jitter/full/full.jitter.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/jitter/no/no.jitter.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/jitter/jitter.factory.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/backoff.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/dist/options.js
/.local/node/node_modules/npm/node_modules/exponential-backoff/LICENSE
/.local/node/node_modules/npm/node_modules/exponential-backoff/package.json
/.local/node/node_modules/npm/node_modules/fastest-levenshtein/esm/mod.js
/.local/node/node_modules/npm/node_modules/fastest-levenshtein/bench.js
/.local/node/node_modules/npm/node_modules/fastest-levenshtein/LICENSE.md
/.local/node/node_modules/npm/node_modules/fastest-levenshtein/mod.js
/.local/node/node_modules/npm/node_modules/fastest-levenshtein/package.json
/.local/node/node_modules/npm/node_modules/fastest-levenshtein/test.js
/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/all-signals.js
/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/proxy-signals.js
/.local/node/node_modules/npm/node_modules/foreground-child/dist/commonjs/watchdog.js
/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/all-signals.js
/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/proxy-signals.js
/.local/node/node_modules/npm/node_modules/foreground-child/dist/esm/watchdog.js
/.local/node/node_modules/npm/node_modules/foreground-child/LICENSE
/.local/node/node_modules/npm/node_modules/foreground-child/package.json
/.local/node/node_modules/npm/node_modules/fs-minipass/lib/index.js
/.local/node/node_modules/npm/node_modules/fs-minipass/LICENSE
/.local/node/node_modules/npm/node_modules/fs-minipass/package.json
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/glob.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/glob.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/glob.js
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/glob.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.js
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/has-magic.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/ignore.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/ignore.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/ignore.js
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/ignore.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/index.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/index.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/index.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/pattern.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/pattern.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/pattern.js
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/pattern.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/processor.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/processor.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/processor.js
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/processor.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/walker.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/walker.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/walker.js
/.local/node/node_modules/npm/node_modules/glob/dist/commonjs/walker.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/bin.d.mts
/.local/node/node_modules/npm/node_modules/glob/dist/esm/bin.d.mts.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/bin.mjs
/.local/node/node_modules/npm/node_modules/glob/dist/esm/bin.mjs.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/glob.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/esm/glob.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/glob.js
/.local/node/node_modules/npm/node_modules/glob/dist/esm/glob.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/has-magic.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/esm/has-magic.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/has-magic.js
/.local/node/node_modules/npm/node_modules/glob/dist/esm/has-magic.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/ignore.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/esm/ignore.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/ignore.js
/.local/node/node_modules/npm/node_modules/glob/dist/esm/ignore.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/index.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/esm/index.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/glob/dist/esm/index.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/glob/dist/esm/pattern.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/esm/pattern.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/pattern.js
/.local/node/node_modules/npm/node_modules/glob/dist/esm/pattern.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/processor.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/esm/processor.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/processor.js
/.local/node/node_modules/npm/node_modules/glob/dist/esm/processor.js.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/walker.d.ts
/.local/node/node_modules/npm/node_modules/glob/dist/esm/walker.d.ts.map
/.local/node/node_modules/npm/node_modules/glob/dist/esm/walker.js
/.local/node/node_modules/npm/node_modules/glob/dist/esm/walker.js.map
/.local/node/node_modules/npm/node_modules/glob/LICENSE
/.local/node/node_modules/npm/node_modules/glob/package.json
/.local/node/node_modules/npm/node_modules/glob/README.md
/.local/node/node_modules/npm/node_modules/graceful-fs/clone.js
/.local/node/node_modules/npm/node_modules/graceful-fs/graceful-fs.js
/.local/node/node_modules/npm/node_modules/graceful-fs/legacy-streams.js
/.local/node/node_modules/npm/node_modules/graceful-fs/LICENSE
/.local/node/node_modules/npm/node_modules/graceful-fs/package.json
/.local/node/node_modules/npm/node_modules/graceful-fs/polyfills.js
/.local/node/node_modules/npm/node_modules/hosted-git-info/lib/from-url.js
/.local/node/node_modules/npm/node_modules/hosted-git-info/lib/hosts.js
/.local/node/node_modules/npm/node_modules/hosted-git-info/lib/index.js
/.local/node/node_modules/npm/node_modules/hosted-git-info/lib/parse-url.js
/.local/node/node_modules/npm/node_modules/hosted-git-info/LICENSE
/.local/node/node_modules/npm/node_modules/hosted-git-info/package.json
/.local/node/node_modules/npm/node_modules/http-cache-semantics/index.js
/.local/node/node_modules/npm/node_modules/http-cache-semantics/LICENSE
/.local/node/node_modules/npm/node_modules/http-cache-semantics/package.json
/.local/node/node_modules/npm/node_modules/http-proxy-agent/dist/index.js
/.local/node/node_modules/npm/node_modules/http-proxy-agent/LICENSE
/.local/node/node_modules/npm/node_modules/http-proxy-agent/package.json
/.local/node/node_modules/npm/node_modules/https-proxy-agent/dist/index.js
/.local/node/node_modules/npm/node_modules/https-proxy-agent/dist/parse-proxy-response.js
/.local/node/node_modules/npm/node_modules/https-proxy-agent/LICENSE
/.local/node/node_modules/npm/node_modules/https-proxy-agent/package.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/big5-added.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp936.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp949.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp950.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/eucjp.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/gbk-added.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/tables/shiftjis.json
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/dbcs-codec.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/dbcs-data.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/index.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/internal.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-codec.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-data.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-data-generated.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/utf7.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/utf16.js
/.local/node/node_modules/npm/node_modules/iconv-lite/encodings/utf32.js
/.local/node/node_modules/npm/node_modules/iconv-lite/lib/bom-handling.js
/.local/node/node_modules/npm/node_modules/iconv-lite/lib/index.js
/.local/node/node_modules/npm/node_modules/iconv-lite/lib/streams.js
/.local/node/node_modules/npm/node_modules/iconv-lite/LICENSE
/.local/node/node_modules/npm/node_modules/iconv-lite/package.json
/.local/node/node_modules/npm/node_modules/ignore-walk/lib/index.js
/.local/node/node_modules/npm/node_modules/ignore-walk/LICENSE
/.local/node/node_modules/npm/node_modules/ignore-walk/package.json
/.local/node/node_modules/npm/node_modules/imurmurhash/imurmurhash.js
/.local/node/node_modules/npm/node_modules/imurmurhash/imurmurhash.min.js
/.local/node/node_modules/npm/node_modules/imurmurhash/package.json
/.local/node/node_modules/npm/node_modules/ini/lib/ini.js
/.local/node/node_modules/npm/node_modules/ini/LICENSE
/.local/node/node_modules/npm/node_modules/ini/package.json
/.local/node/node_modules/npm/node_modules/init-package-json/lib/default-input.js
/.local/node/node_modules/npm/node_modules/init-package-json/lib/init-package-json.js
/.local/node/node_modules/npm/node_modules/init-package-json/LICENSE.md
/.local/node/node_modules/npm/node_modules/init-package-json/package.json
/.local/node/node_modules/npm/node_modules/ip-address/dist/v4/constants.js
/.local/node/node_modules/npm/node_modules/ip-address/dist/v6/constants.js
/.local/node/node_modules/npm/node_modules/ip-address/dist/v6/helpers.js
/.local/node/node_modules/npm/node_modules/ip-address/dist/v6/regular-expressions.js
/.local/node/node_modules/npm/node_modules/ip-address/dist/address-error.js
/.local/node/node_modules/npm/node_modules/ip-address/dist/common.js
/.local/node/node_modules/npm/node_modules/ip-address/dist/ip-address.js
/.local/node/node_modules/npm/node_modules/ip-address/dist/ipv4.js
/.local/node/node_modules/npm/node_modules/ip-address/dist/ipv6.js
/.local/node/node_modules/npm/node_modules/ip-address/LICENSE
/.local/node/node_modules/npm/node_modules/ip-address/package.json
/.local/node/node_modules/npm/node_modules/ip-regex/index.js
/.local/node/node_modules/npm/node_modules/ip-regex/license
/.local/node/node_modules/npm/node_modules/ip-regex/package.json
/.local/node/node_modules/npm/node_modules/is-cidr/dist/index.js
/.local/node/node_modules/npm/node_modules/is-cidr/LICENSE
/.local/node/node_modules/npm/node_modules/is-cidr/package.json
/.local/node/node_modules/npm/node_modules/is-fullwidth-code-point/index.js
/.local/node/node_modules/npm/node_modules/is-fullwidth-code-point/license
/.local/node/node_modules/npm/node_modules/is-fullwidth-code-point/package.json
/.local/node/node_modules/npm/node_modules/isexe/index.js
/.local/node/node_modules/npm/node_modules/isexe/LICENSE
/.local/node/node_modules/npm/node_modules/isexe/mode.js
/.local/node/node_modules/npm/node_modules/isexe/package.json
/.local/node/node_modules/npm/node_modules/isexe/windows.js
/.local/node/node_modules/npm/node_modules/jackspeak/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/jackspeak/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/jackspeak/dist/commonjs/parse-args.js
/.local/node/node_modules/npm/node_modules/jackspeak/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/jackspeak/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/jackspeak/dist/esm/parse-args.js
/.local/node/node_modules/npm/node_modules/jackspeak/LICENSE.md
/.local/node/node_modules/npm/node_modules/jackspeak/package.json
/.local/node/node_modules/npm/node_modules/jsbn/example.html
/.local/node/node_modules/npm/node_modules/jsbn/example.js
/.local/node/node_modules/npm/node_modules/jsbn/index.js
/.local/node/node_modules/npm/node_modules/jsbn/LICENSE
/.local/node/node_modules/npm/node_modules/jsbn/package.json
/.local/node/node_modules/npm/node_modules/json-parse-even-better-errors/lib/index.js
/.local/node/node_modules/npm/node_modules/json-parse-even-better-errors/LICENSE.md
/.local/node/node_modules/npm/node_modules/json-parse-even-better-errors/package.json
/.local/node/node_modules/npm/node_modules/json-stringify-nice/index.js
/.local/node/node_modules/npm/node_modules/json-stringify-nice/LICENSE
/.local/node/node_modules/npm/node_modules/json-stringify-nice/package.json
/.local/node/node_modules/npm/node_modules/jsonparse/examples/twitterfeed.js
/.local/node/node_modules/npm/node_modules/jsonparse/samplejson/basic.json
/.local/node/node_modules/npm/node_modules/jsonparse/samplejson/basic2.json
/.local/node/node_modules/npm/node_modules/jsonparse/bench.js
/.local/node/node_modules/npm/node_modules/jsonparse/jsonparse.js
/.local/node/node_modules/npm/node_modules/jsonparse/LICENSE
/.local/node/node_modules/npm/node_modules/jsonparse/package.json
/.local/node/node_modules/npm/node_modules/just-diff/index.cjs
/.local/node/node_modules/npm/node_modules/just-diff/index.mjs
/.local/node/node_modules/npm/node_modules/just-diff/LICENSE
/.local/node/node_modules/npm/node_modules/just-diff/package.json
/.local/node/node_modules/npm/node_modules/just-diff/rollup.config.js
/.local/node/node_modules/npm/node_modules/just-diff-apply/index.cjs
/.local/node/node_modules/npm/node_modules/just-diff-apply/index.mjs
/.local/node/node_modules/npm/node_modules/just-diff-apply/LICENSE
/.local/node/node_modules/npm/node_modules/just-diff-apply/package.json
/.local/node/node_modules/npm/node_modules/just-diff-apply/rollup.config.js
/.local/node/node_modules/npm/node_modules/libnpmaccess/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmaccess/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmaccess/package.json
/.local/node/node_modules/npm/node_modules/libnpmaccess/README.md
/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/format-diff.js
/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/should-print-patch.js
/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/tarball.js
/.local/node/node_modules/npm/node_modules/libnpmdiff/lib/untar.js
/.local/node/node_modules/npm/node_modules/libnpmdiff/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmdiff/package.json
/.local/node/node_modules/npm/node_modules/libnpmdiff/README.md
/.local/node/node_modules/npm/node_modules/libnpmexec/lib/file-exists.js
/.local/node/node_modules/npm/node_modules/libnpmexec/lib/get-bin-from-manifest.js
/.local/node/node_modules/npm/node_modules/libnpmexec/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmexec/lib/is-windows.js
/.local/node/node_modules/npm/node_modules/libnpmexec/lib/no-tty.js
/.local/node/node_modules/npm/node_modules/libnpmexec/lib/run-script.js
/.local/node/node_modules/npm/node_modules/libnpmexec/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmexec/package.json
/.local/node/node_modules/npm/node_modules/libnpmexec/README.md
/.local/node/node_modules/npm/node_modules/libnpmfund/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmfund/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmfund/package.json
/.local/node/node_modules/npm/node_modules/libnpmfund/README.md
/.local/node/node_modules/npm/node_modules/libnpmhook/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmhook/LICENSE.md
/.local/node/node_modules/npm/node_modules/libnpmhook/package.json
/.local/node/node_modules/npm/node_modules/libnpmhook/README.md
/.local/node/node_modules/npm/node_modules/libnpmorg/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmorg/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmorg/package.json
/.local/node/node_modules/npm/node_modules/libnpmorg/README.md
/.local/node/node_modules/npm/node_modules/libnpmpack/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmpack/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmpack/package.json
/.local/node/node_modules/npm/node_modules/libnpmpack/README.md
/.local/node/node_modules/npm/node_modules/libnpmpublish/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmpublish/lib/provenance.js
/.local/node/node_modules/npm/node_modules/libnpmpublish/lib/publish.js
/.local/node/node_modules/npm/node_modules/libnpmpublish/lib/unpublish.js
/.local/node/node_modules/npm/node_modules/libnpmpublish/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmpublish/package.json
/.local/node/node_modules/npm/node_modules/libnpmpublish/README.md
/.local/node/node_modules/npm/node_modules/libnpmsearch/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmsearch/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmsearch/package.json
/.local/node/node_modules/npm/node_modules/libnpmsearch/README.md
/.local/node/node_modules/npm/node_modules/libnpmteam/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmteam/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmteam/package.json
/.local/node/node_modules/npm/node_modules/libnpmteam/README.md
/.local/node/node_modules/npm/node_modules/libnpmversion/lib/commit.js
/.local/node/node_modules/npm/node_modules/libnpmversion/lib/enforce-clean.js
/.local/node/node_modules/npm/node_modules/libnpmversion/lib/index.js
/.local/node/node_modules/npm/node_modules/libnpmversion/lib/read-json.js
/.local/node/node_modules/npm/node_modules/libnpmversion/lib/retrieve-tag.js
/.local/node/node_modules/npm/node_modules/libnpmversion/lib/tag.js
/.local/node/node_modules/npm/node_modules/libnpmversion/lib/version.js
/.local/node/node_modules/npm/node_modules/libnpmversion/lib/write-json.js
/.local/node/node_modules/npm/node_modules/libnpmversion/LICENSE
/.local/node/node_modules/npm/node_modules/libnpmversion/package.json
/.local/node/node_modules/npm/node_modules/libnpmversion/README.md
/.local/node/node_modules/npm/node_modules/lru-cache/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/lru-cache/dist/commonjs/index.min.js
/.local/node/node_modules/npm/node_modules/lru-cache/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/lru-cache/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/lru-cache/dist/esm/index.min.js
/.local/node/node_modules/npm/node_modules/lru-cache/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/lru-cache/LICENSE
/.local/node/node_modules/npm/node_modules/lru-cache/package.json
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/entry.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/errors.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/index.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/key.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/cache/policy.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/fetch.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/index.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/options.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/pipeline.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/lib/remote.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/lib/charset.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/lib/encoding.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/lib/language.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/lib/mediaType.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/HISTORY.md
/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/index.js
/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/LICENSE
/.local/node/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator/package.json
/.local/node/node_modules/npm/node_modules/make-fetch-happen/LICENSE
/.local/node/node_modules/npm/node_modules/make-fetch-happen/package.json
/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/ast.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/brace-expressions.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/escape.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/minimatch/dist/commonjs/unescape.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/assert-valid-pattern.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/ast.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/brace-expressions.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/escape.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/minimatch/dist/esm/unescape.js
/.local/node/node_modules/npm/node_modules/minimatch/LICENSE
/.local/node/node_modules/npm/node_modules/minimatch/package.json
/.local/node/node_modules/npm/node_modules/minipass/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/minipass/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/minipass/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/minipass/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/minipass/LICENSE
/.local/node/node_modules/npm/node_modules/minipass/package.json
/.local/node/node_modules/npm/node_modules/minipass-collect/index.js
/.local/node/node_modules/npm/node_modules/minipass-collect/LICENSE
/.local/node/node_modules/npm/node_modules/minipass-collect/package.json
/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/abort-error.js
/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/blob.js
/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/body.js
/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/fetch-error.js
/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/headers.js
/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/index.js
/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/request.js
/.local/node/node_modules/npm/node_modules/minipass-fetch/lib/response.js
/.local/node/node_modules/npm/node_modules/minipass-fetch/LICENSE
/.local/node/node_modules/npm/node_modules/minipass-fetch/package.json
/.local/node/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/index.js
/.local/node/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/LICENSE
/.local/node/node_modules/npm/node_modules/minipass-flush/node_modules/minipass/package.json
/.local/node/node_modules/npm/node_modules/minipass-flush/index.js
/.local/node/node_modules/npm/node_modules/minipass-flush/LICENSE
/.local/node/node_modules/npm/node_modules/minipass-flush/package.json
/.local/node/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/index.js
/.local/node/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/LICENSE
/.local/node/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass/package.json
/.local/node/node_modules/npm/node_modules/minipass-pipeline/index.js
/.local/node/node_modules/npm/node_modules/minipass-pipeline/LICENSE
/.local/node/node_modules/npm/node_modules/minipass-pipeline/package.json
/.local/node/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/index.js
/.local/node/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/LICENSE
/.local/node/node_modules/npm/node_modules/minipass-sized/node_modules/minipass/package.json
/.local/node/node_modules/npm/node_modules/minipass-sized/index.js
/.local/node/node_modules/npm/node_modules/minipass-sized/LICENSE
/.local/node/node_modules/npm/node_modules/minipass-sized/package.json
/.local/node/node_modules/npm/node_modules/minizlib/dist/commonjs/constants.js
/.local/node/node_modules/npm/node_modules/minizlib/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/minizlib/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/minizlib/dist/esm/constants.js
/.local/node/node_modules/npm/node_modules/minizlib/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/minizlib/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/minizlib/LICENSE
/.local/node/node_modules/npm/node_modules/minizlib/package.json
/.local/node/node_modules/npm/node_modules/mkdirp/bin/cmd.js
/.local/node/node_modules/npm/node_modules/mkdirp/lib/find-made.js
/.local/node/node_modules/npm/node_modules/mkdirp/lib/mkdirp-manual.js
/.local/node/node_modules/npm/node_modules/mkdirp/lib/mkdirp-native.js
/.local/node/node_modules/npm/node_modules/mkdirp/lib/opts-arg.js
/.local/node/node_modules/npm/node_modules/mkdirp/lib/path-arg.js
/.local/node/node_modules/npm/node_modules/mkdirp/lib/use-native.js
/.local/node/node_modules/npm/node_modules/mkdirp/index.js
/.local/node/node_modules/npm/node_modules/mkdirp/LICENSE
/.local/node/node_modules/npm/node_modules/mkdirp/package.json
/.local/node/node_modules/npm/node_modules/mkdirp/readme.markdown
/.local/node/node_modules/npm/node_modules/ms/index.js
/.local/node/node_modules/npm/node_modules/ms/license.md
/.local/node/node_modules/npm/node_modules/ms/package.json
/.local/node/node_modules/npm/node_modules/mute-stream/lib/index.js
/.local/node/node_modules/npm/node_modules/mute-stream/LICENSE
/.local/node/node_modules/npm/node_modules/mute-stream/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/data/ninja/build.ninja
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/GypVsCMake.md
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/Hacking.md
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/InputFormatReference.md
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/LanguageSpecification.md
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/README.md
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/Testing.md
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/docs/UserDocumentation.md
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/__init__.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_parser.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_structures.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/markers.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/metadata.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/py.typed
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/requirements.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/tags.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/utils.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pylib/packaging/version.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/.release-please-manifest.json
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/gyp
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/gyp.bat
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/LICENSE
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/pyproject.toml
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/release-please-config.json
/.local/node/node_modules/npm/node_modules/node-gyp/gyp/test_gyp.py
/.local/node/node_modules/npm/node_modules/node-gyp/lib/build.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/clean.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/configure.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/create-config-gypi.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/download.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/find-node-directory.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/find-python.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/Find-VisualStudio.cs
/.local/node/node_modules/npm/node_modules/node-gyp/lib/find-visualstudio.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/install.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/list.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/log.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/node-gyp.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/process-release.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/rebuild.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/remove.js
/.local/node/node_modules/npm/node_modules/node-gyp/lib/util.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/LICENSE.md
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/chownr/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/bin.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/bin.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/bin.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/bin.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/find-made.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/find-made.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/find-made.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/find-made.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/index.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/index.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/index.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/index.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-manual.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-native.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/mkdirp-native.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/opts-arg.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/opts-arg.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/opts-arg.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/path-arg.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/path-arg.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/path-arg.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/use-native.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/use-native.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/use-native.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/src/use-native.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/cjs/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/find-made.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/find-made.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/find-made.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/find-made.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/index.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/index.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/index.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/index.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-manual.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-manual.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-manual.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-native.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-native.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/mkdirp-native.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/opts-arg.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/opts-arg.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/opts-arg.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/opts-arg.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/path-arg.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/path-arg.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/path-arg.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/path-arg.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/use-native.d.ts
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/use-native.d.ts.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/use-native.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/dist/mjs/use-native.js.map
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/LICENSE
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp/readme.markdown
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/create.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/cwd-error.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/extract.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/get-write-flag.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/header.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/large-numbers.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/list.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/make-command.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/mkdir.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/mode-fix.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/normalize-unicode.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/normalize-windows-path.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/options.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/pack.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/parse.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/path-reservations.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/pax.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/read-entry.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/replace.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/strip-absolute-path.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/strip-trailing-slashes.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/symlink-error.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/types.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/unpack.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/update.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/warn-method.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/winchars.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/commonjs/write-entry.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/create.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/cwd-error.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/extract.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/get-write-flag.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/header.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/large-numbers.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/list.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/make-command.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/mkdir.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/mode-fix.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/normalize-unicode.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/normalize-windows-path.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/options.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/pack.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/parse.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/path-reservations.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/pax.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/read-entry.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/replace.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/strip-absolute-path.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/strip-trailing-slashes.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/symlink-error.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/types.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/unpack.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/update.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/warn-method.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/winchars.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/dist/esm/write-entry.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/LICENSE
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/tar/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/LICENSE.md
/.local/node/node_modules/npm/node_modules/node-gyp/node_modules/yallist/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/src/win_delay_load_hook.cc
/.local/node/node_modules/npm/node_modules/node-gyp/.release-please-manifest.json
/.local/node/node_modules/npm/node_modules/node-gyp/addon.gypi
/.local/node/node_modules/npm/node_modules/node-gyp/CHANGELOG.md
/.local/node/node_modules/npm/node_modules/node-gyp/CODE_OF_CONDUCT.md
/.local/node/node_modules/npm/node_modules/node-gyp/CONTRIBUTING.md
/.local/node/node_modules/npm/node_modules/node-gyp/eslint.config.js
/.local/node/node_modules/npm/node_modules/node-gyp/LICENSE
/.local/node/node_modules/npm/node_modules/node-gyp/macOS_Catalina_acid_test.sh
/.local/node/node_modules/npm/node_modules/node-gyp/package.json
/.local/node/node_modules/npm/node_modules/node-gyp/README.md
/.local/node/node_modules/npm/node_modules/node-gyp/release-please-config.json
/.local/node/node_modules/npm/node_modules/node-gyp/SECURITY.md
/.local/node/node_modules/npm/node_modules/nopt/bin/nopt.js
/.local/node/node_modules/npm/node_modules/nopt/lib/debug.js
/.local/node/node_modules/npm/node_modules/nopt/lib/nopt.js
/.local/node/node_modules/npm/node_modules/nopt/lib/nopt-lib.js
/.local/node/node_modules/npm/node_modules/nopt/lib/type-defs.js
/.local/node/node_modules/npm/node_modules/nopt/LICENSE
/.local/node/node_modules/npm/node_modules/nopt/package.json
/.local/node/node_modules/npm/node_modules/nopt/README.md
/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/extract_description.js
/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/fixer.js
/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/make_warning.js
/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/normalize.js
/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/safe_format.js
/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/typos.json
/.local/node/node_modules/npm/node_modules/normalize-package-data/lib/warning_messages.json
/.local/node/node_modules/npm/node_modules/normalize-package-data/LICENSE
/.local/node/node_modules/npm/node_modules/normalize-package-data/package.json
/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/reporters/detail.js
/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/reporters/install.js
/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/reporters/json.js
/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/reporters/quiet.js
/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/colors.js
/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/exit-code.js
/.local/node/node_modules/npm/node_modules/npm-audit-report/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-audit-report/LICENSE
/.local/node/node_modules/npm/node_modules/npm-audit-report/package.json
/.local/node/node_modules/npm/node_modules/npm-bundled/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-bundled/LICENSE
/.local/node/node_modules/npm/node_modules/npm-bundled/package.json
/.local/node/node_modules/npm/node_modules/npm-install-checks/lib/current-env.js
/.local/node/node_modules/npm/node_modules/npm-install-checks/lib/dev-engines.js
/.local/node/node_modules/npm/node_modules/npm-install-checks/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-install-checks/LICENSE
/.local/node/node_modules/npm/node_modules/npm-install-checks/package.json
/.local/node/node_modules/npm/node_modules/npm-normalize-package-bin/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-normalize-package-bin/LICENSE
/.local/node/node_modules/npm/node_modules/npm-normalize-package-bin/package.json
/.local/node/node_modules/npm/node_modules/npm-package-arg/lib/npa.js
/.local/node/node_modules/npm/node_modules/npm-package-arg/LICENSE
/.local/node/node_modules/npm/node_modules/npm-package-arg/package.json
/.local/node/node_modules/npm/node_modules/npm-packlist/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-packlist/LICENSE
/.local/node/node_modules/npm/node_modules/npm-packlist/package.json
/.local/node/node_modules/npm/node_modules/npm-pick-manifest/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-pick-manifest/LICENSE.md
/.local/node/node_modules/npm/node_modules/npm-pick-manifest/package.json
/.local/node/node_modules/npm/node_modules/npm-profile/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-profile/LICENSE.md
/.local/node/node_modules/npm/node_modules/npm-profile/package.json
/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/auth.js
/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/check-response.js
/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/default-opts.js
/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/errors.js
/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-registry-fetch/lib/json-stream.js
/.local/node/node_modules/npm/node_modules/npm-registry-fetch/LICENSE.md
/.local/node/node_modules/npm/node_modules/npm-registry-fetch/package.json
/.local/node/node_modules/npm/node_modules/npm-user-validate/lib/index.js
/.local/node/node_modules/npm/node_modules/npm-user-validate/LICENSE
/.local/node/node_modules/npm/node_modules/npm-user-validate/package.json
/.local/node/node_modules/npm/node_modules/p-map/index.js
/.local/node/node_modules/npm/node_modules/p-map/license
/.local/node/node_modules/npm/node_modules/p-map/package.json
/.local/node/node_modules/npm/node_modules/package-json-from-dist/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/package-json-from-dist/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/package-json-from-dist/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/package-json-from-dist/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/package-json-from-dist/LICENSE.md
/.local/node/node_modules/npm/node_modules/package-json-from-dist/package.json
/.local/node/node_modules/npm/node_modules/pacote/bin/index.js
/.local/node/node_modules/npm/node_modules/pacote/lib/util/add-git-sha.js
/.local/node/node_modules/npm/node_modules/pacote/lib/util/cache-dir.js
/.local/node/node_modules/npm/node_modules/pacote/lib/util/is-package-bin.js
/.local/node/node_modules/npm/node_modules/pacote/lib/util/npm.js
/.local/node/node_modules/npm/node_modules/pacote/lib/util/protected.js
/.local/node/node_modules/npm/node_modules/pacote/lib/util/tar-create-options.js
/.local/node/node_modules/npm/node_modules/pacote/lib/util/trailing-slashes.js
/.local/node/node_modules/npm/node_modules/pacote/lib/dir.js
/.local/node/node_modules/npm/node_modules/pacote/lib/fetcher.js
/.local/node/node_modules/npm/node_modules/pacote/lib/file.js
/.local/node/node_modules/npm/node_modules/pacote/lib/git.js
/.local/node/node_modules/npm/node_modules/pacote/lib/index.js
/.local/node/node_modules/npm/node_modules/pacote/lib/registry.js
/.local/node/node_modules/npm/node_modules/pacote/lib/remote.js
/.local/node/node_modules/npm/node_modules/pacote/LICENSE
/.local/node/node_modules/npm/node_modules/pacote/package.json
/.local/node/node_modules/npm/node_modules/pacote/README.md
/.local/node/node_modules/npm/node_modules/parse-conflict-json/lib/index.js
/.local/node/node_modules/npm/node_modules/parse-conflict-json/LICENSE.md
/.local/node/node_modules/npm/node_modules/parse-conflict-json/package.json
/.local/node/node_modules/npm/node_modules/path-key/index.js
/.local/node/node_modules/npm/node_modules/path-key/license
/.local/node/node_modules/npm/node_modules/path-key/package.json
/.local/node/node_modules/npm/node_modules/path-scurry/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/path-scurry/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/path-scurry/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/path-scurry/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/path-scurry/LICENSE.md
/.local/node/node_modules/npm/node_modules/path-scurry/package.json
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/attribute.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/className.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/combinator.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/comment.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/constructors.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/container.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/guards.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/id.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/index.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/namespace.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/nesting.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/node.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/root.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/selector.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/string.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/tag.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/types.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/selectors/universal.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/ensureObject.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/getProp.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/index.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/stripComments.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/util/unesc.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/index.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/parser.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/processor.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/sortAscending.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/tokenize.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/dist/tokenTypes.js
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/API.md
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/LICENSE-MIT
/.local/node/node_modules/npm/node_modules/postcss-selector-parser/package.json
/.local/node/node_modules/npm/node_modules/proc-log/lib/index.js
/.local/node/node_modules/npm/node_modules/proc-log/LICENSE
/.local/node/node_modules/npm/node_modules/proc-log/package.json
/.local/node/node_modules/npm/node_modules/proggy/lib/client.js
/.local/node/node_modules/npm/node_modules/proggy/lib/index.js
/.local/node/node_modules/npm/node_modules/proggy/lib/tracker.js
/.local/node/node_modules/npm/node_modules/proggy/LICENSE
/.local/node/node_modules/npm/node_modules/proggy/package.json
/.local/node/node_modules/npm/node_modules/promise-all-reject-late/index.js
/.local/node/node_modules/npm/node_modules/promise-all-reject-late/LICENSE
/.local/node/node_modules/npm/node_modules/promise-all-reject-late/package.json
/.local/node/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/index.js
/.local/node/node_modules/npm/node_modules/promise-call-limit/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/promise-call-limit/dist/esm/index.js
/.local/node/node_modules/npm/node_modules/promise-call-limit/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/promise-call-limit/LICENSE
/.local/node/node_modules/npm/node_modules/promise-call-limit/package.json
/.local/node/node_modules/npm/node_modules/promise-retry/index.js
/.local/node/node_modules/npm/node_modules/promise-retry/LICENSE
/.local/node/node_modules/npm/node_modules/promise-retry/package.json
/.local/node/node_modules/npm/node_modules/promzard/lib/index.js
/.local/node/node_modules/npm/node_modules/promzard/LICENSE
/.local/node/node_modules/npm/node_modules/promzard/package.json
/.local/node/node_modules/npm/node_modules/qrcode-terminal/bin/qrcode-terminal.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/example/basic.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/example/basic.png
/.local/node/node_modules/npm/node_modules/qrcode-terminal/example/callback.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/example/small-qrcode.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/lib/main.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/index.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMath.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMode.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js
/.local/node/node_modules/npm/node_modules/qrcode-terminal/.travis.yml
/.local/node/node_modules/npm/node_modules/qrcode-terminal/LICENSE
/.local/node/node_modules/npm/node_modules/qrcode-terminal/package.json
/.local/node/node_modules/npm/node_modules/qrcode-terminal/README.md
/.local/node/node_modules/npm/node_modules/read/dist/commonjs/package.json
/.local/node/node_modules/npm/node_modules/read/dist/commonjs/read.js
/.local/node/node_modules/npm/node_modules/read/dist/esm/package.json
/.local/node/node_modules/npm/node_modules/read/dist/esm/read.js
/.local/node/node_modules/npm/node_modules/read/LICENSE
/.local/node/node_modules/npm/node_modules/read/package.json
/.local/node/node_modules/npm/node_modules/read-cmd-shim/lib/index.js
/.local/node/node_modules/npm/node_modules/read-cmd-shim/LICENSE
/.local/node/node_modules/npm/node_modules/read-cmd-shim/package.json
/.local/node/node_modules/npm/node_modules/read-package-json-fast/lib/index.js
/.local/node/node_modules/npm/node_modules/read-package-json-fast/LICENSE
/.local/node/node_modules/npm/node_modules/read-package-json-fast/package.json
/.local/node/node_modules/npm/node_modules/retry/example/dns.js
/.local/node/node_modules/npm/node_modules/retry/example/stop.js
/.local/node/node_modules/npm/node_modules/retry/lib/retry.js
/.local/node/node_modules/npm/node_modules/retry/lib/retry_operation.js
/.local/node/node_modules/npm/node_modules/retry/equation.gif
/.local/node/node_modules/npm/node_modules/retry/index.js
/.local/node/node_modules/npm/node_modules/retry/License
/.local/node/node_modules/npm/node_modules/retry/Makefile
/.local/node/node_modules/npm/node_modules/retry/package.json
/.local/node/node_modules/npm/node_modules/safer-buffer/dangerous.js
/.local/node/node_modules/npm/node_modules/safer-buffer/LICENSE
/.local/node/node_modules/npm/node_modules/safer-buffer/package.json
/.local/node/node_modules/npm/node_modules/safer-buffer/Porting-Buffer.md
/.local/node/node_modules/npm/node_modules/safer-buffer/safer.js
/.local/node/node_modules/npm/node_modules/safer-buffer/tests.js
/.local/node/node_modules/npm/node_modules/semver/bin/semver.js
/.local/node/node_modules/npm/node_modules/semver/classes/comparator.js
/.local/node/node_modules/npm/node_modules/semver/classes/index.js
/.local/node/node_modules/npm/node_modules/semver/classes/range.js
/.local/node/node_modules/npm/node_modules/semver/classes/semver.js
/.local/node/node_modules/npm/node_modules/semver/functions/clean.js
/.local/node/node_modules/npm/node_modules/semver/functions/cmp.js
/.local/node/node_modules/npm/node_modules/semver/functions/coerce.js
/.local/node/node_modules/npm/node_modules/semver/functions/compare.js
/.local/node/node_modules/npm/node_modules/semver/functions/compare-build.js
/.local/node/node_modules/npm/node_modules/semver/functions/compare-loose.js
/.local/node/node_modules/npm/node_modules/semver/functions/diff.js
/.local/node/node_modules/npm/node_modules/semver/functions/eq.js
/.local/node/node_modules/npm/node_modules/semver/functions/gt.js
/.local/node/node_modules/npm/node_modules/semver/functions/gte.js
/.local/node/node_modules/npm/node_modules/semver/functions/inc.js
/.local/node/node_modules/npm/node_modules/semver/functions/lt.js
/.local/node/node_modules/npm/node_modules/semver/functions/lte.js
/.local/node/node_modules/npm/node_modules/semver/functions/major.js
/.local/node/node_modules/npm/node_modules/semver/functions/minor.js
/.local/node/node_modules/npm/node_modules/semver/functions/neq.js
/.local/node/node_modules/npm/node_modules/semver/functions/parse.js
/.local/node/node_modules/npm/node_modules/semver/functions/patch.js
/.local/node/node_modules/npm/node_modules/semver/functions/prerelease.js
/.local/node/node_modules/npm/node_modules/semver/functions/rcompare.js
/.local/node/node_modules/npm/node_modules/semver/functions/rsort.js
/.local/node/node_modules/npm/node_modules/semver/functions/satisfies.js
/.local/node/node_modules/npm/node_modules/semver/functions/sort.js
/.local/node/node_modules/npm/node_modules/semver/functions/valid.js
/.local/node/node_modules/npm/node_modules/semver/internal/constants.js
/.local/node/node_modules/npm/node_modules/semver/internal/debug.js
/.local/node/node_modules/npm/node_modules/semver/internal/identifiers.js
/.local/node/node_modules/npm/node_modules/semver/internal/lrucache.js
/.local/node/node_modules/npm/node_modules/semver/internal/parse-options.js
/.local/node/node_modules/npm/node_modules/semver/internal/re.js
/.local/node/node_modules/npm/node_modules/semver/ranges/gtr.js
/.local/node/node_modules/npm/node_modules/semver/ranges/intersects.js
/.local/node/node_modules/npm/node_modules/semver/ranges/ltr.js
/.local/node/node_modules/npm/node_modules/semver/ranges/max-satisfying.js
/.local/node/node_modules/npm/node_modules/semver/ranges/min-satisfying.js
/.local/node/node_modules/npm/node_modules/semver/ranges/min-version.js
/.local/node/node_modules/npm/node_modules/semver/ranges/outside.js
/.local/node/node_modules/npm/node_modules/semver/ranges/simplify.js
/.local/node/node_modules/npm/node_modules/semver/ranges/subset.js
/.local/node/node_modules/npm/node_modules/semver/ranges/to-comparators.js
/.local/node/node_modules/npm/node_modules/semver/ranges/valid.js
/.local/node/node_modules/npm/node_modules/semver/index.js
/.local/node/node_modules/npm/node_modules/semver/LICENSE
/.local/node/node_modules/npm/node_modules/semver/package.json
/.local/node/node_modules/npm/node_modules/semver/preload.js
/.local/node/node_modules/npm/node_modules/semver/range.bnf
/.local/node/node_modules/npm/node_modules/semver/README.md
/.local/node/node_modules/npm/node_modules/shebang-command/index.js
/.local/node/node_modules/npm/node_modules/shebang-command/license
/.local/node/node_modules/npm/node_modules/shebang-command/package.json
/.local/node/node_modules/npm/node_modules/shebang-regex/index.js
/.local/node/node_modules/npm/node_modules/shebang-regex/license
/.local/node/node_modules/npm/node_modules/shebang-regex/package.json
/.local/node/node_modules/npm/node_modules/signal-exit/dist/cjs/browser.js
/.local/node/node_modules/npm/node_modules/signal-exit/dist/cjs/index.js
/.local/node/node_modules/npm/node_modules/signal-exit/dist/cjs/package.json
/.local/node/node_modules/npm/node_modules/signal-exit/dist/cjs/signals.js
/.local/node/node_modules/npm/node_modules/signal-exit/dist/mjs/browser.js
/.local/node/node_modules/npm/node_modules/signal-exit/dist/mjs/index.js
/.local/node/node_modules/npm/node_modules/signal-exit/dist/mjs/package.json
/.local/node/node_modules/npm/node_modules/signal-exit/dist/mjs/signals.js
/.local/node/node_modules/npm/node_modules/signal-exit/LICENSE.txt
/.local/node/node_modules/npm/node_modules/signal-exit/package.json
/.local/node/node_modules/npm/node_modules/sigstore/dist/config.js
/.local/node/node_modules/npm/node_modules/sigstore/dist/index.js
/.local/node/node_modules/npm/node_modules/sigstore/dist/sigstore.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/build.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/bundle.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/error.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/serialized.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/utility.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/dist/validate.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/LICENSE
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle/package.json
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/error.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/length.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/obj.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/parse.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/asn1/tag.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/rfc3161/error.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/rfc3161/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/rfc3161/timestamp.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/rfc3161/tstinfo.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/x509/cert.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/x509/ext.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/x509/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/x509/sct.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/crypto.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/dsse.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/encoding.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/json.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/oid.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/pem.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/dist/stream.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/LICENSE
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core/package.json
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/base.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/bundle.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/dsse.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/bundler/message.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/error.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/fetch.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/fulcio.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/rekor.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/external/tsa.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/identity/ci.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/identity/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/identity/provider.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/fulcio/ca.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/fulcio/ephemeral.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/fulcio/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/signer/signer.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/types/fetch.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/util/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/util/oidc.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/util/ua.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tlog/client.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tlog/entry.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tlog/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tsa/client.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/tsa/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/witness/witness.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/error.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/dist/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/LICENSE
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign/package.json
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/bundle/dsse.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/bundle/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/bundle/message.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/key/certificate.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/key/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/key/sct.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/checkpoint.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/merkle.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/set.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/timestamp/tsa.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/tlog/dsse.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/tlog/hashedrekord.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/tlog/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/tlog/intoto.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/trust/filter.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/trust/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/trust/trust.types.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/error.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/index.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/policy.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/shared.types.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/dist/verifier.js
/.local/node/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify/package.json
/.local/node/node_modules/npm/node_modules/sigstore/LICENSE
/.local/node/node_modules/npm/node_modules/sigstore/package.json
/.local/node/node_modules/npm/node_modules/smart-buffer/docs/ROADMAP.md
/.local/node/node_modules/npm/node_modules/smart-buffer/LICENSE
/.local/node/node_modules/npm/node_modules/smart-buffer/package.json
/.local/node/node_modules/npm/node_modules/socks/docs/examples/javascript/associateExample.md
/.local/node/node_modules/npm/node_modules/socks/docs/examples/javascript/bindExample.md
/.local/node/node_modules/npm/node_modules/socks/docs/examples/javascript/connectExample.md
/.local/node/node_modules/npm/node_modules/socks/docs/examples/typescript/associateExample.md
/.local/node/node_modules/npm/node_modules/socks/docs/examples/typescript/bindExample.md
/.local/node/node_modules/npm/node_modules/socks/docs/examples/typescript/connectExample.md
/.local/node/node_modules/npm/node_modules/socks/docs/examples/index.md
/.local/node/node_modules/npm/node_modules/socks/docs/index.md
/.local/node/node_modules/npm/node_modules/socks/docs/migratingFromV1.md
/.local/node/node_modules/npm/node_modules/socks/LICENSE
/.local/node/node_modules/npm/node_modules/socks/package.json
/.local/node/node_modules/npm/node_modules/socks-proxy-agent/dist/index.js
/.local/node/node_modules/npm/node_modules/socks-proxy-agent/LICENSE
/.local/node/node_modules/npm/node_modules/socks-proxy-agent/package.json
/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/AUTHORS
/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/index.js
/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/LICENSE
/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/package.json
/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/parse.js
/.local/node/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse/scan.js
/.local/node/node_modules/npm/node_modules/spdx-correct/index.js
/.local/node/node_modules/npm/node_modules/spdx-correct/LICENSE
/.local/node/node_modules/npm/node_modules/spdx-correct/package.json
/.local/node/node_modules/npm/node_modules/spdx-exceptions/deprecated.json
/.local/node/node_modules/npm/node_modules/spdx-exceptions/index.json
/.local/node/node_modules/npm/node_modules/spdx-exceptions/package.json
/.local/node/node_modules/npm/node_modules/spdx-expression-parse/AUTHORS
/.local/node/node_modules/npm/node_modules/spdx-expression-parse/index.js
/.local/node/node_modules/npm/node_modules/spdx-expression-parse/LICENSE
/.local/node/node_modules/npm/node_modules/spdx-expression-parse/package.json
/.local/node/node_modules/npm/node_modules/spdx-expression-parse/parse.js
/.local/node/node_modules/npm/node_modules/spdx-expression-parse/scan.js
/.local/node/node_modules/npm/node_modules/spdx-license-ids/deprecated.json
/.local/node/node_modules/npm/node_modules/spdx-license-ids/index.json
/.local/node/node_modules/npm/node_modules/spdx-license-ids/package.json
/.local/node/node_modules/npm/node_modules/sprintf-js/demo/angular.html
/.local/node/node_modules/npm/node_modules/sprintf-js/dist/.gitattributes
/.local/node/node_modules/npm/node_modules/sprintf-js/dist/angular-sprintf.min.js
/.local/node/node_modules/npm/node_modules/sprintf-js/dist/sprintf.min.js
/.local/node/node_modules/npm/node_modules/sprintf-js/src/angular-sprintf.js
/.local/node/node_modules/npm/node_modules/sprintf-js/src/sprintf.js
/.local/node/node_modules/npm/node_modules/sprintf-js/bower.json
/.local/node/node_modules/npm/node_modules/sprintf-js/CONTRIBUTORS.md
/.local/node/node_modules/npm/node_modules/sprintf-js/gruntfile.js
/.local/node/node_modules/npm/node_modules/sprintf-js/LICENSE
/.local/node/node_modules/npm/node_modules/sprintf-js/package.json
/.local/node/node_modules/npm/node_modules/ssri/lib/index.js
/.local/node/node_modules/npm/node_modules/ssri/LICENSE.md
/.local/node/node_modules/npm/node_modules/ssri/package.json
/.local/node/node_modules/npm/node_modules/string-width/index.js
/.local/node/node_modules/npm/node_modules/string-width/license
/.local/node/node_modules/npm/node_modules/string-width/package.json
/.local/node/node_modules/npm/node_modules/string-width-cjs/index.js
/.local/node/node_modules/npm/node_modules/string-width-cjs/license
/.local/node/node_modules/npm/node_modules/string-width-cjs/package.json
/.local/node/node_modules/npm/node_modules/strip-ansi/index.js
/.local/node/node_modules/npm/node_modules/strip-ansi/license
/.local/node/node_modules/npm/node_modules/strip-ansi/package.json
/.local/node/node_modules/npm/node_modules/strip-ansi-cjs/index.js
/.local/node/node_modules/npm/node_modules/strip-ansi-cjs/license
/.local/node/node_modules/npm/node_modules/strip-ansi-cjs/package.json
/.local/node/node_modules/npm/node_modules/supports-color/browser.js
/.local/node/node_modules/npm/node_modules/supports-color/index.js
/.local/node/node_modules/npm/node_modules/supports-color/license
/.local/node/node_modules/npm/node_modules/supports-color/package.json
/.local/node/node_modules/npm/node_modules/tar/lib/create.js
/.local/node/node_modules/npm/node_modules/tar/lib/extract.js
/.local/node/node_modules/npm/node_modules/tar/lib/get-write-flag.js
/.local/node/node_modules/npm/node_modules/tar/lib/header.js
/.local/node/node_modules/npm/node_modules/tar/lib/high-level-opt.js
/.local/node/node_modules/npm/node_modules/tar/lib/large-numbers.js
/.local/node/node_modules/npm/node_modules/tar/lib/list.js
/.local/node/node_modules/npm/node_modules/tar/lib/mkdir.js
/.local/node/node_modules/npm/node_modules/tar/lib/mode-fix.js
/.local/node/node_modules/npm/node_modules/tar/lib/normalize-unicode.js
/.local/node/node_modules/npm/node_modules/tar/lib/normalize-windows-path.js
/.local/node/node_modules/npm/node_modules/tar/lib/pack.js
/.local/node/node_modules/npm/node_modules/tar/lib/parse.js
/.local/node/node_modules/npm/node_modules/tar/lib/path-reservations.js
/.local/node/node_modules/npm/node_modules/tar/lib/pax.js
/.local/node/node_modules/npm/node_modules/tar/lib/read-entry.js
/.local/node/node_modules/npm/node_modules/tar/lib/replace.js
/.local/node/node_modules/npm/node_modules/tar/lib/strip-absolute-path.js
/.local/node/node_modules/npm/node_modules/tar/lib/strip-trailing-slashes.js
/.local/node/node_modules/npm/node_modules/tar/lib/types.js
/.local/node/node_modules/npm/node_modules/tar/lib/unpack.js
/.local/node/node_modules/npm/node_modules/tar/lib/update.js
/.local/node/node_modules/npm/node_modules/tar/lib/warn-mixin.js
/.local/node/node_modules/npm/node_modules/tar/lib/winchars.js
/.local/node/node_modules/npm/node_modules/tar/lib/write-entry.js
/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass/index.js
/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass/LICENSE
/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass/package.json
/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/index.js
/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/LICENSE
/.local/node/node_modules/npm/node_modules/tar/node_modules/fs-minipass/package.json
/.local/node/node_modules/npm/node_modules/tar/node_modules/minipass/index.js
/.local/node/node_modules/npm/node_modules/tar/node_modules/minipass/index.mjs
/.local/node/node_modules/npm/node_modules/tar/node_modules/minipass/LICENSE
/.local/node/node_modules/npm/node_modules/tar/node_modules/minipass/package.json
/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass/index.js
/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass/LICENSE
/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass/package.json
/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/constants.js
/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/index.js
/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/LICENSE
/.local/node/node_modules/npm/node_modules/tar/node_modules/minizlib/package.json
/.local/node/node_modules/npm/node_modules/tar/index.js
/.local/node/node_modules/npm/node_modules/tar/LICENSE
/.local/node/node_modules/npm/node_modules/tar/package.json
/.local/node/node_modules/npm/node_modules/text-table/example/align.js
/.local/node/node_modules/npm/node_modules/text-table/example/center.js
/.local/node/node_modules/npm/node_modules/text-table/example/dotalign.js
/.local/node/node_modules/npm/node_modules/text-table/example/doubledot.js
/.local/node/node_modules/npm/node_modules/text-table/example/table.js
/.local/node/node_modules/npm/node_modules/text-table/index.js
/.local/node/node_modules/npm/node_modules/text-table/LICENSE
/.local/node/node_modules/npm/node_modules/text-table/package.json
/.local/node/node_modules/npm/node_modules/tiny-relative-date/lib/factory.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/lib/index.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/src/factory.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/src/index.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/da.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/de.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/en.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/en-short.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/translations/es.js
/.local/node/node_modules/npm/node_modules/tiny-relative-date/LICENSE.md
/.local/node/node_modules/npm/node_modules/tiny-relative-date/package.json
/.local/node/node_modules/npm/node_modules/tinyglobby/dist/index.d.mts
/.local/node/node_modules/npm/node_modules/tinyglobby/dist/index.js
/.local/node/node_modules/npm/node_modules/tinyglobby/dist/index.mjs
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/get-array.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/group-files.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/invoke-callback.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/join-path.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-directory.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/push-file.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/resolve-symlink.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/functions/walk-directory.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/async.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/counter.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/queue.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/sync.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/api/walker.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/builder/api-builder.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/builder/index.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.cjs
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.d.cts
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.d.mts
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/index.mjs
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/types.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/dist/utils.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/LICENSE
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/fdir/package.json
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/constants.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/parse.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/picomatch.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/scan.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/lib/utils.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/index.js
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/LICENSE
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/package.json
/.local/node/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch/posix.js
/.local/node/node_modules/npm/node_modules/tinyglobby/LICENSE
/.local/node/node_modules/npm/node_modules/tinyglobby/package.json
/.local/node/node_modules/npm/node_modules/treeverse/lib/breadth.js
/.local/node/node_modules/npm/node_modules/treeverse/lib/depth.js
/.local/node/node_modules/npm/node_modules/treeverse/lib/depth-descent.js
/.local/node/node_modules/npm/node_modules/treeverse/lib/index.js
/.local/node/node_modules/npm/node_modules/treeverse/LICENSE
/.local/node/node_modules/npm/node_modules/treeverse/package.json
/.local/node/node_modules/npm/node_modules/tuf-js/dist/utils/tmpfile.js
/.local/node/node_modules/npm/node_modules/tuf-js/dist/utils/url.js
/.local/node/node_modules/npm/node_modules/tuf-js/dist/config.js
/.local/node/node_modules/npm/node_modules/tuf-js/dist/error.js
/.local/node/node_modules/npm/node_modules/tuf-js/dist/fetcher.js
/.local/node/node_modules/npm/node_modules/tuf-js/dist/index.js
/.local/node/node_modules/npm/node_modules/tuf-js/dist/store.js
/.local/node/node_modules/npm/node_modules/tuf-js/dist/updater.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/guard.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/index.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/key.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/oid.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/types.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/utils/verify.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/base.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/delegations.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/error.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/file.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/index.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/key.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/metadata.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/role.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/root.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/signature.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/snapshot.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/targets.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/dist/timestamp.js
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/LICENSE
/.local/node/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models/package.json
/.local/node/node_modules/npm/node_modules/tuf-js/LICENSE
/.local/node/node_modules/npm/node_modules/tuf-js/package.json
/.local/node/node_modules/npm/node_modules/unique-filename/lib/index.js
/.local/node/node_modules/npm/node_modules/unique-filename/LICENSE
/.local/node/node_modules/npm/node_modules/unique-filename/package.json
/.local/node/node_modules/npm/node_modules/unique-slug/lib/index.js
/.local/node/node_modules/npm/node_modules/unique-slug/LICENSE
/.local/node/node_modules/npm/node_modules/unique-slug/package.json
/.local/node/node_modules/npm/node_modules/util-deprecate/browser.js
/.local/node/node_modules/npm/node_modules/util-deprecate/History.md
/.local/node/node_modules/npm/node_modules/util-deprecate/LICENSE
/.local/node/node_modules/npm/node_modules/util-deprecate/node.js
/.local/node/node_modules/npm/node_modules/util-deprecate/package.json
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/AUTHORS
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/index.js
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/LICENSE
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/package.json
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/parse.js
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse/scan.js
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/index.js
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/LICENSE
/.local/node/node_modules/npm/node_modules/validate-npm-package-license/package.json
/.local/node/node_modules/npm/node_modules/validate-npm-package-name/lib/index.js
/.local/node/node_modules/npm/node_modules/validate-npm-package-name/LICENSE
/.local/node/node_modules/npm/node_modules/validate-npm-package-name/package.json
/.local/node/node_modules/npm/node_modules/walk-up-path/dist/cjs/index.js
/.local/node/node_modules/npm/node_modules/walk-up-path/dist/cjs/package.json
/.local/node/node_modules/npm/node_modules/walk-up-path/dist/mjs/index.js
/.local/node/node_modules/npm/node_modules/walk-up-path/dist/mjs/package.json
/.local/node/node_modules/npm/node_modules/walk-up-path/LICENSE
/.local/node/node_modules/npm/node_modules/walk-up-path/package.json
/.local/node/node_modules/npm/node_modules/which/bin/which.js
/.local/node/node_modules/npm/node_modules/which/lib/index.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/index.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/options.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/package.json
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/posix.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/cjs/win32.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/index.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/options.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/package.json
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/posix.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/dist/mjs/win32.js
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/LICENSE
/.local/node/node_modules/npm/node_modules/which/node_modules/isexe/package.json
/.local/node/node_modules/npm/node_modules/which/LICENSE
/.local/node/node_modules/npm/node_modules/which/package.json
/.local/node/node_modules/npm/node_modules/which/README.md
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/index.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/RGI_Emoji.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/es2015/text.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/index.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/LICENSE-MIT.txt
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/package.json
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/RGI_Emoji.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex/text.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/index.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/license
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/package.json
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license
/.local/node/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json
/.local/node/node_modules/npm/node_modules/wrap-ansi/index.js
/.local/node/node_modules/npm/node_modules/wrap-ansi/license
/.local/node/node_modules/npm/node_modules/wrap-ansi/package.json
/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/index.js
/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/license
/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles/package.json
/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/index.js
/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/license
/.local/node/node_modules/npm/node_modules/wrap-ansi-cjs/package.json
/.local/node/node_modules/npm/node_modules/write-file-atomic/lib/index.js
/.local/node/node_modules/npm/node_modules/write-file-atomic/LICENSE.md
/.local/node/node_modules/npm/node_modules/write-file-atomic/package.json
/.local/node/node_modules/npm/node_modules/yallist/iterator.js
/.local/node/node_modules/npm/node_modules/yallist/LICENSE
/.local/node/node_modules/npm/node_modules/yallist/package.json
/.local/node/node_modules/npm/node_modules/yallist/yallist.js
/.local/node/node_modules/npm/.npmrc
/.local/node/node_modules/npm/index.js
/.local/node/node_modules/npm/LICENSE
/.local/node/node_modules/npm/package.json
/.local/node/node_modules/npm/README.md
/.local/node/CHANGELOG.md
/.local/node/corepack
/.local/node/corepack.cmd
/.local/node/install_tools.bat
/.local/node/LICENSE
/.local/node/node.exe
/.local/node/nodevars.bat
/.local/node/npm
/.local/node/npm.cmd
/.local/node/npm.ps1
/.local/node/npx
/.local/node/npx.cmd
/.local/node/npx.ps1
/.local/node/README.md
/.local/node-v22.22.1-win-x64.zip
.local/mqtt-smoke/AwsIotConnectRunner.java
New file
@@ -0,0 +1,81 @@
import com.zy.integration.iot.client.impl.PahoIotMqttClient;
import com.zy.integration.iot.handler.IotInboundMessageHandler;
import com.zy.iot.config.IotProperties;
import com.zy.iot.entity.IotTopicConfig;
import java.lang.reflect.Field;
/**
 * 只做 IoT MQTT 建连与订阅验证,不下发业务消息,避免污染正式 topic。
 * 支持两种调用方式:
 * 1. 明文 TCP:<endpoint> <clientId> <egressStow> <egressPick> <egressFeedback>
 * 2. TLS/mTLS:<endpoint> <clientId> <caCert> <clientCert> <clientKey> <egressStow> <egressPick> <egressFeedback>
 */
public class AwsIotConnectRunner {
    public static void main(String[] args) throws Exception {
        if (args.length != 5 && args.length != 8) {
            System.err.println("Usage plain : <endpoint> <clientId> <egressStow> <egressPick> <egressFeedback>");
            System.err.println("Usage tls   : <endpoint> <clientId> <caCert> <clientCert> <clientKey> <egressStow> <egressPick> <egressFeedback>");
            System.exit(2);
        }
        boolean tlsMode = args.length == 8;
        IotProperties properties = new IotProperties();
        properties.setEnabled(true);
        properties.setEndpoint(args[0]);
        properties.setPort(tlsMode ? 8883 : 1883);
        properties.setThingName(args[1]);
        properties.setClientId(args[1]);
        properties.setCleanSession(false);
        properties.setAutomaticReconnect(true);
        properties.setKeepAliveSeconds(60);
        properties.setConnectionTimeoutSeconds(10);
        properties.setPersistenceDir(".local/iot-mqtt-connect-test");
        int topicOffset;
        if (tlsMode) {
            properties.setCaCertPath(args[2]);
            properties.setClientCertPath(args[3]);
            properties.setPrivateKeyPath(args[4]);
            topicOffset = 5;
        } else {
            topicOffset = 2;
        }
        IotTopicConfig topics = properties.getTopics();
        topics.setEgressStow(args[topicOffset]);
        topics.setEgressPick(args[topicOffset + 1]);
        topics.setEgressFeedback(args[topicOffset + 2]);
        IotInboundMessageHandler inboundHandler = new IotInboundMessageHandler() {
            @Override
            public void handleMessage(String topic, String payload) {
                System.out.println("received topic=" + topic + ", payloadLength=" + (payload == null ? 0 : payload.length()));
            }
        };
        PahoIotMqttClient client = new PahoIotMqttClient();
        setField(client, "iotProperties", properties);
        setField(client, "inboundMessageHandler", inboundHandler);
        try {
            client.ensureConnected();
            if (!client.isConnected()) {
                throw new IllegalStateException("MQTT client not connected");
            }
            System.out.println("IoT MQTT connect test passed");
            System.out.println("serverUri=" + properties.getServerUri());
            System.out.println("clientId=" + properties.getResolvedClientId());
            Thread.sleep(3000L);
        } finally {
            client.destroy();
        }
    }
    private static void setField(Object target, String name, Object value) throws Exception {
        Field field = target.getClass().getDeclaredField(name);
        field.setAccessible(true);
        field.set(target, value);
    }
}
.local/mqtt-smoke/bin/AwsIotConnectRunner$1.class
Binary files differ
.local/mqtt-smoke/bin/AwsIotConnectRunner.class
Binary files differ
pom.xml
@@ -118,6 +118,21 @@
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk15on</artifactId>
            <version>1.70</version>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.70</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -459,6 +459,7 @@
            validComb.add(mesToCombParam);
        }
        for (MesToCombParam mesToCombParam : validComb) {
            mesToCombParam.setBoxType1("ERP");
            openService.mesToComb(mesToCombParam);
        }
        // TODO:待测试
src/main/java/com/zy/asrs/entity/param/MesToCombParam.java
@@ -31,4 +31,6 @@
    private String bizNo;
    //是否散货,0 非散货;1 散货;为了管控出货速率,散货可以出慢点。
    private Integer package1;
    //入库通知来源,ERP 默认 erp,MQTT 组托传 aws。
    private String boxType1;
}
src/main/java/com/zy/asrs/service/ExternalTaskFacadeService.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service;
import com.core.common.R;
import com.zy.asrs.entity.param.MesToCombParam;
import com.zy.asrs.entity.param.OutTaskParam;
public interface ExternalTaskFacadeService {
    R acceptInboundNotice(MesToCombParam param);
    R createOutboundTask(OutTaskParam param, boolean autoConfirm);
}
src/main/java/com/zy/asrs/service/impl/ExternalTaskFacadeServiceImpl.java
New file
@@ -0,0 +1,108 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.param.MesToCombParam;
import com.zy.asrs.entity.param.OpenOrderPakoutPauseParam;
import com.zy.asrs.entity.param.OutTaskParam;
import com.zy.asrs.service.ExternalTaskFacadeService;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.OpenService;
import com.zy.asrs.service.WaitPakinService;
import com.zy.asrs.service.WrkDetlService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
 * 对外任务门面。
 * 把 Controller 里的校验和放行逻辑沉到 service,便于 HTTP 和 MQTT 两条入口共用。
 */
@Service
public class ExternalTaskFacadeServiceImpl implements ExternalTaskFacadeService {
    @Autowired
    private OpenService openService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private WaitPakinService waitPakinService;
    /**
     * 复用现有入库通知建档逻辑,并补充托盘重复校验。
     */
    @Override
    public R acceptInboundNotice(MesToCombParam param) {
        if (param == null) {
            return R.error("请求参数不能为空");
        }
        if (Cools.isEmpty(param.getPalletId())) {
            return R.error("palletId不能为空");
        }
        if (Cools.isEmpty(param.getBizNo())) {
            return R.error("bizNo不能为空");
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.LocDetl>().eq("zpallet", param.getPalletId()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.WrkDetl>().eq("zpallet", param.getPalletId()));
        if (countLoc > 0 || countWrk > 0) {
            return R.error("托盘已在库存中/已开始入库");
        }
        if (waitPakinService.selectCount(new EntityWrapper<com.zy.asrs.entity.WaitPakin>()
                .eq("zpallet", param.getPalletId())
                .eq("io_status", "N")) > 0) {
            // 同托盘存在旧的待入库通知时,删除旧记录,保留最新一次预登记。
            waitPakinService.delete(new EntityWrapper<com.zy.asrs.entity.WaitPakin>().eq("zpallet", param.getPalletId()));
        }
        R result = openService.mesToComb(param);
        return result == null ? R.ok() : result;
    }
    /**
     * 复用现有出库建单逻辑;当 autoConfirm=true 时,继续调用原有确认接口自动放行。
     */
    @Override
    public R createOutboundTask(OutTaskParam param, boolean autoConfirm) {
        if (param == null) {
            return R.error("请求参数不能为空");
        }
        if (Cools.isEmpty(param.getOrderId())) {
            return R.error("出库单号不能为空");
        }
        if (Cools.isEmpty(param.getPalletId())) {
            return R.error("palletId不能为空");
        }
        if (Cools.isEmpty(param.getStationId())) {
            return R.error("stationId不能为空");
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<com.zy.asrs.entity.LocDetl>().eq("zpallet", param.getPalletId()));
        if (countLoc == 0) {
            return R.error("库存中不存在该托盘");
        }
        if (param.getSeq() == null) {
            param.setSeq(1);
        }
        R result = openService.outOrder(param, 1);
        if (!Objects.equals(result.get("code"), 200) || !autoConfirm) {
            return result;
        }
        // IoT pick 约定为“收到即执行”,因此这里直接复用原有确认放行接口。
        OpenOrderPakoutPauseParam executeParam = new OpenOrderPakoutPauseParam();
        executeParam.setOrderId(param.getOrderId());
        executeParam.setExecute(1);
        R confirmResult = openService.pakoutOrderPause(executeParam);
        if (result.get("wrkNo") != null) {
            confirmResult.add(Cools.add("wrkNo", result.get("wrkNo")));
        }
        return confirmResult;
    }
}
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1258,7 +1258,12 @@
            if (param.getFull() == 1) {
                //满托盘
                mat = matService.selectByMatnr("cloudWarehouse");
                if(param.getBoxType1().equals("aws")){
                    mat = matService.selectByMatnr("amazon");
                }else {
                    mat = matService.selectByMatnr("cloudWarehouse");
                }
            } else if (param.getFull() == 0) {
                //空托盘
                mat = matService.selectByMatnr("emptyPallet");
@@ -1283,11 +1288,12 @@
        waitPakin.setManu(String.valueOf(param.getLocId()));//mes具体库位编号
        waitPakin.setThreeCode(param.getBizNo());
        waitPakin.setBeBatch(param.getPackage1());//是否散货,0 非散货;1 散货;为了管控出货速率,散货可以出慢点。
        waitPakin.setBoxType1("erp");
        // ERP 入口默认打 erp,MQTT 组托会在参数里显式传 aws。
        waitPakin.setBoxType1(Cools.isEmpty(param.getBoxType1()) ? "erp" : param.getBoxType1());
        if (!waitPakinService.insert(waitPakin)) {
            throw new CoolException("保存入库通知档失败");
        }
        return null;
        return R.ok().add(Cools.add("palletId", param.getPalletId()).add("orderId", param.getOrderId()));
    }
    @Override
@@ -1366,7 +1372,8 @@
            log.error(locMast.getLocNo() + "库位不是在库状态");
            throw new CoolException(locMast.getLocNo() + "库位不是在库状态");
        }
        return R.ok();
        return R.ok().add(Cools.add("wrkNo", workNo).add("orderId", param.getOrderId()));
    }
}
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -10,6 +10,7 @@
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.entity.Parameter;
import com.zy.integration.iot.biz.IotInstructionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -49,6 +50,8 @@
    private OrderPakinService orderPakinService;
    @Autowired
    private WorkService workService;
    @Autowired
    private IotInstructionService iotInstructionService;
    @Value("${erp.switch.ErpReportOld}")
    private boolean erpReportOld;
@@ -456,6 +459,7 @@
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg("更新入库完成状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]");
            }
            iotInstructionService.queueWorkCompletion(wrkMast);
        } catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
@@ -605,6 +609,7 @@
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                return FAIL.setMsg("更新出库完成状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
            }
            iotInstructionService.queueWorkCompletion(wrkMast);
        } catch (Exception e) {
            log.error("fail", e);
            e.printStackTrace();
src/main/java/com/zy/asrs/utils/Utils.java
@@ -338,11 +338,11 @@
            return defaultRowLastno;
        }
        RowLastnoService rowLastnoService = SpringUtils.getBean(RowLastnoService.class);
        List<RowLastno> typeMatched = rowLastnoService.selectList(new EntityWrapper<RowLastno>()
                .eq("type_id", area));
        if (!Cools.isEmpty(typeMatched)) {
            return typeMatched.get(0);
        }
//        List<RowLastno> typeMatched = rowLastnoService.selectList(new EntityWrapper<RowLastno>()
//                .eq("type_id", area));
//        if (!Cools.isEmpty(typeMatched)) {
//            return typeMatched.get(0);
//        }
        List<RowLastno> whsMatched = rowLastnoService.selectList(new EntityWrapper<RowLastno>()
                .eq("whs_type", area));
        if (!Cools.isEmpty(whsMatched)) {
src/main/java/com/zy/common/web/WcsController.java
@@ -52,42 +52,47 @@
    private RowLastnoService rowLastnoService;
    @Autowired
    private WorkService workService;
    @Autowired
    private StaDescService staDescService;
    @PostMapping("/pakin/loc/v1")
    @ResponseBody
    public synchronized R getLocNo(@RequestBody SearchLocParam param) {
        long startTime = System.currentTimeMillis();
        String barcode = param == null ? null : param.getBarcode();
        Integer sourceStaNo = param == null ? null : param.getSourceStaNo();
        try {
            if(param.getBarcode().contains("-") || param.getBarcode().contains("gsl")){
                log.info("收到WCS入库接口请求====>>入参:{}", param);
            }
            if (Cools.isEmpty(param.getSourceStaNo())) {
                return R.error("源站编号不能为空");
            }
            List<WaitPakin> waitPakins = null;
        if(param.getBarcode().contains("-") || param.getBarcode().contains("gsl")){
            log.info("收到WCS入库接口请求====>>入参:{}", param);
        }
        if (Cools.isEmpty(param.getSourceStaNo())) {
            return R.error("源站编号不能为空");
        }
        List<WaitPakin> waitPakins = null;
        if (Cools.isEmpty(param.getBarcode())) {
            return R.error("条码不能为空");
        }
        WrkMast wrkMast1 = wrkMastService.selectByBarcode(param.getBarcode());
        if (!Cools.isEmpty(wrkMast1) && wrkMast1.getWrkSts() == 2) {
            StartupDto dto1 = new StartupDto();
            dto1.setBarcode(param.getBarcode());
            dto1.setStaNo(Integer.valueOf(wrkMast1.getStaNo()));
            String wcsLoc = Utils.WMSLocToWCSLoc(wrkMast1.getLocNo());
            dto1.setLocNo(wcsLoc);
            dto1.setCrnNo(wrkMast1.getCrnNo());
            dto1.setWorkNo(wrkMast1.getWrkNo());
            dto1.setTaskNo(wrkMast1.getWrkNo() + "");
            if (Cools.isEmpty(param.getBarcode())) {
                return R.error("条码不能为空");
            }
            WrkMast wrkMast1 = wrkMastService.selectByBarcode(param.getBarcode());
            if (!Cools.isEmpty(wrkMast1) && wrkMast1.getWrkSts() == 2) {
                StartupDto dto1 = new StartupDto();
                dto1.setBarcode(param.getBarcode());
                dto1.setStaNo(Integer.valueOf(wrkMast1.getStaNo()));
                String wcsLoc = Utils.WMSLocToWCSLoc(wrkMast1.getLocNo());
                dto1.setLocNo(wcsLoc);
                dto1.setCrnNo(wrkMast1.getCrnNo());
                dto1.setWorkNo(wrkMast1.getWrkNo());
                dto1.setTaskNo(wrkMast1.getWrkNo() + "");
//            dto1.setTaskPri((int) Math.round(wrkMast1.getIoPri()));
            return R.ok(dto1);
        }
                return R.ok(dto1);
            }
//        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("io_type", 1));
//        if (!Cools.isEmpty(wrkMasts) && wrkMasts.size() > 10) {
//            return R.error("限行");
//        }
        waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
        if (Cools.isEmpty(waitPakins)) {
            return R.error("请先添加入库通知档");
            waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
            if (Cools.isEmpty(waitPakins)) {
                return R.error("请先添加入库通知档");
//            WrkMast wrkMast = wrkMastService.selectByBarcode(param.getBarcode());
//            if (wrkMast != null && wrkMast.getIoType() == 103) {
//                return R.parse(CodeRes.PICK_600);
@@ -112,27 +117,30 @@
//                return R.error("自动生成入库通知档后未查询到数据");
//            }
//            log.info("WCS入库接口自动生成入库通知档, zpallet:{}, matnr:{}, anfme:{}", param.getBarcode(), "32149", 1D);
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()));
        if (countLoc > 0 || countWrk > 0) {
            return R.error(CodeRes.EXIST_500);
        }
        if (Cools.isEmpty(param.getLocType1())) {
            return R.error("高低检测信号不能为空");
        }
            }
            int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
            int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()));
            if (countLoc > 0 || countWrk > 0) {
                return R.error(CodeRes.EXIST_500);
            }
            if (Cools.isEmpty(param.getLocType1())) {
                return R.error("高低检测信号不能为空");
            }
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
        sourceStaNo.setLocType1(param.getLocType1());
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        if (waitPakins.get(0).getMatnr().equals("emptyPallet")) {
            locTypeDto.setLocType2((short) 1);
        }
            // 源站点状态检测
            BasDevp sourceStaNoEntity = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
            sourceStaNoEntity.setLocType1(param.getLocType1());
            LocTypeDto locTypeDto = new LocTypeDto(sourceStaNoEntity);
            if (waitPakins.get(0).getMatnr().equals("emptyPallet")) {
                locTypeDto.setLocType2((short) 1);
            }
        StartupDto dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins);
        log.info("WCS入库接口返参:{},托盘码:{}", dto, param.getBarcode());
        return R.ok().add(dto);
            StartupDto dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins);
            log.info("WCS入库接口返参:{},托盘码:{}", dto, param.getBarcode());
            return R.ok().add(dto);
        } finally {
            log.info("WCS入库接口总耗时:{}ms, sourceStaNo:{}, barcode:{}", System.currentTimeMillis() - startTime, sourceStaNo, barcode);
        }
    }
    @PostMapping("/pakin/agv/loc/v1")
@@ -437,89 +445,143 @@
     */
    @Transactional
    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
        List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
        List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
        long startTime = System.currentTimeMillis();
        try {
            // 源站点状态检测
            BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
            // 检索库位
            List<String> matnrs = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList());
            List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
            FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
//        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(waitPakins.get(0));
        // 满板入库统一按库位排号(row_lastno)的 currentRow/crn_qty 轮询,不参考 WCS 透传的推荐排。
        StartupDto dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto);
        int workNo = dto.getWorkNo();
        Date now = new Date();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
        wrkMast.setIoType(1); // 入出库状态:1.入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo());
        wrkMast.setStaNo(dto.getStaNo());
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(barcode); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 生成工作档明细
        waitPakins.forEach(waitPakin -> {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(waitPakin);
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setIoTime(wrkMast.getIoTime());
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            // IoT 指定了目标库位时优先尝试该库位;不可用时再退回现有自动找位规则。
            StartupDto dto = buildPreferredStartupDto(devpNo, extractPreferredInboundLoc(waitPakins));
            if (dto == null) {
                dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto);
            }
        });
        // 更新入库通知档 ioStatus ===>> Y
        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
                .eq("zpallet", barcode);
        WaitPakin setParam = new WaitPakin();
        setParam.setLocNo(dto.getLocNo());
        setParam.setIoStatus("Y");
        setParam.setModiTime(now);
        if (!waitPakinService.update(setParam, wrapper)) {
            throw new CoolException("更新通知档失败");
        }
            int workNo = dto.getWorkNo();
            Date now = new Date();
            // 生成工作档
            WrkMast wrkMast = new WrkMast();
            wrkMast.setWrkNo(workNo);
            wrkMast.setIoTime(new Date());
            wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
            wrkMast.setIoType(1); // 入出库状态:1.入库
            wrkMast.setIoPri(13D); // 优先级
            wrkMast.setCrnNo(dto.getCrnNo());
            wrkMast.setSourceStaNo(dto.getSourceStaNo());
            wrkMast.setStaNo(dto.getStaNo());
            wrkMast.setLocNo(dto.getLocNo());
            wrkMast.setBarcode(barcode); // 托盘码
            wrkMast.setFullPlt("Y"); // 满板:Y
            wrkMast.setPicking("N"); // 拣料
            wrkMast.setExitMk("N"); // 退出
            wrkMast.setEmptyMk("N"); // 空板
            wrkMast.setLinkMis("Y");
            // 把 referenceId/orderNo 透传到工作主档,便于作业完成后继续回传给 IoT。
            wrkMast.setUserNo(waitPakins.get(0).getOrderNo());
            wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
            // 操作人员数据
            wrkMast.setAppeTime(now);
            wrkMast.setModiTime(now);
            boolean res = wrkMastService.insert(wrkMast);
            if (!res) {
                throw new CoolException("保存工作档失败");
            }
            // 生成工作档明细
            waitPakins.forEach(waitPakin -> {
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(waitPakin);
                wrkDetl.setWrkNo(wrkMast.getWrkNo());
                wrkDetl.setIoTime(wrkMast.getIoTime());
                wrkDetl.setAppeTime(now);
                wrkDetl.setModiTime(now);
                if (!wrkDetlService.insert(wrkDetl)) {
                    throw new CoolException("保存工作明细失败");
                }
            });
            // 更新入库通知档 ioStatus ===>> Y
            Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
                    .eq("zpallet", barcode);
            WaitPakin setParam = new WaitPakin();
            setParam.setLocNo(dto.getLocNo());
            setParam.setIoStatus("Y");
            setParam.setModiTime(now);
            if (!waitPakinService.update(setParam, wrapper)) {
                throw new CoolException("更新通知档失败");
            }
//        // 更新源站点信息
//        sourceStaNo.setWrkNo(workNo);
//        sourceStaNo.setModiTime(now);
//        if (!basDevpService.updateById(sourceStaNo)){
//            throw new CoolException("更新源站失败");
//        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")) {
            locMast.setLocSts("S"); // S.入库预约
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("改变库位状态失败");
            // 更新目标库位状态
            LocMast locMast = locMastService.selectById(dto.getLocNo());
            if (locMast.getLocSts().equals("O")) {
                locMast.setLocSts("S"); // S.入库预约
                locMast.setModiTime(now);
                if (!locMastService.updateById(locMast)) {
                    throw new CoolException("改变库位状态失败");
                }
            } else {
                throw new CoolException(dto.getLocNo() + "目标库位已被占用");
            }
        } else {
            throw new CoolException(dto.getLocNo() + "目标库位已被占用");
            String wcsLoc = Utils.WMSLocToWCSLoc(dto.getLocNo());
            dto.setLocNo(wcsLoc);
            dto.setTaskNo(workNo + "");
            return dto;
        } finally {
            log.info("startupFullPutStore耗时:{}ms, sourceStaNo:{}, barcode:{}", System.currentTimeMillis() - startTime, devpNo, barcode);
        }
        String wcsLoc = Utils.WMSLocToWCSLoc(dto.getLocNo());
        dto.setLocNo(wcsLoc);
        dto.setTaskNo(workNo + "");
    }
    /**
     * 指定库位暂存在入库通知档 manu 字段,等 WCS 真正建任务时再读取。
     */
    private String extractPreferredInboundLoc(List<WaitPakin> waitPakins) {
        if (Cools.isEmpty(waitPakins)) {
            return null;
        }
        for (WaitPakin waitPakin : waitPakins) {
            if (!Cools.isEmpty(waitPakin.getManu())) {
                return waitPakin.getManu();
            }
        }
        return null;
    }
    /**
     * 把远端指定库位转换成可直接下发给 WCS 的目标站台和作业参数。
     * 如果库位已占用或对应设备不在自动模式,则返回 null 交给原有找位逻辑处理。
     */
    private StartupDto buildPreferredStartupDto(Integer sourceStaNo, String preferredLocNo) {
        if (Cools.isEmpty(preferredLocNo)) {
            return null;
        }
        LocMast targetLoc = locMastService.selectById(preferredLocNo);
        if (targetLoc == null || !"O".equalsIgnoreCase(targetLoc.getLocSts())) {
            return null;
        }
        StaDesc staDesc = staDescService.queryCrnStn(targetLoc.getCrnNo());
        if (staDesc == null) {
            return null;
        }
        BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn());
        if (staNo == null || !"Y".equalsIgnoreCase(staNo.getAutoing())) {
            return null;
        }
        StartupDto dto = new StartupDto();
        dto.setWorkNo(commonService.getWorkNo(0));
        dto.setCrnNo(targetLoc.getCrnNo());
        dto.setSourceStaNo(sourceStaNo);
        dto.setStaNo(staNo.getDevNo());
        dto.setLocNo(targetLoc.getLocNo());
        return dto;
    }
    @Transactional
    public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode) {
public StartupDto emptyPlateIn(Integer devpNo, LocTypeDto locTypeDto, String barcode) {
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
        // 检索库位
src/main/java/com/zy/integration/iot/biz/IotInstructionService.java
New file
@@ -0,0 +1,16 @@
package com.zy.integration.iot.biz;
import com.zy.asrs.entity.WrkMast;
import com.zy.iot.entity.IotFeedbackMessage;
import com.zy.iot.entity.IotInstructionMessage;
public interface IotInstructionService {
    Long handleStowInstruction(IotInstructionMessage message, String topic, String rawPayload);
    Long handlePickInstruction(IotInstructionMessage message, String topic, String rawPayload);
    void handleFeedbackAck(IotFeedbackMessage feedbackMessage, String topic, String rawPayload);
    void queueWorkCompletion(WrkMast wrkMast);
}
src/main/java/com/zy/integration/iot/biz/impl/IotInstructionServiceImpl.java
New file
@@ -0,0 +1,439 @@
package com.zy.integration.iot.biz.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.param.MesToCombParam;
import com.zy.asrs.entity.param.OutTaskParam;
import com.zy.asrs.service.ExternalTaskFacadeService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkDetlService;
import com.zy.integration.iot.biz.IotInstructionService;
import com.zy.iot.config.IotProperties;
import com.zy.iot.constant.IotConstants;
import com.zy.iot.entity.IotFeedbackMessage;
import com.zy.iot.entity.IotInstructionMessage;
import com.zy.iot.entity.IotPublishRecord;
import com.zy.iot.service.IotPublishRecordService;
import com.zy.iot.util.IotInstructionIdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
 * IoT 指令核心编排服务。
 * 负责把 XBPS 下发的 MQTT 指令转换成现有 ASRS 入库/出库流程,并在本地记录幂等、乱序和回执状态。
 */
@Slf4j
@Service
public class IotInstructionServiceImpl implements IotInstructionService {
    @Autowired
    private IotPublishRecordService iotPublishRecordService;
    @Autowired
    private IotProperties iotProperties;
    @Autowired
    private ExternalTaskFacadeService externalTaskFacadeService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private WrkDetlService wrkDetlService;
    /**
     * 处理 egress/asrs/stow 指令。
     * 只接单和预登记,不在 MQTT 回调里直接触发真实入库作业。
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long handleStowInstruction(IotInstructionMessage message, String topic, String rawPayload) {
        if (message == null || Cools.isEmpty(message.getInstructionId())) {
            log.warn("ignore invalid stow message, payload={}", rawPayload);
            return null;
        }
        IotPublishRecord existing = iotPublishRecordService.findByInstructionId(message.getInstructionId());
        if (existing != null) {
            return existing.getId();
        }
        IotPublishRecord record = initInboundRecord(message, topic, rawPayload, IotConstants.MESSAGE_TYPE_STOW);
        iotPublishRecordService.insert(record);
        if (Cools.isEmpty(message.getContainerId())) {
            return updateAsFailure(record, null, "containerId不能为空");
        }
        if (isDelayed(message, IotConstants.MESSAGE_TYPE_STOW)) {
            return updateAsFailure(record, IotConstants.ERROR_CODE_DELAYED, "延迟消息已忽略");
        }
        String preferredLocNo = resolvePreferredInboundLoc(message);
        MesToCombParam param = buildInboundParam(message, preferredLocNo);
        R result = externalTaskFacadeService.acceptInboundNotice(param);
        if (result == null || !Objects.equals(result.get("code"), 200)) {
            return updateAsFailure(record, null, resolveResultMessage(result, "接收入库指令失败"));
        }
        Date now = new Date();
        record.setOrderNo(param.getOrderId());
        record.setProcessStatus(IotConstants.PROCESS_STATUS_PROCESSED);
        record.setErrorCode(null);
        record.setErrorMessage(null);
        applyFeedback(record, IotConstants.FEEDBACK_SUCCESS, null, null, now);
        iotPublishRecordService.updateById(record);
        return record.getId();
    }
    /**
     * 处理 egress/asrs/pick 指令。
     * 远端出库口会先映射成本地站台号,再复用现有出库建单并自动确认放行。
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Long handlePickInstruction(IotInstructionMessage message, String topic, String rawPayload) {
        if (message == null || Cools.isEmpty(message.getInstructionId())) {
            log.warn("ignore invalid pick message, payload={}", rawPayload);
            return null;
        }
        IotPublishRecord existing = iotPublishRecordService.findByInstructionId(message.getInstructionId());
        if (existing != null) {
            return existing.getId();
        }
        IotPublishRecord record = initInboundRecord(message, topic, rawPayload, IotConstants.MESSAGE_TYPE_PICK);
        iotPublishRecordService.insert(record);
        if (Cools.isEmpty(message.getContainerId())) {
            return updateAsFailure(record, null, "containerId不能为空");
        }
        if (isDelayed(message, IotConstants.MESSAGE_TYPE_PICK)) {
            return updateAsFailure(record, IotConstants.ERROR_CODE_DELAYED, "延迟消息已忽略");
        }
        String remoteDestination = extractFirstDestination(message.getDestinationLocationIds());
        Integer stationId = Cools.isEmpty(remoteDestination) ? null : iotProperties.getPickStationMappings().get(remoteDestination);
        if (stationId == null) {
            return updateAsFailure(record, IotConstants.ERROR_CODE_STATION_MAPPING, "未找到目标出库口映射");
        }
        OutTaskParam param = new OutTaskParam();
        param.setPalletId(message.getContainerId());
        param.setOrderId(resolveReferenceId(message));
        param.setStationId(String.valueOf(stationId));
        param.setSeq(1);
        R result = externalTaskFacadeService.createOutboundTask(param, true);
        if (result == null || !Objects.equals(result.get("code"), 200)) {
            return updateAsFailure(record, null, resolveResultMessage(result, "接收拣货指令失败"));
        }
        Date now = new Date();
        record.setOrderNo(param.getOrderId());
        record.setWrkNo(resolveWrkNo(result));
        record.setProcessStatus(IotConstants.PROCESS_STATUS_PROCESSED);
        record.setErrorCode(null);
        record.setErrorMessage(null);
        applyFeedback(record, IotConstants.FEEDBACK_SUCCESS, null, null, now);
        iotPublishRecordService.updateById(record);
        return record.getId();
    }
    /**
     * 处理 XBPS 对 ASRS 动作消息的 feedback 回执。
     * 这里只回写 IoT 发布状态,不改库存和工作档。
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void handleFeedbackAck(IotFeedbackMessage feedbackMessage, String topic, String rawPayload) {
        if (feedbackMessage == null || Cools.isEmpty(feedbackMessage.getInstructionId())) {
            return;
        }
        IotPublishRecord record = iotPublishRecordService.findByInstructionId(feedbackMessage.getInstructionId());
        if (record == null || !IotConstants.DIRECTION_OUTBOUND.equals(record.getDirection())) {
            log.warn("ignore iot ack without outbound record, instructionId={}", feedbackMessage.getInstructionId());
            return;
        }
        Date now = new Date();
        record.setAckPayload(rawPayload);
        record.setAckTime(now);
        record.setReceiveTopic(topic);
        record.setPublishStatus(IotConstants.FEEDBACK_SUCCESS.equalsIgnoreCase(feedbackMessage.getStatus())
                ? IotConstants.PUBLISH_STATUS_ACK_SUCCESS
                : IotConstants.PUBLISH_STATUS_ACK_FAILURE);
        record.setErrorCode(feedbackMessage.getErrorCode());
        record.setErrorMessage(truncate(feedbackMessage.getMessage(), 500));
        record.setUpdateTime(now);
        iotPublishRecordService.updateById(record);
    }
    /**
     * 在工作档真正完成后落一条待发布记录。
     * 事务内只写库,不直接发 MQTT,避免业务提交和网络发送耦合。
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void queueWorkCompletion(WrkMast wrkMast) {
        if (!iotProperties.isEnabled() || wrkMast == null || wrkMast.getWrkNo() == null) {
            return;
        }
        IotPublishRecord existed = iotPublishRecordService.selectOne(new EntityWrapper<IotPublishRecord>()
                .eq("direction", IotConstants.DIRECTION_OUTBOUND)
                .eq("wrk_no", wrkMast.getWrkNo()));
        if (existed != null) {
            return;
        }
        IotPublishRecord record = buildOutboundRecord(wrkMast);
        if (record != null) {
            iotPublishRecordService.insert(record);
        }
    }
    private IotPublishRecord initInboundRecord(IotInstructionMessage message, String topic, String rawPayload, String messageType) {
        Date now = new Date();
        IotPublishRecord record = new IotPublishRecord();
        record.setInstructionId(message.getInstructionId());
        record.setDirection(IotConstants.DIRECTION_INBOUND);
        record.setMessageType(messageType);
        record.setReceiveTopic(topic);
        record.setContainerId(message.getContainerId());
        record.setReferenceId(message.getReferenceId());
        record.setSourceLocationId(message.getSourceLocationId());
        record.setDestinationLocationIds(normalizeDestinations(message.getDestinationLocationIds()));
        record.setMessageCreationTime(resolveCreationTime(message.getCreationTime()));
        record.setRawPayload(rawPayload);
        record.setProcessStatus(IotConstants.PROCESS_STATUS_RECEIVED);
        record.setPublishStatus(IotConstants.PUBLISH_STATUS_NOT_REQUIRED);
        record.setCreateTime(now);
        record.setUpdateTime(now);
        return record;
    }
    private boolean isDelayed(IotInstructionMessage message, String messageType) {
        Long creationTime = resolveCreationTime(message.getCreationTime());
        IotPublishRecord latest = iotPublishRecordService.findLatestInboundInstruction(message.getContainerId(), messageType);
        return latest != null && latest.getMessageCreationTime() != null && latest.getMessageCreationTime() > creationTime;
    }
    /**
     * IoT 文档未提供物料和数量明细,这里沿用现有满托入库通知的兜底约定。
     */
    private MesToCombParam buildInboundParam(IotInstructionMessage message, String preferredLocNo) {
        MesToCombParam param = new MesToCombParam();
        param.setPalletId(message.getContainerId());
        param.setOrderId("");
        param.setBizNo(message.getInstructionId());
        param.setAnfme(1D);
        param.setFull(1);
        param.setLocId(preferredLocNo);
        param.setBoxType1("aws");
        return param;
    }
    /**
     * 仅当指定库位当前仍为空位时才强制优先使用,否则回退到原有自动找位。
     */
    private String resolvePreferredInboundLoc(IotInstructionMessage message) {
        String preferredLoc = extractFirstDestination(message.getDestinationLocationIds());
        if (Cools.isEmpty(preferredLoc)) {
            return null;
        }
        LocMast locMast = locMastService.selectById(preferredLoc);
        if (locMast != null && "O".equalsIgnoreCase(locMast.getLocSts())) {
            return locMast.getLocNo();
        }
        return null;
    }
    private String resolveReferenceId(IotInstructionMessage message) {
        return Cools.isEmpty(message.getReferenceId()) ? message.getInstructionId() : message.getReferenceId();
    }
    private Long updateAsFailure(IotPublishRecord record, String errorCode, String errorMessage) {
        Date now = new Date();
        record.setProcessStatus(IotConstants.PROCESS_STATUS_FAILED);
        record.setOrderNo(Cools.isEmpty(record.getOrderNo()) ? record.getReferenceId() : record.getOrderNo());
        record.setErrorCode(errorCode);
        record.setErrorMessage(truncate(errorMessage, 500));
        applyFeedback(record, IotConstants.FEEDBACK_FAILURE, errorCode, errorMessage, now);
        iotPublishRecordService.updateById(record);
        return record.getId();
    }
    private void applyFeedback(IotPublishRecord record, String status, String errorCode, String errorMessage, Date now) {
        IotFeedbackMessage feedbackMessage = new IotFeedbackMessage();
        feedbackMessage.setInstructionId(record.getInstructionId());
        feedbackMessage.setStatus(status);
        feedbackMessage.setErrorCode(errorCode);
        feedbackMessage.setMessage(errorMessage);
        feedbackMessage.setCreationTime(System.currentTimeMillis());
        record.setFeedbackStatus(status);
        record.setPublishTopic(iotProperties.getTopics().getIngressFeedback());
        record.setPublishPayload(JSON.toJSONString(feedbackMessage));
        record.setPublishStatus(IotConstants.PUBLISH_STATUS_PENDING);
        record.setUpdateTime(now);
    }
    private String resolveResultMessage(R result, String defaultMessage) {
        if (result == null) {
            return defaultMessage;
        }
        Object msg = result.get("msg");
        return msg == null ? defaultMessage : String.valueOf(msg);
    }
    private Integer resolveWrkNo(R result) {
        if (result == null) {
            return null;
        }
        Object wrkNo = result.get("wrkNo");
        if (wrkNo instanceof Number) {
            return ((Number) wrkNo).intValue();
        }
        if (wrkNo instanceof String && !Cools.isEmpty(String.valueOf(wrkNo))) {
            return Integer.valueOf(String.valueOf(wrkNo));
        }
        return null;
    }
    private IotPublishRecord buildOutboundRecord(WrkMast wrkMast) {
        Integer ioType = wrkMast.getIoType();
        if (ioType == null) {
            return null;
        }
        String containerId = resolveContainerId(wrkMast);
        if (Cools.isEmpty(containerId)) {
            return null;
        }
        if (Arrays.asList(1, 8, 11, 53, 54, 57).contains(ioType)) {
            return buildStowOutboundRecord(wrkMast, containerId);
        }
        if (Arrays.asList(101, 108).contains(ioType)) {
            return buildPickOutboundRecord(wrkMast, containerId);
        }
        return null;
    }
    private IotPublishRecord buildStowOutboundRecord(WrkMast wrkMast, String containerId) {
        List<String> destinationLocationIds = wrkMast.getLocNo() == null
                ? Collections.<String>emptyList()
                : Collections.singletonList(wrkMast.getLocNo());
        if (destinationLocationIds.isEmpty()) {
            return null;
        }
        IotInstructionMessage payload = new IotInstructionMessage();
        payload.setInstructionId(IotInstructionIdGenerator.generate(String.valueOf(wrkMast.getWrkNo())));
        payload.setContainerId(containerId);
        if (Objects.equals(wrkMast.getIoType(), 11)) {
            payload.setSourceLocationId(wrkMast.getSourceLocNo());
        }
        payload.setDestinationLocationIds(destinationLocationIds);
        if (!Cools.isEmpty(wrkMast.getUserNo())) {
            payload.setReferenceId(wrkMast.getUserNo());
        }
        payload.setCreationTime(System.currentTimeMillis());
        return initOutboundRecord(wrkMast, IotConstants.MESSAGE_TYPE_STOW, iotProperties.getTopics().getIngressStow(), payload);
    }
    private IotPublishRecord buildPickOutboundRecord(WrkMast wrkMast, String containerId) {
        IotInstructionMessage payload = new IotInstructionMessage();
        payload.setInstructionId(IotInstructionIdGenerator.generate(String.valueOf(wrkMast.getWrkNo())));
        payload.setContainerId(containerId);
        payload.setSourceLocationId(wrkMast.getSourceLocNo());
        payload.setDestinationLocationIds(Collections.singletonList(resolveRemoteStationId(wrkMast.getStaNo())));
        if (!Cools.isEmpty(wrkMast.getUserNo())) {
            payload.setReferenceId(wrkMast.getUserNo());
        }
        payload.setCreationTime(System.currentTimeMillis());
        return initOutboundRecord(wrkMast, IotConstants.MESSAGE_TYPE_PICK, iotProperties.getTopics().getIngressPick(), payload);
    }
    private IotPublishRecord initOutboundRecord(WrkMast wrkMast, String messageType, String publishTopic, IotInstructionMessage payload) {
        Date now = new Date();
        IotPublishRecord record = new IotPublishRecord();
        record.setInstructionId(payload.getInstructionId());
        record.setDirection(IotConstants.DIRECTION_OUTBOUND);
        record.setMessageType(messageType);
        record.setPublishTopic(publishTopic);
        record.setContainerId(payload.getContainerId());
        record.setReferenceId(payload.getReferenceId());
        record.setSourceLocationId(payload.getSourceLocationId());
        record.setDestinationLocationIds(normalizeDestinations(payload.getDestinationLocationIds()));
        record.setMessageCreationTime(payload.getCreationTime());
        record.setPublishPayload(JSON.toJSONString(payload));
        record.setRawPayload(record.getPublishPayload());
        record.setProcessStatus(IotConstants.PROCESS_STATUS_PENDING);
        record.setPublishStatus(IotConstants.PUBLISH_STATUS_PENDING);
        record.setWrkNo(wrkMast.getWrkNo());
        record.setOrderNo(wrkMast.getUserNo());
        record.setCreateTime(now);
        record.setUpdateTime(now);
        return record;
    }
    private String resolveContainerId(WrkMast wrkMast) {
        if (!Cools.isEmpty(wrkMast.getBarcode())) {
            return wrkMast.getBarcode();
        }
        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
        if (Cools.isEmpty(wrkDetls)) {
            return null;
        }
        for (WrkDetl wrkDetl : wrkDetls) {
            if (!Cools.isEmpty(wrkDetl.getZpallet())) {
                return wrkDetl.getZpallet();
            }
        }
        return null;
    }
    private String resolveRemoteStationId(Integer staNo) {
        if (staNo == null) {
            return null;
        }
        for (Map.Entry<String, Integer> entry : iotProperties.getPickStationMappings().entrySet()) {
            if (Objects.equals(entry.getValue(), staNo)) {
                return entry.getKey();
            }
        }
        return String.valueOf(staNo);
    }
    private String extractFirstDestination(List<String> destinationLocationIds) {
        if (Cools.isEmpty(destinationLocationIds)) {
            return null;
        }
        for (String destinationLocationId : destinationLocationIds) {
            if (!Cools.isEmpty(destinationLocationId)) {
                return destinationLocationId;
            }
        }
        return null;
    }
    private Long resolveCreationTime(Long creationTime) {
        return creationTime == null ? System.currentTimeMillis() : creationTime;
    }
    private String normalizeDestinations(List<String> destinationLocationIds) {
        if (Cools.isEmpty(destinationLocationIds)) {
            return null;
        }
        return JSON.toJSONString(new ArrayList<String>(destinationLocationIds));
    }
    private String truncate(String message, int maxLength) {
        if (message == null || message.length() <= maxLength) {
            return message;
        }
        return message.substring(0, maxLength);
    }
}
src/main/java/com/zy/integration/iot/client/IotMqttClient.java
New file
@@ -0,0 +1,10 @@
package com.zy.integration.iot.client;
public interface IotMqttClient {
    void ensureConnected() throws Exception;
    void publish(String topic, String payload) throws Exception;
    boolean isConnected();
}
src/main/java/com/zy/integration/iot/client/impl/PahoIotMqttClient.java
New file
@@ -0,0 +1,205 @@
package com.zy.integration.iot.client.impl;
import com.core.common.Cools;
import com.zy.integration.iot.client.IotMqttClient;
import com.zy.integration.iot.handler.IotInboundMessageHandler;
import com.zy.integration.iot.util.IotMqttSslUtils;
import com.zy.iot.config.IotProperties;
import com.zy.iot.entity.IotTopicConfig;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.File;
import java.nio.charset.StandardCharsets;
/**
 * IoT MQTT 客户端。
 * 兼容 AWS IoT 的 mTLS 模式,也兼容局域网模拟 broker 的明文 TCP 模式。
 */
@Slf4j
@Service
public class PahoIotMqttClient implements IotMqttClient {
    @Autowired
    private IotProperties iotProperties;
    @Autowired
    private IotInboundMessageHandler inboundMessageHandler;
    private volatile MqttClient mqttClient;
    @PostConstruct
    public void init() {
        if (!iotProperties.isEnabled()) {
            return;
        }
        try {
            ensureConnected();
        } catch (Exception e) {
            log.error("initial connect to iot mqtt failed", e);
        }
    }
    @PreDestroy
    public void destroy() {
        if (mqttClient == null) {
            return;
        }
        try {
            if (mqttClient.isConnected()) {
                mqttClient.disconnect();
            }
            mqttClient.close();
        } catch (Exception e) {
            log.warn("close iot mqtt client failed", e);
        }
    }
    /**
     * 懒加载建连,首次发送或启动时自动连接并补订阅主题。
     */
    @Override
    public synchronized void ensureConnected() throws Exception {
        if (!iotProperties.isEnabled()) {
            return;
        }
        if (!hasRequiredConfig()) {
            log.warn("iot config incomplete, mqtt client will not connect");
            return;
        }
        if (mqttClient == null) {
            mqttClient = createClient();
        }
        if (mqttClient.isConnected()) {
            return;
        }
        mqttClient.connect(buildOptions());
        subscribeTopics();
    }
    /**
     * 统一按 QoS1 发布,兼顾可靠性和实现复杂度。
     */
    @Override
    public void publish(String topic, String payload) throws Exception {
        if (!iotProperties.isEnabled() || Cools.isEmpty(topic) || payload == null) {
            return;
        }
        ensureConnected();
        if (mqttClient == null || !mqttClient.isConnected()) {
            throw new MqttException(MqttException.REASON_CODE_CLIENT_NOT_CONNECTED);
        }
        MqttMessage mqttMessage = new MqttMessage(payload.getBytes(StandardCharsets.UTF_8));
        mqttMessage.setQos(1);
        mqttMessage.setRetained(false);
        mqttClient.publish(topic, mqttMessage);
    }
    @Override
    public boolean isConnected() {
        return mqttClient != null && mqttClient.isConnected();
    }
    private boolean hasRequiredConfig() {
        if (Cools.isEmpty(iotProperties.getServerUri()) || Cools.isEmpty(iotProperties.getResolvedClientId())) {
            return false;
        }
        if (!iotProperties.isTlsEnabled()) {
            return true;
        }
        return !Cools.isEmpty(iotProperties.getCaCertPath())
                && !Cools.isEmpty(iotProperties.getClientCertPath())
                && !Cools.isEmpty(iotProperties.getPrivateKeyPath());
    }
    private MqttClient createClient() throws Exception {
        MqttClient client = new MqttClient(
                iotProperties.getServerUri(),
                iotProperties.getResolvedClientId(),
                new MqttDefaultFilePersistence(resolvePersistenceDir())
        );
        client.setCallback(new MqttCallbackExtended() {
            @Override
            public void connectionLost(Throwable cause) {
                log.warn("iot mqtt connection lost", cause);
            }
            @Override
            public void messageArrived(String topic, MqttMessage message) {
                inboundMessageHandler.handleMessage(topic, new String(message.getPayload(), StandardCharsets.UTF_8));
            }
            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {
            }
            @Override
            public void connectComplete(boolean reconnect, String serverURI) {
                try {
                    subscribeTopics();
                    log.info("iot mqtt connected, reconnect={}, serverURI={}", reconnect, serverURI);
                } catch (Exception e) {
                    log.error("subscribe iot topics failed", e);
                }
            }
        });
        return client;
    }
    private MqttConnectOptions buildOptions() throws Exception {
        MqttConnectOptions options = new MqttConnectOptions();
        options.setAutomaticReconnect(iotProperties.isAutomaticReconnect());
        options.setCleanSession(iotProperties.isCleanSession());
        options.setKeepAliveInterval(iotProperties.getKeepAliveSeconds());
        options.setConnectionTimeout(iotProperties.getConnectionTimeoutSeconds());
        if (iotProperties.isTlsEnabled()) {
            options.setSocketFactory(IotMqttSslUtils.buildSocketFactory(
                    iotProperties.getCaCertPath(),
                    iotProperties.getClientCertPath(),
                    iotProperties.getPrivateKeyPath()
            ));
        }
        return options;
    }
    /**
     * 只订阅 XBPS 下发的 stow/pick 指令和外部 feedback 回执。
     */
    private synchronized void subscribeTopics() throws Exception {
        if (mqttClient == null || !mqttClient.isConnected()) {
            return;
        }
        IotTopicConfig topics = iotProperties.getTopics();
        subscribe(topics.getEgressStow());
        subscribe(topics.getEgressPick());
        subscribe(topics.getEgressFeedback());
    }
    private void subscribe(String topic) throws Exception {
        if (Cools.isEmpty(topic)) {
            return;
        }
        mqttClient.subscribe(topic, 1);
    }
    private String resolvePersistenceDir() {
        String configured = iotProperties.getPersistenceDir();
        String dir = Cools.isEmpty(configured)
                ? System.getProperty("java.io.tmpdir") + File.separator + "asrs-iot-mqtt"
                : configured;
        File file = new File(dir);
        if (!file.exists()) {
            file.mkdirs();
        }
        return file.getAbsolutePath();
    }
}
src/main/java/com/zy/integration/iot/handler/IotInboundMessageHandler.java
New file
@@ -0,0 +1,6 @@
package com.zy.integration.iot.handler;
public interface IotInboundMessageHandler {
    void handleMessage(String topic, String payload);
}
src/main/java/com/zy/integration/iot/handler/impl/IotInboundMessageHandlerImpl.java
New file
@@ -0,0 +1,57 @@
package com.zy.integration.iot.handler.impl;
import com.alibaba.fastjson.JSON;
import com.core.common.Cools;
import com.zy.integration.iot.biz.IotInstructionService;
import com.zy.integration.iot.handler.IotInboundMessageHandler;
import com.zy.integration.iot.publish.IotPublishService;
import com.zy.iot.config.IotProperties;
import com.zy.iot.entity.IotFeedbackMessage;
import com.zy.iot.entity.IotInstructionMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * MQTT 入站分发器。
 * 按 topic 识别 stow/pick/feedback,并在接单后立即尝试回发 feedback。
 */
@Slf4j
@Service
public class IotInboundMessageHandlerImpl implements IotInboundMessageHandler {
    @Autowired
    private IotProperties iotProperties;
    @Autowired
    private IotInstructionService iotInstructionService;
    @Autowired
    private IotPublishService iotPublishService;
    /**
     * MQTT 回调层只做 topic 分发和报文反序列化,业务动作仍下沉到 service。
     */
    @Override
    public void handleMessage(String topic, String payload) {
        if (!iotProperties.isEnabled() || Cools.isEmpty(topic) || payload == null) {
            return;
        }
        try {
            Long recordId = null;
            if (topic.equals(iotProperties.getTopics().getEgressStow())) {
                recordId = iotInstructionService.handleStowInstruction(JSON.parseObject(payload, IotInstructionMessage.class), topic, payload);
            } else if (topic.equals(iotProperties.getTopics().getEgressPick())) {
                recordId = iotInstructionService.handlePickInstruction(JSON.parseObject(payload, IotInstructionMessage.class), topic, payload);
            } else if (topic.equals(iotProperties.getTopics().getEgressFeedback())) {
                iotInstructionService.handleFeedbackAck(JSON.parseObject(payload, IotFeedbackMessage.class), topic, payload);
            } else {
                log.warn("ignore unknown iot topic={}, payload={}", topic, payload);
            }
            if (recordId != null) {
                // feedback 先写本地记录,再立即尝试发送;传输失败由定时任务补偿。
                iotPublishService.publishRecordNow(recordId);
            }
        } catch (Exception e) {
            log.error("handle iot inbound message failed, topic={}, payload={}", topic, payload, e);
        }
    }
}
src/main/java/com/zy/integration/iot/publish/IotPublishService.java
New file
@@ -0,0 +1,6 @@
package com.zy.integration.iot.publish;
public interface IotPublishService {
    void publishRecordNow(Long recordId);
}
src/main/java/com/zy/integration/iot/publish/impl/IotPublishServiceImpl.java
New file
@@ -0,0 +1,61 @@
package com.zy.integration.iot.publish.impl;
import com.core.common.Cools;
import com.zy.integration.iot.client.IotMqttClient;
import com.zy.integration.iot.publish.IotPublishService;
import com.zy.iot.constant.IotConstants;
import com.zy.iot.entity.IotPublishRecord;
import com.zy.iot.service.IotPublishRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
 * IoT 统一发布器。
 * 这里只处理 MQTT 传输结果,业务成功与否由指令处理阶段决定。
 */
@Slf4j
@Service
public class IotPublishServiceImpl implements IotPublishService {
    @Autowired
    private IotPublishRecordService iotPublishRecordService;
    @Autowired
    private IotMqttClient iotMqttClient;
    /**
     * 立即发布指定记录;若网络发送失败,仅更新状态,后续由调度器重试。
     */
    @Override
    public void publishRecordNow(Long recordId) {
        if (recordId == null) {
            return;
        }
        IotPublishRecord record = iotPublishRecordService.selectById(recordId);
        if (record == null || Cools.isEmpty(record.getPublishTopic()) || Cools.isEmpty(record.getPublishPayload())) {
            return;
        }
        Date now = new Date();
        try {
            iotMqttClient.publish(record.getPublishTopic(), record.getPublishPayload());
            record.setPublishStatus(IotConstants.PUBLISH_STATUS_SUCCESS);
            record.setUpdateTime(now);
            iotPublishRecordService.updateById(record);
        } catch (Exception e) {
            record.setPublishStatus(IotConstants.PUBLISH_STATUS_FAILURE);
            record.setErrorMessage(truncate(e.getMessage(), 500));
            record.setUpdateTime(now);
            iotPublishRecordService.updateById(record);
            log.error("publish iot message failed, recordId={}", recordId, e);
        }
    }
    private String truncate(String message, int maxLength) {
        if (message == null || message.length() <= maxLength) {
            return message;
        }
        return message.substring(0, maxLength);
    }
}
src/main/java/com/zy/integration/iot/task/IotPendingPublishScheduler.java
New file
@@ -0,0 +1,49 @@
package com.zy.integration.iot.task;
import com.zy.integration.iot.publish.IotPublishService;
import com.zy.iot.config.IotProperties;
import com.zy.iot.entity.IotPublishRecord;
import com.zy.iot.service.IotPublishRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * 待发布消息补偿任务。
 * 负责扫描 PENDING/FAILURE 的记录继续推送,不对业务 ACK_FAILURE 做静默重发。
 */
@Slf4j
@Component
public class IotPendingPublishScheduler {
    @Autowired
    private IotProperties iotProperties;
    @Autowired
    private IotPublishRecordService iotPublishRecordService;
    @Autowired
    private IotPublishService iotPublishService;
    /**
     * 小批量补发,避免单条异常消息拖住整批待发数据。
     */
    @Scheduled(cron = "0/5 * * * * ? ")
    private void execute() {
        if (!iotProperties.isEnabled()) {
            return;
        }
        List<IotPublishRecord> records = iotPublishRecordService.selectPendingPublishes(50);
        if (records == null || records.isEmpty()) {
            return;
        }
        for (IotPublishRecord record : records) {
            try {
                iotPublishService.publishRecordNow(record.getId());
            } catch (Exception e) {
                log.error("publish pending iot record failed, id={}", record.getId(), e);
            }
        }
    }
}
src/main/java/com/zy/integration/iot/util/IotMqttSslUtils.java
New file
@@ -0,0 +1,87 @@
package com.zy.integration.iot.util;
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;
import java.io.BufferedReader;
import java.io.FileReader;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.SecureRandom;
import java.security.Security;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
public final class IotMqttSslUtils {
    private static final String BC_PROVIDER = "BC";
    private IotMqttSslUtils() {
    }
    public static SSLSocketFactory buildSocketFactory(String caCertPath, String clientCertPath, String privateKeyPath) throws Exception {
        ensureProvider();
        X509Certificate caCertificate = readCertificate(caCertPath);
        X509Certificate clientCertificate = readCertificate(clientCertPath);
        PrivateKey privateKey = readPrivateKey(privateKeyPath);
        KeyStore clientStore = KeyStore.getInstance(KeyStore.getDefaultType());
        clientStore.load(null, null);
        clientStore.setKeyEntry("iot-client-key", privateKey, new char[0], new Certificate[]{clientCertificate});
        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        keyManagerFactory.init(clientStore, new char[0]);
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);
        trustStore.setCertificateEntry("iot-ca", caCertificate);
        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        trustManagerFactory.init(trustStore);
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
        return sslContext.getSocketFactory();
    }
    private static X509Certificate readCertificate(String path) throws Exception {
        try (PEMParser parser = new PEMParser(new BufferedReader(new FileReader(path)))) {
            Object object = parser.readObject();
            if (!(object instanceof X509CertificateHolder)) {
                throw new IllegalArgumentException("invalid certificate file: " + path);
            }
            return new JcaX509CertificateConverter()
                    .setProvider(BC_PROVIDER)
                    .getCertificate((X509CertificateHolder) object);
        }
    }
    private static PrivateKey readPrivateKey(String path) throws Exception {
        try (PEMParser parser = new PEMParser(new BufferedReader(new FileReader(path)))) {
            Object object = parser.readObject();
            JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(BC_PROVIDER);
            if (object instanceof PEMKeyPair) {
                return converter.getKeyPair((PEMKeyPair) object).getPrivate();
            }
            if (object instanceof PrivateKeyInfo) {
                return converter.getPrivateKey((PrivateKeyInfo) object);
            }
            throw new IllegalArgumentException("invalid private key file: " + path);
        }
    }
    private static void ensureProvider() {
        if (Security.getProvider(BC_PROVIDER) == null) {
            Security.addProvider(new BouncyCastleProvider());
        }
    }
}
src/main/java/com/zy/iot/config/IotProperties.java
New file
@@ -0,0 +1,69 @@
package com.zy.iot.config;
import com.zy.iot.entity.IotTopicConfig;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.Map;
@Data
@Component
@ConfigurationProperties(prefix = "iot")
public class IotProperties {
    private boolean enabled;
    private String endpoint;
    private Integer port = 8883;
    private String thingName;
    private String clientId;
    private boolean cleanSession;
    private boolean automaticReconnect = true;
    private Integer keepAliveSeconds = 60;
    private Integer connectionTimeoutSeconds = 10;
    private String persistenceDir;
    private String caCertPath;
    private String clientCertPath;
    private String privateKeyPath;
    private IotTopicConfig topics = new IotTopicConfig();
    private Map<String, Integer> pickStationMappings = new LinkedHashMap<>();
    public String getResolvedClientId() {
        if (clientId != null && clientId.trim().length() > 0) {
            return clientId.trim();
        }
        return thingName;
    }
    public boolean isTlsEnabled() {
        String serverUri = getServerUri();
        return serverUri != null && serverUri.startsWith("ssl://");
    }
    public String getServerUri() {
        if (endpoint == null || endpoint.trim().length() == 0) {
            return null;
        }
        String trimmed = endpoint.trim();
        if (trimmed.startsWith("ssl://") || trimmed.startsWith("tcp://")) {
            return trimmed;
        }
        int resolvedPort = port == null ? 8883 : port;
        return "ssl://" + trimmed + ":" + resolvedPort;
    }
}
src/main/java/com/zy/iot/constant/IotConstants.java
New file
@@ -0,0 +1,36 @@
package com.zy.iot.constant;
public final class IotConstants {
    private IotConstants() {
    }
    public static final String DIRECTION_INBOUND = "INBOUND";
    public static final String DIRECTION_OUTBOUND = "OUTBOUND";
    public static final String MESSAGE_TYPE_STOW = "STOW";
    public static final String MESSAGE_TYPE_PICK = "PICK";
    public static final String MESSAGE_TYPE_FEEDBACK = "FEEDBACK";
    public static final String PROCESS_STATUS_RECEIVED = "RECEIVED";
    public static final String PROCESS_STATUS_PROCESSED = "PROCESSED";
    public static final String PROCESS_STATUS_FAILED = "FAILED";
    public static final String PROCESS_STATUS_DELAYED = "DELAYED";
    public static final String PROCESS_STATUS_DUPLICATE = "DUPLICATE";
    public static final String PROCESS_STATUS_PENDING = "PENDING";
    public static final String FEEDBACK_SUCCESS = "SUCCESS";
    public static final String FEEDBACK_FAILURE = "FAILURE";
    public static final String PUBLISH_STATUS_NOT_REQUIRED = "NOT_REQUIRED";
    public static final String PUBLISH_STATUS_PENDING = "PENDING";
    public static final String PUBLISH_STATUS_SUCCESS = "SUCCESS";
    public static final String PUBLISH_STATUS_FAILURE = "FAILURE";
    public static final String PUBLISH_STATUS_ACK_SUCCESS = "ACK_SUCCESS";
    public static final String PUBLISH_STATUS_ACK_FAILURE = "ACK_FAILURE";
    public static final String ERROR_CODE_DELAYED = "DELAYED_MESSAGE";
    public static final String ERROR_CODE_DUPLICATE = "DUPLICATE_MESSAGE";
    public static final String ERROR_CODE_STATION_MAPPING = "STATION_MAPPING_NOT_FOUND";
    public static final String ERROR_CODE_TARGET_LOC = "TARGET_LOCATION_INVALID";
}
src/main/java/com/zy/iot/entity/IotFeedbackMessage.java
New file
@@ -0,0 +1,17 @@
package com.zy.iot.entity;
import lombok.Data;
@Data
public class IotFeedbackMessage {
    private String instructionId;
    private String status;
    private String errorCode;
    private String message;
    private Long creationTime;
}
src/main/java/com/zy/iot/entity/IotInstructionMessage.java
New file
@@ -0,0 +1,21 @@
package com.zy.iot.entity;
import lombok.Data;
import java.util.List;
@Data
public class IotInstructionMessage {
    private String instructionId;
    private String containerId;
    private String sourceLocationId;
    private List<String> destinationLocationIds;
    private String referenceId;
    private Long creationTime;
}
src/main/java/com/zy/iot/entity/IotPublishRecord.java
New file
@@ -0,0 +1,89 @@
package com.zy.iot.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("asr_iot_publish_record")
public class IotPublishRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @TableField("instruction_id")
    private String instructionId;
    @TableField("direction")
    private String direction;
    @TableField("message_type")
    private String messageType;
    @TableField("receive_topic")
    private String receiveTopic;
    @TableField("publish_topic")
    private String publishTopic;
    @TableField("container_id")
    private String containerId;
    @TableField("reference_id")
    private String referenceId;
    @TableField("source_location_id")
    private String sourceLocationId;
    @TableField("destination_location_ids")
    private String destinationLocationIds;
    @TableField("message_creation_time")
    private Long messageCreationTime;
    @TableField("raw_payload")
    private String rawPayload;
    @TableField("publish_payload")
    private String publishPayload;
    @TableField("process_status")
    private String processStatus;
    @TableField("publish_status")
    private String publishStatus;
    @TableField("feedback_status")
    private String feedbackStatus;
    @TableField("error_code")
    private String errorCode;
    @TableField("error_message")
    private String errorMessage;
    @TableField("ack_payload")
    private String ackPayload;
    @TableField("ack_time")
    private Date ackTime;
    @TableField("wrk_no")
    private Integer wrkNo;
    @TableField("order_no")
    private String orderNo;
    @TableField("create_time")
    private Date createTime;
    @TableField("update_time")
    private Date updateTime;
}
src/main/java/com/zy/iot/entity/IotTopicConfig.java
New file
@@ -0,0 +1,19 @@
package com.zy.iot.entity;
import lombok.Data;
@Data
public class IotTopicConfig {
    private String egressStow;
    private String egressPick;
    private String ingressStow;
    private String ingressPick;
    private String ingressFeedback;
    private String egressFeedback;
}
src/main/java/com/zy/iot/mapper/IotPublishRecordMapper.java
New file
@@ -0,0 +1,11 @@
package com.zy.iot.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.iot.entity.IotPublishRecord;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface IotPublishRecordMapper extends BaseMapper<IotPublishRecord> {
}
src/main/java/com/zy/iot/service/IotPublishRecordService.java
New file
@@ -0,0 +1,15 @@
package com.zy.iot.service;
import com.baomidou.mybatisplus.service.IService;
import com.zy.iot.entity.IotPublishRecord;
import java.util.List;
public interface IotPublishRecordService extends IService<IotPublishRecord> {
    IotPublishRecord findByInstructionId(String instructionId);
    IotPublishRecord findLatestInboundInstruction(String containerId, String messageType);
    List<IotPublishRecord> selectPendingPublishes(int limit);
}
src/main/java/com/zy/iot/service/impl/IotPublishRecordServiceImpl.java
New file
@@ -0,0 +1,66 @@
package com.zy.iot.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.zy.iot.constant.IotConstants;
import com.zy.iot.entity.IotPublishRecord;
import com.zy.iot.mapper.IotPublishRecordMapper;
import com.zy.iot.service.IotPublishRecordService;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@Service
public class IotPublishRecordServiceImpl extends ServiceImpl<IotPublishRecordMapper, IotPublishRecord> implements IotPublishRecordService {
    @Override
    public IotPublishRecord findByInstructionId(String instructionId) {
        if (Cools.isEmpty(instructionId)) {
            return null;
        }
        return selectOne(new EntityWrapper<IotPublishRecord>().eq("instruction_id", instructionId));
    }
    @Override
    public IotPublishRecord findLatestInboundInstruction(String containerId, String messageType) {
        if (Cools.isEmpty(containerId) || Cools.isEmpty(messageType)) {
            return null;
        }
        Wrapper<IotPublishRecord> wrapper = new EntityWrapper<IotPublishRecord>()
                .eq("direction", IotConstants.DIRECTION_INBOUND)
                .eq("message_type", messageType)
                .eq("container_id", containerId)
                .orderBy("message_creation_time", false)
                .orderBy("create_time", false);
        Page<IotPublishRecord> page = selectPage(new Page<IotPublishRecord>(1, 1), wrapper);
        if (page == null || page.getRecords() == null || page.getRecords().isEmpty()) {
            return null;
        }
        return page.getRecords().get(0);
    }
    @Override
    public List<IotPublishRecord> selectPendingPublishes(int limit) {
        if (limit <= 0) {
            return Collections.emptyList();
        }
        Wrapper<IotPublishRecord> wrapper = new EntityWrapper<IotPublishRecord>()
                .in("publish_status", Arrays.asList(IotConstants.PUBLISH_STATUS_PENDING, IotConstants.PUBLISH_STATUS_FAILURE))
                .isNotNull("publish_topic")
                .isNotNull("publish_payload")
                .orderBy("create_time", true)
                .orderBy("id", true);
        Page<IotPublishRecord> page = selectPage(new Page<IotPublishRecord>(1, limit), wrapper);
        if (page == null || page.getRecords() == null) {
            return Collections.emptyList();
        }
        return page.getRecords();
    }
}
src/main/java/com/zy/iot/util/IotInstructionIdGenerator.java
New file
@@ -0,0 +1,30 @@
package com.zy.iot.util;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Locale;
import java.util.UUID;
public final class IotInstructionIdGenerator {
    private IotInstructionIdGenerator() {
    }
    public static String generate() {
        return generate(UUID.randomUUID() + "-" + System.nanoTime());
    }
    public static String generate(String seed) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-1");
            byte[] hash = digest.digest(seed.getBytes(StandardCharsets.UTF_8));
            StringBuilder builder = new StringBuilder();
            for (byte item : hash) {
                builder.append(String.format(Locale.ROOT, "%02x", item));
            }
            return builder.substring(0, 20).toUpperCase(Locale.ROOT);
        } catch (Exception e) {
            throw new IllegalStateException("generate iot instruction id failed", e);
        }
    }
}
src/main/resources/application.yml
@@ -121,3 +121,36 @@
    stopOutTask: /openapi/cancelTaskBatch
    #设备状态获取地址
    getDeviceStatus: /openapi/deviceStatus
# AWS IoT 对接开关与 topic/证书配置。
# 默认关闭,只有配置齐 endpoint 和证书路径后才会尝试建连。
iot:
  enabled: true
  endpoint: tcp://192.168.100.170:1883
  port: 1883
  thingName: asrs-iot-client
  clientId: asrs-iot-client
  cleanSession: false
  automaticReconnect: true
  keepAliveSeconds: 60
  connectionTimeoutSeconds: 10
  persistenceDir: .local/iot-mqtt
  caCertPath:
  clientCertPath:
  privateKeyPath:
  topics:
    #亚马逊发送组托给wms,在托盘上收到纸箱后,发布堆垛指令以将托盘发送到仓库。
    egressStow: glenn/instruction/icna/egress/asrs/stow
    #亚马逊发送出库指令给wms,启动拣选请求后,发布拣选指令以引导ASRS从料箱中取货。
    egressPick: glenn/instruction/icna/egress/asrs/pick
    #wms入库完成发送给亚马逊,ASRS实际拖拽托盘到料箱后,发布堆垛动作以同步BPS数据。
    egressFeedback: glenn/instruction/icna/egress/asrs/feedback
    #wms出库完成发送给亚马逊,在ASRS实际从料箱取货后,发布拣选动作sz XBPS数据。
    ingressStow: glenn/instruction/icna/ingress/asrs/stow
    #ASRS 接收到 XBPS 指令后,向反馈XBPS 发送响应。
    ingressPick: glenn/instruction/icna/ingress/asrs/pick
    #在XBPs收到ASRS操作后,向反馈ASRS发送响应
    ingressFeedback: glenn/instruction/icna/ingress/asrs/feedback
  pickStationMappings:
    ASRSOutbound1: 101
src/main/resources/sql/20260324_asr_iot_publish_record.sql
New file
@@ -0,0 +1,47 @@
IF NOT EXISTS (
    SELECT 1
    FROM sys.objects
    WHERE object_id = OBJECT_ID(N'[dbo].[asr_iot_publish_record]')
      AND type = N'U'
)
BEGIN
    CREATE TABLE [dbo].[asr_iot_publish_record] (
        [id] BIGINT IDENTITY(1,1) NOT NULL,
        [instruction_id] VARCHAR(64) NOT NULL,
        [direction] VARCHAR(16) NOT NULL,
        [message_type] VARCHAR(16) NOT NULL,
        [receive_topic] VARCHAR(255) NULL,
        [publish_topic] VARCHAR(255) NULL,
        [container_id] VARCHAR(128) NULL,
        [reference_id] VARCHAR(128) NULL,
        [source_location_id] VARCHAR(128) NULL,
        [destination_location_ids] VARCHAR(500) NULL,
        [message_creation_time] BIGINT NULL,
        [raw_payload] VARCHAR(MAX) NULL,
        [publish_payload] VARCHAR(MAX) NULL,
        [process_status] VARCHAR(32) NULL,
        [publish_status] VARCHAR(32) NULL,
        [feedback_status] VARCHAR(16) NULL,
        [error_code] VARCHAR(64) NULL,
        [error_message] VARCHAR(500) NULL,
        [ack_payload] VARCHAR(MAX) NULL,
        [ack_time] DATETIME NULL,
        [wrk_no] INT NULL,
        [order_no] VARCHAR(128) NULL,
        [create_time] DATETIME NULL,
        [update_time] DATETIME NULL,
        CONSTRAINT [PK_asr_iot_publish_record] PRIMARY KEY CLUSTERED ([id] ASC),
        CONSTRAINT [UK_asr_iot_publish_record_instruction_id] UNIQUE NONCLUSTERED ([instruction_id] ASC)
    );
    CREATE NONCLUSTERED INDEX [IDX_asr_iot_publish_record_container_type]
        ON [dbo].[asr_iot_publish_record] ([container_id] ASC, [message_type] ASC, [message_creation_time] DESC);
    CREATE NONCLUSTERED INDEX [IDX_asr_iot_publish_record_publish_status]
        ON [dbo].[asr_iot_publish_record] ([publish_status] ASC, [create_time] ASC);
    EXEC sys.sp_addextendedproperty
        @name = N'MS_Description', @value = N'ASRS IoT 发布与回执记录',
        @level0type = N'SCHEMA', @level0name = N'dbo',
        @level1type = N'TABLE',  @level1name = N'asr_iot_publish_record';
END;
src/test/java/com/zy/integration/iot/IotSupportTest.java
New file
@@ -0,0 +1,31 @@
package com.zy.integration.iot;
import com.zy.iot.config.IotProperties;
import com.zy.iot.util.IotInstructionIdGenerator;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class IotSupportTest {
    @Test
    public void shouldResolveServerUriAndClientId() {
        IotProperties properties = new IotProperties();
        properties.setEndpoint("example-ats.iot.cn-north-1.amazonaws.com.cn");
        properties.setPort(8883);
        properties.setThingName("thing-a");
        Assertions.assertEquals("ssl://example-ats.iot.cn-north-1.amazonaws.com.cn:8883", properties.getServerUri());
        Assertions.assertEquals("thing-a", properties.getResolvedClientId());
        properties.setClientId("client-b");
        Assertions.assertEquals("client-b", properties.getResolvedClientId());
    }
    @Test
    public void shouldGenerateStableLengthInstructionId() {
        String instructionId = IotInstructionIdGenerator.generate("wrk-1001");
        Assertions.assertEquals(20, instructionId.length());
        Assertions.assertEquals(instructionId, instructionId.toUpperCase());
    }
}