workos 0.2.1 → 0.3.2
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/.claude-plugin/plugin.json +3 -3
- package/README.md +3 -2
- package/dist/bin.js +42 -20
- package/dist/bin.js.map +1 -1
- package/dist/cli.config.d.ts +6 -3
- package/dist/cli.config.js +8 -3
- package/dist/cli.config.js.map +1 -1
- package/dist/commands/install-skill.js.map +1 -0
- package/dist/{src/commands → commands}/install.js +8 -12
- package/dist/commands/install.js.map +1 -0
- package/dist/{src/commands → commands}/login.js +3 -2
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/craft-pre-release.sh +10 -0
- package/dist/dashboard/components/AnimatedLogo.js.map +1 -0
- package/dist/dashboard/components/CompletionView.js.map +1 -0
- package/dist/dashboard/components/ConfirmPrompt.js.map +1 -0
- package/dist/dashboard/components/CredentialsForm.js.map +1 -0
- package/dist/dashboard/components/Dashboard.js.map +1 -0
- package/dist/{src/dashboard → dashboard}/components/DashboardLayout.d.ts +2 -2
- package/dist/dashboard/components/DashboardLayout.js.map +1 -0
- package/dist/{src/dashboard → dashboard}/components/DiffPanel.d.ts +2 -2
- package/dist/dashboard/components/DiffPanel.js.map +1 -0
- package/dist/dashboard/components/InlinePrompt.js.map +1 -0
- package/dist/{src/dashboard → dashboard}/components/OutputPanel.d.ts +2 -2
- package/dist/dashboard/components/OutputPanel.js.map +1 -0
- package/dist/dashboard/components/Panel.js.map +1 -0
- package/dist/dashboard/components/TextInput.js.map +1 -0
- package/dist/dashboard/components/WelcomeArt.js.map +1 -0
- package/dist/dashboard/hooks/useAnimation.js.map +1 -0
- package/dist/dashboard/hooks/useKeyboard.js.map +1 -0
- package/dist/dashboard/hooks/useTerminalSize.js.map +1 -0
- package/dist/{src/dashboard → dashboard}/index.d.ts +2 -2
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/lib/diff-utils.js.map +1 -0
- package/dist/dashboard/lib/logo-frames.js.map +1 -0
- package/dist/dashboard/lib/welcome-art.js.map +1 -0
- package/dist/dashboard/types.d.ts +5 -0
- package/dist/dashboard/types.js.map +1 -0
- package/dist/{src/lib → lib}/adapters/cli-adapter.d.ts +5 -5
- package/dist/{src/lib → lib}/adapters/cli-adapter.js +5 -5
- package/dist/lib/adapters/cli-adapter.js.map +1 -0
- package/dist/{src/lib → lib}/adapters/dashboard-adapter.d.ts +4 -4
- package/dist/lib/adapters/dashboard-adapter.js.map +1 -0
- package/dist/{src/lib → lib}/adapters/index.d.ts +1 -1
- package/dist/lib/adapters/index.js.map +1 -0
- package/dist/{src/lib → lib}/adapters/types.d.ts +4 -4
- package/dist/lib/adapters/types.js.map +1 -0
- package/dist/{src/lib → lib}/agent-interface.d.ts +15 -9
- package/dist/{src/lib → lib}/agent-interface.js +146 -61
- package/dist/lib/agent-interface.js.map +1 -0
- package/dist/{src/lib → lib}/agent-runner.d.ts +2 -2
- package/dist/{src/lib → lib}/agent-runner.js +4 -4
- package/dist/lib/agent-runner.js.map +1 -0
- package/dist/{src/lib → lib}/ai-content.d.ts +6 -2
- package/dist/lib/ai-content.js +130 -0
- package/dist/lib/ai-content.js.map +1 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/background-refresh.d.ts +29 -0
- package/dist/lib/background-refresh.js +95 -0
- package/dist/lib/background-refresh.js.map +1 -0
- package/dist/{src/lib → lib}/config.d.ts +6 -6
- package/dist/lib/config.js.map +1 -0
- package/dist/{src/lib → lib}/constants.d.ts +1 -1
- package/dist/{src/lib → lib}/constants.js +1 -1
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/credential-discovery.js.map +1 -0
- package/dist/lib/credential-proxy.d.ts +36 -0
- package/dist/lib/credential-proxy.js +298 -0
- package/dist/lib/credential-proxy.js.map +1 -0
- package/dist/{src/lib → lib}/credentials.d.ts +6 -0
- package/dist/{src/lib → lib}/credentials.js +33 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/{src/lib → lib}/device-auth.d.ts +1 -0
- package/dist/{src/lib → lib}/device-auth.js +2 -1
- package/dist/lib/device-auth.js.map +1 -0
- package/dist/lib/ensure-auth.d.ts +22 -0
- package/dist/lib/ensure-auth.js +83 -0
- package/dist/lib/ensure-auth.js.map +1 -0
- package/dist/lib/env-writer.js.map +1 -0
- package/dist/{src/lib → lib}/events.d.ts +8 -8
- package/dist/{src/lib → lib}/events.js +3 -3
- package/dist/{src/lib → lib}/events.js.map +1 -1
- package/dist/{src/lib → lib}/framework-config.d.ts +2 -2
- package/dist/{src/lib → lib}/framework-config.js +1 -1
- package/dist/lib/framework-config.js.map +1 -0
- package/dist/lib/helper-functions.js.map +1 -0
- package/dist/{src/lib/wizard-core.d.ts → lib/installer-core.d.ts} +21 -17
- package/dist/{src/lib/wizard-core.js → lib/installer-core.js} +19 -17
- package/dist/lib/installer-core.js.map +1 -0
- package/dist/{src/lib/wizard-core.types.d.ts → lib/installer-core.types.d.ts} +9 -9
- package/dist/lib/installer-core.types.js +2 -0
- package/dist/lib/installer-core.types.js.map +1 -0
- package/dist/lib/port-detection.js.map +1 -0
- package/dist/lib/post-install.js.map +1 -0
- package/dist/lib/progress-tracker.js.map +1 -0
- package/dist/lib/run-with-core.d.ts +2 -0
- package/dist/{src/lib → lib}/run-with-core.js +38 -48
- package/dist/lib/run-with-core.js.map +1 -0
- package/dist/lib/safe-tools.js.map +1 -0
- package/dist/{src/lib → lib}/settings.d.ts +3 -0
- package/dist/{src/lib → lib}/settings.js +1 -1
- package/dist/lib/settings.js.map +1 -0
- package/dist/lib/staging-api.js.map +1 -0
- package/dist/lib/token-refresh-client.d.ts +23 -0
- package/dist/lib/token-refresh-client.js +88 -0
- package/dist/lib/token-refresh-client.js.map +1 -0
- package/dist/{src/lib → lib}/token-refresh.js +1 -1
- package/dist/lib/token-refresh.js.map +1 -0
- package/dist/lib/validation/build-validator.js.map +1 -0
- package/dist/lib/validation/index.js.map +1 -0
- package/dist/lib/validation/types.js.map +1 -0
- package/dist/lib/validation/validator.js.map +1 -0
- package/dist/{src/lib → lib}/workos-management.js +3 -3
- package/dist/lib/workos-management.js.map +1 -0
- package/dist/nextjs/nextjs-installer-agent.d.ts +6 -0
- package/dist/{src/nextjs/nextjs-wizard-agent.js → nextjs/nextjs-installer-agent.js} +6 -6
- package/dist/nextjs/nextjs-installer-agent.js.map +1 -0
- package/dist/{src/nextjs → nextjs}/utils.d.ts +2 -2
- package/dist/nextjs/utils.js.map +1 -0
- package/dist/react/react-installer-agent.d.ts +2 -0
- package/dist/{src/react/react-wizard-agent.js → react/react-installer-agent.js} +4 -4
- package/dist/react/react-installer-agent.js.map +1 -0
- package/dist/react-router/react-router-installer-agent.d.ts +6 -0
- package/dist/{src/react-router/react-router-wizard-agent.js → react-router/react-router-installer-agent.js} +6 -6
- package/dist/react-router/react-router-installer-agent.js.map +1 -0
- package/dist/{src/react-router → react-router}/utils.d.ts +2 -2
- package/dist/react-router/utils.js.map +1 -0
- package/dist/{src/run.d.ts → run.d.ts} +2 -1
- package/dist/{src/run.js → run.js} +5 -4
- package/dist/run.js.map +1 -0
- package/dist/{src/steps → steps}/add-or-update-environment-variables.js +5 -5
- package/dist/steps/add-or-update-environment-variables.js.map +1 -0
- package/dist/steps/index.js.map +1 -0
- package/dist/{src/steps → steps}/run-prettier.d.ts +2 -2
- package/dist/{src/steps → steps}/run-prettier.js +1 -1
- package/dist/steps/run-prettier.js.map +1 -0
- package/dist/{src/steps → steps}/upload-environment-variables/EnvironmentProvider.d.ts +3 -3
- package/dist/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
- package/dist/{src/steps → steps}/upload-environment-variables/index.d.ts +2 -2
- package/dist/{src/steps → steps}/upload-environment-variables/index.js +3 -3
- package/dist/steps/upload-environment-variables/index.js.map +1 -0
- package/dist/{src/steps → steps}/upload-environment-variables/providers/vercel.d.ts +2 -2
- package/dist/steps/upload-environment-variables/providers/vercel.js.map +1 -0
- package/dist/tanstack-start/tanstack-start-installer-agent.d.ts +2 -0
- package/dist/{src/tanstack-start/tanstack-start-wizard-agent.js → tanstack-start/tanstack-start-installer-agent.js} +4 -4
- package/dist/tanstack-start/tanstack-start-installer-agent.js.map +1 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/{src/utils → utils}/analytics.js +8 -8
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/bash.js.map +1 -0
- package/dist/{src/utils → utils}/clack-utils.d.ts +9 -9
- package/dist/{src/utils → utils}/clack-utils.js +8 -8
- package/dist/utils/clack-utils.js.map +1 -0
- package/dist/utils/clack.js.map +1 -0
- package/dist/utils/cli-symbols.js.map +1 -0
- package/dist/{src/utils → utils}/debug.js +1 -1
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/env-parser.js.map +1 -0
- package/dist/utils/environment.d.ts +4 -0
- package/dist/{src/utils → utils}/environment.js +1 -1
- package/dist/utils/environment.js.map +1 -0
- package/dist/{src/utils → utils}/errors.js +1 -1
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/git-utils.js.map +1 -0
- package/dist/utils/logging.js.map +1 -0
- package/dist/utils/package-json.js.map +1 -0
- package/dist/{src/utils → utils}/package-manager.d.ts +4 -4
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/semver.js.map +1 -0
- package/dist/utils/string.js.map +1 -0
- package/dist/{src/utils → utils}/telemetry-client.js +6 -2
- package/dist/utils/telemetry-client.js.map +1 -0
- package/dist/{src/utils → utils}/telemetry-types.d.ts +5 -5
- package/dist/utils/telemetry-types.js +6 -0
- package/dist/utils/telemetry-types.js.map +1 -0
- package/dist/{src/utils → utils}/types.d.ts +7 -2
- package/dist/{src/utils → utils}/types.js.map +1 -1
- package/dist/utils/urls.js.map +1 -0
- package/dist/utils/vendor/is-unicorn-supported.js.map +1 -0
- package/dist/vanilla-js/vanilla-js-installer-agent.d.ts +2 -0
- package/dist/{src/vanilla-js/vanilla-js-wizard-agent.js → vanilla-js/vanilla-js-installer-agent.js} +4 -4
- package/dist/vanilla-js/vanilla-js-installer-agent.js.map +1 -0
- package/package.json +11 -7
- package/dist/src/commands/install-skill.js.map +0 -1
- package/dist/src/commands/install.js.map +0 -1
- package/dist/src/commands/login.js.map +0 -1
- package/dist/src/commands/logout.js.map +0 -1
- package/dist/src/dashboard/components/AnimatedLogo.js.map +0 -1
- package/dist/src/dashboard/components/CompletionView.js.map +0 -1
- package/dist/src/dashboard/components/ConfirmPrompt.js.map +0 -1
- package/dist/src/dashboard/components/CredentialsForm.js.map +0 -1
- package/dist/src/dashboard/components/Dashboard.js.map +0 -1
- package/dist/src/dashboard/components/DashboardLayout.js.map +0 -1
- package/dist/src/dashboard/components/DiffPanel.js.map +0 -1
- package/dist/src/dashboard/components/InlinePrompt.js.map +0 -1
- package/dist/src/dashboard/components/OutputPanel.js.map +0 -1
- package/dist/src/dashboard/components/Panel.js.map +0 -1
- package/dist/src/dashboard/components/TextInput.js.map +0 -1
- package/dist/src/dashboard/components/WelcomeArt.js.map +0 -1
- package/dist/src/dashboard/hooks/useAnimation.js.map +0 -1
- package/dist/src/dashboard/hooks/useKeyboard.js.map +0 -1
- package/dist/src/dashboard/hooks/useTerminalSize.js.map +0 -1
- package/dist/src/dashboard/index.js.map +0 -1
- package/dist/src/dashboard/lib/diff-utils.js.map +0 -1
- package/dist/src/dashboard/lib/logo-frames.js.map +0 -1
- package/dist/src/dashboard/lib/welcome-art.js.map +0 -1
- package/dist/src/dashboard/types.d.ts +0 -5
- package/dist/src/dashboard/types.js.map +0 -1
- package/dist/src/lib/__tests__/test-utils.d.ts +0 -40
- package/dist/src/lib/__tests__/test-utils.js +0 -108
- package/dist/src/lib/__tests__/test-utils.js.map +0 -1
- package/dist/src/lib/adapters/cli-adapter.js.map +0 -1
- package/dist/src/lib/adapters/dashboard-adapter.js.map +0 -1
- package/dist/src/lib/adapters/index.js.map +0 -1
- package/dist/src/lib/adapters/types.js.map +0 -1
- package/dist/src/lib/agent-interface.js.map +0 -1
- package/dist/src/lib/agent-runner.js.map +0 -1
- package/dist/src/lib/ai-content.js +0 -68
- package/dist/src/lib/ai-content.js.map +0 -1
- package/dist/src/lib/api.js.map +0 -1
- package/dist/src/lib/config.js.map +0 -1
- package/dist/src/lib/constants.js.map +0 -1
- package/dist/src/lib/credential-discovery.js.map +0 -1
- package/dist/src/lib/credentials.js.map +0 -1
- package/dist/src/lib/device-auth.js.map +0 -1
- package/dist/src/lib/env-writer.js.map +0 -1
- package/dist/src/lib/framework-config.js.map +0 -1
- package/dist/src/lib/helper-functions.js.map +0 -1
- package/dist/src/lib/port-detection.js.map +0 -1
- package/dist/src/lib/post-install.js.map +0 -1
- package/dist/src/lib/progress-tracker.js.map +0 -1
- package/dist/src/lib/run-with-core.d.ts +0 -2
- package/dist/src/lib/run-with-core.js.map +0 -1
- package/dist/src/lib/safe-tools.js.map +0 -1
- package/dist/src/lib/settings.js.map +0 -1
- package/dist/src/lib/staging-api.js.map +0 -1
- package/dist/src/lib/token-refresh.js.map +0 -1
- package/dist/src/lib/validation/build-validator.js.map +0 -1
- package/dist/src/lib/validation/index.js.map +0 -1
- package/dist/src/lib/validation/types.js.map +0 -1
- package/dist/src/lib/validation/validator.js.map +0 -1
- package/dist/src/lib/wizard-core.js.map +0 -1
- package/dist/src/lib/wizard-core.types.js +0 -2
- package/dist/src/lib/wizard-core.types.js.map +0 -1
- package/dist/src/lib/workos-management.js.map +0 -1
- package/dist/src/nextjs/nextjs-wizard-agent.d.ts +0 -6
- package/dist/src/nextjs/nextjs-wizard-agent.js.map +0 -1
- package/dist/src/nextjs/utils.js.map +0 -1
- package/dist/src/react/react-wizard-agent.d.ts +0 -2
- package/dist/src/react/react-wizard-agent.js.map +0 -1
- package/dist/src/react-router/react-router-wizard-agent.d.ts +0 -6
- package/dist/src/react-router/react-router-wizard-agent.js.map +0 -1
- package/dist/src/react-router/utils.js.map +0 -1
- package/dist/src/run.js.map +0 -1
- package/dist/src/steps/add-or-update-environment-variables.js.map +0 -1
- package/dist/src/steps/index.js.map +0 -1
- package/dist/src/steps/run-prettier.js.map +0 -1
- package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +0 -1
- package/dist/src/steps/upload-environment-variables/index.js.map +0 -1
- package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +0 -1
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +0 -2
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +0 -1
- package/dist/src/telemetry.js.map +0 -1
- package/dist/src/utils/analytics.js.map +0 -1
- package/dist/src/utils/bash.js.map +0 -1
- package/dist/src/utils/clack-utils.js.map +0 -1
- package/dist/src/utils/clack.js.map +0 -1
- package/dist/src/utils/cli-symbols.js.map +0 -1
- package/dist/src/utils/debug.js.map +0 -1
- package/dist/src/utils/env-parser.js.map +0 -1
- package/dist/src/utils/environment.d.ts +0 -4
- package/dist/src/utils/environment.js.map +0 -1
- package/dist/src/utils/errors.js.map +0 -1
- package/dist/src/utils/git-utils.js.map +0 -1
- package/dist/src/utils/logging.js.map +0 -1
- package/dist/src/utils/package-json.js.map +0 -1
- package/dist/src/utils/package-manager.js.map +0 -1
- package/dist/src/utils/redact.js.map +0 -1
- package/dist/src/utils/semver.js.map +0 -1
- package/dist/src/utils/string.js.map +0 -1
- package/dist/src/utils/telemetry-client.js.map +0 -1
- package/dist/src/utils/telemetry-types.js +0 -6
- package/dist/src/utils/telemetry-types.js.map +0 -1
- package/dist/src/utils/urls.js.map +0 -1
- package/dist/src/utils/vendor/is-unicorn-supported.js.map +0 -1
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +0 -2
- package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +0 -1
- package/dist/src/version.d.ts +0 -1
- package/dist/src/version.js +0 -2
- package/dist/src/version.js.map +0 -1
- /package/dist/{src/commands → commands}/install-skill.d.ts +0 -0
- /package/dist/{src/commands → commands}/install-skill.js +0 -0
- /package/dist/{src/commands → commands}/install.d.ts +0 -0
- /package/dist/{src/commands → commands}/login.d.ts +0 -0
- /package/dist/{src/commands → commands}/logout.d.ts +0 -0
- /package/dist/{src/commands → commands}/logout.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/AnimatedLogo.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/AnimatedLogo.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/CompletionView.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/CompletionView.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/ConfirmPrompt.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/ConfirmPrompt.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/CredentialsForm.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/CredentialsForm.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/Dashboard.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/Dashboard.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/DashboardLayout.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/DiffPanel.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/InlinePrompt.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/InlinePrompt.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/OutputPanel.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/Panel.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/Panel.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/TextInput.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/TextInput.js +0 -0
- /package/dist/{src/dashboard → dashboard}/components/WelcomeArt.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/components/WelcomeArt.js +0 -0
- /package/dist/{src/dashboard → dashboard}/hooks/useAnimation.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/hooks/useAnimation.js +0 -0
- /package/dist/{src/dashboard → dashboard}/hooks/useKeyboard.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/hooks/useKeyboard.js +0 -0
- /package/dist/{src/dashboard → dashboard}/hooks/useTerminalSize.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/hooks/useTerminalSize.js +0 -0
- /package/dist/{src/dashboard → dashboard}/index.js +0 -0
- /package/dist/{src/dashboard → dashboard}/lib/diff-utils.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/lib/diff-utils.js +0 -0
- /package/dist/{src/dashboard → dashboard}/lib/logo-frames.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/lib/logo-frames.js +0 -0
- /package/dist/{src/dashboard → dashboard}/lib/welcome-art.d.ts +0 -0
- /package/dist/{src/dashboard → dashboard}/lib/welcome-art.js +0 -0
- /package/dist/{src/dashboard → dashboard}/types.js +0 -0
- /package/dist/{src/lib → lib}/adapters/dashboard-adapter.js +0 -0
- /package/dist/{src/lib → lib}/adapters/index.js +0 -0
- /package/dist/{src/lib → lib}/adapters/types.js +0 -0
- /package/dist/{src/lib → lib}/api.d.ts +0 -0
- /package/dist/{src/lib → lib}/api.js +0 -0
- /package/dist/{src/lib → lib}/config.js +0 -0
- /package/dist/{src/lib → lib}/credential-discovery.d.ts +0 -0
- /package/dist/{src/lib → lib}/credential-discovery.js +0 -0
- /package/dist/{src/lib → lib}/env-writer.d.ts +0 -0
- /package/dist/{src/lib → lib}/env-writer.js +0 -0
- /package/dist/{src/lib → lib}/helper-functions.d.ts +0 -0
- /package/dist/{src/lib → lib}/helper-functions.js +0 -0
- /package/dist/{src/lib → lib}/port-detection.d.ts +0 -0
- /package/dist/{src/lib → lib}/port-detection.js +0 -0
- /package/dist/{src/lib → lib}/post-install.d.ts +0 -0
- /package/dist/{src/lib → lib}/post-install.js +0 -0
- /package/dist/{src/lib → lib}/progress-tracker.d.ts +0 -0
- /package/dist/{src/lib → lib}/progress-tracker.js +0 -0
- /package/dist/{src/lib → lib}/safe-tools.d.ts +0 -0
- /package/dist/{src/lib → lib}/safe-tools.js +0 -0
- /package/dist/{src/lib → lib}/staging-api.d.ts +0 -0
- /package/dist/{src/lib → lib}/staging-api.js +0 -0
- /package/dist/{src/lib → lib}/token-refresh.d.ts +0 -0
- /package/dist/{src/lib → lib}/validation/build-validator.d.ts +0 -0
- /package/dist/{src/lib → lib}/validation/build-validator.js +0 -0
- /package/dist/{src/lib → lib}/validation/index.d.ts +0 -0
- /package/dist/{src/lib → lib}/validation/index.js +0 -0
- /package/dist/{src/lib → lib}/validation/types.d.ts +0 -0
- /package/dist/{src/lib → lib}/validation/types.js +0 -0
- /package/dist/{src/lib → lib}/validation/validator.d.ts +0 -0
- /package/dist/{src/lib → lib}/validation/validator.js +0 -0
- /package/dist/{src/lib → lib}/workos-management.d.ts +0 -0
- /package/dist/{src/nextjs → nextjs}/utils.js +0 -0
- /package/dist/{src/react-router → react-router}/utils.js +0 -0
- /package/dist/{src/steps → steps}/add-or-update-environment-variables.d.ts +0 -0
- /package/dist/{src/steps → steps}/index.d.ts +0 -0
- /package/dist/{src/steps → steps}/index.js +0 -0
- /package/dist/{src/steps → steps}/upload-environment-variables/EnvironmentProvider.js +0 -0
- /package/dist/{src/steps → steps}/upload-environment-variables/providers/vercel.js +0 -0
- /package/dist/{src/telemetry.d.ts → telemetry.d.ts} +0 -0
- /package/dist/{src/telemetry.js → telemetry.js} +0 -0
- /package/dist/{src/utils → utils}/analytics.d.ts +0 -0
- /package/dist/{src/utils → utils}/bash.d.ts +0 -0
- /package/dist/{src/utils → utils}/bash.js +0 -0
- /package/dist/{src/utils → utils}/clack.d.ts +0 -0
- /package/dist/{src/utils → utils}/clack.js +0 -0
- /package/dist/{src/utils → utils}/cli-symbols.d.ts +0 -0
- /package/dist/{src/utils → utils}/cli-symbols.js +0 -0
- /package/dist/{src/utils → utils}/debug.d.ts +0 -0
- /package/dist/{src/utils → utils}/env-parser.d.ts +0 -0
- /package/dist/{src/utils → utils}/env-parser.js +0 -0
- /package/dist/{src/utils → utils}/errors.d.ts +0 -0
- /package/dist/{src/utils → utils}/git-utils.d.ts +0 -0
- /package/dist/{src/utils → utils}/git-utils.js +0 -0
- /package/dist/{src/utils → utils}/logging.d.ts +0 -0
- /package/dist/{src/utils → utils}/logging.js +0 -0
- /package/dist/{src/utils → utils}/package-json.d.ts +0 -0
- /package/dist/{src/utils → utils}/package-json.js +0 -0
- /package/dist/{src/utils → utils}/package-manager.js +0 -0
- /package/dist/{src/utils → utils}/redact.d.ts +0 -0
- /package/dist/{src/utils → utils}/redact.js +0 -0
- /package/dist/{src/utils → utils}/semver.d.ts +0 -0
- /package/dist/{src/utils → utils}/semver.js +0 -0
- /package/dist/{src/utils → utils}/string.d.ts +0 -0
- /package/dist/{src/utils → utils}/string.js +0 -0
- /package/dist/{src/utils → utils}/telemetry-client.d.ts +0 -0
- /package/dist/{src/utils → utils}/types.js +0 -0
- /package/dist/{src/utils → utils}/urls.d.ts +0 -0
- /package/dist/{src/utils → utils}/urls.js +0 -0
- /package/dist/{src/utils → utils}/vendor/is-unicorn-supported.d.ts +0 -0
- /package/dist/{src/utils → utils}/vendor/is-unicorn-supported.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/lib/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAuFtC,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IACrD,IAAI,CAA+B,KAAQ,EAAE,OAA2B;QACtE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,EAAE,CAA+B,KAAQ,EAAE,QAA+C;QACxF,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAA+B,KAAQ,EAAE,QAA+C;QACzF,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAA+B,KAAQ,EAAE,QAA+C;QAC1F,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,IAAI,qBAAqB,EAAE,CAAC;AACrC,CAAC","sourcesContent":["import { EventEmitter } from 'events';\n\nexport interface InstallerEvents {\n status: { message: string };\n output: { text: string; isError?: boolean };\n 'file:write': { path: string; content: string };\n 'file:edit': { path: string; oldContent: string; newContent: string };\n 'prompt:request': { id: string; message: string; options?: string[] };\n 'prompt:response': { id: string; value: string };\n 'confirm:request': { id: string; message: string; warning?: string; files?: string[] };\n 'confirm:response': { id: string; confirmed: boolean };\n 'credentials:request': { requiresApiKey: boolean };\n 'credentials:response': { apiKey: string; clientId: string };\n complete: { success: boolean; summary?: string };\n error: { message: string; stack?: string };\n\n 'state:enter': { state: string };\n 'state:exit': { state: string };\n 'auth:checking': Record<string, never>;\n 'auth:required': Record<string, never>;\n 'auth:success': Record<string, never>;\n 'auth:failure': { message: string };\n 'detection:start': Record<string, never>;\n 'detection:complete': { integration: string };\n 'detection:none': Record<string, never>;\n 'git:checking': Record<string, never>;\n 'git:clean': Record<string, never>;\n 'git:dirty': { files: string[] };\n 'git:dirty:confirmed': Record<string, never>;\n 'git:dirty:cancelled': Record<string, never>;\n 'credentials:gathering': { requiresApiKey: boolean };\n 'credentials:found': Record<string, never>;\n // Credential discovery events\n 'credentials:env:detected': { files: string[] };\n 'credentials:env:prompt': { files: string[] };\n 'credentials:env:scanning': Record<string, never>;\n 'credentials:env:found': { sourcePath: string };\n 'credentials:env:notfound': Record<string, never>;\n // Device auth events\n 'device:started': { verificationUri: string; verificationUriComplete: string; userCode: string };\n 'device:polling': Record<string, never>;\n 'device:success': { email?: string };\n 'device:timeout': Record<string, never>;\n 'device:error': { message: string };\n // Staging API events\n 'staging:fetching': Record<string, never>;\n 'staging:success': Record<string, never>;\n 'staging:error': { message: string; statusCode?: number };\n 'config:start': Record<string, never>;\n 'config:complete': Record<string, never>;\n 'agent:start': Record<string, never>;\n 'agent:progress': { step: string; detail?: string };\n 'agent:success': { summary?: string };\n 'agent:failure': { message: string; stack?: string };\n\n 'validation:start': { framework: string };\n 'validation:issues': { issues: import('./validation/types.js').ValidationIssue[] };\n 'validation:complete': { passed: boolean; issueCount: number; durationMs: number };\n\n // Branch check events\n 'branch:checking': Record<string, never>;\n 'branch:protected': { branch: string };\n 'branch:prompt': { branch: string };\n 'branch:created': { branch: string };\n 'branch:create:failed': { error: string };\n 'branch:skipped': Record<string, never>;\n\n // Post-install events\n 'postinstall:changes': { files: string[] };\n 'postinstall:nochanges': Record<string, never>;\n 'postinstall:commit:prompt': Record<string, never>;\n 'postinstall:commit:generating': Record<string, never>;\n 'postinstall:commit:committing': { message: string };\n 'postinstall:commit:success': { message: string };\n 'postinstall:commit:failed': { error: string };\n 'postinstall:pr:prompt': Record<string, never>;\n 'postinstall:pr:generating': Record<string, never>;\n 'postinstall:pr:pushing': Record<string, never>;\n 'postinstall:pr:creating': Record<string, never>;\n 'postinstall:pr:success': { url: string };\n 'postinstall:pr:failed': { error: string };\n 'postinstall:push:failed': { error: string };\n 'postinstall:manual': { instructions: string };\n}\n\nexport type InstallerEventName = keyof InstallerEvents;\n\nexport class InstallerEventEmitter extends EventEmitter {\n emit<K extends InstallerEventName>(event: K, payload: InstallerEvents[K]): boolean {\n return super.emit(event, payload);\n }\n\n on<K extends InstallerEventName>(event: K, listener: (payload: InstallerEvents[K]) => void): this {\n return super.on(event, listener);\n }\n\n off<K extends InstallerEventName>(event: K, listener: (payload: InstallerEvents[K]) => void): this {\n return super.off(event, listener);\n }\n\n once<K extends InstallerEventName>(event: K, listener: (payload: InstallerEvents[K]) => void): this {\n return super.once(event, listener);\n }\n}\n\nexport function createInstallerEventEmitter(): InstallerEventEmitter {\n return new InstallerEventEmitter();\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Integration } from './constants.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { InstallerOptions } from '../utils/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Configuration interface for framework-specific agent integrations.
|
|
5
5
|
* Each framework exports a FrameworkConfig that the universal runner uses.
|
|
@@ -32,7 +32,7 @@ export interface FrameworkMetadata {
|
|
|
32
32
|
* For Next.js: detects router type
|
|
33
33
|
* For React Native: detects Expo vs bare
|
|
34
34
|
*/
|
|
35
|
-
gatherContext?: (options:
|
|
35
|
+
gatherContext?: (options: InstallerOptions) => Promise<Record<string, any>>;
|
|
36
36
|
/**
|
|
37
37
|
* Name of the framework-specific skill for agent integration.
|
|
38
38
|
* Skills are located in .claude/skills/{skillName}/SKILL.md
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Generate welcome message from framework name
|
|
3
3
|
*/
|
|
4
4
|
export function getWelcomeMessage(frameworkName) {
|
|
5
|
-
return `WorkOS AuthKit ${frameworkName}
|
|
5
|
+
return `WorkOS AuthKit ${frameworkName} installer (agent-powered)`;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Shared spinner message for all frameworks
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-config.js","sourceRoot":"","sources":["../../src/lib/framework-config.ts"],"names":[],"mappings":"AAyHA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAqB;IACrD,OAAO,kBAAkB,aAAa,4BAA4B,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,iFAAiF,CAAC","sourcesContent":["import type { Integration } from './constants.js';\nimport type { InstallerOptions } from '../utils/types.js';\n\n/**\n * Configuration interface for framework-specific agent integrations.\n * Each framework exports a FrameworkConfig that the universal runner uses.\n */\nexport interface FrameworkConfig {\n metadata: FrameworkMetadata;\n detection: FrameworkDetection;\n environment: EnvironmentConfig;\n analytics: AnalyticsConfig;\n prompts: PromptConfig;\n ui: UIConfig;\n}\n\n/**\n * Basic framework information and documentation\n */\nexport interface FrameworkMetadata {\n /** Display name (e.g., \"Next.js\", \"React\") */\n name: string;\n\n /** Integration type from constants */\n integration: Integration;\n\n /** URL to framework-specific WorkOS AuthKit docs */\n docsUrl: string;\n\n /**\n * Optional URL to docs for users with unsupported framework versions.\n * If not provided, defaults to docsUrl.\n */\n unsupportedVersionDocsUrl?: string;\n\n /**\n * Optional function to gather framework-specific context before agent runs.\n * For Next.js: detects router type\n * For React Native: detects Expo vs bare\n */\n gatherContext?: (options: InstallerOptions) => Promise<Record<string, any>>;\n\n /**\n * Name of the framework-specific skill for agent integration.\n * Skills are located in .claude/skills/{skillName}/SKILL.md\n * Will be populated per-framework in Phase 3.\n */\n skillName?: string;\n}\n\n/**\n * Framework detection and version handling\n */\nexport interface FrameworkDetection {\n /** Package name to check in package.json (e.g., \"next\", \"react\") */\n packageName: string;\n\n /** Human-readable name for error messages (e.g., \"Next.js\") */\n packageDisplayName: string;\n\n /** Extract version from package.json */\n getVersion: (packageJson: any) => string | undefined;\n\n /** Optional: Convert version to analytics bucket (e.g., \"15.x\") */\n getVersionBucket?: (version: string) => string;\n}\n\n/**\n * Environment variable configuration\n */\nexport interface EnvironmentConfig {\n /** Whether to upload env vars to hosting providers post-agent */\n uploadToHosting: boolean;\n\n /** Whether this framework requires API key (false for client-only SDKs) */\n requiresApiKey: boolean;\n\n /**\n * Build the environment variables object for this framework.\n * Returns the exact variable names and values to upload to hosting providers.\n */\n getEnvVars: (apiKey: string, clientId: string) => Record<string, string>;\n}\n\n/**\n * Analytics configuration\n */\nexport interface AnalyticsConfig {\n /** Generate tags from context (e.g., { 'nextjs-version': '15.x', 'router': 'app' }) */\n getTags: (context: any) => Record<string, any>;\n\n /** Optional: Additional event properties */\n getEventProperties?: (context: any) => Record<string, any>;\n}\n\n/**\n * Prompt configuration\n */\nexport interface PromptConfig {\n /**\n * Optional: Additional context lines to append to base prompt\n * For Next.js: \"- Router: app\"\n * For React Native: \"- Platform: Expo\"\n */\n getAdditionalContextLines?: (context: any) => string[];\n}\n\n/**\n * UI messaging configuration\n */\nexport interface UIConfig {\n /** Success message when agent completes */\n successMessage: string;\n\n /** Generate \"What the agent did\" bullets from context */\n getOutroChanges: (context: any) => string[];\n\n /** Generate \"Next steps\" bullets from context */\n getOutroNextSteps: (context: any) => string[];\n}\n\n/**\n * Generate welcome message from framework name\n */\nexport function getWelcomeMessage(frameworkName: string): string {\n return `WorkOS AuthKit ${frameworkName} installer (agent-powered)`;\n}\n\n/**\n * Shared spinner message for all frameworks\n */\nexport const SPINNER_MESSAGE = 'Setting up WorkOS AuthKit with login, authentication, and session management...';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-functions.js","sourceRoot":"","sources":["../../src/lib/helper-functions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC","sourcesContent":["export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type ActorRefFrom } from 'xstate';
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
2
|
+
import type { InstallerMachineContext, InstallerMachineInput, DetectionOutput, GitCheckOutput, AgentOutput, EnvFileInfo, DiscoveryResult, BranchCheckOutput } from './installer-core.types.js';
|
|
3
|
+
import type { InstallerOptions } from '../utils/types.js';
|
|
4
4
|
import type { DeviceAuthResult, DeviceAuthResponse } from './device-auth.js';
|
|
5
5
|
import type { StagingCredentials } from './staging-api.js';
|
|
6
|
-
export declare const
|
|
6
|
+
export declare const installerMachine: import("xstate").StateMachine<InstallerMachineContext, {
|
|
7
7
|
type: "START";
|
|
8
8
|
} | {
|
|
9
9
|
type: "SKIP_AUTH";
|
|
@@ -39,15 +39,15 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
39
39
|
type: "PR_DECLINED";
|
|
40
40
|
}, {
|
|
41
41
|
[x: string]: import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<boolean, {
|
|
42
|
-
options:
|
|
42
|
+
options: InstallerOptions;
|
|
43
43
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<DetectionOutput, {
|
|
44
|
-
options:
|
|
44
|
+
options: InstallerOptions;
|
|
45
45
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<GitCheckOutput, {
|
|
46
46
|
installDir: string;
|
|
47
47
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<void, {
|
|
48
|
-
context:
|
|
48
|
+
context: InstallerMachineContext;
|
|
49
49
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<AgentOutput, {
|
|
50
|
-
context:
|
|
50
|
+
context: InstallerMachineContext;
|
|
51
51
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<EnvFileInfo, {
|
|
52
52
|
installDir: string;
|
|
53
53
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<DiscoveryResult, {
|
|
@@ -56,7 +56,7 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
56
56
|
result: DeviceAuthResult;
|
|
57
57
|
deviceAuth: DeviceAuthResponse;
|
|
58
58
|
}, {
|
|
59
|
-
emitter:
|
|
59
|
+
emitter: InstallerMachineContext["emitter"];
|
|
60
60
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<StagingCredentials, void, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<BranchCheckOutput, void, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<{
|
|
61
61
|
branch: string;
|
|
62
62
|
}, {
|
|
@@ -68,6 +68,7 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
68
68
|
}, void, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<string, {
|
|
69
69
|
integration: string;
|
|
70
70
|
files: string[];
|
|
71
|
+
direct?: boolean;
|
|
71
72
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<void, {
|
|
72
73
|
message: string;
|
|
73
74
|
cwd: string;
|
|
@@ -75,6 +76,7 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
75
76
|
integration: string;
|
|
76
77
|
files: string[];
|
|
77
78
|
commitMessage: string;
|
|
79
|
+
direct?: boolean;
|
|
78
80
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<void, {
|
|
79
81
|
cwd: string;
|
|
80
82
|
}, import("xstate").EventObject>> | import("xstate").ActorRefFromLogic<import("xstate").PromiseActorLogic<string, {
|
|
@@ -85,13 +87,13 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
85
87
|
}, {
|
|
86
88
|
src: "checkAuthentication";
|
|
87
89
|
logic: import("xstate").PromiseActorLogic<boolean, {
|
|
88
|
-
options:
|
|
90
|
+
options: InstallerOptions;
|
|
89
91
|
}, import("xstate").EventObject>;
|
|
90
92
|
id: string | undefined;
|
|
91
93
|
} | {
|
|
92
94
|
src: "detectIntegration";
|
|
93
95
|
logic: import("xstate").PromiseActorLogic<DetectionOutput, {
|
|
94
|
-
options:
|
|
96
|
+
options: InstallerOptions;
|
|
95
97
|
}, import("xstate").EventObject>;
|
|
96
98
|
id: string | undefined;
|
|
97
99
|
} | {
|
|
@@ -103,13 +105,13 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
103
105
|
} | {
|
|
104
106
|
src: "configureEnvironment";
|
|
105
107
|
logic: import("xstate").PromiseActorLogic<void, {
|
|
106
|
-
context:
|
|
108
|
+
context: InstallerMachineContext;
|
|
107
109
|
}, import("xstate").EventObject>;
|
|
108
110
|
id: string | undefined;
|
|
109
111
|
} | {
|
|
110
112
|
src: "runAgent";
|
|
111
113
|
logic: import("xstate").PromiseActorLogic<AgentOutput, {
|
|
112
|
-
context:
|
|
114
|
+
context: InstallerMachineContext;
|
|
113
115
|
}, import("xstate").EventObject>;
|
|
114
116
|
id: string | undefined;
|
|
115
117
|
} | {
|
|
@@ -134,7 +136,7 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
134
136
|
result: DeviceAuthResult;
|
|
135
137
|
deviceAuth: DeviceAuthResponse;
|
|
136
138
|
}, {
|
|
137
|
-
emitter:
|
|
139
|
+
emitter: InstallerMachineContext["emitter"];
|
|
138
140
|
}, import("xstate").EventObject>;
|
|
139
141
|
id: string | undefined;
|
|
140
142
|
} | {
|
|
@@ -166,6 +168,7 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
166
168
|
logic: import("xstate").PromiseActorLogic<string, {
|
|
167
169
|
integration: string;
|
|
168
170
|
files: string[];
|
|
171
|
+
direct?: boolean;
|
|
169
172
|
}, import("xstate").EventObject>;
|
|
170
173
|
id: string | undefined;
|
|
171
174
|
} | {
|
|
@@ -181,6 +184,7 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
181
184
|
integration: string;
|
|
182
185
|
files: string[];
|
|
183
186
|
commitMessage: string;
|
|
187
|
+
direct?: boolean;
|
|
184
188
|
}, import("xstate").EventObject>;
|
|
185
189
|
id: string | undefined;
|
|
186
190
|
} | {
|
|
@@ -422,8 +426,8 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
422
426
|
gatheringCredentials: "checkingCliFlags" | "detectingEnvFiles" | "promptingEnvScan" | "checkingStoredAuth" | "scanningEnvFiles" | "fetchingStagingCredentials" | "runningDeviceAuth" | "promptingManual";
|
|
423
427
|
} | {
|
|
424
428
|
postInstall: "done" | "checking" | "detectingChanges" | "promptingCommit" | "generatingCommitMessage" | "committing" | "checkingGhCli" | "promptingPr" | "showingManualInstructions" | "generatingPrDescription" | "pushing" | "creatingPr";
|
|
425
|
-
}, string,
|
|
426
|
-
id: "
|
|
429
|
+
}, string, InstallerMachineInput, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
|
|
430
|
+
id: "installer";
|
|
427
431
|
states: {
|
|
428
432
|
readonly idle: {};
|
|
429
433
|
readonly authenticating: {};
|
|
@@ -488,5 +492,5 @@ export declare const wizardMachine: import("xstate").StateMachine<WizardMachineC
|
|
|
488
492
|
readonly error: {};
|
|
489
493
|
};
|
|
490
494
|
}>;
|
|
491
|
-
export type
|
|
492
|
-
export type
|
|
495
|
+
export type InstallerMachine = typeof installerMachine;
|
|
496
|
+
export type InstallerActor = ActorRefFrom<typeof installerMachine>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { setup, assign, fromPromise } from 'xstate';
|
|
2
2
|
import { getManualPrInstructions } from './post-install.js';
|
|
3
3
|
import { hasGhCli } from '../utils/git-utils.js';
|
|
4
|
-
export const
|
|
4
|
+
export const installerMachine = setup({
|
|
5
5
|
types: {
|
|
6
6
|
context: {},
|
|
7
7
|
input: {},
|
|
@@ -142,7 +142,7 @@ export const wizardMachine = setup({
|
|
|
142
142
|
const message = context.error?.message ?? 'Agent execution failed';
|
|
143
143
|
const stack = context.error?.stack;
|
|
144
144
|
context.emitter.emit('agent:failure', { message, stack });
|
|
145
|
-
context.emitter.emit('complete', { success: false
|
|
145
|
+
context.emitter.emit('complete', { success: false });
|
|
146
146
|
},
|
|
147
147
|
assignDetectionResult: assign({
|
|
148
148
|
integration: ({ event }) => {
|
|
@@ -180,12 +180,12 @@ export const wizardMachine = setup({
|
|
|
180
180
|
},
|
|
181
181
|
}),
|
|
182
182
|
emitCancelled: ({ context }) => {
|
|
183
|
-
context.emitter.emit('complete', { success: false, summary: '
|
|
183
|
+
context.emitter.emit('complete', { success: false, summary: 'Installer cancelled by user' });
|
|
184
184
|
},
|
|
185
185
|
emitError: ({ context }) => {
|
|
186
186
|
const message = context.error?.message ?? 'An unexpected error occurred';
|
|
187
187
|
context.emitter.emit('error', { message, stack: context.error?.stack });
|
|
188
|
-
context.emitter.emit('complete', { success: false
|
|
188
|
+
context.emitter.emit('complete', { success: false });
|
|
189
189
|
},
|
|
190
190
|
// Post-install actions
|
|
191
191
|
assignChangedFiles: assign({
|
|
@@ -335,7 +335,7 @@ export const wizardMachine = setup({
|
|
|
335
335
|
}),
|
|
336
336
|
},
|
|
337
337
|
}).createMachine({
|
|
338
|
-
id: '
|
|
338
|
+
id: 'installer',
|
|
339
339
|
initial: 'idle',
|
|
340
340
|
context: ({ input }) => ({
|
|
341
341
|
emitter: input.emitter,
|
|
@@ -457,7 +457,7 @@ export const wizardMachine = setup({
|
|
|
457
457
|
actions: ['emitGitConfirmed'],
|
|
458
458
|
},
|
|
459
459
|
GIT_CANCELLED: {
|
|
460
|
-
target: '#
|
|
460
|
+
target: '#installer.cancelled',
|
|
461
461
|
actions: ['emitGitCancelled'],
|
|
462
462
|
},
|
|
463
463
|
},
|
|
@@ -501,7 +501,7 @@ export const wizardMachine = setup({
|
|
|
501
501
|
target: 'done',
|
|
502
502
|
},
|
|
503
503
|
BRANCH_CANCEL: {
|
|
504
|
-
target: '#
|
|
504
|
+
target: '#installer.cancelled',
|
|
505
505
|
},
|
|
506
506
|
},
|
|
507
507
|
},
|
|
@@ -558,7 +558,7 @@ export const wizardMachine = setup({
|
|
|
558
558
|
checkingCliFlags: {
|
|
559
559
|
always: [
|
|
560
560
|
{
|
|
561
|
-
target: '#
|
|
561
|
+
target: '#installer.configuring',
|
|
562
562
|
guard: 'hasCredentials',
|
|
563
563
|
actions: [
|
|
564
564
|
assign({ credentialSource: () => 'cli' }),
|
|
@@ -612,7 +612,7 @@ export const wizardMachine = setup({
|
|
|
612
612
|
actions: assign({ envScanConsent: () => false }),
|
|
613
613
|
},
|
|
614
614
|
CANCEL: {
|
|
615
|
-
target: '#
|
|
615
|
+
target: '#installer.cancelled',
|
|
616
616
|
actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },
|
|
617
617
|
},
|
|
618
618
|
},
|
|
@@ -626,7 +626,7 @@ export const wizardMachine = setup({
|
|
|
626
626
|
input: ({ context }) => ({ installDir: context.options.installDir }),
|
|
627
627
|
onDone: [
|
|
628
628
|
{
|
|
629
|
-
target: '#
|
|
629
|
+
target: '#installer.configuring',
|
|
630
630
|
guard: ({ event }) => {
|
|
631
631
|
const result = event.output;
|
|
632
632
|
return result.found && !!result.clientId;
|
|
@@ -707,7 +707,7 @@ export const wizardMachine = setup({
|
|
|
707
707
|
id: 'fetchStagingCredentials',
|
|
708
708
|
src: 'fetchStagingCredentials',
|
|
709
709
|
onDone: {
|
|
710
|
-
target: '#
|
|
710
|
+
target: '#installer.configuring',
|
|
711
711
|
actions: [
|
|
712
712
|
assign({
|
|
713
713
|
credentials: ({ event }) => {
|
|
@@ -731,7 +731,7 @@ export const wizardMachine = setup({
|
|
|
731
731
|
entry: ['emitCredentialsGathering'],
|
|
732
732
|
on: {
|
|
733
733
|
CREDENTIALS_SUBMITTED: {
|
|
734
|
-
target: '#
|
|
734
|
+
target: '#installer.configuring',
|
|
735
735
|
actions: [
|
|
736
736
|
'assignCredentials',
|
|
737
737
|
assign({ credentialSource: () => 'manual' }),
|
|
@@ -742,7 +742,7 @@ export const wizardMachine = setup({
|
|
|
742
742
|
target: 'runningDeviceAuth',
|
|
743
743
|
},
|
|
744
744
|
CANCEL: {
|
|
745
|
-
target: '#
|
|
745
|
+
target: '#installer.cancelled',
|
|
746
746
|
actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },
|
|
747
747
|
},
|
|
748
748
|
},
|
|
@@ -824,7 +824,7 @@ export const wizardMachine = setup({
|
|
|
824
824
|
checking: {
|
|
825
825
|
always: [
|
|
826
826
|
{
|
|
827
|
-
target: '#
|
|
827
|
+
target: '#installer.complete',
|
|
828
828
|
guard: 'shouldSkipPostInstall',
|
|
829
829
|
},
|
|
830
830
|
{ target: 'detectingChanges' },
|
|
@@ -853,7 +853,7 @@ export const wizardMachine = setup({
|
|
|
853
853
|
on: {
|
|
854
854
|
COMMIT_APPROVED: { target: 'generatingCommitMessage' },
|
|
855
855
|
COMMIT_DECLINED: { target: 'done' },
|
|
856
|
-
CANCEL: { target: '#
|
|
856
|
+
CANCEL: { target: '#installer.cancelled' },
|
|
857
857
|
},
|
|
858
858
|
},
|
|
859
859
|
generatingCommitMessage: {
|
|
@@ -864,6 +864,7 @@ export const wizardMachine = setup({
|
|
|
864
864
|
input: ({ context }) => ({
|
|
865
865
|
integration: context.integration ?? 'project',
|
|
866
866
|
files: context.changedFiles ?? [],
|
|
867
|
+
direct: context.options.direct,
|
|
867
868
|
}),
|
|
868
869
|
onDone: {
|
|
869
870
|
target: 'committing',
|
|
@@ -906,7 +907,7 @@ export const wizardMachine = setup({
|
|
|
906
907
|
on: {
|
|
907
908
|
PR_APPROVED: { target: 'generatingPrDescription' },
|
|
908
909
|
PR_DECLINED: { target: 'done' },
|
|
909
|
-
CANCEL: { target: '#
|
|
910
|
+
CANCEL: { target: '#installer.cancelled' },
|
|
910
911
|
},
|
|
911
912
|
},
|
|
912
913
|
generatingPrDescription: {
|
|
@@ -918,6 +919,7 @@ export const wizardMachine = setup({
|
|
|
918
919
|
integration: context.integration ?? 'project',
|
|
919
920
|
files: context.changedFiles ?? [],
|
|
920
921
|
commitMessage: context.commitMessage ?? '',
|
|
922
|
+
direct: context.options.direct,
|
|
921
923
|
}),
|
|
922
924
|
onDone: {
|
|
923
925
|
target: 'pushing',
|
|
@@ -984,4 +986,4 @@ export const wizardMachine = setup({
|
|
|
984
986
|
},
|
|
985
987
|
},
|
|
986
988
|
});
|
|
987
|
-
//# sourceMappingURL=
|
|
989
|
+
//# sourceMappingURL=installer-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer-core.js","sourceRoot":"","sources":["../../src/lib/installer-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { setup, assign, fromPromise, type ActorRefFrom } from 'xstate';\nimport type {\n InstallerMachineContext,\n InstallerMachineInput,\n InstallerMachineEvent,\n DetectionOutput,\n GitCheckOutput,\n AgentOutput,\n EnvFileInfo,\n DiscoveryResult,\n CredentialSource,\n BranchCheckOutput,\n} from './installer-core.types.js';\nimport type { InstallerOptions } from '../utils/types.js';\nimport type { DeviceAuthResult, DeviceAuthResponse } from './device-auth.js';\nimport type { StagingCredentials } from './staging-api.js';\nimport { getManualPrInstructions } from './post-install.js';\nimport { hasGhCli } from '../utils/git-utils.js';\n\nexport const installerMachine = setup({\n types: {\n context: {} as InstallerMachineContext,\n input: {} as InstallerMachineInput,\n events: {} as InstallerMachineEvent,\n },\n\n actions: {\n emitStateEnter: ({ context }, params: { state: string }) => {\n context.emitter.emit('state:enter', { state: params.state });\n },\n emitStateExit: ({ context }, params: { state: string }) => {\n context.emitter.emit('state:exit', { state: params.state });\n },\n emitAuthChecking: ({ context }) => {\n context.emitter.emit('auth:checking', {});\n },\n emitAuthRequired: ({ context }) => {\n context.emitter.emit('auth:required', {});\n },\n emitAuthSuccess: ({ context }) => {\n context.emitter.emit('auth:success', {});\n },\n emitAuthFailure: ({ context }) => {\n const message = context.error?.message ?? 'Authentication failed';\n context.emitter.emit('auth:failure', { message });\n },\n emitDetectionStart: ({ context }) => {\n context.emitter.emit('detection:start', {});\n },\n emitDetectionComplete: ({ context }) => {\n if (context.integration) {\n context.emitter.emit('detection:complete', { integration: context.integration });\n } else {\n context.emitter.emit('detection:none', {});\n }\n },\n emitGitChecking: ({ context }) => {\n context.emitter.emit('git:checking', {});\n },\n emitGitClean: ({ context }) => {\n context.emitter.emit('git:clean', {});\n },\n emitGitDirty: ({ context }) => {\n context.emitter.emit('git:dirty', { files: context.gitDirtyFiles });\n },\n emitGitConfirmed: ({ context }) => {\n context.emitter.emit('git:dirty:confirmed', {});\n },\n emitGitCancelled: ({ context }) => {\n context.emitter.emit('git:dirty:cancelled', {});\n },\n emitBranchChecking: ({ context }) => {\n context.emitter.emit('branch:checking', {});\n },\n emitBranchProtected: ({ context }) => {\n if (context.currentBranch) {\n context.emitter.emit('branch:protected', { branch: context.currentBranch });\n context.emitter.emit('branch:prompt', { branch: context.currentBranch });\n }\n },\n emitBranchCreated: ({ context }, params: { branch: string }) => {\n context.emitter.emit('branch:created', { branch: params.branch });\n },\n emitBranchCreateFailed: ({ context }) => {\n const message = context.error?.message ?? 'Failed to create branch';\n context.emitter.emit('branch:create:failed', { error: message });\n },\n assignBranchResult: assign({\n currentBranch: ({ event }) => {\n const doneEvent = event as unknown as { output: BranchCheckOutput };\n return doneEvent.output?.branch ?? undefined;\n },\n isProtectedBranch: ({ event }) => {\n const doneEvent = event as unknown as { output: BranchCheckOutput };\n return doneEvent.output?.isProtected ?? false;\n },\n }),\n emitCredentialsGathering: ({ context }) => {\n const requiresApiKey = ['nextjs', 'tanstack-start', 'react-router'].includes(context.integration ?? '');\n context.emitter.emit('credentials:gathering', { requiresApiKey });\n context.emitter.emit('credentials:request', { requiresApiKey });\n },\n emitCredentialsFound: ({ context }) => {\n context.emitter.emit('credentials:found', {});\n },\n emitEnvDetected: ({ context }) => {\n context.emitter.emit('credentials:env:detected', { files: context.envFilesDetected ?? [] });\n },\n emitEnvScanPrompt: ({ context }) => {\n context.emitter.emit('credentials:env:prompt', { files: context.envFilesDetected ?? [] });\n },\n emitEnvScanning: ({ context }) => {\n context.emitter.emit('credentials:env:scanning', {});\n },\n emitEnvCredentialsFound: ({ context }) => {\n context.emitter.emit('credentials:env:found', { sourcePath: context.envCredentialPath ?? '.env' });\n },\n emitEnvNotFound: ({ context }) => {\n context.emitter.emit('credentials:env:notfound', {});\n },\n emitDeviceAuthStart: () => {\n // Emitted by actor when it has verification URL\n },\n emitDeviceAuthSuccess: ({ context }) => {\n context.emitter.emit('device:success', { email: undefined });\n },\n emitDeviceAuthError: ({ context }) => {\n const message = context.error?.message ?? 'Device authorization failed';\n context.emitter.emit('device:error', { message });\n },\n emitDeviceTimeout: ({ context }) => {\n context.emitter.emit('device:timeout', {});\n },\n emitStagingFetching: ({ context }) => {\n context.emitter.emit('staging:fetching', {});\n },\n emitStagingSuccess: ({ context }) => {\n context.emitter.emit('staging:success', {});\n },\n emitStagingError: ({ context }) => {\n const message = context.error?.message ?? 'Failed to fetch staging credentials';\n context.emitter.emit('staging:error', { message });\n },\n emitConfigStart: ({ context }) => {\n context.emitter.emit('config:start', {});\n },\n emitConfigComplete: ({ context }) => {\n context.emitter.emit('config:complete', {});\n },\n emitAgentStart: ({ context }) => {\n context.emitter.emit('agent:start', {});\n },\n emitAgentSuccess: ({ context }, params: { summary?: string }) => {\n context.emitter.emit('agent:success', { summary: params.summary });\n context.emitter.emit('complete', { success: true, summary: params.summary });\n },\n emitAgentFailure: ({ context }) => {\n const message = context.error?.message ?? 'Agent execution failed';\n const stack = context.error?.stack;\n context.emitter.emit('agent:failure', { message, stack });\n context.emitter.emit('complete', { success: false });\n },\n assignDetectionResult: assign({\n integration: ({ event }) => {\n const doneEvent = event as unknown as { output: DetectionOutput };\n return doneEvent.output?.integration;\n },\n }),\n assignGitResult: assign({\n gitIsClean: ({ event }) => {\n const doneEvent = event as unknown as { output: GitCheckOutput };\n return doneEvent.output?.isClean ?? true;\n },\n gitDirtyFiles: ({ event }) => {\n const doneEvent = event as unknown as { output: GitCheckOutput };\n return doneEvent.output?.files ?? [];\n },\n }),\n\n assignCredentials: assign({\n credentials: ({ event }) => {\n if (event.type === 'CREDENTIALS_SUBMITTED') {\n return { apiKey: event.apiKey, clientId: event.clientId };\n }\n return undefined;\n },\n }),\n\n assignError: assign({\n error: ({ event }) => {\n if ('error' in event && event.error instanceof Error) {\n return event.error;\n }\n if ('error' in event && typeof event.error === 'object' && event.error !== null) {\n return new Error(String((event.error as { message?: string }).message ?? event.error));\n }\n return new Error('Unknown error');\n },\n }),\n\n emitCancelled: ({ context }) => {\n context.emitter.emit('complete', { success: false, summary: 'Installer cancelled by user' });\n },\n emitError: ({ context }) => {\n const message = context.error?.message ?? 'An unexpected error occurred';\n context.emitter.emit('error', { message, stack: context.error?.stack });\n context.emitter.emit('complete', { success: false });\n },\n // Post-install actions\n assignChangedFiles: assign({\n changedFiles: ({ event }) => {\n const doneEvent = event as unknown as { output: { hasChanges: boolean; files: string[] } };\n return doneEvent.output?.files ?? [];\n },\n }),\n emitChangesDetected: ({ context }) => {\n context.emitter.emit('postinstall:changes', { files: context.changedFiles ?? [] });\n },\n emitNoChanges: ({ context }) => {\n context.emitter.emit('postinstall:nochanges', {});\n },\n emitCommitPrompt: ({ context }) => {\n context.emitter.emit('postinstall:commit:prompt', {});\n },\n emitGeneratingCommitMessage: ({ context }) => {\n context.emitter.emit('postinstall:commit:generating', {});\n },\n assignCommitMessage: assign({\n commitMessage: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitCommitting: ({ context }) => {\n context.emitter.emit('postinstall:commit:committing', { message: context.commitMessage ?? '' });\n },\n emitCommitSuccess: ({ context }) => {\n context.emitter.emit('postinstall:commit:success', { message: context.commitMessage ?? '' });\n },\n emitCommitFailed: ({ context }) => {\n const message = context.error?.message ?? 'Commit failed';\n context.emitter.emit('postinstall:commit:failed', { error: message });\n },\n emitPrPrompt: ({ context }) => {\n context.emitter.emit('postinstall:pr:prompt', {});\n },\n emitGeneratingPrDescription: ({ context }) => {\n context.emitter.emit('postinstall:pr:generating', {});\n },\n assignPrDescription: assign({\n prDescription: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitPushing: ({ context }) => {\n context.emitter.emit('postinstall:pr:pushing', {});\n },\n emitPushFailed: ({ context }) => {\n const message = context.error?.message ?? 'Push failed';\n context.emitter.emit('postinstall:push:failed', { error: message });\n },\n emitCreatingPr: ({ context }) => {\n context.emitter.emit('postinstall:pr:creating', {});\n },\n assignPrUrl: assign({\n prUrl: ({ event }) => {\n const doneEvent = event as unknown as { output: string };\n return doneEvent.output;\n },\n }),\n emitPrCreated: ({ context }) => {\n context.emitter.emit('postinstall:pr:success', { url: context.prUrl ?? '' });\n },\n emitPrFailed: ({ context }) => {\n const message = context.error?.message ?? 'PR creation failed';\n context.emitter.emit('postinstall:pr:failed', { error: message });\n },\n emitManualInstructions: ({ context }) => {\n const branch = context.currentBranch ?? 'HEAD';\n const instructions = getManualPrInstructions(branch);\n context.emitter.emit('postinstall:manual', { instructions });\n },\n emitComplete: ({ context }) => {\n const summary = context.agentSummary ?? 'WorkOS AuthKit installed successfully!';\n context.emitter.emit('complete', { success: true, summary });\n },\n },\n\n guards: {\n shouldSkipAuth: ({ context }) => context.options.skipAuth === true,\n gitIsClean: ({ context }) => context.gitIsClean === true,\n hasCredentials: ({ context }) => context.options.apiKey !== undefined && context.options.clientId !== undefined,\n hasIntegration: ({ context }) => context.integration !== undefined,\n shouldSkipPostInstall: ({ context }) => context.options.noCommit === true,\n hasGhCli: () => hasGhCli(),\n },\n\n actors: {\n checkAuthentication: fromPromise<boolean, { options: InstallerOptions }>(async () => {\n throw new Error('checkAuthentication not implemented - provide via machine.provide()');\n }),\n detectIntegration: fromPromise<DetectionOutput, { options: InstallerOptions }>(async () => {\n throw new Error('detectIntegration not implemented - provide via machine.provide()');\n }),\n checkGitStatus: fromPromise<GitCheckOutput, { installDir: string }>(async () => {\n throw new Error('checkGitStatus not implemented - provide via machine.provide()');\n }),\n configureEnvironment: fromPromise<void, { context: InstallerMachineContext }>(async () => {\n throw new Error('configureEnvironment not implemented - provide via machine.provide()');\n }),\n runAgent: fromPromise<AgentOutput, { context: InstallerMachineContext }>(async () => {\n throw new Error('runAgent not implemented - provide via machine.provide()');\n }),\n // Credential discovery actors\n detectEnvFiles: fromPromise<EnvFileInfo, { installDir: string }>(async () => {\n throw new Error('detectEnvFiles not implemented - provide via machine.provide()');\n }),\n scanEnvFiles: fromPromise<DiscoveryResult, { installDir: string }>(async () => {\n throw new Error('scanEnvFiles not implemented - provide via machine.provide()');\n }),\n checkStoredAuth: fromPromise<boolean, void>(async () => {\n throw new Error('checkStoredAuth not implemented - provide via machine.provide()');\n }),\n runDeviceAuth: fromPromise<\n { result: DeviceAuthResult; deviceAuth: DeviceAuthResponse },\n { emitter: InstallerMachineContext['emitter'] }\n >(async () => {\n throw new Error('runDeviceAuth not implemented - provide via machine.provide()');\n }),\n fetchStagingCredentials: fromPromise<StagingCredentials, void>(async () => {\n throw new Error('fetchStagingCredentials not implemented - provide via machine.provide()');\n }),\n // Branch check actors\n checkBranch: fromPromise<BranchCheckOutput, void>(async () => {\n throw new Error('checkBranch not implemented - provide via machine.provide()');\n }),\n createBranch: fromPromise<{ branch: string }, { name: string; fallbackName: string }>(async () => {\n throw new Error('createBranch not implemented - provide via machine.provide()');\n }),\n // Post-install actors\n detectChanges: fromPromise<{ hasChanges: boolean; files: string[] }, void>(async () => {\n throw new Error('detectChanges not implemented - provide via machine.provide()');\n }),\n generateCommitMessage: fromPromise<string, { integration: string; files: string[]; direct?: boolean }>(async () => {\n throw new Error('generateCommitMessage not implemented - provide via machine.provide()');\n }),\n commitChanges: fromPromise<void, { message: string; cwd: string }>(async () => {\n throw new Error('commitChanges not implemented - provide via machine.provide()');\n }),\n generatePrDescription: fromPromise<\n string,\n { integration: string; files: string[]; commitMessage: string; direct?: boolean }\n >(async () => {\n throw new Error('generatePrDescription not implemented - provide via machine.provide()');\n }),\n pushBranch: fromPromise<void, { cwd: string }>(async () => {\n throw new Error('pushBranch not implemented - provide via machine.provide()');\n }),\n createPr: fromPromise<string, { title: string; body: string; cwd: string }>(async () => {\n throw new Error('createPr not implemented - provide via machine.provide()');\n }),\n },\n}).createMachine({\n id: 'installer',\n initial: 'idle',\n\n context: ({ input }) => ({\n emitter: input.emitter,\n options: input.options,\n integration: input.options.integration,\n credentials:\n input.options.apiKey && input.options.clientId\n ? { apiKey: input.options.apiKey, clientId: input.options.clientId }\n : undefined,\n gitIsClean: true,\n gitDirtyFiles: [],\n error: undefined,\n }),\n\n // Global event handlers - CANCEL can be sent from any state\n on: {\n CANCEL: {\n target: '.cancelled',\n },\n },\n\n states: {\n idle: {\n on: {\n START: [\n {\n target: 'preparing',\n guard: 'shouldSkipAuth',\n actions: { type: 'emitStateEnter', params: { state: 'preparing' } },\n },\n {\n target: 'authenticating',\n actions: { type: 'emitStateEnter', params: { state: 'authenticating' } },\n },\n ],\n },\n },\n\n authenticating: {\n entry: ['emitAuthChecking'],\n invoke: {\n id: 'checkAuthentication',\n src: 'checkAuthentication',\n input: ({ context }) => ({ options: context.options }),\n onDone: {\n target: 'preparing',\n actions: [\n 'emitAuthSuccess',\n { type: 'emitStateExit', params: { state: 'authenticating' } },\n { type: 'emitStateEnter', params: { state: 'preparing' } },\n ],\n },\n onError: {\n target: 'error',\n actions: ['assignError', 'emitAuthFailure', { type: 'emitStateExit', params: { state: 'authenticating' } }],\n },\n },\n },\n\n preparing: {\n type: 'parallel',\n states: {\n detection: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitDetectionStart'],\n invoke: {\n id: 'detectIntegration',\n src: 'detectIntegration',\n input: ({ context }) => ({ options: context.options }),\n onDone: {\n target: 'done',\n actions: ['assignDetectionResult', 'emitDetectionComplete'],\n },\n onError: {\n // Detection failure is non-fatal - user can select manually\n target: 'done',\n actions: ['emitDetectionComplete'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n gitCheck: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitGitChecking'],\n invoke: {\n id: 'checkGitStatus',\n src: 'checkGitStatus',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: {\n target: 'evaluating',\n actions: ['assignGitResult'],\n },\n onError: {\n // Git check failure is non-fatal - treat as clean\n target: 'done',\n },\n },\n },\n evaluating: {\n always: [\n {\n target: 'done',\n guard: 'gitIsClean',\n actions: ['emitGitClean'],\n },\n {\n target: 'awaitingConfirmation',\n actions: ['emitGitDirty'],\n },\n ],\n },\n awaitingConfirmation: {\n on: {\n GIT_CONFIRMED: {\n target: 'done',\n actions: ['emitGitConfirmed'],\n },\n GIT_CANCELLED: {\n target: '#installer.cancelled',\n actions: ['emitGitCancelled'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n branchCheck: {\n initial: 'running',\n states: {\n running: {\n entry: ['emitBranchChecking'],\n invoke: {\n id: 'checkBranch',\n src: 'checkBranch',\n onDone: [\n {\n target: 'awaitingConfirmation',\n guard: ({ event }) => (event.output as BranchCheckOutput).isProtected,\n actions: ['assignBranchResult', 'emitBranchProtected'],\n },\n {\n target: 'done',\n actions: ['assignBranchResult'],\n },\n ],\n onError: {\n // Branch check failure is non-fatal\n target: 'done',\n },\n },\n },\n awaitingConfirmation: {\n on: {\n BRANCH_CREATE: {\n target: 'creating',\n },\n BRANCH_CONTINUE: {\n target: 'done',\n },\n BRANCH_CANCEL: {\n target: '#installer.cancelled',\n },\n },\n },\n creating: {\n invoke: {\n id: 'createBranch',\n src: 'createBranch',\n input: () => ({\n name: 'feat/add-workos-authkit',\n fallbackName: `feat/add-workos-authkit-${Date.now()}`,\n }),\n onDone: {\n target: 'done',\n actions: [\n {\n type: 'emitBranchCreated',\n params: ({ event }) => ({ branch: (event.output as { branch: string }).branch }),\n },\n ],\n },\n onError: {\n // Branch creation failure is non-fatal\n target: 'done',\n actions: ['assignError', 'emitBranchCreateFailed'],\n },\n },\n },\n done: {\n type: 'final',\n },\n },\n },\n },\n onDone: [\n {\n target: 'gatheringCredentials',\n guard: 'hasIntegration',\n actions: { type: 'emitStateExit', params: { state: 'preparing' } },\n },\n {\n target: 'error',\n actions: [\n assign({ error: () => new Error('Could not detect framework integration') }),\n { type: 'emitStateExit', params: { state: 'preparing' } },\n ],\n },\n ],\n },\n\n gatheringCredentials: {\n entry: [{ type: 'emitStateEnter', params: { state: 'gatheringCredentials' } }],\n initial: 'checkingCliFlags',\n states: {\n // Step 1: Check CLI flags (highest priority)\n checkingCliFlags: {\n always: [\n {\n target: '#installer.configuring',\n guard: 'hasCredentials',\n actions: [\n assign({ credentialSource: () => 'cli' as CredentialSource }),\n 'emitCredentialsFound',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n { target: 'detectingEnvFiles' },\n ],\n },\n\n // Step 2: Check if env files exist (don't read yet)\n detectingEnvFiles: {\n invoke: {\n id: 'detectEnvFiles',\n src: 'detectEnvFiles',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: [\n {\n target: 'promptingEnvScan',\n guard: ({ event }) => {\n const output = event.output as EnvFileInfo;\n return output.exists;\n },\n actions: [\n assign({\n envFilesDetected: ({ event }) => {\n const output = event.output as EnvFileInfo;\n return output.files;\n },\n }),\n 'emitEnvDetected',\n ],\n },\n { target: 'checkingStoredAuth' },\n ],\n onError: {\n target: 'checkingStoredAuth', // Non-fatal, continue\n },\n },\n },\n\n // Step 3: Ask user for consent to scan env files\n promptingEnvScan: {\n entry: ['emitEnvScanPrompt'],\n on: {\n ENV_SCAN_APPROVED: {\n target: 'scanningEnvFiles',\n actions: assign({ envScanConsent: () => true }),\n },\n ENV_SCAN_DECLINED: {\n target: 'checkingStoredAuth',\n actions: assign({ envScanConsent: () => false }),\n },\n CANCEL: {\n target: '#installer.cancelled',\n actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n },\n },\n },\n\n // Step 4: Scan env files for credentials (with consent)\n scanningEnvFiles: {\n entry: ['emitEnvScanning'],\n invoke: {\n id: 'scanEnvFiles',\n src: 'scanEnvFiles',\n input: ({ context }) => ({ installDir: context.options.installDir }),\n onDone: [\n {\n target: '#installer.configuring',\n guard: ({ event }) => {\n const result = event.output as DiscoveryResult;\n return result.found && !!result.clientId;\n },\n actions: [\n assign({\n credentials: ({ event }) => {\n const result = event.output as DiscoveryResult;\n return { clientId: result.clientId!, apiKey: result.apiKey };\n },\n credentialSource: () => 'env' as CredentialSource,\n envCredentialPath: ({ event }) => (event.output as DiscoveryResult).sourcePath,\n }),\n 'emitEnvCredentialsFound',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n {\n target: 'checkingStoredAuth',\n actions: ['emitEnvNotFound'],\n },\n ],\n onError: {\n target: 'checkingStoredAuth',\n },\n },\n },\n\n // Step 5: Check for stored auth token\n checkingStoredAuth: {\n invoke: {\n id: 'checkStoredAuth',\n src: 'checkStoredAuth',\n onDone: [\n {\n target: 'fetchingStagingCredentials',\n guard: ({ event }) => event.output === true,\n },\n { target: 'runningDeviceAuth' },\n ],\n onError: {\n target: 'runningDeviceAuth',\n },\n },\n },\n\n // Step 6: Run device authorization flow\n runningDeviceAuth: {\n entry: ['emitDeviceAuthStart'],\n invoke: {\n id: 'runDeviceAuth',\n src: 'runDeviceAuth',\n input: ({ context }) => ({ emitter: context.emitter }),\n onDone: {\n target: 'fetchingStagingCredentials',\n actions: [\n 'emitDeviceAuthSuccess',\n assign({\n deviceAuth: ({ event }) => {\n const output = event.output as { result: DeviceAuthResult; deviceAuth: DeviceAuthResponse };\n return {\n verificationUri: output.deviceAuth.verification_uri,\n verificationUriComplete: output.deviceAuth.verification_uri_complete,\n userCode: output.deviceAuth.user_code,\n };\n },\n }),\n ],\n },\n onError: {\n target: 'promptingManual',\n actions: ['assignError', 'emitDeviceAuthError'],\n },\n },\n },\n\n // Step 7: Fetch staging credentials from API\n fetchingStagingCredentials: {\n entry: ['emitStagingFetching'],\n invoke: {\n id: 'fetchStagingCredentials',\n src: 'fetchStagingCredentials',\n onDone: {\n target: '#installer.configuring',\n actions: [\n assign({\n credentials: ({ event }) => {\n const staging = event.output as StagingCredentials;\n return { clientId: staging.clientId, apiKey: staging.apiKey };\n },\n credentialSource: ({ context }) =>\n context.deviceAuth ? ('device' as CredentialSource) : ('stored' as CredentialSource),\n }),\n 'emitStagingSuccess',\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n onError: {\n target: 'promptingManual',\n actions: ['assignError', 'emitStagingError'],\n },\n },\n },\n\n // Step 8: Manual fallback\n promptingManual: {\n entry: ['emitCredentialsGathering'],\n on: {\n CREDENTIALS_SUBMITTED: {\n target: '#installer.configuring',\n actions: [\n 'assignCredentials',\n assign({ credentialSource: () => 'manual' as CredentialSource }),\n { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n ],\n },\n RETRY_AUTH: {\n target: 'runningDeviceAuth',\n },\n CANCEL: {\n target: '#installer.cancelled',\n actions: { type: 'emitStateExit', params: { state: 'gatheringCredentials' } },\n },\n },\n },\n },\n },\n\n configuring: {\n entry: [{ type: 'emitStateEnter', params: { state: 'configuring' } }, 'emitConfigStart'],\n invoke: {\n id: 'configureEnvironment',\n src: 'configureEnvironment',\n input: ({ context }) => ({ context }),\n onDone: {\n target: 'runningAgent',\n actions: ['emitConfigComplete', { type: 'emitStateExit', params: { state: 'configuring' } }],\n },\n onError: {\n target: 'error',\n actions: ['assignError', { type: 'emitStateExit', params: { state: 'configuring' } }],\n },\n },\n },\n\n runningAgent: {\n entry: [{ type: 'emitStateEnter', params: { state: 'runningAgent' } }, 'emitAgentStart'],\n invoke: {\n id: 'runAgent',\n src: 'runAgent',\n input: ({ context }) => ({ context }),\n onDone: [\n {\n target: 'error',\n guard: ({ event }) => {\n const output = event.output as AgentOutput;\n return !output.success;\n },\n actions: [\n ({ context, event }) => {\n const output = event.output as AgentOutput;\n context.emitter.emit('agent:failure', {\n message: output.error?.message ?? 'Agent failed',\n });\n },\n assign({\n error: ({ event }) => {\n const output = event.output as AgentOutput;\n return output.error ?? new Error('Agent failed');\n },\n }),\n { type: 'emitStateExit', params: { state: 'runningAgent' } },\n ],\n },\n {\n target: 'postInstall',\n actions: [\n assign({\n agentSummary: ({ event }) => {\n const output = event.output as AgentOutput;\n return output.summary;\n },\n }),\n ({ context, event }) => {\n const output = event.output as AgentOutput;\n context.emitter.emit('agent:success', { summary: output.summary });\n },\n { type: 'emitStateExit', params: { state: 'runningAgent' } },\n ],\n },\n ],\n onError: {\n target: 'error',\n actions: ['assignError', 'emitAgentFailure', { type: 'emitStateExit', params: { state: 'runningAgent' } }],\n },\n },\n },\n\n postInstall: {\n initial: 'checking',\n entry: [{ type: 'emitStateEnter', params: { state: 'postInstall' } }],\n states: {\n checking: {\n always: [\n {\n target: '#installer.complete',\n guard: 'shouldSkipPostInstall',\n },\n { target: 'detectingChanges' },\n ],\n },\n\n detectingChanges: {\n invoke: {\n id: 'detectChanges',\n src: 'detectChanges',\n onDone: [\n {\n target: 'promptingCommit',\n guard: ({ event }) => (event.output as { hasChanges: boolean; files: string[] }).hasChanges,\n actions: ['assignChangedFiles', 'emitChangesDetected'],\n },\n {\n target: 'done',\n actions: ['emitNoChanges'],\n },\n ],\n onError: { target: 'done' },\n },\n },\n\n promptingCommit: {\n entry: ['emitCommitPrompt'],\n on: {\n COMMIT_APPROVED: { target: 'generatingCommitMessage' },\n COMMIT_DECLINED: { target: 'done' },\n CANCEL: { target: '#installer.cancelled' },\n },\n },\n\n generatingCommitMessage: {\n entry: ['emitGeneratingCommitMessage'],\n invoke: {\n id: 'generateCommitMessage',\n src: 'generateCommitMessage',\n input: ({ context }) => ({\n integration: context.integration ?? 'project',\n files: context.changedFiles ?? [],\n direct: context.options.direct,\n }),\n onDone: {\n target: 'committing',\n actions: ['assignCommitMessage'],\n },\n },\n },\n\n committing: {\n entry: ['emitCommitting'],\n invoke: {\n id: 'commitChanges',\n src: 'commitChanges',\n input: ({ context }) => ({\n message: context.commitMessage ?? '',\n cwd: context.options.installDir,\n }),\n onDone: {\n target: 'checkingGhCli',\n actions: ['emitCommitSuccess'],\n },\n onError: {\n target: 'done',\n actions: ['assignError', 'emitCommitFailed'],\n },\n },\n },\n\n checkingGhCli: {\n always: [\n {\n target: 'promptingPr',\n guard: 'hasGhCli',\n },\n {\n target: 'showingManualInstructions',\n },\n ],\n },\n\n promptingPr: {\n entry: ['emitPrPrompt'],\n on: {\n PR_APPROVED: { target: 'generatingPrDescription' },\n PR_DECLINED: { target: 'done' },\n CANCEL: { target: '#installer.cancelled' },\n },\n },\n\n generatingPrDescription: {\n entry: ['emitGeneratingPrDescription'],\n invoke: {\n id: 'generatePrDescription',\n src: 'generatePrDescription',\n input: ({ context }) => ({\n integration: context.integration ?? 'project',\n files: context.changedFiles ?? [],\n commitMessage: context.commitMessage ?? '',\n direct: context.options.direct,\n }),\n onDone: {\n target: 'pushing',\n actions: ['assignPrDescription'],\n },\n },\n },\n\n pushing: {\n entry: ['emitPushing'],\n invoke: {\n id: 'pushBranch',\n src: 'pushBranch',\n input: ({ context }) => ({ cwd: context.options.installDir }),\n onDone: { target: 'creatingPr' },\n onError: {\n target: 'showingManualInstructions',\n actions: ['assignError', 'emitPushFailed'],\n },\n },\n },\n\n creatingPr: {\n entry: ['emitCreatingPr'],\n invoke: {\n id: 'createPr',\n src: 'createPr',\n input: ({ context }) => ({\n title: context.commitMessage ?? '',\n body: context.prDescription ?? '',\n cwd: context.options.installDir,\n }),\n onDone: {\n target: 'done',\n actions: ['assignPrUrl', 'emitPrCreated'],\n },\n onError: {\n target: 'done',\n actions: ['assignError', 'emitPrFailed'],\n },\n },\n },\n\n showingManualInstructions: {\n entry: ['emitManualInstructions'],\n always: { target: 'done' },\n },\n\n done: {\n type: 'final',\n },\n },\n onDone: {\n target: 'complete',\n },\n },\n\n complete: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'complete' } }, 'emitComplete'],\n },\n\n cancelled: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'cancelled' } }, 'emitCancelled'],\n },\n\n error: {\n type: 'final',\n entry: [{ type: 'emitStateEnter', params: { state: 'error' } }, 'emitError'],\n },\n },\n});\n\nexport type InstallerMachine = typeof installerMachine;\nexport type InstallerActor = ActorRefFrom<typeof installerMachine>;\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { InstallerEventEmitter } from './events.js';
|
|
2
|
+
import type { InstallerOptions } from '../utils/types.js';
|
|
3
3
|
import type { Integration } from './constants.js';
|
|
4
4
|
import type { DeviceAuthResponse } from './device-auth.js';
|
|
5
5
|
import type { EnvFileInfo, DiscoveryResult } from './credential-discovery.js';
|
|
@@ -13,11 +13,11 @@ export type CredentialSource = 'cli' | 'env' | 'stored' | 'device' | 'manual';
|
|
|
13
13
|
* Context passed to the wizard state machine.
|
|
14
14
|
* Contains all data needed throughout the wizard flow.
|
|
15
15
|
*/
|
|
16
|
-
export interface
|
|
16
|
+
export interface InstallerMachineContext {
|
|
17
17
|
/** Event emitter for UI communication */
|
|
18
|
-
emitter:
|
|
18
|
+
emitter: InstallerEventEmitter;
|
|
19
19
|
/** CLI options from command line args */
|
|
20
|
-
options:
|
|
20
|
+
options: InstallerOptions;
|
|
21
21
|
/** Detected or selected framework integration */
|
|
22
22
|
integration: Integration | undefined;
|
|
23
23
|
/** WorkOS credentials gathered from user */
|
|
@@ -64,14 +64,14 @@ export interface WizardMachineContext {
|
|
|
64
64
|
* Input provided when creating the machine actor.
|
|
65
65
|
* These values initialize the context.
|
|
66
66
|
*/
|
|
67
|
-
export interface
|
|
68
|
-
emitter:
|
|
69
|
-
options:
|
|
67
|
+
export interface InstallerMachineInput {
|
|
68
|
+
emitter: InstallerEventEmitter;
|
|
69
|
+
options: InstallerOptions;
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
72
|
* All events the wizard machine can receive.
|
|
73
73
|
*/
|
|
74
|
-
export type
|
|
74
|
+
export type InstallerMachineEvent = {
|
|
75
75
|
type: 'START';
|
|
76
76
|
} | {
|
|
77
77
|
type: 'SKIP_AUTH';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer-core.types.js","sourceRoot":"","sources":["../../src/lib/installer-core.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { InstallerEventEmitter } from './events.js';\nimport type { InstallerOptions } from '../utils/types.js';\nimport type { Integration } from './constants.js';\nimport type { DeviceAuthResponse } from './device-auth.js';\nimport type { EnvFileInfo, DiscoveryResult } from './credential-discovery.js';\n\nexport type { EnvFileInfo, DiscoveryResult };\nexport type { DeviceAuthResponse };\n\n/**\n * How credentials were resolved.\n */\nexport type CredentialSource = 'cli' | 'env' | 'stored' | 'device' | 'manual';\n\n/**\n * Context passed to the wizard state machine.\n * Contains all data needed throughout the wizard flow.\n */\nexport interface InstallerMachineContext {\n /** Event emitter for UI communication */\n emitter: InstallerEventEmitter;\n /** CLI options from command line args */\n options: InstallerOptions;\n /** Detected or selected framework integration */\n integration: Integration | undefined;\n /** WorkOS credentials gathered from user */\n credentials: { apiKey?: string; clientId: string } | undefined;\n /** Whether git working directory is clean */\n gitIsClean: boolean;\n /** List of dirty git files (if any) */\n gitDirtyFiles: string[];\n /** Error that caused failure (if any) */\n error: Error | undefined;\n /** How credentials were resolved */\n credentialSource?: CredentialSource;\n /** Device auth state for UI display */\n deviceAuth?: {\n verificationUri: string;\n verificationUriComplete: string;\n userCode: string;\n };\n /** Whether user consented to env file scanning */\n envScanConsent?: boolean;\n /** Env files detected in project (before consent) */\n envFilesDetected?: string[];\n /** Path to env file where credentials were found */\n envCredentialPath?: string;\n /** Current git branch name */\n currentBranch?: string;\n /** Whether current branch is protected */\n isProtectedBranch?: boolean;\n /** Files changed during agent execution (for post-install) */\n changedFiles?: string[];\n /** AI-generated commit message */\n commitMessage?: string;\n /** AI-generated PR description */\n prDescription?: string;\n /** URL of created PR */\n prUrl?: string;\n /** Summary message from agent execution */\n agentSummary?: string;\n}\n\n/**\n * Input provided when creating the machine actor.\n * These values initialize the context.\n */\nexport interface InstallerMachineInput {\n emitter: InstallerEventEmitter;\n options: InstallerOptions;\n}\n\n/**\n * All events the wizard machine can receive.\n */\nexport type InstallerMachineEvent =\n | { type: 'START' }\n | { type: 'SKIP_AUTH' }\n | { type: 'GIT_CONFIRMED' }\n | { type: 'GIT_CANCELLED' }\n | { type: 'CREDENTIALS_SUBMITTED'; apiKey: string; clientId: string }\n | { type: 'CANCEL' }\n // Credential discovery events\n | { type: 'ENV_SCAN_APPROVED' }\n | { type: 'ENV_SCAN_DECLINED' }\n | { type: 'RETRY_AUTH' }\n // Branch check events\n | { type: 'BRANCH_CREATE' }\n | { type: 'BRANCH_CONTINUE' }\n | { type: 'BRANCH_CANCEL' }\n // Post-install events\n | { type: 'COMMIT_APPROVED' }\n | { type: 'COMMIT_DECLINED' }\n | { type: 'PR_APPROVED' }\n | { type: 'PR_DECLINED' };\n\n/**\n * Output from the detection actor.\n */\nexport interface DetectionOutput {\n integration: Integration | undefined;\n}\n\n/**\n * Output from the git check actor.\n */\nexport interface GitCheckOutput {\n isClean: boolean;\n files: string[];\n}\n\n/**\n * Output from the agent actor.\n */\nexport interface AgentOutput {\n success: boolean;\n summary?: string;\n error?: Error;\n}\n\n/**\n * Output from the branch check actor.\n */\nexport interface BranchCheckOutput {\n branch: string | null;\n isProtected: boolean;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-detection.js","sourceRoot":"","sources":["../../src/lib/port-detection.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport { join } from 'node:path';\nimport type { Integration } from './constants.js';\nimport { getConfig } from './settings.js';\n\nconst settings = getConfig();\n\nconst INTEGRATION_TO_SETTINGS_KEY: Record<Integration, string> = {\n nextjs: 'nextjs',\n react: 'react',\n 'tanstack-start': 'tanstackStart',\n 'react-router': 'reactRouter',\n 'vanilla-js': 'vanillaJs',\n};\n\nfunction getDefaultPort(integration: Integration): number {\n const settingsKey = INTEGRATION_TO_SETTINGS_KEY[integration];\n return settings.frameworks[settingsKey].port;\n}\n\nexport function getCallbackPath(integration: Integration): string {\n const settingsKey = INTEGRATION_TO_SETTINGS_KEY[integration];\n return settings.frameworks[settingsKey].callbackPath;\n}\n\n/**\n * Parse port from Vite config file.\n * Looks for server.port in vite.config.{ts,js,mjs}\n */\nfunction parseViteConfigPort(configPath: string): number | null {\n try {\n const content = fs.readFileSync(configPath, 'utf-8');\n // Match: port: 3000 or port: \"3000\" or port: '3000'\n const portMatch = content.match(/port\\s*:\\s*['\"]?(\\d+)['\"]?/);\n if (portMatch) {\n return parseInt(portMatch[1], 10);\n }\n } catch {\n // File doesn't exist or can't be read\n }\n return null;\n}\n\n/**\n * Parse port from Next.js package.json scripts.\n * Next.js uses: \"dev\": \"next dev -p 4000\" or --port 4000\n */\nfunction parseNextConfigPort(installDir: string): number | null {\n try {\n const packageJsonPath = join(installDir, 'package.json');\n const content = fs.readFileSync(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(content);\n\n const devScript = packageJson.scripts?.dev || '';\n // Match: -p 4000, --port 4000, --port=4000\n const portMatch = devScript.match(/-p\\s+(\\d+)|--port[=\\s]+(\\d+)/);\n if (portMatch) {\n return parseInt(portMatch[1] || portMatch[2], 10);\n }\n } catch {\n // Can't read package.json\n }\n return null;\n}\n\n/**\n * Parse port from TanStack Start app.config.ts.\n * Uses Vinxi: server: { port: N }\n */\nfunction parseTanStackPort(installDir: string): number | null {\n const configPaths = [join(installDir, 'app.config.ts'), join(installDir, 'app.config.js')];\n\n for (const configPath of configPaths) {\n try {\n const content = fs.readFileSync(configPath, 'utf-8');\n // Match server config with port\n const portMatch = content.match(/server\\s*:\\s*\\{[^}]*port\\s*:\\s*(\\d+)/);\n if (portMatch) {\n return parseInt(portMatch[1], 10);\n }\n } catch {\n // Config file doesn't exist\n }\n }\n return null;\n}\n\n/**\n * Detect the dev server port for a framework.\n * Checks config files first, falls back to framework default.\n */\nexport function detectPort(integration: Integration, installDir: string): number {\n let detectedPort: number | null = null;\n\n switch (integration) {\n case 'nextjs':\n detectedPort = parseNextConfigPort(installDir);\n break;\n\n case 'tanstack-start':\n detectedPort = parseTanStackPort(installDir);\n break;\n\n case 'react':\n case 'react-router':\n case 'vanilla-js': {\n // Vite-based frameworks\n const viteConfigs = [\n join(installDir, 'vite.config.ts'),\n join(installDir, 'vite.config.js'),\n join(installDir, 'vite.config.mjs'),\n ];\n for (const configPath of viteConfigs) {\n detectedPort = parseViteConfigPort(configPath);\n if (detectedPort) break;\n }\n break;\n }\n }\n\n return detectedPort ?? getDefaultPort(integration);\n}\n"]}
|