@allstak/wizard 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -0
- package/README.md +79 -0
- package/dist/api/auth-client.d.ts +22 -0
- package/dist/api/auth-client.d.ts.map +1 -0
- package/dist/api/auth-client.js +65 -0
- package/dist/api/auth-client.js.map +1 -0
- package/dist/api/auth.d.ts +39 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +69 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/client.d.ts +15 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +19 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/http.d.ts +44 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +130 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/index.d.ts +12 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +12 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/orgs-client.d.ts +16 -0
- package/dist/api/orgs-client.d.ts.map +1 -0
- package/dist/api/orgs-client.js +36 -0
- package/dist/api/orgs-client.js.map +1 -0
- package/dist/api/projects-client.d.ts +27 -0
- package/dist/api/projects-client.d.ts.map +1 -0
- package/dist/api/projects-client.js +58 -0
- package/dist/api/projects-client.js.map +1 -0
- package/dist/api/setup-doctor-client.d.ts +31 -0
- package/dist/api/setup-doctor-client.d.ts.map +1 -0
- package/dist/api/setup-doctor-client.js +68 -0
- package/dist/api/setup-doctor-client.js.map +1 -0
- package/dist/api/types.d.ts +92 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +303 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/_context.d.ts +37 -0
- package/dist/commands/_context.d.ts.map +1 -0
- package/dist/commands/_context.js +61 -0
- package/dist/commands/_context.js.map +1 -0
- package/dist/commands/config-cmd.d.ts +24 -0
- package/dist/commands/config-cmd.d.ts.map +1 -0
- package/dist/commands/config-cmd.js +137 -0
- package/dist/commands/config-cmd.js.map +1 -0
- package/dist/commands/doctor.d.ts +58 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +389 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +28 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +157 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +14 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/login.d.ts +27 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +116 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +15 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +36 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/orgs.d.ts +14 -0
- package/dist/commands/orgs.d.ts.map +1 -0
- package/dist/commands/orgs.js +39 -0
- package/dist/commands/orgs.js.map +1 -0
- package/dist/commands/projects.d.ts +21 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +86 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/repair.d.ts +12 -0
- package/dist/commands/repair.d.ts.map +1 -0
- package/dist/commands/repair.js +45 -0
- package/dist/commands/repair.js.map +1 -0
- package/dist/commands/restore.d.ts +32 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +120 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/uninstall.d.ts +13 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +53 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/whoami.d.ts +13 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +54 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/compat/engine.d.ts +31 -0
- package/dist/compat/engine.d.ts.map +1 -0
- package/dist/compat/engine.js +82 -0
- package/dist/compat/engine.js.map +1 -0
- package/dist/config/define.d.ts +21 -0
- package/dist/config/define.d.ts.map +1 -0
- package/dist/config/define.js +22 -0
- package/dist/config/define.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +26 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +84 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/migrations.d.ts +64 -0
- package/dist/config/migrations.d.ts.map +1 -0
- package/dist/config/migrations.js +66 -0
- package/dist/config/migrations.js.map +1 -0
- package/dist/config/precedence.d.ts +24 -0
- package/dist/config/precedence.d.ts.map +1 -0
- package/dist/config/precedence.js +55 -0
- package/dist/config/precedence.js.map +1 -0
- package/dist/config/schema.d.ts +10 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +140 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +80 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +23 -0
- package/dist/config/types.js.map +1 -0
- package/dist/credentials/encrypted-file.d.ts +3 -0
- package/dist/credentials/encrypted-file.d.ts.map +1 -0
- package/dist/credentials/encrypted-file.js +139 -0
- package/dist/credentials/encrypted-file.js.map +1 -0
- package/dist/credentials/error.d.ts +11 -0
- package/dist/credentials/error.d.ts.map +1 -0
- package/dist/credentials/error.js +14 -0
- package/dist/credentials/error.js.map +1 -0
- package/dist/credentials/index.d.ts +20 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +56 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/keychain-darwin.d.ts +11 -0
- package/dist/credentials/keychain-darwin.d.ts.map +1 -0
- package/dist/credentials/keychain-darwin.js +88 -0
- package/dist/credentials/keychain-darwin.js.map +1 -0
- package/dist/credentials/keychain-linux.d.ts +13 -0
- package/dist/credentials/keychain-linux.d.ts.map +1 -0
- package/dist/credentials/keychain-linux.js +88 -0
- package/dist/credentials/keychain-linux.js.map +1 -0
- package/dist/credentials/keychain-win.d.ts +13 -0
- package/dist/credentials/keychain-win.d.ts.map +1 -0
- package/dist/credentials/keychain-win.js +31 -0
- package/dist/credentials/keychain-win.js.map +1 -0
- package/dist/credentials/types.d.ts +38 -0
- package/dist/credentials/types.d.ts.map +1 -0
- package/dist/credentials/types.js +5 -0
- package/dist/credentials/types.js.map +1 -0
- package/dist/detect/framework.d.ts +28 -0
- package/dist/detect/framework.d.ts.map +1 -0
- package/dist/detect/framework.js +131 -0
- package/dist/detect/framework.js.map +1 -0
- package/dist/detect/index.d.ts +4 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/detect/index.js +4 -0
- package/dist/detect/index.js.map +1 -0
- package/dist/detect/monorepo.d.ts +10 -0
- package/dist/detect/monorepo.d.ts.map +1 -0
- package/dist/detect/monorepo.js +42 -0
- package/dist/detect/monorepo.js.map +1 -0
- package/dist/detect/package-manager.d.ts +18 -0
- package/dist/detect/package-manager.d.ts.map +1 -0
- package/dist/detect/package-manager.js +60 -0
- package/dist/detect/package-manager.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/_scaffold.d.ts +23 -0
- package/dist/integrations/_scaffold.d.ts.map +1 -0
- package/dist/integrations/_scaffold.js +62 -0
- package/dist/integrations/_scaffold.js.map +1 -0
- package/dist/integrations/_shared.d.ts +18 -0
- package/dist/integrations/_shared.d.ts.map +1 -0
- package/dist/integrations/_shared.js +73 -0
- package/dist/integrations/_shared.js.map +1 -0
- package/dist/integrations/_simple-scaffold.d.ts +19 -0
- package/dist/integrations/_simple-scaffold.d.ts.map +1 -0
- package/dist/integrations/_simple-scaffold.js +23 -0
- package/dist/integrations/_simple-scaffold.js.map +1 -0
- package/dist/integrations/dotnet.d.ts +2 -0
- package/dist/integrations/dotnet.d.ts.map +1 -0
- package/dist/integrations/dotnet.js +9 -0
- package/dist/integrations/dotnet.js.map +1 -0
- package/dist/integrations/expo.d.ts +2 -0
- package/dist/integrations/expo.d.ts.map +1 -0
- package/dist/integrations/expo.js +12 -0
- package/dist/integrations/expo.js.map +1 -0
- package/dist/integrations/fastify.d.ts +2 -0
- package/dist/integrations/fastify.d.ts.map +1 -0
- package/dist/integrations/fastify.js +10 -0
- package/dist/integrations/fastify.js.map +1 -0
- package/dist/integrations/flutter.d.ts +2 -0
- package/dist/integrations/flutter.d.ts.map +1 -0
- package/dist/integrations/flutter.js +9 -0
- package/dist/integrations/flutter.js.map +1 -0
- package/dist/integrations/go.d.ts +2 -0
- package/dist/integrations/go.d.ts.map +1 -0
- package/dist/integrations/go.js +9 -0
- package/dist/integrations/go.js.map +1 -0
- package/dist/integrations/java.d.ts +2 -0
- package/dist/integrations/java.d.ts.map +1 -0
- package/dist/integrations/java.js +9 -0
- package/dist/integrations/java.js.map +1 -0
- package/dist/integrations/js/detect.d.ts +3 -0
- package/dist/integrations/js/detect.d.ts.map +1 -0
- package/dist/integrations/js/detect.js +7 -0
- package/dist/integrations/js/detect.js.map +1 -0
- package/dist/integrations/js/doctor.d.ts +3 -0
- package/dist/integrations/js/doctor.d.ts.map +1 -0
- package/dist/integrations/js/doctor.js +38 -0
- package/dist/integrations/js/doctor.js.map +1 -0
- package/dist/integrations/js/files.d.ts +3 -0
- package/dist/integrations/js/files.d.ts.map +1 -0
- package/dist/integrations/js/files.js +19 -0
- package/dist/integrations/js/files.js.map +1 -0
- package/dist/integrations/js/index.d.ts +3 -0
- package/dist/integrations/js/index.d.ts.map +1 -0
- package/dist/integrations/js/index.js +25 -0
- package/dist/integrations/js/index.js.map +1 -0
- package/dist/integrations/js/manifest.d.ts +3 -0
- package/dist/integrations/js/manifest.d.ts.map +1 -0
- package/dist/integrations/js/manifest.js +19 -0
- package/dist/integrations/js/manifest.js.map +1 -0
- package/dist/integrations/js/patch.d.ts +4 -0
- package/dist/integrations/js/patch.d.ts.map +1 -0
- package/dist/integrations/js/patch.js +24 -0
- package/dist/integrations/js/patch.js.map +1 -0
- package/dist/integrations/js/uninstall.d.ts +4 -0
- package/dist/integrations/js/uninstall.d.ts.map +1 -0
- package/dist/integrations/js/uninstall.js +16 -0
- package/dist/integrations/js/uninstall.js.map +1 -0
- package/dist/integrations/nestjs.d.ts +2 -0
- package/dist/integrations/nestjs.d.ts.map +1 -0
- package/dist/integrations/nestjs.js +10 -0
- package/dist/integrations/nestjs.js.map +1 -0
- package/dist/integrations/next/detect.d.ts +3 -0
- package/dist/integrations/next/detect.d.ts.map +1 -0
- package/dist/integrations/next/detect.js +11 -0
- package/dist/integrations/next/detect.js.map +1 -0
- package/dist/integrations/next/doctor.d.ts +3 -0
- package/dist/integrations/next/doctor.d.ts.map +1 -0
- package/dist/integrations/next/doctor.js +46 -0
- package/dist/integrations/next/doctor.js.map +1 -0
- package/dist/integrations/next/files.d.ts +3 -0
- package/dist/integrations/next/files.d.ts.map +1 -0
- package/dist/integrations/next/files.js +19 -0
- package/dist/integrations/next/files.js.map +1 -0
- package/dist/integrations/next/index.d.ts +3 -0
- package/dist/integrations/next/index.d.ts.map +1 -0
- package/dist/integrations/next/index.js +44 -0
- package/dist/integrations/next/index.js.map +1 -0
- package/dist/integrations/next/manifest.d.ts +3 -0
- package/dist/integrations/next/manifest.d.ts.map +1 -0
- package/dist/integrations/next/manifest.js +29 -0
- package/dist/integrations/next/manifest.js.map +1 -0
- package/dist/integrations/next/patch.d.ts +4 -0
- package/dist/integrations/next/patch.d.ts.map +1 -0
- package/dist/integrations/next/patch.js +49 -0
- package/dist/integrations/next/patch.js.map +1 -0
- package/dist/integrations/next/uninstall.d.ts +4 -0
- package/dist/integrations/next/uninstall.d.ts.map +1 -0
- package/dist/integrations/next/uninstall.js +22 -0
- package/dist/integrations/next/uninstall.js.map +1 -0
- package/dist/integrations/otel.d.ts +2 -0
- package/dist/integrations/otel.d.ts.map +1 -0
- package/dist/integrations/otel.js +10 -0
- package/dist/integrations/otel.js.map +1 -0
- package/dist/integrations/php.d.ts +2 -0
- package/dist/integrations/php.d.ts.map +1 -0
- package/dist/integrations/php.js +9 -0
- package/dist/integrations/php.js.map +1 -0
- package/dist/integrations/python.d.ts +2 -0
- package/dist/integrations/python.d.ts.map +1 -0
- package/dist/integrations/python.js +9 -0
- package/dist/integrations/python.js.map +1 -0
- package/dist/integrations/react/detect.d.ts +3 -0
- package/dist/integrations/react/detect.d.ts.map +1 -0
- package/dist/integrations/react/detect.js +11 -0
- package/dist/integrations/react/detect.js.map +1 -0
- package/dist/integrations/react/doctor.d.ts +3 -0
- package/dist/integrations/react/doctor.d.ts.map +1 -0
- package/dist/integrations/react/doctor.js +65 -0
- package/dist/integrations/react/doctor.js.map +1 -0
- package/dist/integrations/react/files.d.ts +4 -0
- package/dist/integrations/react/files.d.ts.map +1 -0
- package/dist/integrations/react/files.js +24 -0
- package/dist/integrations/react/files.js.map +1 -0
- package/dist/integrations/react/index.d.ts +17 -0
- package/dist/integrations/react/index.d.ts.map +1 -0
- package/dist/integrations/react/index.js +62 -0
- package/dist/integrations/react/index.js.map +1 -0
- package/dist/integrations/react/manifest.d.ts +3 -0
- package/dist/integrations/react/manifest.d.ts.map +1 -0
- package/dist/integrations/react/manifest.js +31 -0
- package/dist/integrations/react/manifest.js.map +1 -0
- package/dist/integrations/react/patch.d.ts +4 -0
- package/dist/integrations/react/patch.d.ts.map +1 -0
- package/dist/integrations/react/patch.js +39 -0
- package/dist/integrations/react/patch.js.map +1 -0
- package/dist/integrations/react/uninstall.d.ts +4 -0
- package/dist/integrations/react/uninstall.d.ts.map +1 -0
- package/dist/integrations/react/uninstall.js +21 -0
- package/dist/integrations/react/uninstall.js.map +1 -0
- package/dist/integrations/react-native.d.ts +10 -0
- package/dist/integrations/react-native.d.ts.map +1 -0
- package/dist/integrations/react-native.js +57 -0
- package/dist/integrations/react-native.js.map +1 -0
- package/dist/integrations/ruby.d.ts +2 -0
- package/dist/integrations/ruby.d.ts.map +1 -0
- package/dist/integrations/ruby.js +9 -0
- package/dist/integrations/ruby.js.map +1 -0
- package/dist/lifecycle/hooks.d.ts +42 -0
- package/dist/lifecycle/hooks.d.ts.map +1 -0
- package/dist/lifecycle/hooks.js +43 -0
- package/dist/lifecycle/hooks.js.map +1 -0
- package/dist/migrations/builtin/dsn-to-api-key.d.ts +3 -0
- package/dist/migrations/builtin/dsn-to-api-key.d.ts.map +1 -0
- package/dist/migrations/builtin/dsn-to-api-key.js +59 -0
- package/dist/migrations/builtin/dsn-to-api-key.js.map +1 -0
- package/dist/migrations/engine.d.ts +52 -0
- package/dist/migrations/engine.d.ts.map +1 -0
- package/dist/migrations/engine.js +46 -0
- package/dist/migrations/engine.js.map +1 -0
- package/dist/migrations/index.d.ts +3 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +11 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/output/human.d.ts +20 -0
- package/dist/output/human.d.ts.map +1 -0
- package/dist/output/human.js +77 -0
- package/dist/output/human.js.map +1 -0
- package/dist/output/index.d.ts +6 -0
- package/dist/output/index.d.ts.map +1 -0
- package/dist/output/index.js +8 -0
- package/dist/output/index.js.map +1 -0
- package/dist/output/json.d.ts +20 -0
- package/dist/output/json.d.ts.map +1 -0
- package/dist/output/json.js +60 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/types.d.ts +36 -0
- package/dist/output/types.d.ts.map +1 -0
- package/dist/output/types.js +2 -0
- package/dist/output/types.js.map +1 -0
- package/dist/patchers/env-file.d.ts +21 -0
- package/dist/patchers/env-file.d.ts.map +1 -0
- package/dist/patchers/env-file.js +77 -0
- package/dist/patchers/env-file.js.map +1 -0
- package/dist/patchers/js-ast.d.ts +29 -0
- package/dist/patchers/js-ast.d.ts.map +1 -0
- package/dist/patchers/js-ast.js +71 -0
- package/dist/patchers/js-ast.js.map +1 -0
- package/dist/patchers/json-file.d.ts +19 -0
- package/dist/patchers/json-file.d.ts.map +1 -0
- package/dist/patchers/json-file.js +41 -0
- package/dist/patchers/json-file.js.map +1 -0
- package/dist/patchers/markers.d.ts +28 -0
- package/dist/patchers/markers.d.ts.map +1 -0
- package/dist/patchers/markers.js +49 -0
- package/dist/patchers/markers.js.map +1 -0
- package/dist/patchers/source-block.d.ts +24 -0
- package/dist/patchers/source-block.d.ts.map +1 -0
- package/dist/patchers/source-block.js +40 -0
- package/dist/patchers/source-block.js.map +1 -0
- package/dist/registry/index.d.ts +5 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +42 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/manifest.d.ts +78 -0
- package/dist/registry/manifest.d.ts.map +1 -0
- package/dist/registry/manifest.js +2 -0
- package/dist/registry/manifest.js.map +1 -0
- package/dist/registry/registry.d.ts +14 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +29 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/types.d.ts +78 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +2 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/snapshot/restore.d.ts +41 -0
- package/dist/snapshot/restore.d.ts.map +1 -0
- package/dist/snapshot/restore.js +110 -0
- package/dist/snapshot/restore.js.map +1 -0
- package/dist/snapshot/store.d.ts +105 -0
- package/dist/snapshot/store.d.ts.map +1 -0
- package/dist/snapshot/store.js +162 -0
- package/dist/snapshot/store.js.map +1 -0
- package/dist/sourcemaps/index.d.ts +3 -0
- package/dist/sourcemaps/index.d.ts.map +1 -0
- package/dist/sourcemaps/index.js +17 -0
- package/dist/sourcemaps/index.js.map +1 -0
- package/dist/sourcemaps/metro.d.ts +11 -0
- package/dist/sourcemaps/metro.d.ts.map +1 -0
- package/dist/sourcemaps/metro.js +31 -0
- package/dist/sourcemaps/metro.js.map +1 -0
- package/dist/sourcemaps/next.d.ts +3 -0
- package/dist/sourcemaps/next.d.ts.map +1 -0
- package/dist/sourcemaps/next.js +46 -0
- package/dist/sourcemaps/next.js.map +1 -0
- package/dist/sourcemaps/provider.d.ts +51 -0
- package/dist/sourcemaps/provider.d.ts.map +1 -0
- package/dist/sourcemaps/provider.js +29 -0
- package/dist/sourcemaps/provider.js.map +1 -0
- package/dist/sourcemaps/vite.d.ts +3 -0
- package/dist/sourcemaps/vite.d.ts.map +1 -0
- package/dist/sourcemaps/vite.js +60 -0
- package/dist/sourcemaps/vite.js.map +1 -0
- package/dist/sourcemaps/webpack.d.ts +8 -0
- package/dist/sourcemaps/webpack.d.ts.map +1 -0
- package/dist/sourcemaps/webpack.js +52 -0
- package/dist/sourcemaps/webpack.js.map +1 -0
- package/dist/telemetry/cli-wrap.d.ts +22 -0
- package/dist/telemetry/cli-wrap.d.ts.map +1 -0
- package/dist/telemetry/cli-wrap.js +53 -0
- package/dist/telemetry/cli-wrap.js.map +1 -0
- package/dist/telemetry/http-provider.d.ts +28 -0
- package/dist/telemetry/http-provider.d.ts.map +1 -0
- package/dist/telemetry/http-provider.js +24 -0
- package/dist/telemetry/http-provider.js.map +1 -0
- package/dist/telemetry/index.d.ts +7 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +6 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/install-id.d.ts +3 -0
- package/dist/telemetry/install-id.d.ts.map +1 -0
- package/dist/telemetry/install-id.js +46 -0
- package/dist/telemetry/install-id.js.map +1 -0
- package/dist/telemetry/payload.d.ts +82 -0
- package/dist/telemetry/payload.d.ts.map +1 -0
- package/dist/telemetry/payload.js +82 -0
- package/dist/telemetry/payload.js.map +1 -0
- package/dist/telemetry/provider.d.ts +32 -0
- package/dist/telemetry/provider.d.ts.map +1 -0
- package/dist/telemetry/provider.js +30 -0
- package/dist/telemetry/provider.js.map +1 -0
- package/dist/telemetry/runtime.d.ts +29 -0
- package/dist/telemetry/runtime.d.ts.map +1 -0
- package/dist/telemetry/runtime.js +44 -0
- package/dist/telemetry/runtime.js.map +1 -0
- package/dist/transaction/tx.d.ts +58 -0
- package/dist/transaction/tx.d.ts.map +1 -0
- package/dist/transaction/tx.js +170 -0
- package/dist/transaction/tx.js.map +1 -0
- package/dist/util/error-codes.d.ts +29 -0
- package/dist/util/error-codes.d.ts.map +1 -0
- package/dist/util/error-codes.js +192 -0
- package/dist/util/error-codes.js.map +1 -0
- package/dist/util/errors.d.ts +83 -0
- package/dist/util/errors.d.ts.map +1 -0
- package/dist/util/errors.js +110 -0
- package/dist/util/errors.js.map +1 -0
- package/dist/util/log.d.ts +11 -0
- package/dist/util/log.d.ts.map +1 -0
- package/dist/util/log.js +18 -0
- package/dist/util/log.js.map +1 -0
- package/dist/util/paths.d.ts +3 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +31 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/version.d.ts +15 -0
- package/dist/util/version.d.ts.map +1 -0
- package/dist/util/version.js +40 -0
- package/dist/util/version.js.map +1 -0
- package/dist/util/wizard-version.d.ts +6 -0
- package/dist/util/wizard-version.d.ts.map +1 -0
- package/dist/util/wizard-version.js +6 -0
- package/dist/util/wizard-version.js.map +1 -0
- package/docs/architecture/README.md +58 -0
- package/docs/architecture/dry-run.md +34 -0
- package/docs/architecture/integration-lifecycle.md +77 -0
- package/docs/architecture/patch-pipeline.md +58 -0
- package/docs/architecture/registry.md +52 -0
- package/docs/architecture/rollback.md +47 -0
- package/docs/architecture/sourcemaps.md +53 -0
- package/docs/architecture/stability-levels.md +35 -0
- package/docs/architecture/transaction.md +51 -0
- package/docs/architecture/v02-bare-react-native-spec.md +92 -0
- package/docs/architecture/v02-java-host-fix-spec.md +125 -0
- package/docs/architecture/v02-sourcemaps-e2e-spec.md +157 -0
- package/package.json +98 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { TelemetryProvider } from './provider.js';
|
|
2
|
+
/**
|
|
3
|
+
* HTTP telemetry provider. POSTs the canonical payload to a dedicated
|
|
4
|
+
* telemetry endpoint with a short timeout.
|
|
5
|
+
*
|
|
6
|
+
* Backend contract (deferred — endpoint NOT verified to exist as of 2026-05-07):
|
|
7
|
+
*
|
|
8
|
+
* POST <endpoint>
|
|
9
|
+
* Content-Type: application/json
|
|
10
|
+
* User-Agent: allstak-wizard/<wizardVersion>
|
|
11
|
+
*
|
|
12
|
+
* Body: TelemetryPayload (exact shape from src/telemetry/payload.ts)
|
|
13
|
+
*
|
|
14
|
+
* Response: any 2xx is success. Non-2xx and network errors are swallowed
|
|
15
|
+
* silently by `safeEmit` upstream.
|
|
16
|
+
*
|
|
17
|
+
* Until the backend lands a telemetry endpoint, the wizard's default is
|
|
18
|
+
* `noopTelemetry`. Operators (or future maintainers) can swap to this
|
|
19
|
+
* provider via `setTelemetryProvider(httpTelemetry({ endpoint }))`.
|
|
20
|
+
*/
|
|
21
|
+
export interface HttpTelemetryOptions {
|
|
22
|
+
/** Absolute URL of the telemetry endpoint. */
|
|
23
|
+
endpoint: string;
|
|
24
|
+
/** Timeout in ms — telemetry must be cheap. Default 1500. */
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function httpTelemetry(options: HttpTelemetryOptions): TelemetryProvider;
|
|
28
|
+
//# sourceMappingURL=http-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-provider.d.ts","sourceRoot":"","sources":["../../src/telemetry/http-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,iBAAiB,CAqB9E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function httpTelemetry(options) {
|
|
2
|
+
return {
|
|
3
|
+
id: 'http',
|
|
4
|
+
async emit(payload) {
|
|
5
|
+
const controller = new AbortController();
|
|
6
|
+
const timer = setTimeout(() => controller.abort(), options.timeoutMs ?? 1500);
|
|
7
|
+
try {
|
|
8
|
+
await fetch(options.endpoint, {
|
|
9
|
+
method: 'POST',
|
|
10
|
+
headers: {
|
|
11
|
+
'Content-Type': 'application/json',
|
|
12
|
+
'User-Agent': `allstak-wizard/${payload.wizardVersion}`,
|
|
13
|
+
},
|
|
14
|
+
body: JSON.stringify(payload),
|
|
15
|
+
signal: controller.signal,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
clearTimeout(timer);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=http-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-provider.js","sourceRoot":"","sources":["../../src/telemetry/http-provider.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,aAAa,CAAC,OAA6B;IACzD,OAAO;QACL,EAAE,EAAE,MAAM;QACV,KAAK,CAAC,IAAI,CAAC,OAAyB;YAClC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;YAC9E,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;oBAC5B,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,YAAY,EAAE,kBAAkB,OAAO,CAAC,aAAa,EAAE;qBACxD;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;oBAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { noopTelemetry, setTelemetryProvider, getTelemetryProvider, resetTelemetryProvider, safeEmit, } from './provider.js';
|
|
2
|
+
export type { TelemetryProvider } from './provider.js';
|
|
3
|
+
export { httpTelemetry, type HttpTelemetryOptions } from './http-provider.js';
|
|
4
|
+
export { emitRunTelemetry, isTelemetryEnabled, listDocumentedPayloadFields, type TelemetryRuntimeOptions, type TelemetryPayload, type PayloadInputs, } from './runtime.js';
|
|
5
|
+
export { buildPayload, documentedFields, PAYLOAD_SCHEMA_VERSION, } from './payload.js';
|
|
6
|
+
export { ensureInstallId, readInstallId } from './install-id.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { noopTelemetry, setTelemetryProvider, getTelemetryProvider, resetTelemetryProvider, safeEmit, } from './provider.js';
|
|
2
|
+
export { httpTelemetry } from './http-provider.js';
|
|
3
|
+
export { emitRunTelemetry, isTelemetryEnabled, listDocumentedPayloadFields, } from './runtime.js';
|
|
4
|
+
export { buildPayload, documentedFields, PAYLOAD_SCHEMA_VERSION, } from './payload.js';
|
|
5
|
+
export { ensureInstallId, readInstallId } from './install-id.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,GAI5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-id.d.ts","sourceRoot":"","sources":["../../src/telemetry/install-id.ts"],"names":[],"mappings":"AAoBA,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAS7C;AAED,wBAAgB,eAAe,IAAI,MAAM,CAaxC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
/**
|
|
6
|
+
* Anonymous install id — a v4 UUID stored in `~/.config/allstak/install-id`.
|
|
7
|
+
*
|
|
8
|
+
* - Generated on first telemetry-emitting run.
|
|
9
|
+
* - Reused across runs to coalesce events for the same install.
|
|
10
|
+
* - Users can rotate it by deleting the file (no PII tied to it).
|
|
11
|
+
* - Telemetry-disabled runs do NOT generate or read it.
|
|
12
|
+
*/
|
|
13
|
+
function configPath() {
|
|
14
|
+
const xdg = process.env.XDG_CONFIG_HOME;
|
|
15
|
+
const base = xdg && xdg.length > 0 ? xdg : resolve(homedir(), '.config');
|
|
16
|
+
return resolve(base, 'allstak', 'install-id');
|
|
17
|
+
}
|
|
18
|
+
export function readInstallId() {
|
|
19
|
+
const path = configPath();
|
|
20
|
+
if (!existsSync(path))
|
|
21
|
+
return null;
|
|
22
|
+
try {
|
|
23
|
+
const value = readFileSync(path, 'utf8').trim();
|
|
24
|
+
return value.length > 0 ? value : null;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function ensureInstallId() {
|
|
31
|
+
const existing = readInstallId();
|
|
32
|
+
if (existing)
|
|
33
|
+
return existing;
|
|
34
|
+
const id = randomUUID();
|
|
35
|
+
const path = configPath();
|
|
36
|
+
try {
|
|
37
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
38
|
+
writeFileSync(path, id, { encoding: 'utf8', mode: 0o600 });
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Best-effort — telemetry must never fail the wizard. If we can't write
|
|
42
|
+
// the id, just return the in-memory one.
|
|
43
|
+
}
|
|
44
|
+
return id;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=install-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-id.js","sourceRoot":"","sources":["../../src/telemetry/install-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;GAOG;AAEH,SAAS,UAAU;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACzE,OAAO,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,yCAAyC;IAC3C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { IntegrationId, PackageManager } from '../detect/index.js';
|
|
2
|
+
import type { StabilityLevel } from '../registry/manifest.js';
|
|
3
|
+
import type { WizardErrorCode, WizardStage } from '../util/error-codes.js';
|
|
4
|
+
/**
|
|
5
|
+
* Telemetry payload — every field that the wizard EVER sends.
|
|
6
|
+
*
|
|
7
|
+
* Privacy contract (also documented in docs/beta/privacy.md):
|
|
8
|
+
*
|
|
9
|
+
* ✗ NO API keys, DSNs, refresh tokens, or any credential-shaped value.
|
|
10
|
+
* ✗ NO project names, org names, project ids, org ids.
|
|
11
|
+
* ✗ NO file paths (absolute or relative).
|
|
12
|
+
* ✗ NO env-var values.
|
|
13
|
+
* ✗ NO source code, error messages with user content, or stack frames.
|
|
14
|
+
* ✗ NO email addresses, IP addresses, or hostnames.
|
|
15
|
+
*
|
|
16
|
+
* ✓ Wizard version, command name, integration id, stability level.
|
|
17
|
+
* ✓ OS family + Node major version + package manager + arch.
|
|
18
|
+
* ✓ Outcome (success/failure/cancelled/noop).
|
|
19
|
+
* ✓ Stage at which a failure occurred.
|
|
20
|
+
* ✓ Canonical error code (NEVER message text).
|
|
21
|
+
* ✓ Whether rollback was triggered (boolean).
|
|
22
|
+
* ✓ Wall-clock duration ms.
|
|
23
|
+
*
|
|
24
|
+
* The TypeScript type IS the contract — adding a field here REQUIRES updating
|
|
25
|
+
* docs/beta/privacy.md AND incrementing `payloadSchemaVersion`.
|
|
26
|
+
*/
|
|
27
|
+
export declare const PAYLOAD_SCHEMA_VERSION = 1;
|
|
28
|
+
export interface TelemetryPayload {
|
|
29
|
+
schemaVersion: typeof PAYLOAD_SCHEMA_VERSION;
|
|
30
|
+
/** Stable per-install id (anonymous, regenerable). */
|
|
31
|
+
installId: string | null;
|
|
32
|
+
wizardVersion: string;
|
|
33
|
+
command: string;
|
|
34
|
+
integration: IntegrationId | null;
|
|
35
|
+
stability: StabilityLevel | null;
|
|
36
|
+
os: {
|
|
37
|
+
/** "darwin" | "linux" | "win32" | "freebsd" | "openbsd" | … (Node's `process.platform`). */
|
|
38
|
+
family: NodeJS.Platform;
|
|
39
|
+
/** OS kernel version. Major-only ("23.x.x" → "23") to avoid fingerprinting. */
|
|
40
|
+
majorRelease: string;
|
|
41
|
+
arch: NodeJS.Architecture;
|
|
42
|
+
};
|
|
43
|
+
node: {
|
|
44
|
+
/** "20.12.0" → "20". */
|
|
45
|
+
major: string;
|
|
46
|
+
};
|
|
47
|
+
packageManager: PackageManager | null;
|
|
48
|
+
outcome: 'success' | 'failure' | 'cancelled' | 'noop';
|
|
49
|
+
/** Stage at which the run terminated (success or failure). */
|
|
50
|
+
stage: WizardStage | null;
|
|
51
|
+
/** Canonical code from src/util/error-codes.ts when outcome=failure; else null. */
|
|
52
|
+
errorCode: WizardErrorCode | null;
|
|
53
|
+
/** Was an in-process rollback triggered during this run? */
|
|
54
|
+
rollbackTriggered: boolean;
|
|
55
|
+
durationMs: number;
|
|
56
|
+
}
|
|
57
|
+
export interface PayloadInputs {
|
|
58
|
+
installId: string | null;
|
|
59
|
+
wizardVersion: string;
|
|
60
|
+
command: string;
|
|
61
|
+
integration: IntegrationId | null;
|
|
62
|
+
stability: StabilityLevel | null;
|
|
63
|
+
packageManager: PackageManager | null;
|
|
64
|
+
outcome: 'success' | 'failure' | 'cancelled' | 'noop';
|
|
65
|
+
stage: WizardStage | null;
|
|
66
|
+
errorCode: WizardErrorCode | null;
|
|
67
|
+
rollbackTriggered: boolean;
|
|
68
|
+
durationMs: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Build a payload from the inputs collected by the orchestrator. The function
|
|
72
|
+
* is the ONLY entry point — direct construction is discouraged so the
|
|
73
|
+
* sanitization rules above stay enforced.
|
|
74
|
+
*/
|
|
75
|
+
export declare function buildPayload(input: PayloadInputs): TelemetryPayload;
|
|
76
|
+
/**
|
|
77
|
+
* `documentedFields` — programmatic source of truth for what we send.
|
|
78
|
+
* `npm test` and `docs/beta/privacy.md` both reference this list to enforce
|
|
79
|
+
* that the payload doesn't accidentally grow.
|
|
80
|
+
*/
|
|
81
|
+
export declare const documentedFields: readonly ["schemaVersion", "installId", "wizardVersion", "command", "integration", "stability", "os.family", "os.majorRelease", "os.arch", "node.major", "packageManager", "outcome", "stage", "errorCode", "rollbackTriggered", "durationMs"];
|
|
82
|
+
//# sourceMappingURL=payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/telemetry/payload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,sBAAsB,CAAC;IAC7C,sDAAsD;IACtD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,EAAE,EAAE;QACF,4FAA4F;QAC5F,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;QACxB,+EAA+E;QAC/E,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC;KAC3B,CAAC;IACF,IAAI,EAAE;QACJ,wBAAwB;QACxB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IACtD,8DAA8D;IAC9D,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,mFAAmF;IACnF,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,4DAA4D;IAC5D,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IACtD,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,gBAAgB,CAuBnE;AAOD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,gPAiBnB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { platform, release as osRelease, arch as osArch } from 'node:os';
|
|
2
|
+
/**
|
|
3
|
+
* Telemetry payload — every field that the wizard EVER sends.
|
|
4
|
+
*
|
|
5
|
+
* Privacy contract (also documented in docs/beta/privacy.md):
|
|
6
|
+
*
|
|
7
|
+
* ✗ NO API keys, DSNs, refresh tokens, or any credential-shaped value.
|
|
8
|
+
* ✗ NO project names, org names, project ids, org ids.
|
|
9
|
+
* ✗ NO file paths (absolute or relative).
|
|
10
|
+
* ✗ NO env-var values.
|
|
11
|
+
* ✗ NO source code, error messages with user content, or stack frames.
|
|
12
|
+
* ✗ NO email addresses, IP addresses, or hostnames.
|
|
13
|
+
*
|
|
14
|
+
* ✓ Wizard version, command name, integration id, stability level.
|
|
15
|
+
* ✓ OS family + Node major version + package manager + arch.
|
|
16
|
+
* ✓ Outcome (success/failure/cancelled/noop).
|
|
17
|
+
* ✓ Stage at which a failure occurred.
|
|
18
|
+
* ✓ Canonical error code (NEVER message text).
|
|
19
|
+
* ✓ Whether rollback was triggered (boolean).
|
|
20
|
+
* ✓ Wall-clock duration ms.
|
|
21
|
+
*
|
|
22
|
+
* The TypeScript type IS the contract — adding a field here REQUIRES updating
|
|
23
|
+
* docs/beta/privacy.md AND incrementing `payloadSchemaVersion`.
|
|
24
|
+
*/
|
|
25
|
+
export const PAYLOAD_SCHEMA_VERSION = 1;
|
|
26
|
+
/**
|
|
27
|
+
* Build a payload from the inputs collected by the orchestrator. The function
|
|
28
|
+
* is the ONLY entry point — direct construction is discouraged so the
|
|
29
|
+
* sanitization rules above stay enforced.
|
|
30
|
+
*/
|
|
31
|
+
export function buildPayload(input) {
|
|
32
|
+
return {
|
|
33
|
+
schemaVersion: PAYLOAD_SCHEMA_VERSION,
|
|
34
|
+
installId: input.installId,
|
|
35
|
+
wizardVersion: input.wizardVersion,
|
|
36
|
+
command: input.command,
|
|
37
|
+
integration: input.integration,
|
|
38
|
+
stability: input.stability,
|
|
39
|
+
os: {
|
|
40
|
+
family: platform(),
|
|
41
|
+
majorRelease: pickMajor(osRelease()),
|
|
42
|
+
arch: osArch(),
|
|
43
|
+
},
|
|
44
|
+
node: {
|
|
45
|
+
major: pickMajor(process.versions.node),
|
|
46
|
+
},
|
|
47
|
+
packageManager: input.packageManager,
|
|
48
|
+
outcome: input.outcome,
|
|
49
|
+
stage: input.stage,
|
|
50
|
+
errorCode: input.errorCode,
|
|
51
|
+
rollbackTriggered: input.rollbackTriggered,
|
|
52
|
+
durationMs: input.durationMs,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function pickMajor(versionLike) {
|
|
56
|
+
const m = /^(\d+)/.exec(versionLike);
|
|
57
|
+
return m ? m[1] : 'unknown';
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* `documentedFields` — programmatic source of truth for what we send.
|
|
61
|
+
* `npm test` and `docs/beta/privacy.md` both reference this list to enforce
|
|
62
|
+
* that the payload doesn't accidentally grow.
|
|
63
|
+
*/
|
|
64
|
+
export const documentedFields = [
|
|
65
|
+
'schemaVersion',
|
|
66
|
+
'installId',
|
|
67
|
+
'wizardVersion',
|
|
68
|
+
'command',
|
|
69
|
+
'integration',
|
|
70
|
+
'stability',
|
|
71
|
+
'os.family',
|
|
72
|
+
'os.majorRelease',
|
|
73
|
+
'os.arch',
|
|
74
|
+
'node.major',
|
|
75
|
+
'packageManager',
|
|
76
|
+
'outcome',
|
|
77
|
+
'stage',
|
|
78
|
+
'errorCode',
|
|
79
|
+
'rollbackTriggered',
|
|
80
|
+
'durationMs',
|
|
81
|
+
];
|
|
82
|
+
//# sourceMappingURL=payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/telemetry/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,SAAS,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,SAAS,CAAC;AAKzE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AA8CxC;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAoB;IAC/C,OAAO;QACL,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,EAAE,EAAE;YACF,MAAM,EAAE,QAAQ,EAAE;YAClB,YAAY,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,EAAE,MAAM,EAAyB;SACtC;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;SACxC;QACD,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB;IACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,eAAe;IACf,WAAW;IACX,eAAe;IACf,SAAS;IACT,aAAa;IACb,WAAW;IACX,WAAW;IACX,iBAAiB;IACjB,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,SAAS;IACT,OAAO;IACP,WAAW;IACX,mBAAmB;IACnB,YAAY;CACJ,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { TelemetryPayload } from './payload.js';
|
|
2
|
+
/**
|
|
3
|
+
* Telemetry provider abstraction. The provider is invoked exactly once per
|
|
4
|
+
* wizard command — after the orchestrator has finalised the outcome and
|
|
5
|
+
* built the canonical payload. There is no streaming/event-by-event surface;
|
|
6
|
+
* that complicates privacy review for marginal value.
|
|
7
|
+
*
|
|
8
|
+
* Privacy invariants:
|
|
9
|
+
* - The orchestrator passes a `TelemetryPayload` (see ./payload.ts) which is
|
|
10
|
+
* the entire on-the-wire shape. No secondary fields are read by the
|
|
11
|
+
* provider.
|
|
12
|
+
* - Providers MUST NOT throw — the orchestrator calls `safeEmit()` which
|
|
13
|
+
* wraps every provider call in a try/catch. Failures are debug-logged
|
|
14
|
+
* but never propagated.
|
|
15
|
+
* - Disabled-by-default behaviour lives in `runtime.ts:isTelemetryEnabled`.
|
|
16
|
+
*/
|
|
17
|
+
export interface TelemetryProvider {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
/** Send the payload. Provider may be sync or async. */
|
|
20
|
+
emit(payload: TelemetryPayload): void | Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
/** Default provider — does nothing. Always installed so callers can `await` unconditionally. */
|
|
23
|
+
export declare const noopTelemetry: TelemetryProvider;
|
|
24
|
+
export declare function setTelemetryProvider(provider: TelemetryProvider): void;
|
|
25
|
+
export declare function getTelemetryProvider(): TelemetryProvider;
|
|
26
|
+
export declare function resetTelemetryProvider(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Run a provider's `emit` and swallow any exception. The result is intentionally
|
|
29
|
+
* `void` — the orchestrator should never branch on telemetry success.
|
|
30
|
+
*/
|
|
31
|
+
export declare function safeEmit(provider: TelemetryProvider, payload: TelemetryPayload): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/telemetry/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,IAAI,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,gGAAgG;AAChG,eAAO,MAAM,aAAa,EAAE,iBAK3B,CAAC;AAIF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAEtE;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Default provider — does nothing. Always installed so callers can `await` unconditionally. */
|
|
2
|
+
export const noopTelemetry = {
|
|
3
|
+
id: 'noop',
|
|
4
|
+
async emit() {
|
|
5
|
+
/* intentionally empty */
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
let active = noopTelemetry;
|
|
9
|
+
export function setTelemetryProvider(provider) {
|
|
10
|
+
active = provider;
|
|
11
|
+
}
|
|
12
|
+
export function getTelemetryProvider() {
|
|
13
|
+
return active;
|
|
14
|
+
}
|
|
15
|
+
export function resetTelemetryProvider() {
|
|
16
|
+
active = noopTelemetry;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Run a provider's `emit` and swallow any exception. The result is intentionally
|
|
20
|
+
* `void` — the orchestrator should never branch on telemetry success.
|
|
21
|
+
*/
|
|
22
|
+
export async function safeEmit(provider, payload) {
|
|
23
|
+
try {
|
|
24
|
+
await Promise.resolve(provider.emit(payload));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Telemetry failures are NEVER allowed to bubble.
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/telemetry/provider.ts"],"names":[],"mappings":"AAwBA,gGAAgG;AAChG,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,EAAE,EAAE,MAAM;IACV,KAAK,CAAC,IAAI;QACR,yBAAyB;IAC3B,CAAC;CACF,CAAC;AAEF,IAAI,MAAM,GAAsB,aAAa,CAAC;AAE9C,MAAM,UAAU,oBAAoB,CAAC,QAA2B;IAC9D,MAAM,GAAG,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,aAAa,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAA2B,EAAE,OAAyB;IACnF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type PayloadInputs, type TelemetryPayload } from './payload.js';
|
|
2
|
+
/**
|
|
3
|
+
* Telemetry runtime — applies the opt-in/opt-out policy, builds the payload,
|
|
4
|
+
* and dispatches to the active provider.
|
|
5
|
+
*
|
|
6
|
+
* Disabled by default. Enabled only when ALL of the following hold:
|
|
7
|
+
* 1. `--no-telemetry` was NOT passed.
|
|
8
|
+
* 2. `ALLSTAK_WIZARD_TELEMETRY` env var is NOT '0' / 'false' / 'off'.
|
|
9
|
+
* 3. A non-noop provider has been installed (see provider.ts).
|
|
10
|
+
*
|
|
11
|
+
* `--telemetry-debug` overrides the gate: it prints the payload to stderr
|
|
12
|
+
* but does NOT send (regardless of provider).
|
|
13
|
+
*/
|
|
14
|
+
export interface TelemetryRuntimeOptions {
|
|
15
|
+
/** From the global `--no-telemetry` flag. */
|
|
16
|
+
cliDisabled?: boolean;
|
|
17
|
+
/** From the global `--telemetry-debug` flag. */
|
|
18
|
+
debug?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function isTelemetryEnabled(opts: TelemetryRuntimeOptions): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Run-end telemetry hook. Always called from the orchestrator regardless of
|
|
23
|
+
* gate state — the gate decides whether the payload reaches the provider.
|
|
24
|
+
*/
|
|
25
|
+
export declare function emitRunTelemetry(inputs: PayloadInputs, opts?: TelemetryRuntimeOptions): Promise<void>;
|
|
26
|
+
/** Documentation hook — used in tests to assert the payload shape doesn't grow. */
|
|
27
|
+
export declare function listDocumentedPayloadFields(): readonly string[];
|
|
28
|
+
export type { TelemetryPayload, PayloadInputs };
|
|
29
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/telemetry/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAoB,MAAM,cAAc,CAAC;AAGzG;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,uBAAuB;IACtC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAOzE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,IAAI,SAAS,MAAM,EAAE,CAE/D;AAED,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { log } from '../util/log.js';
|
|
2
|
+
import { ensureInstallId, readInstallId } from './install-id.js';
|
|
3
|
+
import { buildPayload, documentedFields } from './payload.js';
|
|
4
|
+
import { getTelemetryProvider, safeEmit } from './provider.js';
|
|
5
|
+
export function isTelemetryEnabled(opts) {
|
|
6
|
+
if (opts.debug)
|
|
7
|
+
return false; // debug always replaces emit
|
|
8
|
+
if (opts.cliDisabled)
|
|
9
|
+
return false;
|
|
10
|
+
const env = (process.env.ALLSTAK_WIZARD_TELEMETRY ?? '').trim().toLowerCase();
|
|
11
|
+
if (env === '0' || env === 'false' || env === 'off' || env === 'no')
|
|
12
|
+
return false;
|
|
13
|
+
// Default: enabled — provider may still be `noopTelemetry`.
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Run-end telemetry hook. Always called from the orchestrator regardless of
|
|
18
|
+
* gate state — the gate decides whether the payload reaches the provider.
|
|
19
|
+
*/
|
|
20
|
+
export async function emitRunTelemetry(inputs, opts = {}) {
|
|
21
|
+
const enabled = isTelemetryEnabled(opts);
|
|
22
|
+
const installId = enabled ? ensureInstallId() : readInstallId();
|
|
23
|
+
const payload = buildPayload({ ...inputs, installId });
|
|
24
|
+
if (opts.debug) {
|
|
25
|
+
// Print to stderr (stdout is reserved for --json output of the command).
|
|
26
|
+
process.stderr.write(`[telemetry-debug] ${JSON.stringify(payload, null, 2)}\n`);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (!enabled) {
|
|
30
|
+
log.debug('telemetry: disabled, payload would have been sent');
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const provider = getTelemetryProvider();
|
|
34
|
+
if (provider.id === 'noop') {
|
|
35
|
+
log.debug('telemetry: provider=noop (no endpoint configured)');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
await safeEmit(provider, payload);
|
|
39
|
+
}
|
|
40
|
+
/** Documentation hook — used in tests to assert the payload shape doesn't grow. */
|
|
41
|
+
export function listDocumentedPayloadFields() {
|
|
42
|
+
return documentedFields;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/telemetry/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,YAAY,EAA6C,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAsB/D,MAAM,UAAU,kBAAkB,CAAC,IAA6B;IAC9D,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,6BAA6B;IAC3D,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9E,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAClF,4DAA4D;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAqB,EACrB,OAAgC,EAAE;IAElC,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAEvD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,yEAAyE;QACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,IAAI,QAAQ,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,2BAA2B;IACzC,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { SnapshotWriter } from '../snapshot/store.js';
|
|
2
|
+
export type SyntaxValidator = (path: string, content: string) => void | Promise<void>;
|
|
3
|
+
export interface TransactionOptions {
|
|
4
|
+
/** When true, all writes are recorded but never flushed to disk; rollback becomes a no-op. */
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
/** Project root, used to compute relative paths for diff output. */
|
|
7
|
+
cwd?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Optional persistent snapshot writer. When provided, every captured file
|
|
10
|
+
* pre-image is also forwarded to the writer so a backup directory is left on
|
|
11
|
+
* disk after the transaction commits. The writer is committed on success and
|
|
12
|
+
* aborted on rollback.
|
|
13
|
+
*/
|
|
14
|
+
snapshotWriter?: SnapshotWriter;
|
|
15
|
+
}
|
|
16
|
+
export interface PlannedDiff {
|
|
17
|
+
path: string;
|
|
18
|
+
before: string | null;
|
|
19
|
+
after: string;
|
|
20
|
+
kind: 'create' | 'modify' | 'delete';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Atomic file-mutation transaction. Every mutation is snapshotted before the write;
|
|
24
|
+
* on any failure (including a post-write syntax-validation failure) the entire
|
|
25
|
+
* transaction is rolled back in reverse order.
|
|
26
|
+
*
|
|
27
|
+
* Idempotency contract: callers writing into a file that already contains the same
|
|
28
|
+
* content should detect that and skip — Transaction does NOT dedupe writes for you.
|
|
29
|
+
*/
|
|
30
|
+
export declare class Transaction {
|
|
31
|
+
private readonly snapshots;
|
|
32
|
+
private readonly diffs;
|
|
33
|
+
private readonly written;
|
|
34
|
+
private readonly options;
|
|
35
|
+
private committed;
|
|
36
|
+
private rolledBack;
|
|
37
|
+
constructor(options?: TransactionOptions);
|
|
38
|
+
get dryRun(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Stage a write. Snapshots the file (if it exists) and writes the new content.
|
|
41
|
+
* Pass a syntax validator to fail-fast on broken output.
|
|
42
|
+
*/
|
|
43
|
+
write(filePath: string, content: string, validator?: SyntaxValidator): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Stage a deletion (with snapshot for restore on rollback).
|
|
46
|
+
*/
|
|
47
|
+
delete(filePath: string): Promise<void>;
|
|
48
|
+
commit(): Promise<void>;
|
|
49
|
+
rollback(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Run a unit of work inside this transaction. If the function throws, the transaction
|
|
52
|
+
* is rolled back and the original error is wrapped in TransactionAbortedError.
|
|
53
|
+
*/
|
|
54
|
+
run<T>(work: () => Promise<T> | T): Promise<T>;
|
|
55
|
+
describeDiffs(cwd?: string): string[];
|
|
56
|
+
get plannedDiffs(): readonly PlannedDiff[];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=tx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../src/transaction/tx.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ3D,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtF,MAAM,WAAW,kBAAkB;IACjC,8FAA8F;IAC9F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,GAAE,kBAAuB;IAI5C,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;OAGG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C1F;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAYvB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB/B;;;OAGG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYpD,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAerC,IAAI,YAAY,IAAI,SAAS,WAAW,EAAE,CAEzC;CACF"}
|